@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,301 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
getAgentDefinitions,
|
|
4
|
+
recompileAgents
|
|
5
|
+
} from "../chunk-UICL22RT.js";
|
|
6
|
+
import {
|
|
7
|
+
Wizard
|
|
8
|
+
} from "../chunk-B2UBHA66.js";
|
|
9
|
+
import "../chunk-YND42IXK.js";
|
|
10
|
+
import "../chunk-WEUVWHMA.js";
|
|
11
|
+
import "../chunk-IZZ4IIEG.js";
|
|
12
|
+
import "../chunk-PBEHPQLK.js";
|
|
13
|
+
import "../chunk-IYG2LAIM.js";
|
|
14
|
+
import "../chunk-LGUI3PMO.js";
|
|
15
|
+
import "../chunk-OMV7TLWD.js";
|
|
16
|
+
import "../chunk-O4D67NN7.js";
|
|
17
|
+
import "../chunk-4RAY5AOI.js";
|
|
18
|
+
import "../chunk-SO22IQPY.js";
|
|
19
|
+
import "../chunk-H566H3MQ.js";
|
|
20
|
+
import "../chunk-FZGYSLJL.js";
|
|
21
|
+
import "../chunk-QPTOIZAT.js";
|
|
22
|
+
import "../chunk-5PIKNCZX.js";
|
|
23
|
+
import "../chunk-7SOPVGDV.js";
|
|
24
|
+
import "../chunk-A27LOC4Z.js";
|
|
25
|
+
import "../chunk-JMVWYAHT.js";
|
|
26
|
+
import "../chunk-OGJIZ6QH.js";
|
|
27
|
+
import "../chunk-DC5AK3LW.js";
|
|
28
|
+
import "../chunk-Z4TWOP3H.js";
|
|
29
|
+
import "../chunk-U3IGFMCY.js";
|
|
30
|
+
import {
|
|
31
|
+
claudePluginInstall,
|
|
32
|
+
claudePluginUninstall
|
|
33
|
+
} from "../chunk-UX2H2K2G.js";
|
|
34
|
+
import "../chunk-3ZOIOVKT.js";
|
|
35
|
+
import {
|
|
36
|
+
ERROR_MESSAGES,
|
|
37
|
+
INFO_MESSAGES,
|
|
38
|
+
STATUS_MESSAGES
|
|
39
|
+
} from "../chunk-R74PZWQS.js";
|
|
40
|
+
import {
|
|
41
|
+
BaseCommand,
|
|
42
|
+
EXIT_CODES
|
|
43
|
+
} from "../chunk-ODUOU55D.js";
|
|
44
|
+
import {
|
|
45
|
+
archiveLocalSkill,
|
|
46
|
+
detectInstallation,
|
|
47
|
+
discoverAllPluginSkills,
|
|
48
|
+
getMarketplaceLabel,
|
|
49
|
+
loadSkillsMatrixFromSource,
|
|
50
|
+
resolveBranding,
|
|
51
|
+
restoreArchivedSkill
|
|
52
|
+
} from "../chunk-MM7NK5N2.js";
|
|
53
|
+
import {
|
|
54
|
+
typedEntries
|
|
55
|
+
} from "../chunk-T4EXUIBY.js";
|
|
56
|
+
import {
|
|
57
|
+
getErrorMessage
|
|
58
|
+
} from "../chunk-BZN2Z5P7.js";
|
|
59
|
+
import "../chunk-LAPCUV4D.js";
|
|
60
|
+
import {
|
|
61
|
+
init_esm_shims
|
|
62
|
+
} from "../chunk-DHET7RCE.js";
|
|
63
|
+
|
|
64
|
+
// src/cli/commands/edit.tsx
|
|
65
|
+
init_esm_shims();
|
|
66
|
+
import { Flags } from "@oclif/core";
|
|
67
|
+
import { render } from "ink";
|
|
68
|
+
import { jsx } from "react/jsx-runtime";
|
|
69
|
+
var SOURCE_DISPLAY_NAMES = {
|
|
70
|
+
public: "Public",
|
|
71
|
+
local: "Local"
|
|
72
|
+
};
|
|
73
|
+
function formatSourceDisplayName(sourceName) {
|
|
74
|
+
return SOURCE_DISPLAY_NAMES[sourceName] ?? sourceName;
|
|
75
|
+
}
|
|
76
|
+
var Edit = class _Edit extends BaseCommand {
|
|
77
|
+
static summary = "Edit skills in the plugin";
|
|
78
|
+
static description = "Modify the currently installed skills via interactive wizard";
|
|
79
|
+
static examples = [
|
|
80
|
+
{
|
|
81
|
+
description: "Open the edit wizard",
|
|
82
|
+
command: "<%= config.bin %> <%= command.id %>"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
description: "Edit with a custom source",
|
|
86
|
+
command: "<%= config.bin %> <%= command.id %> --source github:org/marketplace"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
description: "Force refresh skills from remote",
|
|
90
|
+
command: "<%= config.bin %> <%= command.id %> --refresh"
|
|
91
|
+
}
|
|
92
|
+
];
|
|
93
|
+
static flags = {
|
|
94
|
+
...BaseCommand.baseFlags,
|
|
95
|
+
refresh: Flags.boolean({
|
|
96
|
+
description: "Force refresh from remote sources",
|
|
97
|
+
default: false
|
|
98
|
+
}),
|
|
99
|
+
"agent-source": Flags.string({
|
|
100
|
+
description: "Remote agent partials source (default: local CLI)"
|
|
101
|
+
})
|
|
102
|
+
};
|
|
103
|
+
async run() {
|
|
104
|
+
const { flags } = await this.parse(_Edit);
|
|
105
|
+
const installation = await detectInstallation();
|
|
106
|
+
if (!installation) {
|
|
107
|
+
this.error(ERROR_MESSAGES.NO_INSTALLATION, {
|
|
108
|
+
exit: EXIT_CODES.ERROR
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const projectDir = process.cwd();
|
|
112
|
+
const isPluginMode = installation.mode === "plugin";
|
|
113
|
+
const modeLabel = installation.mode === "local" ? "Local" : "Plugin";
|
|
114
|
+
this.log(`Edit ${modeLabel} Skills
|
|
115
|
+
`);
|
|
116
|
+
this.log(STATUS_MESSAGES.LOADING_MARKETPLACE_SOURCE);
|
|
117
|
+
let sourceResult;
|
|
118
|
+
try {
|
|
119
|
+
sourceResult = await loadSkillsMatrixFromSource({
|
|
120
|
+
sourceFlag: flags.source,
|
|
121
|
+
projectDir,
|
|
122
|
+
forceRefresh: flags.refresh
|
|
123
|
+
});
|
|
124
|
+
const sourceInfo = sourceResult.isLocal ? "local" : sourceResult.sourceConfig.sourceOrigin;
|
|
125
|
+
this.log(
|
|
126
|
+
`\u2713 Loaded ${Object.keys(sourceResult.matrix.skills).length} skills (${sourceInfo})
|
|
127
|
+
`
|
|
128
|
+
);
|
|
129
|
+
} catch (error) {
|
|
130
|
+
this.handleError(error);
|
|
131
|
+
}
|
|
132
|
+
this.log("Reading current skills...");
|
|
133
|
+
let currentSkillIds;
|
|
134
|
+
try {
|
|
135
|
+
const discoveredSkills = await discoverAllPluginSkills(projectDir);
|
|
136
|
+
currentSkillIds = Object.keys(discoveredSkills);
|
|
137
|
+
this.log(`\u2713 Current plugin has ${currentSkillIds.length} skills
|
|
138
|
+
`);
|
|
139
|
+
} catch (error) {
|
|
140
|
+
this.handleError(error);
|
|
141
|
+
}
|
|
142
|
+
let wizardResult = null;
|
|
143
|
+
const marketplaceLabel = getMarketplaceLabel(sourceResult);
|
|
144
|
+
const branding = await resolveBranding(projectDir);
|
|
145
|
+
const { waitUntilExit } = render(
|
|
146
|
+
/* @__PURE__ */ jsx(
|
|
147
|
+
Wizard,
|
|
148
|
+
{
|
|
149
|
+
matrix: sourceResult.matrix,
|
|
150
|
+
version: this.config.version,
|
|
151
|
+
marketplaceLabel,
|
|
152
|
+
brandingName: branding.name,
|
|
153
|
+
initialStep: "build",
|
|
154
|
+
initialInstallMode: sourceResult.marketplace ? "plugin" : "local",
|
|
155
|
+
installedSkillIds: currentSkillIds,
|
|
156
|
+
projectDir: process.cwd(),
|
|
157
|
+
onComplete: (result2) => {
|
|
158
|
+
wizardResult = result2;
|
|
159
|
+
},
|
|
160
|
+
onCancel: () => {
|
|
161
|
+
this.log("\nEdit cancelled");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
)
|
|
165
|
+
);
|
|
166
|
+
await waitUntilExit();
|
|
167
|
+
const result = wizardResult;
|
|
168
|
+
if (!result || result.cancelled) {
|
|
169
|
+
this.error("Cancelled", { exit: EXIT_CODES.CANCELLED });
|
|
170
|
+
}
|
|
171
|
+
if (!result.validation.valid) {
|
|
172
|
+
const errorMessages = result.validation.errors.map((e) => e.message).join("\n ");
|
|
173
|
+
this.error(`Selection has validation errors:
|
|
174
|
+
${errorMessages}`, {
|
|
175
|
+
exit: EXIT_CODES.ERROR
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const addedSkills = result.selectedSkills.filter((id) => !currentSkillIds.includes(id));
|
|
179
|
+
const removedSkills = currentSkillIds.filter((id) => !result.selectedSkills.includes(id));
|
|
180
|
+
const sourceChanges = /* @__PURE__ */ new Map();
|
|
181
|
+
for (const [skillId, selectedSource] of typedEntries(
|
|
182
|
+
result.sourceSelections
|
|
183
|
+
)) {
|
|
184
|
+
const skill = sourceResult.matrix.skills[skillId];
|
|
185
|
+
if (skill?.activeSource && skill.activeSource.name !== selectedSource) {
|
|
186
|
+
sourceChanges.set(skillId, {
|
|
187
|
+
from: skill.activeSource.name,
|
|
188
|
+
to: selectedSource
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const hasSourceChanges = sourceChanges.size > 0;
|
|
193
|
+
const hasSkillChanges = addedSkills.length > 0 || removedSkills.length > 0;
|
|
194
|
+
if (result.validation.warnings.length > 0) {
|
|
195
|
+
this.log("\nWarnings:");
|
|
196
|
+
for (const warning of result.validation.warnings) {
|
|
197
|
+
this.warn(` ! ${warning.message}`);
|
|
198
|
+
}
|
|
199
|
+
this.log("");
|
|
200
|
+
}
|
|
201
|
+
if (!hasSkillChanges && !hasSourceChanges) {
|
|
202
|
+
this.log(INFO_MESSAGES.NO_CHANGES_MADE);
|
|
203
|
+
this.log("Plugin unchanged\n");
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this.log("\nChanges:");
|
|
207
|
+
for (const skillId of addedSkills) {
|
|
208
|
+
const skill = sourceResult.matrix.skills[skillId];
|
|
209
|
+
this.log(` + ${skill?.displayName || skillId}`);
|
|
210
|
+
}
|
|
211
|
+
for (const skillId of removedSkills) {
|
|
212
|
+
const skill = sourceResult.matrix.skills[skillId];
|
|
213
|
+
this.log(` - ${skill?.displayName || skillId}`);
|
|
214
|
+
}
|
|
215
|
+
for (const [skillId, change] of sourceChanges) {
|
|
216
|
+
const fromLabel = formatSourceDisplayName(change.from);
|
|
217
|
+
const toLabel = formatSourceDisplayName(change.to);
|
|
218
|
+
this.log(` ~ ${skillId} (${fromLabel} \u2192 ${toLabel})`);
|
|
219
|
+
}
|
|
220
|
+
this.log("");
|
|
221
|
+
for (const [skillId, change] of sourceChanges) {
|
|
222
|
+
if (change.from === "local") {
|
|
223
|
+
await archiveLocalSkill(projectDir, skillId);
|
|
224
|
+
}
|
|
225
|
+
if (change.to === "local") {
|
|
226
|
+
await restoreArchivedSkill(projectDir, skillId);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (isPluginMode && sourceResult.marketplace) {
|
|
230
|
+
for (const skillId of addedSkills) {
|
|
231
|
+
const pluginRef = `${skillId}@${sourceResult.marketplace}`;
|
|
232
|
+
this.log(`Installing plugin: ${pluginRef}...`);
|
|
233
|
+
try {
|
|
234
|
+
await claudePluginInstall(pluginRef, "project", projectDir);
|
|
235
|
+
} catch (error) {
|
|
236
|
+
this.warn(`Failed to install plugin ${pluginRef}: ${getErrorMessage(error)}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
for (const skillId of removedSkills) {
|
|
240
|
+
this.log(`Uninstalling plugin: ${skillId}...`);
|
|
241
|
+
try {
|
|
242
|
+
await claudePluginUninstall(skillId, "project", projectDir);
|
|
243
|
+
} catch (error) {
|
|
244
|
+
this.warn(`Failed to uninstall plugin ${skillId}: ${getErrorMessage(error)}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
let sourcePath;
|
|
249
|
+
this.log(
|
|
250
|
+
flags["agent-source"] ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS : STATUS_MESSAGES.LOADING_AGENT_PARTIALS
|
|
251
|
+
);
|
|
252
|
+
try {
|
|
253
|
+
const agentDefs = await getAgentDefinitions(flags["agent-source"], {
|
|
254
|
+
forceRefresh: flags.refresh
|
|
255
|
+
});
|
|
256
|
+
sourcePath = agentDefs.sourcePath;
|
|
257
|
+
this.log(flags["agent-source"] ? "\u2713 Agent partials fetched\n" : "\u2713 Agent partials loaded\n");
|
|
258
|
+
} catch (error) {
|
|
259
|
+
this.handleError(error);
|
|
260
|
+
}
|
|
261
|
+
this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);
|
|
262
|
+
try {
|
|
263
|
+
const recompileSkills = await discoverAllPluginSkills(projectDir);
|
|
264
|
+
const recompileResult = await recompileAgents({
|
|
265
|
+
pluginDir: projectDir,
|
|
266
|
+
sourcePath,
|
|
267
|
+
skills: recompileSkills,
|
|
268
|
+
projectDir,
|
|
269
|
+
outputDir: installation.agentsDir
|
|
270
|
+
});
|
|
271
|
+
if (recompileResult.failed.length > 0) {
|
|
272
|
+
this.log(
|
|
273
|
+
`\u2713 Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)
|
|
274
|
+
`
|
|
275
|
+
);
|
|
276
|
+
for (const warning of recompileResult.warnings) {
|
|
277
|
+
this.warn(warning);
|
|
278
|
+
}
|
|
279
|
+
} else if (recompileResult.compiled.length > 0) {
|
|
280
|
+
this.log(`\u2713 Recompiled ${recompileResult.compiled.length} agents
|
|
281
|
+
`);
|
|
282
|
+
} else {
|
|
283
|
+
this.log("\u2713 No agents to recompile\n");
|
|
284
|
+
}
|
|
285
|
+
} catch (error) {
|
|
286
|
+
this.warn(`Agent recompilation failed: ${getErrorMessage(error)}`);
|
|
287
|
+
this.log("You can manually recompile with 'cc compile'.\n");
|
|
288
|
+
}
|
|
289
|
+
const summaryParts = [`${addedSkills.length} added`, `${removedSkills.length} removed`];
|
|
290
|
+
if (hasSourceChanges) {
|
|
291
|
+
summaryParts.push(`${sourceChanges.size} source${sourceChanges.size > 1 ? "s" : ""} changed`);
|
|
292
|
+
}
|
|
293
|
+
this.log(`
|
|
294
|
+
\u2713 Plugin updated! (${summaryParts.join(", ")})
|
|
295
|
+
`);
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
export {
|
|
299
|
+
Edit as default
|
|
300
|
+
};
|
|
301
|
+
//# sourceMappingURL=edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/edit.tsx"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport { render } from \"ink\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { loadSkillsMatrixFromSource, getMarketplaceLabel } from \"../lib/loading/index.js\";\nimport { discoverAllPluginSkills } from \"../lib/plugins/index.js\";\nimport { archiveLocalSkill, restoreArchivedSkill } from \"../lib/skills/index.js\";\nimport { recompileAgents, getAgentDefinitions } from \"../lib/agents/index.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { detectInstallation } from \"../lib/installation/index.js\";\nimport { resolveBranding } from \"../lib/configuration/config.js\";\nimport { ERROR_MESSAGES, STATUS_MESSAGES, INFO_MESSAGES } from \"../utils/messages.js\";\nimport { claudePluginInstall, claudePluginUninstall } from \"../utils/exec.js\";\nimport type { SkillId } from \"../types/index.js\";\nimport { typedEntries } from \"../utils/typed-object.js\";\n\nconst SOURCE_DISPLAY_NAMES: Record<string, string> = {\n public: \"Public\",\n local: \"Local\",\n};\n\nfunction formatSourceDisplayName(sourceName: string): string {\n return SOURCE_DISPLAY_NAMES[sourceName] ?? sourceName;\n}\n\nexport default class Edit extends BaseCommand {\n static summary = \"Edit skills in the plugin\";\n static description = \"Modify the currently installed skills via interactive wizard\";\n\n static examples = [\n {\n description: \"Open the edit wizard\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Edit with a custom source\",\n command: \"<%= config.bin %> <%= command.id %> --source github:org/marketplace\",\n },\n {\n description: \"Force refresh skills from remote\",\n command: \"<%= config.bin %> <%= command.id %> --refresh\",\n },\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Edit);\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const projectDir = process.cwd();\n const isPluginMode = installation.mode === \"plugin\";\n\n const modeLabel = installation.mode === \"local\" ? \"Local\" : \"Plugin\";\n this.log(`Edit ${modeLabel} Skills\\n`);\n\n this.log(STATUS_MESSAGES.LOADING_MARKETPLACE_SOURCE);\n let sourceResult;\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n\n const sourceInfo = sourceResult.isLocal ? \"local\" : sourceResult.sourceConfig.sourceOrigin;\n this.log(\n `✓ Loaded ${Object.keys(sourceResult.matrix.skills).length} skills (${sourceInfo})\\n`,\n );\n } catch (error) {\n this.handleError(error);\n }\n\n this.log(\"Reading current skills...\");\n let currentSkillIds: SkillId[];\n try {\n const discoveredSkills = await discoverAllPluginSkills(projectDir);\n // Boundary cast: discoverAllPluginSkills keys are skill IDs from frontmatter\n currentSkillIds = Object.keys(discoveredSkills) as SkillId[];\n this.log(`✓ Current plugin has ${currentSkillIds.length} skills\\n`);\n } catch (error) {\n this.handleError(error);\n }\n\n let wizardResult: WizardResultV2 | null = null;\n const marketplaceLabel = getMarketplaceLabel(sourceResult);\n const branding = await resolveBranding(projectDir);\n\n const { waitUntilExit } = render(\n <Wizard\n matrix={sourceResult.matrix}\n version={this.config.version}\n marketplaceLabel={marketplaceLabel}\n brandingName={branding.name}\n initialStep=\"build\"\n initialInstallMode={sourceResult.marketplace ? \"plugin\" : \"local\"}\n installedSkillIds={currentSkillIds}\n projectDir={process.cwd()}\n onComplete={(result) => {\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"\\nEdit cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n const result = wizardResult as WizardResultV2 | null;\n\n if (!result || result.cancelled) {\n this.error(\"Cancelled\", { exit: EXIT_CODES.CANCELLED });\n }\n\n if (!result.validation.valid) {\n const errorMessages = result.validation.errors.map((e) => e.message).join(\"\\n \");\n this.error(`Selection has validation errors:\\n ${errorMessages}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const addedSkills = result.selectedSkills.filter((id) => !currentSkillIds.includes(id));\n const removedSkills = currentSkillIds.filter((id) => !result.selectedSkills.includes(id));\n\n const sourceChanges = new Map<SkillId, { from: string; to: string }>();\n for (const [skillId, selectedSource] of typedEntries<SkillId, string>(\n result.sourceSelections,\n )) {\n const skill = sourceResult.matrix.skills[skillId];\n if (skill?.activeSource && skill.activeSource.name !== selectedSource) {\n sourceChanges.set(skillId, {\n from: skill.activeSource.name,\n to: selectedSource,\n });\n }\n }\n\n const hasSourceChanges = sourceChanges.size > 0;\n const hasSkillChanges = addedSkills.length > 0 || removedSkills.length > 0;\n\n if (result.validation.warnings.length > 0) {\n this.log(\"\\nWarnings:\");\n for (const warning of result.validation.warnings) {\n this.warn(` ! ${warning.message}`);\n }\n this.log(\"\");\n }\n\n if (!hasSkillChanges && !hasSourceChanges) {\n this.log(INFO_MESSAGES.NO_CHANGES_MADE);\n this.log(\"Plugin unchanged\\n\");\n return;\n }\n\n this.log(\"\\nChanges:\");\n for (const skillId of addedSkills) {\n const skill = sourceResult.matrix.skills[skillId];\n this.log(` + ${skill?.displayName || skillId}`);\n }\n for (const skillId of removedSkills) {\n const skill = sourceResult.matrix.skills[skillId];\n this.log(` - ${skill?.displayName || skillId}`);\n }\n for (const [skillId, change] of sourceChanges) {\n const fromLabel = formatSourceDisplayName(change.from);\n const toLabel = formatSourceDisplayName(change.to);\n this.log(` ~ ${skillId} (${fromLabel} \\u2192 ${toLabel})`);\n }\n this.log(\"\");\n\n for (const [skillId, change] of sourceChanges) {\n if (change.from === \"local\") {\n await archiveLocalSkill(projectDir, skillId);\n }\n if (change.to === \"local\") {\n await restoreArchivedSkill(projectDir, skillId);\n }\n }\n\n if (isPluginMode && sourceResult.marketplace) {\n for (const skillId of addedSkills) {\n const pluginRef = `${skillId}@${sourceResult.marketplace}`;\n this.log(`Installing plugin: ${pluginRef}...`);\n try {\n await claudePluginInstall(pluginRef, \"project\", projectDir);\n } catch (error) {\n this.warn(`Failed to install plugin ${pluginRef}: ${getErrorMessage(error)}`);\n }\n }\n for (const skillId of removedSkills) {\n this.log(`Uninstalling plugin: ${skillId}...`);\n try {\n await claudePluginUninstall(skillId, \"project\", projectDir);\n } catch (error) {\n this.warn(`Failed to uninstall plugin ${skillId}: ${getErrorMessage(error)}`);\n }\n }\n }\n\n let sourcePath: string;\n this.log(\n flags[\"agent-source\"]\n ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS\n : STATUS_MESSAGES.LOADING_AGENT_PARTIALS,\n );\n try {\n const agentDefs = await getAgentDefinitions(flags[\"agent-source\"], {\n forceRefresh: flags.refresh,\n });\n sourcePath = agentDefs.sourcePath;\n this.log(flags[\"agent-source\"] ? \"✓ Agent partials fetched\\n\" : \"✓ Agent partials loaded\\n\");\n } catch (error) {\n this.handleError(error);\n }\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileSkills = await discoverAllPluginSkills(projectDir);\n\n const recompileResult = await recompileAgents({\n pluginDir: projectDir,\n sourcePath,\n skills: recompileSkills,\n projectDir,\n outputDir: installation.agentsDir,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `✓ Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)\\n`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`✓ Recompiled ${recompileResult.compiled.length} agents\\n`);\n } else {\n this.log(\"✓ No agents to recompile\\n\");\n }\n } catch (error) {\n this.warn(`Agent recompilation failed: ${getErrorMessage(error)}`);\n this.log(\"You can manually recompile with 'cc compile'.\\n\");\n }\n\n const summaryParts = [`${addedSkills.length} added`, `${removedSkills.length} removed`];\n if (hasSourceChanges) {\n summaryParts.push(`${sourceChanges.size} source${sourceChanges.size > 1 ? \"s\" : \"\"} changed`);\n }\n this.log(`\\n\\u2713 Plugin updated! (${summaryParts.join(\", \")})\\n`);\n }\n}\n"],"mappings":"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","names":["result"]}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
BaseCommand,
|
|
4
|
+
EXIT_CODES
|
|
5
|
+
} from "../chunk-ODUOU55D.js";
|
|
6
|
+
import {
|
|
7
|
+
copySkillsToLocalFlattened,
|
|
8
|
+
loadProjectSourceConfig,
|
|
9
|
+
loadSkillsMatrixFromSource,
|
|
10
|
+
resolveSource,
|
|
11
|
+
saveSourceToProjectConfig
|
|
12
|
+
} from "../chunk-MM7NK5N2.js";
|
|
13
|
+
import {
|
|
14
|
+
typedKeys
|
|
15
|
+
} from "../chunk-T4EXUIBY.js";
|
|
16
|
+
import {
|
|
17
|
+
copy,
|
|
18
|
+
directoryExists,
|
|
19
|
+
ensureDir,
|
|
20
|
+
fileExists,
|
|
21
|
+
writeFile
|
|
22
|
+
} from "../chunk-BZN2Z5P7.js";
|
|
23
|
+
import {
|
|
24
|
+
CLAUDE_SRC_DIR,
|
|
25
|
+
DEFAULT_BRANDING,
|
|
26
|
+
DIRS,
|
|
27
|
+
LOCAL_SKILLS_PATH,
|
|
28
|
+
PROJECT_ROOT,
|
|
29
|
+
STANDARD_FILES,
|
|
30
|
+
YAML_FORMATTING
|
|
31
|
+
} from "../chunk-LAPCUV4D.js";
|
|
32
|
+
import {
|
|
33
|
+
init_esm_shims
|
|
34
|
+
} from "../chunk-DHET7RCE.js";
|
|
35
|
+
|
|
36
|
+
// src/cli/commands/eject.ts
|
|
37
|
+
init_esm_shims();
|
|
38
|
+
import { Args, Flags } from "@oclif/core";
|
|
39
|
+
import path from "path";
|
|
40
|
+
import os from "os";
|
|
41
|
+
import { stringify as stringifyYaml } from "yaml";
|
|
42
|
+
var EJECT_TYPES = ["agent-partials", "skills", "all"];
|
|
43
|
+
var Eject = class _Eject extends BaseCommand {
|
|
44
|
+
static summary = "Eject skills or agent partials for local customization";
|
|
45
|
+
static description = "Copy agent partials or skills to your project for customization. Agent partials are always copied from the CLI. Skills are copied from the configured source (public marketplace by default).";
|
|
46
|
+
static examples = [
|
|
47
|
+
{
|
|
48
|
+
description: "Eject agent partials for customization",
|
|
49
|
+
command: "<%= config.bin %> <%= command.id %> agent-partials"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
description: "Eject skills to local directory",
|
|
53
|
+
command: "<%= config.bin %> <%= command.id %> skills"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
description: "Eject everything with force overwrite",
|
|
57
|
+
command: "<%= config.bin %> <%= command.id %> all --force"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
description: "Eject to a custom output directory",
|
|
61
|
+
command: "<%= config.bin %> <%= command.id %> skills -o ./custom-dir"
|
|
62
|
+
}
|
|
63
|
+
];
|
|
64
|
+
static args = {
|
|
65
|
+
type: Args.string({
|
|
66
|
+
description: "What to eject: agent-partials, skills, all",
|
|
67
|
+
required: false,
|
|
68
|
+
options: EJECT_TYPES
|
|
69
|
+
})
|
|
70
|
+
};
|
|
71
|
+
static flags = {
|
|
72
|
+
...BaseCommand.baseFlags,
|
|
73
|
+
force: Flags.boolean({
|
|
74
|
+
char: "f",
|
|
75
|
+
description: "Overwrite existing files",
|
|
76
|
+
default: false
|
|
77
|
+
}),
|
|
78
|
+
output: Flags.string({
|
|
79
|
+
char: "o",
|
|
80
|
+
description: "Output directory (default: .claude/ in current directory)"
|
|
81
|
+
}),
|
|
82
|
+
refresh: Flags.boolean({
|
|
83
|
+
description: "Force refresh from remote source",
|
|
84
|
+
default: false
|
|
85
|
+
})
|
|
86
|
+
};
|
|
87
|
+
async run() {
|
|
88
|
+
const { args, flags } = await this.parse(_Eject);
|
|
89
|
+
const projectDir = process.cwd();
|
|
90
|
+
if (!args.type) {
|
|
91
|
+
this.error("Please specify what to eject: agent-partials, skills, or all", {
|
|
92
|
+
exit: EXIT_CODES.INVALID_ARGS
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (!EJECT_TYPES.includes(args.type)) {
|
|
96
|
+
this.error(`Unknown eject type: ${args.type}`, {
|
|
97
|
+
exit: EXIT_CODES.INVALID_ARGS
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
let outputBase;
|
|
101
|
+
if (flags.output) {
|
|
102
|
+
const expandedPath = flags.output.startsWith("~") ? path.join(os.homedir(), flags.output.slice(1)) : flags.output;
|
|
103
|
+
outputBase = path.resolve(projectDir, expandedPath);
|
|
104
|
+
if (await fileExists(outputBase)) {
|
|
105
|
+
this.error(`Output path exists as a file: ${outputBase}`, {
|
|
106
|
+
exit: EXIT_CODES.INVALID_ARGS
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
outputBase = path.join(projectDir, CLAUDE_SRC_DIR);
|
|
111
|
+
}
|
|
112
|
+
this.log("");
|
|
113
|
+
this.log(`${DEFAULT_BRANDING.NAME} Eject`);
|
|
114
|
+
this.log("");
|
|
115
|
+
if (flags.output) {
|
|
116
|
+
this.log(`Output directory: ${outputBase}`);
|
|
117
|
+
}
|
|
118
|
+
const ejectType = args.type;
|
|
119
|
+
const directOutput = !!flags.output;
|
|
120
|
+
let sourceResult;
|
|
121
|
+
if (ejectType === "skills" || ejectType === "all") {
|
|
122
|
+
sourceResult = await loadSkillsMatrixFromSource({
|
|
123
|
+
sourceFlag: flags.source,
|
|
124
|
+
projectDir,
|
|
125
|
+
forceRefresh: flags.refresh
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
switch (ejectType) {
|
|
129
|
+
case "agent-partials":
|
|
130
|
+
await this.ejectAgentPartials(outputBase, flags.force, directOutput);
|
|
131
|
+
break;
|
|
132
|
+
case "skills":
|
|
133
|
+
await this.ejectSkills(
|
|
134
|
+
projectDir,
|
|
135
|
+
flags.force,
|
|
136
|
+
sourceResult,
|
|
137
|
+
directOutput,
|
|
138
|
+
directOutput ? outputBase : void 0
|
|
139
|
+
);
|
|
140
|
+
break;
|
|
141
|
+
case "all":
|
|
142
|
+
await this.ejectAgentPartials(outputBase, flags.force, directOutput);
|
|
143
|
+
await this.ejectSkills(
|
|
144
|
+
projectDir,
|
|
145
|
+
flags.force,
|
|
146
|
+
sourceResult,
|
|
147
|
+
directOutput,
|
|
148
|
+
directOutput ? outputBase : void 0
|
|
149
|
+
);
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
if (flags.source) {
|
|
155
|
+
await saveSourceToProjectConfig(projectDir, flags.source);
|
|
156
|
+
this.log(`Source saved to .claude-src/config.yaml`);
|
|
157
|
+
}
|
|
158
|
+
await this.ensureMinimalConfig(projectDir, flags.source, sourceResult);
|
|
159
|
+
this.log("");
|
|
160
|
+
this.logSuccess("Eject complete!");
|
|
161
|
+
this.log("");
|
|
162
|
+
}
|
|
163
|
+
// Ensures a minimal config.yaml exists so `cc compile` works after eject
|
|
164
|
+
async ensureMinimalConfig(projectDir, sourceFlag, sourceResult) {
|
|
165
|
+
const configPath = path.join(projectDir, CLAUDE_SRC_DIR, STANDARD_FILES.CONFIG_YAML);
|
|
166
|
+
if (await fileExists(configPath)) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const projectName = path.basename(projectDir);
|
|
170
|
+
const config = {
|
|
171
|
+
name: projectName,
|
|
172
|
+
installMode: "local"
|
|
173
|
+
};
|
|
174
|
+
const resolvedConfig = sourceResult?.sourceConfig ?? await resolveSource(sourceFlag, projectDir);
|
|
175
|
+
if (sourceFlag) {
|
|
176
|
+
config.source = sourceFlag;
|
|
177
|
+
} else if (resolvedConfig.source) {
|
|
178
|
+
config.source = resolvedConfig.source;
|
|
179
|
+
}
|
|
180
|
+
if (resolvedConfig.marketplace) {
|
|
181
|
+
config.marketplace = resolvedConfig.marketplace;
|
|
182
|
+
}
|
|
183
|
+
const existingProjectConfig = await loadProjectSourceConfig(projectDir);
|
|
184
|
+
if (existingProjectConfig?.author) {
|
|
185
|
+
config.author = existingProjectConfig.author;
|
|
186
|
+
}
|
|
187
|
+
if (existingProjectConfig?.agents_source) {
|
|
188
|
+
config.agents_source = existingProjectConfig.agents_source;
|
|
189
|
+
}
|
|
190
|
+
await ensureDir(path.join(projectDir, CLAUDE_SRC_DIR));
|
|
191
|
+
let configContent = stringifyYaml(config, { indent: YAML_FORMATTING.INDENT });
|
|
192
|
+
const exampleStackComment = `
|
|
193
|
+
# Example stack configuration (uncomment and customize):
|
|
194
|
+
#
|
|
195
|
+
# skills:
|
|
196
|
+
# - web-framework-react
|
|
197
|
+
# - web-styling-scss-modules
|
|
198
|
+
# - api-framework-hono
|
|
199
|
+
# - api-database-drizzle
|
|
200
|
+
#
|
|
201
|
+
# agents:
|
|
202
|
+
# - web-developer
|
|
203
|
+
# - api-developer
|
|
204
|
+
# - web-reviewer
|
|
205
|
+
#
|
|
206
|
+
# stack:
|
|
207
|
+
# web-developer:
|
|
208
|
+
# framework: web-framework-react
|
|
209
|
+
# styling: web-styling-scss-modules
|
|
210
|
+
# api-developer:
|
|
211
|
+
# api: api-framework-hono
|
|
212
|
+
# database: api-database-drizzle
|
|
213
|
+
`;
|
|
214
|
+
configContent += exampleStackComment;
|
|
215
|
+
await writeFile(configPath, configContent);
|
|
216
|
+
this.logSuccess(`Created ${CLAUDE_SRC_DIR}/config.yaml`);
|
|
217
|
+
}
|
|
218
|
+
async ejectAgentPartials(outputBase, force, directOutput = false) {
|
|
219
|
+
const sourceDir = path.join(PROJECT_ROOT, DIRS.agents);
|
|
220
|
+
if (!await directoryExists(sourceDir)) {
|
|
221
|
+
this.warn("No agent partials found in CLI.");
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const destDir = directOutput ? outputBase : path.join(outputBase, "agents");
|
|
225
|
+
if (await directoryExists(destDir) && !force) {
|
|
226
|
+
this.warn(`Agent partials already exist at ${destDir}. Use --force to overwrite.`);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
await ensureDir(destDir);
|
|
230
|
+
await copy(sourceDir, destDir);
|
|
231
|
+
this.logSuccess(`Agent partials ejected to ${destDir}`);
|
|
232
|
+
this.log("You can now customize templates, agent intro, workflow, and examples locally.");
|
|
233
|
+
}
|
|
234
|
+
async ejectSkills(projectDir, force, sourceResult, directOutput = false, customOutputBase) {
|
|
235
|
+
const destDir = directOutput && customOutputBase ? customOutputBase : path.join(projectDir, LOCAL_SKILLS_PATH);
|
|
236
|
+
if (await directoryExists(destDir) && !force) {
|
|
237
|
+
this.warn(`Skills already exist at ${destDir}. Use --force to overwrite.`);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const skillIds = typedKeys(sourceResult.matrix.skills).filter(
|
|
241
|
+
(skillId) => !sourceResult.matrix.skills[skillId]?.local
|
|
242
|
+
);
|
|
243
|
+
if (skillIds.length === 0) {
|
|
244
|
+
this.warn("No skills found in source to eject.");
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
await ensureDir(destDir);
|
|
248
|
+
const copiedSkills = await copySkillsToLocalFlattened(
|
|
249
|
+
skillIds,
|
|
250
|
+
destDir,
|
|
251
|
+
sourceResult.matrix,
|
|
252
|
+
sourceResult
|
|
253
|
+
);
|
|
254
|
+
const sourceLabel = sourceResult.isLocal ? sourceResult.sourcePath : sourceResult.marketplace || sourceResult.sourceConfig.source;
|
|
255
|
+
this.logSuccess(`${copiedSkills.length} skills ejected to ${destDir} from ${sourceLabel}`);
|
|
256
|
+
this.log("You can now customize skill content locally.");
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
export {
|
|
260
|
+
Eject as default
|
|
261
|
+
};
|
|
262
|
+
//# sourceMappingURL=eject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/eject.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport os from \"os\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { copy, ensureDir, directoryExists, fileExists, writeFile } from \"../utils/fs.js\";\nimport {\n CLAUDE_SRC_DIR,\n DEFAULT_BRANDING,\n DIRS,\n LOCAL_SKILLS_PATH,\n PROJECT_ROOT,\n STANDARD_FILES,\n YAML_FORMATTING,\n} from \"../consts.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { loadSkillsMatrixFromSource, type SourceLoadResult } from \"../lib/loading/index.js\";\nimport { copySkillsToLocalFlattened } from \"../lib/skills/index.js\";\nimport type { SkillId } from \"../types/index.js\";\nimport { typedKeys } from \"../utils/typed-object.js\";\nimport {\n loadProjectSourceConfig,\n resolveSource,\n saveSourceToProjectConfig,\n} from \"../lib/configuration/index.js\";\n\nconst EJECT_TYPES = [\"agent-partials\", \"skills\", \"all\"] as const;\ntype EjectType = (typeof EJECT_TYPES)[number];\n\nexport default class Eject extends BaseCommand {\n static summary = \"Eject skills or agent partials for local customization\";\n static description =\n \"Copy agent partials or skills to your project for customization. \" +\n \"Agent partials are always copied from the CLI. \" +\n \"Skills are copied from the configured source (public marketplace by default).\";\n\n static examples = [\n {\n description: \"Eject agent partials for customization\",\n command: \"<%= config.bin %> <%= command.id %> agent-partials\",\n },\n {\n description: \"Eject skills to local directory\",\n command: \"<%= config.bin %> <%= command.id %> skills\",\n },\n {\n description: \"Eject everything with force overwrite\",\n command: \"<%= config.bin %> <%= command.id %> all --force\",\n },\n {\n description: \"Eject to a custom output directory\",\n command: \"<%= config.bin %> <%= command.id %> skills -o ./custom-dir\",\n },\n ];\n\n static args = {\n type: Args.string({\n description: \"What to eject: agent-partials, skills, all\",\n required: false,\n options: EJECT_TYPES as unknown as string[],\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n force: Flags.boolean({\n char: \"f\",\n description: \"Overwrite existing files\",\n default: false,\n }),\n output: Flags.string({\n char: \"o\",\n description: \"Output directory (default: .claude/ in current directory)\",\n }),\n refresh: Flags.boolean({\n description: \"Force refresh from remote source\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Eject);\n const projectDir = process.cwd();\n\n if (!args.type) {\n this.error(\"Please specify what to eject: agent-partials, skills, or all\", {\n exit: EXIT_CODES.INVALID_ARGS,\n });\n }\n\n if (!EJECT_TYPES.includes(args.type as EjectType)) {\n this.error(`Unknown eject type: ${args.type}`, {\n exit: EXIT_CODES.INVALID_ARGS,\n });\n }\n\n let outputBase: string;\n if (flags.output) {\n const expandedPath = flags.output.startsWith(\"~\")\n ? path.join(os.homedir(), flags.output.slice(1))\n : flags.output;\n outputBase = path.resolve(projectDir, expandedPath);\n\n if (await fileExists(outputBase)) {\n this.error(`Output path exists as a file: ${outputBase}`, {\n exit: EXIT_CODES.INVALID_ARGS,\n });\n }\n } else {\n outputBase = path.join(projectDir, CLAUDE_SRC_DIR);\n }\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} Eject`);\n this.log(\"\");\n\n if (flags.output) {\n this.log(`Output directory: ${outputBase}`);\n }\n\n const ejectType = args.type as EjectType;\n const directOutput = !!flags.output;\n\n let sourceResult: SourceLoadResult | undefined;\n if (ejectType === \"skills\" || ejectType === \"all\") {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n }\n\n switch (ejectType) {\n case \"agent-partials\":\n await this.ejectAgentPartials(outputBase, flags.force, directOutput);\n break;\n case \"skills\":\n await this.ejectSkills(\n projectDir,\n flags.force,\n sourceResult!,\n directOutput,\n directOutput ? outputBase : undefined,\n );\n break;\n case \"all\":\n await this.ejectAgentPartials(outputBase, flags.force, directOutput);\n await this.ejectSkills(\n projectDir,\n flags.force,\n sourceResult!,\n directOutput,\n directOutput ? outputBase : undefined,\n );\n break;\n default:\n break;\n }\n\n if (flags.source) {\n await saveSourceToProjectConfig(projectDir, flags.source);\n this.log(`Source saved to .claude-src/config.yaml`);\n }\n\n await this.ensureMinimalConfig(projectDir, flags.source, sourceResult);\n\n this.log(\"\");\n this.logSuccess(\"Eject complete!\");\n this.log(\"\");\n }\n\n // Ensures a minimal config.yaml exists so `cc compile` works after eject\n private async ensureMinimalConfig(\n projectDir: string,\n sourceFlag?: string,\n sourceResult?: SourceLoadResult,\n ): Promise<void> {\n const configPath = path.join(projectDir, CLAUDE_SRC_DIR, STANDARD_FILES.CONFIG_YAML);\n\n if (await fileExists(configPath)) {\n return;\n }\n\n const projectName = path.basename(projectDir);\n\n const config: Record<string, unknown> = {\n name: projectName,\n installMode: \"local\",\n };\n\n const resolvedConfig =\n sourceResult?.sourceConfig ?? (await resolveSource(sourceFlag, projectDir));\n\n if (sourceFlag) {\n config.source = sourceFlag;\n } else if (resolvedConfig.source) {\n config.source = resolvedConfig.source;\n }\n\n if (resolvedConfig.marketplace) {\n config.marketplace = resolvedConfig.marketplace;\n }\n\n const existingProjectConfig = await loadProjectSourceConfig(projectDir);\n if (existingProjectConfig?.author) {\n config.author = existingProjectConfig.author;\n }\n if (existingProjectConfig?.agents_source) {\n config.agents_source = existingProjectConfig.agents_source;\n }\n\n await ensureDir(path.join(projectDir, CLAUDE_SRC_DIR));\n\n let configContent = stringifyYaml(config, { indent: YAML_FORMATTING.INDENT });\n\n const exampleStackComment = `\n# Example stack configuration (uncomment and customize):\n#\n# skills:\n# - web-framework-react\n# - web-styling-scss-modules\n# - api-framework-hono\n# - api-database-drizzle\n#\n# agents:\n# - web-developer\n# - api-developer\n# - web-reviewer\n#\n# stack:\n# web-developer:\n# framework: web-framework-react\n# styling: web-styling-scss-modules\n# api-developer:\n# api: api-framework-hono\n# database: api-database-drizzle\n`;\n\n configContent += exampleStackComment;\n await writeFile(configPath, configContent);\n\n this.logSuccess(`Created ${CLAUDE_SRC_DIR}/config.yaml`);\n }\n\n private async ejectAgentPartials(\n outputBase: string,\n force: boolean,\n directOutput = false,\n ): Promise<void> {\n const sourceDir = path.join(PROJECT_ROOT, DIRS.agents);\n\n if (!(await directoryExists(sourceDir))) {\n this.warn(\"No agent partials found in CLI.\");\n return;\n }\n\n const destDir = directOutput ? outputBase : path.join(outputBase, \"agents\");\n\n if ((await directoryExists(destDir)) && !force) {\n this.warn(`Agent partials already exist at ${destDir}. Use --force to overwrite.`);\n return;\n }\n\n await ensureDir(destDir);\n\n await copy(sourceDir, destDir);\n\n this.logSuccess(`Agent partials ejected to ${destDir}`);\n this.log(\"You can now customize templates, agent intro, workflow, and examples locally.\");\n }\n\n private async ejectSkills(\n projectDir: string,\n force: boolean,\n sourceResult: SourceLoadResult,\n directOutput = false,\n customOutputBase?: string,\n ): Promise<void> {\n const destDir =\n directOutput && customOutputBase\n ? customOutputBase\n : path.join(projectDir, LOCAL_SKILLS_PATH);\n\n if ((await directoryExists(destDir)) && !force) {\n this.warn(`Skills already exist at ${destDir}. Use --force to overwrite.`);\n return;\n }\n\n const skillIds = typedKeys<SkillId>(sourceResult.matrix.skills).filter(\n (skillId) => !sourceResult.matrix.skills[skillId]?.local,\n );\n\n if (skillIds.length === 0) {\n this.warn(\"No skills found in source to eject.\");\n return;\n }\n\n await ensureDir(destDir);\n\n const copiedSkills = await copySkillsToLocalFlattened(\n skillIds,\n destDir,\n sourceResult.matrix,\n sourceResult,\n );\n\n const sourceLabel = sourceResult.isLocal\n ? sourceResult.sourcePath\n : sourceResult.marketplace || sourceResult.sourceConfig.source;\n\n this.logSuccess(`${copiedSkills.length} skills ejected to ${destDir} from ${sourceLabel}`);\n this.log(\"You can now customize skill content locally.\");\n }\n}\n"],"mappings":"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","names":[]}
|