@claude-collective/cli 0.21.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +174 -0
- package/README.md +41 -27
- package/config/skills-matrix.yaml +38 -37
- package/config/stacks.yaml +8 -14
- package/dist/{chunk-ZNIDWLL5.js → chunk-3X5D7RM5.js} +4 -3
- package/dist/chunk-3X5D7RM5.js.map +1 -0
- package/dist/chunk-4S4FCAA2.js +100 -0
- package/dist/chunk-4S4FCAA2.js.map +1 -0
- package/dist/chunk-4WGN6SUE.js +197 -0
- package/dist/chunk-4WGN6SUE.js.map +1 -0
- package/dist/{chunk-DHET7RCE.js → chunk-AWKZ5BDL.js} +9 -2
- package/dist/{chunk-DHET7RCE.js.map → chunk-AWKZ5BDL.js.map} +1 -1
- package/dist/{chunk-6Q3Y7KVB.js → chunk-DBRUQQUF.js} +8 -2
- package/dist/chunk-DBRUQQUF.js.map +1 -0
- package/dist/{chunk-OQYYMQJR.js → chunk-ETCVEV3S.js} +8 -11
- package/dist/chunk-ETCVEV3S.js.map +1 -0
- package/dist/{chunk-ZSVMS677.js → chunk-F4RD5FYM.js} +2 -2
- package/dist/chunk-F4RD5FYM.js.map +1 -0
- package/dist/{chunk-5KXUDHAB.js → chunk-GGFOD5PK.js} +6 -9
- package/dist/chunk-GGFOD5PK.js.map +1 -0
- package/dist/{chunk-UMORK7OK.js → chunk-H7SSBSPR.js} +2 -2
- package/dist/chunk-H7SSBSPR.js.map +1 -0
- package/dist/chunk-HWD32NP7.js +19 -0
- package/dist/chunk-HWD32NP7.js.map +1 -0
- package/dist/{chunk-HGCBZUH5.js → chunk-IAYAE6MG.js} +9 -10
- package/dist/chunk-IAYAE6MG.js.map +1 -0
- package/dist/{chunk-RTE64SJA.js → chunk-IXBCRT3F.js} +2 -2
- package/dist/chunk-IXBCRT3F.js.map +1 -0
- package/dist/{chunk-WFEFICFM.js → chunk-KWYO3M5Q.js} +5 -5
- package/dist/chunk-KWYO3M5Q.js.map +1 -0
- package/dist/{chunk-HEOHU5EZ.js → chunk-MCTSHLAF.js} +22 -11
- package/dist/chunk-MCTSHLAF.js.map +1 -0
- package/dist/chunk-MH66WDFV.js +251 -0
- package/dist/chunk-MH66WDFV.js.map +1 -0
- package/dist/{chunk-2LSGX6R4.js → chunk-MTPM7BX5.js} +83 -25
- package/dist/chunk-MTPM7BX5.js.map +1 -0
- package/dist/chunk-NQJ47R4N.js +1092 -0
- package/dist/chunk-NQJ47R4N.js.map +1 -0
- package/dist/chunk-NRC7XYCI.js +211 -0
- package/dist/chunk-NRC7XYCI.js.map +1 -0
- package/dist/{chunk-FJFEKPXF.js → chunk-O6ZTD7ZI.js} +14 -3
- package/dist/chunk-O6ZTD7ZI.js.map +1 -0
- package/dist/chunk-OBXAY23Y.js +56 -0
- package/dist/chunk-OBXAY23Y.js.map +1 -0
- package/dist/{chunk-XY3XDVMI.js → chunk-QR2EBWL2.js} +3 -3
- package/dist/{chunk-66UDJBF6.js → chunk-REJGRCVQ.js} +2 -2
- package/dist/{chunk-CBLPAMZO.js → chunk-TMED5DQ2.js} +68 -42
- package/dist/chunk-TMED5DQ2.js.map +1 -0
- package/dist/{chunk-Q3J43SF3.js → chunk-U7HFKR74.js} +2 -2
- package/dist/chunk-U7HFKR74.js.map +1 -0
- package/dist/{chunk-3EHUF54X.js → chunk-UEMRJI2K.js} +17 -4
- package/dist/chunk-UEMRJI2K.js.map +1 -0
- package/dist/{chunk-Z2CWURZ6.js → chunk-UNN7523L.js} +2 -2
- package/dist/chunk-V2ZIH7HV.js +29 -0
- package/dist/chunk-V2ZIH7HV.js.map +1 -0
- package/dist/{chunk-ZEI3ZUDU.js → chunk-VVYNZZUX.js} +7 -15
- package/dist/chunk-VVYNZZUX.js.map +1 -0
- package/dist/chunk-WXS4S3MA.js +220 -0
- package/dist/chunk-WXS4S3MA.js.map +1 -0
- package/dist/{chunk-A46TPNBJ.js → chunk-XENOESJZ.js} +7 -16
- package/dist/chunk-XENOESJZ.js.map +1 -0
- package/dist/chunk-YDBSSAJ6.js +4207 -0
- package/dist/chunk-YDBSSAJ6.js.map +1 -0
- package/dist/chunk-ZDREFYD2.js +696 -0
- package/dist/chunk-ZDREFYD2.js.map +1 -0
- package/dist/chunk-ZW2PELOH.js +197 -0
- package/dist/chunk-ZW2PELOH.js.map +1 -0
- package/dist/cli/defaults/agent-mappings.yaml +0 -1
- package/dist/commands/build/marketplace.js +15 -13
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +13 -229
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +11 -18
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +36 -58
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +8 -8
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +7 -7
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +6 -6
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +8 -8
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +7 -7
- package/dist/commands/config/unset-project.js +8 -8
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +10 -16
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +18 -51
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +87 -57
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +17 -49
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +26 -26
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +15 -17
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +45 -722
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +8 -87
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +8 -12
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +6 -6
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +15 -19
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +21 -34
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +15 -14
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +13 -24
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +44 -487
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +11 -11
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +9 -10
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +10 -8
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +9 -10
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.js +2 -2
- package/dist/components/common/confirm.test.js +203 -0
- package/dist/components/common/confirm.test.js.map +1 -0
- package/dist/components/common/message.js +1 -1
- package/dist/components/common/spinner.js +1 -1
- package/dist/components/common/spinner.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +132 -78
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/menu-item.js +2 -2
- package/dist/components/wizard/search-modal.js +9 -0
- package/dist/components/wizard/search-modal.js.map +1 -0
- package/dist/components/wizard/search-modal.test.js +216 -0
- package/dist/components/wizard/search-modal.test.js.map +1 -0
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +4 -4
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +10 -0
- package/dist/components/wizard/source-grid.js.map +1 -0
- package/dist/components/wizard/source-grid.test.js +500 -0
- package/dist/components/wizard/source-grid.test.js.map +1 -0
- package/dist/components/wizard/step-approach.js +7 -6
- package/dist/components/wizard/step-approach.test.js +115 -0
- package/dist/components/wizard/step-approach.test.js.map +1 -0
- package/dist/components/wizard/step-build.js +9 -4
- package/dist/components/wizard/step-build.test.js +103 -122
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +3 -2
- package/dist/components/wizard/step-confirm.test.js +364 -0
- package/dist/components/wizard/step-confirm.test.js.map +1 -0
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +19 -13
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +14 -0
- package/dist/components/wizard/step-settings.js.map +1 -0
- package/dist/components/wizard/step-settings.test.js +240 -0
- package/dist/components/wizard/step-settings.test.js.map +1 -0
- package/dist/components/wizard/step-sources.js +17 -0
- package/dist/components/wizard/step-sources.js.map +1 -0
- package/dist/components/wizard/step-sources.test.js +290 -0
- package/dist/components/wizard/step-sources.test.js.map +1 -0
- package/dist/components/wizard/step-stack.js +7 -6
- package/dist/components/wizard/step-stack.test.js +344 -0
- package/dist/components/wizard/step-stack.test.js.map +1 -0
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +6 -5
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +292 -0
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
- package/dist/components/wizard/wizard.js +22 -14
- package/dist/config/skills-matrix.yaml +38 -37
- package/dist/config/stacks.yaml +8 -14
- package/dist/hooks/init.js +5 -5
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{magic-string.es-RGXYGAW3.js → magic-string.es-PAH2SOTR.js} +2 -2
- package/dist/source-manager-DSYZEVGZ.js +16 -0
- package/dist/source-manager-DSYZEVGZ.js.map +1 -0
- package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
- package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/documentor/agent.yaml +1 -1
- package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
- package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/stores/wizard-store.js +4 -3
- package/dist/stores/wizard-store.test.js +51 -82
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +5 -3
- package/src/agents/developer/api-developer/agent.yaml +1 -1
- package/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/src/agents/developer/web-developer/agent.yaml +1 -1
- package/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/src/agents/meta/documentor/agent.yaml +1 -1
- package/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/src/agents/planning/web-pm/agent.yaml +1 -1
- package/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/chunk-2LSGX6R4.js.map +0 -1
- package/dist/chunk-2OKUEELH.js +0 -32
- package/dist/chunk-2OKUEELH.js.map +0 -1
- package/dist/chunk-374JNMR6.js +0 -212
- package/dist/chunk-374JNMR6.js.map +0 -1
- package/dist/chunk-3EHUF54X.js.map +0 -1
- package/dist/chunk-3XR4PALU.js +0 -529
- package/dist/chunk-3XR4PALU.js.map +0 -1
- package/dist/chunk-5K2ZLUO5.js +0 -57
- package/dist/chunk-5K2ZLUO5.js.map +0 -1
- package/dist/chunk-5KXUDHAB.js.map +0 -1
- package/dist/chunk-6Q3Y7KVB.js.map +0 -1
- package/dist/chunk-7SLV7CMF.js +0 -615
- package/dist/chunk-7SLV7CMF.js.map +0 -1
- package/dist/chunk-A46TPNBJ.js.map +0 -1
- package/dist/chunk-AL74GBW4.js +0 -69
- package/dist/chunk-AL74GBW4.js.map +0 -1
- package/dist/chunk-BQX23RBV.js +0 -191
- package/dist/chunk-BQX23RBV.js.map +0 -1
- package/dist/chunk-CA4LH4LI.js +0 -132
- package/dist/chunk-CA4LH4LI.js.map +0 -1
- package/dist/chunk-CBLPAMZO.js.map +0 -1
- package/dist/chunk-CKPQHGXR.js +0 -417
- package/dist/chunk-CKPQHGXR.js.map +0 -1
- package/dist/chunk-CXOFOJCN.js +0 -80
- package/dist/chunk-CXOFOJCN.js.map +0 -1
- package/dist/chunk-EHGD7HIE.js +0 -104
- package/dist/chunk-EHGD7HIE.js.map +0 -1
- package/dist/chunk-EHS3TWWP.js +0 -95
- package/dist/chunk-EHS3TWWP.js.map +0 -1
- package/dist/chunk-FJFEKPXF.js.map +0 -1
- package/dist/chunk-HEOHU5EZ.js.map +0 -1
- package/dist/chunk-HGCBZUH5.js.map +0 -1
- package/dist/chunk-HPGFY5ZN.js +0 -114
- package/dist/chunk-HPGFY5ZN.js.map +0 -1
- package/dist/chunk-INJ2EFRW.js +0 -127
- package/dist/chunk-INJ2EFRW.js.map +0 -1
- package/dist/chunk-IOBFMF6X.js +0 -61
- package/dist/chunk-IOBFMF6X.js.map +0 -1
- package/dist/chunk-KH3HA7J7.js +0 -116
- package/dist/chunk-KH3HA7J7.js.map +0 -1
- package/dist/chunk-N6JNE326.js +0 -261
- package/dist/chunk-N6JNE326.js.map +0 -1
- package/dist/chunk-NAGU7TVZ.js +0 -36
- package/dist/chunk-NAGU7TVZ.js.map +0 -1
- package/dist/chunk-OQYYMQJR.js.map +0 -1
- package/dist/chunk-PLZOUVDD.js +0 -419
- package/dist/chunk-PLZOUVDD.js.map +0 -1
- package/dist/chunk-Q3J43SF3.js.map +0 -1
- package/dist/chunk-RTE64SJA.js.map +0 -1
- package/dist/chunk-T25OEQFI.js +0 -26
- package/dist/chunk-T25OEQFI.js.map +0 -1
- package/dist/chunk-UMORK7OK.js.map +0 -1
- package/dist/chunk-VFHWU7JU.js +0 -287
- package/dist/chunk-VFHWU7JU.js.map +0 -1
- package/dist/chunk-VS4GVTZE.js +0 -91
- package/dist/chunk-VS4GVTZE.js.map +0 -1
- package/dist/chunk-WFEFICFM.js.map +0 -1
- package/dist/chunk-WG6KIAPK.js +0 -54
- package/dist/chunk-WG6KIAPK.js.map +0 -1
- package/dist/chunk-ZEI3ZUDU.js.map +0 -1
- package/dist/chunk-ZNIDWLL5.js.map +0 -1
- package/dist/chunk-ZSVMS677.js.map +0 -1
- /package/dist/{chunk-XY3XDVMI.js.map → chunk-QR2EBWL2.js.map} +0 -0
- /package/dist/{chunk-66UDJBF6.js.map → chunk-REJGRCVQ.js.map} +0 -0
- /package/dist/{chunk-Z2CWURZ6.js.map → chunk-UNN7523L.js.map} +0 -0
- /package/dist/{magic-string.es-RGXYGAW3.js.map → magic-string.es-PAH2SOTR.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/wizard.tsx"],"sourcesContent":["/**\n * Wizard component - Main orchestrator for the skill selection wizard.\n *\n * V2 Flow:\n * - approach: Choose stack template or build from scratch\n * - stack: Select pre-built stack (stack path) OR domains (scratch path)\n * - build: CategoryGrid for technology selection (pre-populated from stack if stack path)\n * - confirm: Final confirmation\n *\n * Navigation:\n * - ESC goes back through history\n * - ESC at approach cancels wizard\n * - Ctrl+C cancels at any point\n */\nimport React, { useCallback } from \"react\";\nimport { Box, Text, useApp, useInput, useStdout } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardLayout } from \"./wizard-layout.js\";\nimport { StepApproach } from \"./step-approach.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { validateSelection } from \"../../lib/matrix-resolver.js\";\nimport type { MergedSkillsMatrix } from \"../../types-matrix.js\";\nimport { getStackName } from \"./utils.js\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface WizardResultV2 {\n selectedSkills: string[];\n selectedStackId: string | null;\n domainSelections: Record<string, Record<string, string[]>>;\n expertMode: boolean;\n installMode: \"plugin\" | \"local\";\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n}\n\ninterface WizardProps {\n matrix: MergedSkillsMatrix;\n onComplete: (result: WizardResultV2) => void;\n onCancel: () => void;\n initialSkills?: string[];\n version?: string;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction getParentDomain(domain: string, matrix: MergedSkillsMatrix): string | undefined {\n const cat = Object.values(matrix.categories).find((c) => c.domain === domain && c.parent_domain);\n return cat?.parent_domain;\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\n/** Minimum terminal width required for the wizard */\nconst MIN_TERMINAL_WIDTH = 80;\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport const Wizard: React.FC<WizardProps> = ({ matrix, onComplete, onCancel, version }) => {\n const store = useWizardStore();\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n // Check terminal width\n const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n\n // Global keyboard shortcut handler\n useInput((input, key) => {\n if (key.escape) {\n if (store.step === \"approach\") {\n onCancel();\n exit();\n } else if (store.step !== \"build\" && store.step !== \"confirm\") {\n // Only handle escape globally for steps that don't have their own escape handler.\n // Build and confirm handle escape via their onBack props.\n store.goBack();\n }\n return;\n }\n\n // Accept defaults shortcut (stack path only, during build step)\n if ((input === \"a\" || input === \"A\") && store.step === \"build\" && store.selectedStackId) {\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n return;\n }\n\n // Global toggles\n if (input === \"e\" || input === \"E\") {\n store.toggleExpertMode();\n return;\n }\n if (input === \"p\" || input === \"P\") {\n store.toggleInstallMode();\n return;\n }\n });\n\n // Handle wizard completion\n const handleComplete = useCallback(() => {\n let allSkills: string[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n // Stack + defaults path: use stack's allSkillIds directly\n const stack = matrix.suggestedStacks.find((s) => s.id === store.selectedStackId);\n if (!stack) {\n console.warn(`Stack not found in matrix: ${store.selectedStackId}`);\n }\n allSkills = [...(stack?.allSkillIds || [])];\n } else {\n // Scratch / Customize path: resolve domainSelections via aliases\n const techNames = store.getAllSelectedTechnologies();\n // Resolve each technology name to its full skill ID via aliases\n allSkills = techNames.map((tech) => {\n const resolved = matrix.aliases[tech];\n if (!resolved && !matrix.skills[tech]) {\n console.warn(\n `Warning: Technology '${tech}' could not be resolved to a skill ID — it may be missing from skill_aliases`,\n );\n }\n return resolved || tech;\n });\n }\n\n // Add methodology skills (always included)\n const methodologySkills = store.getSelectedSkills();\n for (const skill of methodologySkills) {\n if (!allSkills.includes(skill)) {\n allSkills.push(skill);\n }\n }\n\n const validation = validateSelection(allSkills, matrix);\n\n const result: WizardResultV2 = {\n selectedSkills: allSkills,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n expertMode: store.expertMode,\n installMode: store.installMode,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, matrix, onComplete, exit]);\n\n // Render current step\n const renderStep = () => {\n switch (store.step) {\n case \"approach\":\n return <StepApproach />;\n\n case \"stack\":\n return <StepStack matrix={matrix} />;\n\n case \"build\": {\n const currentDomain = store.getCurrentDomain();\n // For stack path with customize, use all domains from stack\n // For scratch path, use selectedDomains\n const effectiveDomains = store.selectedDomains.length > 0 ? store.selectedDomains : [\"web\"]; // Default to web if no domains selected\n\n const allSelections = store.getAllSelectedTechnologies();\n\n const activeDomain = currentDomain || effectiveDomains[0] || \"web\";\n const parentDomain = getParentDomain(activeDomain, matrix);\n const parentDomainSelections = parentDomain\n ? store.domainSelections[parentDomain]\n : undefined;\n\n return (\n <StepBuild\n matrix={matrix}\n domain={activeDomain}\n selectedDomains={effectiveDomains}\n selections={store.domainSelections[activeDomain] || {}}\n allSelections={allSelections}\n focusedRow={store.focusedRow}\n focusedCol={store.focusedCol}\n showDescriptions={store.showDescriptions}\n expertMode={store.expertMode}\n parentDomainSelections={parentDomainSelections}\n onToggle={(subcategoryId, techId) => {\n const domain = store.getCurrentDomain() || \"web\";\n const cat = matrix.categories[subcategoryId];\n store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);\n }}\n onFocusChange={store.setFocus}\n onToggleDescriptions={store.toggleShowDescriptions}\n onContinue={() => {\n if (!store.nextDomain()) {\n store.setStep(\"confirm\");\n }\n }}\n onBack={() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }}\n />\n );\n }\n\n case \"confirm\": {\n const stackName = getStackName(store.selectedStackId, matrix);\n return (\n <StepConfirm\n matrix={matrix}\n onComplete={handleComplete}\n stackName={stackName}\n selectedDomains={store.selectedDomains}\n domainSelections={store.domainSelections}\n technologyCount={store.getAllSelectedTechnologies().length}\n skillCount={store.getAllSelectedTechnologies().length}\n installMode={store.installMode}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n // Show warning if terminal is too narrow\n if (isNarrowTerminal) {\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color=\"yellow\">\n Terminal too narrow ({terminalWidth} columns). Please resize to at least{\" \"}\n {MIN_TERMINAL_WIDTH} columns.\n </Text>\n <Box marginTop={1}>\n <Text dimColor>Current width: {terminalWidth} columns</Text>\n </Box>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout version={version}>{renderStep()}</WizardLayout>\n </ThemeProvider>\n );\n};\n"],"mappings":"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","names":[]}
|
package/dist/chunk-2OKUEELH.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
fileExists
|
|
4
|
-
} from "./chunk-AL74GBW4.js";
|
|
5
|
-
import {
|
|
6
|
-
PLUGIN_MANIFEST_DIR,
|
|
7
|
-
PLUGIN_MANIFEST_FILE
|
|
8
|
-
} from "./chunk-FJFEKPXF.js";
|
|
9
|
-
import {
|
|
10
|
-
init_esm_shims
|
|
11
|
-
} from "./chunk-DHET7RCE.js";
|
|
12
|
-
|
|
13
|
-
// src/cli/lib/plugin-manifest-finder.ts
|
|
14
|
-
init_esm_shims();
|
|
15
|
-
import path from "path";
|
|
16
|
-
async function findPluginManifest(startDir) {
|
|
17
|
-
let currentDir = startDir;
|
|
18
|
-
const root = path.parse(currentDir).root;
|
|
19
|
-
while (currentDir !== root) {
|
|
20
|
-
const manifestPath = path.join(currentDir, PLUGIN_MANIFEST_DIR, PLUGIN_MANIFEST_FILE);
|
|
21
|
-
if (await fileExists(manifestPath)) {
|
|
22
|
-
return manifestPath;
|
|
23
|
-
}
|
|
24
|
-
currentDir = path.dirname(currentDir);
|
|
25
|
-
}
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export {
|
|
30
|
-
findPluginManifest
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=chunk-2OKUEELH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/plugin-manifest-finder.ts"],"sourcesContent":["/**\n * Find the nearest plugin manifest by walking up the directory tree.\n */\nimport path from \"path\";\nimport { PLUGIN_MANIFEST_DIR, PLUGIN_MANIFEST_FILE } from \"../consts\";\nimport { fileExists } from \"../utils/fs\";\n\n/**\n * Walk up from `startDir` to the filesystem root, looking for\n * `PLUGIN_MANIFEST_DIR/PLUGIN_MANIFEST_FILE` (e.g. `.claude-plugin/plugin.json`).\n *\n * Returns the full path to the manifest file, or `null` if not found.\n */\nexport async function findPluginManifest(startDir: string): Promise<string | null> {\n let currentDir = startDir;\n const root = path.parse(currentDir).root;\n\n while (currentDir !== root) {\n const manifestPath = path.join(currentDir, PLUGIN_MANIFEST_DIR, PLUGIN_MANIFEST_FILE);\n if (await fileExists(manifestPath)) {\n return manifestPath;\n }\n currentDir = path.dirname(currentDir);\n }\n\n return null;\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAGA,OAAO,UAAU;AAUjB,eAAsB,mBAAmB,UAA0C;AACjF,MAAI,aAAa;AACjB,QAAM,OAAO,KAAK,MAAM,UAAU,EAAE;AAEpC,SAAO,eAAe,MAAM;AAC1B,UAAM,eAAe,KAAK,KAAK,YAAY,qBAAqB,oBAAoB;AACpF,QAAI,MAAM,WAAW,YAAY,GAAG;AAClC,aAAO;AAAA,IACT;AACA,iBAAa,KAAK,QAAQ,UAAU;AAAA,EACtC;AAEA,SAAO;AACT;","names":[]}
|
package/dist/chunk-374JNMR6.js
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
verbose
|
|
4
|
-
} from "./chunk-T25OEQFI.js";
|
|
5
|
-
import {
|
|
6
|
-
ensureDir,
|
|
7
|
-
fileExists,
|
|
8
|
-
readFile,
|
|
9
|
-
writeFile
|
|
10
|
-
} from "./chunk-AL74GBW4.js";
|
|
11
|
-
import {
|
|
12
|
-
CLAUDE_DIR,
|
|
13
|
-
CLAUDE_SRC_DIR
|
|
14
|
-
} from "./chunk-FJFEKPXF.js";
|
|
15
|
-
import {
|
|
16
|
-
init_esm_shims
|
|
17
|
-
} from "./chunk-DHET7RCE.js";
|
|
18
|
-
|
|
19
|
-
// src/cli/lib/config.ts
|
|
20
|
-
init_esm_shims();
|
|
21
|
-
import path from "path";
|
|
22
|
-
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
23
|
-
var DEFAULT_SOURCE = "github:claude-collective/skills";
|
|
24
|
-
var SOURCE_ENV_VAR = "CC_SOURCE";
|
|
25
|
-
var PROJECT_CONFIG_FILE = "config.yaml";
|
|
26
|
-
function isValidSourceEntry(entry) {
|
|
27
|
-
if (typeof entry !== "object" || entry === null) return false;
|
|
28
|
-
const e = entry;
|
|
29
|
-
if (typeof e.name !== "string" || typeof e.url !== "string") return false;
|
|
30
|
-
if (e.description !== void 0 && typeof e.description !== "string") return false;
|
|
31
|
-
if (e.ref !== void 0 && typeof e.ref !== "string") return false;
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
function isValidSourcesArray(arr) {
|
|
35
|
-
if (!Array.isArray(arr)) return false;
|
|
36
|
-
return arr.every(isValidSourceEntry);
|
|
37
|
-
}
|
|
38
|
-
function isValidProjectConfig(obj) {
|
|
39
|
-
if (typeof obj !== "object" || obj === null) return false;
|
|
40
|
-
const config = obj;
|
|
41
|
-
if (config.source !== void 0 && typeof config.source !== "string") return false;
|
|
42
|
-
if (config.author !== void 0 && typeof config.author !== "string") return false;
|
|
43
|
-
if (config.marketplace !== void 0 && typeof config.marketplace !== "string") return false;
|
|
44
|
-
if (config.agents_source !== void 0 && typeof config.agents_source !== "string") return false;
|
|
45
|
-
if (config.sources !== void 0 && !isValidSourcesArray(config.sources)) return false;
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
function getProjectConfigPath(projectDir) {
|
|
49
|
-
return path.join(projectDir, CLAUDE_SRC_DIR, PROJECT_CONFIG_FILE);
|
|
50
|
-
}
|
|
51
|
-
async function loadProjectConfig(projectDir) {
|
|
52
|
-
const srcConfigPath = getProjectConfigPath(projectDir);
|
|
53
|
-
const legacyConfigPath = path.join(projectDir, CLAUDE_DIR, "config.yaml");
|
|
54
|
-
let configPath = srcConfigPath;
|
|
55
|
-
if (!await fileExists(srcConfigPath)) {
|
|
56
|
-
if (await fileExists(legacyConfigPath)) {
|
|
57
|
-
configPath = legacyConfigPath;
|
|
58
|
-
verbose(`Using legacy config location: ${legacyConfigPath}`);
|
|
59
|
-
} else {
|
|
60
|
-
verbose(`Project config not found at ${srcConfigPath} or ${legacyConfigPath}`);
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
try {
|
|
65
|
-
const content = await readFile(configPath);
|
|
66
|
-
const parsed = parseYaml(content);
|
|
67
|
-
if (!isValidProjectConfig(parsed)) {
|
|
68
|
-
verbose(`Invalid project config structure at ${configPath}`);
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
verbose(`Loaded project config from ${configPath}`);
|
|
72
|
-
return parsed;
|
|
73
|
-
} catch (error) {
|
|
74
|
-
verbose(`Failed to parse project config: ${error}`);
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
async function saveProjectConfig(projectDir, config) {
|
|
79
|
-
const configPath = getProjectConfigPath(projectDir);
|
|
80
|
-
await ensureDir(path.join(projectDir, CLAUDE_SRC_DIR));
|
|
81
|
-
const content = stringifyYaml(config, { lineWidth: 0 });
|
|
82
|
-
await writeFile(configPath, content);
|
|
83
|
-
verbose(`Saved project config to ${configPath}`);
|
|
84
|
-
}
|
|
85
|
-
async function resolveSource(flagValue, projectDir) {
|
|
86
|
-
const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;
|
|
87
|
-
const marketplace = projectConfig?.marketplace;
|
|
88
|
-
if (flagValue !== void 0) {
|
|
89
|
-
if (flagValue === "" || flagValue.trim() === "") {
|
|
90
|
-
throw new Error("--source flag cannot be empty");
|
|
91
|
-
}
|
|
92
|
-
verbose(`Source from --source flag: ${flagValue}`);
|
|
93
|
-
return { source: flagValue, sourceOrigin: "flag", marketplace };
|
|
94
|
-
}
|
|
95
|
-
const envValue = process.env[SOURCE_ENV_VAR];
|
|
96
|
-
if (envValue) {
|
|
97
|
-
verbose(`Source from ${SOURCE_ENV_VAR} env var: ${envValue}`);
|
|
98
|
-
return { source: envValue, sourceOrigin: "env", marketplace };
|
|
99
|
-
}
|
|
100
|
-
if (projectConfig?.source) {
|
|
101
|
-
verbose(`Source from project config: ${projectConfig.source}`);
|
|
102
|
-
return {
|
|
103
|
-
source: projectConfig.source,
|
|
104
|
-
sourceOrigin: "project",
|
|
105
|
-
marketplace
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
verbose(`Using default source: ${DEFAULT_SOURCE}`);
|
|
109
|
-
return { source: DEFAULT_SOURCE, sourceOrigin: "default", marketplace };
|
|
110
|
-
}
|
|
111
|
-
async function resolveAgentsSource(flagValue, projectDir) {
|
|
112
|
-
if (flagValue !== void 0) {
|
|
113
|
-
if (flagValue === "" || flagValue.trim() === "") {
|
|
114
|
-
throw new Error("--agent-source flag cannot be empty");
|
|
115
|
-
}
|
|
116
|
-
verbose(`Agents source from --agent-source flag: ${flagValue}`);
|
|
117
|
-
return { agentsSource: flagValue, agentsSourceOrigin: "flag" };
|
|
118
|
-
}
|
|
119
|
-
const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;
|
|
120
|
-
if (projectConfig?.agents_source) {
|
|
121
|
-
verbose(`Agents source from project config: ${projectConfig.agents_source}`);
|
|
122
|
-
return {
|
|
123
|
-
agentsSource: projectConfig.agents_source,
|
|
124
|
-
agentsSourceOrigin: "project"
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
verbose("Using default agents source (local CLI)");
|
|
128
|
-
return { agentsSource: void 0, agentsSourceOrigin: "default" };
|
|
129
|
-
}
|
|
130
|
-
function formatAgentsSourceOrigin(origin) {
|
|
131
|
-
switch (origin) {
|
|
132
|
-
case "flag":
|
|
133
|
-
return "--agent-source flag";
|
|
134
|
-
case "project":
|
|
135
|
-
return "project config (.claude-src/config.yaml)";
|
|
136
|
-
case "default":
|
|
137
|
-
return "default (local CLI)";
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
async function resolveAuthor(projectDir) {
|
|
141
|
-
const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;
|
|
142
|
-
return projectConfig?.author;
|
|
143
|
-
}
|
|
144
|
-
function formatSourceOrigin(origin) {
|
|
145
|
-
switch (origin) {
|
|
146
|
-
case "flag":
|
|
147
|
-
return "--source flag";
|
|
148
|
-
case "env":
|
|
149
|
-
return `${SOURCE_ENV_VAR} environment variable`;
|
|
150
|
-
case "project":
|
|
151
|
-
return "project config (.claude-src/config.yaml)";
|
|
152
|
-
case "default":
|
|
153
|
-
return "default";
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
async function resolveAllSources(projectDir) {
|
|
157
|
-
const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;
|
|
158
|
-
const resolvedConfig = await resolveSource(void 0, projectDir);
|
|
159
|
-
const primary = {
|
|
160
|
-
name: "marketplace",
|
|
161
|
-
url: resolvedConfig.source,
|
|
162
|
-
description: "Primary skills marketplace"
|
|
163
|
-
};
|
|
164
|
-
const extras = [];
|
|
165
|
-
const seenNames = /* @__PURE__ */ new Set();
|
|
166
|
-
if (projectConfig?.sources) {
|
|
167
|
-
for (const source of projectConfig.sources) {
|
|
168
|
-
if (!seenNames.has(source.name)) {
|
|
169
|
-
seenNames.add(source.name);
|
|
170
|
-
extras.push(source);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return { primary, extras };
|
|
175
|
-
}
|
|
176
|
-
function isLocalSource(source) {
|
|
177
|
-
if (source.startsWith("/") || source.startsWith(".")) {
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
const remoteProtocols = [
|
|
181
|
-
"github:",
|
|
182
|
-
"gh:",
|
|
183
|
-
"gitlab:",
|
|
184
|
-
"bitbucket:",
|
|
185
|
-
"sourcehut:",
|
|
186
|
-
"https://",
|
|
187
|
-
"http://"
|
|
188
|
-
];
|
|
189
|
-
const hasRemoteProtocol = remoteProtocols.some((prefix) => source.startsWith(prefix));
|
|
190
|
-
if (!hasRemoteProtocol) {
|
|
191
|
-
if (source.includes("..") || source.includes("~")) {
|
|
192
|
-
throw new Error(`Invalid source path: ${source}. Path traversal patterns are not allowed.`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return !hasRemoteProtocol;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
export {
|
|
199
|
-
DEFAULT_SOURCE,
|
|
200
|
-
SOURCE_ENV_VAR,
|
|
201
|
-
getProjectConfigPath,
|
|
202
|
-
loadProjectConfig,
|
|
203
|
-
saveProjectConfig,
|
|
204
|
-
resolveSource,
|
|
205
|
-
resolveAgentsSource,
|
|
206
|
-
formatAgentsSourceOrigin,
|
|
207
|
-
resolveAuthor,
|
|
208
|
-
formatSourceOrigin,
|
|
209
|
-
resolveAllSources,
|
|
210
|
-
isLocalSource
|
|
211
|
-
};
|
|
212
|
-
//# sourceMappingURL=chunk-374JNMR6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/config.ts"],"sourcesContent":["import path from \"path\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { readFile, writeFile, fileExists, ensureDir } from \"../utils/fs\";\nimport { verbose } from \"../utils/logger\";\nimport { CLAUDE_DIR, CLAUDE_SRC_DIR } from \"../consts\";\n\nexport const DEFAULT_SOURCE = \"github:claude-collective/skills\";\nexport const SOURCE_ENV_VAR = \"CC_SOURCE\";\nexport const PROJECT_CONFIG_FILE = \"config.yaml\";\n\n/**\n * Extra source entry for third-party skill repositories.\n * Used in project configs.\n */\nexport interface SourceEntry {\n /** Short name for the source (e.g., \"company\", \"team\") */\n name: string;\n /** GitHub URL or path (e.g., \"github:owner/repo\") */\n url: string;\n /** Optional description */\n description?: string;\n /** Optional ref to pin to (branch, tag, or commit) */\n ref?: string;\n}\n\nexport interface ProjectSourceConfig {\n source?: string;\n author?: string;\n marketplace?: string;\n agents_source?: string;\n /** Extra sources for third-party skills */\n sources?: SourceEntry[];\n}\n\nexport interface ResolvedConfig {\n source: string;\n sourceOrigin: \"flag\" | \"env\" | \"project\" | \"default\";\n marketplace?: string;\n}\n\nfunction isValidSourceEntry(entry: unknown): entry is SourceEntry {\n if (typeof entry !== \"object\" || entry === null) return false;\n const e = entry as Record<string, unknown>;\n if (typeof e.name !== \"string\" || typeof e.url !== \"string\") return false;\n if (e.description !== undefined && typeof e.description !== \"string\") return false;\n if (e.ref !== undefined && typeof e.ref !== \"string\") return false;\n return true;\n}\n\nfunction isValidSourcesArray(arr: unknown): arr is SourceEntry[] {\n if (!Array.isArray(arr)) return false;\n return arr.every(isValidSourceEntry);\n}\n\nfunction isValidProjectConfig(obj: unknown): obj is ProjectSourceConfig {\n if (typeof obj !== \"object\" || obj === null) return false;\n const config = obj as Record<string, unknown>;\n if (config.source !== undefined && typeof config.source !== \"string\") return false;\n if (config.author !== undefined && typeof config.author !== \"string\") return false;\n if (config.marketplace !== undefined && typeof config.marketplace !== \"string\") return false;\n if (config.agents_source !== undefined && typeof config.agents_source !== \"string\") return false;\n if (config.sources !== undefined && !isValidSourcesArray(config.sources)) return false;\n return true;\n}\n\nexport function getProjectConfigPath(projectDir: string): string {\n return path.join(projectDir, CLAUDE_SRC_DIR, PROJECT_CONFIG_FILE);\n}\n\nexport async function loadProjectConfig(projectDir: string): Promise<ProjectSourceConfig | null> {\n // Check .claude-src/config.yaml first (new location)\n const srcConfigPath = getProjectConfigPath(projectDir);\n // Fall back to .claude/config.yaml (legacy location)\n const legacyConfigPath = path.join(projectDir, CLAUDE_DIR, \"config.yaml\");\n\n let configPath = srcConfigPath;\n if (!(await fileExists(srcConfigPath))) {\n if (await fileExists(legacyConfigPath)) {\n configPath = legacyConfigPath;\n verbose(`Using legacy config location: ${legacyConfigPath}`);\n } else {\n verbose(`Project config not found at ${srcConfigPath} or ${legacyConfigPath}`);\n return null;\n }\n }\n\n try {\n const content = await readFile(configPath);\n const parsed = parseYaml(content);\n if (!isValidProjectConfig(parsed)) {\n verbose(`Invalid project config structure at ${configPath}`);\n return null;\n }\n verbose(`Loaded project config from ${configPath}`);\n return parsed;\n } catch (error) {\n verbose(`Failed to parse project config: ${error}`);\n return null;\n }\n}\n\nexport async function saveProjectConfig(\n projectDir: string,\n config: ProjectSourceConfig,\n): Promise<void> {\n const configPath = getProjectConfigPath(projectDir);\n await ensureDir(path.join(projectDir, CLAUDE_SRC_DIR));\n const content = stringifyYaml(config, { lineWidth: 0 });\n await writeFile(configPath, content);\n verbose(`Saved project config to ${configPath}`);\n}\n\n/** Resolve source with precedence: flag > env > project > default */\nexport async function resolveSource(\n flagValue?: string,\n projectDir?: string,\n): Promise<ResolvedConfig> {\n // Load project config for marketplace (marketplace is resolved separately from source)\n const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;\n\n // Resolve marketplace: project config only (no flag/env support for marketplace)\n const marketplace = projectConfig?.marketplace;\n\n if (flagValue !== undefined) {\n if (flagValue === \"\" || flagValue.trim() === \"\") {\n throw new Error(\"--source flag cannot be empty\");\n }\n verbose(`Source from --source flag: ${flagValue}`);\n return { source: flagValue, sourceOrigin: \"flag\", marketplace };\n }\n\n const envValue = process.env[SOURCE_ENV_VAR];\n if (envValue) {\n verbose(`Source from ${SOURCE_ENV_VAR} env var: ${envValue}`);\n return { source: envValue, sourceOrigin: \"env\", marketplace };\n }\n\n if (projectConfig?.source) {\n verbose(`Source from project config: ${projectConfig.source}`);\n return {\n source: projectConfig.source,\n sourceOrigin: \"project\",\n marketplace,\n };\n }\n\n verbose(`Using default source: ${DEFAULT_SOURCE}`);\n return { source: DEFAULT_SOURCE, sourceOrigin: \"default\", marketplace };\n}\n\nexport type AgentsSourceOrigin = \"flag\" | \"project\" | \"default\";\n\nexport interface ResolvedAgentsSource {\n agentsSource?: string;\n agentsSourceOrigin: AgentsSourceOrigin;\n}\n\n/** Resolve agents_source with precedence: flag > project > default (undefined) */\nexport async function resolveAgentsSource(\n flagValue?: string,\n projectDir?: string,\n): Promise<ResolvedAgentsSource> {\n if (flagValue !== undefined) {\n if (flagValue === \"\" || flagValue.trim() === \"\") {\n throw new Error(\"--agent-source flag cannot be empty\");\n }\n verbose(`Agents source from --agent-source flag: ${flagValue}`);\n return { agentsSource: flagValue, agentsSourceOrigin: \"flag\" };\n }\n\n const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;\n if (projectConfig?.agents_source) {\n verbose(`Agents source from project config: ${projectConfig.agents_source}`);\n return {\n agentsSource: projectConfig.agents_source,\n agentsSourceOrigin: \"project\",\n };\n }\n\n verbose(\"Using default agents source (local CLI)\");\n return { agentsSource: undefined, agentsSourceOrigin: \"default\" };\n}\n\nexport function formatAgentsSourceOrigin(origin: AgentsSourceOrigin): string {\n switch (origin) {\n case \"flag\":\n return \"--agent-source flag\";\n case \"project\":\n return \"project config (.claude-src/config.yaml)\";\n case \"default\":\n return \"default (local CLI)\";\n }\n}\n\n/** Resolve author from project config */\nexport async function resolveAuthor(projectDir?: string): Promise<string | undefined> {\n const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;\n return projectConfig?.author;\n}\n\nexport function formatSourceOrigin(origin: ResolvedConfig[\"sourceOrigin\"]): string {\n switch (origin) {\n case \"flag\":\n return \"--source flag\";\n case \"env\":\n return `${SOURCE_ENV_VAR} environment variable`;\n case \"project\":\n return \"project config (.claude-src/config.yaml)\";\n case \"default\":\n return \"default\";\n }\n}\n\n/**\n * Resolve all configured sources for skill search.\n * Returns primary source plus any extra sources from project config.\n */\nexport async function resolveAllSources(\n projectDir?: string,\n): Promise<{ primary: SourceEntry; extras: SourceEntry[] }> {\n const projectConfig = projectDir ? await loadProjectConfig(projectDir) : null;\n\n // Get primary source\n const resolvedConfig = await resolveSource(undefined, projectDir);\n const primary: SourceEntry = {\n name: \"marketplace\",\n url: resolvedConfig.source,\n description: \"Primary skills marketplace\",\n };\n\n // Collect extra sources from project config\n const extras: SourceEntry[] = [];\n const seenNames = new Set<string>();\n\n if (projectConfig?.sources) {\n for (const source of projectConfig.sources) {\n if (!seenNames.has(source.name)) {\n seenNames.add(source.name);\n extras.push(source);\n }\n }\n }\n\n return { primary, extras };\n}\n\nexport function isLocalSource(source: string): boolean {\n if (source.startsWith(\"/\") || source.startsWith(\".\")) {\n return true;\n }\n\n const remoteProtocols = [\n \"github:\",\n \"gh:\",\n \"gitlab:\",\n \"bitbucket:\",\n \"sourcehut:\",\n \"https://\",\n \"http://\",\n ];\n\n const hasRemoteProtocol = remoteProtocols.some((prefix) => source.startsWith(prefix));\n\n if (!hasRemoteProtocol) {\n if (source.includes(\"..\") || source.includes(\"~\")) {\n throw new Error(`Invalid source path: ${source}. Path traversal patterns are not allowed.`);\n }\n }\n\n return !hasRemoteProtocol;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/wizard-layout.tsx"],"sourcesContent":["import React, { Fragment, useMemo } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { WizardTabs, WIZARD_STEPS } from \"./wizard-tabs.js\";\n\ninterface KeyHintProps {\n isVisible?: boolean;\n isActive?: boolean;\n label: string;\n values: string[];\n}\n\nexport const DefinitionItem: React.FC<KeyHintProps> = ({\n isVisible = true,\n isActive = false,\n label,\n values,\n}) => {\n if (!isVisible) {\n return null;\n }\n\n return (\n <Text>\n {values.map((value) => (\n <Fragment key={value}>\n <Text backgroundColor=\"black\" color=\"white\">\n {\" \"}\n {value}{\" \"}\n </Text>{\" \"}\n </Fragment>\n ))}\n <Text color={isActive ? \"cyan\" : undefined}>{label}</Text>\n </Text>\n );\n};\n\nconst HOT_KEYS: { label: string; values: string[] }[] = [\n { label: \"navigate\", values: [\"\\u2190/\\u2192\", \"\\u2191/\\u2193\"] },\n { label: \"select\", values: [\"SPACE\"] },\n { label: \"continue\", values: [\"ENTER\"] },\n { label: \"back\", values: [\"ESC\"] },\n];\n\nexport const WizardFooter = () => {\n const store = useWizardStore();\n\n return (\n <Box\n columnGap={2}\n borderTop\n borderRight={false}\n borderBottom\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingLeft={1}\n paddingRight={1}\n >\n <DefinitionItem\n label=\"Accept defaults\"\n values={[\"A\"]}\n isVisible={store.step === \"build\" && !!store.selectedStackId}\n />\n {HOT_KEYS.map((hotkey) => (\n <DefinitionItem {...hotkey} key={hotkey.label} />\n ))}\n </Box>\n );\n};\n\ninterface WizardLayoutProps {\n version?: string;\n children: React.ReactNode;\n}\n\nexport const WizardLayout: React.FC<WizardLayoutProps> = ({ version, children }) => {\n const store = useWizardStore();\n\n // Compute completed and skipped steps for WizardTabs\n const { completedSteps, skippedSteps } = useMemo(() => {\n const completed: string[] = [];\n const skipped: string[] = [];\n\n // Approach is complete when we've moved past it\n if (store.step !== \"approach\") {\n completed.push(\"approach\");\n }\n\n // Stack step handling\n if (store.step !== \"approach\" && store.step !== \"stack\") {\n completed.push(\"stack\");\n }\n\n // Build step handling\n // Stack path with defaults skips build\n if (store.approach === \"stack\" && store.selectedStackId && store.stackAction === \"defaults\") {\n skipped.push(\"build\");\n } else if (store.step === \"confirm\") {\n completed.push(\"build\");\n }\n\n return { completedSteps: completed, skippedSteps: skipped };\n }, [store.step, store.approach, store.selectedStackId, store.stackAction]);\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <WizardTabs\n steps={WIZARD_STEPS}\n currentStep={store.step}\n completedSteps={completedSteps}\n skippedSteps={skippedSteps}\n version={version}\n />\n <Box marginTop={1}>{children}</Box>\n <Box paddingX={1} columnGap={2} marginTop={2}>\n <DefinitionItem label=\"Expert mode\" values={[\"E\"]} isActive={store.expertMode} />\n <DefinitionItem\n label=\"Descriptions\"\n values={[\"D\"]}\n isVisible={store.step === \"build\"}\n isActive={store.showDescriptions}\n />\n <DefinitionItem\n label=\"Plugin mode\"\n values={[\"P\"]}\n isActive={store.installMode === \"plugin\"}\n />\n </Box>\n <WizardFooter />\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|