agents-inc 0.149.1 → 0.150.0
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 +2277 -0
- package/LICENSE +21 -0
- package/README.md +136 -19
- package/assets/demo.gif +0 -0
- package/assets/demo.tape +266 -0
- package/assets/logo.svg +75 -0
- package/dist/chunk-2RSNKBXC.js +84 -0
- package/dist/chunk-2RSNKBXC.js.map +1 -0
- package/dist/chunk-3LIU2ZEF.js +1355 -0
- package/dist/chunk-3LIU2ZEF.js.map +1 -0
- package/dist/chunk-4GL2F5AB.js +222 -0
- package/dist/chunk-4GL2F5AB.js.map +1 -0
- package/dist/chunk-4LPJZNT7.js +382 -0
- package/dist/chunk-4LPJZNT7.js.map +1 -0
- package/dist/chunk-5K5RBRTD.js +62 -0
- package/dist/chunk-5K5RBRTD.js.map +1 -0
- package/dist/chunk-6I6RZHYP.js +789 -0
- package/dist/chunk-6I6RZHYP.js.map +1 -0
- package/dist/chunk-7URSGJLE.js +430 -0
- package/dist/chunk-7URSGJLE.js.map +1 -0
- package/dist/chunk-C55DN7GE.js +35 -0
- package/dist/chunk-C55DN7GE.js.map +1 -0
- package/dist/chunk-CDMHSHBN.js +68 -0
- package/dist/chunk-CDMHSHBN.js.map +1 -0
- package/dist/chunk-CFQT72MJ.js +92 -0
- package/dist/chunk-CFQT72MJ.js.map +1 -0
- package/dist/chunk-DAG2ULNF.js +125 -0
- package/dist/chunk-DAG2ULNF.js.map +1 -0
- package/dist/chunk-DDG4F3FE.js +181 -0
- package/dist/chunk-DDG4F3FE.js.map +1 -0
- package/dist/chunk-DIBCRIMR.js +36 -0
- package/dist/chunk-DIBCRIMR.js.map +1 -0
- package/dist/chunk-DJAZE4PD.js +10929 -0
- package/dist/chunk-DJAZE4PD.js.map +1 -0
- package/dist/chunk-DUVWGO6E.js +54 -0
- package/dist/chunk-DUVWGO6E.js.map +1 -0
- package/dist/chunk-E4FT2KFV.js +174 -0
- package/dist/chunk-E4FT2KFV.js.map +1 -0
- package/dist/chunk-EKWAUOQB.js +96 -0
- package/dist/chunk-EKWAUOQB.js.map +1 -0
- package/dist/chunk-EN2GCPW7.js +300 -0
- package/dist/chunk-EN2GCPW7.js.map +1 -0
- package/dist/chunk-ES3NJZON.js +31 -0
- package/dist/chunk-ES3NJZON.js.map +1 -0
- package/dist/chunk-F3756A5B.js +20 -0
- package/dist/chunk-F3756A5B.js.map +1 -0
- package/dist/chunk-FWT3CBLL.js +51 -0
- package/dist/chunk-FWT3CBLL.js.map +1 -0
- package/dist/chunk-FYPUUYSG.js +31 -0
- package/dist/chunk-FYPUUYSG.js.map +1 -0
- package/dist/chunk-GRPSDKIS.js +112 -0
- package/dist/chunk-GRPSDKIS.js.map +1 -0
- package/dist/chunk-GYG5SE2D.js +81 -0
- package/dist/chunk-GYG5SE2D.js.map +1 -0
- package/dist/chunk-HIPGKIT3.js +287 -0
- package/dist/chunk-HIPGKIT3.js.map +1 -0
- package/dist/chunk-I3XKEGHM.js +16383 -0
- package/dist/chunk-I3XKEGHM.js.map +1 -0
- package/dist/chunk-IHO75PMZ.js +40 -0
- package/dist/chunk-IHO75PMZ.js.map +1 -0
- package/dist/chunk-IOJR5TOY.js +47 -0
- package/dist/chunk-IOJR5TOY.js.map +1 -0
- package/dist/chunk-K3OU6TGX.js +77 -0
- package/dist/chunk-K3OU6TGX.js.map +1 -0
- package/dist/chunk-KH7MOIM5.js +6010 -0
- package/dist/chunk-KH7MOIM5.js.map +1 -0
- package/dist/chunk-KIR7VYQD.js +63 -0
- package/dist/chunk-KIR7VYQD.js.map +1 -0
- package/dist/chunk-KOPEM3Q7.js +27 -0
- package/dist/chunk-KOPEM3Q7.js.map +1 -0
- package/dist/chunk-KSZ6PCY4.js +43 -0
- package/dist/chunk-KSZ6PCY4.js.map +1 -0
- package/dist/chunk-LRYNF3J7.js +111 -0
- package/dist/chunk-LRYNF3J7.js.map +1 -0
- package/dist/chunk-LYYXX2W5.js +87 -0
- package/dist/chunk-LYYXX2W5.js.map +1 -0
- package/dist/chunk-MC5DUZ3V.js +1135 -0
- package/dist/chunk-MC5DUZ3V.js.map +1 -0
- package/dist/chunk-N4IZ6GBO.js +300 -0
- package/dist/chunk-N4IZ6GBO.js.map +1 -0
- package/dist/chunk-NIKUMXE7.js +24 -0
- package/dist/chunk-NIKUMXE7.js.map +1 -0
- package/dist/chunk-NUIZ6ZUO.js +42 -0
- package/dist/chunk-NUIZ6ZUO.js.map +1 -0
- package/dist/chunk-O5ASLZ2K.js +270 -0
- package/dist/chunk-O5ASLZ2K.js.map +1 -0
- package/dist/chunk-OA5SUEQD.js +181 -0
- package/dist/chunk-OA5SUEQD.js.map +1 -0
- package/dist/chunk-OZZGXBCN.js +15 -0
- package/dist/chunk-OZZGXBCN.js.map +1 -0
- package/dist/chunk-P3PN5SVI.js +27 -0
- package/dist/chunk-P3PN5SVI.js.map +1 -0
- package/dist/chunk-P56WJ5FA.js +50 -0
- package/dist/chunk-P56WJ5FA.js.map +1 -0
- package/dist/chunk-PG4G4IIK.js +24 -0
- package/dist/chunk-PG4G4IIK.js.map +1 -0
- package/dist/chunk-QQLRX4KI.js +41 -0
- package/dist/chunk-QQLRX4KI.js.map +1 -0
- package/dist/chunk-RBHYLCUB.js +31 -0
- package/dist/chunk-RBHYLCUB.js.map +1 -0
- package/dist/chunk-RJN7W2C7.js +349 -0
- package/dist/chunk-RJN7W2C7.js.map +1 -0
- package/dist/chunk-RP7R73JO.js +179 -0
- package/dist/chunk-RP7R73JO.js.map +1 -0
- package/dist/chunk-SYUOXSPU.js +510 -0
- package/dist/chunk-SYUOXSPU.js.map +1 -0
- package/dist/chunk-THKIOI32.js +939 -0
- package/dist/chunk-THKIOI32.js.map +1 -0
- package/dist/chunk-UZRISDBZ.js +28 -0
- package/dist/chunk-UZRISDBZ.js.map +1 -0
- package/dist/chunk-V7QOSGQA.js +298 -0
- package/dist/chunk-V7QOSGQA.js.map +1 -0
- package/dist/chunk-VEP23B5W.js +27 -0
- package/dist/chunk-VEP23B5W.js.map +1 -0
- package/dist/chunk-VG2TVBFN.js +52 -0
- package/dist/chunk-VG2TVBFN.js.map +1 -0
- package/dist/chunk-VIFZ6NFH.js +27 -0
- package/dist/chunk-VIFZ6NFH.js.map +1 -0
- package/dist/chunk-XA57SX4T.js +115 -0
- package/dist/chunk-XA57SX4T.js.map +1 -0
- package/dist/chunk-YKKIJHZB.js +339 -0
- package/dist/chunk-YKKIJHZB.js.map +1 -0
- package/dist/chunk-YU2VGX5R.js +4205 -0
- package/dist/chunk-YU2VGX5R.js.map +1 -0
- package/dist/chunk-ZDLTLNU2.js +258 -0
- package/dist/chunk-ZDLTLNU2.js.map +1 -0
- package/dist/chunk-ZHTXPFDK.js +128 -0
- package/dist/chunk-ZHTXPFDK.js.map +1 -0
- package/dist/chunk-ZKJAJWK6.js +253 -0
- package/dist/chunk-ZKJAJWK6.js.map +1 -0
- package/dist/commands/build/marketplace.js +250 -0
- package/dist/commands/build/marketplace.js.map +1 -0
- package/dist/commands/build/plugins.js +176 -0
- package/dist/commands/build/plugins.js.map +1 -0
- package/dist/commands/compile.js +331 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/doctor.js +475 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/edit.js +765 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/eject.js +393 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/import/skill.js +349 -0
- package/dist/commands/import/skill.js.map +1 -0
- package/dist/commands/init.js +66 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.js +115 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/new/agent.js +304 -0
- package/dist/commands/new/agent.js.map +1 -0
- package/dist/commands/new/marketplace.js +315 -0
- package/dist/commands/new/marketplace.js.map +1 -0
- package/dist/commands/new/skill.js +28 -0
- package/dist/commands/new/skill.js.map +1 -0
- package/dist/commands/search.js +176 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/uninstall.js +570 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +368 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.js +581 -0
- package/dist/commands/validate.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/prompt-confirm.js +11 -0
- package/dist/components/common/prompt-confirm.js.map +1 -0
- package/dist/components/common/select-list.js +11 -0
- package/dist/components/common/select-list.js.map +1 -0
- package/dist/components/common/spinner.js +9 -0
- package/dist/components/common/spinner.js.map +1 -0
- package/dist/components/wizard/category-grid.js +16 -0
- package/dist/components/wizard/category-grid.js.map +1 -0
- package/dist/components/wizard/category-grid.test.js +1253 -0
- package/dist/components/wizard/category-grid.test.js.map +1 -0
- package/dist/components/wizard/checkbox-grid.js +14 -0
- package/dist/components/wizard/checkbox-grid.js.map +1 -0
- package/dist/components/wizard/checkbox-grid.test.js +264 -0
- package/dist/components/wizard/checkbox-grid.test.js.map +1 -0
- package/dist/components/wizard/domain-selection.js +22 -0
- package/dist/components/wizard/domain-selection.js.map +1 -0
- package/dist/components/wizard/run-wizard-session.js +47 -0
- package/dist/components/wizard/run-wizard-session.js.map +1 -0
- package/dist/components/wizard/scroll-affordance.js +10 -0
- package/dist/components/wizard/scroll-affordance.js.map +1 -0
- package/dist/components/wizard/search-modal.js +14 -0
- package/dist/components/wizard/search-modal.js.map +1 -0
- package/dist/components/wizard/search-modal.test.js +212 -0
- package/dist/components/wizard/search-modal.test.js.map +1 -0
- package/dist/components/wizard/selection-card.js +10 -0
- package/dist/components/wizard/selection-card.js.map +1 -0
- package/dist/components/wizard/skill-agent-summary.js +16 -0
- package/dist/components/wizard/skill-agent-summary.js.map +1 -0
- package/dist/components/wizard/source-grid.js +23 -0
- package/dist/components/wizard/source-grid.js.map +1 -0
- package/dist/components/wizard/source-grid.test.js +1094 -0
- package/dist/components/wizard/source-grid.test.js.map +1 -0
- package/dist/components/wizard/stack-selection.js +20 -0
- package/dist/components/wizard/stack-selection.js.map +1 -0
- package/dist/components/wizard/step-agents.js +22 -0
- package/dist/components/wizard/step-agents.js.map +1 -0
- package/dist/components/wizard/step-agents.test.js +204 -0
- package/dist/components/wizard/step-agents.test.js.map +1 -0
- package/dist/components/wizard/step-build.js +22 -0
- package/dist/components/wizard/step-build.js.map +1 -0
- package/dist/components/wizard/step-build.test.js +552 -0
- package/dist/components/wizard/step-build.test.js.map +1 -0
- package/dist/components/wizard/step-confirm.js +21 -0
- package/dist/components/wizard/step-confirm.js.map +1 -0
- package/dist/components/wizard/step-confirm.test.js +744 -0
- package/dist/components/wizard/step-confirm.test.js.map +1 -0
- package/dist/components/wizard/step-settings.js +19 -0
- package/dist/components/wizard/step-settings.js.map +1 -0
- package/dist/components/wizard/step-settings.test.js +244 -0
- package/dist/components/wizard/step-settings.test.js.map +1 -0
- package/dist/components/wizard/step-sources.js +28 -0
- package/dist/components/wizard/step-sources.js.map +1 -0
- package/dist/components/wizard/step-sources.test.js +155 -0
- package/dist/components/wizard/step-sources.test.js.map +1 -0
- package/dist/components/wizard/step-stack.js +21 -0
- package/dist/components/wizard/step-stack.js.map +1 -0
- package/dist/components/wizard/step-stack.test.js +262 -0
- package/dist/components/wizard/step-stack.test.js.map +1 -0
- package/dist/components/wizard/summary-panel.js +20 -0
- package/dist/components/wizard/summary-panel.js.map +1 -0
- package/dist/components/wizard/summary-panel.test.js +317 -0
- package/dist/components/wizard/summary-panel.test.js.map +1 -0
- package/dist/components/wizard/toast.js +10 -0
- package/dist/components/wizard/toast.js.map +1 -0
- package/dist/components/wizard/wizard-layout.js +26 -0
- package/dist/components/wizard/wizard-layout.js.map +1 -0
- package/dist/components/wizard/wizard-layout.test.js +200 -0
- package/dist/components/wizard/wizard-layout.test.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.js +20 -0
- package/dist/components/wizard/wizard-tabs.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.test.js +290 -0
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
- package/dist/components/wizard/wizard.js +48 -0
- package/dist/components/wizard/wizard.js.map +1 -0
- package/dist/config-exports.js +20 -0
- package/dist/config-exports.js.map +1 -0
- package/dist/copy-local-skills-CA7P73RZ.js +15 -0
- package/dist/copy-local-skills-CA7P73RZ.js.map +1 -0
- package/dist/dist-VNJNNJK7.js +550 -0
- package/dist/dist-VNJNNJK7.js.map +1 -0
- package/dist/hooks/init.js +90 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/load-agent-defs-6MAY5ABI.js +16 -0
- package/dist/load-agent-defs-6MAY5ABI.js.map +1 -0
- package/dist/loader-E2ERJYVA.js +23 -0
- package/dist/loader-E2ERJYVA.js.map +1 -0
- package/dist/magic-string.es-5TV73NJD.js +1316 -0
- package/dist/magic-string.es-5TV73NJD.js.map +1 -0
- package/dist/recompile-project-agents-VYQJ6UZB.js +20 -0
- package/dist/recompile-project-agents-VYQJ6UZB.js.map +1 -0
- package/dist/source-loader-VVHMQEX5.js +20 -0
- package/dist/source-loader-VVHMQEX5.js.map +1 -0
- package/dist/source-manager-TPDXV5FO.js +18 -0
- package/dist/source-manager-TPDXV5FO.js.map +1 -0
- package/dist/src/agents/_templates/agent.liquid +161 -0
- package/dist/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
- package/dist/src/agents/_templates/methodologies/context-management.liquid +162 -0
- package/dist/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
- package/dist/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
- package/dist/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
- package/dist/src/agents/_templates/methodologies/write-verification.liquid +43 -0
- package/dist/src/agents/developer/ai-developer/critical-reminders.md +54 -0
- package/dist/src/agents/developer/ai-developer/critical-requirements.md +59 -0
- package/dist/src/agents/developer/ai-developer/identity.md +51 -0
- package/dist/src/agents/developer/ai-developer/metadata.yaml +12 -0
- package/dist/src/agents/developer/ai-developer/output.md +366 -0
- package/dist/src/agents/developer/ai-developer/playbook.md +335 -0
- package/dist/src/agents/developer/api-developer/critical-reminders.md +46 -0
- package/dist/src/agents/developer/api-developer/critical-requirements.md +44 -0
- package/dist/src/agents/developer/api-developer/identity.md +49 -0
- package/dist/src/agents/developer/api-developer/metadata.yaml +12 -0
- package/dist/src/agents/developer/api-developer/output.md +432 -0
- package/dist/src/agents/developer/api-developer/playbook.md +352 -0
- package/dist/src/agents/developer/cli-developer/critical-reminders.md +51 -0
- package/dist/src/agents/developer/cli-developer/critical-requirements.md +51 -0
- package/dist/src/agents/developer/cli-developer/identity.md +51 -0
- package/dist/src/agents/developer/cli-developer/metadata.yaml +12 -0
- package/dist/src/agents/developer/cli-developer/output.md +285 -0
- package/dist/src/agents/developer/cli-developer/playbook.md +386 -0
- package/dist/src/agents/developer/web-architecture/critical-reminders.md +48 -0
- package/dist/src/agents/developer/web-architecture/critical-requirements.md +65 -0
- package/dist/src/agents/developer/web-architecture/identity.md +64 -0
- package/dist/src/agents/developer/web-architecture/metadata.yaml +12 -0
- package/dist/src/agents/developer/web-architecture/output.md +449 -0
- package/dist/src/agents/developer/web-architecture/playbook.md +481 -0
- package/dist/src/agents/developer/web-developer/critical-reminders.md +40 -0
- package/dist/src/agents/developer/web-developer/critical-requirements.md +39 -0
- package/dist/src/agents/developer/web-developer/identity.md +32 -0
- package/dist/src/agents/developer/web-developer/metadata.yaml +12 -0
- package/dist/src/agents/developer/web-developer/output.md +323 -0
- package/dist/src/agents/developer/web-developer/playbook.md +349 -0
- package/dist/src/agents/meta/agent-summoner/critical-reminders.md +45 -0
- package/dist/src/agents/meta/agent-summoner/critical-requirements.md +52 -0
- package/dist/src/agents/meta/agent-summoner/identity.md +34 -0
- package/dist/src/agents/meta/agent-summoner/metadata.yaml +12 -0
- package/dist/src/agents/meta/agent-summoner/output.md +296 -0
- package/dist/src/agents/meta/agent-summoner/playbook.md +1469 -0
- package/dist/src/agents/meta/codex-keeper/critical-reminders.md +39 -0
- package/dist/src/agents/meta/codex-keeper/critical-requirements.md +29 -0
- package/dist/src/agents/meta/codex-keeper/identity.md +45 -0
- package/dist/src/agents/meta/codex-keeper/metadata.yaml +12 -0
- package/dist/src/agents/meta/codex-keeper/output.md +384 -0
- package/dist/src/agents/meta/codex-keeper/playbook.md +1183 -0
- package/dist/src/agents/meta/convention-keeper/critical-reminders.md +32 -0
- package/dist/src/agents/meta/convention-keeper/critical-requirements.md +32 -0
- package/dist/src/agents/meta/convention-keeper/identity.md +33 -0
- package/dist/src/agents/meta/convention-keeper/metadata.yaml +12 -0
- package/dist/src/agents/meta/convention-keeper/output.md +206 -0
- package/dist/src/agents/meta/convention-keeper/playbook.md +180 -0
- package/dist/src/agents/meta/skill-summoner/critical-reminders.md +112 -0
- package/dist/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
- package/dist/src/agents/meta/skill-summoner/identity.md +31 -0
- package/dist/src/agents/meta/skill-summoner/metadata.yaml +13 -0
- package/dist/src/agents/meta/skill-summoner/output.md +390 -0
- package/dist/src/agents/meta/skill-summoner/playbook.md +1457 -0
- package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +71 -0
- package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +31 -0
- package/dist/src/agents/pattern/pattern-scout/identity.md +25 -0
- package/dist/src/agents/pattern/pattern-scout/metadata.yaml +10 -0
- package/dist/src/agents/pattern/pattern-scout/output.md +290 -0
- package/dist/src/agents/pattern/pattern-scout/playbook.md +1806 -0
- package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +30 -0
- package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +28 -0
- package/dist/src/agents/pattern/web-pattern-critique/identity.md +41 -0
- package/dist/src/agents/pattern/web-pattern-critique/metadata.yaml +12 -0
- package/dist/src/agents/pattern/web-pattern-critique/output.md +314 -0
- package/dist/src/agents/pattern/web-pattern-critique/playbook.md +572 -0
- package/dist/src/agents/planning/api-pm/critical-reminders.md +48 -0
- package/dist/src/agents/planning/api-pm/critical-requirements.md +41 -0
- package/dist/src/agents/planning/api-pm/identity.md +39 -0
- package/dist/src/agents/planning/api-pm/metadata.yaml +12 -0
- package/dist/src/agents/planning/api-pm/output.md +475 -0
- package/dist/src/agents/planning/api-pm/playbook.md +129 -0
- package/dist/src/agents/planning/web-pm/critical-reminders.md +36 -0
- package/dist/src/agents/planning/web-pm/critical-requirements.md +32 -0
- package/dist/src/agents/planning/web-pm/identity.md +26 -0
- package/dist/src/agents/planning/web-pm/metadata.yaml +12 -0
- package/dist/src/agents/planning/web-pm/output.md +314 -0
- package/dist/src/agents/planning/web-pm/playbook.md +318 -0
- package/dist/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
- package/dist/src/agents/researcher/api-researcher/critical-requirements.md +28 -0
- package/dist/src/agents/researcher/api-researcher/identity.md +71 -0
- package/dist/src/agents/researcher/api-researcher/metadata.yaml +10 -0
- package/dist/src/agents/researcher/api-researcher/output.md +254 -0
- package/dist/src/agents/researcher/api-researcher/playbook.md +201 -0
- package/dist/src/agents/researcher/web-researcher/critical-reminders.md +39 -0
- package/dist/src/agents/researcher/web-researcher/critical-requirements.md +26 -0
- package/dist/src/agents/researcher/web-researcher/identity.md +69 -0
- package/dist/src/agents/researcher/web-researcher/metadata.yaml +10 -0
- package/dist/src/agents/researcher/web-researcher/output.md +241 -0
- package/dist/src/agents/researcher/web-researcher/playbook.md +217 -0
- package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +40 -0
- package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +37 -0
- package/dist/src/agents/reviewer/ai-reviewer/identity.md +51 -0
- package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
- package/dist/src/agents/reviewer/ai-reviewer/output.md +395 -0
- package/dist/src/agents/reviewer/ai-reviewer/playbook.md +90 -0
- package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +31 -0
- package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +27 -0
- package/dist/src/agents/reviewer/api-reviewer/identity.md +51 -0
- package/dist/src/agents/reviewer/api-reviewer/metadata.yaml +12 -0
- package/dist/src/agents/reviewer/api-reviewer/output.md +343 -0
- package/dist/src/agents/reviewer/api-reviewer/playbook.md +288 -0
- package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +33 -0
- package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +30 -0
- package/dist/src/agents/reviewer/cli-reviewer/identity.md +44 -0
- package/dist/src/agents/reviewer/cli-reviewer/metadata.yaml +12 -0
- package/dist/src/agents/reviewer/cli-reviewer/output.md +414 -0
- package/dist/src/agents/reviewer/cli-reviewer/playbook.md +218 -0
- package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +38 -0
- package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +38 -0
- package/dist/src/agents/reviewer/infra-reviewer/identity.md +53 -0
- package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
- package/dist/src/agents/reviewer/infra-reviewer/output.md +364 -0
- package/dist/src/agents/reviewer/infra-reviewer/playbook.md +161 -0
- package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +31 -0
- package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +26 -0
- package/dist/src/agents/reviewer/web-reviewer/identity.md +40 -0
- package/dist/src/agents/reviewer/web-reviewer/metadata.yaml +12 -0
- package/dist/src/agents/reviewer/web-reviewer/output.md +333 -0
- package/dist/src/agents/reviewer/web-reviewer/playbook.md +156 -0
- package/dist/src/agents/tester/api-tester/critical-reminders.md +41 -0
- package/dist/src/agents/tester/api-tester/critical-requirements.md +41 -0
- package/dist/src/agents/tester/api-tester/identity.md +47 -0
- package/dist/src/agents/tester/api-tester/metadata.yaml +12 -0
- package/dist/src/agents/tester/api-tester/output.md +284 -0
- package/dist/src/agents/tester/api-tester/playbook.md +275 -0
- package/dist/src/agents/tester/cli-tester/critical-reminders.md +36 -0
- package/dist/src/agents/tester/cli-tester/critical-requirements.md +36 -0
- package/dist/src/agents/tester/cli-tester/identity.md +43 -0
- package/dist/src/agents/tester/cli-tester/metadata.yaml +12 -0
- package/dist/src/agents/tester/cli-tester/output.md +313 -0
- package/dist/src/agents/tester/cli-tester/playbook.md +221 -0
- package/dist/src/agents/tester/web-tester/critical-reminders.md +31 -0
- package/dist/src/agents/tester/web-tester/critical-requirements.md +28 -0
- package/dist/src/agents/tester/web-tester/identity.md +41 -0
- package/dist/src/agents/tester/web-tester/metadata.yaml +12 -0
- package/dist/src/agents/tester/web-tester/output.md +321 -0
- package/dist/src/agents/tester/web-tester/playbook.md +428 -0
- package/dist/stores/d227-same-scope-tombstone-duplicate.test.js +118 -0
- package/dist/stores/d227-same-scope-tombstone-duplicate.test.js.map +1 -0
- package/dist/stores/wizard-store.js +21 -0
- package/dist/stores/wizard-store.js.map +1 -0
- package/dist/stores/wizard-store.test.js +3053 -0
- package/dist/stores/wizard-store.test.js.map +1 -0
- package/package.json +131 -13
- package/src/agents/_templates/agent.liquid +161 -0
- package/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
- package/src/agents/_templates/methodologies/context-management.liquid +162 -0
- package/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
- package/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
- package/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
- package/src/agents/_templates/methodologies/write-verification.liquid +43 -0
- package/src/agents/developer/ai-developer/critical-reminders.md +54 -0
- package/src/agents/developer/ai-developer/critical-requirements.md +59 -0
- package/src/agents/developer/ai-developer/identity.md +51 -0
- package/src/agents/developer/ai-developer/metadata.yaml +12 -0
- package/src/agents/developer/ai-developer/output.md +366 -0
- package/src/agents/developer/ai-developer/playbook.md +335 -0
- package/src/agents/developer/api-developer/critical-reminders.md +46 -0
- package/src/agents/developer/api-developer/critical-requirements.md +44 -0
- package/src/agents/developer/api-developer/identity.md +49 -0
- package/src/agents/developer/api-developer/metadata.yaml +12 -0
- package/src/agents/developer/api-developer/output.md +432 -0
- package/src/agents/developer/api-developer/playbook.md +352 -0
- package/src/agents/developer/cli-developer/critical-reminders.md +51 -0
- package/src/agents/developer/cli-developer/critical-requirements.md +51 -0
- package/src/agents/developer/cli-developer/identity.md +51 -0
- package/src/agents/developer/cli-developer/metadata.yaml +12 -0
- package/src/agents/developer/cli-developer/output.md +285 -0
- package/src/agents/developer/cli-developer/playbook.md +386 -0
- package/src/agents/developer/web-architecture/critical-reminders.md +48 -0
- package/src/agents/developer/web-architecture/critical-requirements.md +65 -0
- package/src/agents/developer/web-architecture/identity.md +64 -0
- package/src/agents/developer/web-architecture/metadata.yaml +12 -0
- package/src/agents/developer/web-architecture/output.md +449 -0
- package/src/agents/developer/web-architecture/playbook.md +481 -0
- package/src/agents/developer/web-developer/critical-reminders.md +40 -0
- package/src/agents/developer/web-developer/critical-requirements.md +39 -0
- package/src/agents/developer/web-developer/identity.md +32 -0
- package/src/agents/developer/web-developer/metadata.yaml +12 -0
- package/src/agents/developer/web-developer/output.md +323 -0
- package/src/agents/developer/web-developer/playbook.md +349 -0
- package/src/agents/meta/agent-summoner/critical-reminders.md +45 -0
- package/src/agents/meta/agent-summoner/critical-requirements.md +52 -0
- package/src/agents/meta/agent-summoner/identity.md +34 -0
- package/src/agents/meta/agent-summoner/metadata.yaml +12 -0
- package/src/agents/meta/agent-summoner/output.md +296 -0
- package/src/agents/meta/agent-summoner/playbook.md +1469 -0
- package/src/agents/meta/codex-keeper/critical-reminders.md +39 -0
- package/src/agents/meta/codex-keeper/critical-requirements.md +29 -0
- package/src/agents/meta/codex-keeper/identity.md +45 -0
- package/src/agents/meta/codex-keeper/metadata.yaml +12 -0
- package/src/agents/meta/codex-keeper/output.md +384 -0
- package/src/agents/meta/codex-keeper/playbook.md +1183 -0
- package/src/agents/meta/convention-keeper/critical-reminders.md +32 -0
- package/src/agents/meta/convention-keeper/critical-requirements.md +32 -0
- package/src/agents/meta/convention-keeper/identity.md +33 -0
- package/src/agents/meta/convention-keeper/metadata.yaml +12 -0
- package/src/agents/meta/convention-keeper/output.md +206 -0
- package/src/agents/meta/convention-keeper/playbook.md +180 -0
- package/src/agents/meta/skill-summoner/critical-reminders.md +112 -0
- package/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
- package/src/agents/meta/skill-summoner/identity.md +31 -0
- package/src/agents/meta/skill-summoner/metadata.yaml +13 -0
- package/src/agents/meta/skill-summoner/output.md +390 -0
- package/src/agents/meta/skill-summoner/playbook.md +1457 -0
- package/src/agents/pattern/pattern-scout/critical-reminders.md +71 -0
- package/src/agents/pattern/pattern-scout/critical-requirements.md +31 -0
- package/src/agents/pattern/pattern-scout/identity.md +25 -0
- package/src/agents/pattern/pattern-scout/metadata.yaml +10 -0
- package/src/agents/pattern/pattern-scout/output.md +290 -0
- package/src/agents/pattern/pattern-scout/playbook.md +1806 -0
- package/src/agents/pattern/web-pattern-critique/critical-reminders.md +30 -0
- package/src/agents/pattern/web-pattern-critique/critical-requirements.md +28 -0
- package/src/agents/pattern/web-pattern-critique/identity.md +41 -0
- package/src/agents/pattern/web-pattern-critique/metadata.yaml +12 -0
- package/src/agents/pattern/web-pattern-critique/output.md +314 -0
- package/src/agents/pattern/web-pattern-critique/playbook.md +572 -0
- package/src/agents/planning/api-pm/critical-reminders.md +48 -0
- package/src/agents/planning/api-pm/critical-requirements.md +41 -0
- package/src/agents/planning/api-pm/identity.md +39 -0
- package/src/agents/planning/api-pm/metadata.yaml +12 -0
- package/src/agents/planning/api-pm/output.md +475 -0
- package/src/agents/planning/api-pm/playbook.md +129 -0
- package/src/agents/planning/web-pm/critical-reminders.md +36 -0
- package/src/agents/planning/web-pm/critical-requirements.md +32 -0
- package/src/agents/planning/web-pm/identity.md +26 -0
- package/src/agents/planning/web-pm/metadata.yaml +12 -0
- package/src/agents/planning/web-pm/output.md +314 -0
- package/src/agents/planning/web-pm/playbook.md +318 -0
- package/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
- package/src/agents/researcher/api-researcher/critical-requirements.md +28 -0
- package/src/agents/researcher/api-researcher/identity.md +71 -0
- package/src/agents/researcher/api-researcher/metadata.yaml +10 -0
- package/src/agents/researcher/api-researcher/output.md +254 -0
- package/src/agents/researcher/api-researcher/playbook.md +201 -0
- package/src/agents/researcher/web-researcher/critical-reminders.md +39 -0
- package/src/agents/researcher/web-researcher/critical-requirements.md +26 -0
- package/src/agents/researcher/web-researcher/identity.md +69 -0
- package/src/agents/researcher/web-researcher/metadata.yaml +10 -0
- package/src/agents/researcher/web-researcher/output.md +241 -0
- package/src/agents/researcher/web-researcher/playbook.md +217 -0
- package/src/agents/reviewer/ai-reviewer/critical-reminders.md +40 -0
- package/src/agents/reviewer/ai-reviewer/critical-requirements.md +37 -0
- package/src/agents/reviewer/ai-reviewer/identity.md +51 -0
- package/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
- package/src/agents/reviewer/ai-reviewer/output.md +395 -0
- package/src/agents/reviewer/ai-reviewer/playbook.md +90 -0
- package/src/agents/reviewer/api-reviewer/critical-reminders.md +31 -0
- package/src/agents/reviewer/api-reviewer/critical-requirements.md +27 -0
- package/src/agents/reviewer/api-reviewer/identity.md +51 -0
- package/src/agents/reviewer/api-reviewer/metadata.yaml +12 -0
- package/src/agents/reviewer/api-reviewer/output.md +343 -0
- package/src/agents/reviewer/api-reviewer/playbook.md +288 -0
- package/src/agents/reviewer/cli-reviewer/critical-reminders.md +33 -0
- package/src/agents/reviewer/cli-reviewer/critical-requirements.md +30 -0
- package/src/agents/reviewer/cli-reviewer/identity.md +44 -0
- package/src/agents/reviewer/cli-reviewer/metadata.yaml +12 -0
- package/src/agents/reviewer/cli-reviewer/output.md +414 -0
- package/src/agents/reviewer/cli-reviewer/playbook.md +218 -0
- package/src/agents/reviewer/infra-reviewer/critical-reminders.md +38 -0
- package/src/agents/reviewer/infra-reviewer/critical-requirements.md +38 -0
- package/src/agents/reviewer/infra-reviewer/identity.md +53 -0
- package/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
- package/src/agents/reviewer/infra-reviewer/output.md +364 -0
- package/src/agents/reviewer/infra-reviewer/playbook.md +161 -0
- package/src/agents/reviewer/web-reviewer/critical-reminders.md +31 -0
- package/src/agents/reviewer/web-reviewer/critical-requirements.md +26 -0
- package/src/agents/reviewer/web-reviewer/identity.md +40 -0
- package/src/agents/reviewer/web-reviewer/metadata.yaml +12 -0
- package/src/agents/reviewer/web-reviewer/output.md +333 -0
- package/src/agents/reviewer/web-reviewer/playbook.md +156 -0
- package/src/agents/tester/api-tester/critical-reminders.md +41 -0
- package/src/agents/tester/api-tester/critical-requirements.md +41 -0
- package/src/agents/tester/api-tester/identity.md +47 -0
- package/src/agents/tester/api-tester/metadata.yaml +12 -0
- package/src/agents/tester/api-tester/output.md +284 -0
- package/src/agents/tester/api-tester/playbook.md +275 -0
- package/src/agents/tester/cli-tester/critical-reminders.md +36 -0
- package/src/agents/tester/cli-tester/critical-requirements.md +36 -0
- package/src/agents/tester/cli-tester/identity.md +43 -0
- package/src/agents/tester/cli-tester/metadata.yaml +12 -0
- package/src/agents/tester/cli-tester/output.md +313 -0
- package/src/agents/tester/cli-tester/playbook.md +221 -0
- package/src/agents/tester/web-tester/critical-reminders.md +31 -0
- package/src/agents/tester/web-tester/critical-requirements.md +28 -0
- package/src/agents/tester/web-tester/identity.md +41 -0
- package/src/agents/tester/web-tester/metadata.yaml +12 -0
- package/src/agents/tester/web-tester/output.md +321 -0
- package/src/agents/tester/web-tester/playbook.md +428 -0
- package/src/schemas/agent-frontmatter.schema.json +88 -0
- package/src/schemas/agent.schema.json +103 -0
- package/src/schemas/custom-metadata.schema.json +74 -0
- package/src/schemas/hooks.schema.json +47 -0
- package/src/schemas/marketplace.schema.json +119 -0
- package/src/schemas/metadata.schema.json +387 -0
- package/src/schemas/plugin.schema.json +127 -0
- package/src/schemas/project-config.schema.json +189 -0
- package/src/schemas/project-source-config.schema.json +96 -0
- package/src/schemas/skill-frontmatter.schema.json +42 -0
- package/src/schemas/stack.schema.json +191 -0
- package/src/schemas/stacks.schema.json +107 -0
- package/bin/run.js +0 -3
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
promptValue
|
|
4
|
+
} from "../../chunk-C55DN7GE.js";
|
|
5
|
+
import {
|
|
6
|
+
FEATURE_FLAGS,
|
|
7
|
+
featureDisabledError
|
|
8
|
+
} from "../../chunk-IHO75PMZ.js";
|
|
9
|
+
import {
|
|
10
|
+
getAgentDefinitions
|
|
11
|
+
} from "../../chunk-YKKIJHZB.js";
|
|
12
|
+
import {
|
|
13
|
+
BaseCommand,
|
|
14
|
+
EXIT_CODES
|
|
15
|
+
} from "../../chunk-OA5SUEQD.js";
|
|
16
|
+
import "../../chunk-SYUOXSPU.js";
|
|
17
|
+
import "../../chunk-P3PN5SVI.js";
|
|
18
|
+
import {
|
|
19
|
+
isClaudeCLIAvailable,
|
|
20
|
+
loadConfigTypesDataInBackground,
|
|
21
|
+
resolveInstallPaths,
|
|
22
|
+
resolveSource,
|
|
23
|
+
writeScaffoldedEntityTypes
|
|
24
|
+
} from "../../chunk-KH7MOIM5.js";
|
|
25
|
+
import {
|
|
26
|
+
fileExists,
|
|
27
|
+
getErrorMessage,
|
|
28
|
+
modelNameSchema,
|
|
29
|
+
readFile
|
|
30
|
+
} from "../../chunk-3LIU2ZEF.js";
|
|
31
|
+
import "../../chunk-DJAZE4PD.js";
|
|
32
|
+
import "../../chunk-VEP23B5W.js";
|
|
33
|
+
import {
|
|
34
|
+
CLAUDE_DIR,
|
|
35
|
+
CLI_COLORS,
|
|
36
|
+
STANDARD_DIRS,
|
|
37
|
+
STANDARD_FILES
|
|
38
|
+
} from "../../chunk-O5ASLZ2K.js";
|
|
39
|
+
import "../../chunk-YU2VGX5R.js";
|
|
40
|
+
import {
|
|
41
|
+
init_esm_shims
|
|
42
|
+
} from "../../chunk-P56WJ5FA.js";
|
|
43
|
+
|
|
44
|
+
// src/cli/commands/new/agent.tsx
|
|
45
|
+
init_esm_shims();
|
|
46
|
+
import { useState } from "react";
|
|
47
|
+
import { Args, Flags } from "@oclif/core";
|
|
48
|
+
import { TextInput } from "@inkjs/ui";
|
|
49
|
+
import { spawn } from "child_process";
|
|
50
|
+
import matter from "gray-matter";
|
|
51
|
+
import { z } from "zod";
|
|
52
|
+
import { Box, Text, useApp, useInput } from "ink";
|
|
53
|
+
import path from "path";
|
|
54
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
55
|
+
var SEPARATOR_WIDTH = 60;
|
|
56
|
+
var PurposeInput = ({ onSubmit, onCancel }) => {
|
|
57
|
+
const { exit } = useApp();
|
|
58
|
+
const [error, setError] = useState(null);
|
|
59
|
+
useInput((_input, key) => {
|
|
60
|
+
if (key.escape) {
|
|
61
|
+
onCancel();
|
|
62
|
+
exit();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const handleSubmit = (value) => {
|
|
66
|
+
const trimmed = value.trim();
|
|
67
|
+
if (!trimmed) {
|
|
68
|
+
setError("Purpose is required");
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
onSubmit(trimmed);
|
|
72
|
+
exit();
|
|
73
|
+
};
|
|
74
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
75
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Create New Agent" }),
|
|
76
|
+
/* @__PURE__ */ jsx(Text, { children: "What should this agent do?" }),
|
|
77
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "e.g., Manages database migrations with rollback support" }),
|
|
78
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
79
|
+
/* @__PURE__ */ jsx(TextInput, { placeholder: "Enter agent purpose...", onSubmit: handleSubmit }),
|
|
80
|
+
error && /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.ERROR, children: error }) })
|
|
81
|
+
] });
|
|
82
|
+
};
|
|
83
|
+
var NewAgent = class _NewAgent extends BaseCommand {
|
|
84
|
+
static summary = "Create a new custom agent using AI generation";
|
|
85
|
+
static description = "Uses the agent-summoner meta-agent to scaffold a new agent with proper structure and documentation.";
|
|
86
|
+
static examples = [
|
|
87
|
+
{
|
|
88
|
+
description: "Scaffold an agent (interactive prompt)",
|
|
89
|
+
command: "<%= config.bin %> <%= command.id %> my-agent"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
description: "Scaffold with purpose provided up front",
|
|
93
|
+
command: '<%= config.bin %> <%= command.id %> my-agent --purpose "Manage DB migrations"'
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
description: "Overwrite an existing agent",
|
|
97
|
+
command: "<%= config.bin %> <%= command.id %> my-agent --force"
|
|
98
|
+
}
|
|
99
|
+
];
|
|
100
|
+
static args = {
|
|
101
|
+
name: Args.string({
|
|
102
|
+
description: "Name of the agent to create",
|
|
103
|
+
required: true
|
|
104
|
+
})
|
|
105
|
+
};
|
|
106
|
+
static flags = {
|
|
107
|
+
...BaseCommand.baseFlags,
|
|
108
|
+
purpose: Flags.string({
|
|
109
|
+
char: "p",
|
|
110
|
+
description: "Purpose/description of the agent",
|
|
111
|
+
required: false
|
|
112
|
+
}),
|
|
113
|
+
force: Flags.boolean({
|
|
114
|
+
char: "f",
|
|
115
|
+
description: "Overwrite existing agent",
|
|
116
|
+
default: false
|
|
117
|
+
})
|
|
118
|
+
};
|
|
119
|
+
async run() {
|
|
120
|
+
if (!FEATURE_FLAGS.NEW_AGENT_COMMAND) {
|
|
121
|
+
this.error(featureDisabledError("new agent"), {
|
|
122
|
+
exit: EXIT_CODES.ERROR
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
const { args, flags } = await this.parse(_NewAgent);
|
|
126
|
+
const projectDir = process.cwd();
|
|
127
|
+
const configTypesReady = loadConfigTypesDataInBackground(flags.source, projectDir);
|
|
128
|
+
await this.ensureClaudeCliAvailable();
|
|
129
|
+
const purpose = flags.purpose ?? await this.promptForPurpose();
|
|
130
|
+
const outputDir = path.join(resolveInstallPaths(projectDir, "project").agentsDir, "_custom");
|
|
131
|
+
await this.checkExistingDir(path.join(outputDir, args.name), flags.force);
|
|
132
|
+
this.logAgentPlan(args.name, purpose, outputDir);
|
|
133
|
+
await this.generateAgent(args.name, purpose, outputDir, flags, projectDir);
|
|
134
|
+
await this.updateConfigTypes(projectDir, configTypesReady, args.name);
|
|
135
|
+
this.log("");
|
|
136
|
+
this.log("\u2500".repeat(SEPARATOR_WIDTH));
|
|
137
|
+
this.logSuccess("Agent creation complete!");
|
|
138
|
+
}
|
|
139
|
+
async checkExistingDir(agentDir, force) {
|
|
140
|
+
await this.ensureDirOverwritable(agentDir, force, {
|
|
141
|
+
exists: `Agent directory already exists: ${agentDir}`,
|
|
142
|
+
overwriting: `Overwriting existing agent at ${agentDir}`
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
async ensureClaudeCliAvailable() {
|
|
146
|
+
const cliAvailable = await isClaudeCLIAvailable();
|
|
147
|
+
if (!cliAvailable) {
|
|
148
|
+
this.error(
|
|
149
|
+
"Claude CLI not found. Please install it first:\n npm install -g @anthropic-ai/claude-code",
|
|
150
|
+
{ exit: EXIT_CODES.ERROR }
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async promptForPurpose() {
|
|
155
|
+
const outcome = await promptValue(
|
|
156
|
+
(resolve) => /* @__PURE__ */ jsx(
|
|
157
|
+
PurposeInput,
|
|
158
|
+
{
|
|
159
|
+
onSubmit: (value) => resolve({ status: "submitted", purpose: value }),
|
|
160
|
+
onCancel: () => resolve({ status: "cancelled" })
|
|
161
|
+
}
|
|
162
|
+
),
|
|
163
|
+
{ onExit: { status: "cancelled" } }
|
|
164
|
+
);
|
|
165
|
+
if (outcome.status === "cancelled") {
|
|
166
|
+
this.log("Cancelled");
|
|
167
|
+
this.exit(EXIT_CODES.CANCELLED);
|
|
168
|
+
throw new Error("unreachable");
|
|
169
|
+
}
|
|
170
|
+
return outcome.purpose;
|
|
171
|
+
}
|
|
172
|
+
logAgentPlan(name, purpose, outputDir) {
|
|
173
|
+
this.log("");
|
|
174
|
+
this.log(`Agent name: ${name}`);
|
|
175
|
+
this.log(`Purpose: ${purpose}`);
|
|
176
|
+
this.log(`Output: ${outputDir}`);
|
|
177
|
+
this.log("");
|
|
178
|
+
}
|
|
179
|
+
async generateAgent(name, purpose, outputDir, flags, projectDir) {
|
|
180
|
+
this.log("Fetching agent-summoner from source...");
|
|
181
|
+
try {
|
|
182
|
+
const sourceConfig = await resolveSource(flags.source, projectDir);
|
|
183
|
+
const agentDef = await loadMetaAgent({
|
|
184
|
+
projectDir,
|
|
185
|
+
source: sourceConfig.source
|
|
186
|
+
});
|
|
187
|
+
this.log("Meta-agent loaded");
|
|
188
|
+
this.log("");
|
|
189
|
+
const agentPrompt = buildAgentPrompt(name, purpose, outputDir);
|
|
190
|
+
this.log("Invoking agent-summoner to create your agent...");
|
|
191
|
+
this.log("\u2500".repeat(SEPARATOR_WIDTH));
|
|
192
|
+
this.log("");
|
|
193
|
+
await invokeMetaAgent({
|
|
194
|
+
agentDef,
|
|
195
|
+
prompt: agentPrompt
|
|
196
|
+
});
|
|
197
|
+
} catch (error) {
|
|
198
|
+
this.handleError(error);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async updateConfigTypes(projectDir, configTypesReady, agentName) {
|
|
202
|
+
try {
|
|
203
|
+
await writeScaffoldedEntityTypes(projectDir, configTypesReady, {
|
|
204
|
+
extraAgentNames: [agentName]
|
|
205
|
+
});
|
|
206
|
+
} catch (error) {
|
|
207
|
+
this.warn(`Could not update ${STANDARD_FILES.CONFIG_TYPES_TS}: ${getErrorMessage(error)}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
var META_AGENT_NAME = "agent-summoner";
|
|
212
|
+
var metaAgentFrontmatterSchema = z.object({
|
|
213
|
+
description: z.string().optional(),
|
|
214
|
+
tools: z.union([z.string(), z.array(z.string())]).optional(),
|
|
215
|
+
model: modelNameSchema.optional()
|
|
216
|
+
});
|
|
217
|
+
function parseCompiledAgent(content) {
|
|
218
|
+
const { data, content: body } = matter(content);
|
|
219
|
+
const frontmatter = metaAgentFrontmatterSchema.parse(data);
|
|
220
|
+
const tools = typeof frontmatter.tools === "string" ? frontmatter.tools.split(",").map((t) => t.trim()) : frontmatter.tools;
|
|
221
|
+
return {
|
|
222
|
+
description: frontmatter.description || "Creates new agents",
|
|
223
|
+
prompt: body.trim(),
|
|
224
|
+
model: frontmatter.model,
|
|
225
|
+
tools
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
async function loadMetaAgent(options) {
|
|
229
|
+
const { projectDir, source } = options;
|
|
230
|
+
const compiledFileName = `${META_AGENT_NAME}.md`;
|
|
231
|
+
const localAgentPath = path.join(
|
|
232
|
+
resolveInstallPaths(projectDir, "project").agentsDir,
|
|
233
|
+
compiledFileName
|
|
234
|
+
);
|
|
235
|
+
if (await fileExists(localAgentPath)) {
|
|
236
|
+
return parseCompiledAgent(await readFile(localAgentPath));
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
const agentPaths = await getAgentDefinitions(source, { projectDir });
|
|
240
|
+
const remoteAgentPath = path.join(
|
|
241
|
+
agentPaths.sourcePath,
|
|
242
|
+
CLAUDE_DIR,
|
|
243
|
+
STANDARD_DIRS.AGENTS,
|
|
244
|
+
compiledFileName
|
|
245
|
+
);
|
|
246
|
+
if (await fileExists(remoteAgentPath)) {
|
|
247
|
+
return parseCompiledAgent(await readFile(remoteAgentPath));
|
|
248
|
+
}
|
|
249
|
+
} catch {
|
|
250
|
+
}
|
|
251
|
+
throw new Error(
|
|
252
|
+
`Agent '${META_AGENT_NAME}' not found.
|
|
253
|
+
|
|
254
|
+
Run 'compile' first to generate agents.`
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
function buildAgentPrompt(agentName, purpose, outputDir) {
|
|
258
|
+
return `Create a new Claude Code agent named "${agentName}" in the directory "${outputDir}".
|
|
259
|
+
|
|
260
|
+
Agent Purpose: ${purpose}
|
|
261
|
+
|
|
262
|
+
Requirements:
|
|
263
|
+
1. Create the agent directory structure at ${outputDir}/${agentName}/
|
|
264
|
+
2. Create metadata.yaml with appropriate configuration
|
|
265
|
+
3. Create identity.md with the agent's role and context
|
|
266
|
+
4. Create playbook.md with the agent's operational process
|
|
267
|
+
5. Optionally create output.md if output format guidance would help
|
|
268
|
+
6. Optionally create critical-requirements.md for important rules
|
|
269
|
+
7. Include \`custom: true\` in the metadata.yaml configuration
|
|
270
|
+
|
|
271
|
+
Follow the existing agent patterns in the codebase. Keep the agent focused and practical.`;
|
|
272
|
+
}
|
|
273
|
+
async function invokeMetaAgent(options) {
|
|
274
|
+
const { agentDef, prompt } = options;
|
|
275
|
+
const agentsJson = JSON.stringify({
|
|
276
|
+
[META_AGENT_NAME]: {
|
|
277
|
+
description: agentDef.description,
|
|
278
|
+
prompt: agentDef.prompt,
|
|
279
|
+
model: agentDef.model,
|
|
280
|
+
tools: agentDef.tools
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
const args = ["--agents", agentsJson, "--agent", META_AGENT_NAME, "--prompt", prompt];
|
|
284
|
+
return new Promise((resolve, reject) => {
|
|
285
|
+
const child = spawn("claude", args, {
|
|
286
|
+
stdio: "inherit"
|
|
287
|
+
});
|
|
288
|
+
child.on("error", (error) => {
|
|
289
|
+
reject(new Error(`Failed to spawn claude CLI: ${error.message}`));
|
|
290
|
+
});
|
|
291
|
+
child.on("close", (code) => {
|
|
292
|
+
if (code === 0) {
|
|
293
|
+
resolve();
|
|
294
|
+
} else {
|
|
295
|
+
reject(new Error(`Claude CLI exited with code ${code}`));
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
export {
|
|
301
|
+
buildAgentPrompt,
|
|
302
|
+
NewAgent as default
|
|
303
|
+
};
|
|
304
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/new/agent.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { Args, Flags } from \"@oclif/core\";\nimport { TextInput } from \"@inkjs/ui\";\nimport { spawn } from \"child_process\";\nimport matter from \"gray-matter\";\nimport { z } from \"zod\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport path from \"path\";\n\nimport { BaseCommand } from \"../../base-command.js\";\nimport { promptValue } from \"../../components/common/prompt-confirm.js\";\nimport { CLAUDE_DIR, CLI_COLORS, STANDARD_DIRS, STANDARD_FILES } from \"../../consts.js\";\nimport { resolveInstallPaths } from \"../../lib/installation/index.js\";\nimport { resolveSource } from \"../../lib/configuration/index.js\";\nimport {\n type ConfigTypesBackgroundData,\n loadConfigTypesDataInBackground,\n} from \"../../lib/configuration/config-types-writer.js\";\nimport { writeScaffoldedEntityTypes } from \"../../lib/config-gate/index.js\";\nimport { EXIT_CODES } from \"../../lib/exit-codes.js\";\nimport { FEATURE_FLAGS, featureDisabledError } from \"../../lib/feature-flags.js\";\nimport { modelNameSchema } from \"../../lib/schemas.js\";\nimport { getAgentDefinitions } from \"../../lib/agents/index.js\";\nimport type { ModelName } from \"../../types/index.js\";\nimport { getErrorMessage } from \"../../utils/errors.js\";\nimport { isClaudeCLIAvailable } from \"../../utils/exec.js\";\nimport { fileExists, readFile } from \"../../utils/fs.js\";\n\nconst SEPARATOR_WIDTH = 60;\n\ntype PurposeInputProps = {\n onSubmit: (purpose: string) => void;\n onCancel: () => void;\n};\n\ntype PurposeOutcome = { status: \"submitted\"; purpose: string } | { status: \"cancelled\" };\n\nconst PurposeInput: React.FC<PurposeInputProps> = ({ onSubmit, onCancel }) => {\n const { exit } = useApp();\n const [error, setError] = useState<string | null>(null);\n\n useInput((_input, key) => {\n if (key.escape) {\n onCancel();\n exit();\n }\n });\n\n const handleSubmit = (value: string) => {\n const trimmed = value.trim();\n if (!trimmed) {\n setError(\"Purpose is required\");\n return;\n }\n onSubmit(trimmed);\n exit();\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>Create New Agent</Text>\n <Text>What should this agent do?</Text>\n <Text dimColor>e.g., Manages database migrations with rollback support</Text>\n <Text> </Text>\n <TextInput placeholder=\"Enter agent purpose...\" onSubmit={handleSubmit} />\n {error && (\n <Box marginTop={1}>\n <Text color={CLI_COLORS.ERROR}>{error}</Text>\n </Box>\n )}\n </Box>\n );\n};\n\nexport default class NewAgent extends BaseCommand {\n static summary = \"Create a new custom agent using AI generation\";\n static description =\n \"Uses the agent-summoner meta-agent to scaffold a new agent with proper structure and documentation.\";\n\n static examples = [\n {\n description: \"Scaffold an agent (interactive prompt)\",\n command: \"<%= config.bin %> <%= command.id %> my-agent\",\n },\n {\n description: \"Scaffold with purpose provided up front\",\n command: '<%= config.bin %> <%= command.id %> my-agent --purpose \"Manage DB migrations\"',\n },\n {\n description: \"Overwrite an existing agent\",\n command: \"<%= config.bin %> <%= command.id %> my-agent --force\",\n },\n ];\n\n static args = {\n name: Args.string({\n description: \"Name of the agent to create\",\n required: true,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n purpose: Flags.string({\n char: \"p\",\n description: \"Purpose/description of the agent\",\n required: false,\n }),\n force: Flags.boolean({\n char: \"f\",\n description: \"Overwrite existing agent\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n if (!FEATURE_FLAGS.NEW_AGENT_COMMAND) {\n this.error(featureDisabledError(\"new agent\"), {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const { args, flags } = await this.parse(NewAgent);\n const projectDir = process.cwd();\n\n const configTypesReady = loadConfigTypesDataInBackground(flags.source, projectDir);\n await this.ensureClaudeCliAvailable();\n\n const purpose = flags.purpose ?? (await this.promptForPurpose());\n const outputDir = path.join(resolveInstallPaths(projectDir, \"project\").agentsDir, \"_custom\");\n\n await this.checkExistingDir(path.join(outputDir, args.name), flags.force);\n this.logAgentPlan(args.name, purpose, outputDir);\n await this.generateAgent(args.name, purpose, outputDir, flags, projectDir);\n await this.updateConfigTypes(projectDir, configTypesReady, args.name);\n\n this.log(\"\");\n this.log(\"─\".repeat(SEPARATOR_WIDTH));\n this.logSuccess(\"Agent creation complete!\");\n }\n\n private async checkExistingDir(agentDir: string, force: boolean): Promise<void> {\n await this.ensureDirOverwritable(agentDir, force, {\n exists: `Agent directory already exists: ${agentDir}`,\n overwriting: `Overwriting existing agent at ${agentDir}`,\n });\n }\n\n private async ensureClaudeCliAvailable(): Promise<void> {\n const cliAvailable = await isClaudeCLIAvailable();\n if (!cliAvailable) {\n this.error(\n \"Claude CLI not found. Please install it first:\\n\" +\n \" npm install -g @anthropic-ai/claude-code\",\n { exit: EXIT_CODES.ERROR },\n );\n }\n }\n\n private async promptForPurpose(): Promise<string> {\n const outcome = await promptValue<PurposeOutcome>(\n (resolve) => (\n <PurposeInput\n onSubmit={(value) => resolve({ status: \"submitted\", purpose: value })}\n onCancel={() => resolve({ status: \"cancelled\" })}\n />\n ),\n { onExit: { status: \"cancelled\" } },\n );\n\n if (outcome.status === \"cancelled\") {\n this.log(\"Cancelled\");\n this.exit(EXIT_CODES.CANCELLED);\n throw new Error(\"unreachable\");\n }\n\n return outcome.purpose;\n }\n\n private logAgentPlan(name: string, purpose: string, outputDir: string): void {\n this.log(\"\");\n this.log(`Agent name: ${name}`);\n this.log(`Purpose: ${purpose}`);\n this.log(`Output: ${outputDir}`);\n this.log(\"\");\n }\n\n private async generateAgent(\n name: string,\n purpose: string,\n outputDir: string,\n flags: { source: string | undefined },\n projectDir: string,\n ): Promise<void> {\n this.log(\"Fetching agent-summoner from source...\");\n\n try {\n const sourceConfig = await resolveSource(flags.source, projectDir);\n const agentDef = await loadMetaAgent({\n projectDir,\n source: sourceConfig.source,\n });\n this.log(\"Meta-agent loaded\");\n this.log(\"\");\n\n const agentPrompt = buildAgentPrompt(name, purpose, outputDir);\n\n this.log(\"Invoking agent-summoner to create your agent...\");\n this.log(\"─\".repeat(SEPARATOR_WIDTH));\n this.log(\"\");\n\n await invokeMetaAgent({\n agentDef,\n prompt: agentPrompt,\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async updateConfigTypes(\n projectDir: string,\n configTypesReady: Promise<ConfigTypesBackgroundData>,\n agentName: string,\n ): Promise<void> {\n try {\n await writeScaffoldedEntityTypes(projectDir, configTypesReady, {\n extraAgentNames: [agentName],\n });\n } catch (error) {\n this.warn(`Could not update ${STANDARD_FILES.CONFIG_TYPES_TS}: ${getErrorMessage(error)}`);\n }\n }\n}\n\nconst META_AGENT_NAME = \"agent-summoner\";\n\ntype NewAgentInput = {\n description: string;\n prompt: string;\n model?: ModelName;\n tools?: string[];\n};\n\n/** Frontmatter shape of the compiled agent-summoner.md read at the matter() parse boundary. */\nconst metaAgentFrontmatterSchema = z.object({\n description: z.string().optional(),\n tools: z.union([z.string(), z.array(z.string())]).optional(),\n model: modelNameSchema.optional(),\n});\n\ntype LoadMetaAgentOptions = {\n projectDir: string;\n source: string;\n};\n\ntype InvokeMetaAgentOptions = {\n agentDef: NewAgentInput;\n prompt: string;\n};\n\nfunction parseCompiledAgent(content: string): NewAgentInput {\n const { data, content: body } = matter(content);\n const frontmatter = metaAgentFrontmatterSchema.parse(data);\n const tools =\n typeof frontmatter.tools === \"string\"\n ? frontmatter.tools.split(\",\").map((t) => t.trim())\n : frontmatter.tools;\n\n return {\n description: frontmatter.description || \"Creates new agents\",\n prompt: body.trim(),\n model: frontmatter.model,\n tools,\n };\n}\n\nasync function loadMetaAgent(options: LoadMetaAgentOptions): Promise<NewAgentInput> {\n const { projectDir, source } = options;\n const compiledFileName = `${META_AGENT_NAME}.md`;\n\n const localAgentPath = path.join(\n resolveInstallPaths(projectDir, \"project\").agentsDir,\n compiledFileName,\n );\n if (await fileExists(localAgentPath)) {\n return parseCompiledAgent(await readFile(localAgentPath));\n }\n\n try {\n const agentPaths = await getAgentDefinitions(source, { projectDir });\n const remoteAgentPath = path.join(\n agentPaths.sourcePath,\n CLAUDE_DIR,\n STANDARD_DIRS.AGENTS,\n compiledFileName,\n );\n if (await fileExists(remoteAgentPath)) {\n return parseCompiledAgent(await readFile(remoteAgentPath));\n }\n } catch {\n // Source does not contain agents — fall through to error\n }\n\n throw new Error(\n `Agent '${META_AGENT_NAME}' not found.\\n\\n` + `Run 'compile' first to generate agents.`,\n );\n}\n\nexport function buildAgentPrompt(agentName: string, purpose: string, outputDir: string): string {\n return `Create a new Claude Code agent named \"${agentName}\" in the directory \"${outputDir}\".\n\nAgent Purpose: ${purpose}\n\nRequirements:\n1. Create the agent directory structure at ${outputDir}/${agentName}/\n2. Create metadata.yaml with appropriate configuration\n3. Create identity.md with the agent's role and context\n4. Create playbook.md with the agent's operational process\n5. Optionally create output.md if output format guidance would help\n6. Optionally create critical-requirements.md for important rules\n7. Include \\`custom: true\\` in the metadata.yaml configuration\n\nFollow the existing agent patterns in the codebase. Keep the agent focused and practical.`;\n}\n\nasync function invokeMetaAgent(options: InvokeMetaAgentOptions): Promise<void> {\n const { agentDef, prompt } = options;\n\n const agentsJson = JSON.stringify({\n [META_AGENT_NAME]: {\n description: agentDef.description,\n prompt: agentDef.prompt,\n model: agentDef.model,\n tools: agentDef.tools,\n },\n });\n\n const args = [\"--agents\", agentsJson, \"--agent\", META_AGENT_NAME, \"--prompt\", prompt];\n\n return new Promise((resolve, reject) => {\n const child = spawn(\"claude\", args, {\n stdio: \"inherit\",\n });\n\n child.on(\"error\", (error) => {\n reject(new Error(`Failed to spawn claude CLI: ${error.message}`));\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Claude CLI exited with code ${code}`));\n }\n });\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
generateMarketplace,
|
|
4
|
+
writeMarketplace
|
|
5
|
+
} from "../../chunk-CFQT72MJ.js";
|
|
6
|
+
import {
|
|
7
|
+
generateSkillCategoriesTs,
|
|
8
|
+
generateSkillRulesTs,
|
|
9
|
+
resolveAuthorOrDefault,
|
|
10
|
+
scaffoldSkillFiles
|
|
11
|
+
} from "../../chunk-4LPJZNT7.js";
|
|
12
|
+
import {
|
|
13
|
+
validateKebabCaseName
|
|
14
|
+
} from "../../chunk-PG4G4IIK.js";
|
|
15
|
+
import {
|
|
16
|
+
FEATURE_FLAGS,
|
|
17
|
+
featureDisabledError
|
|
18
|
+
} from "../../chunk-IHO75PMZ.js";
|
|
19
|
+
import {
|
|
20
|
+
BaseCommand,
|
|
21
|
+
EXIT_CODES
|
|
22
|
+
} from "../../chunk-OA5SUEQD.js";
|
|
23
|
+
import "../../chunk-SYUOXSPU.js";
|
|
24
|
+
import "../../chunk-P3PN5SVI.js";
|
|
25
|
+
import {
|
|
26
|
+
LOCAL_DEFAULTS,
|
|
27
|
+
compileAllSkillPlugins,
|
|
28
|
+
loadConfigTypesDataInBackground,
|
|
29
|
+
writeMarketplaceScaffoldConfig,
|
|
30
|
+
writeScaffoldedEntityTypes
|
|
31
|
+
} from "../../chunk-KH7MOIM5.js";
|
|
32
|
+
import {
|
|
33
|
+
ensureDir,
|
|
34
|
+
getErrorMessage,
|
|
35
|
+
writeFile
|
|
36
|
+
} from "../../chunk-3LIU2ZEF.js";
|
|
37
|
+
import "../../chunk-DJAZE4PD.js";
|
|
38
|
+
import "../../chunk-VEP23B5W.js";
|
|
39
|
+
import {
|
|
40
|
+
CLAUDE_SRC_DIR,
|
|
41
|
+
CLI_INVOKE_COMMAND,
|
|
42
|
+
EJECT_SOURCE,
|
|
43
|
+
MARKETPLACE_JSON,
|
|
44
|
+
PLUGINS_DIST_PATH,
|
|
45
|
+
PLUGIN_MANIFEST_DIR,
|
|
46
|
+
SKILLS_DIR_PATH,
|
|
47
|
+
SKILL_CATEGORIES_PATH,
|
|
48
|
+
SKILL_RULES_PATH,
|
|
49
|
+
STACKS_FILE_PATH,
|
|
50
|
+
STANDARD_FILES,
|
|
51
|
+
marketplaceManifestPath
|
|
52
|
+
} from "../../chunk-O5ASLZ2K.js";
|
|
53
|
+
import "../../chunk-YU2VGX5R.js";
|
|
54
|
+
import {
|
|
55
|
+
init_esm_shims
|
|
56
|
+
} from "../../chunk-P56WJ5FA.js";
|
|
57
|
+
|
|
58
|
+
// src/cli/commands/new/marketplace.ts
|
|
59
|
+
init_esm_shims();
|
|
60
|
+
import { Args, Flags } from "@oclif/core";
|
|
61
|
+
import path from "path";
|
|
62
|
+
function generateStacksTs(name) {
|
|
63
|
+
const data = {
|
|
64
|
+
stacks: [
|
|
65
|
+
{
|
|
66
|
+
id: "dummy-stack",
|
|
67
|
+
name: "Dummy Stack",
|
|
68
|
+
description: `Default stack for ${name}`,
|
|
69
|
+
agents: {
|
|
70
|
+
"web-developer": {
|
|
71
|
+
"dummy-category": "dummy-skill"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
philosophy: "Ship fast, iterate faster"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
};
|
|
78
|
+
const body = JSON.stringify(data, null, 2);
|
|
79
|
+
return `// Stack definitions for ${name}
|
|
80
|
+
export default ${body};
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
function generateReadme(name) {
|
|
84
|
+
return `# ${name}
|
|
85
|
+
|
|
86
|
+
Private marketplace for custom skills and stacks.
|
|
87
|
+
|
|
88
|
+
## Directory Structure
|
|
89
|
+
|
|
90
|
+
\`\`\`
|
|
91
|
+
${STACKS_FILE_PATH} # Stack definitions (agent groupings with skill mappings)
|
|
92
|
+
${SKILLS_DIR_PATH}/ # Custom skill definitions
|
|
93
|
+
\`\`\`
|
|
94
|
+
|
|
95
|
+
## Creating Skills
|
|
96
|
+
|
|
97
|
+
\`\`\`bash
|
|
98
|
+
${CLI_INVOKE_COMMAND} new skill <name> --category <category-name>
|
|
99
|
+
\`\`\`
|
|
100
|
+
|
|
101
|
+
Each skill lives in \`${SKILLS_DIR_PATH}/<skill-name>/\` with:
|
|
102
|
+
- \`${STANDARD_FILES.SKILL_MD}\` -- Skill content (what the skill teaches)
|
|
103
|
+
- \`${STANDARD_FILES.METADATA_YAML}\` -- Skill metadata (category, author, description, custom: true)
|
|
104
|
+
|
|
105
|
+
## Using This Marketplace
|
|
106
|
+
|
|
107
|
+
Point the CLI at this marketplace as a source:
|
|
108
|
+
|
|
109
|
+
\`\`\`bash
|
|
110
|
+
# Local development
|
|
111
|
+
${CLI_INVOKE_COMMAND} init --source /path/to/${name}
|
|
112
|
+
|
|
113
|
+
# From a git repository
|
|
114
|
+
${CLI_INVOKE_COMMAND} init --source github:your-org/${name}
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
## How It Works
|
|
118
|
+
|
|
119
|
+
The CLI auto-discovers skills from the \`${SKILLS_DIR_PATH}/\` directory
|
|
120
|
+
and stacks from \`${STACKS_FILE_PATH}\`.
|
|
121
|
+
Custom categories are discovered from skill \`${STANDARD_FILES.METADATA_YAML}\` files with \`custom: true\`.
|
|
122
|
+
Custom skills appear alongside built-in ones in the wizard. No manual registration needed.
|
|
123
|
+
`;
|
|
124
|
+
}
|
|
125
|
+
var NewMarketplace = class _NewMarketplace extends BaseCommand {
|
|
126
|
+
static summary = "Scaffold a new private marketplace project";
|
|
127
|
+
static description = "Create a new private marketplace directory with the required structure for custom skills and stacks.";
|
|
128
|
+
static examples = [
|
|
129
|
+
{
|
|
130
|
+
description: "Create a new marketplace",
|
|
131
|
+
command: "<%= config.bin %> <%= command.id %> acme-skills"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
description: "Initialize the current directory as a marketplace",
|
|
135
|
+
command: "<%= config.bin %> <%= command.id %> ."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
description: "Overwrite an existing directory",
|
|
139
|
+
command: "<%= config.bin %> <%= command.id %> acme-skills --force"
|
|
140
|
+
}
|
|
141
|
+
];
|
|
142
|
+
static args = {
|
|
143
|
+
name: Args.string({
|
|
144
|
+
description: 'Name of the marketplace directory (kebab-case), or "." to use the current directory',
|
|
145
|
+
required: true
|
|
146
|
+
})
|
|
147
|
+
};
|
|
148
|
+
static flags = {
|
|
149
|
+
...BaseCommand.baseFlags,
|
|
150
|
+
force: Flags.boolean({
|
|
151
|
+
char: "f",
|
|
152
|
+
description: "Overwrite existing marketplace directory",
|
|
153
|
+
default: false
|
|
154
|
+
})
|
|
155
|
+
};
|
|
156
|
+
async run() {
|
|
157
|
+
if (!FEATURE_FLAGS.NEW_MARKETPLACE_COMMAND) {
|
|
158
|
+
this.error(featureDisabledError("new marketplace"), {
|
|
159
|
+
exit: EXIT_CODES.ERROR
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
const { args, flags } = await this.parse(_NewMarketplace);
|
|
163
|
+
const parentDir = process.cwd();
|
|
164
|
+
const useCurrentDir = args.name === ".";
|
|
165
|
+
const marketplaceName = useCurrentDir ? path.basename(parentDir) : args.name;
|
|
166
|
+
const marketplaceDir = useCurrentDir ? parentDir : path.join(parentDir, args.name);
|
|
167
|
+
this.printHeader();
|
|
168
|
+
this.validateName(marketplaceName, useCurrentDir);
|
|
169
|
+
await this.checkExistingDir(marketplaceDir, useCurrentDir, flags.force);
|
|
170
|
+
this.log(`Marketplace: ${marketplaceName}`);
|
|
171
|
+
this.log(`Directory: ${marketplaceDir}`);
|
|
172
|
+
this.log("");
|
|
173
|
+
try {
|
|
174
|
+
const author = await resolveAuthorOrDefault(void 0, parentDir);
|
|
175
|
+
await this.createMarketplaceFiles(marketplaceName, marketplaceDir, author);
|
|
176
|
+
await this.buildMarketplace(marketplaceDir, marketplaceName);
|
|
177
|
+
this.printNextSteps(marketplaceName, useCurrentDir);
|
|
178
|
+
} catch (error) {
|
|
179
|
+
this.handleError(error);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
printHeader() {
|
|
183
|
+
this.log("");
|
|
184
|
+
this.log("Create New Marketplace");
|
|
185
|
+
this.log("");
|
|
186
|
+
}
|
|
187
|
+
validateName(name, useCurrentDir) {
|
|
188
|
+
const validationError = validateKebabCaseName(name, "Marketplace");
|
|
189
|
+
if (validationError) {
|
|
190
|
+
if (useCurrentDir) {
|
|
191
|
+
this.error(
|
|
192
|
+
`Current directory name '${name}' is not valid kebab-case. Rename it or pass an explicit name.`,
|
|
193
|
+
{ exit: EXIT_CODES.INVALID_ARGS }
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
this.error(validationError, { exit: EXIT_CODES.INVALID_ARGS });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
async checkExistingDir(dir, useCurrentDir, force) {
|
|
200
|
+
if (useCurrentDir) return;
|
|
201
|
+
await this.ensureDirOverwritable(dir, force, {
|
|
202
|
+
exists: `Directory already exists: ${dir}`,
|
|
203
|
+
overwriting: `Overwriting existing directory at ${dir}`
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
async createMarketplaceFiles(marketplaceName, marketplaceDir, author) {
|
|
207
|
+
const skillName = "dummy-skill";
|
|
208
|
+
this.log("Creating marketplace structure...");
|
|
209
|
+
const stacksContent = generateStacksTs(marketplaceName);
|
|
210
|
+
const stacksPath = path.join(marketplaceDir, STACKS_FILE_PATH);
|
|
211
|
+
await ensureDir(path.dirname(stacksPath));
|
|
212
|
+
await writeFile(stacksPath, stacksContent);
|
|
213
|
+
const categoriesContent = generateSkillCategoriesTs(
|
|
214
|
+
LOCAL_DEFAULTS.CATEGORY,
|
|
215
|
+
LOCAL_DEFAULTS.DOMAIN
|
|
216
|
+
);
|
|
217
|
+
const categoriesPath = path.join(marketplaceDir, SKILL_CATEGORIES_PATH);
|
|
218
|
+
await writeFile(categoriesPath, categoriesContent);
|
|
219
|
+
const rulesContent = generateSkillRulesTs();
|
|
220
|
+
const rulesPath = path.join(marketplaceDir, SKILL_RULES_PATH);
|
|
221
|
+
await writeFile(rulesPath, rulesContent);
|
|
222
|
+
const skillsDir = path.join(marketplaceDir, SKILLS_DIR_PATH);
|
|
223
|
+
await scaffoldSkillFiles({
|
|
224
|
+
name: skillName,
|
|
225
|
+
author,
|
|
226
|
+
category: LOCAL_DEFAULTS.CATEGORY,
|
|
227
|
+
domain: LOCAL_DEFAULTS.DOMAIN,
|
|
228
|
+
skillDir: path.join(skillsDir, skillName)
|
|
229
|
+
});
|
|
230
|
+
const readmeContent = generateReadme(marketplaceName);
|
|
231
|
+
const readmePath = path.join(marketplaceDir, "README.md");
|
|
232
|
+
await writeFile(readmePath, readmeContent);
|
|
233
|
+
const configDir = path.join(marketplaceDir, CLAUDE_SRC_DIR);
|
|
234
|
+
await ensureDir(configDir);
|
|
235
|
+
const marketplaceComment = "// Marketplaces house skills only \u2014 agents are defined by consumer projects.\n\n";
|
|
236
|
+
await writeMarketplaceScaffoldConfig(
|
|
237
|
+
marketplaceDir,
|
|
238
|
+
// Boundary cast: custom marketplace dummy skill/category not in standard unions
|
|
239
|
+
{
|
|
240
|
+
name: marketplaceName,
|
|
241
|
+
skills: [{ id: skillName, scope: "project", source: EJECT_SOURCE }],
|
|
242
|
+
agents: [],
|
|
243
|
+
source: ".",
|
|
244
|
+
marketplace: marketplaceName,
|
|
245
|
+
stack: {
|
|
246
|
+
"web-developer": {
|
|
247
|
+
// Boundary cast: dummy-category is not in the generated Category union
|
|
248
|
+
[LOCAL_DEFAULTS.CATEGORY]: [{ id: skillName }]
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
marketplaceComment
|
|
253
|
+
);
|
|
254
|
+
this.log("");
|
|
255
|
+
this.logSuccess(`Created ${STACKS_FILE_PATH}`);
|
|
256
|
+
this.logSuccess(`Created ${SKILL_CATEGORIES_PATH}`);
|
|
257
|
+
this.logSuccess(`Created ${SKILL_RULES_PATH}`);
|
|
258
|
+
this.logSuccess("Created README.md");
|
|
259
|
+
this.logSuccess(`Created ${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS}`);
|
|
260
|
+
this.log("");
|
|
261
|
+
}
|
|
262
|
+
printNextSteps(marketplaceName, useCurrentDir) {
|
|
263
|
+
const steps = [
|
|
264
|
+
...useCurrentDir ? [] : [`cd ${marketplaceName}`],
|
|
265
|
+
`${CLI_INVOKE_COMMAND} new skill <name> --category <category-name>`,
|
|
266
|
+
"Push to a git repository",
|
|
267
|
+
`${CLI_INVOKE_COMMAND} init --source github:your-org/${marketplaceName}`
|
|
268
|
+
];
|
|
269
|
+
this.log("Marketplace created successfully!");
|
|
270
|
+
this.log("");
|
|
271
|
+
this.log("Next steps:");
|
|
272
|
+
for (const [index, step] of steps.entries()) {
|
|
273
|
+
this.log(` ${index + 1}. ${step}`);
|
|
274
|
+
}
|
|
275
|
+
this.log("");
|
|
276
|
+
}
|
|
277
|
+
async buildMarketplace(marketplaceDir, marketplaceName) {
|
|
278
|
+
const skillsDir = path.resolve(marketplaceDir, SKILLS_DIR_PATH);
|
|
279
|
+
const pluginsOutputDir = path.resolve(marketplaceDir, PLUGINS_DIST_PATH);
|
|
280
|
+
const marketplaceOutputPath = marketplaceManifestPath(marketplaceDir);
|
|
281
|
+
try {
|
|
282
|
+
this.log("Building plugins...");
|
|
283
|
+
const { compiled, failed } = await compileAllSkillPlugins(skillsDir, pluginsOutputDir);
|
|
284
|
+
this.logSuccess(`Built ${compiled.length} skill plugins.`);
|
|
285
|
+
if (failed.length > 0) {
|
|
286
|
+
this.warn(`${failed.length} skill(s) failed to compile: ${failed.join(", ")}`);
|
|
287
|
+
}
|
|
288
|
+
this.log("Generating marketplace.json...");
|
|
289
|
+
const marketplace = await generateMarketplace(pluginsOutputDir, {
|
|
290
|
+
name: marketplaceName,
|
|
291
|
+
ownerName: marketplaceName,
|
|
292
|
+
pluginRoot: `./${PLUGINS_DIST_PATH}`
|
|
293
|
+
});
|
|
294
|
+
await writeMarketplace(marketplaceOutputPath, marketplace);
|
|
295
|
+
this.logSuccess(
|
|
296
|
+
`Generated ${PLUGIN_MANIFEST_DIR}/${MARKETPLACE_JSON} with ${marketplace.plugins.length} plugins.`
|
|
297
|
+
);
|
|
298
|
+
this.log("Generating config-types.ts...");
|
|
299
|
+
const configTypesData = loadConfigTypesDataInBackground(marketplaceDir, marketplaceDir);
|
|
300
|
+
await writeScaffoldedEntityTypes(marketplaceDir, configTypesData);
|
|
301
|
+
this.logSuccess(`Generated ${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TYPES_TS}`);
|
|
302
|
+
} catch (error) {
|
|
303
|
+
this.warn(`Build step failed: ${getErrorMessage(error)}`);
|
|
304
|
+
this.warn(
|
|
305
|
+
"The scaffold is still valid. Run 'build plugins' and 'build marketplace' manually."
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
export {
|
|
311
|
+
NewMarketplace as default,
|
|
312
|
+
generateReadme,
|
|
313
|
+
generateStacksTs
|
|
314
|
+
};
|
|
315
|
+
//# sourceMappingURL=marketplace.js.map
|