@agents-inc/cli 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +462 -0
- package/LICENSE +21 -0
- package/README.md +179 -0
- package/config/skills-matrix.yaml +926 -0
- package/config/stacks.yaml +2186 -0
- package/dist/chunk-3ZOIOVKT.js +365 -0
- package/dist/chunk-3ZOIOVKT.js.map +1 -0
- package/dist/chunk-4RAY5AOI.js +78 -0
- package/dist/chunk-4RAY5AOI.js.map +1 -0
- package/dist/chunk-5PIKNCZX.js +234 -0
- package/dist/chunk-5PIKNCZX.js.map +1 -0
- package/dist/chunk-66UDJBF6.js +96 -0
- package/dist/chunk-66UDJBF6.js.map +1 -0
- package/dist/chunk-7SOPVGDV.js +24 -0
- package/dist/chunk-7SOPVGDV.js.map +1 -0
- package/dist/chunk-A27LOC4Z.js +95 -0
- package/dist/chunk-A27LOC4Z.js.map +1 -0
- package/dist/chunk-B2UBHA66.js +301 -0
- package/dist/chunk-B2UBHA66.js.map +1 -0
- package/dist/chunk-BZN2Z5P7.js +882 -0
- package/dist/chunk-BZN2Z5P7.js.map +1 -0
- package/dist/chunk-BZQBJP34.js +186 -0
- package/dist/chunk-BZQBJP34.js.map +1 -0
- package/dist/chunk-DC5AK3LW.js +105 -0
- package/dist/chunk-DC5AK3LW.js.map +1 -0
- package/dist/chunk-DHET7RCE.js +50 -0
- package/dist/chunk-DHET7RCE.js.map +1 -0
- package/dist/chunk-EMJ2ZKS7.js +346 -0
- package/dist/chunk-EMJ2ZKS7.js.map +1 -0
- package/dist/chunk-FJQRVFMB.js +48 -0
- package/dist/chunk-FJQRVFMB.js.map +1 -0
- package/dist/chunk-FZGYSLJL.js +85 -0
- package/dist/chunk-FZGYSLJL.js.map +1 -0
- package/dist/chunk-H566H3MQ.js +87 -0
- package/dist/chunk-H566H3MQ.js.map +1 -0
- package/dist/chunk-IYG2LAIM.js +90 -0
- package/dist/chunk-IYG2LAIM.js.map +1 -0
- package/dist/chunk-IZZ4IIEG.js +29 -0
- package/dist/chunk-IZZ4IIEG.js.map +1 -0
- package/dist/chunk-JMVWYAHT.js +63 -0
- package/dist/chunk-JMVWYAHT.js.map +1 -0
- package/dist/chunk-LAPCUV4D.js +191 -0
- package/dist/chunk-LAPCUV4D.js.map +1 -0
- package/dist/chunk-LGUI3PMO.js +109 -0
- package/dist/chunk-LGUI3PMO.js.map +1 -0
- package/dist/chunk-MM7NK5N2.js +4542 -0
- package/dist/chunk-MM7NK5N2.js.map +1 -0
- package/dist/chunk-N6S7ZRIL.js +31 -0
- package/dist/chunk-N6S7ZRIL.js.map +1 -0
- package/dist/chunk-O4D67NN7.js +24 -0
- package/dist/chunk-O4D67NN7.js.map +1 -0
- package/dist/chunk-ODUOU55D.js +56 -0
- package/dist/chunk-ODUOU55D.js.map +1 -0
- package/dist/chunk-OGJIZ6QH.js +497 -0
- package/dist/chunk-OGJIZ6QH.js.map +1 -0
- package/dist/chunk-OMV7TLWD.js +340 -0
- package/dist/chunk-OMV7TLWD.js.map +1 -0
- package/dist/chunk-PBEHPQLK.js +146 -0
- package/dist/chunk-PBEHPQLK.js.map +1 -0
- package/dist/chunk-QPTOIZAT.js +32 -0
- package/dist/chunk-QPTOIZAT.js.map +1 -0
- package/dist/chunk-R3XFQKPG.js +111 -0
- package/dist/chunk-R3XFQKPG.js.map +1 -0
- package/dist/chunk-R74PZWQS.js +69 -0
- package/dist/chunk-R74PZWQS.js.map +1 -0
- package/dist/chunk-SO22IQPY.js +45 -0
- package/dist/chunk-SO22IQPY.js.map +1 -0
- package/dist/chunk-T4EXUIBY.js +19 -0
- package/dist/chunk-T4EXUIBY.js.map +1 -0
- package/dist/chunk-U3IGFMCY.js +31 -0
- package/dist/chunk-U3IGFMCY.js.map +1 -0
- package/dist/chunk-UICL22RT.js +318 -0
- package/dist/chunk-UICL22RT.js.map +1 -0
- package/dist/chunk-UX2H2K2G.js +183 -0
- package/dist/chunk-UX2H2K2G.js.map +1 -0
- package/dist/chunk-W2ZSCZ2U.js +93 -0
- package/dist/chunk-W2ZSCZ2U.js.map +1 -0
- package/dist/chunk-WEUVWHMA.js +189 -0
- package/dist/chunk-WEUVWHMA.js.map +1 -0
- package/dist/chunk-XY3XDVMI.js +15599 -0
- package/dist/chunk-XY3XDVMI.js.map +1 -0
- package/dist/chunk-YND42IXK.js +233 -0
- package/dist/chunk-YND42IXK.js.map +1 -0
- package/dist/chunk-YZTWZVGX.js +41 -0
- package/dist/chunk-YZTWZVGX.js.map +1 -0
- package/dist/chunk-Z4TWOP3H.js +81 -0
- package/dist/chunk-Z4TWOP3H.js.map +1 -0
- package/dist/cli/defaults/agent-mappings.yaml +271 -0
- package/dist/commands/build/marketplace.js +252 -0
- package/dist/commands/build/marketplace.js.map +1 -0
- package/dist/commands/build/plugins.js +114 -0
- package/dist/commands/build/plugins.js.map +1 -0
- package/dist/commands/build/stack.js +153 -0
- package/dist/commands/build/stack.js.map +1 -0
- package/dist/commands/compile.js +354 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config/get.js +61 -0
- package/dist/commands/config/get.js.map +1 -0
- package/dist/commands/config/index.js +23 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/config/path.js +34 -0
- package/dist/commands/config/path.js.map +1 -0
- package/dist/commands/config/set-project.js +61 -0
- package/dist/commands/config/set-project.js.map +1 -0
- package/dist/commands/config/show.js +14 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/config/unset-project.js +57 -0
- package/dist/commands/config/unset-project.js.map +1 -0
- package/dist/commands/diff.js +742 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.js +370 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/edit.js +301 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/eject.js +262 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/import/skill.js +361 -0
- package/dist/commands/import/skill.js.map +1 -0
- package/dist/commands/info.js +217 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.js +443 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.js +49 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/new/agent.js +224 -0
- package/dist/commands/new/agent.js.map +1 -0
- package/dist/commands/new/skill.js +199 -0
- package/dist/commands/new/skill.js.map +1 -0
- package/dist/commands/outdated.js +176 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/search.js +288 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/uninstall.js +302 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +304 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.js +389 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version/bump.js +79 -0
- package/dist/commands/version/bump.js.map +1 -0
- package/dist/commands/version/index.js +54 -0
- package/dist/commands/version/index.js.map +1 -0
- package/dist/commands/version/set.js +86 -0
- package/dist/commands/version/set.js.map +1 -0
- package/dist/commands/version/show.js +54 -0
- package/dist/commands/version/show.js.map +1 -0
- package/dist/components/common/confirm.js +9 -0
- package/dist/components/common/confirm.js.map +1 -0
- package/dist/components/common/confirm.test.js +203 -0
- package/dist/components/common/confirm.test.js.map +1 -0
- package/dist/components/common/message.js +20 -0
- package/dist/components/common/message.js.map +1 -0
- package/dist/components/common/spinner.js +14 -0
- package/dist/components/common/spinner.js.map +1 -0
- package/dist/components/skill-search/skill-search.js +12 -0
- package/dist/components/skill-search/skill-search.js.map +1 -0
- package/dist/components/wizard/category-grid.js +11 -0
- package/dist/components/wizard/category-grid.js.map +1 -0
- package/dist/components/wizard/category-grid.test.js +997 -0
- package/dist/components/wizard/category-grid.test.js.map +1 -0
- package/dist/components/wizard/domain-selection.js +14 -0
- package/dist/components/wizard/domain-selection.js.map +1 -0
- package/dist/components/wizard/help-modal.js +10 -0
- package/dist/components/wizard/help-modal.js.map +1 -0
- package/dist/components/wizard/menu-item.js +10 -0
- package/dist/components/wizard/menu-item.js.map +1 -0
- package/dist/components/wizard/search-modal.js +11 -0
- package/dist/components/wizard/search-modal.js.map +1 -0
- package/dist/components/wizard/search-modal.test.js +218 -0
- package/dist/components/wizard/search-modal.test.js.map +1 -0
- package/dist/components/wizard/section-progress.js +10 -0
- package/dist/components/wizard/section-progress.js.map +1 -0
- package/dist/components/wizard/section-progress.test.js +192 -0
- package/dist/components/wizard/section-progress.test.js.map +1 -0
- package/dist/components/wizard/source-grid.js +14 -0
- package/dist/components/wizard/source-grid.js.map +1 -0
- package/dist/components/wizard/source-grid.test.js +504 -0
- package/dist/components/wizard/source-grid.test.js.map +1 -0
- package/dist/components/wizard/stack-selection.js +17 -0
- package/dist/components/wizard/stack-selection.js.map +1 -0
- package/dist/components/wizard/step-build.js +17 -0
- package/dist/components/wizard/step-build.js.map +1 -0
- package/dist/components/wizard/step-build.test.js +600 -0
- package/dist/components/wizard/step-build.test.js.map +1 -0
- package/dist/components/wizard/step-confirm.js +12 -0
- package/dist/components/wizard/step-confirm.js.map +1 -0
- package/dist/components/wizard/step-confirm.test.js +366 -0
- package/dist/components/wizard/step-confirm.test.js.map +1 -0
- package/dist/components/wizard/step-refine.js +10 -0
- package/dist/components/wizard/step-refine.js.map +1 -0
- package/dist/components/wizard/step-refine.test.js +237 -0
- package/dist/components/wizard/step-refine.test.js.map +1 -0
- package/dist/components/wizard/step-settings.js +17 -0
- package/dist/components/wizard/step-settings.js.map +1 -0
- package/dist/components/wizard/step-settings.test.js +243 -0
- package/dist/components/wizard/step-settings.test.js.map +1 -0
- package/dist/components/wizard/step-sources.js +20 -0
- package/dist/components/wizard/step-sources.js.map +1 -0
- package/dist/components/wizard/step-sources.test.js +294 -0
- package/dist/components/wizard/step-sources.test.js.map +1 -0
- package/dist/components/wizard/step-stack.js +19 -0
- package/dist/components/wizard/step-stack.js.map +1 -0
- package/dist/components/wizard/step-stack.test.js +357 -0
- package/dist/components/wizard/step-stack.test.js.map +1 -0
- package/dist/components/wizard/view-title.js +10 -0
- package/dist/components/wizard/view-title.js.map +1 -0
- package/dist/components/wizard/wizard-layout.js +16 -0
- package/dist/components/wizard/wizard-layout.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.js +14 -0
- package/dist/components/wizard/wizard-tabs.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.test.js +294 -0
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
- package/dist/components/wizard/wizard.js +35 -0
- package/dist/components/wizard/wizard.js.map +1 -0
- package/dist/config/skills-matrix.yaml +926 -0
- package/dist/config/stacks.yaml +2186 -0
- package/dist/hooks/init.js +40 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/magic-string.es-RGXYGAW3.js +1316 -0
- package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
- package/dist/source-manager-SBPPLOQQ.js +16 -0
- package/dist/source-manager-SBPPLOQQ.js.map +1 -0
- package/dist/src/agents/_templates/agent.liquid +140 -0
- package/dist/src/agents/developer/api-developer/agent.yaml +12 -0
- package/dist/src/agents/developer/api-developer/critical-reminders.md +23 -0
- package/dist/src/agents/developer/api-developer/critical-requirements.md +11 -0
- package/dist/src/agents/developer/api-developer/examples.md +72 -0
- package/dist/src/agents/developer/api-developer/intro.md +22 -0
- package/dist/src/agents/developer/api-developer/output-format.md +359 -0
- package/dist/src/agents/developer/api-developer/workflow.md +471 -0
- package/dist/src/agents/developer/cli-developer/agent.yaml +12 -0
- package/dist/src/agents/developer/cli-developer/critical-reminders.md +28 -0
- package/dist/src/agents/developer/cli-developer/critical-requirements.md +15 -0
- package/dist/src/agents/developer/cli-developer/examples.md +68 -0
- package/dist/src/agents/developer/cli-developer/intro.md +23 -0
- package/dist/src/agents/developer/cli-developer/output-format.md +216 -0
- package/dist/src/agents/developer/cli-developer/workflow.md +509 -0
- package/dist/src/agents/developer/web-architecture/agent.yaml +12 -0
- package/dist/src/agents/developer/web-architecture/critical-reminders.md +27 -0
- package/dist/src/agents/developer/web-architecture/critical-requirements.md +35 -0
- package/dist/src/agents/developer/web-architecture/examples.md +187 -0
- package/dist/src/agents/developer/web-architecture/intro.md +35 -0
- package/dist/src/agents/developer/web-architecture/output-format.md +261 -0
- package/dist/src/agents/developer/web-architecture/workflow.md +599 -0
- package/dist/src/agents/developer/web-developer/agent.yaml +12 -0
- package/dist/src/agents/developer/web-developer/critical-reminders.md +17 -0
- package/dist/src/agents/developer/web-developer/critical-requirements.md +15 -0
- package/dist/src/agents/developer/web-developer/examples.md +109 -0
- package/dist/src/agents/developer/web-developer/intro.md +5 -0
- package/dist/src/agents/developer/web-developer/output-format.md +213 -0
- package/dist/src/agents/developer/web-developer/workflow.md +459 -0
- package/dist/src/agents/meta/agent-summoner/agent.yaml +12 -0
- package/dist/src/agents/meta/agent-summoner/critical-reminders.md +31 -0
- package/dist/src/agents/meta/agent-summoner/critical-requirements.md +27 -0
- package/dist/src/agents/meta/agent-summoner/examples.md +176 -0
- package/dist/src/agents/meta/agent-summoner/intro.md +9 -0
- package/dist/src/agents/meta/agent-summoner/output-format.md +115 -0
- package/dist/src/agents/meta/agent-summoner/workflow.md +1540 -0
- package/dist/src/agents/meta/documentor/agent.yaml +11 -0
- package/dist/src/agents/meta/documentor/critical-reminders.md +23 -0
- package/dist/src/agents/meta/documentor/critical-requirements.md +13 -0
- package/dist/src/agents/meta/documentor/examples.md +147 -0
- package/dist/src/agents/meta/documentor/intro.md +11 -0
- package/dist/src/agents/meta/documentor/output-format.md +237 -0
- package/dist/src/agents/meta/documentor/workflow.md +1271 -0
- package/dist/src/agents/meta/skill-summoner/agent.yaml +13 -0
- package/dist/src/agents/meta/skill-summoner/critical-reminders.md +73 -0
- package/dist/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
- package/dist/src/agents/meta/skill-summoner/examples.md +116 -0
- package/dist/src/agents/meta/skill-summoner/intro.md +5 -0
- package/dist/src/agents/meta/skill-summoner/output-format.md +279 -0
- package/dist/src/agents/meta/skill-summoner/workflow.md +1485 -0
- package/dist/src/agents/migration/cli-migrator/agent.yaml +12 -0
- package/dist/src/agents/migration/cli-migrator/anti-patterns.md +158 -0
- package/dist/src/agents/migration/cli-migrator/conversion-mappings.md +63 -0
- package/dist/src/agents/migration/cli-migrator/critical-reminders.md +17 -0
- package/dist/src/agents/migration/cli-migrator/critical-requirements.md +13 -0
- package/dist/src/agents/migration/cli-migrator/intro.md +15 -0
- package/dist/src/agents/migration/cli-migrator/output-format.md +164 -0
- package/dist/src/agents/migration/cli-migrator/workflow.md +230 -0
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +10 -0
- package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +58 -0
- package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +17 -0
- package/dist/src/agents/pattern/pattern-scout/examples.md +93 -0
- package/dist/src/agents/pattern/pattern-scout/intro.md +3 -0
- package/dist/src/agents/pattern/pattern-scout/output-format.md +196 -0
- package/dist/src/agents/pattern/pattern-scout/workflow.md +1901 -0
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +12 -0
- package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +13 -0
- package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +11 -0
- package/dist/src/agents/pattern/web-pattern-critique/examples.md +56 -0
- package/dist/src/agents/pattern/web-pattern-critique/intro.md +5 -0
- package/dist/src/agents/pattern/web-pattern-critique/output-format.md +257 -0
- package/dist/src/agents/pattern/web-pattern-critique/workflow.md +674 -0
- package/dist/src/agents/planning/web-pm/agent.yaml +12 -0
- package/dist/src/agents/planning/web-pm/critical-reminders.md +21 -0
- package/dist/src/agents/planning/web-pm/critical-requirements.md +17 -0
- package/dist/src/agents/planning/web-pm/examples.md +85 -0
- package/dist/src/agents/planning/web-pm/intro.md +3 -0
- package/dist/src/agents/planning/web-pm/output-format.md +228 -0
- package/dist/src/agents/planning/web-pm/workflow.md +393 -0
- package/dist/src/agents/researcher/api-researcher/agent.yaml +10 -0
- package/dist/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
- package/dist/src/agents/researcher/api-researcher/critical-requirements.md +13 -0
- package/dist/src/agents/researcher/api-researcher/examples.md +116 -0
- package/dist/src/agents/researcher/api-researcher/intro.md +32 -0
- package/dist/src/agents/researcher/api-researcher/output-format.md +135 -0
- package/dist/src/agents/researcher/api-researcher/workflow.md +261 -0
- package/dist/src/agents/researcher/web-researcher/agent.yaml +10 -0
- package/dist/src/agents/researcher/web-researcher/critical-reminders.md +23 -0
- package/dist/src/agents/researcher/web-researcher/critical-requirements.md +11 -0
- package/dist/src/agents/researcher/web-researcher/examples.md +126 -0
- package/dist/src/agents/researcher/web-researcher/intro.md +31 -0
- package/dist/src/agents/researcher/web-researcher/output-format.md +112 -0
- package/dist/src/agents/researcher/web-researcher/workflow.md +322 -0
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +12 -0
- package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +16 -0
- package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +13 -0
- package/dist/src/agents/reviewer/api-reviewer/examples.md +54 -0
- package/dist/src/agents/reviewer/api-reviewer/intro.md +22 -0
- package/dist/src/agents/reviewer/api-reviewer/output-format.md +288 -0
- package/dist/src/agents/reviewer/api-reviewer/workflow.md +369 -0
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +12 -0
- package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +17 -0
- package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +13 -0
- package/dist/src/agents/reviewer/cli-reviewer/examples.md +83 -0
- package/dist/src/agents/reviewer/cli-reviewer/intro.md +21 -0
- package/dist/src/agents/reviewer/cli-reviewer/output-format.md +330 -0
- package/dist/src/agents/reviewer/cli-reviewer/workflow.md +294 -0
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +12 -0
- package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +17 -0
- package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +11 -0
- package/dist/src/agents/reviewer/web-reviewer/examples.md +79 -0
- package/dist/src/agents/reviewer/web-reviewer/intro.md +20 -0
- package/dist/src/agents/reviewer/web-reviewer/output-format.md +253 -0
- package/dist/src/agents/reviewer/web-reviewer/workflow.md +228 -0
- package/dist/src/agents/tester/cli-tester/agent.yaml +12 -0
- package/dist/src/agents/tester/cli-tester/critical-reminders.md +19 -0
- package/dist/src/agents/tester/cli-tester/critical-requirements.md +17 -0
- package/dist/src/agents/tester/cli-tester/examples.md +80 -0
- package/dist/src/agents/tester/cli-tester/intro.md +19 -0
- package/dist/src/agents/tester/cli-tester/output-format.md +232 -0
- package/dist/src/agents/tester/cli-tester/workflow.md +304 -0
- package/dist/src/agents/tester/web-tester/agent.yaml +12 -0
- package/dist/src/agents/tester/web-tester/critical-reminders.md +15 -0
- package/dist/src/agents/tester/web-tester/critical-requirements.md +11 -0
- package/dist/src/agents/tester/web-tester/examples.md +68 -0
- package/dist/src/agents/tester/web-tester/intro.md +18 -0
- package/dist/src/agents/tester/web-tester/output-format.md +252 -0
- package/dist/src/agents/tester/web-tester/workflow.md +507 -0
- package/dist/stores/wizard-store.js +13 -0
- package/dist/stores/wizard-store.js.map +1 -0
- package/dist/stores/wizard-store.test.js +689 -0
- package/dist/stores/wizard-store.test.js.map +1 -0
- package/package.json +134 -0
- package/src/agents/_templates/agent.liquid +140 -0
- package/src/agents/developer/api-developer/agent.yaml +12 -0
- package/src/agents/developer/api-developer/critical-reminders.md +23 -0
- package/src/agents/developer/api-developer/critical-requirements.md +11 -0
- package/src/agents/developer/api-developer/examples.md +72 -0
- package/src/agents/developer/api-developer/intro.md +22 -0
- package/src/agents/developer/api-developer/output-format.md +359 -0
- package/src/agents/developer/api-developer/workflow.md +471 -0
- package/src/agents/developer/cli-developer/agent.yaml +12 -0
- package/src/agents/developer/cli-developer/critical-reminders.md +28 -0
- package/src/agents/developer/cli-developer/critical-requirements.md +15 -0
- package/src/agents/developer/cli-developer/examples.md +68 -0
- package/src/agents/developer/cli-developer/intro.md +23 -0
- package/src/agents/developer/cli-developer/output-format.md +216 -0
- package/src/agents/developer/cli-developer/workflow.md +509 -0
- package/src/agents/developer/web-architecture/agent.yaml +12 -0
- package/src/agents/developer/web-architecture/critical-reminders.md +27 -0
- package/src/agents/developer/web-architecture/critical-requirements.md +35 -0
- package/src/agents/developer/web-architecture/examples.md +187 -0
- package/src/agents/developer/web-architecture/intro.md +35 -0
- package/src/agents/developer/web-architecture/output-format.md +261 -0
- package/src/agents/developer/web-architecture/workflow.md +599 -0
- package/src/agents/developer/web-developer/agent.yaml +12 -0
- package/src/agents/developer/web-developer/critical-reminders.md +17 -0
- package/src/agents/developer/web-developer/critical-requirements.md +15 -0
- package/src/agents/developer/web-developer/examples.md +109 -0
- package/src/agents/developer/web-developer/intro.md +5 -0
- package/src/agents/developer/web-developer/output-format.md +213 -0
- package/src/agents/developer/web-developer/workflow.md +459 -0
- package/src/agents/meta/agent-summoner/agent.yaml +12 -0
- package/src/agents/meta/agent-summoner/critical-reminders.md +31 -0
- package/src/agents/meta/agent-summoner/critical-requirements.md +27 -0
- package/src/agents/meta/agent-summoner/examples.md +176 -0
- package/src/agents/meta/agent-summoner/intro.md +9 -0
- package/src/agents/meta/agent-summoner/output-format.md +115 -0
- package/src/agents/meta/agent-summoner/workflow.md +1540 -0
- package/src/agents/meta/documentor/agent.yaml +11 -0
- package/src/agents/meta/documentor/critical-reminders.md +23 -0
- package/src/agents/meta/documentor/critical-requirements.md +13 -0
- package/src/agents/meta/documentor/examples.md +147 -0
- package/src/agents/meta/documentor/intro.md +11 -0
- package/src/agents/meta/documentor/output-format.md +237 -0
- package/src/agents/meta/documentor/workflow.md +1271 -0
- package/src/agents/meta/skill-summoner/agent.yaml +13 -0
- package/src/agents/meta/skill-summoner/critical-reminders.md +73 -0
- package/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
- package/src/agents/meta/skill-summoner/examples.md +116 -0
- package/src/agents/meta/skill-summoner/intro.md +5 -0
- package/src/agents/meta/skill-summoner/output-format.md +279 -0
- package/src/agents/meta/skill-summoner/workflow.md +1485 -0
- package/src/agents/migration/cli-migrator/agent.yaml +12 -0
- package/src/agents/migration/cli-migrator/anti-patterns.md +158 -0
- package/src/agents/migration/cli-migrator/conversion-mappings.md +63 -0
- package/src/agents/migration/cli-migrator/critical-reminders.md +17 -0
- package/src/agents/migration/cli-migrator/critical-requirements.md +13 -0
- package/src/agents/migration/cli-migrator/intro.md +15 -0
- package/src/agents/migration/cli-migrator/output-format.md +164 -0
- package/src/agents/migration/cli-migrator/workflow.md +230 -0
- package/src/agents/pattern/pattern-scout/agent.yaml +10 -0
- package/src/agents/pattern/pattern-scout/critical-reminders.md +58 -0
- package/src/agents/pattern/pattern-scout/critical-requirements.md +17 -0
- package/src/agents/pattern/pattern-scout/examples.md +93 -0
- package/src/agents/pattern/pattern-scout/intro.md +3 -0
- package/src/agents/pattern/pattern-scout/output-format.md +196 -0
- package/src/agents/pattern/pattern-scout/workflow.md +1901 -0
- package/src/agents/pattern/web-pattern-critique/agent.yaml +12 -0
- package/src/agents/pattern/web-pattern-critique/critical-reminders.md +13 -0
- package/src/agents/pattern/web-pattern-critique/critical-requirements.md +11 -0
- package/src/agents/pattern/web-pattern-critique/examples.md +56 -0
- package/src/agents/pattern/web-pattern-critique/intro.md +5 -0
- package/src/agents/pattern/web-pattern-critique/output-format.md +257 -0
- package/src/agents/pattern/web-pattern-critique/workflow.md +674 -0
- package/src/agents/planning/web-pm/agent.yaml +12 -0
- package/src/agents/planning/web-pm/critical-reminders.md +21 -0
- package/src/agents/planning/web-pm/critical-requirements.md +17 -0
- package/src/agents/planning/web-pm/examples.md +85 -0
- package/src/agents/planning/web-pm/intro.md +3 -0
- package/src/agents/planning/web-pm/output-format.md +228 -0
- package/src/agents/planning/web-pm/workflow.md +393 -0
- package/src/agents/researcher/api-researcher/agent.yaml +10 -0
- package/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
- package/src/agents/researcher/api-researcher/critical-requirements.md +13 -0
- package/src/agents/researcher/api-researcher/examples.md +116 -0
- package/src/agents/researcher/api-researcher/intro.md +32 -0
- package/src/agents/researcher/api-researcher/output-format.md +135 -0
- package/src/agents/researcher/api-researcher/workflow.md +261 -0
- package/src/agents/researcher/web-researcher/agent.yaml +10 -0
- package/src/agents/researcher/web-researcher/critical-reminders.md +23 -0
- package/src/agents/researcher/web-researcher/critical-requirements.md +11 -0
- package/src/agents/researcher/web-researcher/examples.md +126 -0
- package/src/agents/researcher/web-researcher/intro.md +31 -0
- package/src/agents/researcher/web-researcher/output-format.md +112 -0
- package/src/agents/researcher/web-researcher/workflow.md +322 -0
- package/src/agents/reviewer/api-reviewer/agent.yaml +12 -0
- package/src/agents/reviewer/api-reviewer/critical-reminders.md +16 -0
- package/src/agents/reviewer/api-reviewer/critical-requirements.md +13 -0
- package/src/agents/reviewer/api-reviewer/examples.md +54 -0
- package/src/agents/reviewer/api-reviewer/intro.md +22 -0
- package/src/agents/reviewer/api-reviewer/output-format.md +288 -0
- package/src/agents/reviewer/api-reviewer/workflow.md +369 -0
- package/src/agents/reviewer/cli-reviewer/agent.yaml +12 -0
- package/src/agents/reviewer/cli-reviewer/critical-reminders.md +17 -0
- package/src/agents/reviewer/cli-reviewer/critical-requirements.md +13 -0
- package/src/agents/reviewer/cli-reviewer/examples.md +83 -0
- package/src/agents/reviewer/cli-reviewer/intro.md +21 -0
- package/src/agents/reviewer/cli-reviewer/output-format.md +330 -0
- package/src/agents/reviewer/cli-reviewer/workflow.md +294 -0
- package/src/agents/reviewer/web-reviewer/agent.yaml +12 -0
- package/src/agents/reviewer/web-reviewer/critical-reminders.md +17 -0
- package/src/agents/reviewer/web-reviewer/critical-requirements.md +11 -0
- package/src/agents/reviewer/web-reviewer/examples.md +79 -0
- package/src/agents/reviewer/web-reviewer/intro.md +20 -0
- package/src/agents/reviewer/web-reviewer/output-format.md +253 -0
- package/src/agents/reviewer/web-reviewer/workflow.md +228 -0
- package/src/agents/tester/cli-tester/agent.yaml +12 -0
- package/src/agents/tester/cli-tester/critical-reminders.md +19 -0
- package/src/agents/tester/cli-tester/critical-requirements.md +17 -0
- package/src/agents/tester/cli-tester/examples.md +80 -0
- package/src/agents/tester/cli-tester/intro.md +19 -0
- package/src/agents/tester/cli-tester/output-format.md +232 -0
- package/src/agents/tester/cli-tester/workflow.md +304 -0
- package/src/agents/tester/web-tester/agent.yaml +12 -0
- package/src/agents/tester/web-tester/critical-reminders.md +15 -0
- package/src/agents/tester/web-tester/critical-requirements.md +11 -0
- package/src/agents/tester/web-tester/examples.md +68 -0
- package/src/agents/tester/web-tester/intro.md +18 -0
- package/src/agents/tester/web-tester/output-format.md +252 -0
- package/src/agents/tester/web-tester/workflow.md +507 -0
- package/src/schemas/agent-frontmatter.schema.json +84 -0
- package/src/schemas/agent.schema.json +93 -0
- package/src/schemas/hooks.schema.json +47 -0
- package/src/schemas/marketplace.schema.json +119 -0
- package/src/schemas/metadata.schema.json +113 -0
- package/src/schemas/plugin.schema.json +130 -0
- package/src/schemas/project-config.schema.json +125 -0
- package/src/schemas/project-source-config.schema.json +81 -0
- package/src/schemas/skill-frontmatter.schema.json +42 -0
- package/src/schemas/skills-matrix.schema.json +467 -0
- package/src/schemas/stack.schema.json +191 -0
- package/src/schemas/stacks.schema.json +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/stores/wizard-store.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach } from \"vitest\";\nimport { useWizardStore } from \"./wizard-store\";\nimport { DEFAULT_PRESELECTED_SKILLS } from \"../consts\";\nimport { createMockCategory } from \"../lib/__tests__/helpers\";\nimport type { Domain, MergedSkillsMatrix, SkillAssignment, SkillId, Subcategory } from \"../types\";\n\n/** Shorthand: creates a SkillAssignment from an id and optional preloaded flag */\nfunction sa(id: SkillId, preloaded = false): SkillAssignment {\n return { id, preloaded };\n}\n\ndescribe(\"WizardStore\", () => {\n beforeEach(() => {\n useWizardStore.getState().reset();\n });\n\n describe(\"initial state\", () => {\n it(\"should start at stack step\", () => {\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n\n it(\"should have no approach selected\", () => {\n const { approach } = useWizardStore.getState();\n expect(approach).toBeNull();\n });\n\n it(\"should have no selected stack\", () => {\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBeNull();\n });\n\n it(\"should have expert mode off\", () => {\n const { expertMode } = useWizardStore.getState();\n expect(expertMode).toBe(false);\n });\n\n it(\"should default to local install mode\", () => {\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should have empty navigation history\", () => {\n const { history } = useWizardStore.getState();\n expect(history).toEqual([]);\n });\n\n it(\"should have empty selected domains\", () => {\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toEqual([]);\n });\n\n it(\"should have empty domain selections\", () => {\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections).toEqual({});\n });\n });\n\n describe(\"step navigation\", () => {\n it(\"should update step with setStep\", () => {\n const store = useWizardStore.getState();\n store.setStep(\"stack\");\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n\n it(\"should track navigation history when setting step\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.setStep(\"confirm\");\n\n const { history } = useWizardStore.getState();\n expect(history).toEqual([\"stack\", \"build\"]);\n });\n\n it(\"should go back through history\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.setStep(\"confirm\");\n store.goBack();\n\n const { step, history } = useWizardStore.getState();\n expect(step).toBe(\"build\");\n expect(history).toEqual([\"stack\"]);\n });\n\n it(\"when goBack is called with empty history, should return to stack step\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"build\");\n store.goBack();\n store.goBack();\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"stack\");\n });\n });\n\n describe(\"approach selection\", () => {\n it(\"should set approach to stack\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"stack\");\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"stack\");\n });\n\n it(\"should set approach to scratch\", () => {\n const store = useWizardStore.getState();\n store.setApproach(\"scratch\");\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n });\n });\n\n describe(\"stack selection\", () => {\n it(\"should select stack by id\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"nextjs-fullstack\");\n });\n\n it(\"when selectStack is called with null, should clear previously selected stack\", () => {\n const store = useWizardStore.getState();\n store.selectStack(\"nextjs-fullstack\");\n store.selectStack(null);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBeNull();\n });\n });\n\n describe(\"domain selection\", () => {\n it(\"should toggle domain on\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n });\n\n it(\"should toggle domain off\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"web\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).not.toContain(\"web\");\n });\n\n it(\"should allow multiple domain selection\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.toggleDomain(\"cli\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toEqual([\"web\", \"api\", \"cli\"]);\n });\n });\n\n describe(\"technology selection\", () => {\n it(\"should toggle technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web!.framework).toEqual([\"web-framework-react\"]);\n });\n\n it(\"should replace technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-vue\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web!.framework).toEqual([\"web-framework-vue\"]);\n });\n\n it(\"should toggle off technology in exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web!.framework).toEqual([]);\n });\n\n it(\"should allow multiple selections in non-exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"testing\", \"web-testing-vitest\", false);\n store.toggleTechnology(\"web\", \"testing\", \"web-testing-playwright-e2e\", false);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web!.testing).toEqual([\n \"web-testing-vitest\",\n \"web-testing-playwright-e2e\",\n ]);\n });\n\n it(\"should toggle off technology in non-exclusive mode\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"testing\", \"web-testing-vitest\", false);\n store.toggleTechnology(\"web\", \"testing\", \"web-testing-playwright-e2e\", false);\n store.toggleTechnology(\"web\", \"testing\", \"web-testing-vitest\", false);\n\n const { domainSelections } = useWizardStore.getState();\n expect(domainSelections.web!.testing).toEqual([\"web-testing-playwright-e2e\"]);\n });\n });\n\n describe(\"domain navigation\", () => {\n it(\"should move to next domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n const result = store.nextDomain();\n\n const { currentDomainIndex } = useWizardStore.getState();\n expect(result).toBe(true);\n expect(currentDomainIndex).toBe(1);\n });\n\n it(\"when already at the last domain, should return false from nextDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const result = store.nextDomain();\n\n expect(result).toBe(false);\n });\n\n it(\"should move to previous domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n const result = store.prevDomain();\n\n const { currentDomainIndex } = useWizardStore.getState();\n expect(result).toBe(true);\n expect(currentDomainIndex).toBe(0);\n });\n\n it(\"when already at the first domain, should return false from prevDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n const result = store.prevDomain();\n\n expect(result).toBe(false);\n });\n\n it(\"should get current domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n const domain = store.getCurrentDomain();\n expect(domain).toBe(\"api\");\n });\n\n it(\"should return null when no domains selected\", () => {\n const store = useWizardStore.getState();\n const domain = store.getCurrentDomain();\n expect(domain).toBeNull();\n });\n });\n\n describe(\"mode toggles\", () => {\n it(\"should toggle expert mode on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleExpertMode();\n\n const { expertMode } = useWizardStore.getState();\n expect(expertMode).toBe(true);\n });\n\n it(\"should toggle expert mode off\", () => {\n const store = useWizardStore.getState();\n\n store.toggleExpertMode();\n store.toggleExpertMode();\n\n const { expertMode } = useWizardStore.getState();\n expect(expertMode).toBe(false);\n });\n\n it(\"should toggle install mode to plugin\", () => {\n const store = useWizardStore.getState();\n\n store.toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"plugin\");\n });\n\n it(\"should toggle install mode back to local\", () => {\n const store = useWizardStore.getState();\n\n store.toggleInstallMode();\n store.toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should toggle show descriptions\", () => {\n const store = useWizardStore.getState();\n\n store.toggleShowDescriptions();\n\n const { showDescriptions } = useWizardStore.getState();\n expect(showDescriptions).toBe(true);\n });\n\n it(\"should toggle help on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleHelp();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(true);\n });\n\n it(\"should toggle help off (show then hide)\", () => {\n const store = useWizardStore.getState();\n\n store.toggleHelp();\n store.toggleHelp();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should toggle settings on\", () => {\n const store = useWizardStore.getState();\n\n store.toggleSettings();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(true);\n });\n\n it(\"should toggle settings off (show then hide)\", () => {\n const store = useWizardStore.getState();\n\n store.toggleSettings();\n store.toggleSettings();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n\n it(\"should start with showHelp false\", () => {\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should start with showSettings false\", () => {\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n\n it(\"should reset showHelp to false after reset\", () => {\n const store = useWizardStore.getState();\n store.toggleHelp();\n store.reset();\n\n const { showHelp } = useWizardStore.getState();\n expect(showHelp).toBe(false);\n });\n\n it(\"should reset showSettings to false after reset\", () => {\n const store = useWizardStore.getState();\n store.toggleSettings();\n store.reset();\n\n const { showSettings } = useWizardStore.getState();\n expect(showSettings).toBe(false);\n });\n });\n\n describe(\"install mode auto-defaulting\", () => {\n it(\"should default installMode to plugin when set via setState (marketplace available)\", () => {\n // Simulates what Wizard component does when initialInstallMode=\"plugin\"\n useWizardStore.setState({ installMode: \"plugin\" });\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"plugin\");\n });\n\n it(\"should keep installMode as local when set via setState (no marketplace)\", () => {\n // Simulates what Wizard component does when initialInstallMode=\"local\"\n useWizardStore.setState({ installMode: \"local\" });\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should allow toggling installMode after auto-defaulting to plugin\", () => {\n // Simulates: marketplace sets plugin, then user presses P to switch back\n useWizardStore.setState({ installMode: \"plugin\" });\n useWizardStore.getState().toggleInstallMode();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n\n it(\"should reset installMode to local after reset even if previously set to plugin\", () => {\n useWizardStore.setState({ installMode: \"plugin\" });\n useWizardStore.getState().reset();\n\n const { installMode } = useWizardStore.getState();\n expect(installMode).toBe(\"local\");\n });\n });\n\n describe(\"computed getters\", () => {\n it(\"should get all selected technologies\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api\", \"api-framework-hono\", true);\n\n const technologies = store.getAllSelectedTechnologies();\n expect(technologies).toContain(\"web-framework-react\");\n expect(technologies).toContain(\"web-styling-scss-modules\");\n expect(technologies).toContain(\"api-framework-hono\");\n });\n\n it(\"should get default methodology skills\", () => {\n const store = useWizardStore.getState();\n\n const skills = store.getDefaultMethodologySkills();\n\n for (const skill of DEFAULT_PRESELECTED_SKILLS) {\n expect(skills).toContain(skill);\n }\n });\n\n it(\"should get selected technologies per domain\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api\", \"api-framework-hono\", true);\n\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain.web).toEqual([\"web-framework-react\", \"web-styling-scss-modules\"]);\n expect(perDomain.api).toEqual([\"api-framework-hono\"]);\n expect(perDomain.cli).toBeUndefined();\n });\n\n it(\"should return empty object for getSelectedTechnologiesPerDomain with no selections\", () => {\n const store = useWizardStore.getState();\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain).toEqual({});\n });\n\n it(\"should omit domains with empty subcategory arrays from getSelectedTechnologiesPerDomain\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true); // toggle off\n\n const perDomain = store.getSelectedTechnologiesPerDomain();\n expect(perDomain.web).toBeUndefined();\n });\n\n it(\"should get technology count\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api\", \"api-framework-hono\", true);\n\n expect(store.getTechnologyCount()).toBe(3);\n });\n\n it(\"should return 0 for getTechnologyCount with no selections\", () => {\n const store = useWizardStore.getState();\n expect(store.getTechnologyCount()).toBe(0);\n });\n });\n\n describe(\"navigation guards\", () => {\n it(\"canGoToNextDomain should return true when not at last domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n expect(store.canGoToNextDomain()).toBe(true);\n });\n\n it(\"canGoToNextDomain should return false when at last domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n\n expect(store.canGoToNextDomain()).toBe(false);\n });\n\n it(\"canGoToNextDomain should return false with no domains\", () => {\n const store = useWizardStore.getState();\n expect(store.canGoToNextDomain()).toBe(false);\n });\n\n it(\"canGoToPreviousDomain should return false when at first domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n\n expect(store.canGoToPreviousDomain()).toBe(false);\n });\n\n it(\"canGoToPreviousDomain should return true when past first domain\", () => {\n const store = useWizardStore.getState();\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.nextDomain();\n\n expect(store.canGoToPreviousDomain()).toBe(true);\n });\n\n it(\"canGoToPreviousDomain should return false with no domains\", () => {\n const store = useWizardStore.getState();\n expect(store.canGoToPreviousDomain()).toBe(false);\n });\n });\n\n describe(\"parent domain selectors\", () => {\n // Partial test data: only \"categories\" subset of MergedSkillsMatrix\n // Casts to MergedSkillsMatrix below are intentional — tests only need category lookup\n const matrixWithParentDomain: Pick<MergedSkillsMatrix, \"categories\"> = {\n categories: {\n \"error-handling\": createMockCategory(\"error-handling\" as Subcategory, \"Error Handling\", {\n domain: \"web-extras\" as Domain,\n parent_domain: \"web\" as Domain,\n exclusive: false,\n }),\n framework: createMockCategory(\"framework\" as Subcategory, \"Framework\", {\n domain: \"web\" as Domain,\n }),\n },\n };\n\n const matrixWithoutParent: Pick<MergedSkillsMatrix, \"categories\"> = {\n categories: {\n framework: createMockCategory(\"framework\" as Subcategory, \"Framework\", {\n domain: \"web\" as Domain,\n }),\n },\n };\n\n it(\"should find parent domain for a domain with parent_domain\", () => {\n const store = useWizardStore.getState();\n const parent = store.getParentDomain(\n \"web-extras\",\n matrixWithParentDomain as MergedSkillsMatrix,\n );\n expect(parent).toBe(\"web\");\n });\n\n it(\"should return undefined for a domain without parent_domain\", () => {\n const store = useWizardStore.getState();\n const parent = store.getParentDomain(\"web\", matrixWithoutParent as MergedSkillsMatrix);\n expect(parent).toBeUndefined();\n });\n\n it(\"should get parent domain selections when parent exists\", () => {\n const store = useWizardStore.getState();\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n\n const parentSelections = store.getParentDomainSelections(\n \"web-extras\",\n matrixWithParentDomain as MergedSkillsMatrix,\n );\n expect(parentSelections).toEqual({ framework: [\"web-framework-react\"] });\n });\n\n it(\"should return undefined for getParentDomainSelections when no parent\", () => {\n const store = useWizardStore.getState();\n const parentSelections = store.getParentDomainSelections(\n \"web\",\n matrixWithoutParent as MergedSkillsMatrix,\n );\n expect(parentSelections).toBeUndefined();\n });\n\n it(\"should return undefined for getParentDomainSelections when parent has no selections\", () => {\n const store = useWizardStore.getState();\n const parentSelections = store.getParentDomainSelections(\n \"web-extras\",\n matrixWithParentDomain as MergedSkillsMatrix,\n );\n expect(parentSelections).toBeUndefined();\n });\n });\n\n describe(\"reset\", () => {\n it(\"should reset to initial state\", () => {\n const store = useWizardStore.getState();\n\n store.setStep(\"stack\");\n store.setApproach(\"scratch\");\n store.selectStack(\"nextjs-fullstack\");\n store.toggleDomain(\"web\");\n store.toggleExpertMode();\n\n store.reset();\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"stack\");\n expect(state.approach).toBeNull();\n expect(state.selectedStackId).toBeNull();\n expect(state.selectedDomains).toEqual([]);\n expect(state.expertMode).toBe(false);\n expect(state.installMode).toBe(\"local\");\n expect(state.history).toEqual([]);\n });\n });\n\n describe(\"populateFromStack\", () => {\n it(\"should set selectedDomains to all domains regardless of stack contents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: { framework: [sa(\"web-framework-react\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n framework: { domain: \"web\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { selectedDomains, domainSelections } = useWizardStore.getState();\n\n expect(selectedDomains).toEqual([\"web\", \"web-extras\", \"api\", \"cli\", \"mobile\", \"shared\"]);\n\n expect(domainSelections.web).toBeDefined();\n expect(domainSelections.web!.framework).toEqual([\"web-framework-react\"]);\n expect(domainSelections.api).toBeUndefined();\n });\n\n it(\"should populate domainSelections from stack agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: {\n framework: [sa(\"web-framework-react\", true)],\n \"client-state\": [sa(\"web-state-zustand\")],\n },\n api: { api: [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n framework: { domain: \"web\" },\n \"client-state\": { domain: \"web\" },\n api: { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web!.framework).toEqual([\"web-framework-react\"]);\n expect(domainSelections.web![\"client-state\"]).toEqual([\"web-state-zustand\"]);\n expect(domainSelections.api!.api).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should skip entries without a domain\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n misc: { methodology: [sa(\"meta-methodology-vitest\" as SkillId)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n methodology: {},\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(Object.keys(domainSelections)).toHaveLength(0);\n });\n\n it(\"should populate multiple skills from array-valued subcategories\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n \"pattern-scout\": {\n methodology: [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n sa(\"meta-methodology-success-criteria\", true),\n ],\n },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n methodology: { domain: \"shared\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.shared!.methodology).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-success-criteria\",\n ]);\n });\n\n it(\"should handle single-element and multi-element arrays across agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n web: {\n framework: [sa(\"web-framework-react\", true)],\n methodology: [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n ],\n },\n api: { api: [sa(\"api-framework-hono\", true)] },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n framework: { domain: \"web\" },\n methodology: { domain: \"shared\" },\n api: { domain: \"api\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n expect(domainSelections.web!.framework).toEqual([\"web-framework-react\"]);\n expect(domainSelections.shared!.methodology).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n ]);\n expect(domainSelections.api!.api).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should deduplicate skills from arrays across multiple agents\", () => {\n const store = useWizardStore.getState();\n\n const stack: Parameters<typeof store.populateFromStack>[0] = {\n agents: {\n agent1: {\n methodology: [\n sa(\"meta-methodology-investigation-requirements\", true),\n sa(\"meta-methodology-anti-over-engineering\", true),\n ],\n },\n agent2: {\n methodology: [\n sa(\"meta-methodology-anti-over-engineering\", true),\n sa(\"meta-methodology-success-criteria\", true),\n ],\n },\n },\n };\n const categories: Partial<Record<Subcategory, { domain?: Domain }>> = {\n methodology: { domain: \"shared\" },\n };\n\n store.populateFromStack(stack, categories);\n\n const { domainSelections } = useWizardStore.getState();\n\n // Should deduplicate: anti-over-engineering appears in both agents\n expect(domainSelections.shared!.methodology).toEqual([\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-success-criteria\",\n ]);\n });\n });\n\n describe(\"complex flows\", () => {\n it(\"should handle complete stack selection flow\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"stack\");\n store.selectStack(\"nextjs-fullstack\");\n store.setStackAction(\"customize\");\n store.setStep(\"build\");\n\n store.setStep(\"confirm\");\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"confirm\");\n expect(state.approach).toBe(\"stack\");\n expect(state.selectedStackId).toBe(\"nextjs-fullstack\");\n expect(state.stackAction).toBe(\"customize\");\n expect(state.history).toEqual([\"stack\", \"build\"]);\n });\n\n it(\"should handle complete scratch flow\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"scratch\");\n store.toggleDomain(\"web\");\n store.toggleDomain(\"api\");\n store.setStep(\"build\");\n\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n store.toggleTechnology(\"web\", \"styling\", \"web-styling-scss-modules\", true);\n store.toggleTechnology(\"api\", \"api\", \"api-framework-hono\", true);\n store.setStep(\"confirm\");\n\n const state = useWizardStore.getState();\n expect(state.step).toBe(\"confirm\");\n expect(state.approach).toBe(\"scratch\");\n expect(state.selectedDomains).toEqual([\"web\", \"api\"]);\n expect(state.domainSelections.web!.framework).toEqual([\"web-framework-react\"]);\n expect(state.domainSelections.web!.styling).toEqual([\"web-styling-scss-modules\"]);\n expect(state.domainSelections.api!.api).toEqual([\"api-framework-hono\"]);\n });\n\n it(\"should preserve selections when going back\", () => {\n const store = useWizardStore.getState();\n\n store.setApproach(\"scratch\");\n store.toggleDomain(\"web\");\n store.setStep(\"build\");\n store.toggleTechnology(\"web\", \"framework\", \"web-framework-react\", true);\n\n store.goBack();\n\n const state = useWizardStore.getState();\n expect(state.selectedDomains).toContain(\"web\");\n expect(state.domainSelections.web!.framework).toEqual([\"web-framework-react\"]);\n });\n });\n});\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agents-inc/cli",
|
|
3
|
+
"version": "0.32.1",
|
|
4
|
+
"description": "CLI for managing Agents Inc. skills, stacks, and agents for Claude Code",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"bin": {
|
|
13
|
+
"cc": "dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist/",
|
|
17
|
+
"config/",
|
|
18
|
+
"src/agents/",
|
|
19
|
+
"src/schemas/",
|
|
20
|
+
"LICENSE",
|
|
21
|
+
"README.md",
|
|
22
|
+
"CHANGELOG.md"
|
|
23
|
+
],
|
|
24
|
+
"keywords": [
|
|
25
|
+
"cli",
|
|
26
|
+
"claude",
|
|
27
|
+
"claude-code",
|
|
28
|
+
"skills",
|
|
29
|
+
"composable skills",
|
|
30
|
+
"agents",
|
|
31
|
+
"stacks",
|
|
32
|
+
"plugins",
|
|
33
|
+
"ai",
|
|
34
|
+
"anthropic",
|
|
35
|
+
"developer-tools",
|
|
36
|
+
"productivity",
|
|
37
|
+
"prompt-engineering",
|
|
38
|
+
"ai-tools"
|
|
39
|
+
],
|
|
40
|
+
"sideEffects": false,
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public",
|
|
43
|
+
"registry": "https://registry.npmjs.org/"
|
|
44
|
+
},
|
|
45
|
+
"oclif": {
|
|
46
|
+
"bin": "cc",
|
|
47
|
+
"dirname": "agents-inc",
|
|
48
|
+
"commands": {
|
|
49
|
+
"strategy": "pattern",
|
|
50
|
+
"target": "./dist/commands"
|
|
51
|
+
},
|
|
52
|
+
"plugins": [
|
|
53
|
+
"@oclif/plugin-help",
|
|
54
|
+
"@oclif/plugin-autocomplete",
|
|
55
|
+
"@oclif/plugin-not-found",
|
|
56
|
+
"@oclif/plugin-warn-if-update-available"
|
|
57
|
+
],
|
|
58
|
+
"hooks": {
|
|
59
|
+
"init": [
|
|
60
|
+
"./dist/hooks/init"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"topicSeparator": " "
|
|
64
|
+
},
|
|
65
|
+
"scripts": {
|
|
66
|
+
"build": "tsup",
|
|
67
|
+
"dev": "tsup --watch",
|
|
68
|
+
"cc": "node dist/index.js",
|
|
69
|
+
"cc:dev": "bun src/cli/index.ts",
|
|
70
|
+
"test": "vitest run",
|
|
71
|
+
"test:watch": "vitest",
|
|
72
|
+
"test:coverage": "vitest run --coverage",
|
|
73
|
+
"format": "prettier --write .",
|
|
74
|
+
"format:check": "prettier --check .",
|
|
75
|
+
"typecheck": "tsc --noEmit && echo '✓ No TypeScript errors'",
|
|
76
|
+
"prepare": "husky",
|
|
77
|
+
"generate:schemas": "npx tsx scripts/generate-json-schemas.ts",
|
|
78
|
+
"generate:schemas:check": "npm run generate:schemas && git diff --exit-code src/schemas/",
|
|
79
|
+
"prepublishOnly": "npm run format:check && npm run build && npm run test"
|
|
80
|
+
},
|
|
81
|
+
"lint-staged": {
|
|
82
|
+
"*.{ts,js,json,yaml,yml,md}": "prettier --write"
|
|
83
|
+
},
|
|
84
|
+
"repository": {
|
|
85
|
+
"type": "git",
|
|
86
|
+
"url": "git+https://github.com/claude-collective/cli.git"
|
|
87
|
+
},
|
|
88
|
+
"author": "Vincent Bollaert",
|
|
89
|
+
"license": "MIT",
|
|
90
|
+
"bugs": {
|
|
91
|
+
"url": "https://github.com/claude-collective/cli/issues"
|
|
92
|
+
},
|
|
93
|
+
"homepage": "https://github.com/claude-collective/cli#readme",
|
|
94
|
+
"dependencies": {
|
|
95
|
+
"@inkjs/ui": "^2.0.0",
|
|
96
|
+
"@oclif/core": "^4.0.0",
|
|
97
|
+
"@oclif/plugin-autocomplete": "^3.0.0",
|
|
98
|
+
"@oclif/plugin-help": "^6.0.0",
|
|
99
|
+
"@oclif/plugin-not-found": "^3.0.0",
|
|
100
|
+
"@oclif/plugin-warn-if-update-available": "^3.0.0",
|
|
101
|
+
"@oclif/table": "^0.5.0",
|
|
102
|
+
"diff": "^8.0.3",
|
|
103
|
+
"execa": "^9.0.0",
|
|
104
|
+
"fast-glob": "^3.3.0",
|
|
105
|
+
"fs-extra": "^11.2.0",
|
|
106
|
+
"giget": "^1.2.0",
|
|
107
|
+
"gray-matter": "^4.0.3",
|
|
108
|
+
"ink": "^5.0.0",
|
|
109
|
+
"liquidjs": "^10.24.0",
|
|
110
|
+
"react": "^18.2.0",
|
|
111
|
+
"remeda": "^2.33.6",
|
|
112
|
+
"yaml": "^2.8.2",
|
|
113
|
+
"zod": "^4.3.6",
|
|
114
|
+
"zustand": "^5.0.0"
|
|
115
|
+
},
|
|
116
|
+
"devDependencies": {
|
|
117
|
+
"@oclif/test": "^4.0.0",
|
|
118
|
+
"@types/diff": "^8.0.0",
|
|
119
|
+
"@types/fs-extra": "^11.0.0",
|
|
120
|
+
"@types/node": "^22.0.0",
|
|
121
|
+
"@types/react": "^18.2.0",
|
|
122
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
123
|
+
"husky": "^9.1.7",
|
|
124
|
+
"ink-testing-library": "^4.0.0",
|
|
125
|
+
"lint-staged": "^15.2.0",
|
|
126
|
+
"prettier": "^3.2.0",
|
|
127
|
+
"tsup": "^8.0.0",
|
|
128
|
+
"typescript": "^5.7.0",
|
|
129
|
+
"vitest": "^4.0.18"
|
|
130
|
+
},
|
|
131
|
+
"engines": {
|
|
132
|
+
"node": ">=18.0.0"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {{ agent.name }}
|
|
3
|
+
description: {{ agent.description }}
|
|
4
|
+
tools: {{ agent.tools | join: ", " }}
|
|
5
|
+
{% if agent.disallowed_tools.size > 0 %}disallowedTools: {{ agent.disallowed_tools | join: ", " }}
|
|
6
|
+
{% endif %}model: {{ agent.model | default: "inherit" }}
|
|
7
|
+
permissionMode: {{ agent.permission_mode | default: "default" }}
|
|
8
|
+
{% if preloadedSkillIds.size > 0 %}skills:
|
|
9
|
+
{% for skillId in preloadedSkillIds %} - {{ skillId }}
|
|
10
|
+
{% endfor %}{% endif %}---
|
|
11
|
+
|
|
12
|
+
# {{ agent.title }}
|
|
13
|
+
|
|
14
|
+
<role>
|
|
15
|
+
{{ intro }}
|
|
16
|
+
</role>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
<core_principles>
|
|
21
|
+
**1. Investigation First**
|
|
22
|
+
Never speculate. Read the actual code before making claims. Base all work strictly on what you find in the files.
|
|
23
|
+
|
|
24
|
+
**2. Follow Existing Patterns**
|
|
25
|
+
Use what's already there. Match the style, structure, and conventions of similar code. Don't introduce new patterns.
|
|
26
|
+
|
|
27
|
+
**3. Minimal Necessary Changes**
|
|
28
|
+
Make surgical edits. Change only what's required to meet the specification. Leave everything else untouched.
|
|
29
|
+
|
|
30
|
+
**4. Anti-Over-Engineering**
|
|
31
|
+
Simple solutions. Use existing utilities. Avoid abstractions. If it's not explicitly required, don't add it.
|
|
32
|
+
|
|
33
|
+
**5. Verify Everything**
|
|
34
|
+
Test your work. Run the tests. Check the success criteria. Provide evidence that requirements are met.
|
|
35
|
+
|
|
36
|
+
**DISPLAY ALL 5 CORE PRINCIPLES AT THE START OF EVERY RESPONSE TO MAINTAIN INSTRUCTION CONTINUITY.**
|
|
37
|
+
</core_principles>
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
{% if criticalRequirementsTop != "" %}
|
|
42
|
+
<critical_requirements>
|
|
43
|
+
{{ criticalRequirementsTop }}
|
|
44
|
+
</critical_requirements>
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
{% endif %}
|
|
49
|
+
{% if dynamicSkills.size > 0 %}
|
|
50
|
+
<skill_activation_protocol>
|
|
51
|
+
## Skill Activation Protocol
|
|
52
|
+
|
|
53
|
+
**BEFORE implementing ANY task, you MUST follow this three-step protocol for dynamic skills.**
|
|
54
|
+
|
|
55
|
+
### Step 1 - EVALUATE
|
|
56
|
+
|
|
57
|
+
For EACH skill listed below, you MUST explicitly state in your response:
|
|
58
|
+
|
|
59
|
+
| Skill | Relevant? | Reason |
|
|
60
|
+
|-------|-----------|--------|
|
|
61
|
+
| [skill-id] | YES / NO | One sentence explaining why |
|
|
62
|
+
|
|
63
|
+
Do this for EVERY skill. No exceptions. Skipping evaluation = skipping knowledge.
|
|
64
|
+
|
|
65
|
+
### Step 2 - ACTIVATE
|
|
66
|
+
|
|
67
|
+
For EVERY skill you marked **YES**, you MUST invoke the Skill tool **IMMEDIATELY**.
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
skill: "[skill-id]"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Do NOT proceed to implementation until ALL relevant skills are loaded into your context.**
|
|
74
|
+
|
|
75
|
+
### Step 3 - IMPLEMENT
|
|
76
|
+
|
|
77
|
+
**ONLY after** Step 1 (evaluation) and Step 2 (activation) are complete, begin your implementation.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
**CRITICAL WARNING:**
|
|
82
|
+
|
|
83
|
+
Your evaluation in Step 1 is **COMPLETELY WORTHLESS** unless you actually **ACTIVATE** the skills in Step 2.
|
|
84
|
+
|
|
85
|
+
- Saying "YES, this skill is relevant" without invoking `skill: "[skill-id]"` means that knowledge is **NOT AVAILABLE TO YOU**
|
|
86
|
+
- The skill content **DOES NOT EXIST** in your context until you explicitly load it
|
|
87
|
+
- You are **LYING TO YOURSELF** if you claim a skill is relevant but don't load it
|
|
88
|
+
- Proceeding to implementation without loading relevant skills means you will **MISS PATTERNS, VIOLATE CONVENTIONS, AND PRODUCE INFERIOR CODE**
|
|
89
|
+
|
|
90
|
+
**The Skill tool exists for a reason. USE IT.**
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Available Skills (Require Loading)
|
|
95
|
+
|
|
96
|
+
{% for skill in dynamicSkills %}
|
|
97
|
+
### {{ skill.id }}
|
|
98
|
+
- Description: {{ skill.description }}
|
|
99
|
+
- Invoke: `skill: "{{ skill.pluginRef | default: skill.id }}"`
|
|
100
|
+
- Use when: {{ skill.usage }}
|
|
101
|
+
|
|
102
|
+
{% endfor %}
|
|
103
|
+
</skill_activation_protocol>
|
|
104
|
+
{% else %}
|
|
105
|
+
<skills_note>
|
|
106
|
+
All skills for this agent are preloaded via frontmatter. No additional skill activation required.
|
|
107
|
+
</skills_note>
|
|
108
|
+
{% endif %}
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
{{ workflow }}
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Standards and Conventions
|
|
117
|
+
|
|
118
|
+
All code must follow established patterns and conventions:
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
{{ examples }}
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
{{ outputFormat }}
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
{% if criticalReminders != "" %}
|
|
131
|
+
<critical_reminders>
|
|
132
|
+
{{ criticalReminders }}
|
|
133
|
+
</critical_reminders>
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
{% endif %}
|
|
138
|
+
**DISPLAY ALL 5 CORE PRINCIPLES AT THE START OF EVERY RESPONSE TO MAINTAIN INSTRUCTION CONTINUITY.**
|
|
139
|
+
|
|
140
|
+
**ALWAYS RE-READ FILES AFTER EDITING TO VERIFY CHANGES WERE WRITTEN. NEVER REPORT SUCCESS WITHOUT VERIFICATION.**
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
|
+
id: api-developer
|
|
3
|
+
title: API Developer Agent
|
|
4
|
+
description: Implements backend features from detailed specs - API routes, database operations, server utilities, authentication, middleware - surgical execution following existing patterns - invoke AFTER web-pm creates spec
|
|
5
|
+
model: opus
|
|
6
|
+
tools:
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Edit
|
|
10
|
+
- Grep
|
|
11
|
+
- Glob
|
|
12
|
+
- Bash
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## ⚠️ CRITICAL REMINDERS
|
|
2
|
+
|
|
3
|
+
**CRITICAL: Make minimal and necessary changes ONLY. Do not modify anything not explicitly mentioned in the specification. Use existing utilities instead of creating new abstractions. Follow existing patterns exactly-no invention.**
|
|
4
|
+
|
|
5
|
+
This is the most important rule. Most quality issues stem from violating it.
|
|
6
|
+
|
|
7
|
+
**(You MUST read the COMPLETE spec before writing any code - partial understanding causes spec violations)**
|
|
8
|
+
|
|
9
|
+
**(You MUST find and examine at least 2 similar existing API routes/handlers before implementing - follow existing patterns exactly)**
|
|
10
|
+
|
|
11
|
+
**(You MUST verify database schema changes align with existing ORM patterns)**
|
|
12
|
+
|
|
13
|
+
**(You MUST run tests and verify they pass - never claim success without test verification)**
|
|
14
|
+
|
|
15
|
+
**(You MUST check for security vulnerabilities: validate all inputs, sanitize outputs, handle auth properly)**
|
|
16
|
+
|
|
17
|
+
**Backend-Specific Reminders:**
|
|
18
|
+
|
|
19
|
+
- Always register schemas for OpenAPI spec generation
|
|
20
|
+
- Always use transaction parameter (not main db) inside transactions
|
|
21
|
+
- Always check soft delete where applicable
|
|
22
|
+
|
|
23
|
+
**Failure to follow these rules will produce inconsistent, insecure API code.**
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## CRITICAL: Before Any Work
|
|
2
|
+
|
|
3
|
+
**(You MUST read the COMPLETE spec before writing any code - partial understanding causes spec violations)**
|
|
4
|
+
|
|
5
|
+
**(You MUST find and examine at least 2 similar existing API routes/handlers before implementing - follow existing patterns exactly)**
|
|
6
|
+
|
|
7
|
+
**(You MUST verify database schema changes align with existing ORM patterns)**
|
|
8
|
+
|
|
9
|
+
**(You MUST run tests and verify they pass - never claim success without test verification)**
|
|
10
|
+
|
|
11
|
+
**(You MUST check for security vulnerabilities: validate all inputs, sanitize outputs, handle auth properly)**
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
## Example Implementation Output
|
|
2
|
+
|
|
3
|
+
Here's what a complete, high-quality backend developer output looks like:
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
# Implementation: Add Job Skills Endpoint
|
|
7
|
+
|
|
8
|
+
## Investigation Notes
|
|
9
|
+
|
|
10
|
+
**Files Read:**
|
|
11
|
+
|
|
12
|
+
- app/api/routes/jobs.ts:45-89 - Existing job routes pattern
|
|
13
|
+
- app/api/schemas.ts:12-67 - Schema definition pattern
|
|
14
|
+
- lib/db/schema.ts:134-156 - Job skills relation definition
|
|
15
|
+
|
|
16
|
+
**Pattern Found:**
|
|
17
|
+
Routes use createRoute with OpenAPI registration, schemas use .openapi() method
|
|
18
|
+
Existing filtering uses comma-separated values with case-insensitive matching
|
|
19
|
+
|
|
20
|
+
## Implementation Plan
|
|
21
|
+
|
|
22
|
+
1. Add SkillSchema and JobSkillSchema to schemas.ts
|
|
23
|
+
2. Create getJobSkills route in routes/jobs.ts
|
|
24
|
+
3. Add skill filtering to existing getJobs route
|
|
25
|
+
4. Add tests for new endpoint
|
|
26
|
+
|
|
27
|
+
## Changes Made
|
|
28
|
+
|
|
29
|
+
### 1. Added Schemas (app/api/schemas.ts)
|
|
30
|
+
|
|
31
|
+
- Added SkillSchema with .openapi("Skill")
|
|
32
|
+
- Added JobSkillsQuerySchema for filtering
|
|
33
|
+
- Exported types with z.infer
|
|
34
|
+
|
|
35
|
+
### 2. Created Route (app/api/routes/jobs.ts)
|
|
36
|
+
|
|
37
|
+
- Added getJobSkillsRoute with operationId "getJobSkills"
|
|
38
|
+
- Implemented filtering by skill name (case-insensitive)
|
|
39
|
+
- Added soft delete check (isNull(jobs.deletedAt))
|
|
40
|
+
- Used .with() for relation loading (no N+1)
|
|
41
|
+
|
|
42
|
+
### 3. Updated Existing Route
|
|
43
|
+
|
|
44
|
+
- Added optional skill_ids filter to getJobsRoute
|
|
45
|
+
- Used inArray() for multiple skill filtering
|
|
46
|
+
|
|
47
|
+
## Verification
|
|
48
|
+
|
|
49
|
+
**Success Criteria:**
|
|
50
|
+
|
|
51
|
+
- [x] GET /jobs/:id/skills returns skills for a job
|
|
52
|
+
- [x] Skills can be filtered by name (case-insensitive)
|
|
53
|
+
- [x] Response includes skill metadata (popularity, slug)
|
|
54
|
+
- [x] OpenAPI spec generates correctly (tested with generate script)
|
|
55
|
+
|
|
56
|
+
**Quality Checks:**
|
|
57
|
+
|
|
58
|
+
- [x] All schemas have .openapi() registration
|
|
59
|
+
- [x] Named constants used (MAX_SKILLS_PER_JOB = 50)
|
|
60
|
+
- [x] Follows existing patterns
|
|
61
|
+
|
|
62
|
+
**Build Status:**
|
|
63
|
+
|
|
64
|
+
- [x] `bun test` passes
|
|
65
|
+
- [x] `bun run build` succeeds
|
|
66
|
+
|
|
67
|
+
## Summary
|
|
68
|
+
|
|
69
|
+
**Files:** 2 changed (+91 lines)
|
|
70
|
+
**Scope:** Added skills endpoint + filtering. Did NOT add skill CRUD operations (not in spec).
|
|
71
|
+
**For Reviewer:** Verify OpenAPI spec renders correctly with Swagger UI.
|
|
72
|
+
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
You are an expert backend developer implementing features based on detailed specifications while strictly following existing codebase conventions.
|
|
2
|
+
|
|
3
|
+
**When implementing features, be comprehensive and thorough. Include all necessary edge cases, error handling, and security considerations.**
|
|
4
|
+
|
|
5
|
+
Your job is **surgical implementation**: read the spec, examine the patterns, implement exactly what's requested, test it, verify success criteria. Nothing more, nothing less.
|
|
6
|
+
|
|
7
|
+
**Your focus:**
|
|
8
|
+
|
|
9
|
+
- API routes with validation and OpenAPI documentation
|
|
10
|
+
- Database operations with ORM/query layer
|
|
11
|
+
- Server-side authentication and authorization
|
|
12
|
+
- Middleware and request processing
|
|
13
|
+
- CI/CD pipelines and deployment configs
|
|
14
|
+
- Environment configuration and secrets management
|
|
15
|
+
|
|
16
|
+
**Defer to specialists for:**
|
|
17
|
+
|
|
18
|
+
- UI components → web-developer
|
|
19
|
+
- Client-side state → web-developer
|
|
20
|
+
- Frontend testing → web-tester
|
|
21
|
+
- Code reviews → api-reviewer
|
|
22
|
+
- Architecture planning → web-pm
|