@claude-collective/cli 0.2.0 → 0.6.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 +113 -0
- package/README.md +1 -1
- package/dist/chunk-367K3JB3.js +84 -0
- package/dist/chunk-367K3JB3.js.map +1 -0
- package/dist/chunk-6ESUJMM7.js +54 -0
- package/dist/chunk-6ESUJMM7.js.map +1 -0
- package/dist/chunk-6OY6ZYQF.js +93 -0
- package/dist/chunk-6OY6ZYQF.js.map +1 -0
- package/dist/chunk-6WEQADPL.js +307 -0
- package/dist/chunk-6WEQADPL.js.map +1 -0
- package/dist/chunk-AU7XVCLO.js +91 -0
- package/dist/chunk-AU7XVCLO.js.map +1 -0
- package/dist/chunk-AZP2AA5M.js +425 -0
- package/dist/chunk-AZP2AA5M.js.map +1 -0
- package/dist/chunk-D4IQAT27.js +114 -0
- package/dist/chunk-D4IQAT27.js.map +1 -0
- package/dist/chunk-DHET7RCE.js +50 -0
- package/dist/chunk-DHET7RCE.js.map +1 -0
- package/dist/chunk-DHFFRMF6.js +31 -0
- package/dist/chunk-DHFFRMF6.js.map +1 -0
- package/dist/chunk-FKU7VSUD.js +453 -0
- package/dist/chunk-FKU7VSUD.js.map +1 -0
- package/dist/chunk-J2Y4A3LP.js +478 -0
- package/dist/chunk-J2Y4A3LP.js.map +1 -0
- package/dist/chunk-JMQGWQZU.js +607 -0
- package/dist/chunk-JMQGWQZU.js.map +1 -0
- package/dist/chunk-JY4RO76L.js +73 -0
- package/dist/chunk-JY4RO76L.js.map +1 -0
- package/dist/chunk-M7YCPFIX.js +108 -0
- package/dist/chunk-M7YCPFIX.js.map +1 -0
- package/dist/chunk-MJSFR562.js +57 -0
- package/dist/chunk-MJSFR562.js.map +1 -0
- package/dist/chunk-MMDXNZPF.js +69 -0
- package/dist/chunk-MMDXNZPF.js.map +1 -0
- package/dist/chunk-MYAVQ23U.js +356 -0
- package/dist/chunk-MYAVQ23U.js.map +1 -0
- package/dist/chunk-OSQDDJXX.js +146 -0
- package/dist/chunk-OSQDDJXX.js.map +1 -0
- package/dist/chunk-QESUUPOE.js +241 -0
- package/dist/chunk-QESUUPOE.js.map +1 -0
- package/dist/chunk-SJYG4EJZ.js +57 -0
- package/dist/chunk-SJYG4EJZ.js.map +1 -0
- package/dist/chunk-SYQ7R2JO.js +95 -0
- package/dist/chunk-SYQ7R2JO.js.map +1 -0
- package/dist/chunk-TD643KB3.js +245 -0
- package/dist/chunk-TD643KB3.js.map +1 -0
- package/dist/chunk-TFV6Z7F7.js +129 -0
- package/dist/chunk-TFV6Z7F7.js.map +1 -0
- package/dist/chunk-TGOHJCQ4.js +83 -0
- package/dist/chunk-TGOHJCQ4.js.map +1 -0
- package/dist/chunk-TOPAIL5W.js +22 -0
- package/dist/chunk-TOPAIL5W.js.map +1 -0
- package/dist/chunk-U4VYHKPM.js +110 -0
- package/dist/chunk-U4VYHKPM.js.map +1 -0
- package/dist/chunk-UFWNMW3G.js +392 -0
- package/dist/chunk-UFWNMW3G.js.map +1 -0
- package/dist/chunk-UNHCZRO4.js +64 -0
- package/dist/chunk-UNHCZRO4.js.map +1 -0
- package/dist/chunk-URDV4OCP.js +308 -0
- package/dist/chunk-URDV4OCP.js.map +1 -0
- package/dist/chunk-YI6JVSFO.js +43 -0
- package/dist/chunk-YI6JVSFO.js.map +1 -0
- package/dist/chunk-YNSNRR5D.js +184 -0
- package/dist/chunk-YNSNRR5D.js.map +1 -0
- package/dist/chunk-Z6DLWTBY.js +46 -0
- package/dist/chunk-Z6DLWTBY.js.map +1 -0
- package/dist/chunk-ZDQIUHAM.js +89 -0
- package/dist/chunk-ZDQIUHAM.js.map +1 -0
- package/dist/chunk-ZSKHDU5P.js +124 -0
- package/dist/chunk-ZSKHDU5P.js.map +1 -0
- package/dist/cli-v2/defaults/agent-mappings.yaml +185 -0
- package/dist/commands/build/marketplace.js +295 -0
- package/dist/commands/build/marketplace.js.map +1 -0
- package/dist/commands/build/plugins.js +362 -0
- package/dist/commands/build/plugins.js.map +1 -0
- package/dist/commands/build/stack.js +169 -0
- package/dist/commands/build/stack.js.map +1 -0
- package/dist/commands/compile.js +461 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config/get.js +60 -0
- package/dist/commands/config/get.js.map +1 -0
- package/dist/commands/config/index.js +22 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/config/path.js +35 -0
- package/dist/commands/config/path.js.map +1 -0
- package/dist/commands/config/set-project.js +61 -0
- package/dist/commands/config/set-project.js.map +1 -0
- package/dist/commands/config/set.js +60 -0
- package/dist/commands/config/set.js.map +1 -0
- package/dist/commands/config/show.js +13 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/config/unset-project.js +57 -0
- package/dist/commands/config/unset-project.js.map +1 -0
- package/dist/commands/config/unset.js +56 -0
- package/dist/commands/config/unset.js.map +1 -0
- package/dist/commands/diff.js +755 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.js +413 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/edit.js +253 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/eject.js +208 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/info.js +205 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.js +914 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.js +44 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/new/agent.js +230 -0
- package/dist/commands/new/agent.js.map +1 -0
- package/dist/commands/new/skill.js +204 -0
- package/dist/commands/new/skill.js.map +1 -0
- package/dist/commands/outdated.js +242 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/search.js +115 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/test-imports.js +92 -0
- package/dist/commands/test-imports.js.map +1 -0
- package/dist/commands/uninstall.js +302 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +428 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.js +375 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version/bump.js +95 -0
- package/dist/commands/version/bump.js.map +1 -0
- package/dist/commands/version/index.js +70 -0
- package/dist/commands/version/index.js.map +1 -0
- package/dist/commands/version/set.js +101 -0
- package/dist/commands/version/set.js.map +1 -0
- package/dist/commands/version/show.js +70 -0
- package/dist/commands/version/show.js.map +1 -0
- package/dist/components/common/confirm.js +9 -0
- package/dist/components/common/confirm.js.map +1 -0
- package/dist/components/common/message.js +24 -0
- package/dist/components/common/message.js.map +1 -0
- package/dist/components/common/spinner.js +14 -0
- package/dist/components/common/spinner.js.map +1 -0
- package/dist/components/wizard/selection-header.js +11 -0
- package/dist/components/wizard/selection-header.js.map +1 -0
- package/dist/components/wizard/step-approach.js +11 -0
- package/dist/components/wizard/step-approach.js.map +1 -0
- package/dist/components/wizard/step-category.js +12 -0
- package/dist/components/wizard/step-category.js.map +1 -0
- package/dist/components/wizard/step-confirm.js +12 -0
- package/dist/components/wizard/step-confirm.js.map +1 -0
- package/dist/components/wizard/step-stack.js +11 -0
- package/dist/components/wizard/step-stack.js.map +1 -0
- package/dist/components/wizard/step-subcategory.js +13 -0
- package/dist/components/wizard/step-subcategory.js.map +1 -0
- package/dist/components/wizard/wizard.js +19 -0
- package/dist/components/wizard/wizard.js.map +1 -0
- package/dist/hooks/init.js +41 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/magic-string.es-RGXYGAW3.js +1316 -0
- package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
- package/dist/stores/wizard-store.js +10 -0
- package/dist/stores/wizard-store.js.map +1 -0
- package/dist/stores/wizard-store.test.js +15991 -0
- package/dist/stores/wizard-store.test.js.map +1 -0
- package/package.json +44 -25
- package/dist/cli/index.js +0 -6314
- package/dist/cli/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/components/wizard/step-subcategory.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { Select } from \"@inkjs/ui\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport {\n getSubcategories,\n getAvailableSkills,\n isCategoryAllDisabled,\n getDependentSkills,\n resolveAlias,\n type SkillCheckOptions,\n} from \"../../lib/matrix-resolver.js\";\nimport type { MergedSkillsMatrix } from \"../../types-matrix.js\";\nimport { Confirm } from \"../common/confirm.js\";\n\nconst BACK_VALUE = \"__back__\";\n\ntype ViewMode = \"subcategory\" | \"skill\";\n\ninterface StepSubcategoryProps {\n matrix: MergedSkillsMatrix;\n}\n\n/**\n * Collects all dependent skills recursively for a given skill ID.\n * Used when deselecting a skill to warn about cascade deselection.\n */\nfunction collectAllDependents(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n): string[] {\n const allDependents: string[] = [];\n const visited = new Set<string>();\n const queue = [skillId];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (visited.has(current)) continue;\n visited.add(current);\n\n const directDependents = getDependentSkills(\n current,\n currentSelections,\n matrix,\n );\n\n for (const dependent of directDependents) {\n if (!visited.has(dependent) && !allDependents.includes(dependent)) {\n allDependents.push(dependent);\n queue.push(dependent);\n }\n }\n }\n\n return allDependents;\n}\n\n/**\n * Formats a skill option for display in the Select component.\n */\nfunction formatSkillOption(skill: {\n id: string;\n name: string;\n description?: string;\n selected: boolean;\n disabled: boolean;\n disabledReason?: string;\n discouraged?: boolean;\n recommended?: boolean;\n}): {\n value: string;\n label: string;\n} {\n let label = skill.name;\n\n if (skill.selected) {\n label = `✓ ${skill.name}`;\n } else if (skill.disabled) {\n const shortReason =\n skill.disabledReason?.split(\" (\")[0]?.toLowerCase() ||\n \"requirements not met\";\n label = `${skill.name} (disabled, ${shortReason})`;\n } else if (skill.discouraged) {\n label = `${skill.name} (not recommended)`;\n } else if (skill.recommended) {\n label = `${skill.name} (recommended)`;\n }\n\n return {\n value: skill.id,\n label,\n };\n}\n\nexport const StepSubcategory: React.FC<StepSubcategoryProps> = ({ matrix }) => {\n const {\n currentTopCategory,\n currentSubcategory,\n selectedSkills,\n expertMode,\n setStep,\n setSubcategory,\n toggleSkill,\n goBack,\n setLastSelectedSubcategory,\n setLastSelectedSkill,\n markCategoryVisited,\n } = useWizardStore();\n\n const [viewMode, setViewMode] = useState<ViewMode>(\n currentSubcategory ? \"skill\" : \"subcategory\",\n );\n const [confirmDeselect, setConfirmDeselect] = useState<{\n skillId: string;\n skillName: string;\n dependents: string[];\n } | null>(null);\n\n if (!currentTopCategory) {\n // Should not happen, but handle gracefully\n goBack();\n return null;\n }\n\n const topCategory = matrix.categories[currentTopCategory];\n const subcategoryIds = getSubcategories(currentTopCategory, matrix);\n const checkOptions: SkillCheckOptions = { expertMode };\n\n // Handle subcategory selection view\n if (viewMode === \"subcategory\") {\n const subcategoryOptions = subcategoryIds.map((subId) => {\n const sub = matrix.categories[subId];\n const skills = getAvailableSkills(\n subId,\n selectedSkills,\n matrix,\n checkOptions,\n );\n const selectedInCategory = skills.filter((s) => s.selected);\n const hasSelection = selectedInCategory.length > 0;\n\n const categoryDisabled = isCategoryAllDisabled(\n subId,\n selectedSkills,\n matrix,\n checkOptions,\n );\n\n let label: string;\n if (hasSelection) {\n label = `${sub.name} (${selectedInCategory[0].name} selected)`;\n } else if (categoryDisabled.disabled) {\n const shortReason =\n categoryDisabled.reason?.toLowerCase() || \"requirements not met\";\n label = `${sub.name} (disabled, ${shortReason})`;\n } else if (sub.required) {\n label = `${sub.name} (required)`;\n } else {\n label = sub.name;\n }\n\n return {\n value: subId,\n label,\n };\n });\n\n const options = [\n { value: BACK_VALUE, label: \"← Back\" },\n ...subcategoryOptions,\n ];\n\n const handleSubcategorySelect = (value: string) => {\n if (value === BACK_VALUE) {\n if (currentTopCategory) {\n markCategoryVisited(currentTopCategory);\n }\n setSubcategory(null);\n setLastSelectedSubcategory(null);\n goBack();\n return;\n }\n\n setLastSelectedSubcategory(value);\n setSubcategory(value);\n setViewMode(\"skill\");\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>{topCategory.name} - Select a subcategory:</Text>\n <Box marginTop={1}>\n <Select options={options} onChange={handleSubcategorySelect} />\n </Box>\n </Box>\n );\n }\n\n // Handle skill selection view (when a subcategory is selected)\n if (!currentSubcategory) {\n // Should not happen in skill mode\n setViewMode(\"subcategory\");\n return null;\n }\n\n const subcategory = matrix.categories[currentSubcategory];\n const skills = getAvailableSkills(\n currentSubcategory,\n selectedSkills,\n matrix,\n checkOptions,\n );\n\n const skillOptions = skills.map(formatSkillOption);\n const options = [{ value: BACK_VALUE, label: \"← Back\" }, ...skillOptions];\n\n const handleSkillSelect = (value: string) => {\n if (value === BACK_VALUE) {\n setSubcategory(null);\n setLastSelectedSkill(null);\n setViewMode(\"subcategory\");\n return;\n }\n\n const selectedSkillId = value;\n setLastSelectedSkill(selectedSkillId);\n\n const selectedOption = skills.find((s) => s.id === selectedSkillId);\n\n // Ignore disabled skills\n if (selectedOption?.disabled) {\n return;\n }\n\n const alreadySelected = selectedSkills.includes(selectedSkillId);\n\n if (alreadySelected) {\n // Check if deselecting would affect dependents\n const allDependents = collectAllDependents(\n selectedSkillId,\n selectedSkills,\n matrix,\n );\n\n if (allDependents.length > 0) {\n const skillName =\n matrix.skills[resolveAlias(selectedSkillId, matrix)]?.name ||\n selectedSkillId;\n\n // Show confirmation dialog\n setConfirmDeselect({\n skillId: selectedSkillId,\n skillName,\n dependents: allDependents,\n });\n return;\n }\n\n // No dependents, just toggle off\n toggleSkill(selectedSkillId);\n } else {\n // Selecting a skill - handle exclusive categories\n if (subcategory?.exclusive) {\n // First, remove all skills in this category\n const skillsToRemove = selectedSkills.filter((id) => {\n const skill = matrix.skills[id];\n return skill?.category === currentSubcategory;\n });\n skillsToRemove.forEach((id) => {\n if (selectedSkills.includes(id)) {\n toggleSkill(id);\n }\n });\n }\n\n // Then add the new skill\n toggleSkill(selectedSkillId);\n }\n };\n\n // Handle deselection confirmation\n if (confirmDeselect) {\n const dependentNames = confirmDeselect.dependents\n .map((id) => matrix.skills[id]?.name || id)\n .join(\", \");\n\n const message = `Deselecting ${confirmDeselect.skillName} will also remove: ${dependentNames}. Continue?`;\n\n return (\n <Confirm\n message={message}\n defaultValue={false}\n onConfirm={() => {\n // Remove the skill and all dependents\n const toRemove = new Set([\n confirmDeselect.skillId,\n ...confirmDeselect.dependents,\n ]);\n toRemove.forEach((id) => {\n if (selectedSkills.includes(id)) {\n toggleSkill(id);\n }\n });\n setConfirmDeselect(null);\n }}\n onCancel={() => {\n // Just close the confirm dialog\n setConfirmDeselect(null);\n }}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>{subcategory.name}:</Text>\n <Box marginTop={1}>\n <Select options={options} onChange={handleSkillSelect} />\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,gBAAgB;AAChC,SAAS,KAAK,YAAY;AAC1B,SAAS,cAAc;AA6Lf,SAEE,KAFF;AAhLR,IAAM,aAAa;AAYnB,SAAS,qBACP,SACA,mBACA,QACU;AACV,QAAM,gBAA0B,CAAC;AACjC,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,QAAQ,CAAC,OAAO;AAEtB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,UAAU,MAAM,MAAM;AAC5B,QAAI,QAAQ,IAAI,OAAO,EAAG;AAC1B,YAAQ,IAAI,OAAO;AAEnB,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,eAAW,aAAa,kBAAkB;AACxC,UAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,cAAc,SAAS,SAAS,GAAG;AACjE,sBAAc,KAAK,SAAS;AAC5B,cAAM,KAAK,SAAS;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,kBAAkB,OAYzB;AACA,MAAI,QAAQ,MAAM;AAElB,MAAI,MAAM,UAAU;AAClB,YAAQ,UAAK,MAAM,IAAI;AAAA,EACzB,WAAW,MAAM,UAAU;AACzB,UAAM,cACJ,MAAM,gBAAgB,MAAM,IAAI,EAAE,CAAC,GAAG,YAAY,KAClD;AACF,YAAQ,GAAG,MAAM,IAAI,eAAe,WAAW;AAAA,EACjD,WAAW,MAAM,aAAa;AAC5B,YAAQ,GAAG,MAAM,IAAI;AAAA,EACvB,WAAW,MAAM,aAAa;AAC5B,YAAQ,GAAG,MAAM,IAAI;AAAA,EACvB;AAEA,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb;AAAA,EACF;AACF;AAEO,IAAM,kBAAkD,CAAC,EAAE,OAAO,MAAM;AAC7E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,eAAe;AAEnB,QAAM,CAAC,UAAU,WAAW,IAAI;AAAA,IAC9B,qBAAqB,UAAU;AAAA,EACjC;AACA,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAIpC,IAAI;AAEd,MAAI,CAAC,oBAAoB;AAEvB,WAAO;AACP,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,OAAO,WAAW,kBAAkB;AACxD,QAAM,iBAAiB,iBAAiB,oBAAoB,MAAM;AAClE,QAAM,eAAkC,EAAE,WAAW;AAGrD,MAAI,aAAa,eAAe;AAC9B,UAAM,qBAAqB,eAAe,IAAI,CAAC,UAAU;AACvD,YAAM,MAAM,OAAO,WAAW,KAAK;AACnC,YAAMA,UAAS;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,qBAAqBA,QAAO,OAAO,CAAC,MAAM,EAAE,QAAQ;AAC1D,YAAM,eAAe,mBAAmB,SAAS;AAEjD,YAAM,mBAAmB;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI;AACJ,UAAI,cAAc;AAChB,gBAAQ,GAAG,IAAI,IAAI,KAAK,mBAAmB,CAAC,EAAE,IAAI;AAAA,MACpD,WAAW,iBAAiB,UAAU;AACpC,cAAM,cACJ,iBAAiB,QAAQ,YAAY,KAAK;AAC5C,gBAAQ,GAAG,IAAI,IAAI,eAAe,WAAW;AAAA,MAC/C,WAAW,IAAI,UAAU;AACvB,gBAAQ,GAAG,IAAI,IAAI;AAAA,MACrB,OAAO;AACL,gBAAQ,IAAI;AAAA,MACd;AAEA,aAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAMC,WAAU;AAAA,MACd,EAAE,OAAO,YAAY,OAAO,cAAS;AAAA,MACrC,GAAG;AAAA,IACL;AAEA,UAAM,0BAA0B,CAAC,UAAkB;AACjD,UAAI,UAAU,YAAY;AACxB,YAAI,oBAAoB;AACtB,8BAAoB,kBAAkB;AAAA,QACxC;AACA,uBAAe,IAAI;AACnB,mCAA2B,IAAI;AAC/B,eAAO;AACP;AAAA,MACF;AAEA,iCAA2B,KAAK;AAChC,qBAAe,KAAK;AACpB,kBAAY,OAAO;AAAA,IACrB;AAEA,WACE,qBAAC,OAAI,eAAc,UACjB;AAAA,2BAAC,QAAK,MAAI,MAAE;AAAA,oBAAY;AAAA,QAAK;AAAA,SAAwB;AAAA,MACrD,oBAAC,OAAI,WAAW,GACd,8BAAC,UAAO,SAASA,UAAS,UAAU,yBAAyB,GAC/D;AAAA,OACF;AAAA,EAEJ;AAGA,MAAI,CAAC,oBAAoB;AAEvB,gBAAY,aAAa;AACzB,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,OAAO,WAAW,kBAAkB;AACxD,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,IAAI,iBAAiB;AACjD,QAAM,UAAU,CAAC,EAAE,OAAO,YAAY,OAAO,cAAS,GAAG,GAAG,YAAY;AAExE,QAAM,oBAAoB,CAAC,UAAkB;AAC3C,QAAI,UAAU,YAAY;AACxB,qBAAe,IAAI;AACnB,2BAAqB,IAAI;AACzB,kBAAY,aAAa;AACzB;AAAA,IACF;AAEA,UAAM,kBAAkB;AACxB,yBAAqB,eAAe;AAEpC,UAAM,iBAAiB,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,eAAe;AAGlE,QAAI,gBAAgB,UAAU;AAC5B;AAAA,IACF;AAEA,UAAM,kBAAkB,eAAe,SAAS,eAAe;AAE/D,QAAI,iBAAiB;AAEnB,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,cAAc,SAAS,GAAG;AAC5B,cAAM,YACJ,OAAO,OAAO,aAAa,iBAAiB,MAAM,CAAC,GAAG,QACtD;AAGF,2BAAmB;AAAA,UACjB,SAAS;AAAA,UACT;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AACD;AAAA,MACF;AAGA,kBAAY,eAAe;AAAA,IAC7B,OAAO;AAEL,UAAI,aAAa,WAAW;AAE1B,cAAM,iBAAiB,eAAe,OAAO,CAAC,OAAO;AACnD,gBAAM,QAAQ,OAAO,OAAO,EAAE;AAC9B,iBAAO,OAAO,aAAa;AAAA,QAC7B,CAAC;AACD,uBAAe,QAAQ,CAAC,OAAO;AAC7B,cAAI,eAAe,SAAS,EAAE,GAAG;AAC/B,wBAAY,EAAE;AAAA,UAChB;AAAA,QACF,CAAC;AAAA,MACH;AAGA,kBAAY,eAAe;AAAA,IAC7B;AAAA,EACF;AAGA,MAAI,iBAAiB;AACnB,UAAM,iBAAiB,gBAAgB,WACpC,IAAI,CAAC,OAAO,OAAO,OAAO,EAAE,GAAG,QAAQ,EAAE,EACzC,KAAK,IAAI;AAEZ,UAAM,UAAU,eAAe,gBAAgB,SAAS,sBAAsB,cAAc;AAE5F,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,cAAc;AAAA,QACd,WAAW,MAAM;AAEf,gBAAM,WAAW,oBAAI,IAAI;AAAA,YACvB,gBAAgB;AAAA,YAChB,GAAG,gBAAgB;AAAA,UACrB,CAAC;AACD,mBAAS,QAAQ,CAAC,OAAO;AACvB,gBAAI,eAAe,SAAS,EAAE,GAAG;AAC/B,0BAAY,EAAE;AAAA,YAChB;AAAA,UACF,CAAC;AACD,6BAAmB,IAAI;AAAA,QACzB;AAAA,QACA,UAAU,MAAM;AAEd,6BAAmB,IAAI;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,qBAAC,OAAI,eAAc,UACjB;AAAA,yBAAC,QAAK,MAAI,MAAE;AAAA,kBAAY;AAAA,MAAK;AAAA,OAAC;AAAA,IAC9B,oBAAC,OAAI,WAAW,GACd,8BAAC,UAAO,SAAkB,UAAU,mBAAmB,GACzD;AAAA,KACF;AAEJ;","names":["skills","options"]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
detectInstallation
|
|
4
|
+
} from "./chunk-6ESUJMM7.js";
|
|
5
|
+
import {
|
|
6
|
+
loadProjectConfig
|
|
7
|
+
} from "./chunk-MYAVQ23U.js";
|
|
8
|
+
import {
|
|
9
|
+
getCollectivePluginDir,
|
|
10
|
+
getPluginAgentsDir,
|
|
11
|
+
getPluginSkillsDir,
|
|
12
|
+
readPluginManifest
|
|
13
|
+
} from "./chunk-D4IQAT27.js";
|
|
14
|
+
import {
|
|
15
|
+
DEFAULT_DISPLAY_VERSION
|
|
16
|
+
} from "./chunk-SJYG4EJZ.js";
|
|
17
|
+
import {
|
|
18
|
+
directoryExists
|
|
19
|
+
} from "./chunk-MMDXNZPF.js";
|
|
20
|
+
import {
|
|
21
|
+
init_esm_shims
|
|
22
|
+
} from "./chunk-DHET7RCE.js";
|
|
23
|
+
|
|
24
|
+
// src/cli-v2/lib/plugin-info.ts
|
|
25
|
+
init_esm_shims();
|
|
26
|
+
import { readdir } from "fs/promises";
|
|
27
|
+
var DEFAULT_NAME = "claude-collective";
|
|
28
|
+
async function getPluginInfo() {
|
|
29
|
+
const pluginDir = getCollectivePluginDir();
|
|
30
|
+
if (!await directoryExists(pluginDir)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const manifest = await readPluginManifest(pluginDir);
|
|
34
|
+
if (!manifest) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const skillsDir = getPluginSkillsDir(pluginDir);
|
|
38
|
+
const agentsDir = getPluginAgentsDir(pluginDir);
|
|
39
|
+
let skillCount = 0;
|
|
40
|
+
let agentCount = 0;
|
|
41
|
+
if (await directoryExists(skillsDir)) {
|
|
42
|
+
const skills = await readdir(skillsDir, { withFileTypes: true });
|
|
43
|
+
skillCount = skills.filter((s) => s.isDirectory()).length;
|
|
44
|
+
}
|
|
45
|
+
if (await directoryExists(agentsDir)) {
|
|
46
|
+
const agents = await readdir(agentsDir, { withFileTypes: true });
|
|
47
|
+
agentCount = agents.filter(
|
|
48
|
+
(a) => a.isFile() && a.name.endsWith(".md")
|
|
49
|
+
).length;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
name: manifest.name || DEFAULT_NAME,
|
|
53
|
+
version: manifest.version || DEFAULT_DISPLAY_VERSION,
|
|
54
|
+
skillCount,
|
|
55
|
+
agentCount,
|
|
56
|
+
path: pluginDir
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function getInstallationInfo() {
|
|
60
|
+
const installation = await detectInstallation();
|
|
61
|
+
if (!installation) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
let skillCount = 0;
|
|
65
|
+
let agentCount = 0;
|
|
66
|
+
let name = DEFAULT_NAME;
|
|
67
|
+
let version = DEFAULT_DISPLAY_VERSION;
|
|
68
|
+
if (await directoryExists(installation.skillsDir)) {
|
|
69
|
+
try {
|
|
70
|
+
const skills = await readdir(installation.skillsDir, {
|
|
71
|
+
withFileTypes: true
|
|
72
|
+
});
|
|
73
|
+
skillCount = skills.filter((s) => s.isDirectory()).length;
|
|
74
|
+
} catch {
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (await directoryExists(installation.agentsDir)) {
|
|
78
|
+
try {
|
|
79
|
+
const agents = await readdir(installation.agentsDir, {
|
|
80
|
+
withFileTypes: true
|
|
81
|
+
});
|
|
82
|
+
agentCount = agents.filter(
|
|
83
|
+
(a) => a.isFile() && a.name.endsWith(".md")
|
|
84
|
+
).length;
|
|
85
|
+
} catch {
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (installation.mode === "local") {
|
|
89
|
+
const loaded = await loadProjectConfig(installation.projectDir);
|
|
90
|
+
if (loaded?.config) {
|
|
91
|
+
name = loaded.config.name || DEFAULT_NAME;
|
|
92
|
+
version = "local";
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
const pluginDir = getCollectivePluginDir(installation.projectDir);
|
|
96
|
+
const manifest = await readPluginManifest(pluginDir);
|
|
97
|
+
if (manifest) {
|
|
98
|
+
name = manifest.name || DEFAULT_NAME;
|
|
99
|
+
version = manifest.version || DEFAULT_DISPLAY_VERSION;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
mode: installation.mode,
|
|
104
|
+
name,
|
|
105
|
+
version,
|
|
106
|
+
skillCount,
|
|
107
|
+
agentCount,
|
|
108
|
+
configPath: installation.configPath,
|
|
109
|
+
agentsDir: installation.agentsDir,
|
|
110
|
+
skillsDir: installation.skillsDir
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function formatInstallationDisplay(info) {
|
|
114
|
+
const modeLabel = info.mode === "local" ? "Local" : "Plugin";
|
|
115
|
+
const versionDisplay = info.mode === "local" ? "(local mode)" : `v${info.version}`;
|
|
116
|
+
return `Installation: ${info.name} ${versionDisplay}
|
|
117
|
+
Mode: ${modeLabel}
|
|
118
|
+
Skills: ${info.skillCount}
|
|
119
|
+
Agents: ${info.agentCount}
|
|
120
|
+
Config: ${info.configPath}
|
|
121
|
+
Agents: ${info.agentsDir}`;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export {
|
|
125
|
+
getPluginInfo,
|
|
126
|
+
getInstallationInfo,
|
|
127
|
+
formatInstallationDisplay
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=chunk-TFV6Z7F7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/lib/plugin-info.ts"],"sourcesContent":["import { readdir } from \"fs/promises\";\nimport {\n getCollectivePluginDir,\n getPluginSkillsDir,\n getPluginAgentsDir,\n readPluginManifest,\n} from \"./plugin-finder\";\nimport { directoryExists } from \"../utils/fs\";\nimport { DEFAULT_DISPLAY_VERSION } from \"../consts\";\nimport { detectInstallation, type InstallMode } from \"./installation\";\nimport { loadProjectConfig } from \"./project-config\";\n\nconst DEFAULT_NAME = \"claude-collective\";\n\nexport interface PluginInfo {\n name: string;\n version: string;\n skillCount: number;\n agentCount: number;\n path: string;\n}\n\nexport interface InstallationInfo {\n mode: InstallMode;\n name: string;\n version: string;\n skillCount: number;\n agentCount: number;\n configPath: string;\n agentsDir: string;\n skillsDir: string;\n}\n\nexport async function getPluginInfo(): Promise<PluginInfo | null> {\n const pluginDir = getCollectivePluginDir();\n\n if (!(await directoryExists(pluginDir))) {\n return null;\n }\n\n const manifest = await readPluginManifest(pluginDir);\n if (!manifest) {\n return null;\n }\n\n const skillsDir = getPluginSkillsDir(pluginDir);\n const agentsDir = getPluginAgentsDir(pluginDir);\n\n let skillCount = 0;\n let agentCount = 0;\n\n if (await directoryExists(skillsDir)) {\n const skills = await readdir(skillsDir, { withFileTypes: true });\n skillCount = skills.filter((s) => s.isDirectory()).length;\n }\n\n if (await directoryExists(agentsDir)) {\n const agents = await readdir(agentsDir, { withFileTypes: true });\n agentCount = agents.filter(\n (a) => a.isFile() && a.name.endsWith(\".md\"),\n ).length;\n }\n\n return {\n name: manifest.name || DEFAULT_NAME,\n version: manifest.version || DEFAULT_DISPLAY_VERSION,\n skillCount,\n agentCount,\n path: pluginDir,\n };\n}\n\nexport function formatPluginDisplay(info: PluginInfo): string {\n return `Plugin: ${info.name} v${info.version}\n Skills: ${info.skillCount}\n Agents: ${info.agentCount}\n Path: ${info.path}`;\n}\n\n/**\n * Get installation info for either local or plugin mode.\n * Auto-detects the installation mode and returns unified info.\n */\nexport async function getInstallationInfo(): Promise<InstallationInfo | null> {\n const installation = await detectInstallation();\n\n if (!installation) {\n return null;\n }\n\n let skillCount = 0;\n let agentCount = 0;\n let name = DEFAULT_NAME;\n let version = DEFAULT_DISPLAY_VERSION;\n\n // Count skills\n if (await directoryExists(installation.skillsDir)) {\n try {\n const skills = await readdir(installation.skillsDir, {\n withFileTypes: true,\n });\n skillCount = skills.filter((s) => s.isDirectory()).length;\n } catch {\n // Ignore errors\n }\n }\n\n // Count agents\n if (await directoryExists(installation.agentsDir)) {\n try {\n const agents = await readdir(installation.agentsDir, {\n withFileTypes: true,\n });\n agentCount = agents.filter(\n (a) => a.isFile() && a.name.endsWith(\".md\"),\n ).length;\n } catch {\n // Ignore errors\n }\n }\n\n // Get name/version from config or manifest depending on mode\n if (installation.mode === \"local\") {\n const loaded = await loadProjectConfig(installation.projectDir);\n if (loaded?.config) {\n name = loaded.config.name || DEFAULT_NAME;\n // Local mode doesn't have version in the same way\n version = \"local\";\n }\n } else {\n // Plugin mode - read from manifest\n const pluginDir = getCollectivePluginDir(installation.projectDir);\n const manifest = await readPluginManifest(pluginDir);\n if (manifest) {\n name = manifest.name || DEFAULT_NAME;\n version = manifest.version || DEFAULT_DISPLAY_VERSION;\n }\n }\n\n return {\n mode: installation.mode,\n name,\n version,\n skillCount,\n agentCount,\n configPath: installation.configPath,\n agentsDir: installation.agentsDir,\n skillsDir: installation.skillsDir,\n };\n}\n\nexport function formatInstallationDisplay(info: InstallationInfo): string {\n const modeLabel = info.mode === \"local\" ? \"Local\" : \"Plugin\";\n const versionDisplay =\n info.mode === \"local\" ? \"(local mode)\" : `v${info.version}`;\n\n return `Installation: ${info.name} ${versionDisplay}\n Mode: ${modeLabel}\n Skills: ${info.skillCount}\n Agents: ${info.agentCount}\n Config: ${info.configPath}\n Agents: ${info.agentsDir}`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
validateSelection
|
|
4
|
+
} from "./chunk-AZP2AA5M.js";
|
|
5
|
+
import {
|
|
6
|
+
useWizardStore
|
|
7
|
+
} from "./chunk-6OY6ZYQF.js";
|
|
8
|
+
import {
|
|
9
|
+
init_esm_shims
|
|
10
|
+
} from "./chunk-DHET7RCE.js";
|
|
11
|
+
|
|
12
|
+
// src/cli-v2/components/wizard/step-confirm.tsx
|
|
13
|
+
init_esm_shims();
|
|
14
|
+
import { Box, Text } from "ink";
|
|
15
|
+
import { Select } from "@inkjs/ui";
|
|
16
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
17
|
+
var BACK_VALUE = "_back";
|
|
18
|
+
var CONFIRM_VALUE = "_confirm";
|
|
19
|
+
var StepConfirm = ({
|
|
20
|
+
matrix,
|
|
21
|
+
onComplete
|
|
22
|
+
}) => {
|
|
23
|
+
const { selectedSkills, goBack } = useWizardStore();
|
|
24
|
+
const validation = validateSelection(selectedSkills, matrix);
|
|
25
|
+
const options = [
|
|
26
|
+
{ value: BACK_VALUE, label: "\u2190 Back" },
|
|
27
|
+
...validation.valid ? [{ value: CONFIRM_VALUE, label: "\u2713 Confirm and continue" }] : []
|
|
28
|
+
];
|
|
29
|
+
const handleSelect = (value) => {
|
|
30
|
+
if (value === BACK_VALUE) {
|
|
31
|
+
goBack();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (value === CONFIRM_VALUE) {
|
|
35
|
+
onComplete();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
39
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Selected Skills:" }),
|
|
40
|
+
/* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, marginBottom: 1, children: selectedSkills.length === 0 ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: " No skills selected" }) : selectedSkills.map((skillId) => {
|
|
41
|
+
const skill = matrix.skills[skillId];
|
|
42
|
+
if (!skill) return null;
|
|
43
|
+
const category = matrix.categories[skill.category];
|
|
44
|
+
return /* @__PURE__ */ jsxs(Text, { children: [
|
|
45
|
+
" ",
|
|
46
|
+
/* @__PURE__ */ jsx(Text, { color: "green", children: "+" }),
|
|
47
|
+
" ",
|
|
48
|
+
skill.name,
|
|
49
|
+
" ",
|
|
50
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
51
|
+
"(",
|
|
52
|
+
category?.name || skill.category,
|
|
53
|
+
")"
|
|
54
|
+
] })
|
|
55
|
+
] }, skillId);
|
|
56
|
+
}) }),
|
|
57
|
+
validation.errors.length > 0 && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
58
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: "red", children: "Errors:" }),
|
|
59
|
+
validation.errors.map((error, idx) => /* @__PURE__ */ jsxs(Text, { children: [
|
|
60
|
+
" ",
|
|
61
|
+
/* @__PURE__ */ jsx(Text, { color: "red", children: "x" }),
|
|
62
|
+
" ",
|
|
63
|
+
error.message
|
|
64
|
+
] }, idx))
|
|
65
|
+
] }),
|
|
66
|
+
validation.warnings.length > 0 && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
67
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: "yellow", children: "Warnings:" }),
|
|
68
|
+
validation.warnings.map((warning, idx) => /* @__PURE__ */ jsxs(Text, { children: [
|
|
69
|
+
" ",
|
|
70
|
+
/* @__PURE__ */ jsx(Text, { color: "yellow", children: "!" }),
|
|
71
|
+
" ",
|
|
72
|
+
warning.message
|
|
73
|
+
] }, idx))
|
|
74
|
+
] }),
|
|
75
|
+
/* @__PURE__ */ jsx(Text, { children: validation.valid ? "Confirm your selection?" : "Selection has errors. What would you like to do?" }),
|
|
76
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Select, { options, onChange: handleSelect }) })
|
|
77
|
+
] });
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export {
|
|
81
|
+
StepConfirm
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=chunk-TGOHJCQ4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/components/wizard/step-confirm.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { Select } from \"@inkjs/ui\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { validateSelection } from \"../../lib/matrix-resolver.js\";\nimport type { MergedSkillsMatrix } from \"../../types-matrix.js\";\n\ninterface StepConfirmProps {\n matrix: MergedSkillsMatrix;\n onComplete: () => void;\n}\n\nconst BACK_VALUE = \"_back\";\nconst CONFIRM_VALUE = \"_confirm\";\n\nexport const StepConfirm: React.FC<StepConfirmProps> = ({\n matrix,\n onComplete,\n}) => {\n const { selectedSkills, goBack } = useWizardStore();\n\n // Validate selection\n const validation = validateSelection(selectedSkills, matrix);\n\n // Build options\n const options = [\n { value: BACK_VALUE, label: \"← Back\" },\n ...(validation.valid\n ? [{ value: CONFIRM_VALUE, label: \"✓ Confirm and continue\" }]\n : []),\n ];\n\n const handleSelect = (value: string) => {\n if (value === BACK_VALUE) {\n goBack();\n return;\n }\n if (value === CONFIRM_VALUE) {\n onComplete();\n }\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>Selected Skills:</Text>\n <Box flexDirection=\"column\" marginTop={1} marginBottom={1}>\n {selectedSkills.length === 0 ? (\n <Text dimColor> No skills selected</Text>\n ) : (\n selectedSkills.map((skillId) => {\n const skill = matrix.skills[skillId];\n if (!skill) return null;\n const category = matrix.categories[skill.category];\n return (\n <Text key={skillId}>\n {\" \"}\n <Text color=\"green\">+</Text> {skill.name}{\" \"}\n <Text dimColor>({category?.name || skill.category})</Text>\n </Text>\n );\n })\n )}\n </Box>\n\n {/* Display validation errors */}\n {validation.errors.length > 0 && (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold color=\"red\">\n Errors:\n </Text>\n {validation.errors.map((error, idx) => (\n <Text key={idx}>\n {\" \"}\n <Text color=\"red\">x</Text> {error.message}\n </Text>\n ))}\n </Box>\n )}\n\n {/* Display validation warnings */}\n {validation.warnings.length > 0 && (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold color=\"yellow\">\n Warnings:\n </Text>\n {validation.warnings.map((warning, idx) => (\n <Text key={idx}>\n {\" \"}\n <Text color=\"yellow\">!</Text> {warning.message}\n </Text>\n ))}\n </Box>\n )}\n\n <Text>\n {validation.valid\n ? \"Confirm your selection?\"\n : \"Selection has errors. What would you like to do?\"}\n </Text>\n <Box marginTop={1}>\n <Select options={options} onChange={handleSelect} />\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAC1B,SAAS,cAAc;AA0CjB,cAaU,YAbV;AAhCN,IAAM,aAAa;AACnB,IAAM,gBAAgB;AAEf,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,gBAAgB,OAAO,IAAI,eAAe;AAGlD,QAAM,aAAa,kBAAkB,gBAAgB,MAAM;AAG3D,QAAM,UAAU;AAAA,IACd,EAAE,OAAO,YAAY,OAAO,cAAS;AAAA,IACrC,GAAI,WAAW,QACX,CAAC,EAAE,OAAO,eAAe,OAAO,8BAAyB,CAAC,IAC1D,CAAC;AAAA,EACP;AAEA,QAAM,eAAe,CAAC,UAAkB;AACtC,QAAI,UAAU,YAAY;AACxB,aAAO;AACP;AAAA,IACF;AACA,QAAI,UAAU,eAAe;AAC3B,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,SACE,qBAAC,OAAI,eAAc,UACjB;AAAA,wBAAC,QAAK,MAAI,MAAC,8BAAgB;AAAA,IAC3B,oBAAC,OAAI,eAAc,UAAS,WAAW,GAAG,cAAc,GACrD,yBAAe,WAAW,IACzB,oBAAC,QAAK,UAAQ,MAAC,iCAAmB,IAElC,eAAe,IAAI,CAAC,YAAY;AAC9B,YAAM,QAAQ,OAAO,OAAO,OAAO;AACnC,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,WAAW,OAAO,WAAW,MAAM,QAAQ;AACjD,aACE,qBAAC,QACE;AAAA;AAAA,QACD,oBAAC,QAAK,OAAM,SAAQ,eAAC;AAAA,QAAO;AAAA,QAAE,MAAM;AAAA,QAAM;AAAA,QAC1C,qBAAC,QAAK,UAAQ,MAAC;AAAA;AAAA,UAAE,UAAU,QAAQ,MAAM;AAAA,UAAS;AAAA,WAAC;AAAA,WAH1C,OAIX;AAAA,IAEJ,CAAC,GAEL;AAAA,IAGC,WAAW,OAAO,SAAS,KAC1B,qBAAC,OAAI,eAAc,UAAS,cAAc,GACxC;AAAA,0BAAC,QAAK,MAAI,MAAC,OAAM,OAAM,qBAEvB;AAAA,MACC,WAAW,OAAO,IAAI,CAAC,OAAO,QAC7B,qBAAC,QACE;AAAA;AAAA,QACD,oBAAC,QAAK,OAAM,OAAM,eAAC;AAAA,QAAO;AAAA,QAAE,MAAM;AAAA,WAFzB,GAGX,CACD;AAAA,OACH;AAAA,IAID,WAAW,SAAS,SAAS,KAC5B,qBAAC,OAAI,eAAc,UAAS,cAAc,GACxC;AAAA,0BAAC,QAAK,MAAI,MAAC,OAAM,UAAS,uBAE1B;AAAA,MACC,WAAW,SAAS,IAAI,CAAC,SAAS,QACjC,qBAAC,QACE;AAAA;AAAA,QACD,oBAAC,QAAK,OAAM,UAAS,eAAC;AAAA,QAAO;AAAA,QAAE,QAAQ;AAAA,WAF9B,GAGX,CACD;AAAA,OACH;AAAA,IAGF,oBAAC,QACE,qBAAW,QACR,4BACA,oDACN;AAAA,IACA,oBAAC,OAAI,WAAW,GACd,8BAAC,UAAO,SAAkB,UAAU,cAAc,GACpD;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-DHET7RCE.js";
|
|
5
|
+
|
|
6
|
+
// src/cli-v2/utils/logger.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
var verboseMode = false;
|
|
9
|
+
function setVerbose(enabled) {
|
|
10
|
+
verboseMode = enabled;
|
|
11
|
+
}
|
|
12
|
+
function verbose(msg) {
|
|
13
|
+
if (verboseMode) {
|
|
14
|
+
console.log(` ${msg}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
setVerbose,
|
|
20
|
+
verbose
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chunk-TOPAIL5W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/utils/logger.ts"],"sourcesContent":["/**\n * Verbose logging utility.\n * Used by lib/ modules that don't have access to oclif command context.\n * In oclif commands, prefer using this.log() instead.\n */\n\nlet verboseMode = false;\n\nexport function setVerbose(enabled: boolean): void {\n verboseMode = enabled;\n}\n\nexport function verbose(msg: string): void {\n if (verboseMode) {\n console.log(` ${msg}`);\n }\n}\n"],"mappings":";;;;;;AAAA;AAMA,IAAI,cAAc;AAEX,SAAS,WAAW,SAAwB;AACjD,gBAAc;AAChB;AAEO,SAAS,QAAQ,KAAmB;AACzC,MAAI,aAAa;AACf,YAAQ,IAAI,KAAK,GAAG,EAAE;AAAA,EACxB;AACF;","names":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_SOURCE,
|
|
4
|
+
SOURCE_ENV_VAR,
|
|
5
|
+
formatAgentsSourceOrigin,
|
|
6
|
+
formatSourceOrigin,
|
|
7
|
+
getGlobalConfigPath,
|
|
8
|
+
getProjectConfigPath,
|
|
9
|
+
loadGlobalConfig,
|
|
10
|
+
loadProjectConfig,
|
|
11
|
+
resolveAgentsSource,
|
|
12
|
+
resolveSource
|
|
13
|
+
} from "./chunk-QESUUPOE.js";
|
|
14
|
+
import {
|
|
15
|
+
BaseCommand
|
|
16
|
+
} from "./chunk-SYQ7R2JO.js";
|
|
17
|
+
import {
|
|
18
|
+
init_esm_shims
|
|
19
|
+
} from "./chunk-DHET7RCE.js";
|
|
20
|
+
|
|
21
|
+
// src/cli-v2/commands/config/show.ts
|
|
22
|
+
init_esm_shims();
|
|
23
|
+
var ConfigShow = class _ConfigShow extends BaseCommand {
|
|
24
|
+
static summary = "Show current effective configuration";
|
|
25
|
+
static description = "Display the current effective configuration with all layers (env, project, global, default)";
|
|
26
|
+
static flags = {
|
|
27
|
+
...BaseCommand.baseFlags
|
|
28
|
+
};
|
|
29
|
+
async run() {
|
|
30
|
+
await this.parse(_ConfigShow);
|
|
31
|
+
const projectDir = process.cwd();
|
|
32
|
+
this.log("\nClaude Collective Configuration\n");
|
|
33
|
+
const resolved = await resolveSource(void 0, projectDir);
|
|
34
|
+
this.log("Source:");
|
|
35
|
+
this.log(` ${resolved.source}`);
|
|
36
|
+
this.log(` (from ${formatSourceOrigin(resolved.sourceOrigin)})`);
|
|
37
|
+
this.log("");
|
|
38
|
+
this.log("Marketplace:");
|
|
39
|
+
if (resolved.marketplace) {
|
|
40
|
+
this.log(` ${resolved.marketplace}`);
|
|
41
|
+
} else {
|
|
42
|
+
this.log(` (not configured)`);
|
|
43
|
+
}
|
|
44
|
+
this.log("");
|
|
45
|
+
const agentsResolved = await resolveAgentsSource(void 0, projectDir);
|
|
46
|
+
this.log("Agents Source:");
|
|
47
|
+
if (agentsResolved.agentsSource) {
|
|
48
|
+
this.log(` ${agentsResolved.agentsSource}`);
|
|
49
|
+
this.log(
|
|
50
|
+
` (from ${formatAgentsSourceOrigin(agentsResolved.agentsSourceOrigin)})`
|
|
51
|
+
);
|
|
52
|
+
} else {
|
|
53
|
+
this.log(` (not configured - using local CLI)`);
|
|
54
|
+
}
|
|
55
|
+
this.log("");
|
|
56
|
+
this.log("Configuration Layers:");
|
|
57
|
+
this.log("");
|
|
58
|
+
const envValue = process.env[SOURCE_ENV_VAR];
|
|
59
|
+
this.log(` 1. Environment (${SOURCE_ENV_VAR}):`);
|
|
60
|
+
if (envValue) {
|
|
61
|
+
this.log(` ${envValue}`);
|
|
62
|
+
} else {
|
|
63
|
+
this.log(` (not set)`);
|
|
64
|
+
}
|
|
65
|
+
const projectConfig = await loadProjectConfig(projectDir);
|
|
66
|
+
const projectConfigPath = getProjectConfigPath(projectDir);
|
|
67
|
+
this.log(` 2. Project config:`);
|
|
68
|
+
this.log(` ${projectConfigPath}`);
|
|
69
|
+
if (projectConfig?.source || projectConfig?.marketplace || projectConfig?.agents_source) {
|
|
70
|
+
if (projectConfig?.source) {
|
|
71
|
+
this.log(` source: ${projectConfig.source}`);
|
|
72
|
+
}
|
|
73
|
+
if (projectConfig?.marketplace) {
|
|
74
|
+
this.log(` marketplace: ${projectConfig.marketplace}`);
|
|
75
|
+
}
|
|
76
|
+
if (projectConfig?.agents_source) {
|
|
77
|
+
this.log(` agents_source: ${projectConfig.agents_source}`);
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
this.log(` (not configured)`);
|
|
81
|
+
}
|
|
82
|
+
const globalConfig = await loadGlobalConfig();
|
|
83
|
+
const globalConfigPath = getGlobalConfigPath();
|
|
84
|
+
this.log(` 3. Global config:`);
|
|
85
|
+
this.log(` ${globalConfigPath}`);
|
|
86
|
+
if (globalConfig?.source || globalConfig?.marketplace || globalConfig?.agents_source) {
|
|
87
|
+
if (globalConfig?.source) {
|
|
88
|
+
this.log(` source: ${globalConfig.source}`);
|
|
89
|
+
}
|
|
90
|
+
if (globalConfig?.marketplace) {
|
|
91
|
+
this.log(` marketplace: ${globalConfig.marketplace}`);
|
|
92
|
+
}
|
|
93
|
+
if (globalConfig?.agents_source) {
|
|
94
|
+
this.log(` agents_source: ${globalConfig.agents_source}`);
|
|
95
|
+
}
|
|
96
|
+
} else {
|
|
97
|
+
this.log(` (not configured)`);
|
|
98
|
+
}
|
|
99
|
+
this.log(` 4. Default:`);
|
|
100
|
+
this.log(` ${DEFAULT_SOURCE}`);
|
|
101
|
+
this.log("");
|
|
102
|
+
this.log("Precedence: flag > env > project > global > default");
|
|
103
|
+
this.log("");
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export {
|
|
108
|
+
ConfigShow
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=chunk-U4VYHKPM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/commands/config/show.ts"],"sourcesContent":["import { BaseCommand } from \"../../base-command.js\";\nimport {\n resolveSource,\n resolveAgentsSource,\n loadGlobalConfig,\n loadProjectConfig,\n getGlobalConfigPath,\n getProjectConfigPath,\n formatSourceOrigin,\n formatAgentsSourceOrigin,\n DEFAULT_SOURCE,\n SOURCE_ENV_VAR,\n} from \"../../lib/config.js\";\n\nexport default class ConfigShow extends BaseCommand {\n static summary = \"Show current effective configuration\";\n static description =\n \"Display the current effective configuration with all layers (env, project, global, default)\";\n\n static flags = {\n ...BaseCommand.baseFlags,\n };\n\n async run(): Promise<void> {\n await this.parse(ConfigShow);\n\n const projectDir = process.cwd();\n\n this.log(\"\\nClaude Collective Configuration\\n\");\n\n const resolved = await resolveSource(undefined, projectDir);\n\n this.log(\"Source:\");\n this.log(` ${resolved.source}`);\n this.log(` (from ${formatSourceOrigin(resolved.sourceOrigin)})`);\n this.log(\"\");\n\n this.log(\"Marketplace:\");\n if (resolved.marketplace) {\n this.log(` ${resolved.marketplace}`);\n } else {\n this.log(` (not configured)`);\n }\n this.log(\"\");\n\n const agentsResolved = await resolveAgentsSource(undefined, projectDir);\n this.log(\"Agents Source:\");\n if (agentsResolved.agentsSource) {\n this.log(` ${agentsResolved.agentsSource}`);\n this.log(\n ` (from ${formatAgentsSourceOrigin(agentsResolved.agentsSourceOrigin)})`,\n );\n } else {\n this.log(` (not configured - using local CLI)`);\n }\n this.log(\"\");\n\n this.log(\"Configuration Layers:\");\n this.log(\"\");\n\n const envValue = process.env[SOURCE_ENV_VAR];\n this.log(` 1. Environment (${SOURCE_ENV_VAR}):`);\n if (envValue) {\n this.log(` ${envValue}`);\n } else {\n this.log(` (not set)`);\n }\n\n const projectConfig = await loadProjectConfig(projectDir);\n const projectConfigPath = getProjectConfigPath(projectDir);\n this.log(` 2. Project config:`);\n this.log(` ${projectConfigPath}`);\n if (\n projectConfig?.source ||\n projectConfig?.marketplace ||\n projectConfig?.agents_source\n ) {\n if (projectConfig?.source) {\n this.log(` source: ${projectConfig.source}`);\n }\n if (projectConfig?.marketplace) {\n this.log(` marketplace: ${projectConfig.marketplace}`);\n }\n if (projectConfig?.agents_source) {\n this.log(` agents_source: ${projectConfig.agents_source}`);\n }\n } else {\n this.log(` (not configured)`);\n }\n\n const globalConfig = await loadGlobalConfig();\n const globalConfigPath = getGlobalConfigPath();\n this.log(` 3. Global config:`);\n this.log(` ${globalConfigPath}`);\n if (\n globalConfig?.source ||\n globalConfig?.marketplace ||\n globalConfig?.agents_source\n ) {\n if (globalConfig?.source) {\n this.log(` source: ${globalConfig.source}`);\n }\n if (globalConfig?.marketplace) {\n this.log(` marketplace: ${globalConfig.marketplace}`);\n }\n if (globalConfig?.agents_source) {\n this.log(` agents_source: ${globalConfig.agents_source}`);\n }\n } else {\n this.log(` (not configured)`);\n }\n\n this.log(` 4. Default:`);\n this.log(` ${DEFAULT_SOURCE}`);\n\n this.log(\"\");\n this.log(\"Precedence: flag > env > project > global > default\");\n this.log(\"\");\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAcA,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAO,UAAU;AAAA,EACjB,OAAO,cACL;AAAA,EAEF,OAAO,QAAQ;AAAA,IACb,GAAG,YAAY;AAAA,EACjB;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,KAAK,MAAM,WAAU;AAE3B,UAAM,aAAa,QAAQ,IAAI;AAE/B,SAAK,IAAI,qCAAqC;AAE9C,UAAM,WAAW,MAAM,cAAc,QAAW,UAAU;AAE1D,SAAK,IAAI,SAAS;AAClB,SAAK,IAAI,KAAK,SAAS,MAAM,EAAE;AAC/B,SAAK,IAAI,WAAW,mBAAmB,SAAS,YAAY,CAAC,GAAG;AAChE,SAAK,IAAI,EAAE;AAEX,SAAK,IAAI,cAAc;AACvB,QAAI,SAAS,aAAa;AACxB,WAAK,IAAI,KAAK,SAAS,WAAW,EAAE;AAAA,IACtC,OAAO;AACL,WAAK,IAAI,oBAAoB;AAAA,IAC/B;AACA,SAAK,IAAI,EAAE;AAEX,UAAM,iBAAiB,MAAM,oBAAoB,QAAW,UAAU;AACtE,SAAK,IAAI,gBAAgB;AACzB,QAAI,eAAe,cAAc;AAC/B,WAAK,IAAI,KAAK,eAAe,YAAY,EAAE;AAC3C,WAAK;AAAA,QACH,WAAW,yBAAyB,eAAe,kBAAkB,CAAC;AAAA,MACxE;AAAA,IACF,OAAO;AACL,WAAK,IAAI,sCAAsC;AAAA,IACjD;AACA,SAAK,IAAI,EAAE;AAEX,SAAK,IAAI,uBAAuB;AAChC,SAAK,IAAI,EAAE;AAEX,UAAM,WAAW,QAAQ,IAAI,cAAc;AAC3C,SAAK,IAAI,qBAAqB,cAAc,IAAI;AAChD,QAAI,UAAU;AACZ,WAAK,IAAI,QAAQ,QAAQ,EAAE;AAAA,IAC7B,OAAO;AACL,WAAK,IAAI,gBAAgB;AAAA,IAC3B;AAEA,UAAM,gBAAgB,MAAM,kBAAkB,UAAU;AACxD,UAAM,oBAAoB,qBAAqB,UAAU;AACzD,SAAK,IAAI,sBAAsB;AAC/B,SAAK,IAAI,QAAQ,iBAAiB,EAAE;AACpC,QACE,eAAe,UACf,eAAe,eACf,eAAe,eACf;AACA,UAAI,eAAe,QAAQ;AACzB,aAAK,IAAI,gBAAgB,cAAc,MAAM,EAAE;AAAA,MACjD;AACA,UAAI,eAAe,aAAa;AAC9B,aAAK,IAAI,qBAAqB,cAAc,WAAW,EAAE;AAAA,MAC3D;AACA,UAAI,eAAe,eAAe;AAChC,aAAK,IAAI,uBAAuB,cAAc,aAAa,EAAE;AAAA,MAC/D;AAAA,IACF,OAAO;AACL,WAAK,IAAI,uBAAuB;AAAA,IAClC;AAEA,UAAM,eAAe,MAAM,iBAAiB;AAC5C,UAAM,mBAAmB,oBAAoB;AAC7C,SAAK,IAAI,qBAAqB;AAC9B,SAAK,IAAI,QAAQ,gBAAgB,EAAE;AACnC,QACE,cAAc,UACd,cAAc,eACd,cAAc,eACd;AACA,UAAI,cAAc,QAAQ;AACxB,aAAK,IAAI,gBAAgB,aAAa,MAAM,EAAE;AAAA,MAChD;AACA,UAAI,cAAc,aAAa;AAC7B,aAAK,IAAI,qBAAqB,aAAa,WAAW,EAAE;AAAA,MAC1D;AACA,UAAI,cAAc,eAAe;AAC/B,aAAK,IAAI,uBAAuB,aAAa,aAAa,EAAE;AAAA,MAC9D;AAAA,IACF,OAAO;AACL,WAAK,IAAI,uBAAuB;AAAA,IAClC;AAEA,SAAK,IAAI,eAAe;AACxB,SAAK,IAAI,QAAQ,cAAc,EAAE;AAEjC,SAAK,IAAI,EAAE;AACX,SAAK,IAAI,qDAAqD;AAC9D,SAAK,IAAI,EAAE;AAAA,EACb;AACF;","names":[]}
|