agents-inc 0.149.2 → 0.151.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 +2287 -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-3XFUQ6OL.js +68 -0
- package/dist/chunk-3XFUQ6OL.js.map +1 -0
- package/dist/chunk-3YGUHWLR.js +258 -0
- package/dist/chunk-3YGUHWLR.js.map +1 -0
- package/dist/chunk-44LLPS2N.js +1135 -0
- package/dist/chunk-44LLPS2N.js.map +1 -0
- package/dist/chunk-4R6PGHQQ.js +300 -0
- package/dist/chunk-4R6PGHQQ.js.map +1 -0
- package/dist/chunk-5V2O6C3T.js +112 -0
- package/dist/chunk-5V2O6C3T.js.map +1 -0
- package/dist/chunk-6RBQBOBS.js +287 -0
- package/dist/chunk-6RBQBOBS.js.map +1 -0
- package/dist/chunk-7QIHKQL5.js +181 -0
- package/dist/chunk-7QIHKQL5.js.map +1 -0
- package/dist/chunk-BNE4HHIH.js +28 -0
- package/dist/chunk-BNE4HHIH.js.map +1 -0
- package/dist/chunk-C55DN7GE.js +35 -0
- package/dist/chunk-C55DN7GE.js.map +1 -0
- package/dist/chunk-DAG2ULNF.js +125 -0
- package/dist/chunk-DAG2ULNF.js.map +1 -0
- package/dist/chunk-DG2NGZ7S.js +10929 -0
- package/dist/chunk-DG2NGZ7S.js.map +1 -0
- package/dist/chunk-DIBCRIMR.js +36 -0
- package/dist/chunk-DIBCRIMR.js.map +1 -0
- package/dist/chunk-DUVWGO6E.js +54 -0
- package/dist/chunk-DUVWGO6E.js.map +1 -0
- package/dist/chunk-EKWAUOQB.js +96 -0
- package/dist/chunk-EKWAUOQB.js.map +1 -0
- package/dist/chunk-ES3NJZON.js +31 -0
- package/dist/chunk-ES3NJZON.js.map +1 -0
- package/dist/chunk-EVXG3X6G.js +179 -0
- package/dist/chunk-EVXG3X6G.js.map +1 -0
- package/dist/chunk-EZ7STXUV.js +349 -0
- package/dist/chunk-EZ7STXUV.js.map +1 -0
- package/dist/chunk-FYPUUYSG.js +31 -0
- package/dist/chunk-FYPUUYSG.js.map +1 -0
- package/dist/chunk-GYG5SE2D.js +81 -0
- package/dist/chunk-GYG5SE2D.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-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-LAXAQ3PZ.js +235 -0
- package/dist/chunk-LAXAQ3PZ.js.map +1 -0
- package/dist/chunk-LYYXX2W5.js +87 -0
- package/dist/chunk-LYYXX2W5.js.map +1 -0
- package/dist/chunk-NGLQ5W7U.js +339 -0
- package/dist/chunk-NGLQ5W7U.js.map +1 -0
- package/dist/chunk-NHCGC6DG.js +111 -0
- package/dist/chunk-NHCGC6DG.js.map +1 -0
- package/dist/chunk-NIKUMXE7.js +24 -0
- package/dist/chunk-NIKUMXE7.js.map +1 -0
- package/dist/chunk-NM3EDGB5.js +300 -0
- package/dist/chunk-NM3EDGB5.js.map +1 -0
- package/dist/chunk-O5ASLZ2K.js +270 -0
- package/dist/chunk-O5ASLZ2K.js.map +1 -0
- package/dist/chunk-OJIESW5B.js +174 -0
- package/dist/chunk-OJIESW5B.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-PV2HNW4I.js +382 -0
- package/dist/chunk-PV2HNW4I.js.map +1 -0
- package/dist/chunk-QQLRX4KI.js +41 -0
- package/dist/chunk-QQLRX4KI.js.map +1 -0
- package/dist/chunk-QTFQEYDA.js +789 -0
- package/dist/chunk-QTFQEYDA.js.map +1 -0
- package/dist/chunk-RBHYLCUB.js +31 -0
- package/dist/chunk-RBHYLCUB.js.map +1 -0
- package/dist/chunk-SHHOMVWC.js +62 -0
- package/dist/chunk-SHHOMVWC.js.map +1 -0
- package/dist/chunk-SI5FOARI.js +42 -0
- package/dist/chunk-SI5FOARI.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-TVHRMRD3.js +6014 -0
- package/dist/chunk-TVHRMRD3.js.map +1 -0
- package/dist/chunk-TYJLR32W.js +128 -0
- package/dist/chunk-TYJLR32W.js.map +1 -0
- package/dist/chunk-UFURYGD3.js +20 -0
- package/dist/chunk-UFURYGD3.js.map +1 -0
- package/dist/chunk-UTFN6UJS.js +253 -0
- package/dist/chunk-UTFN6UJS.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-WFWCZEMS.js +92 -0
- package/dist/chunk-WFWCZEMS.js.map +1 -0
- package/dist/chunk-WK4J2CHH.js +430 -0
- package/dist/chunk-WK4J2CHH.js.map +1 -0
- package/dist/chunk-XA57SX4T.js +115 -0
- package/dist/chunk-XA57SX4T.js.map +1 -0
- package/dist/chunk-Y4CXDA3I.js +181 -0
- package/dist/chunk-Y4CXDA3I.js.map +1 -0
- package/dist/chunk-YA4QQKKE.js +51 -0
- package/dist/chunk-YA4QQKKE.js.map +1 -0
- package/dist/chunk-YBVA7GPW.js +27 -0
- package/dist/chunk-YBVA7GPW.js.map +1 -0
- package/dist/chunk-YU2VGX5R.js +4205 -0
- package/dist/chunk-YU2VGX5R.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-UPA2GUZV.js +15 -0
- package/dist/copy-local-skills-UPA2GUZV.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-SB4XAOVB.js +16 -0
- package/dist/load-agent-defs-SB4XAOVB.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-U4ZY2GDX.js +20 -0
- package/dist/recompile-project-agents-U4ZY2GDX.js.map +1 -0
- package/dist/source-loader-5UNRU7EZ.js +20 -0
- package/dist/source-loader-5UNRU7EZ.js.map +1 -0
- package/dist/source-manager-3O54SIIB.js +18 -0
- package/dist/source-manager-3O54SIIB.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 +130 -12
- 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,349 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
INFO_MESSAGES,
|
|
4
|
+
STATUS_MESSAGES
|
|
5
|
+
} from "../../chunk-GYG5SE2D.js";
|
|
6
|
+
import {
|
|
7
|
+
BaseCommand,
|
|
8
|
+
EXIT_CODES
|
|
9
|
+
} from "../../chunk-7QIHKQL5.js";
|
|
10
|
+
import "../../chunk-SYUOXSPU.js";
|
|
11
|
+
import "../../chunk-P3PN5SVI.js";
|
|
12
|
+
import {
|
|
13
|
+
IMPORT_DEFAULTS,
|
|
14
|
+
computeFileHash,
|
|
15
|
+
fetchFromSource,
|
|
16
|
+
getCurrentDate,
|
|
17
|
+
stripYamlSchemaComment,
|
|
18
|
+
toTitleCase,
|
|
19
|
+
writeMetadataYaml
|
|
20
|
+
} from "../../chunk-TVHRMRD3.js";
|
|
21
|
+
import {
|
|
22
|
+
copy,
|
|
23
|
+
directoryExists,
|
|
24
|
+
ensureDir,
|
|
25
|
+
fileExists,
|
|
26
|
+
getErrorMessage,
|
|
27
|
+
importedSkillMetadataSchema,
|
|
28
|
+
listDirectories,
|
|
29
|
+
readFile,
|
|
30
|
+
warn
|
|
31
|
+
} from "../../chunk-3LIU2ZEF.js";
|
|
32
|
+
import "../../chunk-DG2NGZ7S.js";
|
|
33
|
+
import "../../chunk-VEP23B5W.js";
|
|
34
|
+
import {
|
|
35
|
+
DEFAULT_SKILLS_SUBDIR,
|
|
36
|
+
GITHUB_SOURCE,
|
|
37
|
+
LOCAL_SKILLS_PATH,
|
|
38
|
+
STANDARD_FILES
|
|
39
|
+
} from "../../chunk-O5ASLZ2K.js";
|
|
40
|
+
import "../../chunk-YU2VGX5R.js";
|
|
41
|
+
import {
|
|
42
|
+
init_esm_shims
|
|
43
|
+
} from "../../chunk-P56WJ5FA.js";
|
|
44
|
+
|
|
45
|
+
// src/cli/commands/import/skill.ts
|
|
46
|
+
init_esm_shims();
|
|
47
|
+
import { Args, Flags } from "@oclif/core";
|
|
48
|
+
import path from "path";
|
|
49
|
+
import { parse as parseYaml } from "yaml";
|
|
50
|
+
var ImportSkill = class _ImportSkill extends BaseCommand {
|
|
51
|
+
static summary = "Import a skill from a third-party GitHub repository";
|
|
52
|
+
static description = "Download and import skills from external GitHub repositories into your local .claude/skills/ directory. Supports importing specific skills or listing available skills.";
|
|
53
|
+
static examples = [
|
|
54
|
+
{
|
|
55
|
+
description: "List available skills from a repository",
|
|
56
|
+
command: "<%= config.bin %> import skill github:vercel-labs/agent-skills --list"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
description: "Import a specific skill",
|
|
60
|
+
command: "<%= config.bin %> import skill github:vercel-labs/agent-skills --skill react-best-practices"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
description: "Import all skills from a repository",
|
|
64
|
+
command: "<%= config.bin %> import skill github:vercel-labs/agent-skills --all"
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
static args = {
|
|
68
|
+
source: Args.string({
|
|
69
|
+
description: "GitHub repository source (github:owner/repo, https://github.com/owner/repo, or owner/repo)",
|
|
70
|
+
required: true
|
|
71
|
+
})
|
|
72
|
+
};
|
|
73
|
+
// Override parent baseFlags to drop --source (positional source arg IS the source)
|
|
74
|
+
static baseFlags = {};
|
|
75
|
+
static flags = {
|
|
76
|
+
skill: Flags.string({
|
|
77
|
+
char: "n",
|
|
78
|
+
description: "Name of the specific skill to import",
|
|
79
|
+
required: false
|
|
80
|
+
}),
|
|
81
|
+
all: Flags.boolean({
|
|
82
|
+
char: "a",
|
|
83
|
+
description: "Import all skills from the repository",
|
|
84
|
+
default: false
|
|
85
|
+
}),
|
|
86
|
+
list: Flags.boolean({
|
|
87
|
+
char: "l",
|
|
88
|
+
description: "List available skills without importing",
|
|
89
|
+
default: false
|
|
90
|
+
}),
|
|
91
|
+
force: Flags.boolean({
|
|
92
|
+
char: "f",
|
|
93
|
+
description: "Overwrite existing skills",
|
|
94
|
+
default: false
|
|
95
|
+
})
|
|
96
|
+
};
|
|
97
|
+
async run() {
|
|
98
|
+
const { args, flags } = await this.parse(_ImportSkill);
|
|
99
|
+
const projectDir = process.cwd();
|
|
100
|
+
this.printHeader();
|
|
101
|
+
this.validateFlags(flags);
|
|
102
|
+
const { gigetSource, displaySource } = parseGitHubSource(args.source);
|
|
103
|
+
this.log(`Source: ${displaySource}`);
|
|
104
|
+
const repoPath = await this.fetchRepository(gigetSource, args.source);
|
|
105
|
+
const skillsDir = this.resolveSkillsDir(repoPath);
|
|
106
|
+
const availableSkills = await this.discoverAndValidate(skillsDir);
|
|
107
|
+
if (flags.list) {
|
|
108
|
+
this.listAvailableSkills(availableSkills);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const skillsToImport = this.resolveSkillsToImport(flags, availableSkills);
|
|
112
|
+
await this.importSkills(skillsToImport, skillsDir, projectDir, displaySource, flags.force);
|
|
113
|
+
}
|
|
114
|
+
printHeader() {
|
|
115
|
+
this.log("");
|
|
116
|
+
this.log("Import Third-Party Skill");
|
|
117
|
+
this.log("");
|
|
118
|
+
}
|
|
119
|
+
validateFlags(flags) {
|
|
120
|
+
if (!flags.list && !flags.skill && !flags.all) {
|
|
121
|
+
this.error("Please specify --skill <name>, --all, or --list to list available skills", {
|
|
122
|
+
exit: EXIT_CODES.INVALID_ARGS
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (flags.skill && flags.all) {
|
|
126
|
+
this.error("Cannot use --skill and --all together", {
|
|
127
|
+
exit: EXIT_CODES.INVALID_ARGS
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async fetchRepository(gigetSource, sourceArg) {
|
|
132
|
+
this.log(STATUS_MESSAGES.FETCHING_REPOSITORY);
|
|
133
|
+
try {
|
|
134
|
+
const result = await fetchSkillSource({ gigetSource });
|
|
135
|
+
this.log(result.fromCache ? "Using cached source" : "Downloaded fresh copy");
|
|
136
|
+
return result.path;
|
|
137
|
+
} catch (error) {
|
|
138
|
+
this.error(`Failed to fetch ${sourceArg}: ${getErrorMessage(error)}`, {
|
|
139
|
+
exit: EXIT_CODES.NETWORK_ERROR
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
resolveSkillsDir(repoPath) {
|
|
144
|
+
return path.resolve(path.join(repoPath, DEFAULT_SKILLS_SUBDIR));
|
|
145
|
+
}
|
|
146
|
+
async discoverAndValidate(skillsDir) {
|
|
147
|
+
if (!await directoryExists(skillsDir)) {
|
|
148
|
+
this.error(
|
|
149
|
+
`Skills directory not found: ${DEFAULT_SKILLS_SUBDIR}
|
|
150
|
+
The repository doesn't have a '${DEFAULT_SKILLS_SUBDIR}' directory.`,
|
|
151
|
+
{ exit: EXIT_CODES.INVALID_ARGS }
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
const availableSkills = await discoverValidSkills(skillsDir);
|
|
155
|
+
if (availableSkills.length === 0) {
|
|
156
|
+
this.error(
|
|
157
|
+
`No valid skills found in ${DEFAULT_SKILLS_SUBDIR}/
|
|
158
|
+
Skills must have a SKILL.md file.`,
|
|
159
|
+
{ exit: EXIT_CODES.ERROR }
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
return availableSkills;
|
|
163
|
+
}
|
|
164
|
+
listAvailableSkills(skills) {
|
|
165
|
+
this.log("");
|
|
166
|
+
this.log(`Available skills (${skills.length}):`);
|
|
167
|
+
this.log("");
|
|
168
|
+
for (const skill of skills) {
|
|
169
|
+
this.log(` - ${skill}`);
|
|
170
|
+
}
|
|
171
|
+
this.log("");
|
|
172
|
+
this.log("Use --skill <name> to import a specific skill, or --all to import all.");
|
|
173
|
+
}
|
|
174
|
+
resolveSkillsToImport(flags, availableSkills) {
|
|
175
|
+
if (flags.all) {
|
|
176
|
+
return availableSkills;
|
|
177
|
+
}
|
|
178
|
+
if (flags.skill) {
|
|
179
|
+
if (!availableSkills.includes(flags.skill)) {
|
|
180
|
+
this.error(
|
|
181
|
+
`Skill '${flags.skill}' not found in repository.
|
|
182
|
+
Available skills: ${availableSkills.join(", ")}
|
|
183
|
+
Use --list to see all available skills.`,
|
|
184
|
+
{ exit: EXIT_CODES.INVALID_ARGS }
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
return [flags.skill];
|
|
188
|
+
}
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
async importSkills(skillsToImport, skillsDir, projectDir, displaySource, force) {
|
|
192
|
+
const destDir = path.join(projectDir, LOCAL_SKILLS_PATH);
|
|
193
|
+
this.log("");
|
|
194
|
+
this.log(`Importing ${skillsToImport.length} skill(s)...`);
|
|
195
|
+
let imported = 0;
|
|
196
|
+
let skipped = 0;
|
|
197
|
+
for (const skillName of skillsToImport) {
|
|
198
|
+
const sourcePath = path.join(skillsDir, skillName);
|
|
199
|
+
const destPath = path.join(destDir, skillName);
|
|
200
|
+
if (await directoryExists(destPath)) {
|
|
201
|
+
if (!force) {
|
|
202
|
+
this.warn(`Skipping '${skillName}': already exists. Use --force to overwrite.`);
|
|
203
|
+
skipped++;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
await importSkillFromSource({ sourcePath, destPath, skillName, displaySource });
|
|
209
|
+
this.logSuccess(`Imported: ${skillName}`);
|
|
210
|
+
imported++;
|
|
211
|
+
} catch (error) {
|
|
212
|
+
this.warn(`Failed to import '${skillName}': ${getErrorMessage(error)}`);
|
|
213
|
+
skipped++;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
this.log("");
|
|
217
|
+
this.logSuccess(`Import complete: ${imported} imported, ${skipped} skipped`);
|
|
218
|
+
this.log(`Skills location: ${destDir}`);
|
|
219
|
+
this.log("");
|
|
220
|
+
this.log(INFO_MESSAGES.RUN_COMPILE);
|
|
221
|
+
this.log("");
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
function parseGitHubSource(source) {
|
|
225
|
+
if (source.startsWith(GITHUB_SOURCE.HTTPS_PREFIX)) {
|
|
226
|
+
const path2 = source.replace(GITHUB_SOURCE.HTTPS_PREFIX, "");
|
|
227
|
+
return {
|
|
228
|
+
gigetSource: `${GITHUB_SOURCE.GITHUB_PREFIX}${path2}`,
|
|
229
|
+
displaySource: source
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
if (source.startsWith(GITHUB_SOURCE.GITHUB_PREFIX) || source.startsWith(GITHUB_SOURCE.GH_PREFIX)) {
|
|
233
|
+
const normalized = source.startsWith(GITHUB_SOURCE.GH_PREFIX) ? GITHUB_SOURCE.GITHUB_PREFIX + source.slice(GITHUB_SOURCE.GH_PREFIX.length) : source;
|
|
234
|
+
return {
|
|
235
|
+
gigetSource: normalized,
|
|
236
|
+
displaySource: `${GITHUB_SOURCE.HTTPS_PREFIX}${normalized.replace(GITHUB_SOURCE.GITHUB_PREFIX, "")}`
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
if (source.includes("/") && !source.includes(":")) {
|
|
240
|
+
return {
|
|
241
|
+
gigetSource: `${GITHUB_SOURCE.GITHUB_PREFIX}${source}`,
|
|
242
|
+
displaySource: `${GITHUB_SOURCE.HTTPS_PREFIX}${source}`
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
gigetSource: source,
|
|
247
|
+
displaySource: source
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
async function fetchSkillSource(options) {
|
|
251
|
+
const result = await fetchFromSource(options.gigetSource);
|
|
252
|
+
return { path: result.path, fromCache: result.fromCache };
|
|
253
|
+
}
|
|
254
|
+
async function discoverValidSkills(skillsDir) {
|
|
255
|
+
const skillDirs = await listDirectories(skillsDir);
|
|
256
|
+
const checks = await Promise.all(
|
|
257
|
+
skillDirs.map(async (skillDir) => ({
|
|
258
|
+
skillDir,
|
|
259
|
+
hasSkillMd: await fileExists(path.join(skillsDir, skillDir, STANDARD_FILES.SKILL_MD))
|
|
260
|
+
}))
|
|
261
|
+
);
|
|
262
|
+
return checks.filter((c) => c.hasSkillMd).map((c) => c.skillDir).sort();
|
|
263
|
+
}
|
|
264
|
+
async function importSkillFromSource(options) {
|
|
265
|
+
const { sourcePath, destPath, skillName, displaySource } = options;
|
|
266
|
+
const skillMdPath = path.join(sourcePath, STANDARD_FILES.SKILL_MD);
|
|
267
|
+
if (!await fileExists(skillMdPath)) {
|
|
268
|
+
throw new Error(
|
|
269
|
+
`Missing required SKILL.md file at ${skillMdPath}
|
|
270
|
+
Every skill must have a SKILL.md file containing the skill's prompt content.
|
|
271
|
+
Create one with:
|
|
272
|
+
echo "# ${skillName}" > ${path.join(sourcePath, STANDARD_FILES.SKILL_MD)}`
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
const contentHash = await computeFileHash(skillMdPath);
|
|
276
|
+
await ensureDir(path.dirname(destPath));
|
|
277
|
+
await copy(sourcePath, destPath);
|
|
278
|
+
await injectImportedForkedFromMetadata(destPath, skillName, displaySource, contentHash);
|
|
279
|
+
}
|
|
280
|
+
async function injectImportedForkedFromMetadata(destPath, skillName, source, contentHash) {
|
|
281
|
+
const forkedFrom = {
|
|
282
|
+
source,
|
|
283
|
+
skillName,
|
|
284
|
+
contentHash,
|
|
285
|
+
date: getCurrentDate()
|
|
286
|
+
};
|
|
287
|
+
const yamlPath = path.join(destPath, STANDARD_FILES.METADATA_YAML);
|
|
288
|
+
const jsonPath = path.join(destPath, STANDARD_FILES.METADATA_JSON);
|
|
289
|
+
if (await fileExists(yamlPath)) {
|
|
290
|
+
return mergeForkedFromIntoYaml(yamlPath, forkedFrom);
|
|
291
|
+
}
|
|
292
|
+
if (await fileExists(jsonPath)) {
|
|
293
|
+
return convertJsonToYamlWithForkedFrom(jsonPath, yamlPath, forkedFrom);
|
|
294
|
+
}
|
|
295
|
+
return createMinimalMetadata(yamlPath, skillName, forkedFrom);
|
|
296
|
+
}
|
|
297
|
+
async function mergeForkedFromIntoYaml(yamlPath, forkedFrom) {
|
|
298
|
+
const rawContent = await readFile(yamlPath);
|
|
299
|
+
const { schemaComment, yamlContent } = stripYamlSchemaComment(rawContent);
|
|
300
|
+
const raw = parseYaml(yamlContent);
|
|
301
|
+
const parseResult = importedSkillMetadataSchema.safeParse(raw);
|
|
302
|
+
if (!parseResult.success) {
|
|
303
|
+
warn(
|
|
304
|
+
`Malformed metadata.yaml at ${yamlPath} \u2014 existing fields may be lost
|
|
305
|
+
Validation errors: ${parseResult.error.issues.map((i) => i.message).join(", ")}
|
|
306
|
+
Expected fields: displayName (string), cliDescription (string), category (string)
|
|
307
|
+
Validate your YAML syntax at https://yamllint.com`
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
const metadata = {
|
|
311
|
+
...parseResult.success ? parseResult.data : {},
|
|
312
|
+
forkedFrom
|
|
313
|
+
};
|
|
314
|
+
await writeMetadataYaml(yamlPath, metadata, schemaComment);
|
|
315
|
+
}
|
|
316
|
+
async function convertJsonToYamlWithForkedFrom(jsonPath, yamlPath, forkedFrom) {
|
|
317
|
+
const rawContent = await readFile(jsonPath);
|
|
318
|
+
let jsonParsed;
|
|
319
|
+
try {
|
|
320
|
+
jsonParsed = JSON.parse(rawContent);
|
|
321
|
+
} catch {
|
|
322
|
+
warn(
|
|
323
|
+
`Malformed JSON in ${jsonPath} \u2014 skipping metadata injection
|
|
324
|
+
Common issues: trailing commas, unquoted keys, single quotes instead of double quotes
|
|
325
|
+
Validate your JSON at https://jsonlint.com`
|
|
326
|
+
);
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
const jsonResult = importedSkillMetadataSchema.safeParse(jsonParsed);
|
|
330
|
+
const metadata = {
|
|
331
|
+
...jsonResult.success ? jsonResult.data : {},
|
|
332
|
+
forkedFrom
|
|
333
|
+
};
|
|
334
|
+
await writeMetadataYaml(yamlPath, metadata);
|
|
335
|
+
}
|
|
336
|
+
async function createMinimalMetadata(yamlPath, skillName, forkedFrom) {
|
|
337
|
+
const minimalMetadata = {
|
|
338
|
+
displayName: toTitleCase(skillName),
|
|
339
|
+
cliDescription: "Imported from third-party repository",
|
|
340
|
+
category: IMPORT_DEFAULTS.CATEGORY,
|
|
341
|
+
author: IMPORT_DEFAULTS.AUTHOR,
|
|
342
|
+
forkedFrom
|
|
343
|
+
};
|
|
344
|
+
await writeMetadataYaml(yamlPath, minimalMetadata);
|
|
345
|
+
}
|
|
346
|
+
export {
|
|
347
|
+
ImportSkill as default
|
|
348
|
+
};
|
|
349
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/import/skill.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { BaseCommand } from \"../../base-command.js\";\nimport { getErrorMessage } from \"../../utils/errors.js\";\nimport { EXIT_CODES } from \"../../lib/exit-codes.js\";\nimport { fetchFromSource } from \"../../lib/loading/index.js\";\nimport { importedSkillMetadataSchema } from \"../../lib/schemas.js\";\nimport { writeMetadataYaml } from \"../../lib/skills/skill-metadata.js\";\nimport { toTitleCase } from \"../../utils/string.js\";\nimport { getCurrentDate, computeFileHash } from \"../../lib/versioning.js\";\nimport {\n copy,\n directoryExists,\n fileExists,\n listDirectories,\n readFile,\n ensureDir,\n} from \"../../utils/fs.js\";\nimport { warn } from \"../../utils/logger.js\";\nimport {\n DEFAULT_SKILLS_SUBDIR,\n GITHUB_SOURCE,\n LOCAL_SKILLS_PATH,\n STANDARD_FILES,\n} from \"../../consts.js\";\nimport { stripYamlSchemaComment } from \"../../utils/yaml-schema.js\";\nimport { IMPORT_DEFAULTS } from \"../../lib/metadata-keys.js\";\nimport { STATUS_MESSAGES, INFO_MESSAGES } from \"../../utils/messages.js\";\n\nexport default class ImportSkill extends BaseCommand {\n static summary = \"Import a skill from a third-party GitHub repository\";\n static description =\n \"Download and import skills from external GitHub repositories into your local \" +\n \".claude/skills/ directory. Supports importing specific skills or listing available skills.\";\n\n static examples = [\n {\n description: \"List available skills from a repository\",\n command: \"<%= config.bin %> import skill github:vercel-labs/agent-skills --list\",\n },\n {\n description: \"Import a specific skill\",\n command:\n \"<%= config.bin %> import skill github:vercel-labs/agent-skills --skill react-best-practices\",\n },\n {\n description: \"Import all skills from a repository\",\n command: \"<%= config.bin %> import skill github:vercel-labs/agent-skills --all\",\n },\n ];\n\n static args = {\n source: Args.string({\n description:\n \"GitHub repository source (github:owner/repo, https://github.com/owner/repo, or owner/repo)\",\n required: true,\n }),\n };\n\n // Override parent baseFlags to drop --source (positional source arg IS the source)\n static baseFlags = {} as (typeof BaseCommand)[\"baseFlags\"];\n\n static flags = {\n skill: Flags.string({\n char: \"n\",\n description: \"Name of the specific skill to import\",\n required: false,\n }),\n all: Flags.boolean({\n char: \"a\",\n description: \"Import all skills from the repository\",\n default: false,\n }),\n list: Flags.boolean({\n char: \"l\",\n description: \"List available skills without importing\",\n default: false,\n }),\n force: Flags.boolean({\n char: \"f\",\n description: \"Overwrite existing skills\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(ImportSkill);\n const projectDir = process.cwd();\n\n this.printHeader();\n this.validateFlags(flags);\n\n const { gigetSource, displaySource } = parseGitHubSource(args.source);\n this.log(`Source: ${displaySource}`);\n\n const repoPath = await this.fetchRepository(gigetSource, args.source);\n const skillsDir = this.resolveSkillsDir(repoPath);\n const availableSkills = await this.discoverAndValidate(skillsDir);\n\n if (flags.list) {\n this.listAvailableSkills(availableSkills);\n return;\n }\n\n const skillsToImport = this.resolveSkillsToImport(flags, availableSkills);\n await this.importSkills(skillsToImport, skillsDir, projectDir, displaySource, flags.force);\n }\n\n private printHeader(): void {\n this.log(\"\");\n this.log(\"Import Third-Party Skill\");\n this.log(\"\");\n }\n\n private validateFlags(flags: { list: boolean; skill?: string; all: boolean }): void {\n if (!flags.list && !flags.skill && !flags.all) {\n this.error(\"Please specify --skill <name>, --all, or --list to list available skills\", {\n exit: EXIT_CODES.INVALID_ARGS,\n });\n }\n\n if (flags.skill && flags.all) {\n this.error(\"Cannot use --skill and --all together\", {\n exit: EXIT_CODES.INVALID_ARGS,\n });\n }\n }\n\n private async fetchRepository(gigetSource: string, sourceArg: string): Promise<string> {\n this.log(STATUS_MESSAGES.FETCHING_REPOSITORY);\n\n try {\n const result = await fetchSkillSource({ gigetSource });\n this.log(result.fromCache ? \"Using cached source\" : \"Downloaded fresh copy\");\n return result.path;\n } catch (error) {\n this.error(`Failed to fetch ${sourceArg}: ${getErrorMessage(error)}`, {\n exit: EXIT_CODES.NETWORK_ERROR,\n });\n }\n }\n\n private resolveSkillsDir(repoPath: string): string {\n return path.resolve(path.join(repoPath, DEFAULT_SKILLS_SUBDIR));\n }\n\n private async discoverAndValidate(skillsDir: string): Promise<string[]> {\n if (!(await directoryExists(skillsDir))) {\n this.error(\n `Skills directory not found: ${DEFAULT_SKILLS_SUBDIR}\\n` +\n `The repository doesn't have a '${DEFAULT_SKILLS_SUBDIR}' directory.`,\n { exit: EXIT_CODES.INVALID_ARGS },\n );\n }\n\n const availableSkills = await discoverValidSkills(skillsDir);\n\n if (availableSkills.length === 0) {\n this.error(\n `No valid skills found in ${DEFAULT_SKILLS_SUBDIR}/\\nSkills must have a SKILL.md file.`,\n { exit: EXIT_CODES.ERROR },\n );\n }\n\n return availableSkills;\n }\n\n private listAvailableSkills(skills: string[]): void {\n this.log(\"\");\n this.log(`Available skills (${skills.length}):`);\n this.log(\"\");\n for (const skill of skills) {\n this.log(` - ${skill}`);\n }\n this.log(\"\");\n this.log(\"Use --skill <name> to import a specific skill, or --all to import all.\");\n }\n\n private resolveSkillsToImport(\n flags: { all: boolean; skill?: string },\n availableSkills: string[],\n ): string[] {\n if (flags.all) {\n return availableSkills;\n }\n\n if (flags.skill) {\n if (!availableSkills.includes(flags.skill)) {\n this.error(\n `Skill '${flags.skill}' not found in repository.\\n` +\n `Available skills: ${availableSkills.join(\", \")}\\n` +\n `Use --list to see all available skills.`,\n { exit: EXIT_CODES.INVALID_ARGS },\n );\n }\n return [flags.skill];\n }\n\n return [];\n }\n\n private async importSkills(\n skillsToImport: string[],\n skillsDir: string,\n projectDir: string,\n displaySource: string,\n force: boolean,\n ): Promise<void> {\n const destDir = path.join(projectDir, LOCAL_SKILLS_PATH);\n\n this.log(\"\");\n this.log(`Importing ${skillsToImport.length} skill(s)...`);\n\n let imported = 0;\n let skipped = 0;\n\n for (const skillName of skillsToImport) {\n const sourcePath = path.join(skillsDir, skillName);\n const destPath = path.join(destDir, skillName);\n\n if (await directoryExists(destPath)) {\n if (!force) {\n this.warn(`Skipping '${skillName}': already exists. Use --force to overwrite.`);\n skipped++;\n continue;\n }\n }\n\n try {\n await importSkillFromSource({ sourcePath, destPath, skillName, displaySource });\n this.logSuccess(`Imported: ${skillName}`);\n imported++;\n } catch (error) {\n this.warn(`Failed to import '${skillName}': ${getErrorMessage(error)}`);\n skipped++;\n }\n }\n\n this.log(\"\");\n this.logSuccess(`Import complete: ${imported} imported, ${skipped} skipped`);\n this.log(`Skills location: ${destDir}`);\n this.log(\"\");\n this.log(INFO_MESSAGES.RUN_COMPILE);\n this.log(\"\");\n }\n}\n\ntype ImportedForkedFromMetadata = {\n source: string;\n skillName: string;\n contentHash: string;\n date: string;\n};\n\ntype SkillMetadata = {\n forkedFrom?: ImportedForkedFromMetadata;\n [key: string]: unknown;\n};\n\ntype ParsedGitHubSource = {\n gigetSource: string;\n displaySource: string;\n};\n\ntype FetchSourceOptions = {\n gigetSource: string;\n};\n\ntype FetchedSource = {\n path: string;\n fromCache: boolean;\n};\n\ntype ImportSkillOptions = {\n sourcePath: string;\n destPath: string;\n skillName: string;\n displaySource: string;\n};\n\n/**\n * Parses various GitHub URL formats into a normalized giget source string\n * and a human-readable display URL.\n *\n * Supports: `https://github.com/owner/repo`, `github:owner/repo`,\n * `gh:owner/repo`, and bare `owner/repo` formats.\n */\nfunction parseGitHubSource(source: string): ParsedGitHubSource {\n if (source.startsWith(GITHUB_SOURCE.HTTPS_PREFIX)) {\n const path = source.replace(GITHUB_SOURCE.HTTPS_PREFIX, \"\");\n return {\n gigetSource: `${GITHUB_SOURCE.GITHUB_PREFIX}${path}`,\n displaySource: source,\n };\n }\n\n if (\n source.startsWith(GITHUB_SOURCE.GITHUB_PREFIX) ||\n source.startsWith(GITHUB_SOURCE.GH_PREFIX)\n ) {\n const normalized = source.startsWith(GITHUB_SOURCE.GH_PREFIX)\n ? GITHUB_SOURCE.GITHUB_PREFIX + source.slice(GITHUB_SOURCE.GH_PREFIX.length)\n : source;\n return {\n gigetSource: normalized,\n displaySource: `${GITHUB_SOURCE.HTTPS_PREFIX}${normalized.replace(GITHUB_SOURCE.GITHUB_PREFIX, \"\")}`,\n };\n }\n\n if (source.includes(\"/\") && !source.includes(\":\")) {\n return {\n gigetSource: `${GITHUB_SOURCE.GITHUB_PREFIX}${source}`,\n displaySource: `${GITHUB_SOURCE.HTTPS_PREFIX}${source}`,\n };\n }\n\n return {\n gigetSource: source,\n displaySource: source,\n };\n}\n\n/**\n * Fetches a source repository using giget. Wraps `fetchFromSource` from the\n * loading layer.\n */\nasync function fetchSkillSource(options: FetchSourceOptions): Promise<FetchedSource> {\n const result = await fetchFromSource(options.gigetSource);\n return { path: result.path, fromCache: result.fromCache };\n}\n\n/**\n * Discovers valid skill directories within a source path by checking\n * for the presence of SKILL.md files.\n *\n * @returns Sorted list of directory names that contain a SKILL.md file.\n */\nasync function discoverValidSkills(skillsDir: string): Promise<string[]> {\n const skillDirs = await listDirectories(skillsDir);\n const checks = await Promise.all(\n skillDirs.map(async (skillDir) => ({\n skillDir,\n hasSkillMd: await fileExists(path.join(skillsDir, skillDir, STANDARD_FILES.SKILL_MD)),\n })),\n );\n return checks\n .filter((c) => c.hasSkillMd)\n .map((c) => c.skillDir)\n .sort();\n}\n\n/**\n * Imports a single skill from a source directory into the destination.\n *\n * Validates that the source skill has a SKILL.md file, copies the directory,\n * and injects `forkedFrom` metadata into the destination's metadata.yaml.\n *\n * @throws {Error} If the source skill is missing a SKILL.md file.\n */\nasync function importSkillFromSource(options: ImportSkillOptions): Promise<void> {\n const { sourcePath, destPath, skillName, displaySource } = options;\n const skillMdPath = path.join(sourcePath, STANDARD_FILES.SKILL_MD);\n\n if (!(await fileExists(skillMdPath))) {\n throw new Error(\n `Missing required SKILL.md file at ${skillMdPath}\\n` +\n `Every skill must have a SKILL.md file containing the skill's prompt content.\\n` +\n `Create one with:\\n` +\n ` echo \"# ${skillName}\" > ${path.join(sourcePath, STANDARD_FILES.SKILL_MD)}`,\n );\n }\n\n const contentHash = await computeFileHash(skillMdPath);\n\n await ensureDir(path.dirname(destPath));\n await copy(sourcePath, destPath);\n\n await injectImportedForkedFromMetadata(destPath, skillName, displaySource, contentHash);\n}\n\n/**\n * Injects `forkedFrom` metadata into a third-party imported skill's metadata.yaml.\n *\n * Handles three cases:\n * 1. Existing metadata.yaml -- preserves fields, adds/overwrites forkedFrom\n * 2. Existing metadata.json -- converts to YAML, adds forkedFrom\n * 3. No metadata file -- creates minimal metadata.yaml with forkedFrom\n *\n * Different from `injectForkedFromMetadata` in `skill-metadata.ts` which tracks\n * internal marketplace fork lineage using `skillId`. This function tracks\n * third-party imports using `source` + `skillName`.\n */\nasync function injectImportedForkedFromMetadata(\n destPath: string,\n skillName: string,\n source: string,\n contentHash: string,\n): Promise<void> {\n const forkedFrom: ImportedForkedFromMetadata = {\n source,\n skillName,\n contentHash,\n date: getCurrentDate(),\n };\n\n const yamlPath = path.join(destPath, STANDARD_FILES.METADATA_YAML);\n const jsonPath = path.join(destPath, STANDARD_FILES.METADATA_JSON);\n\n if (await fileExists(yamlPath)) {\n return mergeForkedFromIntoYaml(yamlPath, forkedFrom);\n }\n if (await fileExists(jsonPath)) {\n return convertJsonToYamlWithForkedFrom(jsonPath, yamlPath, forkedFrom);\n }\n return createMinimalMetadata(yamlPath, skillName, forkedFrom);\n}\n\nasync function mergeForkedFromIntoYaml(\n yamlPath: string,\n forkedFrom: ImportedForkedFromMetadata,\n): Promise<void> {\n const rawContent = await readFile(yamlPath);\n const { schemaComment, yamlContent } = stripYamlSchemaComment(rawContent);\n\n const raw = parseYaml(yamlContent);\n const parseResult = importedSkillMetadataSchema.safeParse(raw);\n if (!parseResult.success) {\n warn(\n `Malformed metadata.yaml at ${yamlPath} — existing fields may be lost\\n` +\n ` Validation errors: ${parseResult.error.issues.map((i) => i.message).join(\", \")}\\n` +\n ` Expected fields: displayName (string), cliDescription (string), category (string)\\n` +\n ` Validate your YAML syntax at https://yamllint.com`,\n );\n }\n const metadata: SkillMetadata = {\n ...(parseResult.success ? parseResult.data : {}),\n forkedFrom,\n };\n\n await writeMetadataYaml(yamlPath, metadata, schemaComment);\n}\n\nasync function convertJsonToYamlWithForkedFrom(\n jsonPath: string,\n yamlPath: string,\n forkedFrom: ImportedForkedFromMetadata,\n): Promise<void> {\n const rawContent = await readFile(jsonPath);\n let jsonParsed: unknown;\n try {\n jsonParsed = JSON.parse(rawContent);\n } catch {\n warn(\n `Malformed JSON in ${jsonPath} — skipping metadata injection\\n` +\n ` Common issues: trailing commas, unquoted keys, single quotes instead of double quotes\\n` +\n ` Validate your JSON at https://jsonlint.com`,\n );\n return;\n }\n const jsonResult = importedSkillMetadataSchema.safeParse(jsonParsed);\n const metadata: SkillMetadata = {\n ...(jsonResult.success ? jsonResult.data : {}),\n forkedFrom,\n };\n\n await writeMetadataYaml(yamlPath, metadata);\n}\n\nasync function createMinimalMetadata(\n yamlPath: string,\n skillName: string,\n forkedFrom: ImportedForkedFromMetadata,\n): Promise<void> {\n const minimalMetadata: SkillMetadata = {\n displayName: toTitleCase(skillName),\n cliDescription: \"Imported from third-party repository\",\n category: IMPORT_DEFAULTS.CATEGORY,\n author: IMPORT_DEFAULTS.AUTHOR,\n forkedFrom,\n };\n\n await writeMetadataYaml(yamlPath, minimalMetadata);\n}\n"],"mappings":"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","names":["path"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
Init,
|
|
4
|
+
formatDashboardText,
|
|
5
|
+
getDashboardData,
|
|
6
|
+
runDashboardFlow,
|
|
7
|
+
showDashboard
|
|
8
|
+
} from "../chunk-QTFQEYDA.js";
|
|
9
|
+
import "../chunk-C55DN7GE.js";
|
|
10
|
+
import "../chunk-SI5FOARI.js";
|
|
11
|
+
import "../chunk-OZZGXBCN.js";
|
|
12
|
+
import "../chunk-EZ7STXUV.js";
|
|
13
|
+
import "../chunk-UTFN6UJS.js";
|
|
14
|
+
import "../chunk-EVXG3X6G.js";
|
|
15
|
+
import "../chunk-OJIESW5B.js";
|
|
16
|
+
import "../chunk-UFURYGD3.js";
|
|
17
|
+
import "../chunk-RBHYLCUB.js";
|
|
18
|
+
import "../chunk-LAXAQ3PZ.js";
|
|
19
|
+
import "../chunk-NM3EDGB5.js";
|
|
20
|
+
import "../chunk-NHCGC6DG.js";
|
|
21
|
+
import "../chunk-BNE4HHIH.js";
|
|
22
|
+
import "../chunk-TYJLR32W.js";
|
|
23
|
+
import "../chunk-IOJR5TOY.js";
|
|
24
|
+
import "../chunk-3YGUHWLR.js";
|
|
25
|
+
import "../chunk-QQLRX4KI.js";
|
|
26
|
+
import "../chunk-WK4J2CHH.js";
|
|
27
|
+
import "../chunk-NIKUMXE7.js";
|
|
28
|
+
import "../chunk-KOPEM3Q7.js";
|
|
29
|
+
import "../chunk-2RSNKBXC.js";
|
|
30
|
+
import "../chunk-DUVWGO6E.js";
|
|
31
|
+
import "../chunk-KIR7VYQD.js";
|
|
32
|
+
import "../chunk-6RBQBOBS.js";
|
|
33
|
+
import "../chunk-LYYXX2W5.js";
|
|
34
|
+
import "../chunk-SHHOMVWC.js";
|
|
35
|
+
import "../chunk-YA4QQKKE.js";
|
|
36
|
+
import "../chunk-XA57SX4T.js";
|
|
37
|
+
import "../chunk-FYPUUYSG.js";
|
|
38
|
+
import "../chunk-DAG2ULNF.js";
|
|
39
|
+
import "../chunk-VG2TVBFN.js";
|
|
40
|
+
import "../chunk-IHO75PMZ.js";
|
|
41
|
+
import "../chunk-GYG5SE2D.js";
|
|
42
|
+
import "../chunk-Y4CXDA3I.js";
|
|
43
|
+
import "../chunk-4R6PGHQQ.js";
|
|
44
|
+
import "../chunk-3XFUQ6OL.js";
|
|
45
|
+
import "../chunk-YBVA7GPW.js";
|
|
46
|
+
import "../chunk-NGLQ5W7U.js";
|
|
47
|
+
import "../chunk-5V2O6C3T.js";
|
|
48
|
+
import "../chunk-44LLPS2N.js";
|
|
49
|
+
import "../chunk-7QIHKQL5.js";
|
|
50
|
+
import "../chunk-SYUOXSPU.js";
|
|
51
|
+
import "../chunk-P3PN5SVI.js";
|
|
52
|
+
import "../chunk-TVHRMRD3.js";
|
|
53
|
+
import "../chunk-3LIU2ZEF.js";
|
|
54
|
+
import "../chunk-DG2NGZ7S.js";
|
|
55
|
+
import "../chunk-VEP23B5W.js";
|
|
56
|
+
import "../chunk-O5ASLZ2K.js";
|
|
57
|
+
import "../chunk-YU2VGX5R.js";
|
|
58
|
+
import "../chunk-P56WJ5FA.js";
|
|
59
|
+
export {
|
|
60
|
+
Init as default,
|
|
61
|
+
formatDashboardText,
|
|
62
|
+
getDashboardData,
|
|
63
|
+
runDashboardFlow,
|
|
64
|
+
showDashboard
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
SkillAgentSummary
|
|
4
|
+
} from "../chunk-5V2O6C3T.js";
|
|
5
|
+
import {
|
|
6
|
+
hydrateWizardStore
|
|
7
|
+
} from "../chunk-44LLPS2N.js";
|
|
8
|
+
import {
|
|
9
|
+
BaseCommand
|
|
10
|
+
} from "../chunk-7QIHKQL5.js";
|
|
11
|
+
import "../chunk-SYUOXSPU.js";
|
|
12
|
+
import "../chunk-P3PN5SVI.js";
|
|
13
|
+
import {
|
|
14
|
+
INSTALL_MODE_LABELS,
|
|
15
|
+
detectInstallation,
|
|
16
|
+
formatInstallationDisplay,
|
|
17
|
+
getInstallationInfo,
|
|
18
|
+
loadProjectConfig
|
|
19
|
+
} from "../chunk-TVHRMRD3.js";
|
|
20
|
+
import "../chunk-3LIU2ZEF.js";
|
|
21
|
+
import "../chunk-DG2NGZ7S.js";
|
|
22
|
+
import "../chunk-VEP23B5W.js";
|
|
23
|
+
import {
|
|
24
|
+
CLI_COLORS,
|
|
25
|
+
CLI_INVOKE_COMMAND,
|
|
26
|
+
DEFAULT_BRANDING
|
|
27
|
+
} from "../chunk-O5ASLZ2K.js";
|
|
28
|
+
import "../chunk-YU2VGX5R.js";
|
|
29
|
+
import {
|
|
30
|
+
init_esm_shims
|
|
31
|
+
} from "../chunk-P56WJ5FA.js";
|
|
32
|
+
|
|
33
|
+
// src/cli/commands/list.tsx
|
|
34
|
+
init_esm_shims();
|
|
35
|
+
import { useEffect } from "react";
|
|
36
|
+
import { render, Box, Text, useApp } from "ink";
|
|
37
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
38
|
+
var ListView = ({ mode, source, skillConfigs, agentConfigs }) => {
|
|
39
|
+
const { exit } = useApp();
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
const timer = setTimeout(() => exit(), 0);
|
|
42
|
+
return () => clearTimeout(timer);
|
|
43
|
+
}, [exit]);
|
|
44
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [
|
|
45
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
46
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", columnGap: 1, children: [
|
|
47
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.WARNING, bold: true, children: "Mode" }),
|
|
48
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.NEUTRAL, children: mode })
|
|
49
|
+
] }),
|
|
50
|
+
source && /* @__PURE__ */ jsxs(Box, { flexDirection: "row", columnGap: 1, children: [
|
|
51
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.WARNING, bold: true, children: "Source" }),
|
|
52
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.NEUTRAL, children: source })
|
|
53
|
+
] })
|
|
54
|
+
] }),
|
|
55
|
+
/* @__PURE__ */ jsx(SkillAgentSummary, { skillConfigs, agentConfigs })
|
|
56
|
+
] });
|
|
57
|
+
};
|
|
58
|
+
var List = class _List extends BaseCommand {
|
|
59
|
+
static summary = "Show installation information";
|
|
60
|
+
static description = `Display details about the ${DEFAULT_BRANDING.NAME} installation (local or plugin mode)`;
|
|
61
|
+
static aliases = ["ls"];
|
|
62
|
+
static examples = [
|
|
63
|
+
{
|
|
64
|
+
description: "Show current installation details",
|
|
65
|
+
command: "<%= config.bin %> <%= command.id %>"
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
static flags = {
|
|
69
|
+
...BaseCommand.baseFlags
|
|
70
|
+
};
|
|
71
|
+
async run() {
|
|
72
|
+
await this.parse(_List);
|
|
73
|
+
const installation = await detectInstallation();
|
|
74
|
+
if (!installation) {
|
|
75
|
+
this.log("No installation found.");
|
|
76
|
+
this.log(`Run '${CLI_INVOKE_COMMAND} init' to create one.`);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const loaded = await loadProjectConfig(installation.projectDir);
|
|
80
|
+
if (!loaded?.config || !process.stdin.isTTY) {
|
|
81
|
+
const info = await getInstallationInfo();
|
|
82
|
+
if (info) {
|
|
83
|
+
this.log("");
|
|
84
|
+
this.log(formatInstallationDisplay(info));
|
|
85
|
+
this.log("");
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const { config } = loaded;
|
|
90
|
+
const modeLabel = INSTALL_MODE_LABELS[installation.mode];
|
|
91
|
+
const activeSkills = config.skills.filter((s) => !s.excluded);
|
|
92
|
+
const activeAgents = config.agents.filter((a) => !a.excluded);
|
|
93
|
+
hydrateWizardStore({
|
|
94
|
+
installedSkillConfigs: activeSkills,
|
|
95
|
+
installedAgentConfigs: activeAgents
|
|
96
|
+
});
|
|
97
|
+
const { waitUntilExit, clear } = render(
|
|
98
|
+
/* @__PURE__ */ jsx(
|
|
99
|
+
ListView,
|
|
100
|
+
{
|
|
101
|
+
mode: modeLabel,
|
|
102
|
+
source: config.source,
|
|
103
|
+
skillConfigs: activeSkills,
|
|
104
|
+
agentConfigs: activeAgents
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
);
|
|
108
|
+
await waitUntilExit();
|
|
109
|
+
clear();
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
export {
|
|
113
|
+
List as default
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/list.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\n\nimport { render, Box, Text, useApp } from \"ink\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { CLI_INVOKE_COMMAND, CLI_COLORS, DEFAULT_BRANDING } from \"../consts.js\";\nimport { getInstallationInfo, formatInstallationDisplay } from \"../lib/plugins/index.js\";\nimport { detectInstallation, INSTALL_MODE_LABELS } from \"../lib/installation/installation.js\";\nimport { loadProjectConfig } from \"../lib/configuration/project-config.js\";\nimport { SkillAgentSummary } from \"../components/wizard/skill-agent-summary.js\";\nimport { hydrateWizardStore } from \"../stores/wizard-store.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../types/config.js\";\n\ntype ListViewProps = {\n mode: string;\n source?: string;\n skillConfigs: SkillConfig[];\n agentConfigs: AgentScopeConfig[];\n};\n\nconst ListView: React.FC<ListViewProps> = ({ mode, source, skillConfigs, agentConfigs }) => {\n const { exit } = useApp();\n\n useEffect(() => {\n const timer = setTimeout(() => exit(), 0);\n return () => clearTimeout(timer);\n }, [exit]);\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box flexDirection=\"row\" columnGap={1}>\n <Text color={CLI_COLORS.WARNING} bold>\n Mode\n </Text>\n <Text color={CLI_COLORS.NEUTRAL}>{mode}</Text>\n </Box>\n {source && (\n <Box flexDirection=\"row\" columnGap={1}>\n <Text color={CLI_COLORS.WARNING} bold>\n Source\n </Text>\n <Text color={CLI_COLORS.NEUTRAL}>{source}</Text>\n </Box>\n )}\n </Box>\n\n <SkillAgentSummary skillConfigs={skillConfigs} agentConfigs={agentConfigs} />\n </Box>\n );\n};\n\nexport default class List extends BaseCommand {\n static summary = \"Show installation information\";\n static description = `Display details about the ${DEFAULT_BRANDING.NAME} installation (local or plugin mode)`;\n static aliases = [\"ls\"];\n\n static examples = [\n {\n description: \"Show current installation details\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n };\n\n async run(): Promise<void> {\n await this.parse(List);\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.log(\"No installation found.\");\n this.log(`Run '${CLI_INVOKE_COMMAND} init' to create one.`);\n return;\n }\n\n const loaded = await loadProjectConfig(installation.projectDir);\n\n if (!loaded?.config || !process.stdin.isTTY) {\n const info = await getInstallationInfo();\n if (info) {\n this.log(\"\");\n this.log(formatInstallationDisplay(info));\n this.log(\"\");\n }\n return;\n }\n\n const { config } = loaded;\n const modeLabel = INSTALL_MODE_LABELS[installation.mode];\n const activeSkills = config.skills.filter((s) => !s.excluded);\n const activeAgents = config.agents.filter((a) => !a.excluded);\n\n hydrateWizardStore({\n installedSkillConfigs: activeSkills,\n installedAgentConfigs: activeAgents,\n });\n\n const { waitUntilExit, clear } = render(\n <ListView\n mode={modeLabel}\n source={config.source}\n skillConfigs={activeSkills}\n agentConfigs={activeAgents}\n />,\n );\n\n await waitUntilExit();\n clear();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,iBAAiB;AAEjC,SAAS,QAAQ,KAAK,MAAM,cAAc;AA6BlC,SACE,KADF;AAXR,IAAM,WAAoC,CAAC,EAAE,MAAM,QAAQ,cAAc,aAAa,MAAM;AAC1F,QAAM,EAAE,KAAK,IAAI,OAAO;AAExB,YAAU,MAAM;AACd,UAAM,QAAQ,WAAW,MAAM,KAAK,GAAG,CAAC;AACxC,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,IAAI,CAAC;AAET,SACE,qBAAC,OAAI,eAAc,UAAS,UAAU,GAAG,UAAU,GACjD;AAAA,yBAAC,OAAI,eAAc,UAAS,cAAc,GACxC;AAAA,2BAAC,OAAI,eAAc,OAAM,WAAW,GAClC;AAAA,4BAAC,QAAK,OAAO,WAAW,SAAS,MAAI,MAAC,kBAEtC;AAAA,QACA,oBAAC,QAAK,OAAO,WAAW,SAAU,gBAAK;AAAA,SACzC;AAAA,MACC,UACC,qBAAC,OAAI,eAAc,OAAM,WAAW,GAClC;AAAA,4BAAC,QAAK,OAAO,WAAW,SAAS,MAAI,MAAC,oBAEtC;AAAA,QACA,oBAAC,QAAK,OAAO,WAAW,SAAU,kBAAO;AAAA,SAC3C;AAAA,OAEJ;AAAA,IAEA,oBAAC,qBAAkB,cAA4B,cAA4B;AAAA,KAC7E;AAEJ;AAEA,IAAqB,OAArB,MAAqB,cAAa,YAAY;AAAA,EAC5C,OAAO,UAAU;AAAA,EACjB,OAAO,cAAc,6BAA6B,iBAAiB,IAAI;AAAA,EACvE,OAAO,UAAU,CAAC,IAAI;AAAA,EAEtB,OAAO,WAAW;AAAA,IAChB;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb,GAAG,YAAY;AAAA,EACjB;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,KAAK,MAAM,KAAI;AAErB,UAAM,eAAe,MAAM,mBAAmB;AAE9C,QAAI,CAAC,cAAc;AACjB,WAAK,IAAI,wBAAwB;AACjC,WAAK,IAAI,QAAQ,kBAAkB,uBAAuB;AAC1D;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,kBAAkB,aAAa,UAAU;AAE9D,QAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,MAAM,OAAO;AAC3C,YAAM,OAAO,MAAM,oBAAoB;AACvC,UAAI,MAAM;AACR,aAAK,IAAI,EAAE;AACX,aAAK,IAAI,0BAA0B,IAAI,CAAC;AACxC,aAAK,IAAI,EAAE;AAAA,MACb;AACA;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,YAAY,oBAAoB,aAAa,IAAI;AACvD,UAAM,eAAe,OAAO,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;AAC5D,UAAM,eAAe,OAAO,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;AAE5D,uBAAmB;AAAA,MACjB,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,IACzB,CAAC;AAED,UAAM,EAAE,eAAe,MAAM,IAAI;AAAA,MAC/B;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,QAAQ,OAAO;AAAA,UACf,cAAc;AAAA,UACd,cAAc;AAAA;AAAA,MAChB;AAAA,IACF;AAEA,UAAM,cAAc;AACpB,UAAM;AAAA,EACR;AACF;","names":[]}
|