agents-inc 0.152.1 → 0.153.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 +33 -0
- package/README.md +31 -35
- package/dist/{chunk-LDP5ASDM.js → chunk-2HC2SNRP.js} +2 -15
- package/dist/chunk-2HC2SNRP.js.map +1 -0
- package/dist/{chunk-WKTHWQKM.js → chunk-35VOK7XE.js} +1338 -2573
- package/dist/chunk-35VOK7XE.js.map +1 -0
- package/dist/{chunk-SX5H6TSC.js → chunk-4VYALFQZ.js} +11 -8
- package/dist/chunk-4VYALFQZ.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-LZ52XEPR.js → chunk-ACKC577F.js} +7 -6
- package/dist/chunk-ACKC577F.js.map +1 -0
- package/dist/{chunk-XHUODHZ4.js → chunk-BMGBA6HJ.js} +22 -49
- package/dist/chunk-BMGBA6HJ.js.map +1 -0
- package/dist/{chunk-FVDKAVOL.js → chunk-EFU6P3B7.js} +18 -51
- package/dist/chunk-EFU6P3B7.js.map +1 -0
- package/dist/{chunk-STMHDOZD.js → chunk-F7Z5I6GU.js} +12 -9
- package/dist/chunk-F7Z5I6GU.js.map +1 -0
- package/dist/{chunk-E5X6RJ4E.js → chunk-FIHTAFST.js} +29 -26
- package/dist/chunk-FIHTAFST.js.map +1 -0
- package/dist/{chunk-QZZJFYUQ.js → chunk-FRWKCE6R.js} +3 -3
- package/dist/chunk-FRWKCE6R.js.map +1 -0
- package/dist/{chunk-5UWKOOIS.js → chunk-HEBPKK5L.js} +129 -195
- package/dist/chunk-HEBPKK5L.js.map +1 -0
- package/dist/{chunk-MJ2KHG24.js → chunk-IO4VEW5U.js} +6 -6
- package/dist/{chunk-MJ2KHG24.js.map → chunk-IO4VEW5U.js.map} +1 -1
- package/dist/{chunk-TUPYW2IQ.js → chunk-JC7DBPRD.js} +9 -12
- package/dist/chunk-JC7DBPRD.js.map +1 -0
- package/dist/{chunk-5GUOIJSG.js → chunk-JFAUQDZM.js} +3 -15
- package/dist/chunk-JFAUQDZM.js.map +1 -0
- package/dist/{chunk-ZL7PFNHN.js → chunk-K3O3YQYG.js} +2 -2
- package/dist/{chunk-SKQWRUPX.js → chunk-K7PJDWER.js} +59 -33
- package/dist/chunk-K7PJDWER.js.map +1 -0
- package/dist/{chunk-MVR3SYMN.js → chunk-KET3EVGX.js} +4 -3
- package/dist/{chunk-MVR3SYMN.js.map → chunk-KET3EVGX.js.map} +1 -1
- package/dist/{chunk-MWG4VU64.js → chunk-M5HSTNYU.js} +50 -56
- package/dist/chunk-M5HSTNYU.js.map +1 -0
- 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-IHUY4M22.js → chunk-NXGMM5YN.js} +4 -4
- package/dist/chunk-NXQAY5U7.js +18441 -0
- package/dist/chunk-NXQAY5U7.js.map +1 -0
- 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-PZIZNMHK.js → chunk-ORJ5Y222.js} +159 -138
- package/dist/chunk-ORJ5Y222.js.map +1 -0
- 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-MM7CTTAV.js → chunk-Q5FLW4JG.js} +2 -2
- package/dist/{chunk-MM7CTTAV.js.map → chunk-Q5FLW4JG.js.map} +1 -1
- package/dist/{chunk-GRVKW3CC.js → chunk-R4SEU3DF.js} +3 -2
- package/dist/{chunk-GRVKW3CC.js.map → chunk-R4SEU3DF.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-SBHBBZKF.js → chunk-REKOWTIB.js} +25 -120
- package/dist/chunk-REKOWTIB.js.map +1 -0
- package/dist/chunk-TY6CAOL7.js +40 -0
- package/dist/chunk-TY6CAOL7.js.map +1 -0
- package/dist/{chunk-BNSRA6HL.js → chunk-U2DNAHFE.js} +39 -176
- package/dist/chunk-U2DNAHFE.js.map +1 -0
- package/dist/{chunk-PMM2MYMA.js → chunk-U2YSGBHA.js} +624 -349
- package/dist/chunk-U2YSGBHA.js.map +1 -0
- package/dist/{chunk-DTSG5XZB.js → chunk-V3ENMW7G.js} +3 -3
- package/dist/{chunk-L7SZXUBJ.js → chunk-VECFAKM5.js} +7 -6
- package/dist/{chunk-L7SZXUBJ.js.map → chunk-VECFAKM5.js.map} +1 -1
- package/dist/chunk-VGEBYCQZ.js +59 -0
- package/dist/chunk-VGEBYCQZ.js.map +1 -0
- package/dist/chunk-VZRO7RYT.js +3694 -0
- package/dist/chunk-VZRO7RYT.js.map +1 -0
- package/dist/{chunk-LASI35KT.js → chunk-WDAO3RUY.js} +14 -28
- package/dist/chunk-WDAO3RUY.js.map +1 -0
- package/dist/{chunk-MQ7FLIYS.js → chunk-WG6V6VJV.js} +3 -2
- package/dist/{chunk-MQ7FLIYS.js.map → chunk-WG6V6VJV.js.map} +1 -1
- package/dist/chunk-X5XJ6WKO.js +284 -0
- package/dist/chunk-X5XJ6WKO.js.map +1 -0
- package/dist/{chunk-RNJWAKMO.js → chunk-XGMOXMS4.js} +9 -8
- package/dist/chunk-XGMOXMS4.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-QRDTLVXG.js → chunk-ZNDLUWWD.js} +9 -22
- package/dist/chunk-ZNDLUWWD.js.map +1 -0
- package/dist/commands/build/marketplace.js +114 -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 +97 -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 +169 -208
- 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 +20 -81
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +25 -31
- 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-KF2RAVD3.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-DGXGBU3Q.js +15 -0
- package/dist/{loader-5JP4S7CJ.js → loader-4U7UCE2Y.js} +7 -5
- package/dist/recompile-project-agents-CJVBAWDJ.js +20 -0
- package/dist/{source-loader-MZYCPL2S.js → source-loader-ZNSYJJCI.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/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.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-NXGMM5YN.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-KF2RAVD3.js.map} +0 -0
- /package/dist/{components/wizard/search-modal.js.map → load-agent-defs-DGXGBU3Q.js.map} +0 -0
- /package/dist/{components/wizard/selection-card.js.map → loader-4U7UCE2Y.js.map} +0 -0
- /package/dist/{components/wizard/step-settings.js.map → recompile-project-agents-CJVBAWDJ.js.map} +0 -0
- /package/dist/{copy-local-skills-6EMVN7RB.js.map → source-loader-ZNSYJJCI.js.map} +0 -0
|
@@ -4,36 +4,27 @@ import {
|
|
|
4
4
|
} from "./chunk-TSIU7DME.js";
|
|
5
5
|
import {
|
|
6
6
|
CategoryGrid
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZNDLUWWD.js";
|
|
8
8
|
import {
|
|
9
9
|
buildCategoriesForDomain,
|
|
10
10
|
useWizardStore
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HEBPKK5L.js";
|
|
12
12
|
|
|
13
13
|
// src/cli/components/wizard/step-build.tsx
|
|
14
14
|
import { Box, useInput } from "ink";
|
|
15
15
|
import { useCallback, useMemo as useMemo2 } from "react";
|
|
16
16
|
|
|
17
|
-
// src/cli/components/hooks/use-
|
|
17
|
+
// src/cli/components/hooks/use-category-rows.ts
|
|
18
18
|
import { useMemo } from "react";
|
|
19
|
-
function
|
|
19
|
+
function useCategoryRows({
|
|
20
20
|
domain,
|
|
21
21
|
allSelections,
|
|
22
|
-
selections,
|
|
23
22
|
installedSkillIds,
|
|
24
|
-
skillConfigs
|
|
25
|
-
filterIncompatible
|
|
23
|
+
skillConfigs
|
|
26
24
|
}) {
|
|
27
25
|
return useMemo(
|
|
28
|
-
() => buildCategoriesForDomain(
|
|
29
|
-
|
|
30
|
-
allSelections,
|
|
31
|
-
selections,
|
|
32
|
-
installedSkillIds,
|
|
33
|
-
skillConfigs,
|
|
34
|
-
filterIncompatible
|
|
35
|
-
),
|
|
36
|
-
[domain, allSelections, selections, installedSkillIds, skillConfigs, filterIncompatible]
|
|
26
|
+
() => buildCategoriesForDomain(domain, allSelections, installedSkillIds, skillConfigs),
|
|
27
|
+
[domain, allSelections, installedSkillIds, skillConfigs]
|
|
37
28
|
);
|
|
38
29
|
}
|
|
39
30
|
|
|
@@ -41,14 +32,11 @@ function useFrameworkFiltering({
|
|
|
41
32
|
import { jsx } from "react/jsx-runtime";
|
|
42
33
|
var StepBuild = ({
|
|
43
34
|
domain: activeDomain,
|
|
44
|
-
selections,
|
|
45
35
|
allSelections,
|
|
46
36
|
showLabels,
|
|
47
|
-
filterIncompatible,
|
|
48
37
|
installedSkillIds,
|
|
49
38
|
onToggle,
|
|
50
39
|
onToggleLabels,
|
|
51
|
-
onToggleFilterIncompatible,
|
|
52
40
|
onContinue,
|
|
53
41
|
onBack
|
|
54
42
|
}) => {
|
|
@@ -58,22 +46,21 @@ var StepBuild = ({
|
|
|
58
46
|
(id) => useWizardStore.getState().setFocusedSkillId(id),
|
|
59
47
|
[]
|
|
60
48
|
);
|
|
61
|
-
const categories =
|
|
49
|
+
const categories = useCategoryRows({
|
|
62
50
|
domain: activeDomain,
|
|
63
51
|
allSelections,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
skillConfigs,
|
|
67
|
-
filterIncompatible
|
|
52
|
+
...installedSkillIds !== void 0 && { installedSkillIds },
|
|
53
|
+
skillConfigs
|
|
68
54
|
});
|
|
69
55
|
const { initialRow, initialCol } = useMemo2(() => {
|
|
70
56
|
const skillId = useWizardStore.getState().focusedSkillId;
|
|
71
57
|
if (!skillId) return { initialRow: 0, initialCol: 0 };
|
|
72
58
|
const row = categories.findIndex((cat) => cat.options.some((o) => o.id === skillId));
|
|
73
|
-
|
|
59
|
+
const focusedCategory = categories[row];
|
|
60
|
+
if (!focusedCategory) return { initialRow: 0, initialCol: 0 };
|
|
74
61
|
return {
|
|
75
62
|
initialRow: row,
|
|
76
|
-
initialCol:
|
|
63
|
+
initialCol: focusedCategory.options.findIndex((o) => o.id === skillId)
|
|
77
64
|
};
|
|
78
65
|
}, [categories]);
|
|
79
66
|
useInput((_input, key) => {
|
|
@@ -93,7 +80,6 @@ var StepBuild = ({
|
|
|
93
80
|
defaultFocusedCol: initialCol,
|
|
94
81
|
onToggle,
|
|
95
82
|
onToggleLabels,
|
|
96
|
-
onToggleFilterIncompatible,
|
|
97
83
|
onFocusedSkillChange: handleFocusedSkillChange
|
|
98
84
|
},
|
|
99
85
|
activeDomain
|
|
@@ -103,4 +89,4 @@ var StepBuild = ({
|
|
|
103
89
|
export {
|
|
104
90
|
StepBuild
|
|
105
91
|
};
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
92
|
+
//# sourceMappingURL=chunk-WDAO3RUY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-build.tsx","../src/cli/components/hooks/use-category-rows.ts"],"sourcesContent":["import { Box, useInput } from \"ink\";\nimport React, { useCallback, useMemo } from \"react\";\nimport type { Domain, SkillId, Category } from \"../../types/index.js\";\nimport { useCategoryRows } from \"../hooks/use-category-rows.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { CategoryGrid } from \"./category-grid.js\";\n\nexport type StepBuildProps = {\n domain: Domain;\n selectedDomains: Domain[];\n allSelections: SkillId[];\n showLabels: boolean;\n /** Skill IDs already installed on disk, shown with a dimmed checkmark */\n installedSkillIds?: SkillId[] | undefined;\n onToggle: (categoryId: Category, technologyId: SkillId) => void;\n onToggleLabels: () => void;\n onContinue: () => void;\n onBack: () => void;\n};\n\nexport const StepBuild: React.FC<StepBuildProps> = ({\n domain: activeDomain,\n allSelections,\n showLabels,\n installedSkillIds,\n onToggle,\n onToggleLabels,\n onContinue,\n onBack,\n}) => {\n const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();\n const skillConfigs = useWizardStore((s) => s.skillConfigs);\n\n const handleFocusedSkillChange = useCallback(\n (id: SkillId | null) => useWizardStore.getState().setFocusedSkillId(id),\n [],\n );\n\n const categories = useCategoryRows({\n domain: activeDomain,\n allSelections,\n ...(installedSkillIds !== undefined && { installedSkillIds }),\n skillConfigs,\n });\n\n const { initialRow, initialCol } = useMemo(() => {\n const skillId = useWizardStore.getState().focusedSkillId;\n if (!skillId) return { initialRow: 0, initialCol: 0 };\n const row = categories.findIndex((cat) => cat.options.some((o) => o.id === skillId));\n const focusedCategory = categories[row];\n if (!focusedCategory) return { initialRow: 0, initialCol: 0 };\n return {\n initialRow: row,\n initialCol: focusedCategory.options.findIndex((o) => o.id === skillId),\n };\n }, [categories]);\n\n useInput((_input, key) => {\n if (key.return) {\n onContinue();\n } else if (key.escape) {\n onBack();\n }\n });\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <Box ref={gridRef} flexGrow={1} flexBasis={0}>\n <CategoryGrid\n key={activeDomain}\n categories={categories}\n availableHeight={gridHeight}\n showLabels={showLabels}\n defaultFocusedRow={initialRow}\n defaultFocusedCol={initialCol}\n onToggle={onToggle}\n onToggleLabels={onToggleLabels}\n onFocusedSkillChange={handleFocusedSkillChange}\n />\n </Box>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport type { Domain, SkillId } from \"../../types/index.js\";\nimport type { SkillConfig } from \"../../types/config.js\";\nimport { buildCategoriesForDomain } from \"../../lib/wizard/index.js\";\nimport type { CategoryRow } from \"../wizard/category-grid.js\";\n\ntype UseCategoryRowsOptions = {\n domain: Domain;\n allSelections: SkillId[];\n installedSkillIds?: SkillId[];\n skillConfigs?: SkillConfig[];\n};\n\n/** The build-step grid's rows for `domain`, rebuilt only when an input changes. */\nexport function useCategoryRows({\n domain,\n allSelections,\n installedSkillIds,\n skillConfigs,\n}: UseCategoryRowsOptions): CategoryRow[] {\n return useMemo(\n () => buildCategoriesForDomain(domain, allSelections, installedSkillIds, skillConfigs),\n [domain, allSelections, installedSkillIds, skillConfigs],\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,KAAK,gBAAgB;AAC9B,SAAgB,aAAa,WAAAA,gBAAe;;;ACD5C,SAAS,eAAe;AAcjB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0C;AACxC,SAAO;AAAA,IACL,MAAM,yBAAyB,QAAQ,eAAe,mBAAmB,YAAY;AAAA,IACrF,CAAC,QAAQ,eAAe,mBAAmB,YAAY;AAAA,EACzD;AACF;;;AD6CQ;AAhDD,IAAM,YAAsC,CAAC;AAAA,EAClD,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,KAAK,SAAS,gBAAgB,WAAW,IAAI,kBAAkB;AACvE,QAAM,eAAe,eAAe,CAAC,MAAM,EAAE,YAAY;AAEzD,QAAM,2BAA2B;AAAA,IAC/B,CAAC,OAAuB,eAAe,SAAS,EAAE,kBAAkB,EAAE;AAAA,IACtE,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,gBAAgB;AAAA,IACjC,QAAQ;AAAA,IACR;AAAA,IACA,GAAI,sBAAsB,UAAa,EAAE,kBAAkB;AAAA,IAC3D;AAAA,EACF,CAAC;AAED,QAAM,EAAE,YAAY,WAAW,IAAIC,SAAQ,MAAM;AAC/C,UAAM,UAAU,eAAe,SAAS,EAAE;AAC1C,QAAI,CAAC,QAAS,QAAO,EAAE,YAAY,GAAG,YAAY,EAAE;AACpD,UAAM,MAAM,WAAW,UAAU,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,CAAC;AACnF,UAAM,kBAAkB,WAAW,GAAG;AACtC,QAAI,CAAC,gBAAiB,QAAO,EAAE,YAAY,GAAG,YAAY,EAAE;AAC5D,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,YAAY,gBAAgB,QAAQ,UAAU,CAAC,MAAM,EAAE,OAAO,OAAO;AAAA,IACvE;AAAA,EACF,GAAG,CAAC,UAAU,CAAC;AAEf,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,iBAAW;AAAA,IACb,WAAW,IAAI,QAAQ;AACrB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SACE,oBAAC,OAAI,eAAc,UAAS,OAAM,QAAO,UAAU,GAAG,WAAW,GAC/D,8BAAC,OAAI,KAAK,SAAS,UAAU,GAAG,WAAW,GACzC;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,sBAAsB;AAAA;AAAA,IARjB;AAAA,EASP,GACF,GACF;AAEJ;","names":["useMemo","useMemo"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
StackSelection
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-EFU6P3B7.js";
|
|
5
5
|
|
|
6
6
|
// src/cli/components/wizard/step-stack.tsx
|
|
7
7
|
import { Box } from "ink";
|
|
8
|
+
import "react";
|
|
8
9
|
import { jsx } from "react/jsx-runtime";
|
|
9
10
|
var StepStack = ({ onCancel }) => {
|
|
10
11
|
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", width: "100%", flexGrow: 1, flexBasis: 0, children: /* @__PURE__ */ jsx(Box, { flexGrow: 1, flexBasis: 0, children: /* @__PURE__ */ jsx(StackSelection, { onCancel }) }) });
|
|
@@ -13,4 +14,4 @@ var StepStack = ({ onCancel }) => {
|
|
|
13
14
|
export {
|
|
14
15
|
StepStack
|
|
15
16
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-WG6V6VJV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/step-stack.tsx"],"sourcesContent":["import { Box } from \"ink\";\nimport React from \"react\";\nimport { StackSelection } from \"./stack-selection.js\";\n\ntype StepStackProps = {\n onCancel?: () => void;\n};\n\n/**\n * First step of the wizard: select a stack or \"Start from scratch\".\n *\n * After selection, the wizard transitions to the \"domains\" step.\n */\nexport const StepStack: React.FC<StepStackProps> = ({ onCancel }) => {\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <Box flexGrow={1} flexBasis={0}>\n <StackSelection onCancel={onCancel} />\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA,SAAS,WAAW;
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-stack.tsx"],"sourcesContent":["import { Box } from \"ink\";\nimport React from \"react\";\nimport { StackSelection } from \"./stack-selection.js\";\n\ntype StepStackProps = {\n onCancel?: () => void;\n};\n\n/**\n * First step of the wizard: select a stack or \"Start from scratch\".\n *\n * After selection, the wizard transitions to the \"domains\" step.\n */\nexport const StepStack: React.FC<StepStackProps> = ({ onCancel }) => {\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <Box flexGrow={1} flexBasis={0}>\n <StackSelection onCancel={onCancel} />\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA,SAAS,WAAW;AACpB,OAAkB;AAgBV;AAJD,IAAM,YAAsC,CAAC,EAAE,SAAS,MAAM;AACnE,SACE,oBAAC,OAAI,eAAc,UAAS,OAAM,QAAO,UAAU,GAAG,WAAW,GAC/D,8BAAC,OAAI,UAAU,GAAG,WAAW,GAC3B,8BAAC,kBAAe,UAAoB,GACtC,GACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
installPluginSkills,
|
|
4
|
+
pluginInstallFailureError
|
|
5
|
+
} from "./chunk-TY6CAOL7.js";
|
|
6
|
+
import {
|
|
7
|
+
clearTerminalScreen,
|
|
8
|
+
formatTerminalTooSmallMessage,
|
|
9
|
+
isTerminalLargeEnough
|
|
10
|
+
} from "./chunk-K3O3YQYG.js";
|
|
11
|
+
import {
|
|
12
|
+
STATUS_MESSAGES,
|
|
13
|
+
claudePluginMarketplaceAdd,
|
|
14
|
+
claudePluginMarketplaceExists,
|
|
15
|
+
claudePluginMarketplaceUpdate,
|
|
16
|
+
configUnreadableError,
|
|
17
|
+
fetchMarketplace,
|
|
18
|
+
findConfigLoadFailures,
|
|
19
|
+
findUnusableSavedSkillMetadata,
|
|
20
|
+
pluginsInstalled,
|
|
21
|
+
propagatedRecompileSummary,
|
|
22
|
+
savedSkillMetadataUnusableError,
|
|
23
|
+
skillMetadataUnusableDetail
|
|
24
|
+
} from "./chunk-NXQAY5U7.js";
|
|
25
|
+
import {
|
|
26
|
+
getErrorMessage,
|
|
27
|
+
warn
|
|
28
|
+
} from "./chunk-U2YSGBHA.js";
|
|
29
|
+
import {
|
|
30
|
+
CLI_COLORS,
|
|
31
|
+
MIN_TERMINAL_SIZE
|
|
32
|
+
} from "./chunk-R54KIGN2.js";
|
|
33
|
+
|
|
34
|
+
// src/cli/lib/exit-codes.ts
|
|
35
|
+
var EXIT_CODES = {
|
|
36
|
+
SUCCESS: 0,
|
|
37
|
+
ERROR: 1,
|
|
38
|
+
INVALID_ARGS: 2,
|
|
39
|
+
NETWORK_ERROR: 3,
|
|
40
|
+
CANCELLED: 4
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// src/cli/base-command.ts
|
|
44
|
+
import { Command } from "@oclif/core";
|
|
45
|
+
import chalk from "chalk";
|
|
46
|
+
|
|
47
|
+
// src/cli/lib/operations/source/ensure-marketplace.ts
|
|
48
|
+
async function ensureMarketplace(sourceResult) {
|
|
49
|
+
if (!sourceResult.marketplace) {
|
|
50
|
+
try {
|
|
51
|
+
const marketplaceResult = await fetchMarketplace(sourceResult.sourceConfig.source);
|
|
52
|
+
sourceResult.marketplace = marketplaceResult.marketplace.name;
|
|
53
|
+
} catch {
|
|
54
|
+
return { marketplace: null, registered: false };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const marketplace = sourceResult.marketplace;
|
|
58
|
+
const exists = await claudePluginMarketplaceExists(marketplace);
|
|
59
|
+
if (!exists) {
|
|
60
|
+
const marketplaceSource = sourceResult.sourceConfig.source.replace(/^github:/, "");
|
|
61
|
+
await claudePluginMarketplaceAdd(marketplaceSource);
|
|
62
|
+
return { marketplace, registered: true };
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await claudePluginMarketplaceUpdate(marketplace);
|
|
66
|
+
} catch {
|
|
67
|
+
warn("Could not update marketplace \u2014 continuing with cached version");
|
|
68
|
+
}
|
|
69
|
+
return { marketplace, registered: false };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/cli/lib/operations/source/require-marketplace.ts
|
|
73
|
+
async function requireMarketplace(sourceResult, purpose) {
|
|
74
|
+
const mpResult = await ensureMarketplace(sourceResult);
|
|
75
|
+
if (!mpResult.marketplace) {
|
|
76
|
+
return {
|
|
77
|
+
ok: false,
|
|
78
|
+
error: `Cannot ${purpose}: marketplace could not be resolved from source '${sourceResult.sourceConfig.source}'. Plugin install mode requires a marketplace \u2014 fix the source or switch the affected skills to eject mode.`
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return { ok: true, marketplace: mpResult.marketplace, registered: mpResult.registered };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// src/cli/base-command.ts
|
|
85
|
+
var TERMINAL_RESIZE_POLL_MS = 500;
|
|
86
|
+
var terminalColumns = () => process.stdout.columns ?? MIN_TERMINAL_SIZE.COLS;
|
|
87
|
+
var terminalRows = () => process.stdout.rows ?? MIN_TERMINAL_SIZE.ROWS;
|
|
88
|
+
function isTerminalBigEnough() {
|
|
89
|
+
return isTerminalLargeEnough(terminalColumns(), terminalRows());
|
|
90
|
+
}
|
|
91
|
+
function waitForTerminal(isSatisfied) {
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
const check = () => {
|
|
94
|
+
if (!isSatisfied()) return;
|
|
95
|
+
clearInterval(interval);
|
|
96
|
+
process.stdout.off("resize", check);
|
|
97
|
+
resolve();
|
|
98
|
+
};
|
|
99
|
+
const interval = setInterval(check, TERMINAL_RESIZE_POLL_MS);
|
|
100
|
+
process.stdout.on("resize", check);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
var BaseCommand = class extends Command {
|
|
104
|
+
async init() {
|
|
105
|
+
await super.init();
|
|
106
|
+
await this.ensureTerminalSize();
|
|
107
|
+
}
|
|
108
|
+
get sourceConfig() {
|
|
109
|
+
return this.config.sourceConfig;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Blocks the command from launching in a terminal below
|
|
113
|
+
* {@link MIN_TERMINAL_SIZE}. This runs once, before Ink mounts; the terminal
|
|
114
|
+
* shrinking mid-session is caught by the matching guard in `WizardLayout`.
|
|
115
|
+
*/
|
|
116
|
+
async ensureTerminalSize() {
|
|
117
|
+
if (isTerminalBigEnough()) return;
|
|
118
|
+
this.clearTerminal();
|
|
119
|
+
this.log(chalk.hex(CLI_COLORS.WARNING)(formatTerminalTooSmallMessage(terminalColumns())));
|
|
120
|
+
await waitForTerminal(isTerminalBigEnough);
|
|
121
|
+
}
|
|
122
|
+
handleError(error) {
|
|
123
|
+
const message = getErrorMessage(error);
|
|
124
|
+
this.error(message, { exit: EXIT_CODES.ERROR });
|
|
125
|
+
}
|
|
126
|
+
logSuccess(message) {
|
|
127
|
+
this.log(`\u2713 ${message}`);
|
|
128
|
+
}
|
|
129
|
+
logWarning(message) {
|
|
130
|
+
this.warn(message);
|
|
131
|
+
}
|
|
132
|
+
logInfo(message) {
|
|
133
|
+
this.log(message);
|
|
134
|
+
}
|
|
135
|
+
clearTerminal() {
|
|
136
|
+
clearTerminalScreen();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Resolves the marketplace required for a plugin operation, or hard-exits with
|
|
140
|
+
* an actionable error when it cannot be resolved. `onRegistered` is invoked
|
|
141
|
+
* (when provided) if the marketplace had to be registered — init uses it to log.
|
|
142
|
+
*/
|
|
143
|
+
async requireMarketplaceOrExit(sourceResult, purpose, onRegistered) {
|
|
144
|
+
const required = await requireMarketplace(sourceResult, purpose);
|
|
145
|
+
if (!required.ok) {
|
|
146
|
+
this.error(required.error, { exit: EXIT_CODES.ERROR });
|
|
147
|
+
}
|
|
148
|
+
if (required.registered) {
|
|
149
|
+
onRegistered?.(required.marketplace);
|
|
150
|
+
}
|
|
151
|
+
return required.marketplace;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Reports every constraint a completed selection breaks — a conflicting pair, an unmet
|
|
155
|
+
* requirement, an exclusive category with two picks.
|
|
156
|
+
*
|
|
157
|
+
* Shared by `init` and `edit` so one selection cannot be reported two ways. Both commands ask
|
|
158
|
+
* the same question of the same matrix, so a roster that draws a warning through one must draw
|
|
159
|
+
* the same warning through the other; `init` used to compute the answer and drop it, which is
|
|
160
|
+
* the whole reason this lives here rather than on either command.
|
|
161
|
+
*
|
|
162
|
+
* These are advisory (`ValidationError` in types/matrix.ts): the selection is installed either
|
|
163
|
+
* way and neither command's exit code turns on them, so they are warnings and not errors. The
|
|
164
|
+
* loop is its own guard — an accepted selection carries no errors and says nothing.
|
|
165
|
+
*/
|
|
166
|
+
reportValidationErrors(validation) {
|
|
167
|
+
for (const error of validation.errors) {
|
|
168
|
+
this.warn(error.message);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Installs skill plugins and narrates the operation.
|
|
173
|
+
*
|
|
174
|
+
* Shared by `init` and `edit` for the same reason as {@link reportValidationErrors}:
|
|
175
|
+
* both run the SAME install against the same marketplace, so a line one prints about
|
|
176
|
+
* it the other owes. `edit` used to run it in silence — a real `claude plugin install`
|
|
177
|
+
* was indistinguishable in the output from nothing having happened.
|
|
178
|
+
*/
|
|
179
|
+
async installPluginSkillsReported(skills, marketplace, projectDir) {
|
|
180
|
+
this.announcePluginInstall();
|
|
181
|
+
const result = await installPluginSkills(skills, marketplace, projectDir);
|
|
182
|
+
this.reportPluginInstalls(result);
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The opening half of the narration above, exposed for the one caller that cannot
|
|
187
|
+
* use the whole of it: an eject→plugin migration installs each plugin and deletes
|
|
188
|
+
* that skill's working copy in the same step (see `executeMigration`), so the
|
|
189
|
+
* install it performs is not this command's to run.
|
|
190
|
+
*/
|
|
191
|
+
announcePluginInstall() {
|
|
192
|
+
this.log(STATUS_MESSAGES.INSTALLING_PLUGINS);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The closing half: what was installed, what was not, and the refusal to continue
|
|
196
|
+
* past a failure.
|
|
197
|
+
*
|
|
198
|
+
* The hard-error is part of the report rather than each caller's own postscript
|
|
199
|
+
* because it is the same rule everywhere — plugin install intent is inviolable, so
|
|
200
|
+
* a run that could not honor it must stop BEFORE any config records a marketplace
|
|
201
|
+
* `source` for a skill with no plugin registration.
|
|
202
|
+
*/
|
|
203
|
+
reportPluginInstalls(result) {
|
|
204
|
+
for (const item of result.installed) {
|
|
205
|
+
this.log(` Installed ${item.ref}`);
|
|
206
|
+
}
|
|
207
|
+
for (const item of result.failed) {
|
|
208
|
+
this.warn(`Failed to install plugin ${item.id}: ${item.error}`);
|
|
209
|
+
}
|
|
210
|
+
if (result.failed.length > 0) {
|
|
211
|
+
this.error(pluginInstallFailureError(result.failed.length), { exit: EXIT_CODES.ERROR });
|
|
212
|
+
}
|
|
213
|
+
this.log(`${pluginsInstalled(result.installed.length)}
|
|
214
|
+
`);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Renders the recompile a gated write already performed on every OTHER registered
|
|
218
|
+
* project this run's global change was propagated into.
|
|
219
|
+
*
|
|
220
|
+
* Shared by all four commands that fan out — the count and its wording are one
|
|
221
|
+
* statement about one operation, and four copies of it had already drifted into two
|
|
222
|
+
* spellings of the same sentence.
|
|
223
|
+
*/
|
|
224
|
+
reportPropagatedRecompile(report) {
|
|
225
|
+
if (report.propagated.updated.length === 0) return;
|
|
226
|
+
const { rewrittenCount, unchangedCount, failedCount, warnings } = report.recompile;
|
|
227
|
+
for (const warning of warnings) {
|
|
228
|
+
this.warn(warning);
|
|
229
|
+
}
|
|
230
|
+
this.log(propagatedRecompileSummary(rewrittenCount, unchangedCount, failedCount));
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Refuses to run when a config file exists but cannot be loaded.
|
|
234
|
+
*
|
|
235
|
+
* Both configs this run would read are checked, because both are read on the way through: a
|
|
236
|
+
* project's own `config.ts` and the global one every project write inlines. Checking up
|
|
237
|
+
* front is the whole point — an unreadable GLOBAL config otherwise surfaced only at the
|
|
238
|
+
* config write, after the wizard had copied skills and installed plugins, as a warning that
|
|
239
|
+
* the write never happened.
|
|
240
|
+
*
|
|
241
|
+
* A MISSING config is not a corrupt one and passes here untouched: it is the legitimate
|
|
242
|
+
* state `init` exists for, and the state `edit` reports as "no installation".
|
|
243
|
+
*/
|
|
244
|
+
async ensureConfigReadable(projectDir) {
|
|
245
|
+
const [failure] = await findConfigLoadFailures(projectDir);
|
|
246
|
+
if (failure) {
|
|
247
|
+
this.error(configUnreadableError(failure.message), { exit: EXIT_CODES.ERROR });
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Refuses to run when a saved skill entry names a local skill that IS installed and whose
|
|
252
|
+
* metadata.yaml describes no skill.
|
|
253
|
+
*
|
|
254
|
+
* One layer below {@link ensureConfigReadable} and for the same reason: the config parses,
|
|
255
|
+
* and a file it points at does not. Both wizards resolve their saved roster against the
|
|
256
|
+
* loaded catalogue, and an id nothing can be loaded for reaches no screen — so without this
|
|
257
|
+
* the entry is dropped and reported as a skill the marketplace no longer carries, which is a
|
|
258
|
+
* removal the user never asked for and a sentence blaming the wrong thing.
|
|
259
|
+
*
|
|
260
|
+
* Only entries the catalogue does not carry are looked at, so a healthy install pays a
|
|
261
|
+
* filesystem read for nothing. An entry whose files are simply GONE is not refused — there
|
|
262
|
+
* is no file to repair, so it is removed with a reason that says so
|
|
263
|
+
* (`unresolvedSkillRemovalReasons`).
|
|
264
|
+
*
|
|
265
|
+
* Runs before the wizard mounts, which is the whole point: past that, a refusal costs the
|
|
266
|
+
* user the session they had already spent, and everything this protects has been rewritten.
|
|
267
|
+
*/
|
|
268
|
+
async ensureSavedSkillsReadable(savedSkills, matrix, projectDir) {
|
|
269
|
+
const unresolved = savedSkills.filter((saved) => !saved.excluded && !matrix.skills[saved.id]).map((saved) => saved.id);
|
|
270
|
+
if (unresolved.length === 0) return;
|
|
271
|
+
const unusable = await findUnusableSavedSkillMetadata(unresolved, savedSkills, projectDir);
|
|
272
|
+
if (unusable.length === 0) return;
|
|
273
|
+
for (const entry of unusable) {
|
|
274
|
+
this.log(skillMetadataUnusableDetail(entry));
|
|
275
|
+
}
|
|
276
|
+
this.error(savedSkillMetadataUnusableError(unusable), { exit: EXIT_CODES.ERROR });
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
export {
|
|
281
|
+
EXIT_CODES,
|
|
282
|
+
BaseCommand
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=chunk-X5XJ6WKO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/exit-codes.ts","../src/cli/base-command.ts","../src/cli/lib/operations/source/ensure-marketplace.ts","../src/cli/lib/operations/source/require-marketplace.ts"],"sourcesContent":["export const EXIT_CODES = {\n SUCCESS: 0,\n ERROR: 1,\n INVALID_ARGS: 2,\n NETWORK_ERROR: 3,\n CANCELLED: 4,\n} as const;\n","import { Command } from \"@oclif/core\";\n\nimport chalk from \"chalk\";\n\nimport { CLI_COLORS, MIN_TERMINAL_SIZE } from \"./consts.js\";\nimport { getErrorMessage } from \"./utils/errors.js\";\nimport {\n configUnreadableError,\n pluginsInstalled,\n propagatedRecompileSummary,\n savedSkillMetadataUnusableError,\n skillMetadataUnusableDetail,\n STATUS_MESSAGES,\n} from \"./utils/messages.js\";\nimport {\n clearTerminalScreen,\n formatTerminalTooSmallMessage,\n isTerminalLargeEnough,\n} from \"./utils/terminal.js\";\nimport { EXIT_CODES } from \"./lib/exit-codes.js\";\nimport type { ResolvedConfig } from \"./lib/configuration/index.js\";\nimport type { MergedSkillsMatrix, SelectionValidation, SkillConfig } from \"./types/index.js\";\nimport { findConfigLoadFailures } from \"./lib/configuration/project-config.js\";\nimport { findUnusableSavedSkillMetadata } from \"./lib/skills/index.js\";\nimport { requireMarketplace } from \"./lib/operations/source/require-marketplace.js\";\nimport {\n installPluginSkills,\n pluginInstallFailureError,\n type PluginInstallResult,\n} from \"./lib/operations/skills/install-plugin-skills.js\";\nimport type { GateReport } from \"./lib/config-gate/index.js\";\nimport type { SourceLoadResult } from \"./lib/loading/source-loader.js\";\n\n/** Narrow interface for the sourceConfig we attach to oclif's Config in the init hook. */\nexport interface ConfigWithSource {\n sourceConfig?: ResolvedConfig;\n}\n\n/**\n * How often the size gate re-reads the terminal while it is blocked. `resize` is what normally\n * ends the wait; the poll is the belt for the terminals and multiplexers that resize without\n * ever emitting one, and it is the only reason a blocked command is not a hung one there.\n */\nconst TERMINAL_RESIZE_POLL_MS = 500;\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- @types/node declares this as `number`; it is undefined whenever stdout is not a TTY\nconst terminalColumns = (): number => process.stdout.columns ?? MIN_TERMINAL_SIZE.COLS;\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- @types/node declares this as `number`; it is undefined whenever stdout is not a TTY\nconst terminalRows = (): number => process.stdout.rows ?? MIN_TERMINAL_SIZE.ROWS;\n\nfunction isTerminalBigEnough(): boolean {\n return isTerminalLargeEnough(terminalColumns(), terminalRows());\n}\n\n/**\n * Resolves the moment the terminal satisfies `isSatisfied` — on the resize event where there is\n * one, on the poll where there is not. Both listeners are torn down before resolving, so a\n * command that got past the gate leaves nothing behind holding the process open.\n */\nfunction waitForTerminal(isSatisfied: () => boolean): Promise<void> {\n return new Promise<void>((resolve) => {\n const check = () => {\n if (!isSatisfied()) return;\n clearInterval(interval);\n process.stdout.off(\"resize\", check);\n resolve();\n };\n const interval = setInterval(check, TERMINAL_RESIZE_POLL_MS);\n process.stdout.on(\"resize\", check);\n });\n}\n\n/**\n * Nothing is inherited by every command, so this class declares no `baseFlags`.\n *\n * There was one — `--source` — until naming a source became `init`'s decision alone\n * (owner ruling 2026-08-09). Six commands were already opting out of it through an\n * exported empty-object cast; a flag one command wants is that command's flag, so it\n * is declared in `init` and the six opt-outs went with it.\n */\nexport abstract class BaseCommand extends Command {\n async init(): Promise<void> {\n await super.init();\n await this.ensureTerminalSize();\n }\n\n public get sourceConfig(): ResolvedConfig | undefined {\n // Boundary cast: oclif Config is a class (not augmentable); we attach sourceConfig in the init hook\n return (this.config as unknown as ConfigWithSource).sourceConfig;\n }\n\n /**\n * Blocks the command from launching in a terminal below\n * {@link MIN_TERMINAL_SIZE}. This runs once, before Ink mounts; the terminal\n * shrinking mid-session is caught by the matching guard in `WizardLayout`.\n */\n protected async ensureTerminalSize(): Promise<void> {\n if (isTerminalBigEnough()) return;\n\n this.clearTerminal();\n this.log(chalk.hex(CLI_COLORS.WARNING)(formatTerminalTooSmallMessage(terminalColumns())));\n\n await waitForTerminal(isTerminalBigEnough);\n }\n\n protected handleError(error: unknown): never {\n const message = getErrorMessage(error);\n this.error(message, { exit: EXIT_CODES.ERROR });\n }\n\n protected logSuccess(message: string): void {\n this.log(`✓ ${message}`);\n }\n\n protected logWarning(message: string): void {\n this.warn(message);\n }\n\n protected logInfo(message: string): void {\n this.log(message);\n }\n\n protected clearTerminal(): void {\n clearTerminalScreen();\n }\n\n /**\n * Resolves the marketplace required for a plugin operation, or hard-exits with\n * an actionable error when it cannot be resolved. `onRegistered` is invoked\n * (when provided) if the marketplace had to be registered — init uses it to log.\n */\n protected async requireMarketplaceOrExit(\n sourceResult: SourceLoadResult,\n purpose: string,\n onRegistered?: (marketplace: string) => void,\n ): Promise<string> {\n const required = await requireMarketplace(sourceResult, purpose);\n if (!required.ok) {\n this.error(required.error, { exit: EXIT_CODES.ERROR });\n }\n if (required.registered) {\n onRegistered?.(required.marketplace);\n }\n return required.marketplace;\n }\n\n /**\n * Reports every constraint a completed selection breaks — a conflicting pair, an unmet\n * requirement, an exclusive category with two picks.\n *\n * Shared by `init` and `edit` so one selection cannot be reported two ways. Both commands ask\n * the same question of the same matrix, so a roster that draws a warning through one must draw\n * the same warning through the other; `init` used to compute the answer and drop it, which is\n * the whole reason this lives here rather than on either command.\n *\n * These are advisory (`ValidationError` in types/matrix.ts): the selection is installed either\n * way and neither command's exit code turns on them, so they are warnings and not errors. The\n * loop is its own guard — an accepted selection carries no errors and says nothing.\n */\n protected reportValidationErrors(validation: SelectionValidation): void {\n for (const error of validation.errors) {\n this.warn(error.message);\n }\n }\n\n /**\n * Installs skill plugins and narrates the operation.\n *\n * Shared by `init` and `edit` for the same reason as {@link reportValidationErrors}:\n * both run the SAME install against the same marketplace, so a line one prints about\n * it the other owes. `edit` used to run it in silence — a real `claude plugin install`\n * was indistinguishable in the output from nothing having happened.\n */\n protected async installPluginSkillsReported(\n skills: SkillConfig[],\n marketplace: string,\n projectDir: string,\n ): Promise<PluginInstallResult> {\n this.announcePluginInstall();\n const result = await installPluginSkills(skills, marketplace, projectDir);\n this.reportPluginInstalls(result);\n return result;\n }\n\n /**\n * The opening half of the narration above, exposed for the one caller that cannot\n * use the whole of it: an eject→plugin migration installs each plugin and deletes\n * that skill's working copy in the same step (see `executeMigration`), so the\n * install it performs is not this command's to run.\n */\n protected announcePluginInstall(): void {\n this.log(STATUS_MESSAGES.INSTALLING_PLUGINS);\n }\n\n /**\n * The closing half: what was installed, what was not, and the refusal to continue\n * past a failure.\n *\n * The hard-error is part of the report rather than each caller's own postscript\n * because it is the same rule everywhere — plugin install intent is inviolable, so\n * a run that could not honor it must stop BEFORE any config records a marketplace\n * `source` for a skill with no plugin registration.\n */\n protected reportPluginInstalls(result: PluginInstallResult): void {\n for (const item of result.installed) {\n this.log(` Installed ${item.ref}`);\n }\n for (const item of result.failed) {\n this.warn(`Failed to install plugin ${item.id}: ${item.error}`);\n }\n if (result.failed.length > 0) {\n this.error(pluginInstallFailureError(result.failed.length), { exit: EXIT_CODES.ERROR });\n }\n this.log(`${pluginsInstalled(result.installed.length)}\\n`);\n }\n\n /**\n * Renders the recompile a gated write already performed on every OTHER registered\n * project this run's global change was propagated into.\n *\n * Shared by all four commands that fan out — the count and its wording are one\n * statement about one operation, and four copies of it had already drifted into two\n * spellings of the same sentence.\n */\n protected reportPropagatedRecompile(report: GateReport): void {\n if (report.propagated.updated.length === 0) return;\n\n const { rewrittenCount, unchangedCount, failedCount, warnings } = report.recompile;\n for (const warning of warnings) {\n this.warn(warning);\n }\n this.log(propagatedRecompileSummary(rewrittenCount, unchangedCount, failedCount));\n }\n\n /**\n * Refuses to run when a config file exists but cannot be loaded.\n *\n * Both configs this run would read are checked, because both are read on the way through: a\n * project's own `config.ts` and the global one every project write inlines. Checking up\n * front is the whole point — an unreadable GLOBAL config otherwise surfaced only at the\n * config write, after the wizard had copied skills and installed plugins, as a warning that\n * the write never happened.\n *\n * A MISSING config is not a corrupt one and passes here untouched: it is the legitimate\n * state `init` exists for, and the state `edit` reports as \"no installation\".\n */\n protected async ensureConfigReadable(projectDir: string): Promise<void> {\n const [failure] = await findConfigLoadFailures(projectDir);\n if (failure) {\n this.error(configUnreadableError(failure.message), { exit: EXIT_CODES.ERROR });\n }\n }\n\n /**\n * Refuses to run when a saved skill entry names a local skill that IS installed and whose\n * metadata.yaml describes no skill.\n *\n * One layer below {@link ensureConfigReadable} and for the same reason: the config parses,\n * and a file it points at does not. Both wizards resolve their saved roster against the\n * loaded catalogue, and an id nothing can be loaded for reaches no screen — so without this\n * the entry is dropped and reported as a skill the marketplace no longer carries, which is a\n * removal the user never asked for and a sentence blaming the wrong thing.\n *\n * Only entries the catalogue does not carry are looked at, so a healthy install pays a\n * filesystem read for nothing. An entry whose files are simply GONE is not refused — there\n * is no file to repair, so it is removed with a reason that says so\n * (`unresolvedSkillRemovalReasons`).\n *\n * Runs before the wizard mounts, which is the whole point: past that, a refusal costs the\n * user the session they had already spent, and everything this protects has been rewritten.\n */\n protected async ensureSavedSkillsReadable(\n savedSkills: readonly SkillConfig[],\n matrix: MergedSkillsMatrix,\n projectDir: string,\n ): Promise<void> {\n const unresolved = savedSkills\n .filter((saved) => !saved.excluded && !matrix.skills[saved.id])\n .map((saved) => saved.id);\n if (unresolved.length === 0) return;\n\n const unusable = await findUnusableSavedSkillMetadata(unresolved, savedSkills, projectDir);\n if (unusable.length === 0) return;\n\n // The detail is LOGGED and only the refusal is raised — oclif hard-wraps error text at the\n // terminal width, and a path broken across two lines is one nobody can copy. Same split\n // `compile` makes over the same verdict.\n for (const entry of unusable) {\n this.log(skillMetadataUnusableDetail(entry));\n }\n this.error(savedSkillMetadataUnusableError(unusable), { exit: EXIT_CODES.ERROR });\n }\n}\n","import {\n claudePluginMarketplaceExists,\n claudePluginMarketplaceAdd,\n claudePluginMarketplaceUpdate,\n} from \"../../../utils/exec.js\";\nimport { fetchMarketplace } from \"../../loading/index.js\";\nimport { warn } from \"../../../utils/logger.js\";\nimport type { SourceLoadResult } from \"../../loading/source-loader.js\";\n\nexport type MarketplaceResult = {\n /** The resolved marketplace name, or null if no marketplace is configured. */\n marketplace: string | null;\n /** Whether a new marketplace was registered (vs. updated or already existed). */\n registered: boolean;\n};\n\n/**\n * Ensures the marketplace is registered with the Claude CLI.\n *\n * If the marketplace does not exist, registers it. If it exists, updates it.\n * Handles lazy marketplace name resolution when sourceResult.marketplace is undefined.\n *\n * Operation is intentionally SILENT — commands decide what to log based on the\n * `registered` flag.\n */\nexport async function ensureMarketplace(\n sourceResult: SourceLoadResult,\n): Promise<MarketplaceResult> {\n if (!sourceResult.marketplace) {\n try {\n const marketplaceResult = await fetchMarketplace(sourceResult.sourceConfig.source);\n sourceResult.marketplace = marketplaceResult.marketplace.name;\n } catch {\n return { marketplace: null, registered: false };\n }\n }\n\n const marketplace = sourceResult.marketplace;\n const exists = await claudePluginMarketplaceExists(marketplace);\n\n if (!exists) {\n const marketplaceSource = sourceResult.sourceConfig.source.replace(/^github:/, \"\");\n await claudePluginMarketplaceAdd(marketplaceSource);\n return { marketplace, registered: true };\n }\n\n try {\n await claudePluginMarketplaceUpdate(marketplace);\n } catch {\n warn(\"Could not update marketplace — continuing with cached version\");\n }\n\n return { marketplace, registered: false };\n}\n","import { ensureMarketplace } from \"./ensure-marketplace.js\";\nimport type { SourceLoadResult } from \"../../loading/source-loader.js\";\n\nexport type MarketplaceRequirement =\n { ok: true; marketplace: string; registered: boolean } | { ok: false; error: string };\n\n/**\n * Resolves the marketplace required for plugin operations. Plugin install\n * intent is inviolable — callers must hard-error on `ok: false` rather than\n * silently falling back to eject or skipping, and must do so BEFORE any\n * filesystem mutation so a failure leaves no partial state on disk.\n */\nexport async function requireMarketplace(\n sourceResult: SourceLoadResult,\n purpose: string,\n): Promise<MarketplaceRequirement> {\n const mpResult = await ensureMarketplace(sourceResult);\n if (!mpResult.marketplace) {\n return {\n ok: false,\n error:\n `Cannot ${purpose}: marketplace could not be resolved from source '${sourceResult.sourceConfig.source}'. ` +\n `Plugin install mode requires a marketplace — fix the source or switch the affected skills to eject mode.`,\n };\n }\n return { ok: true, marketplace: mpResult.marketplace, registered: mpResult.registered };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
CLI_COLORS,
|
|
7
7
|
UI_SYMBOLS
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-R54KIGN2.js";
|
|
9
9
|
|
|
10
10
|
// src/cli/components/common/select-list.tsx
|
|
11
11
|
import { useCallback } from "react";
|
|
@@ -20,26 +20,27 @@ function SelectList({
|
|
|
20
20
|
}) {
|
|
21
21
|
const handleEnter = useCallback(
|
|
22
22
|
(index) => {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const item = items[index];
|
|
24
|
+
if (item) {
|
|
25
|
+
onSelect(item.value);
|
|
25
26
|
}
|
|
26
27
|
},
|
|
27
28
|
[items, onSelect]
|
|
28
29
|
);
|
|
29
30
|
const { focusedIndex } = useKeyboardNavigation(
|
|
30
31
|
items.length,
|
|
31
|
-
{ onEnter: handleEnter, onEscape: onCancel },
|
|
32
|
-
{ vimKeys: false, active }
|
|
32
|
+
{ onEnter: handleEnter, ...onCancel !== void 0 && { onEscape: onCancel } },
|
|
33
|
+
{ vimKeys: false, ...active !== void 0 && { active } }
|
|
33
34
|
);
|
|
34
35
|
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: items.map((item, index) => {
|
|
35
36
|
const isFocused = index === focusedIndex;
|
|
36
37
|
const marker = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;
|
|
37
38
|
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
38
|
-
/* @__PURE__ */ jsxs(Text, { bold: isFocused, color:
|
|
39
|
+
/* @__PURE__ */ jsxs(Text, { bold: isFocused, ...isFocused && { color: CLI_COLORS.PRIMARY }, children: [
|
|
39
40
|
marker,
|
|
40
41
|
" "
|
|
41
42
|
] }),
|
|
42
|
-
renderItem ? renderItem(item, isFocused) : /* @__PURE__ */ jsx(Text, { bold: isFocused, color:
|
|
43
|
+
renderItem ? renderItem(item, isFocused) : /* @__PURE__ */ jsx(Text, { bold: isFocused, ...isFocused && { color: CLI_COLORS.PRIMARY }, children: item.label })
|
|
43
44
|
] }, index);
|
|
44
45
|
}) });
|
|
45
46
|
}
|
|
@@ -47,4 +48,4 @@ function SelectList({
|
|
|
47
48
|
export {
|
|
48
49
|
SelectList
|
|
49
50
|
};
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
51
|
+
//# sourceMappingURL=chunk-XGMOXMS4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/common/select-list.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { CLI_COLORS, UI_SYMBOLS } from \"../../consts.js\";\nimport { useKeyboardNavigation } from \"../hooks/use-keyboard-navigation.js\";\n\nexport type SelectListItem<T> = {\n value: T;\n label: string;\n};\n\nexport type SelectListProps<T> = {\n items: readonly SelectListItem<T>[];\n onSelect: (value: T) => void;\n onCancel?: (() => void) | undefined;\n renderItem?: ((item: SelectListItem<T>, isFocused: boolean) => React.ReactNode) | undefined;\n active?: boolean | undefined;\n};\n\nexport function SelectList<T>({\n items,\n onSelect,\n onCancel,\n renderItem,\n active,\n}: SelectListProps<T>): React.ReactElement {\n const handleEnter = useCallback(\n (index: number) => {\n const item = items[index];\n if (item) {\n onSelect(item.value);\n }\n },\n [items, onSelect],\n );\n\n const { focusedIndex } = useKeyboardNavigation(\n items.length,\n { onEnter: handleEnter, ...(onCancel !== undefined && { onEscape: onCancel }) },\n { vimKeys: false, ...(active !== undefined && { active }) },\n );\n\n return (\n <Box flexDirection=\"column\">\n {items.map((item, index) => {\n const isFocused = index === focusedIndex;\n const marker = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;\n\n return (\n <Box key={index}>\n <Text bold={isFocused} {...(isFocused && { color: CLI_COLORS.PRIMARY })}>\n {marker}{\" \"}\n </Text>\n {renderItem ? (\n renderItem(item, isFocused)\n ) : (\n <Text bold={isFocused} {...(isFocused && { color: CLI_COLORS.PRIMARY })}>\n {item.label}\n </Text>\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAgB,mBAAmB;AACnC,SAAS,KAAK,YAAY;AAgDd,SAME,KANF;AA/BL,SAAS,WAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,cAAc;AAAA,IAClB,CAAC,UAAkB;AACjB,YAAM,OAAO,MAAM,KAAK;AACxB,UAAI,MAAM;AACR,iBAAS,KAAK,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,EAClB;AAEA,QAAM,EAAE,aAAa,IAAI;AAAA,IACvB,MAAM;AAAA,IACN,EAAE,SAAS,aAAa,GAAI,aAAa,UAAa,EAAE,UAAU,SAAS,EAAG;AAAA,IAC9E,EAAE,SAAS,OAAO,GAAI,WAAW,UAAa,EAAE,OAAO,EAAG;AAAA,EAC5D;AAEA,SACE,oBAAC,OAAI,eAAc,UAChB,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,YAAY,UAAU;AAC5B,UAAM,SAAS,YAAY,WAAW,UAAU,WAAW;AAE3D,WACE,qBAAC,OACC;AAAA,2BAAC,QAAK,MAAM,WAAY,GAAI,aAAa,EAAE,OAAO,WAAW,QAAQ,GAClE;AAAA;AAAA,QAAQ;AAAA,SACX;AAAA,MACC,aACC,WAAW,MAAM,SAAS,IAE1B,oBAAC,QAAK,MAAM,WAAY,GAAI,aAAa,EAAE,OAAO,WAAW,QAAQ,GAClE,eAAK,OACR;AAAA,SATM,KAWV;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/cli/components/common/spinner.tsx
|
|
4
|
+
import "react";
|
|
4
5
|
import { Spinner as InkSpinner } from "@inkjs/ui";
|
|
5
6
|
import { jsx } from "react/jsx-runtime";
|
|
6
7
|
var Spinner = ({ label }) => /* @__PURE__ */ jsx(InkSpinner, { label });
|
|
@@ -8,4 +9,4 @@ var Spinner = ({ label }) => /* @__PURE__ */ jsx(InkSpinner, { label });
|
|
|
8
9
|
export {
|
|
9
10
|
Spinner
|
|
10
11
|
};
|
|
11
|
-
//# sourceMappingURL=chunk-
|
|
12
|
+
//# sourceMappingURL=chunk-ZBPEFQ4G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/common/spinner.tsx"],"sourcesContent":["import React from \"react\";\nimport { Spinner as InkSpinner } from \"@inkjs/ui\";\n\ntype SpinnerProps = {\n label: string;\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({ label }) => <InkSpinner label={label} />;\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/common/spinner.tsx"],"sourcesContent":["import React from \"react\";\nimport { Spinner as InkSpinner } from \"@inkjs/ui\";\n\ntype SpinnerProps = {\n label: string;\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({ label }) => <InkSpinner label={label} />;\n"],"mappings":";;;AAAA,OAAkB;AAClB,SAAS,WAAW,kBAAkB;AAMwB;AAAvD,IAAM,UAAkC,CAAC,EAAE,MAAM,MAAM,oBAAC,cAAW,OAAc;","names":[]}
|
|
@@ -3,23 +3,19 @@ import {
|
|
|
3
3
|
useFocusedListItem
|
|
4
4
|
} from "./chunk-J27W6TXS.js";
|
|
5
5
|
import {
|
|
6
|
-
useSectionScroll
|
|
7
|
-
} from "./chunk-MM7CTTAV.js";
|
|
8
|
-
import {
|
|
9
|
-
HOTKEY_FILTER_INCOMPATIBLE,
|
|
10
6
|
HOTKEY_TOGGLE_LABELS,
|
|
11
7
|
KEY_SPACE,
|
|
12
8
|
isHotkey
|
|
13
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2HC2SNRP.js";
|
|
14
10
|
import {
|
|
15
|
-
|
|
16
|
-
} from "./chunk-
|
|
11
|
+
useSectionScroll
|
|
12
|
+
} from "./chunk-Q5FLW4JG.js";
|
|
17
13
|
import {
|
|
18
14
|
getSkillById
|
|
19
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-35VOK7XE.js";
|
|
20
16
|
import {
|
|
21
17
|
CLI_COLORS
|
|
22
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-R54KIGN2.js";
|
|
23
19
|
|
|
24
20
|
// src/cli/components/wizard/category-grid.tsx
|
|
25
21
|
import { useCallback as useCallback2, useEffect as useEffect2 } from "react";
|
|
@@ -40,8 +36,7 @@ function useCategoryGridInput({
|
|
|
40
36
|
setFocused,
|
|
41
37
|
moveFocus,
|
|
42
38
|
onToggle,
|
|
43
|
-
onToggleLabels
|
|
44
|
-
onToggleFilterIncompatible
|
|
39
|
+
onToggleLabels
|
|
45
40
|
}) {
|
|
46
41
|
const currentRow = categories[focusedRow];
|
|
47
42
|
const currentOptions = useMemo(() => currentRow?.options ?? [], [currentRow]);
|
|
@@ -70,13 +65,9 @@ function useCategoryGridInput({
|
|
|
70
65
|
onToggleLabels();
|
|
71
66
|
return;
|
|
72
67
|
}
|
|
73
|
-
if (FEATURE_FLAGS.FILTER_INCOMPATIBLE && isHotkey(input, HOTKEY_FILTER_INCOMPATIBLE) && onToggleFilterIncompatible) {
|
|
74
|
-
onToggleFilterIncompatible();
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
68
|
if (input === KEY_SPACE) {
|
|
78
69
|
const currentOption = currentOptions[focusedCol];
|
|
79
|
-
if (currentOption) {
|
|
70
|
+
if (currentRow && currentOption) {
|
|
80
71
|
onToggle(currentRow.id, currentOption.id);
|
|
81
72
|
}
|
|
82
73
|
return;
|
|
@@ -115,13 +106,11 @@ var getCompatibilityLabel = (option) => {
|
|
|
115
106
|
if (option.selected) return null;
|
|
116
107
|
if (option.requiredBy) return `(required by ${option.requiredBy})`;
|
|
117
108
|
if (option.state.status === "incompatible") return "(incompatible)";
|
|
118
|
-
if (option.state.status === "recommended") return "(recommended)";
|
|
119
109
|
if (option.state.status === "discouraged") return "(discouraged)";
|
|
120
110
|
return null;
|
|
121
111
|
};
|
|
122
112
|
var STATUS_COLORS = {
|
|
123
113
|
incompatible: CLI_COLORS.ERROR,
|
|
124
|
-
recommended: CLI_COLORS.GRAY_1,
|
|
125
114
|
discouraged: CLI_COLORS.WARNING
|
|
126
115
|
};
|
|
127
116
|
function resolveTagColor(option, fallback) {
|
|
@@ -201,7 +190,6 @@ var CategoryGrid = ({
|
|
|
201
190
|
showLabels,
|
|
202
191
|
onToggle,
|
|
203
192
|
onToggleLabels,
|
|
204
|
-
onToggleFilterIncompatible,
|
|
205
193
|
defaultFocusedRow = 0,
|
|
206
194
|
defaultFocusedCol = 0,
|
|
207
195
|
onFocusChange,
|
|
@@ -240,8 +228,7 @@ var CategoryGrid = ({
|
|
|
240
228
|
setFocused,
|
|
241
229
|
moveFocus,
|
|
242
230
|
onToggle,
|
|
243
|
-
onToggleLabels
|
|
244
|
-
onToggleFilterIncompatible
|
|
231
|
+
onToggleLabels
|
|
245
232
|
});
|
|
246
233
|
const focusedSkillId = categories[focusedRow]?.options[focusedCol]?.id ?? null;
|
|
247
234
|
useEffect2(() => {
|
|
@@ -279,4 +266,4 @@ var CategoryGrid = ({
|
|
|
279
266
|
export {
|
|
280
267
|
CategoryGrid
|
|
281
268
|
};
|
|
282
|
-
//# sourceMappingURL=chunk-
|
|
269
|
+
//# sourceMappingURL=chunk-ZNDLUWWD.js.map
|