@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.
Files changed (166) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/README.md +1 -1
  3. package/dist/chunk-367K3JB3.js +84 -0
  4. package/dist/chunk-367K3JB3.js.map +1 -0
  5. package/dist/chunk-6ESUJMM7.js +54 -0
  6. package/dist/chunk-6ESUJMM7.js.map +1 -0
  7. package/dist/chunk-6OY6ZYQF.js +93 -0
  8. package/dist/chunk-6OY6ZYQF.js.map +1 -0
  9. package/dist/chunk-6WEQADPL.js +307 -0
  10. package/dist/chunk-6WEQADPL.js.map +1 -0
  11. package/dist/chunk-AU7XVCLO.js +91 -0
  12. package/dist/chunk-AU7XVCLO.js.map +1 -0
  13. package/dist/chunk-AZP2AA5M.js +425 -0
  14. package/dist/chunk-AZP2AA5M.js.map +1 -0
  15. package/dist/chunk-D4IQAT27.js +114 -0
  16. package/dist/chunk-D4IQAT27.js.map +1 -0
  17. package/dist/chunk-DHET7RCE.js +50 -0
  18. package/dist/chunk-DHET7RCE.js.map +1 -0
  19. package/dist/chunk-DHFFRMF6.js +31 -0
  20. package/dist/chunk-DHFFRMF6.js.map +1 -0
  21. package/dist/chunk-FKU7VSUD.js +453 -0
  22. package/dist/chunk-FKU7VSUD.js.map +1 -0
  23. package/dist/chunk-J2Y4A3LP.js +478 -0
  24. package/dist/chunk-J2Y4A3LP.js.map +1 -0
  25. package/dist/chunk-JMQGWQZU.js +607 -0
  26. package/dist/chunk-JMQGWQZU.js.map +1 -0
  27. package/dist/chunk-JY4RO76L.js +73 -0
  28. package/dist/chunk-JY4RO76L.js.map +1 -0
  29. package/dist/chunk-M7YCPFIX.js +108 -0
  30. package/dist/chunk-M7YCPFIX.js.map +1 -0
  31. package/dist/chunk-MJSFR562.js +57 -0
  32. package/dist/chunk-MJSFR562.js.map +1 -0
  33. package/dist/chunk-MMDXNZPF.js +69 -0
  34. package/dist/chunk-MMDXNZPF.js.map +1 -0
  35. package/dist/chunk-MYAVQ23U.js +356 -0
  36. package/dist/chunk-MYAVQ23U.js.map +1 -0
  37. package/dist/chunk-OSQDDJXX.js +146 -0
  38. package/dist/chunk-OSQDDJXX.js.map +1 -0
  39. package/dist/chunk-QESUUPOE.js +241 -0
  40. package/dist/chunk-QESUUPOE.js.map +1 -0
  41. package/dist/chunk-SJYG4EJZ.js +57 -0
  42. package/dist/chunk-SJYG4EJZ.js.map +1 -0
  43. package/dist/chunk-SYQ7R2JO.js +95 -0
  44. package/dist/chunk-SYQ7R2JO.js.map +1 -0
  45. package/dist/chunk-TD643KB3.js +245 -0
  46. package/dist/chunk-TD643KB3.js.map +1 -0
  47. package/dist/chunk-TFV6Z7F7.js +129 -0
  48. package/dist/chunk-TFV6Z7F7.js.map +1 -0
  49. package/dist/chunk-TGOHJCQ4.js +83 -0
  50. package/dist/chunk-TGOHJCQ4.js.map +1 -0
  51. package/dist/chunk-TOPAIL5W.js +22 -0
  52. package/dist/chunk-TOPAIL5W.js.map +1 -0
  53. package/dist/chunk-U4VYHKPM.js +110 -0
  54. package/dist/chunk-U4VYHKPM.js.map +1 -0
  55. package/dist/chunk-UFWNMW3G.js +392 -0
  56. package/dist/chunk-UFWNMW3G.js.map +1 -0
  57. package/dist/chunk-UNHCZRO4.js +64 -0
  58. package/dist/chunk-UNHCZRO4.js.map +1 -0
  59. package/dist/chunk-URDV4OCP.js +308 -0
  60. package/dist/chunk-URDV4OCP.js.map +1 -0
  61. package/dist/chunk-YI6JVSFO.js +43 -0
  62. package/dist/chunk-YI6JVSFO.js.map +1 -0
  63. package/dist/chunk-YNSNRR5D.js +184 -0
  64. package/dist/chunk-YNSNRR5D.js.map +1 -0
  65. package/dist/chunk-Z6DLWTBY.js +46 -0
  66. package/dist/chunk-Z6DLWTBY.js.map +1 -0
  67. package/dist/chunk-ZDQIUHAM.js +89 -0
  68. package/dist/chunk-ZDQIUHAM.js.map +1 -0
  69. package/dist/chunk-ZSKHDU5P.js +124 -0
  70. package/dist/chunk-ZSKHDU5P.js.map +1 -0
  71. package/dist/cli-v2/defaults/agent-mappings.yaml +185 -0
  72. package/dist/commands/build/marketplace.js +295 -0
  73. package/dist/commands/build/marketplace.js.map +1 -0
  74. package/dist/commands/build/plugins.js +362 -0
  75. package/dist/commands/build/plugins.js.map +1 -0
  76. package/dist/commands/build/stack.js +169 -0
  77. package/dist/commands/build/stack.js.map +1 -0
  78. package/dist/commands/compile.js +461 -0
  79. package/dist/commands/compile.js.map +1 -0
  80. package/dist/commands/config/get.js +60 -0
  81. package/dist/commands/config/get.js.map +1 -0
  82. package/dist/commands/config/index.js +22 -0
  83. package/dist/commands/config/index.js.map +1 -0
  84. package/dist/commands/config/path.js +35 -0
  85. package/dist/commands/config/path.js.map +1 -0
  86. package/dist/commands/config/set-project.js +61 -0
  87. package/dist/commands/config/set-project.js.map +1 -0
  88. package/dist/commands/config/set.js +60 -0
  89. package/dist/commands/config/set.js.map +1 -0
  90. package/dist/commands/config/show.js +13 -0
  91. package/dist/commands/config/show.js.map +1 -0
  92. package/dist/commands/config/unset-project.js +57 -0
  93. package/dist/commands/config/unset-project.js.map +1 -0
  94. package/dist/commands/config/unset.js +56 -0
  95. package/dist/commands/config/unset.js.map +1 -0
  96. package/dist/commands/diff.js +755 -0
  97. package/dist/commands/diff.js.map +1 -0
  98. package/dist/commands/doctor.js +413 -0
  99. package/dist/commands/doctor.js.map +1 -0
  100. package/dist/commands/edit.js +253 -0
  101. package/dist/commands/edit.js.map +1 -0
  102. package/dist/commands/eject.js +208 -0
  103. package/dist/commands/eject.js.map +1 -0
  104. package/dist/commands/info.js +205 -0
  105. package/dist/commands/info.js.map +1 -0
  106. package/dist/commands/init.js +914 -0
  107. package/dist/commands/init.js.map +1 -0
  108. package/dist/commands/list.js +44 -0
  109. package/dist/commands/list.js.map +1 -0
  110. package/dist/commands/new/agent.js +230 -0
  111. package/dist/commands/new/agent.js.map +1 -0
  112. package/dist/commands/new/skill.js +204 -0
  113. package/dist/commands/new/skill.js.map +1 -0
  114. package/dist/commands/outdated.js +242 -0
  115. package/dist/commands/outdated.js.map +1 -0
  116. package/dist/commands/search.js +115 -0
  117. package/dist/commands/search.js.map +1 -0
  118. package/dist/commands/test-imports.js +92 -0
  119. package/dist/commands/test-imports.js.map +1 -0
  120. package/dist/commands/uninstall.js +302 -0
  121. package/dist/commands/uninstall.js.map +1 -0
  122. package/dist/commands/update.js +428 -0
  123. package/dist/commands/update.js.map +1 -0
  124. package/dist/commands/validate.js +375 -0
  125. package/dist/commands/validate.js.map +1 -0
  126. package/dist/commands/version/bump.js +95 -0
  127. package/dist/commands/version/bump.js.map +1 -0
  128. package/dist/commands/version/index.js +70 -0
  129. package/dist/commands/version/index.js.map +1 -0
  130. package/dist/commands/version/set.js +101 -0
  131. package/dist/commands/version/set.js.map +1 -0
  132. package/dist/commands/version/show.js +70 -0
  133. package/dist/commands/version/show.js.map +1 -0
  134. package/dist/components/common/confirm.js +9 -0
  135. package/dist/components/common/confirm.js.map +1 -0
  136. package/dist/components/common/message.js +24 -0
  137. package/dist/components/common/message.js.map +1 -0
  138. package/dist/components/common/spinner.js +14 -0
  139. package/dist/components/common/spinner.js.map +1 -0
  140. package/dist/components/wizard/selection-header.js +11 -0
  141. package/dist/components/wizard/selection-header.js.map +1 -0
  142. package/dist/components/wizard/step-approach.js +11 -0
  143. package/dist/components/wizard/step-approach.js.map +1 -0
  144. package/dist/components/wizard/step-category.js +12 -0
  145. package/dist/components/wizard/step-category.js.map +1 -0
  146. package/dist/components/wizard/step-confirm.js +12 -0
  147. package/dist/components/wizard/step-confirm.js.map +1 -0
  148. package/dist/components/wizard/step-stack.js +11 -0
  149. package/dist/components/wizard/step-stack.js.map +1 -0
  150. package/dist/components/wizard/step-subcategory.js +13 -0
  151. package/dist/components/wizard/step-subcategory.js.map +1 -0
  152. package/dist/components/wizard/wizard.js +19 -0
  153. package/dist/components/wizard/wizard.js.map +1 -0
  154. package/dist/hooks/init.js +41 -0
  155. package/dist/hooks/init.js.map +1 -0
  156. package/dist/index.js +10 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/magic-string.es-RGXYGAW3.js +1316 -0
  159. package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
  160. package/dist/stores/wizard-store.js +10 -0
  161. package/dist/stores/wizard-store.js.map +1 -0
  162. package/dist/stores/wizard-store.test.js +15991 -0
  163. package/dist/stores/wizard-store.test.js.map +1 -0
  164. package/package.json +44 -25
  165. package/dist/cli/index.js +0 -6314
  166. 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":"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","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":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,eAAe;AAYxB,IAAM,eAAe;AAqBrB,eAAsB,gBAA4C;AAChE,QAAM,YAAY,uBAAuB;AAEzC,MAAI,CAAE,MAAM,gBAAgB,SAAS,GAAI;AACvC,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,MAAM,mBAAmB,SAAS;AACnD,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,mBAAmB,SAAS;AAC9C,QAAM,YAAY,mBAAmB,SAAS;AAE9C,MAAI,aAAa;AACjB,MAAI,aAAa;AAEjB,MAAI,MAAM,gBAAgB,SAAS,GAAG;AACpC,UAAM,SAAS,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC;AAC/D,iBAAa,OAAO,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;AAAA,EACrD;AAEA,MAAI,MAAM,gBAAgB,SAAS,GAAG;AACpC,UAAM,SAAS,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC;AAC/D,iBAAa,OAAO;AAAA,MAClB,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,KAAK,SAAS,KAAK;AAAA,IAC5C,EAAE;AAAA,EACJ;AAEA,SAAO;AAAA,IACL,MAAM,SAAS,QAAQ;AAAA,IACvB,SAAS,SAAS,WAAW;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAaA,eAAsB,sBAAwD;AAC5E,QAAM,eAAe,MAAM,mBAAmB;AAE9C,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,aAAa;AACjB,MAAI,aAAa;AACjB,MAAI,OAAO;AACX,MAAI,UAAU;AAGd,MAAI,MAAM,gBAAgB,aAAa,SAAS,GAAG;AACjD,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,aAAa,WAAW;AAAA,QACnD,eAAe;AAAA,MACjB,CAAC;AACD,mBAAa,OAAO,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;AAAA,IACrD,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,MAAI,MAAM,gBAAgB,aAAa,SAAS,GAAG;AACjD,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,aAAa,WAAW;AAAA,QACnD,eAAe;AAAA,MACjB,CAAC;AACD,mBAAa,OAAO;AAAA,QAClB,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,KAAK,SAAS,KAAK;AAAA,MAC5C,EAAE;AAAA,IACJ,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,MAAI,aAAa,SAAS,SAAS;AACjC,UAAM,SAAS,MAAM,kBAAkB,aAAa,UAAU;AAC9D,QAAI,QAAQ,QAAQ;AAClB,aAAO,OAAO,OAAO,QAAQ;AAE7B,gBAAU;AAAA,IACZ;AAAA,EACF,OAAO;AAEL,UAAM,YAAY,uBAAuB,aAAa,UAAU;AAChE,UAAM,WAAW,MAAM,mBAAmB,SAAS;AACnD,QAAI,UAAU;AACZ,aAAO,SAAS,QAAQ;AACxB,gBAAU,SAAS,WAAW;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,aAAa;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,aAAa;AAAA,IACzB,WAAW,aAAa;AAAA,IACxB,WAAW,aAAa;AAAA,EAC1B;AACF;AAEO,SAAS,0BAA0B,MAAgC;AACxE,QAAM,YAAY,KAAK,SAAS,UAAU,UAAU;AACpD,QAAM,iBACJ,KAAK,SAAS,UAAU,iBAAiB,IAAI,KAAK,OAAO;AAE3D,SAAO,iBAAiB,KAAK,IAAI,IAAI,cAAc;AAAA,aACxC,SAAS;AAAA,aACT,KAAK,UAAU;AAAA,aACf,KAAK,UAAU;AAAA,aACf,KAAK,UAAU;AAAA,aACf,KAAK,SAAS;AAC3B;","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":[]}