agents-inc 0.152.1 → 0.154.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 +57 -0
- package/README.md +31 -35
- package/dist/{chunk-FVDKAVOL.js → chunk-2IMYK4WN.js} +18 -51
- package/dist/chunk-2IMYK4WN.js.map +1 -0
- package/dist/{chunk-PMM2MYMA.js → chunk-4VCWL2IG.js} +649 -357
- package/dist/chunk-4VCWL2IG.js.map +1 -0
- package/dist/{chunk-PZIZNMHK.js → chunk-5MFJ24VM.js} +237 -150
- package/dist/chunk-5MFJ24VM.js.map +1 -0
- package/dist/{chunk-KXYVJGJP.js → chunk-6CNRMCFM.js} +3 -2
- package/dist/{chunk-KXYVJGJP.js.map → chunk-6CNRMCFM.js.map} +1 -1
- package/dist/chunk-7VZV4O6B.js +40 -0
- package/dist/chunk-7VZV4O6B.js.map +1 -0
- package/dist/{chunk-SX5H6TSC.js → chunk-AKQ5QISO.js} +11 -8
- package/dist/chunk-AKQ5QISO.js.map +1 -0
- package/dist/{chunk-BNSRA6HL.js → chunk-AURY6RT6.js} +39 -176
- package/dist/chunk-AURY6RT6.js.map +1 -0
- package/dist/{chunk-LZ52XEPR.js → chunk-B66SC72V.js} +7 -6
- package/dist/chunk-B66SC72V.js.map +1 -0
- package/dist/{chunk-LASI35KT.js → chunk-BZ4CZBOM.js} +14 -28
- package/dist/chunk-BZ4CZBOM.js.map +1 -0
- package/dist/chunk-CBF4ZYV3.js +18540 -0
- package/dist/chunk-CBF4ZYV3.js.map +1 -0
- package/dist/{chunk-5GUOIJSG.js → chunk-CHNA5RVS.js} +3 -15
- package/dist/chunk-CHNA5RVS.js.map +1 -0
- package/dist/{chunk-LDP5ASDM.js → chunk-DRKSYJZ2.js} +2 -19
- package/dist/chunk-DRKSYJZ2.js.map +1 -0
- package/dist/chunk-FMYHWKGG.js +325 -0
- package/dist/chunk-FMYHWKGG.js.map +1 -0
- package/dist/{chunk-SKQWRUPX.js → chunk-GUDGCFSF.js} +59 -33
- package/dist/chunk-GUDGCFSF.js.map +1 -0
- package/dist/{chunk-WKTHWQKM.js → chunk-IPJOMAWC.js} +5070 -6305
- package/dist/chunk-IPJOMAWC.js.map +1 -0
- package/dist/chunk-IXEDSKMH.js +48 -0
- package/dist/chunk-IXEDSKMH.js.map +1 -0
- package/dist/{chunk-TUPYW2IQ.js → chunk-JC7DBPRD.js} +9 -12
- package/dist/chunk-JC7DBPRD.js.map +1 -0
- package/dist/{chunk-ZL7PFNHN.js → chunk-K3O3YQYG.js} +2 -2
- package/dist/{chunk-QRDTLVXG.js → chunk-LA3JPESW.js} +9 -22
- package/dist/chunk-LA3JPESW.js.map +1 -0
- package/dist/{chunk-MWG4VU64.js → chunk-MJFIO5SX.js} +50 -74
- package/dist/chunk-MJFIO5SX.js.map +1 -0
- package/dist/{chunk-L7SZXUBJ.js → chunk-NFH6SA62.js} +7 -6
- package/dist/{chunk-L7SZXUBJ.js.map → chunk-NFH6SA62.js.map} +1 -1
- package/dist/{chunk-GRVKW3CC.js → chunk-NKCY2ULI.js} +3 -2
- package/dist/{chunk-GRVKW3CC.js.map → chunk-NKCY2ULI.js.map} +1 -1
- package/dist/{chunk-TJJPWUMA.js → chunk-NSJ2S7R5.js} +3 -2
- package/dist/{chunk-TJJPWUMA.js.map → chunk-NSJ2S7R5.js.map} +1 -1
- package/dist/{chunk-Q2KG7UV3.js → chunk-OJJLYHM3.js} +2 -1
- package/dist/{chunk-Q2KG7UV3.js.map → chunk-OJJLYHM3.js.map} +1 -1
- package/dist/{chunk-MJ2KHG24.js → chunk-ONWEOS77.js} +6 -6
- package/dist/{chunk-MJ2KHG24.js.map → chunk-ONWEOS77.js.map} +1 -1
- package/dist/{chunk-NR3OZGL4.js → chunk-OZXAJNLA.js} +2 -1
- package/dist/{chunk-NR3OZGL4.js.map → chunk-OZXAJNLA.js.map} +1 -1
- package/dist/{chunk-QZZJFYUQ.js → chunk-PRJD5MMQ.js} +3 -3
- package/dist/chunk-PRJD5MMQ.js.map +1 -0
- package/dist/{chunk-MM7CTTAV.js → chunk-Q5FLW4JG.js} +2 -2
- package/dist/{chunk-MM7CTTAV.js.map → chunk-Q5FLW4JG.js.map} +1 -1
- package/dist/{chunk-5UWKOOIS.js → chunk-QQTYMW7N.js} +131 -209
- package/dist/chunk-QQTYMW7N.js.map +1 -0
- package/dist/{chunk-MVR3SYMN.js → chunk-QUDQTO3O.js} +4 -3
- package/dist/{chunk-MVR3SYMN.js.map → chunk-QUDQTO3O.js.map} +1 -1
- package/dist/{chunk-76ADG7LQ.js → chunk-R54KIGN2.js} +8 -22
- package/dist/chunk-R54KIGN2.js.map +1 -0
- package/dist/{chunk-XHUODHZ4.js → chunk-R7JV22QK.js} +22 -49
- package/dist/chunk-R7JV22QK.js.map +1 -0
- package/dist/{chunk-E5X6RJ4E.js → chunk-TUQF577Z.js} +56 -53
- package/dist/chunk-TUQF577Z.js.map +1 -0
- package/dist/{chunk-IHUY4M22.js → chunk-UW44KSYL.js} +4 -4
- package/dist/{chunk-DTSG5XZB.js → chunk-V3ENMW7G.js} +3 -3
- package/dist/chunk-VZRO7RYT.js +3694 -0
- package/dist/chunk-VZRO7RYT.js.map +1 -0
- package/dist/{chunk-MQ7FLIYS.js → chunk-WRRP47PY.js} +3 -2
- package/dist/{chunk-MQ7FLIYS.js.map → chunk-WRRP47PY.js.map} +1 -1
- package/dist/{chunk-RNJWAKMO.js → chunk-XGMOXMS4.js} +9 -8
- package/dist/chunk-XGMOXMS4.js.map +1 -0
- package/dist/{chunk-STMHDOZD.js → chunk-XMEIVWAS.js} +12 -9
- package/dist/chunk-XMEIVWAS.js.map +1 -0
- package/dist/{chunk-IUQBOCSU.js → chunk-ZBPEFQ4G.js} +2 -1
- package/dist/{chunk-IUQBOCSU.js.map → chunk-ZBPEFQ4G.js.map} +1 -1
- package/dist/chunk-ZU6DAR4S.js +223 -0
- package/dist/chunk-ZU6DAR4S.js.map +1 -0
- package/dist/commands/build/marketplace.js +115 -35
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +9 -10
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/compile.js +135 -70
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/doctor.js +793 -64
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +231 -236
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +24 -39
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/init.js +41 -46
- package/dist/commands/list.js +10 -12
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/search.js +35 -88
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +212 -167
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +82 -332
- package/dist/commands/update.js.map +1 -1
- package/dist/components/common/confirm.js +1 -1
- package/dist/components/common/prompt-confirm.js +1 -1
- package/dist/components/common/select-list.js +2 -2
- package/dist/components/common/spinner.js +1 -1
- package/dist/components/wizard/category-grid.js +5 -6
- package/dist/components/wizard/checkbox-grid.js +5 -6
- package/dist/components/wizard/domain-selection.js +12 -13
- package/dist/components/wizard/run-wizard-session.js +30 -36
- package/dist/components/wizard/scroll-affordance.js +2 -2
- package/dist/components/wizard/skill-agent-summary.js +7 -7
- package/dist/components/wizard/source-grid.js +6 -11
- package/dist/components/wizard/stack-selection.js +9 -9
- package/dist/components/wizard/step-agents.js +12 -12
- package/dist/components/wizard/step-build.js +10 -11
- package/dist/components/wizard/step-confirm.js +11 -11
- package/dist/components/wizard/step-sources.js +11 -17
- package/dist/components/wizard/step-stack.js +10 -10
- package/dist/components/wizard/summary-panel.js +10 -10
- package/dist/components/wizard/toast.js +2 -2
- package/dist/components/wizard/wizard-layout.js +15 -16
- package/dist/components/wizard/wizard-tabs.js +6 -12
- package/dist/components/wizard/wizard.js +29 -35
- package/dist/config-exports.js +1 -1
- package/dist/copy-local-skills-WVHJFRPK.js +14 -0
- package/dist/hooks/init.js +49 -48
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/load-agent-defs-5OT54J5M.js +15 -0
- package/dist/{loader-5JP4S7CJ.js → loader-JIZDTR4G.js} +7 -5
- package/dist/recompile-project-agents-VREEPBDV.js +20 -0
- package/dist/{source-loader-MZYCPL2S.js → source-loader-OE6EJFPU.js} +6 -6
- package/dist/src/agents/developer/ai-developer/identity.md +4 -4
- package/dist/src/agents/developer/ai-developer/playbook.md +1 -1
- package/dist/src/agents/developer/api-developer/identity.md +4 -4
- package/dist/src/agents/developer/api-developer/metadata.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/identity.md +4 -4
- package/dist/src/agents/developer/web-developer/identity.md +2 -2
- package/dist/src/agents/developer/web-developer/metadata.yaml +1 -1
- package/dist/src/agents/meta/agent-summoner/identity.md +4 -5
- package/dist/src/agents/meta/agent-summoner/output.md +2 -2
- package/dist/src/agents/meta/agent-summoner/playbook.md +15 -16
- package/dist/src/agents/meta/codex-keeper/identity.md +4 -4
- package/dist/src/agents/meta/codex-keeper/playbook.md +1 -1
- package/dist/src/agents/meta/convention-keeper/identity.md +1 -1
- package/dist/src/agents/meta/skill-summoner/critical-reminders.md +0 -34
- package/dist/src/agents/meta/skill-summoner/critical-requirements.md +27 -3
- package/dist/src/agents/meta/skill-summoner/identity.md +2 -2
- package/{src/agents/planning/web-pm → dist/src/agents/planning/pm}/critical-reminders.md +10 -7
- package/dist/src/agents/planning/{web-pm → pm}/critical-requirements.md +8 -4
- package/dist/src/agents/planning/pm/identity.md +47 -0
- package/dist/src/agents/planning/pm/metadata.yaml +12 -0
- package/dist/src/agents/planning/{web-pm → pm}/output.md +7 -90
- package/dist/src/agents/planning/pm/playbook.md +185 -0
- package/dist/src/agents/researcher/ai-researcher/critical-reminders.md +58 -0
- package/dist/src/agents/researcher/ai-researcher/critical-requirements.md +40 -0
- package/dist/src/agents/researcher/ai-researcher/identity.md +86 -0
- package/dist/src/agents/researcher/ai-researcher/metadata.yaml +10 -0
- package/dist/src/agents/researcher/ai-researcher/output.md +363 -0
- package/dist/src/agents/researcher/ai-researcher/playbook.md +545 -0
- package/dist/src/agents/researcher/api-researcher/critical-reminders.md +16 -0
- package/dist/src/agents/researcher/api-researcher/identity.md +7 -7
- package/dist/src/agents/researcher/cli-researcher/critical-reminders.md +50 -0
- package/dist/src/agents/researcher/cli-researcher/critical-requirements.md +36 -0
- package/dist/src/agents/researcher/cli-researcher/identity.md +87 -0
- package/dist/src/agents/researcher/cli-researcher/metadata.yaml +10 -0
- package/dist/src/agents/researcher/cli-researcher/output.md +343 -0
- package/dist/src/agents/researcher/cli-researcher/playbook.md +370 -0
- package/dist/src/agents/researcher/web-researcher/identity.md +5 -6
- package/dist/src/agents/reviewer/reviewer/critical-reminders.md +29 -0
- package/dist/src/agents/reviewer/reviewer/critical-requirements.md +31 -0
- package/dist/src/agents/reviewer/reviewer/identity.md +41 -0
- package/dist/src/agents/reviewer/reviewer/metadata.yaml +12 -0
- package/dist/src/agents/reviewer/reviewer/output.md +202 -0
- package/dist/src/agents/reviewer/reviewer/playbook.md +141 -0
- package/dist/src/agents/tester/ai-tester/critical-reminders.md +48 -0
- package/dist/src/agents/tester/ai-tester/critical-requirements.md +49 -0
- package/dist/src/agents/tester/ai-tester/identity.md +62 -0
- package/dist/src/agents/tester/ai-tester/metadata.yaml +12 -0
- package/dist/src/agents/tester/ai-tester/output.md +375 -0
- package/dist/src/agents/tester/ai-tester/playbook.md +789 -0
- package/dist/src/agents/tester/api-tester/identity.md +3 -3
- package/dist/src/agents/tester/cli-tester/critical-reminders.md +3 -3
- package/dist/src/agents/tester/cli-tester/critical-requirements.md +2 -2
- package/dist/src/agents/tester/cli-tester/identity.md +3 -3
- package/dist/src/agents/tester/cli-tester/output.md +4 -4
- package/dist/src/agents/tester/cli-tester/playbook.md +3 -3
- package/dist/src/agents/tester/web-tester/identity.md +3 -3
- package/dist/stores/wizard-store.js +8 -6
- package/package.json +13 -2
- package/src/agents/developer/ai-developer/identity.md +4 -4
- package/src/agents/developer/ai-developer/playbook.md +1 -1
- package/src/agents/developer/api-developer/identity.md +4 -4
- package/src/agents/developer/api-developer/metadata.yaml +1 -1
- package/src/agents/developer/cli-developer/identity.md +4 -4
- package/src/agents/developer/web-developer/identity.md +2 -2
- package/src/agents/developer/web-developer/metadata.yaml +1 -1
- package/src/agents/meta/agent-summoner/identity.md +4 -5
- package/src/agents/meta/agent-summoner/output.md +2 -2
- package/src/agents/meta/agent-summoner/playbook.md +15 -16
- package/src/agents/meta/codex-keeper/identity.md +4 -4
- package/src/agents/meta/codex-keeper/playbook.md +1 -1
- package/src/agents/meta/convention-keeper/identity.md +1 -1
- package/src/agents/meta/skill-summoner/critical-reminders.md +0 -34
- package/src/agents/meta/skill-summoner/critical-requirements.md +27 -3
- package/src/agents/meta/skill-summoner/identity.md +2 -2
- package/{dist/src/agents/planning/web-pm → src/agents/planning/pm}/critical-reminders.md +10 -7
- package/src/agents/planning/{web-pm → pm}/critical-requirements.md +8 -4
- package/src/agents/planning/pm/identity.md +47 -0
- package/src/agents/planning/pm/metadata.yaml +12 -0
- package/src/agents/planning/{web-pm → pm}/output.md +7 -90
- package/src/agents/planning/pm/playbook.md +185 -0
- package/src/agents/researcher/ai-researcher/critical-reminders.md +58 -0
- package/src/agents/researcher/ai-researcher/critical-requirements.md +40 -0
- package/src/agents/researcher/ai-researcher/identity.md +86 -0
- package/src/agents/researcher/ai-researcher/metadata.yaml +10 -0
- package/src/agents/researcher/ai-researcher/output.md +363 -0
- package/src/agents/researcher/ai-researcher/playbook.md +545 -0
- package/src/agents/researcher/api-researcher/critical-reminders.md +16 -0
- package/src/agents/researcher/api-researcher/identity.md +7 -7
- package/src/agents/researcher/cli-researcher/critical-reminders.md +50 -0
- package/src/agents/researcher/cli-researcher/critical-requirements.md +36 -0
- package/src/agents/researcher/cli-researcher/identity.md +87 -0
- package/src/agents/researcher/cli-researcher/metadata.yaml +10 -0
- package/src/agents/researcher/cli-researcher/output.md +343 -0
- package/src/agents/researcher/cli-researcher/playbook.md +370 -0
- package/src/agents/researcher/web-researcher/identity.md +5 -6
- package/src/agents/reviewer/reviewer/critical-reminders.md +29 -0
- package/src/agents/reviewer/reviewer/critical-requirements.md +31 -0
- package/src/agents/reviewer/reviewer/identity.md +41 -0
- package/src/agents/reviewer/reviewer/metadata.yaml +12 -0
- package/src/agents/reviewer/reviewer/output.md +202 -0
- package/src/agents/reviewer/reviewer/playbook.md +141 -0
- package/src/agents/tester/ai-tester/critical-reminders.md +48 -0
- package/src/agents/tester/ai-tester/critical-requirements.md +49 -0
- package/src/agents/tester/ai-tester/identity.md +62 -0
- package/src/agents/tester/ai-tester/metadata.yaml +12 -0
- package/src/agents/tester/ai-tester/output.md +375 -0
- package/src/agents/tester/ai-tester/playbook.md +789 -0
- package/src/agents/tester/api-tester/identity.md +3 -3
- package/src/agents/tester/cli-tester/critical-reminders.md +3 -3
- package/src/agents/tester/cli-tester/critical-requirements.md +2 -2
- package/src/agents/tester/cli-tester/identity.md +3 -3
- package/src/agents/tester/cli-tester/output.md +4 -4
- package/src/agents/tester/cli-tester/playbook.md +3 -3
- package/src/agents/tester/web-tester/identity.md +3 -3
- package/src/schemas/metadata.schema.json +31 -2
- package/src/schemas/plugin.schema.json +3 -0
- package/src/schemas/project-config.schema.json +61 -15
- package/src/schemas/project-source-config.schema.json +0 -47
- package/dist/chunk-5GUOIJSG.js.map +0 -1
- package/dist/chunk-5UWKOOIS.js.map +0 -1
- package/dist/chunk-76ADG7LQ.js.map +0 -1
- package/dist/chunk-BNSRA6HL.js.map +0 -1
- package/dist/chunk-E5X6RJ4E.js.map +0 -1
- package/dist/chunk-EEPELKOM.js +0 -5938
- package/dist/chunk-EEPELKOM.js.map +0 -1
- package/dist/chunk-F7T5AFFN.js +0 -20
- package/dist/chunk-F7T5AFFN.js.map +0 -1
- package/dist/chunk-FVDKAVOL.js.map +0 -1
- package/dist/chunk-KFB5CRXZ.js +0 -377
- package/dist/chunk-KFB5CRXZ.js.map +0 -1
- package/dist/chunk-KR65TPKC.js +0 -664
- package/dist/chunk-KR65TPKC.js.map +0 -1
- package/dist/chunk-LASI35KT.js.map +0 -1
- package/dist/chunk-LDP5ASDM.js.map +0 -1
- package/dist/chunk-LZ52XEPR.js.map +0 -1
- package/dist/chunk-M7HO7NBK.js +0 -88
- package/dist/chunk-M7HO7NBK.js.map +0 -1
- package/dist/chunk-MWG4VU64.js.map +0 -1
- package/dist/chunk-ODNDXQH2.js +0 -77
- package/dist/chunk-ODNDXQH2.js.map +0 -1
- package/dist/chunk-P44SXVH3.js +0 -80
- package/dist/chunk-P44SXVH3.js.map +0 -1
- package/dist/chunk-PMM2MYMA.js.map +0 -1
- package/dist/chunk-PZIZNMHK.js.map +0 -1
- package/dist/chunk-Q45ZU6HD.js +0 -37
- package/dist/chunk-Q45ZU6HD.js.map +0 -1
- package/dist/chunk-QRDTLVXG.js.map +0 -1
- package/dist/chunk-QZZJFYUQ.js.map +0 -1
- package/dist/chunk-R5NOI2LP.js +0 -170
- package/dist/chunk-R5NOI2LP.js.map +0 -1
- package/dist/chunk-RNJWAKMO.js.map +0 -1
- package/dist/chunk-SBHBBZKF.js +0 -284
- package/dist/chunk-SBHBBZKF.js.map +0 -1
- package/dist/chunk-SKQWRUPX.js.map +0 -1
- package/dist/chunk-STMHDOZD.js.map +0 -1
- package/dist/chunk-SX5H6TSC.js.map +0 -1
- package/dist/chunk-TUPYW2IQ.js.map +0 -1
- package/dist/chunk-UBEDZ4FD.js +0 -4198
- package/dist/chunk-UBEDZ4FD.js.map +0 -1
- package/dist/chunk-VY6MNOXL.js +0 -20
- package/dist/chunk-VY6MNOXL.js.map +0 -1
- package/dist/chunk-WBCPLH66.js +0 -42
- package/dist/chunk-WBCPLH66.js.map +0 -1
- package/dist/chunk-WKTHWQKM.js.map +0 -1
- package/dist/chunk-XHUODHZ4.js.map +0 -1
- package/dist/chunk-ZPPHXXAP.js +0 -252
- package/dist/chunk-ZPPHXXAP.js.map +0 -1
- package/dist/commands/import/skill.js +0 -344
- package/dist/commands/import/skill.js.map +0 -1
- package/dist/commands/new/agent.js +0 -300
- package/dist/commands/new/agent.js.map +0 -1
- package/dist/commands/new/marketplace.js +0 -310
- package/dist/commands/new/marketplace.js.map +0 -1
- package/dist/commands/new/skill.js +0 -26
- package/dist/commands/validate.js +0 -575
- package/dist/commands/validate.js.map +0 -1
- package/dist/components/wizard/search-modal.js +0 -13
- package/dist/components/wizard/selection-card.js +0 -9
- package/dist/components/wizard/step-settings.js +0 -18
- package/dist/copy-local-skills-6EMVN7RB.js +0 -14
- package/dist/load-agent-defs-BWOUVEAR.js +0 -15
- package/dist/load-agent-defs-BWOUVEAR.js.map +0 -1
- package/dist/loader-5JP4S7CJ.js.map +0 -1
- package/dist/recompile-project-agents-6DL45TDI.js +0 -19
- package/dist/recompile-project-agents-6DL45TDI.js.map +0 -1
- package/dist/source-loader-MZYCPL2S.js.map +0 -1
- package/dist/src/agents/developer/web-architecture/critical-reminders.md +0 -48
- package/dist/src/agents/developer/web-architecture/critical-requirements.md +0 -65
- package/dist/src/agents/developer/web-architecture/identity.md +0 -64
- package/dist/src/agents/developer/web-architecture/metadata.yaml +0 -12
- package/dist/src/agents/developer/web-architecture/output.md +0 -449
- package/dist/src/agents/developer/web-architecture/playbook.md +0 -481
- package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +0 -71
- package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +0 -31
- package/dist/src/agents/pattern/pattern-scout/identity.md +0 -25
- package/dist/src/agents/pattern/pattern-scout/metadata.yaml +0 -10
- package/dist/src/agents/pattern/pattern-scout/output.md +0 -290
- package/dist/src/agents/pattern/pattern-scout/playbook.md +0 -1806
- package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +0 -30
- package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +0 -28
- package/dist/src/agents/pattern/web-pattern-critique/identity.md +0 -41
- package/dist/src/agents/pattern/web-pattern-critique/metadata.yaml +0 -12
- package/dist/src/agents/pattern/web-pattern-critique/output.md +0 -314
- package/dist/src/agents/pattern/web-pattern-critique/playbook.md +0 -572
- package/dist/src/agents/planning/api-pm/critical-reminders.md +0 -48
- package/dist/src/agents/planning/api-pm/critical-requirements.md +0 -41
- package/dist/src/agents/planning/api-pm/identity.md +0 -39
- package/dist/src/agents/planning/api-pm/metadata.yaml +0 -12
- package/dist/src/agents/planning/api-pm/output.md +0 -475
- package/dist/src/agents/planning/api-pm/playbook.md +0 -129
- package/dist/src/agents/planning/web-pm/identity.md +0 -26
- package/dist/src/agents/planning/web-pm/metadata.yaml +0 -12
- package/dist/src/agents/planning/web-pm/playbook.md +0 -318
- package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +0 -40
- package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +0 -37
- package/dist/src/agents/reviewer/ai-reviewer/identity.md +0 -51
- package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +0 -10
- package/dist/src/agents/reviewer/ai-reviewer/output.md +0 -395
- package/dist/src/agents/reviewer/ai-reviewer/playbook.md +0 -90
- package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +0 -31
- package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +0 -27
- package/dist/src/agents/reviewer/api-reviewer/identity.md +0 -51
- package/dist/src/agents/reviewer/api-reviewer/metadata.yaml +0 -12
- package/dist/src/agents/reviewer/api-reviewer/output.md +0 -343
- package/dist/src/agents/reviewer/api-reviewer/playbook.md +0 -288
- package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +0 -33
- package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +0 -30
- package/dist/src/agents/reviewer/cli-reviewer/identity.md +0 -44
- package/dist/src/agents/reviewer/cli-reviewer/metadata.yaml +0 -12
- package/dist/src/agents/reviewer/cli-reviewer/output.md +0 -414
- package/dist/src/agents/reviewer/cli-reviewer/playbook.md +0 -218
- package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +0 -38
- package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +0 -38
- package/dist/src/agents/reviewer/infra-reviewer/identity.md +0 -53
- package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +0 -10
- package/dist/src/agents/reviewer/infra-reviewer/output.md +0 -364
- package/dist/src/agents/reviewer/infra-reviewer/playbook.md +0 -161
- package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +0 -31
- package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +0 -26
- package/dist/src/agents/reviewer/web-reviewer/identity.md +0 -40
- package/dist/src/agents/reviewer/web-reviewer/metadata.yaml +0 -12
- package/dist/src/agents/reviewer/web-reviewer/output.md +0 -333
- package/dist/src/agents/reviewer/web-reviewer/playbook.md +0 -156
- package/src/agents/developer/web-architecture/critical-reminders.md +0 -48
- package/src/agents/developer/web-architecture/critical-requirements.md +0 -65
- package/src/agents/developer/web-architecture/identity.md +0 -64
- package/src/agents/developer/web-architecture/metadata.yaml +0 -12
- package/src/agents/developer/web-architecture/output.md +0 -449
- package/src/agents/developer/web-architecture/playbook.md +0 -481
- package/src/agents/pattern/pattern-scout/critical-reminders.md +0 -71
- package/src/agents/pattern/pattern-scout/critical-requirements.md +0 -31
- package/src/agents/pattern/pattern-scout/identity.md +0 -25
- package/src/agents/pattern/pattern-scout/metadata.yaml +0 -10
- package/src/agents/pattern/pattern-scout/output.md +0 -290
- package/src/agents/pattern/pattern-scout/playbook.md +0 -1806
- package/src/agents/pattern/web-pattern-critique/critical-reminders.md +0 -30
- package/src/agents/pattern/web-pattern-critique/critical-requirements.md +0 -28
- package/src/agents/pattern/web-pattern-critique/identity.md +0 -41
- package/src/agents/pattern/web-pattern-critique/metadata.yaml +0 -12
- package/src/agents/pattern/web-pattern-critique/output.md +0 -314
- package/src/agents/pattern/web-pattern-critique/playbook.md +0 -572
- package/src/agents/planning/api-pm/critical-reminders.md +0 -48
- package/src/agents/planning/api-pm/critical-requirements.md +0 -41
- package/src/agents/planning/api-pm/identity.md +0 -39
- package/src/agents/planning/api-pm/metadata.yaml +0 -12
- package/src/agents/planning/api-pm/output.md +0 -475
- package/src/agents/planning/api-pm/playbook.md +0 -129
- package/src/agents/planning/web-pm/identity.md +0 -26
- package/src/agents/planning/web-pm/metadata.yaml +0 -12
- package/src/agents/planning/web-pm/playbook.md +0 -318
- package/src/agents/reviewer/ai-reviewer/critical-reminders.md +0 -40
- package/src/agents/reviewer/ai-reviewer/critical-requirements.md +0 -37
- package/src/agents/reviewer/ai-reviewer/identity.md +0 -51
- package/src/agents/reviewer/ai-reviewer/metadata.yaml +0 -10
- package/src/agents/reviewer/ai-reviewer/output.md +0 -395
- package/src/agents/reviewer/ai-reviewer/playbook.md +0 -90
- package/src/agents/reviewer/api-reviewer/critical-reminders.md +0 -31
- package/src/agents/reviewer/api-reviewer/critical-requirements.md +0 -27
- package/src/agents/reviewer/api-reviewer/identity.md +0 -51
- package/src/agents/reviewer/api-reviewer/metadata.yaml +0 -12
- package/src/agents/reviewer/api-reviewer/output.md +0 -343
- package/src/agents/reviewer/api-reviewer/playbook.md +0 -288
- package/src/agents/reviewer/cli-reviewer/critical-reminders.md +0 -33
- package/src/agents/reviewer/cli-reviewer/critical-requirements.md +0 -30
- package/src/agents/reviewer/cli-reviewer/identity.md +0 -44
- package/src/agents/reviewer/cli-reviewer/metadata.yaml +0 -12
- package/src/agents/reviewer/cli-reviewer/output.md +0 -414
- package/src/agents/reviewer/cli-reviewer/playbook.md +0 -218
- package/src/agents/reviewer/infra-reviewer/critical-reminders.md +0 -38
- package/src/agents/reviewer/infra-reviewer/critical-requirements.md +0 -38
- package/src/agents/reviewer/infra-reviewer/identity.md +0 -53
- package/src/agents/reviewer/infra-reviewer/metadata.yaml +0 -10
- package/src/agents/reviewer/infra-reviewer/output.md +0 -364
- package/src/agents/reviewer/infra-reviewer/playbook.md +0 -161
- package/src/agents/reviewer/web-reviewer/critical-reminders.md +0 -31
- package/src/agents/reviewer/web-reviewer/critical-requirements.md +0 -26
- package/src/agents/reviewer/web-reviewer/identity.md +0 -40
- package/src/agents/reviewer/web-reviewer/metadata.yaml +0 -12
- package/src/agents/reviewer/web-reviewer/output.md +0 -333
- package/src/agents/reviewer/web-reviewer/playbook.md +0 -156
- /package/dist/{chunk-ZL7PFNHN.js.map → chunk-K3O3YQYG.js.map} +0 -0
- /package/dist/{chunk-IHUY4M22.js.map → chunk-UW44KSYL.js.map} +0 -0
- /package/dist/{chunk-DTSG5XZB.js.map → chunk-V3ENMW7G.js.map} +0 -0
- /package/dist/{commands/new/skill.js.map → copy-local-skills-WVHJFRPK.js.map} +0 -0
- /package/dist/{components/wizard/search-modal.js.map → load-agent-defs-5OT54J5M.js.map} +0 -0
- /package/dist/{components/wizard/selection-card.js.map → loader-JIZDTR4G.js.map} +0 -0
- /package/dist/{components/wizard/step-settings.js.map → recompile-project-agents-VREEPBDV.js.map} +0 -0
- /package/dist/{copy-local-skills-6EMVN7RB.js.map → source-loader-OE6EJFPU.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/wizard.tsx","../src/cli/components/themes/default.ts","../src/cli/components/hooks/use-build-step-props.ts"],"sourcesContent":["import React, { useCallback, useEffect } from \"react\";\nimport { EJECT_SOURCE } from \"../../consts.js\";\nimport { useApp, useInput } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore, type WizardState } from \"../../stores/wizard-store.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardLayout } from \"./wizard-layout.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { StepSources } from \"./step-sources.js\";\nimport { StepSettings } from \"./step-settings.js\";\nimport { StepAgents } from \"./step-agents.js\";\nimport { DomainSelection } from \"./domain-selection.js\";\nimport { FEATURE_FLAGS } from \"../../lib/feature-flags.js\";\nimport { validateSelection } from \"../../lib/matrix/index.js\";\nimport { getSkillById } from \"../../lib/matrix/matrix-provider.js\";\nimport { findStack } from \"../../lib/matrix/matrix-provider.js\";\nimport {\n HOTKEY_ACCEPT_DEFAULTS,\n HOTKEY_INFO,\n HOTKEY_SCOPE,\n HOTKEY_SETTINGS,\n isHotkey,\n isInfoPanelAvailable,\n} from \"./hotkeys.js\";\nimport type {\n AgentName,\n Domain,\n DomainSelections,\n SelectionValidation,\n SkillId,\n StackAgentConfig,\n} from \"../../types/index.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../../types/config.js\";\nimport type { StartupMessage } from \"../../utils/logger.js\";\nimport { useBuildStepProps } from \"../hooks/use-build-step-props.js\";\n\nconst TOAST_DURATION_MS = 2000;\n\nexport type WizardResultV2 = {\n skills: SkillConfig[];\n selectedAgents: AgentName[];\n agentConfigs: AgentScopeConfig[];\n /**\n * What each sub-agent holds and what preloads, when the producer knows per `(skill, sub-agent)`.\n * A shared configuration installed with `init --from` does: it assigns each skill to named\n * sub-agents at a named load state, and that curation is the whole of what was shared.\n *\n * The wizard has no per-agent granularity — a skill is selected for the project, not for one\n * sub-agent — so it leaves this undefined and the install pipeline's ownership rules build the\n * stack as they always have.\n */\n assignedStack?: Partial<Record<AgentName, StackAgentConfig>>;\n selectedStackId: string | null;\n domainSelections: DomainSelections;\n selectedDomains: Domain[];\n /**\n * Skill ids from the saved config that could not be resolved against the loaded source matrix\n * this session. The wizard could not represent them, so the merge layer must preserve any\n * existing config entry with these ids rather than treat their absence as a deselection\n * (D-233 Scenario C data-loss guard).\n */\n unresolvableSkillIds: SkillId[];\n cancelled: boolean;\n validation: SelectionValidation;\n};\n\nexport type WizardProps = {\n onComplete: (result: WizardResultV2) => void;\n onCancel: () => void;\n version: string;\n logo?: string;\n projectDir?: string;\n startupMessages?: StartupMessage[];\n initialAgents?: AgentName[];\n installedSkillIds?: SkillId[];\n};\n\n/** S-key scope toggle: blocked (with a toast) in global context; no-op without a focused row. */\nfunction toggleFocusedScope<Id>(\n isEditingFromGlobalScope: boolean,\n focusedId: Id | null,\n actions: { toggle: (id: Id) => void; setToastMessage: (message: string) => void },\n): void {\n if (isEditingFromGlobalScope) {\n actions.setToastMessage(\"Scope toggle unavailable in global context\");\n return;\n }\n if (focusedId) {\n actions.toggle(focusedId);\n }\n}\n\n/** Selected skill ids: the chosen stack's full list under stack-defaults, else the wizard selections. */\nexport function resolveSelectedSkillIds(store: WizardState): SkillId[] {\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n const stack = findStack(store.selectedStackId);\n if (!stack) {\n throw new Error(`Stack not found: ${store.selectedStackId}`);\n }\n return [...stack.allSkillIds];\n }\n return store.getAllSelectedTechnologies().map((tech) => getSkillById(tech).id);\n}\n\nexport const Wizard: React.FC<WizardProps> = ({\n onComplete,\n onCancel,\n version,\n logo,\n projectDir,\n startupMessages,\n initialAgents,\n installedSkillIds,\n}) => {\n const store = useWizardStore();\n const { exit } = useApp();\n\n const toastMessage = useWizardStore((s) => s.toastMessage);\n\n useEffect(() => {\n if (!toastMessage) return;\n const timer = setTimeout(() => {\n useWizardStore.getState().setToastMessage(null);\n }, TOAST_DURATION_MS);\n return () => clearTimeout(timer);\n }, [toastMessage]);\n\n const buildStepProps = useBuildStepProps({ store, installedSkillIds });\n\n useInput((input, key) => {\n // ESC is handled by step-settings.tsx's own useKeyboardNavigation hook.\n // Flag-gated with the hotkey that opens the overlay (D-307): this branch\n // swallows every other key while the overlay is up, so leaving it live behind\n // a withdrawn overlay would let a stale `showSettings` deafen the wizard.\n if (FEATURE_FLAGS.WIZARD_SETTINGS_OVERLAY && store.showSettings) {\n if (isHotkey(input, HOTKEY_SETTINGS)) {\n store.toggleSettings();\n }\n return;\n }\n\n // Closing is never gated on the step: the panel is only ever open on a step\n // that allows it, and gating the close would strand the overlay.\n if (store.showInfo) {\n if (key.escape || isHotkey(input, HOTKEY_INFO)) {\n store.toggleInfo();\n }\n return;\n }\n\n if (isInfoPanelAvailable(store.step) && isHotkey(input, HOTKEY_INFO)) {\n store.toggleInfo();\n return;\n }\n\n if (key.escape) {\n // Steps with their own ESC handling (via useInput in child components):\n // - \"stack\": StackSelection handles ESC via onCancel prop\n // - \"domains\": DomainSelection handles ESC via CheckboxGrid onBack\n // - \"build\": StepBuild handles ESC via its own useInput\n // - \"sources\": StepSources handles ESC via onBack prop\n // - \"confirm\": StepConfirm handles ESC via onBack prop\n // - \"agents\": StepAgents handles ESC via its own useInput\n // All steps handle their own ESC, so this is a no-op.\n return;\n }\n\n if (\n isHotkey(input, HOTKEY_ACCEPT_DEFAULTS) &&\n store.step === \"build\" &&\n store.selectedStackId\n ) {\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n return;\n }\n\n if (isHotkey(input, HOTKEY_SCOPE) && store.step === \"build\") {\n toggleFocusedScope(store.isEditingFromGlobalScope, store.focusedSkillId, {\n toggle: store.toggleSkillScope,\n setToastMessage: store.setToastMessage,\n });\n return;\n }\n\n if (isHotkey(input, HOTKEY_SCOPE) && store.step === \"agents\") {\n toggleFocusedScope(store.isEditingFromGlobalScope, store.focusedAgentId, {\n toggle: store.toggleAgentScope,\n setToastMessage: store.setToastMessage,\n });\n return;\n }\n\n // D-307: the marketplace-sources overlay is withdrawn, so S does nothing on\n // the sources step. The footer never advertises it (gated on SOURCE_SEARCH).\n if (\n FEATURE_FLAGS.WIZARD_SETTINGS_OVERLAY &&\n isHotkey(input, HOTKEY_SETTINGS) &&\n store.step === \"sources\"\n ) {\n store.toggleSettings();\n return;\n }\n });\n\n const handleComplete = useCallback(() => {\n const allSkills = resolveSelectedSkillIds(store);\n\n const skillConfigs: SkillConfig[] = allSkills.map((id) => {\n const existing = store.skillConfigs.find((sc) => sc.id === id && !sc.excluded);\n return existing ?? { id, scope: \"global\" as const, source: EJECT_SOURCE };\n });\n\n // Append excluded entries so they flow through to config generation\n const excludedConfigs = store.skillConfigs.filter((sc) => sc.excluded);\n const allSkillConfigs = [...skillConfigs, ...excludedConfigs];\n\n const validation = validateSelection(allSkills);\n\n const result: WizardResultV2 = {\n skills: allSkillConfigs,\n selectedAgents: store.selectedAgents,\n agentConfigs: store.agentConfigs,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n selectedDomains: store.selectedDomains,\n unresolvableSkillIds: store.unresolvableSkillIds,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, onComplete, exit]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n exit();\n }, [onCancel, exit]);\n\n const renderStep = () => {\n switch (store.step) {\n case \"stack\":\n return <StepStack onCancel={handleCancel} />;\n\n case \"domains\":\n return <DomainSelection />;\n\n case \"build\":\n return <StepBuild {...buildStepProps} />;\n\n case \"sources\": {\n if (store.showSettings) {\n return (\n <StepSettings\n projectDir={projectDir || process.cwd()}\n onClose={() => store.toggleSettings()}\n />\n );\n }\n return (\n <StepSources\n projectDir={projectDir}\n onContinue={() => {\n if (!initialAgents?.length) {\n store.preselectAgentsFromDomains();\n }\n store.setStep(\"agents\");\n }}\n onBack={store.goBack}\n />\n );\n }\n\n case \"agents\":\n return <StepAgents />;\n\n case \"confirm\": {\n return <StepConfirm onComplete={handleComplete} onBack={store.goBack} />;\n }\n\n default: {\n const _exhaustive: never = store.step;\n return _exhaustive;\n }\n }\n };\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout version={version} logo={logo} startupMessages={startupMessages}>\n {renderStep()}\n </WizardLayout>\n </ThemeProvider>\n );\n};\n","import { extendTheme, defaultTheme } from \"@inkjs/ui\";\nimport { CLI_COLORS } from \"../../consts.js\";\n\n/** Variant → color mapping shared by StatusMessage, Alert, and Badge; unknown variants fall back per-site. */\nconst VARIANT_COLORS: Partial<Record<string, string>> = {\n error: CLI_COLORS.ERROR,\n warning: CLI_COLORS.WARNING,\n success: CLI_COLORS.SUCCESS,\n info: CLI_COLORS.INFO,\n};\n\n/**\n * CLI theme matching existing picocolors styling\n *\n * Color scheme:\n * - Cyan: Focus/primary (headings, prompts, selected items)\n * - Green: Success states\n * - Red: Errors\n * - Yellow: Warnings\n * - Blue: Info messages\n */\nexport const cliTheme = extendTheme(defaultTheme, {\n components: {\n Spinner: {\n styles: {\n frame: () => ({ color: CLI_COLORS.PRIMARY }),\n label: () => ({ color: CLI_COLORS.NEUTRAL }),\n },\n },\n Select: {\n styles: {\n focusIndicator: () => ({ color: CLI_COLORS.FOCUS }),\n label: ({ isFocused }) => ({\n color: isFocused ? CLI_COLORS.FOCUS : undefined,\n }),\n },\n },\n MultiSelect: {\n styles: {\n focusIndicator: () => ({ color: CLI_COLORS.FOCUS }),\n label: ({ isFocused, isSelected }) => ({\n color: isFocused ? CLI_COLORS.FOCUS : isSelected ? CLI_COLORS.SUCCESS : undefined,\n }),\n checkboxChecked: () => ({ color: CLI_COLORS.SUCCESS }),\n },\n },\n StatusMessage: {\n styles: {\n container: ({ variant }) => ({\n borderStyle: \"round\",\n borderColor: VARIANT_COLORS[variant] ?? CLI_COLORS.INFO,\n }),\n },\n },\n Alert: {\n styles: {\n container: ({ variant }) => ({\n borderColor: VARIANT_COLORS[variant] ?? CLI_COLORS.INFO,\n }),\n icon: ({ variant }) => ({\n color: VARIANT_COLORS[variant] ?? CLI_COLORS.INFO,\n }),\n },\n },\n TextInput: {\n styles: {\n container: ({ isFocused }) => ({\n borderColor: isFocused ? CLI_COLORS.FOCUS : CLI_COLORS.NEUTRAL,\n }),\n cursor: () => ({ color: CLI_COLORS.PRIMARY }),\n },\n },\n ConfirmInput: {\n styles: {\n highlightedChoice: () => ({ color: CLI_COLORS.PRIMARY }),\n },\n },\n Badge: {\n styles: {\n container: ({ variant }) => ({\n color: VARIANT_COLORS[variant] ?? CLI_COLORS.PRIMARY,\n }),\n },\n },\n },\n});\n","import { useCallback } from \"react\";\nimport { FALLBACK_DOMAIN } from \"../../consts.js\";\nimport type { Domain, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport type { StepBuildProps } from \"../wizard/step-build.js\";\n\ntype UseBuildStepPropsOptions = {\n store: WizardState;\n installedSkillIds?: SkillId[];\n};\n\nexport function useBuildStepProps({\n store,\n installedSkillIds,\n}: UseBuildStepPropsOptions): StepBuildProps {\n const currentDomain = store.getCurrentDomain();\n const defaultDomains: Domain[] = [FALLBACK_DOMAIN];\n const effectiveDomains =\n store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;\n\n const allSelections = store.getAllSelectedTechnologies();\n\n const activeDomain: Domain = currentDomain || effectiveDomains[0] || FALLBACK_DOMAIN;\n\n const onToggle = useCallback(\n (categoryId: Parameters<StepBuildProps[\"onToggle\"]>[0], techId: SkillId) => {\n const domain: Domain = store.getCurrentDomain() || FALLBACK_DOMAIN;\n const cat = matrix.categories[categoryId];\n const exclusive = cat?.exclusive ?? true;\n store.toggleTechnology(domain, categoryId, techId, exclusive);\n },\n [store],\n );\n\n const onContinue = useCallback(() => {\n if (!store.nextDomain()) {\n store.setStep(\"sources\");\n }\n }, [store]);\n\n const onBack = useCallback(() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }, [store]);\n\n return {\n domain: activeDomain,\n selectedDomains: effectiveDomains,\n selections: store.domainSelections[activeDomain] || {},\n allSelections,\n showLabels: store.showLabels,\n filterIncompatible: store.filterIncompatible,\n installedSkillIds,\n onToggle,\n onToggleLabels: store.toggleShowLabels,\n onToggleFilterIncompatible: store.toggleFilterIncompatible,\n onContinue,\n onBack,\n };\n}\n"],"mappings":"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","names":["useCallback","useCallback"]}
|
package/dist/chunk-ZPPHXXAP.js
DELETED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
useModalState
|
|
4
|
-
} from "./chunk-F7T5AFFN.js";
|
|
5
|
-
import {
|
|
6
|
-
HOTKEY_ADD_SOURCE,
|
|
7
|
-
HOTKEY_SETTINGS,
|
|
8
|
-
KEY_LABEL_DEL,
|
|
9
|
-
KEY_LABEL_ENTER,
|
|
10
|
-
KEY_LABEL_ESC,
|
|
11
|
-
isHotkey
|
|
12
|
-
} from "./chunk-LDP5ASDM.js";
|
|
13
|
-
import {
|
|
14
|
-
useKeyboardNavigation
|
|
15
|
-
} from "./chunk-XVAQG2CV.js";
|
|
16
|
-
import {
|
|
17
|
-
DEFAULT_SOURCE,
|
|
18
|
-
addSource,
|
|
19
|
-
getSourceSummary,
|
|
20
|
-
removeSource
|
|
21
|
-
} from "./chunk-EEPELKOM.js";
|
|
22
|
-
import {
|
|
23
|
-
getErrorMessage,
|
|
24
|
-
verbose
|
|
25
|
-
} from "./chunk-PMM2MYMA.js";
|
|
26
|
-
import {
|
|
27
|
-
CLI_COLORS,
|
|
28
|
-
PUBLIC_SOURCE_NAME,
|
|
29
|
-
formatSourceDisplayName
|
|
30
|
-
} from "./chunk-76ADG7LQ.js";
|
|
31
|
-
|
|
32
|
-
// src/cli/components/wizard/step-settings.tsx
|
|
33
|
-
import { useState as useState3, useEffect, useCallback as useCallback3 } from "react";
|
|
34
|
-
import { Box, Text, useInput } from "ink";
|
|
35
|
-
|
|
36
|
-
// src/cli/components/hooks/use-source-operations.ts
|
|
37
|
-
import { useState, useCallback } from "react";
|
|
38
|
-
function useSourceOperations(projectDir, onReload) {
|
|
39
|
-
const [statusMessage, setStatusMessage] = useState(null);
|
|
40
|
-
const handleAdd = useCallback(
|
|
41
|
-
async (url) => {
|
|
42
|
-
try {
|
|
43
|
-
const result = await addSource(projectDir, url);
|
|
44
|
-
setStatusMessage({
|
|
45
|
-
text: `Added "${result.name}" (${result.skillCount} skills)`,
|
|
46
|
-
variant: "success"
|
|
47
|
-
});
|
|
48
|
-
await onReload();
|
|
49
|
-
} catch (error) {
|
|
50
|
-
const message = getErrorMessage(error);
|
|
51
|
-
setStatusMessage({ text: `Failed to add source: ${message}`, variant: "error" });
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
[projectDir, onReload]
|
|
55
|
-
);
|
|
56
|
-
const handleRemove = useCallback(
|
|
57
|
-
async (name) => {
|
|
58
|
-
try {
|
|
59
|
-
await removeSource(projectDir, name);
|
|
60
|
-
setStatusMessage({ text: `Removed "${name}"`, variant: "success" });
|
|
61
|
-
await onReload();
|
|
62
|
-
return true;
|
|
63
|
-
} catch (error) {
|
|
64
|
-
const message = getErrorMessage(error);
|
|
65
|
-
setStatusMessage({ text: `Failed to remove: ${message}`, variant: "error" });
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
[projectDir, onReload]
|
|
70
|
-
);
|
|
71
|
-
const clearStatus = useCallback(() => {
|
|
72
|
-
setStatusMessage(null);
|
|
73
|
-
}, []);
|
|
74
|
-
return { handleAdd, handleRemove, statusMessage, clearStatus };
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// src/cli/components/hooks/use-text-input.ts
|
|
78
|
-
import { useState as useState2, useCallback as useCallback2 } from "react";
|
|
79
|
-
var MIN_PRINTABLE_CHAR_CODE = 32;
|
|
80
|
-
var MAX_PRINTABLE_CHAR_CODE = 126;
|
|
81
|
-
function useTextInput(initialValue = "") {
|
|
82
|
-
const [value, setValue] = useState2(initialValue);
|
|
83
|
-
const handleInput = useCallback2((input, key) => {
|
|
84
|
-
if (key.backspace || key.delete) {
|
|
85
|
-
setValue((prev) => prev.slice(0, -1));
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
if (!key.ctrl && !key.meta && input && input.length === 1) {
|
|
89
|
-
const charCode = input.charCodeAt(0);
|
|
90
|
-
if (charCode >= MIN_PRINTABLE_CHAR_CODE && charCode <= MAX_PRINTABLE_CHAR_CODE) {
|
|
91
|
-
setValue((prev) => prev + input);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}, []);
|
|
95
|
-
return { value, setValue, handleInput };
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// src/cli/components/wizard/step-settings.tsx
|
|
99
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
100
|
-
var STATUS_VARIANT_COLORS = {
|
|
101
|
-
success: CLI_COLORS.SUCCESS,
|
|
102
|
-
error: CLI_COLORS.ERROR
|
|
103
|
-
};
|
|
104
|
-
var StepSettings = ({ projectDir, onClose }) => {
|
|
105
|
-
const [summary, setSummary] = useState3(null);
|
|
106
|
-
const addModal = useModalState();
|
|
107
|
-
const {
|
|
108
|
-
value: addSourceInput,
|
|
109
|
-
setValue: setAddSourceInput,
|
|
110
|
-
handleInput: handleTextInput
|
|
111
|
-
} = useTextInput("");
|
|
112
|
-
const [isLoading, setIsLoading] = useState3(true);
|
|
113
|
-
const loadSummary = useCallback3(async () => {
|
|
114
|
-
try {
|
|
115
|
-
const result = await getSourceSummary(projectDir);
|
|
116
|
-
setSummary(result);
|
|
117
|
-
} catch (error) {
|
|
118
|
-
verbose(`Failed to load source summary: ${getErrorMessage(error)}`);
|
|
119
|
-
setSummary({
|
|
120
|
-
sources: [{ name: PUBLIC_SOURCE_NAME, url: DEFAULT_SOURCE, enabled: true }],
|
|
121
|
-
localSkillCount: 0,
|
|
122
|
-
pluginSkillCount: 0
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
setIsLoading(false);
|
|
126
|
-
}, [projectDir]);
|
|
127
|
-
useEffect(() => {
|
|
128
|
-
void loadSummary();
|
|
129
|
-
}, [loadSummary]);
|
|
130
|
-
const { handleAdd, handleRemove, statusMessage, clearStatus } = useSourceOperations(
|
|
131
|
-
projectDir,
|
|
132
|
-
loadSummary
|
|
133
|
-
);
|
|
134
|
-
const sourceCount = summary?.sources.length ?? 0;
|
|
135
|
-
const { focusedIndex, setFocusedIndex } = useKeyboardNavigation(
|
|
136
|
-
sourceCount,
|
|
137
|
-
{ onEscape: onClose },
|
|
138
|
-
{ wrap: false, vimKeys: false, active: !addModal.isOpen }
|
|
139
|
-
);
|
|
140
|
-
useInput((input, key) => {
|
|
141
|
-
if (statusMessage) {
|
|
142
|
-
clearStatus();
|
|
143
|
-
}
|
|
144
|
-
if (addModal.isOpen) {
|
|
145
|
-
if (key.escape) {
|
|
146
|
-
addModal.close();
|
|
147
|
-
setAddSourceInput("");
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
if (key.return) {
|
|
151
|
-
if (addSourceInput.trim()) {
|
|
152
|
-
addModal.close();
|
|
153
|
-
setAddSourceInput("");
|
|
154
|
-
void handleAdd(addSourceInput.trim());
|
|
155
|
-
}
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
handleTextInput(input, key);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (key.return) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
if (key.backspace || key.delete) {
|
|
165
|
-
const source = summary?.sources[focusedIndex];
|
|
166
|
-
if (!source || source.name === PUBLIC_SOURCE_NAME) return;
|
|
167
|
-
void handleRemove(source.name).then((success) => {
|
|
168
|
-
if (success) {
|
|
169
|
-
setFocusedIndex((prev) => Math.max(0, prev - 1));
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
if (isHotkey(input, HOTKEY_ADD_SOURCE)) {
|
|
175
|
-
addModal.open(true);
|
|
176
|
-
setAddSourceInput("");
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
if (isLoading) {
|
|
180
|
-
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", paddingX: 2, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Loading sources..." }) });
|
|
181
|
-
}
|
|
182
|
-
const sourceElements = summary?.sources.map((source, index) => {
|
|
183
|
-
const isFocused = index === focusedIndex && !addModal.isOpen;
|
|
184
|
-
const isDefault = source.name === PUBLIC_SOURCE_NAME;
|
|
185
|
-
const checkmark = source.enabled ? "\u2713" : " ";
|
|
186
|
-
const displayName = isDefault ? formatSourceDisplayName(PUBLIC_SOURCE_NAME) : source.name;
|
|
187
|
-
const suffix = isDefault ? " (default)" : "";
|
|
188
|
-
return /* @__PURE__ */ jsxs(Box, { flexShrink: 0, children: [
|
|
189
|
-
/* @__PURE__ */ jsxs(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, bold: isFocused, children: [
|
|
190
|
-
isFocused ? ">" : " ",
|
|
191
|
-
" ",
|
|
192
|
-
checkmark,
|
|
193
|
-
" ",
|
|
194
|
-
displayName
|
|
195
|
-
] }),
|
|
196
|
-
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
197
|
-
" ",
|
|
198
|
-
source.url,
|
|
199
|
-
suffix
|
|
200
|
-
] })
|
|
201
|
-
] }, source.name);
|
|
202
|
-
});
|
|
203
|
-
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, children: [
|
|
204
|
-
/* @__PURE__ */ jsx(Box, { marginTop: 1 }),
|
|
205
|
-
/* @__PURE__ */ jsx(Text, { bold: true, children: "Configured marketplaces:" }),
|
|
206
|
-
/* @__PURE__ */ jsx(
|
|
207
|
-
Box,
|
|
208
|
-
{
|
|
209
|
-
flexDirection: "column",
|
|
210
|
-
borderStyle: "round",
|
|
211
|
-
borderColor: CLI_COLORS.NEUTRAL,
|
|
212
|
-
paddingX: 1,
|
|
213
|
-
marginTop: 1,
|
|
214
|
-
children: /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: sourceElements })
|
|
215
|
-
}
|
|
216
|
-
),
|
|
217
|
-
/* @__PURE__ */ jsx(
|
|
218
|
-
Box,
|
|
219
|
-
{
|
|
220
|
-
flexDirection: "column",
|
|
221
|
-
borderStyle: "round",
|
|
222
|
-
borderColor: addModal.isOpen ? CLI_COLORS.PRIMARY : CLI_COLORS.NEUTRAL,
|
|
223
|
-
paddingX: 1,
|
|
224
|
-
marginTop: 1,
|
|
225
|
-
children: /* @__PURE__ */ jsxs(Text, { color: addModal.isOpen ? CLI_COLORS.PRIMARY : void 0, children: [
|
|
226
|
-
"+ Add source: ",
|
|
227
|
-
addModal.isOpen ? addSourceInput : "",
|
|
228
|
-
addModal.isOpen ? "\u2588" : ""
|
|
229
|
-
] })
|
|
230
|
-
}
|
|
231
|
-
),
|
|
232
|
-
statusMessage && /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: STATUS_VARIANT_COLORS[statusMessage.variant], children: statusMessage.text }) }),
|
|
233
|
-
/* @__PURE__ */ jsxs(Box, { marginTop: 1, flexDirection: "column", children: [
|
|
234
|
-
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
235
|
-
"Local skills: ",
|
|
236
|
-
summary?.localSkillCount ?? 0,
|
|
237
|
-
" in .claude/skills/"
|
|
238
|
-
] }),
|
|
239
|
-
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
240
|
-
"Plugins: ",
|
|
241
|
-
summary?.pluginSkillCount ?? 0,
|
|
242
|
-
" from installed plugins"
|
|
243
|
-
] })
|
|
244
|
-
] }),
|
|
245
|
-
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: addModal.isOpen ? `${KEY_LABEL_ENTER} submit ${KEY_LABEL_ESC} cancel` : `${HOTKEY_ADD_SOURCE.label} add ${KEY_LABEL_DEL} remove ${KEY_LABEL_ESC} or ${HOTKEY_SETTINGS.label} to close` }) })
|
|
246
|
-
] });
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
export {
|
|
250
|
-
StepSettings
|
|
251
|
-
};
|
|
252
|
-
//# sourceMappingURL=chunk-ZPPHXXAP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/step-settings.tsx","../src/cli/components/hooks/use-source-operations.ts","../src/cli/components/hooks/use-text-input.ts"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { CLI_COLORS, formatSourceDisplayName, PUBLIC_SOURCE_NAME } from \"../../consts.js\";\nimport { getSourceSummary, type SourceSummary } from \"../../lib/configuration/source-manager.js\";\nimport { DEFAULT_SOURCE } from \"../../lib/configuration/config.js\";\nimport { useKeyboardNavigation } from \"../hooks/use-keyboard-navigation.js\";\nimport { useModalState } from \"../hooks/use-modal-state.js\";\nimport { useSourceOperations, type StatusVariant } from \"../hooks/use-source-operations.js\";\nimport { useTextInput } from \"../hooks/use-text-input.js\";\nimport { verbose } from \"../../utils/logger.js\";\nimport { getErrorMessage } from \"../../utils/errors.js\";\nimport {\n HOTKEY_ADD_SOURCE,\n HOTKEY_SETTINGS,\n KEY_LABEL_DEL,\n KEY_LABEL_ENTER,\n KEY_LABEL_ESC,\n isHotkey,\n} from \"./hotkeys.js\";\n\n/** Maps a status variant to its CLI color at the render boundary. */\nconst STATUS_VARIANT_COLORS = {\n success: CLI_COLORS.SUCCESS,\n error: CLI_COLORS.ERROR,\n} as const satisfies Record<StatusVariant, string>;\n\nexport type StepSettingsProps = {\n projectDir: string;\n onClose: () => void;\n};\n\nexport const StepSettings: React.FC<StepSettingsProps> = ({ projectDir, onClose }) => {\n const [summary, setSummary] = useState<SourceSummary | null>(null);\n const addModal = useModalState();\n const {\n value: addSourceInput,\n setValue: setAddSourceInput,\n handleInput: handleTextInput,\n } = useTextInput(\"\");\n const [isLoading, setIsLoading] = useState(true);\n\n const loadSummary = useCallback(async () => {\n try {\n const result = await getSourceSummary(projectDir);\n setSummary(result);\n } catch (error) {\n verbose(`Failed to load source summary: ${getErrorMessage(error)}`);\n setSummary({\n sources: [{ name: PUBLIC_SOURCE_NAME, url: DEFAULT_SOURCE, enabled: true }],\n localSkillCount: 0,\n pluginSkillCount: 0,\n });\n }\n setIsLoading(false);\n }, [projectDir]);\n\n useEffect(() => {\n void loadSummary();\n }, [loadSummary]);\n\n const { handleAdd, handleRemove, statusMessage, clearStatus } = useSourceOperations(\n projectDir,\n loadSummary,\n );\n\n const sourceCount = summary?.sources.length ?? 0;\n\n const { focusedIndex, setFocusedIndex } = useKeyboardNavigation(\n sourceCount,\n { onEscape: onClose },\n { wrap: false, vimKeys: false, active: !addModal.isOpen },\n );\n\n useInput((input, key) => {\n if (statusMessage) {\n clearStatus();\n }\n\n if (addModal.isOpen) {\n if (key.escape) {\n addModal.close();\n setAddSourceInput(\"\");\n return;\n }\n\n if (key.return) {\n if (addSourceInput.trim()) {\n addModal.close();\n setAddSourceInput(\"\");\n void handleAdd(addSourceInput.trim());\n }\n return;\n }\n\n handleTextInput(input, key);\n return;\n }\n\n if (key.return) {\n // Claimed so Enter cannot fall through to the hotkeys below; toggling a source\n // enabled/disabled is not wired up yet.\n return;\n }\n\n if (key.backspace || key.delete) {\n const source = summary?.sources[focusedIndex];\n if (!source || source.name === PUBLIC_SOURCE_NAME) return;\n void handleRemove(source.name).then((success) => {\n if (success) {\n setFocusedIndex((prev) => Math.max(0, prev - 1));\n }\n });\n return;\n }\n\n if (isHotkey(input, HOTKEY_ADD_SOURCE)) {\n addModal.open(true);\n setAddSourceInput(\"\");\n }\n });\n\n if (isLoading) {\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Text dimColor>Loading sources...</Text>\n </Box>\n );\n }\n\n const sourceElements = summary?.sources.map((source, index) => {\n const isFocused = index === focusedIndex && !addModal.isOpen;\n const isDefault = source.name === PUBLIC_SOURCE_NAME;\n const checkmark = source.enabled ? \"\\u2713\" : \" \";\n const displayName = isDefault ? formatSourceDisplayName(PUBLIC_SOURCE_NAME) : source.name;\n const suffix = isDefault ? \" (default)\" : \"\";\n\n return (\n <Box key={source.name} flexShrink={0}>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined} bold={isFocused}>\n {isFocused ? \">\" : \" \"} {checkmark} {displayName}\n </Text>\n <Text dimColor>\n {\" \"}\n {source.url}\n {suffix}\n </Text>\n </Box>\n );\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Box marginTop={1} />\n\n <Text bold>Configured marketplaces:</Text>\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={CLI_COLORS.NEUTRAL}\n paddingX={1}\n marginTop={1}\n >\n <Box flexDirection=\"column\">{sourceElements}</Box>\n </Box>\n\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={addModal.isOpen ? CLI_COLORS.PRIMARY : CLI_COLORS.NEUTRAL}\n paddingX={1}\n marginTop={1}\n >\n <Text color={addModal.isOpen ? CLI_COLORS.PRIMARY : undefined}>\n + Add source: {addModal.isOpen ? addSourceInput : \"\"}\n {addModal.isOpen ? \"\\u2588\" : \"\"}\n </Text>\n </Box>\n\n {statusMessage && (\n <Box marginTop={1}>\n <Text color={STATUS_VARIANT_COLORS[statusMessage.variant]}>{statusMessage.text}</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>Local skills: {summary?.localSkillCount ?? 0} in .claude/skills/</Text>\n <Text dimColor>Plugins: {summary?.pluginSkillCount ?? 0} from installed plugins</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {addModal.isOpen\n ? `${KEY_LABEL_ENTER} submit ${KEY_LABEL_ESC} cancel`\n : `${HOTKEY_ADD_SOURCE.label} add ${KEY_LABEL_DEL} remove ${KEY_LABEL_ESC} or ${HOTKEY_SETTINGS.label} to close`}\n </Text>\n </Box>\n </Box>\n );\n};\n","import { useState, useCallback } from \"react\";\nimport { getErrorMessage } from \"../../utils/errors.js\";\nimport { addSource, removeSource } from \"../../lib/configuration/source-manager.js\";\n\n/** Status variant — mapped to a CLI color at the render site (see step-settings). */\nexport type StatusVariant = \"success\" | \"error\";\ntype StatusMessage = { text: string; variant: StatusVariant } | null;\n\ntype UseSourceOperationsResult = {\n handleAdd: (url: string) => Promise<void>;\n handleRemove: (name: string) => Promise<boolean>;\n statusMessage: StatusMessage;\n clearStatus: () => void;\n};\n\nexport function useSourceOperations(\n projectDir: string,\n onReload: () => Promise<void>,\n): UseSourceOperationsResult {\n const [statusMessage, setStatusMessage] = useState<StatusMessage>(null);\n\n const handleAdd = useCallback(\n async (url: string) => {\n try {\n const result = await addSource(projectDir, url);\n setStatusMessage({\n text: `Added \"${result.name}\" (${result.skillCount} skills)`,\n variant: \"success\",\n });\n await onReload();\n } catch (error) {\n const message = getErrorMessage(error);\n setStatusMessage({ text: `Failed to add source: ${message}`, variant: \"error\" });\n }\n },\n [projectDir, onReload],\n );\n\n const handleRemove = useCallback(\n async (name: string): Promise<boolean> => {\n try {\n await removeSource(projectDir, name);\n setStatusMessage({ text: `Removed \"${name}\"`, variant: \"success\" });\n await onReload();\n return true;\n } catch (error) {\n const message = getErrorMessage(error);\n setStatusMessage({ text: `Failed to remove: ${message}`, variant: \"error\" });\n return false;\n }\n },\n [projectDir, onReload],\n );\n\n const clearStatus = useCallback(() => {\n setStatusMessage(null);\n }, []);\n\n return { handleAdd, handleRemove, statusMessage, clearStatus };\n}\n","import { useState, useCallback } from \"react\";\nimport type { Key } from \"ink\";\n\nconst MIN_PRINTABLE_CHAR_CODE = 32;\nconst MAX_PRINTABLE_CHAR_CODE = 126;\n\ntype UseTextInputResult = {\n value: string;\n setValue: (value: string) => void;\n handleInput: (input: string, key: Key) => void;\n};\n\n/**\n * Encapsulates text input handling for terminal UIs:\n * backspace/delete to remove the last character, and\n * printable ASCII character filtering (codes 32-126).\n */\nexport function useTextInput(initialValue = \"\"): UseTextInputResult {\n const [value, setValue] = useState(initialValue);\n\n const handleInput = useCallback((input: string, key: Key) => {\n if (key.backspace || key.delete) {\n setValue((prev) => prev.slice(0, -1));\n return;\n }\n\n if (!key.ctrl && !key.meta && input && input.length === 1) {\n const charCode = input.charCodeAt(0);\n if (charCode >= MIN_PRINTABLE_CHAR_CODE && charCode <= MAX_PRINTABLE_CHAR_CODE) {\n setValue((prev) => prev + input);\n }\n }\n }, []);\n\n return { value, setValue, handleInput };\n}\n"],"mappings":"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","names":["useState","useCallback","useState","useCallback","useState","useCallback"]}
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
INFO_MESSAGES,
|
|
4
|
-
STATUS_MESSAGES
|
|
5
|
-
} from "../../chunk-ODNDXQH2.js";
|
|
6
|
-
import {
|
|
7
|
-
BaseCommand,
|
|
8
|
-
EXIT_CODES
|
|
9
|
-
} from "../../chunk-KR65TPKC.js";
|
|
10
|
-
import "../../chunk-ZL7PFNHN.js";
|
|
11
|
-
import {
|
|
12
|
-
IMPORT_DEFAULTS,
|
|
13
|
-
computeFileHash,
|
|
14
|
-
fetchFromSource,
|
|
15
|
-
getCurrentDate,
|
|
16
|
-
stripYamlSchemaComment,
|
|
17
|
-
toTitleCase,
|
|
18
|
-
writeMetadataYaml
|
|
19
|
-
} from "../../chunk-EEPELKOM.js";
|
|
20
|
-
import {
|
|
21
|
-
copy,
|
|
22
|
-
directoryExists,
|
|
23
|
-
ensureDir,
|
|
24
|
-
fileExists,
|
|
25
|
-
getErrorMessage,
|
|
26
|
-
importedSkillMetadataSchema,
|
|
27
|
-
listDirectories,
|
|
28
|
-
readFile,
|
|
29
|
-
warn
|
|
30
|
-
} from "../../chunk-PMM2MYMA.js";
|
|
31
|
-
import "../../chunk-WKTHWQKM.js";
|
|
32
|
-
import "../../chunk-VASLW636.js";
|
|
33
|
-
import {
|
|
34
|
-
DEFAULT_SKILLS_SUBDIR,
|
|
35
|
-
GITHUB_SOURCE,
|
|
36
|
-
LOCAL_SKILLS_PATH,
|
|
37
|
-
STANDARD_FILES
|
|
38
|
-
} from "../../chunk-76ADG7LQ.js";
|
|
39
|
-
import "../../chunk-UBEDZ4FD.js";
|
|
40
|
-
|
|
41
|
-
// src/cli/commands/import/skill.ts
|
|
42
|
-
import { Args, Flags } from "@oclif/core";
|
|
43
|
-
import path from "path";
|
|
44
|
-
import { parse as parseYaml } from "yaml";
|
|
45
|
-
var ImportSkill = class _ImportSkill extends BaseCommand {
|
|
46
|
-
static summary = "Import a skill from a third-party GitHub repository";
|
|
47
|
-
static description = "Download and import skills from external GitHub repositories into your local .claude/skills/ directory. Supports importing specific skills or listing available skills.";
|
|
48
|
-
static examples = [
|
|
49
|
-
{
|
|
50
|
-
description: "List available skills from a repository",
|
|
51
|
-
command: "<%= config.bin %> import skill github:vercel-labs/agent-skills --list"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
description: "Import a specific skill",
|
|
55
|
-
command: "<%= config.bin %> import skill github:vercel-labs/agent-skills --skill react-best-practices"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
description: "Import all skills from a repository",
|
|
59
|
-
command: "<%= config.bin %> import skill github:vercel-labs/agent-skills --all"
|
|
60
|
-
}
|
|
61
|
-
];
|
|
62
|
-
static args = {
|
|
63
|
-
source: Args.string({
|
|
64
|
-
description: "GitHub repository source (github:owner/repo, https://github.com/owner/repo, or owner/repo)",
|
|
65
|
-
required: true
|
|
66
|
-
})
|
|
67
|
-
};
|
|
68
|
-
// Override parent baseFlags to drop --source (positional source arg IS the source)
|
|
69
|
-
static baseFlags = {};
|
|
70
|
-
static flags = {
|
|
71
|
-
skill: Flags.string({
|
|
72
|
-
char: "n",
|
|
73
|
-
description: "Name of the specific skill to import",
|
|
74
|
-
required: false
|
|
75
|
-
}),
|
|
76
|
-
all: Flags.boolean({
|
|
77
|
-
char: "a",
|
|
78
|
-
description: "Import all skills from the repository",
|
|
79
|
-
default: false
|
|
80
|
-
}),
|
|
81
|
-
list: Flags.boolean({
|
|
82
|
-
char: "l",
|
|
83
|
-
description: "List available skills without importing",
|
|
84
|
-
default: false
|
|
85
|
-
}),
|
|
86
|
-
force: Flags.boolean({
|
|
87
|
-
char: "f",
|
|
88
|
-
description: "Overwrite existing skills",
|
|
89
|
-
default: false
|
|
90
|
-
})
|
|
91
|
-
};
|
|
92
|
-
async run() {
|
|
93
|
-
const { args, flags } = await this.parse(_ImportSkill);
|
|
94
|
-
const projectDir = process.cwd();
|
|
95
|
-
this.printHeader();
|
|
96
|
-
this.validateFlags(flags);
|
|
97
|
-
const { gigetSource, displaySource } = parseGitHubSource(args.source);
|
|
98
|
-
this.log(`Source: ${displaySource}`);
|
|
99
|
-
const repoPath = await this.fetchRepository(gigetSource, args.source);
|
|
100
|
-
const skillsDir = this.resolveSkillsDir(repoPath);
|
|
101
|
-
const availableSkills = await this.discoverAndValidate(skillsDir);
|
|
102
|
-
if (flags.list) {
|
|
103
|
-
this.listAvailableSkills(availableSkills);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const skillsToImport = this.resolveSkillsToImport(flags, availableSkills);
|
|
107
|
-
await this.importSkills(skillsToImport, skillsDir, projectDir, displaySource, flags.force);
|
|
108
|
-
}
|
|
109
|
-
printHeader() {
|
|
110
|
-
this.log("");
|
|
111
|
-
this.log("Import Third-Party Skill");
|
|
112
|
-
this.log("");
|
|
113
|
-
}
|
|
114
|
-
validateFlags(flags) {
|
|
115
|
-
if (!flags.list && !flags.skill && !flags.all) {
|
|
116
|
-
this.error("Please specify --skill <name>, --all, or --list to list available skills", {
|
|
117
|
-
exit: EXIT_CODES.INVALID_ARGS
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
if (flags.skill && flags.all) {
|
|
121
|
-
this.error("Cannot use --skill and --all together", {
|
|
122
|
-
exit: EXIT_CODES.INVALID_ARGS
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
async fetchRepository(gigetSource, sourceArg) {
|
|
127
|
-
this.log(STATUS_MESSAGES.FETCHING_REPOSITORY);
|
|
128
|
-
try {
|
|
129
|
-
const result = await fetchSkillSource({ gigetSource });
|
|
130
|
-
this.log(result.fromCache ? "Using cached source" : "Downloaded fresh copy");
|
|
131
|
-
return result.path;
|
|
132
|
-
} catch (error) {
|
|
133
|
-
this.error(`Failed to fetch ${sourceArg}: ${getErrorMessage(error)}`, {
|
|
134
|
-
exit: EXIT_CODES.NETWORK_ERROR
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
resolveSkillsDir(repoPath) {
|
|
139
|
-
return path.resolve(path.join(repoPath, DEFAULT_SKILLS_SUBDIR));
|
|
140
|
-
}
|
|
141
|
-
async discoverAndValidate(skillsDir) {
|
|
142
|
-
if (!await directoryExists(skillsDir)) {
|
|
143
|
-
this.error(
|
|
144
|
-
`Skills directory not found: ${DEFAULT_SKILLS_SUBDIR}
|
|
145
|
-
The repository doesn't have a '${DEFAULT_SKILLS_SUBDIR}' directory.`,
|
|
146
|
-
{ exit: EXIT_CODES.INVALID_ARGS }
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
const availableSkills = await discoverValidSkills(skillsDir);
|
|
150
|
-
if (availableSkills.length === 0) {
|
|
151
|
-
this.error(
|
|
152
|
-
`No valid skills found in ${DEFAULT_SKILLS_SUBDIR}/
|
|
153
|
-
Skills must have a SKILL.md file.`,
|
|
154
|
-
{ exit: EXIT_CODES.ERROR }
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
return availableSkills;
|
|
158
|
-
}
|
|
159
|
-
listAvailableSkills(skills) {
|
|
160
|
-
this.log("");
|
|
161
|
-
this.log(`Available skills (${skills.length}):`);
|
|
162
|
-
this.log("");
|
|
163
|
-
for (const skill of skills) {
|
|
164
|
-
this.log(` - ${skill}`);
|
|
165
|
-
}
|
|
166
|
-
this.log("");
|
|
167
|
-
this.log("Use --skill <name> to import a specific skill, or --all to import all.");
|
|
168
|
-
}
|
|
169
|
-
resolveSkillsToImport(flags, availableSkills) {
|
|
170
|
-
if (flags.all) {
|
|
171
|
-
return availableSkills;
|
|
172
|
-
}
|
|
173
|
-
if (flags.skill) {
|
|
174
|
-
if (!availableSkills.includes(flags.skill)) {
|
|
175
|
-
this.error(
|
|
176
|
-
`Skill '${flags.skill}' not found in repository.
|
|
177
|
-
Available skills: ${availableSkills.join(", ")}
|
|
178
|
-
Use --list to see all available skills.`,
|
|
179
|
-
{ exit: EXIT_CODES.INVALID_ARGS }
|
|
180
|
-
);
|
|
181
|
-
}
|
|
182
|
-
return [flags.skill];
|
|
183
|
-
}
|
|
184
|
-
return [];
|
|
185
|
-
}
|
|
186
|
-
async importSkills(skillsToImport, skillsDir, projectDir, displaySource, force) {
|
|
187
|
-
const destDir = path.join(projectDir, LOCAL_SKILLS_PATH);
|
|
188
|
-
this.log("");
|
|
189
|
-
this.log(`Importing ${skillsToImport.length} skill(s)...`);
|
|
190
|
-
let imported = 0;
|
|
191
|
-
let skipped = 0;
|
|
192
|
-
for (const skillName of skillsToImport) {
|
|
193
|
-
const sourcePath = path.join(skillsDir, skillName);
|
|
194
|
-
const destPath = path.join(destDir, skillName);
|
|
195
|
-
if (await directoryExists(destPath)) {
|
|
196
|
-
if (!force) {
|
|
197
|
-
this.warn(`Skipping '${skillName}': already exists. Use --force to overwrite.`);
|
|
198
|
-
skipped++;
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
try {
|
|
203
|
-
await importSkillFromSource({ sourcePath, destPath, skillName, displaySource });
|
|
204
|
-
this.logSuccess(`Imported: ${skillName}`);
|
|
205
|
-
imported++;
|
|
206
|
-
} catch (error) {
|
|
207
|
-
this.warn(`Failed to import '${skillName}': ${getErrorMessage(error)}`);
|
|
208
|
-
skipped++;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
this.log("");
|
|
212
|
-
this.logSuccess(`Import complete: ${imported} imported, ${skipped} skipped`);
|
|
213
|
-
this.log(`Skills location: ${destDir}`);
|
|
214
|
-
this.log("");
|
|
215
|
-
this.log(INFO_MESSAGES.RUN_COMPILE);
|
|
216
|
-
this.log("");
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
function parseGitHubSource(source) {
|
|
220
|
-
if (source.startsWith(GITHUB_SOURCE.HTTPS_PREFIX)) {
|
|
221
|
-
const path2 = source.replace(GITHUB_SOURCE.HTTPS_PREFIX, "");
|
|
222
|
-
return {
|
|
223
|
-
gigetSource: `${GITHUB_SOURCE.GITHUB_PREFIX}${path2}`,
|
|
224
|
-
displaySource: source
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
if (source.startsWith(GITHUB_SOURCE.GITHUB_PREFIX) || source.startsWith(GITHUB_SOURCE.GH_PREFIX)) {
|
|
228
|
-
const normalized = source.startsWith(GITHUB_SOURCE.GH_PREFIX) ? GITHUB_SOURCE.GITHUB_PREFIX + source.slice(GITHUB_SOURCE.GH_PREFIX.length) : source;
|
|
229
|
-
return {
|
|
230
|
-
gigetSource: normalized,
|
|
231
|
-
displaySource: `${GITHUB_SOURCE.HTTPS_PREFIX}${normalized.replace(GITHUB_SOURCE.GITHUB_PREFIX, "")}`
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
if (source.includes("/") && !source.includes(":")) {
|
|
235
|
-
return {
|
|
236
|
-
gigetSource: `${GITHUB_SOURCE.GITHUB_PREFIX}${source}`,
|
|
237
|
-
displaySource: `${GITHUB_SOURCE.HTTPS_PREFIX}${source}`
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
gigetSource: source,
|
|
242
|
-
displaySource: source
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
async function fetchSkillSource(options) {
|
|
246
|
-
const result = await fetchFromSource(options.gigetSource);
|
|
247
|
-
return { path: result.path, fromCache: result.fromCache };
|
|
248
|
-
}
|
|
249
|
-
async function discoverValidSkills(skillsDir) {
|
|
250
|
-
const skillDirs = await listDirectories(skillsDir);
|
|
251
|
-
const checks = await Promise.all(
|
|
252
|
-
skillDirs.map(async (skillDir) => ({
|
|
253
|
-
skillDir,
|
|
254
|
-
hasSkillMd: await fileExists(path.join(skillsDir, skillDir, STANDARD_FILES.SKILL_MD))
|
|
255
|
-
}))
|
|
256
|
-
);
|
|
257
|
-
return checks.filter((c) => c.hasSkillMd).map((c) => c.skillDir).sort();
|
|
258
|
-
}
|
|
259
|
-
async function importSkillFromSource(options) {
|
|
260
|
-
const { sourcePath, destPath, skillName, displaySource } = options;
|
|
261
|
-
const skillMdPath = path.join(sourcePath, STANDARD_FILES.SKILL_MD);
|
|
262
|
-
if (!await fileExists(skillMdPath)) {
|
|
263
|
-
throw new Error(
|
|
264
|
-
`Missing required SKILL.md file at ${skillMdPath}
|
|
265
|
-
Every skill must have a SKILL.md file containing the skill's prompt content.
|
|
266
|
-
Create one with:
|
|
267
|
-
echo "# ${skillName}" > ${path.join(sourcePath, STANDARD_FILES.SKILL_MD)}`
|
|
268
|
-
);
|
|
269
|
-
}
|
|
270
|
-
const contentHash = await computeFileHash(skillMdPath);
|
|
271
|
-
await ensureDir(path.dirname(destPath));
|
|
272
|
-
await copy(sourcePath, destPath);
|
|
273
|
-
await injectImportedForkedFromMetadata(destPath, skillName, displaySource, contentHash);
|
|
274
|
-
}
|
|
275
|
-
async function injectImportedForkedFromMetadata(destPath, skillName, source, contentHash) {
|
|
276
|
-
const forkedFrom = {
|
|
277
|
-
source,
|
|
278
|
-
skillName,
|
|
279
|
-
contentHash,
|
|
280
|
-
date: getCurrentDate()
|
|
281
|
-
};
|
|
282
|
-
const yamlPath = path.join(destPath, STANDARD_FILES.METADATA_YAML);
|
|
283
|
-
const jsonPath = path.join(destPath, STANDARD_FILES.METADATA_JSON);
|
|
284
|
-
if (await fileExists(yamlPath)) {
|
|
285
|
-
return mergeForkedFromIntoYaml(yamlPath, forkedFrom);
|
|
286
|
-
}
|
|
287
|
-
if (await fileExists(jsonPath)) {
|
|
288
|
-
return convertJsonToYamlWithForkedFrom(jsonPath, yamlPath, forkedFrom);
|
|
289
|
-
}
|
|
290
|
-
return createMinimalMetadata(yamlPath, skillName, forkedFrom);
|
|
291
|
-
}
|
|
292
|
-
async function mergeForkedFromIntoYaml(yamlPath, forkedFrom) {
|
|
293
|
-
const rawContent = await readFile(yamlPath);
|
|
294
|
-
const { schemaComment, yamlContent } = stripYamlSchemaComment(rawContent);
|
|
295
|
-
const raw = parseYaml(yamlContent);
|
|
296
|
-
const parseResult = importedSkillMetadataSchema.safeParse(raw);
|
|
297
|
-
if (!parseResult.success) {
|
|
298
|
-
warn(
|
|
299
|
-
`Malformed metadata.yaml at ${yamlPath} \u2014 existing fields may be lost
|
|
300
|
-
Validation errors: ${parseResult.error.issues.map((i) => i.message).join(", ")}
|
|
301
|
-
Expected fields: displayName (string), cliDescription (string), category (string)
|
|
302
|
-
Validate your YAML syntax at https://yamllint.com`
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
const metadata = {
|
|
306
|
-
...parseResult.success ? parseResult.data : {},
|
|
307
|
-
forkedFrom
|
|
308
|
-
};
|
|
309
|
-
await writeMetadataYaml(yamlPath, metadata, schemaComment);
|
|
310
|
-
}
|
|
311
|
-
async function convertJsonToYamlWithForkedFrom(jsonPath, yamlPath, forkedFrom) {
|
|
312
|
-
const rawContent = await readFile(jsonPath);
|
|
313
|
-
let jsonParsed;
|
|
314
|
-
try {
|
|
315
|
-
jsonParsed = JSON.parse(rawContent);
|
|
316
|
-
} catch {
|
|
317
|
-
warn(
|
|
318
|
-
`Malformed JSON in ${jsonPath} \u2014 skipping metadata injection
|
|
319
|
-
Common issues: trailing commas, unquoted keys, single quotes instead of double quotes
|
|
320
|
-
Validate your JSON at https://jsonlint.com`
|
|
321
|
-
);
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
const jsonResult = importedSkillMetadataSchema.safeParse(jsonParsed);
|
|
325
|
-
const metadata = {
|
|
326
|
-
...jsonResult.success ? jsonResult.data : {},
|
|
327
|
-
forkedFrom
|
|
328
|
-
};
|
|
329
|
-
await writeMetadataYaml(yamlPath, metadata);
|
|
330
|
-
}
|
|
331
|
-
async function createMinimalMetadata(yamlPath, skillName, forkedFrom) {
|
|
332
|
-
const minimalMetadata = {
|
|
333
|
-
displayName: toTitleCase(skillName),
|
|
334
|
-
cliDescription: "Imported from third-party repository",
|
|
335
|
-
category: IMPORT_DEFAULTS.CATEGORY,
|
|
336
|
-
author: IMPORT_DEFAULTS.AUTHOR,
|
|
337
|
-
forkedFrom
|
|
338
|
-
};
|
|
339
|
-
await writeMetadataYaml(yamlPath, minimalMetadata);
|
|
340
|
-
}
|
|
341
|
-
export {
|
|
342
|
-
ImportSkill as default
|
|
343
|
-
};
|
|
344
|
-
//# sourceMappingURL=skill.js.map
|