[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C2KJBW09QBAAWCDZHD88Q0":3,"skill-same:01M6C2KJBW09QBAAWCDZHD88Q0":66},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":49,"ownerDescription":50,"updatedAt":51,"install":52,"resources":65},"01M6C2KJBW09QBAAWCDZHD88Q0","devkit-test",null,"Auto-fix discoverable issues","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Faiwg-dev\u002Fskills\u002Fdevkit-test\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33],"test","devkit test","devkit","issues","fix","auto","auto-fix","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: devkit-test\nplatforms: [all]\ndescription: Auto-fix discoverable issues\n---\n\n# Test AIWG Package\n\nRun comprehensive tests on an AIWG package to verify structure, functionality, and deployment readiness.\n\n## Process\n\n### 1. Locate and Identify Package\n\nResolve the package path from `$ARGUMENTS`:\n- If relative path, resolve from current directory\n- If package name, look in addons\u002F and frameworks\u002F\n\nIdentify package type from manifest.json:\n- `\"type\": \"addon\"` → Addon tests\n- `\"type\": \"framework\"` → Framework tests\n- `\"type\": \"extension\"` → Extension tests\n\n### 2. Run Structure Tests\n\n**Manifest Validation**:\n- [ ] manifest.json exists and is valid JSON\n- [ ] Required fields present: id, type, name, version, description\n- [ ] Entry paths exist and match actual directories\n- [ ] Component arrays match actual files\n\n**Directory Structure**:\n- [ ] Expected directories exist (agents\u002F, commands\u002F, etc.)\n- [ ] No orphaned files outside expected structure\n- [ ] README.md exists and is non-empty\n\n**Component Files**:\n- [ ] All agents listed in manifest exist as .md files\n- [ ] All commands listed in manifest exist as .md files\n- [ ] All skills listed in manifest have SKILL.md\n- [ ] All templates listed in manifest exist\n\n### 3. Run Content Tests\n\n**Agent Validation**:\nFor each agent file:\n- [ ] Valid YAML frontmatter with name, description, model, tools\n- [ ] Model is valid (sonnet, opus, haiku)\n- [ ] Tools list contains valid tool names\n- [ ] Content sections present (Domain Expertise, Responsibilities, etc.)\n\n**Command Validation**:\nFor each command file:\n- [ ] Valid YAML frontmatter with name, description\n- [ ] Args defined with name and description\n- [ ] Process section present\n- [ ] No broken internal references\n\n**Skill Validation**:\nFor each skill:\n- [ ] SKILL.md has valid frontmatter\n- [ ] Trigger phrases defined\n- [ ] Execution process documented\n- [ ] References directory exists (if referenced)\n\n### 4. Run Type-Specific Tests\n\n**Addon Tests**:\n- [ ] No `requires` field (addons are standalone)\n- [ ] Can be deployed independently\n\n**Extension Tests**:\n- [ ] `requires` field present and valid\n- [ ] Parent framework exists\n- [ ] Located in correct extensions\u002F subdirectory\n\n**Framework Tests**:\n- [ ] Phases defined in manifest\n- [ ] Flow documents exist for each phase\n- [ ] actors-and-templates.md exists\n- [ ] config\u002Fmodels.json exists\n- [ ] metrics\u002Ftracking-catalog.md exists\n\n### 5. Run Deployment Test\n\nSimulate deployment to temporary directory:\n```bash\n# Create temp test directory\nmkdir -p \u002Ftmp\u002Faiwg-test-$$\n\n# Attempt deployment\naiwg -deploy-agents --source \u003Cpackage-path> --target \u002Ftmp\u002Faiwg-test-$$ --dry-run\n\n# Check expected output structure\n```\n\n### 6. Auto-Fix (if --fix)\n\nWhen `--fix` is specified, attempt to repair:\n\n**Fixable Issues**:\n- Missing directories → Create them\n- Manifest component arrays out of sync → Update from files\n- Missing README.md → Generate from manifest\n- Invalid JSON formatting → Reformat\n\n**Non-Fixable Issues** (report only):\n- Missing required fields in manifest\n- Invalid agent\u002Fcommand content\n- Missing parent framework (extensions)\n\n### 7. Generate Report\n\n**Summary Format**:\n```\nPackage Test: \u003Cpackage-id>\nType: \u003Caddon|extension|framework>\n─────────────────────────────────\n\nStructure Tests: \u003Cpass\u002Ffail count>\nContent Tests: \u003Cpass\u002Ffail count>\nType Tests: \u003Cpass\u002Ffail count>\nDeployment Test: \u003Cpass\u002Ffail>\n\nOverall: \u003CPASS|FAIL>\n```\n\n**Detailed Format (--verbose)**:\n```\nPackage Test: \u003Cpackage-id>\n─────────────────────────────────\n\n[Structure Tests]\n  ✓ manifest.json exists\n  ✓ manifest.json is valid JSON\n  ✓ Required fields present\n  ✓ agents\u002F directory exists\n  ✗ commands\u002F directory missing\n  ...\n\n[Content Tests]\n  ✓ agent-one.md: valid frontmatter\n  ✓ agent-one.md: valid model (sonnet)\n  ✗ agent-two.md: missing tools field\n  ...\n\n[Type Tests]\n  ✓ No requires field (addon)\n  ...\n\n[Deployment Test]\n  ✓ Dry-run deployment successful\n\n[Issues Found]\n  ERROR: commands\u002F directory missing\n  WARNING: agent-two.md missing tools field\n\n[Auto-Fixed] (if --fix)\n  ✓ Created commands\u002F directory\n```\n\n## Exit Codes\n\n- 0: All tests passed\n- 1: Tests failed (fixable issues remain)\n- 2: Tests failed (non-fixable issues)\n\n## Examples\n\n```bash\n# Test addon\n\u002Fdevkit-test aiwg-utils\n\n# Test with verbose output\n\u002Fdevkit-test sdlc-complete --verbose\n\n# Test and auto-fix\n\u002Fdevkit-test my-addon --fix --verbose\n\n# Test extension\n\u002Fdevkit-test sdlc-complete\u002Fextensions\u002Fhipaa\n```\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002FREADME.md — aiwg-dev addon overview\n- @$AIWG_ROOT\u002Fdocs\u002Fextensions\u002Foverview.md — Extension system architecture and package types\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference including validate-metadata command\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Verification-before-action pattern\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002FREADME.md — SDLC framework as example test target\n","# Test AIWG Package\n\nRun comprehensive tests on an AIWG package to verify structure, functionality, and deployment readiness.\n\n## Process\n\n### 1. Locate and Identify Package\n\nResolve the package path from `$ARGUMENTS`:\n- If relative path, resolve from current directory\n- If package name, look in addons\u002F and frameworks\u002F\n\nIdentify package type from manifest.json:\n- `\"type\": \"addon\"` → Addon tests\n- `\"type\": \"framework\"` → Framework tests\n- `\"type\": \"extension\"` → Extension tests\n\n### 2. Run Structure Tests\n\n**Manifest Validation**:\n- [ ] manifest.json exists and is valid JSON\n- [ ] Required fields present: id, type, name, version, description\n- [ ] Entry paths exist and match actual directories\n- [ ] Component arrays match actual files\n\n**Directory Structure**:\n- [ ] Expected directories exist (agents\u002F, commands\u002F, etc.)\n- [ ] No orphaned files outside expected structure\n- [ ] README.md exists and is non-empty\n\n**Component Files**:\n- [ ] All agents listed in manifest exist as .md files\n- [ ] All commands listed in manifest exist as .md files\n- [ ] All skills listed in manifest have SKILL.md\n- [ ] All templates listed in manifest exist\n\n### 3. Run Content Tests\n\n**Agent Validation**:\nFor each agent file:\n- [ ] Valid YAML frontmatter with name, description, model, tools\n- [ ] Model is valid (sonnet, opus, haiku)\n- [ ] Tools list contains valid tool names\n- [ ] Content sections present (Domain Expertise, Responsibilities, etc.)\n\n**Command Validation**:\nFor each command file:\n- [ ] Valid YAML frontmatter with name, description\n- [ ] Args defined with name and description\n- [ ] Process section present\n- [ ] No broken internal references\n\n**Skill Validation**:\nFor each skill:\n- [ ] SKILL.md has valid frontmatter\n- [ ] Trigger phrases defined\n- [ ] Execution process documented\n- [ ] References directory exists (if referenced)\n\n### 4. Run Type-Specific Tests\n\n**Addon Tests**:\n- [ ] No `requires` field (addons are standalone)\n- [ ] Can be deployed independently\n\n**Extension Tests**:\n- [ ] `requires` field present and valid\n- [ ] Parent framework exists\n- [ ] Located in correct extensions\u002F subdirectory\n\n**Framework Tests**:\n- [ ] Phases defined in manifest\n- [ ] Flow documents exist for each phase\n- [ ] actors-and-templates.md exists\n- [ ] config\u002Fmodels.json exists\n- [ ] metrics\u002Ftracking-catalog.md exists\n\n### 5. Run Deployment Test\n\nSimulate deployment to temporary directory:\n```bash\n# Create temp test directory\nmkdir -p \u002Ftmp\u002Faiwg-test-$$\n\n# Attempt deployment\naiwg -deploy-agents --source \u003Cpackage-path> --target \u002Ftmp\u002Faiwg-test-$$ --dry-run\n\n# Check expected output structure\n```\n\n### 6. Auto-Fix (if --fix)\n\nWhen `--fix` is specified, attempt to repair:\n\n**Fixable Issues**:\n- Missing directories → Create them\n- Manifest component arrays out of sync → Update from files\n- Missing README.md → Generate from manifest\n- Invalid JSON formatting → Reformat\n\n**Non-Fixable Issues** (report only):\n- Missing required fields in manifest\n- Invalid agent\u002Fcommand content\n- Missing parent framework (extensions)\n\n### 7. Generate Report\n\n**Summary Format**:\n```\nPackage Test: \u003Cpackage-id>\nType: \u003Caddon|extension|framework>\n─────────────────────────────────\n\nStructure Tests: \u003Cpass\u002Ffail count>\nContent Tests: \u003Cpass\u002Ffail count>\nType Tests: \u003Cpass\u002Ffail count>\nDeployment Test: \u003Cpass\u002Ffail>\n\nOverall: \u003CPASS|FAIL>\n```\n\n**Detailed Format (--verbose)**:\n```\nPackage Test: \u003Cpackage-id>\n─────────────────────────────────\n\n[Structure Tests]\n  ✓ manifest.json exists\n  ✓ manifest.json is valid JSON\n  ✓ Required fields present\n  ✓ agents\u002F directory exists\n  ✗ commands\u002F directory missing\n  ...\n\n[Content Tests]\n  ✓ agent-one.md: valid frontmatter\n  ✓ agent-one.md: valid model (sonnet)\n  ✗ agent-two.md: missing tools field\n  ...\n\n[Type Tests]\n  ✓ No requires field (addon)\n  ...\n\n[Deployment Test]\n  ✓ Dry-run deployment successful\n\n[Issues Found]\n  ERROR: commands\u002F directory missing\n  WARNING: agent-two.md missing tools field\n\n[Auto-Fixed] (if --fix)\n  ✓ Created commands\u002F directory\n```\n\n## Exit Codes\n\n- 0: All tests passed\n- 1: Tests failed (fixable issues remain)\n- 2: Tests failed (non-fixable issues)\n\n## Examples\n\n```bash\n# Test addon\n\u002Fdevkit-test aiwg-utils\n\n# Test with verbose output\n\u002Fdevkit-test sdlc-complete --verbose\n\n# Test and auto-fix\n\u002Fdevkit-test my-addon --fix --verbose\n\n# Test extension\n\u002Fdevkit-test sdlc-complete\u002Fextensions\u002Fhipaa\n```\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002FREADME.md — aiwg-dev addon overview\n- @$AIWG_ROOT\u002Fdocs\u002Fextensions\u002Foverview.md — Extension system architecture and package types\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference including validate-metadata command\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Verification-before-action pattern\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002FREADME.md — SDLC framework as example test target\n",{"name":5,"namespace":39,"platforms":40,"description":7},"aiwg",[41],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Faiwg-dev\u002Fskills\u002Fdevkit-test",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-14 02:10:01",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add jmagly\u002Faiwg --skill devkit-test",{"tool":58,"command":59},"bunx","bunx skills add jmagly\u002Faiwg --skill devkit-test",{"tool":61,"command":62},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill devkit-test","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Faiwg-dev\u002Fskills\u002Fdevkit-test\u002FSKILL.md",true,[],[67,95,119,125,132,146],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":74,"publishedAt":34},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[73],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":105,"publishedAt":34},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[101,104],{"categoryNo":102,"categoryName":103,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[106,107,108,78,109,83,110,111,85,112,75,113,87,114,115,90,91,116,117,118],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":120,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":124,"publishedAt":34},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[123],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[77,75,76,86,78,94,81,80,89,82,83,84,85,93,87,88,79,90,91,92],{"skillNo":126,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":131,"publishedAt":34},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[129,130],{"categoryNo":102,"categoryName":103,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[107,106,90,109,83,110,85,108,75,113,87,114,115,78,91,112,111,116,117,118],{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":139,"publishedAt":34},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[138],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[140,141,142,143,144,145],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":153,"publishedAt":34},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[152],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[154,155,114,156,141],"pi","pi local","duplicate"]