@claude-collective/cli 0.25.1 → 0.26.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/{chunk-4WGN6SUE.js → chunk-2OW7FCIF.js} +2 -2
  3. package/dist/{chunk-WXS4S3MA.js → chunk-2YMMJP4Z.js} +2 -2
  4. package/dist/{chunk-ZDREFYD2.js → chunk-324DM2L6.js} +12 -2
  5. package/dist/chunk-324DM2L6.js.map +1 -0
  6. package/dist/{chunk-YDBSSAJ6.js → chunk-CQ7657GA.js} +140 -132
  7. package/dist/chunk-CQ7657GA.js.map +1 -0
  8. package/dist/{chunk-IAYAE6MG.js → chunk-CZBNDP5B.js} +2 -2
  9. package/dist/{chunk-MH66WDFV.js → chunk-G35SYE6Z.js} +3 -3
  10. package/dist/{chunk-MTPM7BX5.js → chunk-HIQGK5XJ.js} +5 -5
  11. package/dist/{chunk-NRC7XYCI.js → chunk-NT4K647L.js} +106 -6
  12. package/dist/chunk-NT4K647L.js.map +1 -0
  13. package/dist/commands/build/marketplace.js +8 -9
  14. package/dist/commands/build/marketplace.js.map +1 -1
  15. package/dist/commands/build/plugins.js +25 -5
  16. package/dist/commands/build/plugins.js.map +1 -1
  17. package/dist/commands/build/stack.js +3 -3
  18. package/dist/commands/compile.js +3 -3
  19. package/dist/commands/config/get.js +2 -2
  20. package/dist/commands/config/index.js +3 -3
  21. package/dist/commands/config/path.js +2 -2
  22. package/dist/commands/config/set-project.js +2 -2
  23. package/dist/commands/config/show.js +3 -3
  24. package/dist/commands/config/unset-project.js +2 -2
  25. package/dist/commands/diff.js +2 -2
  26. package/dist/commands/doctor.js +2 -2
  27. package/dist/commands/edit.js +32 -7
  28. package/dist/commands/edit.js.map +1 -1
  29. package/dist/commands/eject.js +2 -2
  30. package/dist/commands/import/skill.js +2 -2
  31. package/dist/commands/info.js +2 -2
  32. package/dist/commands/init.js +64 -11
  33. package/dist/commands/init.js.map +1 -1
  34. package/dist/commands/list.js +2 -2
  35. package/dist/commands/new/agent.js +2 -2
  36. package/dist/commands/new/skill.js +2 -2
  37. package/dist/commands/outdated.js +2 -2
  38. package/dist/commands/search.js +2 -2
  39. package/dist/commands/uninstall.js +2 -2
  40. package/dist/commands/update.js +3 -3
  41. package/dist/commands/validate.js +2 -2
  42. package/dist/commands/version/bump.js +2 -2
  43. package/dist/commands/version/index.js +2 -2
  44. package/dist/commands/version/set.js +2 -2
  45. package/dist/commands/version/show.js +2 -2
  46. package/dist/components/wizard/step-build.js +3 -3
  47. package/dist/components/wizard/step-build.test.js +3 -3
  48. package/dist/components/wizard/step-settings.js +3 -3
  49. package/dist/components/wizard/step-settings.test.js +6 -6
  50. package/dist/components/wizard/step-sources.js +3 -3
  51. package/dist/components/wizard/step-sources.test.js +3 -3
  52. package/dist/components/wizard/wizard.js +6 -6
  53. package/dist/hooks/init.js +2 -2
  54. package/dist/{source-manager-DSYZEVGZ.js → source-manager-VWIIDTK5.js} +3 -3
  55. package/dist/src/agents/_templates/agent.liquid +1 -1
  56. package/package.json +1 -1
  57. package/src/agents/_templates/agent.liquid +1 -1
  58. package/dist/chunk-NRC7XYCI.js.map +0 -1
  59. package/dist/chunk-YDBSSAJ6.js.map +0 -1
  60. package/dist/chunk-ZDREFYD2.js.map +0 -1
  61. /package/dist/{chunk-4WGN6SUE.js.map → chunk-2OW7FCIF.js.map} +0 -0
  62. /package/dist/{chunk-WXS4S3MA.js.map → chunk-2YMMJP4Z.js.map} +0 -0
  63. /package/dist/{chunk-IAYAE6MG.js.map → chunk-CZBNDP5B.js.map} +0 -0
  64. /package/dist/{chunk-MH66WDFV.js.map → chunk-G35SYE6Z.js.map} +0 -0
  65. /package/dist/{chunk-MTPM7BX5.js.map → chunk-HIQGK5XJ.js.map} +0 -0
  66. /package/dist/{source-manager-DSYZEVGZ.js.map → source-manager-VWIIDTK5.js.map} +0 -0
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  getAgentDefinitions,
4
4
  recompileAgents
5
- } from "../chunk-NRC7XYCI.js";
5
+ } from "../chunk-NT4K647L.js";
6
6
  import {
7
7
  Wizard
8
- } from "../chunk-MTPM7BX5.js";
9
- import "../chunk-MH66WDFV.js";
8
+ } from "../chunk-HIQGK5XJ.js";
9
+ import "../chunk-G35SYE6Z.js";
10
10
  import "../chunk-XENOESJZ.js";
11
11
  import "../chunk-UEMRJI2K.js";
12
12
  import "../chunk-3X5D7RM5.js";
13
- import "../chunk-WXS4S3MA.js";
13
+ import "../chunk-2YMMJP4Z.js";
14
14
  import "../chunk-VVYNZZUX.js";
15
15
  import "../chunk-V2ZIH7HV.js";
16
- import "../chunk-4WGN6SUE.js";
16
+ import "../chunk-2OW7FCIF.js";
17
17
  import "../chunk-ZW2PELOH.js";
18
18
  import "../chunk-4S4FCAA2.js";
19
19
  import "../chunk-KWYO3M5Q.js";
@@ -29,6 +29,8 @@ import {
29
29
  import {
30
30
  archiveLocalSkill,
31
31
  bumpPluginVersion,
32
+ claudePluginInstall,
33
+ claudePluginUninstall,
32
34
  copySkillsToPluginFromSource,
33
35
  detectInstallation,
34
36
  getCollectivePluginDir,
@@ -36,12 +38,12 @@ import {
36
38
  getPluginSkillsDir,
37
39
  loadSkillsMatrixFromSource,
38
40
  restoreArchivedSkill
39
- } from "../chunk-YDBSSAJ6.js";
41
+ } from "../chunk-CQ7657GA.js";
40
42
  import {
41
43
  directoryExists,
42
44
  ensureDir,
43
45
  remove
44
- } from "../chunk-ZDREFYD2.js";
46
+ } from "../chunk-324DM2L6.js";
45
47
  import {
46
48
  typedEntries
47
49
  } from "../chunk-HWD32NP7.js";
@@ -196,6 +198,29 @@ var Edit = class _Edit extends BaseCommand {
196
198
  await restoreArchivedSkill(projectDir, skillId);
197
199
  }
198
200
  }
201
+ if (installation.mode === "plugin" && sourceResult.marketplace) {
202
+ for (const skillId of addedSkills) {
203
+ const pluginRef = `${skillId}@${sourceResult.marketplace}`;
204
+ this.log(`Installing plugin: ${pluginRef}...`);
205
+ try {
206
+ await claudePluginInstall(pluginRef, "project", projectDir);
207
+ } catch (error) {
208
+ this.warn(
209
+ `Failed to install plugin ${pluginRef}: ${error instanceof Error ? error.message : String(error)}`
210
+ );
211
+ }
212
+ }
213
+ for (const skillId of removedSkills) {
214
+ this.log(`Uninstalling plugin: ${skillId}...`);
215
+ try {
216
+ await claudePluginUninstall(skillId, "project", projectDir);
217
+ } catch (error) {
218
+ this.warn(
219
+ `Failed to uninstall plugin ${skillId}: ${error instanceof Error ? error.message : String(error)}`
220
+ );
221
+ }
222
+ }
223
+ }
199
224
  this.log("Updating plugin skills...");
200
225
  try {
201
226
  if (await directoryExists(pluginSkillsDir)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/edit.tsx"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport { render } from \"ink\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport { loadSkillsMatrixFromSource } from \"../lib/loading/index.js\";\nimport { directoryExists, ensureDir, remove } from \"../utils/fs.js\";\nimport {\n getCollectivePluginDir,\n getPluginSkillsDir,\n getPluginSkillIds,\n bumpPluginVersion,\n} from \"../lib/plugins/index.js\";\nimport {\n copySkillsToPluginFromSource,\n archiveLocalSkill,\n restoreArchivedSkill,\n} from \"../lib/skills/index.js\";\nimport { recompileAgents, getAgentDefinitions } from \"../lib/agents/index.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { detectInstallation } from \"../lib/installation/index.js\";\nimport type { SkillId } from \"../types/index.js\";\nimport { typedEntries } from \"../utils/typed-object.js\";\n\nconst SOURCE_DISPLAY_NAMES: Record<string, string> = {\n public: \"Public\",\n local: \"Local\",\n};\n\nfunction formatSourceDisplayName(sourceName: string): string {\n return SOURCE_DISPLAY_NAMES[sourceName] ?? sourceName;\n}\n\nexport default class Edit extends BaseCommand {\n static summary = \"Edit skills in the plugin\";\n static description = \"Modify the currently installed skills via interactive wizard\";\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Edit);\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.error(\"No installation found. Run 'cc init' first to set up Claude Collective.\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const pluginDir = getCollectivePluginDir();\n const pluginSkillsDir =\n installation.mode === \"local\" ? installation.skillsDir : getPluginSkillsDir(pluginDir);\n\n const modeLabel = installation.mode === \"local\" ? \"Local\" : \"Plugin\";\n this.log(`Edit ${modeLabel} Skills\\n`);\n\n this.log(\"Resolving marketplace source...\");\n let sourceResult;\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir: process.cwd(),\n forceRefresh: flags.refresh,\n });\n\n const sourceInfo = sourceResult.isLocal ? \"local\" : sourceResult.sourceConfig.sourceOrigin;\n this.log(\n `✓ Loaded ${Object.keys(sourceResult.matrix.skills).length} skills (${sourceInfo})\\n`,\n );\n } catch (error) {\n this.handleError(error);\n }\n\n this.log(\"Reading current skills...\");\n let currentSkillIds: SkillId[];\n try {\n currentSkillIds = await getPluginSkillIds(pluginSkillsDir, sourceResult.matrix);\n this.log(`✓ Current plugin has ${currentSkillIds.length} skills\\n`);\n } catch (error) {\n this.handleError(error);\n }\n\n let wizardResult: WizardResultV2 | null = null;\n\n const { waitUntilExit } = render(\n <Wizard\n matrix={sourceResult.matrix}\n version={this.config.version}\n initialStep=\"build\"\n installedSkillIds={currentSkillIds}\n projectDir={process.cwd()}\n onComplete={(result) => {\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"\\nEdit cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n const result = wizardResult as WizardResultV2 | null;\n\n if (!result || result.cancelled) {\n this.error(\"Cancelled\", { exit: EXIT_CODES.CANCELLED });\n }\n\n if (!result.validation.valid) {\n const errorMessages = result.validation.errors.map((e) => e.message).join(\"\\n \");\n this.error(`Selection has validation errors:\\n ${errorMessages}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const addedSkills = result.selectedSkills.filter((id) => !currentSkillIds.includes(id));\n const removedSkills = currentSkillIds.filter((id) => !result.selectedSkills.includes(id));\n\n // Detect source changes (user changed which source provides a skill)\n const sourceChanges = new Map<SkillId, { from: string; to: string }>();\n for (const [skillId, selectedSource] of typedEntries<SkillId, string>(\n result.sourceSelections,\n )) {\n const skill = sourceResult.matrix.skills[skillId];\n if (skill?.activeSource && skill.activeSource.name !== selectedSource) {\n sourceChanges.set(skillId, {\n from: skill.activeSource.name,\n to: selectedSource,\n });\n }\n }\n\n const hasSourceChanges = sourceChanges.size > 0;\n const hasSkillChanges = addedSkills.length > 0 || removedSkills.length > 0;\n\n if (result.validation.warnings.length > 0) {\n this.log(\"\\nWarnings:\");\n for (const warning of result.validation.warnings) {\n this.warn(` ! ${warning.message}`);\n }\n this.log(\"\");\n }\n\n if (!hasSkillChanges && !hasSourceChanges) {\n this.log(\"No changes made.\");\n this.log(\"Plugin unchanged\\n\");\n return;\n }\n\n this.log(\"\\nChanges:\");\n for (const skillId of addedSkills) {\n const skill = sourceResult.matrix.skills[skillId];\n this.log(` + ${skill?.displayName || skillId}`);\n }\n for (const skillId of removedSkills) {\n const skill = sourceResult.matrix.skills[skillId];\n this.log(` - ${skill?.displayName || skillId}`);\n }\n for (const [skillId, change] of sourceChanges) {\n const fromLabel = formatSourceDisplayName(change.from);\n const toLabel = formatSourceDisplayName(change.to);\n this.log(` ~ ${skillId} (${fromLabel} \\u2192 ${toLabel})`);\n }\n this.log(\"\");\n\n // Apply source switches (archive/restore local skills)\n const projectDir = process.cwd();\n for (const [skillId, change] of sourceChanges) {\n if (change.from === \"local\") {\n await archiveLocalSkill(projectDir, skillId);\n }\n if (change.to === \"local\") {\n await restoreArchivedSkill(projectDir, skillId);\n }\n }\n\n this.log(\"Updating plugin skills...\");\n try {\n if (await directoryExists(pluginSkillsDir)) {\n await remove(pluginSkillsDir);\n }\n await ensureDir(pluginSkillsDir);\n\n await copySkillsToPluginFromSource(\n result.selectedSkills,\n pluginDir,\n sourceResult.matrix,\n sourceResult,\n result.sourceSelections,\n );\n this.log(`✓ Plugin updated with ${result.selectedSkills.length} skills\\n`);\n } catch (error) {\n this.handleError(error);\n }\n\n let sourcePath: string;\n this.log(flags[\"agent-source\"] ? \"Fetching agent partials...\" : \"Loading agent partials...\");\n try {\n const agentDefs = await getAgentDefinitions(flags[\"agent-source\"], {\n forceRefresh: flags.refresh,\n });\n sourcePath = agentDefs.sourcePath;\n this.log(flags[\"agent-source\"] ? \"✓ Agent partials fetched\\n\" : \"✓ Agent partials loaded\\n\");\n } catch (error) {\n this.handleError(error);\n }\n\n this.log(\"Recompiling agents...\");\n try {\n const recompileResult = await recompileAgents({\n pluginDir,\n sourcePath,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `✓ Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)\\n`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`✓ Recompiled ${recompileResult.compiled.length} agents\\n`);\n } else {\n this.log(\"✓ No agents to recompile\\n\");\n }\n } catch (error) {\n this.warn(\n `Agent recompilation failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n this.log(\"You can manually recompile with 'cc compile'.\\n\");\n }\n\n this.log(\"Updating plugin version...\");\n try {\n const newVersion = await bumpPluginVersion(pluginDir, \"patch\");\n this.log(`✓ Version bumped to ${newVersion}\\n`);\n } catch (error) {\n this.handleError(error);\n }\n\n const summaryParts = [`${addedSkills.length} added`, `${removedSkills.length} removed`];\n if (hasSourceChanges) {\n summaryParts.push(`${sourceChanges.size} source${sourceChanges.size > 1 ? \"s\" : \"\"} changed`);\n }\n this.log(`\\n\\u2713 Plugin updated! (${summaryParts.join(\", \")})\\n`);\n }\n}\n"],"mappings":"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","names":["result"]}
1
+ {"version":3,"sources":["../../src/cli/commands/edit.tsx"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport { render } from \"ink\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport { loadSkillsMatrixFromSource } from \"../lib/loading/index.js\";\nimport { directoryExists, ensureDir, remove } from \"../utils/fs.js\";\nimport {\n getCollectivePluginDir,\n getPluginSkillsDir,\n getPluginSkillIds,\n bumpPluginVersion,\n} from \"../lib/plugins/index.js\";\nimport {\n copySkillsToPluginFromSource,\n archiveLocalSkill,\n restoreArchivedSkill,\n} from \"../lib/skills/index.js\";\nimport { recompileAgents, getAgentDefinitions } from \"../lib/agents/index.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { detectInstallation } from \"../lib/installation/index.js\";\nimport { claudePluginInstall, claudePluginUninstall } from \"../utils/exec.js\";\nimport type { SkillId } from \"../types/index.js\";\nimport { typedEntries } from \"../utils/typed-object.js\";\n\nconst SOURCE_DISPLAY_NAMES: Record<string, string> = {\n public: \"Public\",\n local: \"Local\",\n};\n\nfunction formatSourceDisplayName(sourceName: string): string {\n return SOURCE_DISPLAY_NAMES[sourceName] ?? sourceName;\n}\n\nexport default class Edit extends BaseCommand {\n static summary = \"Edit skills in the plugin\";\n static description = \"Modify the currently installed skills via interactive wizard\";\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Edit);\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.error(\"No installation found. Run 'cc init' first to set up Claude Collective.\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const pluginDir = getCollectivePluginDir();\n const pluginSkillsDir =\n installation.mode === \"local\" ? installation.skillsDir : getPluginSkillsDir(pluginDir);\n\n const modeLabel = installation.mode === \"local\" ? \"Local\" : \"Plugin\";\n this.log(`Edit ${modeLabel} Skills\\n`);\n\n this.log(\"Resolving marketplace source...\");\n let sourceResult;\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir: process.cwd(),\n forceRefresh: flags.refresh,\n });\n\n const sourceInfo = sourceResult.isLocal ? \"local\" : sourceResult.sourceConfig.sourceOrigin;\n this.log(\n `✓ Loaded ${Object.keys(sourceResult.matrix.skills).length} skills (${sourceInfo})\\n`,\n );\n } catch (error) {\n this.handleError(error);\n }\n\n this.log(\"Reading current skills...\");\n let currentSkillIds: SkillId[];\n try {\n currentSkillIds = await getPluginSkillIds(pluginSkillsDir, sourceResult.matrix);\n this.log(`✓ Current plugin has ${currentSkillIds.length} skills\\n`);\n } catch (error) {\n this.handleError(error);\n }\n\n let wizardResult: WizardResultV2 | null = null;\n\n const { waitUntilExit } = render(\n <Wizard\n matrix={sourceResult.matrix}\n version={this.config.version}\n initialStep=\"build\"\n installedSkillIds={currentSkillIds}\n projectDir={process.cwd()}\n onComplete={(result) => {\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"\\nEdit cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n const result = wizardResult as WizardResultV2 | null;\n\n if (!result || result.cancelled) {\n this.error(\"Cancelled\", { exit: EXIT_CODES.CANCELLED });\n }\n\n if (!result.validation.valid) {\n const errorMessages = result.validation.errors.map((e) => e.message).join(\"\\n \");\n this.error(`Selection has validation errors:\\n ${errorMessages}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const addedSkills = result.selectedSkills.filter((id) => !currentSkillIds.includes(id));\n const removedSkills = currentSkillIds.filter((id) => !result.selectedSkills.includes(id));\n\n // Detect source changes (user changed which source provides a skill)\n const sourceChanges = new Map<SkillId, { from: string; to: string }>();\n for (const [skillId, selectedSource] of typedEntries<SkillId, string>(\n result.sourceSelections,\n )) {\n const skill = sourceResult.matrix.skills[skillId];\n if (skill?.activeSource && skill.activeSource.name !== selectedSource) {\n sourceChanges.set(skillId, {\n from: skill.activeSource.name,\n to: selectedSource,\n });\n }\n }\n\n const hasSourceChanges = sourceChanges.size > 0;\n const hasSkillChanges = addedSkills.length > 0 || removedSkills.length > 0;\n\n if (result.validation.warnings.length > 0) {\n this.log(\"\\nWarnings:\");\n for (const warning of result.validation.warnings) {\n this.warn(` ! ${warning.message}`);\n }\n this.log(\"\");\n }\n\n if (!hasSkillChanges && !hasSourceChanges) {\n this.log(\"No changes made.\");\n this.log(\"Plugin unchanged\\n\");\n return;\n }\n\n this.log(\"\\nChanges:\");\n for (const skillId of addedSkills) {\n const skill = sourceResult.matrix.skills[skillId];\n this.log(` + ${skill?.displayName || skillId}`);\n }\n for (const skillId of removedSkills) {\n const skill = sourceResult.matrix.skills[skillId];\n this.log(` - ${skill?.displayName || skillId}`);\n }\n for (const [skillId, change] of sourceChanges) {\n const fromLabel = formatSourceDisplayName(change.from);\n const toLabel = formatSourceDisplayName(change.to);\n this.log(` ~ ${skillId} (${fromLabel} \\u2192 ${toLabel})`);\n }\n this.log(\"\");\n\n // Apply source switches (archive/restore local skills)\n const projectDir = process.cwd();\n for (const [skillId, change] of sourceChanges) {\n if (change.from === \"local\") {\n await archiveLocalSkill(projectDir, skillId);\n }\n if (change.to === \"local\") {\n await restoreArchivedSkill(projectDir, skillId);\n }\n }\n\n // Install/uninstall individual skill plugins when in plugin mode with a marketplace\n if (installation.mode === \"plugin\" && sourceResult.marketplace) {\n for (const skillId of addedSkills) {\n const pluginRef = `${skillId}@${sourceResult.marketplace}`;\n this.log(`Installing plugin: ${pluginRef}...`);\n try {\n await claudePluginInstall(pluginRef, \"project\", projectDir);\n } catch (error) {\n this.warn(\n `Failed to install plugin ${pluginRef}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n for (const skillId of removedSkills) {\n this.log(`Uninstalling plugin: ${skillId}...`);\n try {\n await claudePluginUninstall(skillId, \"project\", projectDir);\n } catch (error) {\n this.warn(\n `Failed to uninstall plugin ${skillId}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n }\n\n this.log(\"Updating plugin skills...\");\n try {\n if (await directoryExists(pluginSkillsDir)) {\n await remove(pluginSkillsDir);\n }\n await ensureDir(pluginSkillsDir);\n\n await copySkillsToPluginFromSource(\n result.selectedSkills,\n pluginDir,\n sourceResult.matrix,\n sourceResult,\n result.sourceSelections,\n );\n this.log(`✓ Plugin updated with ${result.selectedSkills.length} skills\\n`);\n } catch (error) {\n this.handleError(error);\n }\n\n let sourcePath: string;\n this.log(flags[\"agent-source\"] ? \"Fetching agent partials...\" : \"Loading agent partials...\");\n try {\n const agentDefs = await getAgentDefinitions(flags[\"agent-source\"], {\n forceRefresh: flags.refresh,\n });\n sourcePath = agentDefs.sourcePath;\n this.log(flags[\"agent-source\"] ? \"✓ Agent partials fetched\\n\" : \"✓ Agent partials loaded\\n\");\n } catch (error) {\n this.handleError(error);\n }\n\n this.log(\"Recompiling agents...\");\n try {\n const recompileResult = await recompileAgents({\n pluginDir,\n sourcePath,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `✓ Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)\\n`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`✓ Recompiled ${recompileResult.compiled.length} agents\\n`);\n } else {\n this.log(\"✓ No agents to recompile\\n\");\n }\n } catch (error) {\n this.warn(\n `Agent recompilation failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n this.log(\"You can manually recompile with 'cc compile'.\\n\");\n }\n\n this.log(\"Updating plugin version...\");\n try {\n const newVersion = await bumpPluginVersion(pluginDir, \"patch\");\n this.log(`✓ Version bumped to ${newVersion}\\n`);\n } catch (error) {\n this.handleError(error);\n }\n\n const summaryParts = [`${addedSkills.length} added`, `${removedSkills.length} removed`];\n if (hasSourceChanges) {\n summaryParts.push(`${sourceChanges.size} source${sourceChanges.size > 1 ? \"s\" : \"\"} changed`);\n }\n this.log(`\\n\\u2713 Plugin updated! (${summaryParts.join(\", \")})\\n`);\n }\n}\n"],"mappings":"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","names":["result"]}
@@ -9,14 +9,14 @@ import {
9
9
  loadSkillsMatrixFromSource,
10
10
  resolveSource,
11
11
  saveSourceToProjectConfig
12
- } from "../chunk-YDBSSAJ6.js";
12
+ } from "../chunk-CQ7657GA.js";
13
13
  import {
14
14
  copy,
15
15
  directoryExists,
16
16
  ensureDir,
17
17
  fileExists,
18
18
  writeFile
19
- } from "../chunk-ZDREFYD2.js";
19
+ } from "../chunk-324DM2L6.js";
20
20
  import {
21
21
  typedKeys
22
22
  } from "../chunk-HWD32NP7.js";
@@ -7,7 +7,7 @@ import {
7
7
  fetchFromSource,
8
8
  getCurrentDate,
9
9
  hashFile
10
- } from "../../chunk-YDBSSAJ6.js";
10
+ } from "../../chunk-CQ7657GA.js";
11
11
  import {
12
12
  copy,
13
13
  directoryExists,
@@ -17,7 +17,7 @@ import {
17
17
  listDirectories,
18
18
  readFile,
19
19
  writeFile
20
- } from "../../chunk-ZDREFYD2.js";
20
+ } from "../../chunk-324DM2L6.js";
21
21
  import "../../chunk-HWD32NP7.js";
22
22
  import {
23
23
  LOCAL_SKILLS_PATH
@@ -6,11 +6,11 @@ import {
6
6
  import {
7
7
  discoverLocalSkills,
8
8
  loadSkillsMatrixFromSource
9
- } from "../chunk-YDBSSAJ6.js";
9
+ } from "../chunk-CQ7657GA.js";
10
10
  import {
11
11
  fileExists,
12
12
  readFile
13
- } from "../chunk-ZDREFYD2.js";
13
+ } from "../chunk-324DM2L6.js";
14
14
  import "../chunk-HWD32NP7.js";
15
15
  import "../chunk-O6ZTD7ZI.js";
16
16
  import {
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Wizard
4
- } from "../chunk-MTPM7BX5.js";
5
- import "../chunk-MH66WDFV.js";
4
+ } from "../chunk-HIQGK5XJ.js";
5
+ import "../chunk-G35SYE6Z.js";
6
6
  import "../chunk-XENOESJZ.js";
7
7
  import "../chunk-UEMRJI2K.js";
8
8
  import "../chunk-3X5D7RM5.js";
9
- import "../chunk-WXS4S3MA.js";
9
+ import "../chunk-2YMMJP4Z.js";
10
10
  import "../chunk-VVYNZZUX.js";
11
11
  import "../chunk-V2ZIH7HV.js";
12
- import "../chunk-4WGN6SUE.js";
12
+ import "../chunk-2OW7FCIF.js";
13
13
  import "../chunk-ZW2PELOH.js";
14
14
  import "../chunk-4S4FCAA2.js";
15
15
  import "../chunk-KWYO3M5Q.js";
@@ -23,6 +23,7 @@ import {
23
23
  EXIT_CODES
24
24
  } from "../chunk-OBXAY23Y.js";
25
25
  import {
26
+ claudePluginInstall,
26
27
  claudePluginMarketplaceAdd,
27
28
  claudePluginMarketplaceExists,
28
29
  getCollectivePluginDir,
@@ -30,14 +31,14 @@ import {
30
31
  installStackAsPlugin,
31
32
  loadSkillsMatrixFromSource,
32
33
  saveSourceToProjectConfig
33
- } from "../chunk-YDBSSAJ6.js";
34
+ } from "../chunk-CQ7657GA.js";
34
35
  import {
35
36
  directoryExists,
36
37
  fileExists,
37
38
  readFile,
38
39
  settingsFileSchema,
39
40
  warn
40
- } from "../chunk-ZDREFYD2.js";
41
+ } from "../chunk-324DM2L6.js";
41
42
  import "../chunk-HWD32NP7.js";
42
43
  import {
43
44
  CLAUDE_DIR,
@@ -215,10 +216,23 @@ var Init = class _Init extends BaseCommand {
215
216
  `[dry-run] Stack includes ${result.selectedSkills.length} skills and agents bundled together`
216
217
  );
217
218
  }
219
+ } else if (result.installMode === "plugin" && sourceResult.marketplace) {
220
+ this.log(
221
+ `[dry-run] Would install ${result.selectedSkills.length} skills as individual plugins from "${sourceResult.marketplace}"`
222
+ );
223
+ for (const skillId of result.selectedSkills) {
224
+ this.log(
225
+ `[dry-run] claude plugin install ${skillId}@${sourceResult.marketplace} --scope project`
226
+ );
227
+ }
228
+ const localAgentsDir = path2.join(projectDir, CLAUDE_DIR, "agents");
229
+ this.log(`[dry-run] Would compile agents to ${localAgentsDir}`);
230
+ this.log(`[dry-run] Would save config to .claude-src/config.yaml`);
218
231
  } else {
219
232
  if (result.installMode === "plugin") {
220
- this.log(`[dry-run] Individual skill plugin installation not yet supported`);
221
- this.log(`[dry-run] Would fall back to Local Mode...`);
233
+ this.log(
234
+ `[dry-run] Plugin Mode requires a marketplace for individual skills \u2014 would fall back to Local Mode`
235
+ );
222
236
  }
223
237
  const localSkillsDir = path2.join(projectDir, LOCAL_SKILLS_PATH);
224
238
  const localAgentsDir = path2.join(projectDir, CLAUDE_DIR, "agents");
@@ -234,12 +248,15 @@ var Init = class _Init extends BaseCommand {
234
248
  if (result.installMode === "plugin") {
235
249
  if (result.selectedStackId) {
236
250
  await this.installPluginMode(result, sourceResult, flags);
237
- return;
251
+ } else if (sourceResult.marketplace) {
252
+ await this.installIndividualPlugins(result, sourceResult, flags);
238
253
  } else {
239
- this.warn("Individual skill plugin installation not yet supported in Plugin Mode.");
254
+ this.warn("Plugin Mode requires a marketplace for individual skill installation.");
240
255
  this.log(`Falling back to Local Mode (copying to .claude/skills/)...`);
241
- this.log("To use Plugin Mode, select a pre-built stack instead of individual skills.\n");
256
+ this.log("To use Plugin Mode, either select a stack or configure a marketplace source.\n");
257
+ await this.installLocalMode(result, sourceResult, flags);
242
258
  }
259
+ return;
243
260
  }
244
261
  await this.installLocalMode(result, sourceResult, flags);
245
262
  }
@@ -304,6 +321,42 @@ Skills bundled: ${installResult.skills.length}`);
304
321
  });
305
322
  }
306
323
  }
324
+ async installIndividualPlugins(result, sourceResult, flags) {
325
+ const projectDir = process.cwd();
326
+ if (sourceResult.marketplace) {
327
+ const marketplaceExists = await claudePluginMarketplaceExists(sourceResult.marketplace);
328
+ if (!marketplaceExists) {
329
+ this.log(`Registering marketplace "${sourceResult.marketplace}"...`);
330
+ try {
331
+ await claudePluginMarketplaceAdd(
332
+ sourceResult.sourceConfig.source,
333
+ sourceResult.marketplace
334
+ );
335
+ this.log(`Registered marketplace: ${sourceResult.marketplace}`);
336
+ } catch (error) {
337
+ this.error(error instanceof Error ? error.message : "Unknown error", {
338
+ exit: EXIT_CODES.ERROR
339
+ });
340
+ }
341
+ }
342
+ }
343
+ this.log("Installing skill plugins...");
344
+ for (const skillId of result.selectedSkills) {
345
+ const pluginRef = `${skillId}@${sourceResult.marketplace}`;
346
+ try {
347
+ await claudePluginInstall(pluginRef, "project", projectDir);
348
+ this.log(` Installed ${pluginRef}`);
349
+ } catch (error) {
350
+ this.error(
351
+ `Failed to install plugin ${pluginRef}: ${error instanceof Error ? error.message : "Unknown error"}`,
352
+ { exit: EXIT_CODES.ERROR }
353
+ );
354
+ }
355
+ }
356
+ this.log(`Installed ${result.selectedSkills.length} skill plugins
357
+ `);
358
+ await this.installLocalMode(result, sourceResult, flags);
359
+ }
307
360
  async installLocalMode(result, sourceResult, flags) {
308
361
  const projectDir = process.cwd();
309
362
  const matrix = sourceResult.matrix;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/init.tsx","../../src/cli/lib/permission-checker.tsx"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport { render } from \"ink\";\nimport path from \"path\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport { loadSkillsMatrixFromSource, type SourceLoadResult } from \"../lib/loading/index.js\";\nimport { saveSourceToProjectConfig } from \"../lib/configuration/index.js\";\nimport { installLocal } from \"../lib/installation/index.js\";\nimport { checkPermissions } from \"../lib/permission-checker.js\";\nimport { installStackAsPlugin } from \"../lib/stacks/index.js\";\nimport { getCollectivePluginDir } from \"../lib/plugins/index.js\";\nimport { claudePluginMarketplaceExists, claudePluginMarketplaceAdd } from \"../utils/exec.js\";\nimport { directoryExists } from \"../utils/fs.js\";\nimport { CLAUDE_DIR, LOCAL_SKILLS_PATH } from \"../consts.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\n\nexport default class Init extends BaseCommand {\n static summary = \"Initialize Claude Collective in this project\";\n static description =\n \"Interactive wizard to set up skills and agents. Supports Plugin Mode (native install) and Local Mode (copy to .claude/).\";\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote source\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Init);\n const projectDir = process.cwd();\n\n this.log(\n ` \n █████╗ ██████╗ ███████╗███╗ ██╗████████╗███████╗ ██╗███╗ ██╗ ██████╗\n██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝██╔════╝ ██║████╗ ██║██╔════╝\n███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ███████╗ ██║██╔██╗ ██║██║ \n██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ╚════██║ ██║██║╚██╗██║██║ \n██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ███████║ ██║██║ ╚████║╚██████╗\n╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝\n`,\n );\n\n if (flags[\"dry-run\"]) {\n this.log(\"[dry-run] Preview mode - no files will be created\\n\");\n }\n\n const pluginDir = getCollectivePluginDir();\n const pluginExists = await directoryExists(pluginDir);\n\n if (pluginExists) {\n this.warn(`Claude Collective is already initialized at ${pluginDir}`);\n this.log(`Use 'cc edit' to modify skills.`);\n this.log(\"No changes made.\");\n return;\n }\n\n let sourceResult: SourceLoadResult;\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n } catch (error) {\n this.error(error instanceof Error ? error.message : \"Unknown error occurred\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n let wizardResult: WizardResultV2 | null = null;\n\n const { waitUntilExit } = render(\n <Wizard\n matrix={sourceResult.matrix}\n version={this.config.version}\n projectDir={process.cwd()}\n onComplete={(result) => {\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"Setup cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n const result = wizardResult as WizardResultV2 | null;\n if (!result || result.cancelled) {\n return this.exit(EXIT_CODES.CANCELLED);\n }\n\n if (result.selectedSkills.length === 0) {\n return this.error(\"No skills selected\", { exit: EXIT_CODES.ERROR });\n }\n\n await this.handleInstallation(result, sourceResult, flags);\n }\n\n private async handleInstallation(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { \"dry-run\": boolean; source?: string; refresh: boolean },\n ): Promise<void> {\n const projectDir = process.cwd();\n const dryRun = flags[\"dry-run\"];\n\n this.log(\"\\n\");\n this.log(`Selected ${result.selectedSkills.length} skills`);\n this.log(\n `Install mode: ${result.installMode === \"plugin\" ? \"Plugin (native install)\" : \"Local (copy to .claude/skills/)\"}`,\n );\n\n if (dryRun) {\n if (result.installMode === \"plugin\" && result.selectedStackId) {\n const useMarketplace = !!sourceResult.marketplace;\n if (useMarketplace) {\n this.log(\n `[dry-run] Would install stack \"${result.selectedStackId}\" from marketplace \"${sourceResult.marketplace}\"`,\n );\n this.log(\n `[dry-run] claude plugin install ${result.selectedStackId}@${sourceResult.marketplace} --scope project`,\n );\n } else {\n this.log(\n `[dry-run] Would compile and install stack \"${result.selectedStackId}\" as a native plugin`,\n );\n this.log(\n `[dry-run] claude plugin install ./compiled-stack/${result.selectedStackId} --scope project`,\n );\n this.log(\n `[dry-run] Stack includes ${result.selectedSkills.length} skills and agents bundled together`,\n );\n }\n } else {\n if (result.installMode === \"plugin\") {\n this.log(`[dry-run] Individual skill plugin installation not yet supported`);\n this.log(`[dry-run] Would fall back to Local Mode...`);\n }\n const localSkillsDir = path.join(projectDir, LOCAL_SKILLS_PATH);\n const localAgentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n this.log(\n `[dry-run] Would copy ${result.selectedSkills.length} skills to ${localSkillsDir}`,\n );\n this.log(`[dry-run] Would compile agents to ${localAgentsDir}`);\n this.log(`[dry-run] Would save config to .claude-src/config.yaml`);\n }\n this.log(\"\\n[dry-run] Preview complete - no files were created\");\n return;\n }\n\n if (result.installMode === \"plugin\") {\n if (result.selectedStackId) {\n await this.installPluginMode(result, sourceResult, flags);\n return;\n } else {\n this.warn(\"Individual skill plugin installation not yet supported in Plugin Mode.\");\n this.log(`Falling back to Local Mode (copying to .claude/skills/)...`);\n this.log(\"To use Plugin Mode, select a pre-built stack instead of individual skills.\\n\");\n }\n }\n\n await this.installLocalMode(result, sourceResult, flags);\n }\n\n private async installPluginMode(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n ): Promise<void> {\n if (!result.selectedStackId) {\n throw new Error(\"No stack selected for plugin mode\");\n }\n\n const projectDir = process.cwd();\n\n if (sourceResult.marketplace) {\n const marketplaceExists = await claudePluginMarketplaceExists(sourceResult.marketplace);\n\n if (!marketplaceExists) {\n this.log(`Registering marketplace \"${sourceResult.marketplace}\"...`);\n try {\n await claudePluginMarketplaceAdd(\n sourceResult.sourceConfig.source,\n sourceResult.marketplace,\n );\n this.log(`Registered marketplace: ${sourceResult.marketplace}`);\n } catch (error) {\n this.error(error instanceof Error ? error.message : \"Unknown error\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n }\n\n const installMethod = sourceResult.marketplace\n ? `Installing from marketplace \"${sourceResult.marketplace}\"`\n : \"Compiling and installing\";\n this.log(`${installMethod} stack \"${result.selectedStackId}\"...`);\n\n try {\n const installResult = await installStackAsPlugin({\n stackId: result.selectedStackId,\n projectDir,\n sourcePath: sourceResult.sourcePath,\n agentSourcePath: sourceResult.sourcePath,\n marketplace: sourceResult.marketplace,\n });\n\n const installedFrom = installResult.fromMarketplace\n ? `from marketplace`\n : `(compiled locally)`;\n this.log(`Installed stack plugin: ${installResult.pluginName} ${installedFrom}\\n`);\n\n this.log(\"Claude Collective initialized successfully!\\n\");\n this.log(`Stack \"${installResult.stackName}\" installed as plugin`);\n\n if (installResult.agents.length > 0) {\n this.log(\"\\nAgents included:\");\n for (const agentName of installResult.agents) {\n this.log(` ${agentName}`);\n }\n this.log(`\\nSkills bundled: ${installResult.skills.length}`);\n }\n this.log(\"\");\n\n if (flags.source) {\n await saveSourceToProjectConfig(projectDir, flags.source);\n this.log(`Source saved to .claude-src/config.yaml`);\n }\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.error(error instanceof Error ? error.message : \"Unknown error\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n private async installLocalMode(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n ): Promise<void> {\n const projectDir = process.cwd();\n const matrix = sourceResult.matrix;\n\n this.log(\"Copying skills to local directory...\");\n try {\n const installResult = await installLocal({\n wizardResult: result,\n sourceResult,\n projectDir,\n sourceFlag: flags.source,\n });\n\n this.log(`Copied ${installResult.copiedSkills.length} skills to .claude/skills/\\n`);\n this.log(\"Generating configuration...\");\n\n if (installResult.wasMerged) {\n this.log(`Merged with existing config at ${installResult.mergedConfigPath}`);\n }\n\n this.log(`Configuration saved (${installResult.config.agents.length} agents)\\n`);\n this.log(\"Compiling agents...\");\n this.log(`Compiled ${installResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(\"Claude Collective initialized successfully!\\n\");\n this.log(\"Skills copied to:\");\n this.log(` ${installResult.skillsDir}`);\n for (const copiedSkill of installResult.copiedSkills) {\n const skill = matrix.skills[copiedSkill.skillId];\n const displayName = skill?.displayName || copiedSkill.skillId;\n this.log(` ${displayName}/`);\n }\n this.log(\"\");\n this.log(\"Agents compiled to:\");\n this.log(` ${installResult.agentsDir}`);\n for (const agentName of installResult.compiledAgents) {\n this.log(` ${agentName}.md`);\n }\n this.log(\"\");\n this.log(\"Configuration:\");\n this.log(` ${installResult.configPath}`);\n this.log(\"\");\n this.log(\"To customize agent-skill assignments:\");\n this.log(` 1. Edit .claude-src/config.yaml`);\n this.log(` 2. Run 'cc compile' to regenerate agents`);\n this.log(\"\");\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.error(error instanceof Error ? error.message : String(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n}\n","import path from \"path\";\nimport { Text, Box } from \"ink\";\nimport React from \"react\";\nimport { fileExists, readFile } from \"../utils/fs\";\nimport { warn } from \"../utils/logger\";\nimport { settingsFileSchema } from \"./schemas\";\n\ntype PermissionConfig = {\n allow?: string[];\n deny?: string[];\n};\n\ntype SettingsFile = {\n permissions?: PermissionConfig;\n};\n\nexport async function checkPermissions(projectRoot: string): Promise<React.ReactElement | null> {\n const settingsPath = path.join(projectRoot, \".claude\", \"settings.json\");\n const localSettingsPath = path.join(projectRoot, \".claude\", \"settings.local.json\");\n\n let permissions: PermissionConfig | undefined;\n\n for (const filePath of [localSettingsPath, settingsPath]) {\n if (await fileExists(filePath)) {\n try {\n const content = await readFile(filePath);\n const raw = JSON.parse(content);\n const result = settingsFileSchema.safeParse(raw);\n const parsed: SettingsFile = result.success ? (result.data as SettingsFile) : {};\n if (parsed.permissions) {\n permissions = parsed.permissions;\n break;\n }\n } catch {\n warn(`Malformed settings file at ${filePath} — skipping`);\n }\n }\n }\n\n if (!permissions) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"yellow\" padding={1}>\n <Text bold color=\"yellow\">\n Permission Notice\n </Text>\n <Text>No permissions configured in .claude/settings.json</Text>\n <Text>Agents will prompt for approval on each tool use.</Text>\n <Text> </Text>\n <Text>For autonomous operation, add to .claude/settings.json:</Text>\n <Text> </Text>\n <Text color=\"dim\">{\"{\"}</Text>\n <Text color=\"dim\">{' \"permissions\": {'}</Text>\n <Text color=\"dim\">{' \"allow\": ['}</Text>\n <Text color=\"dim\">{' \"Read(*)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(git *)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(bun *)\"'}</Text>\n <Text color=\"dim\">{\" ]\"}</Text>\n <Text color=\"dim\">{\" }\"}</Text>\n <Text color=\"dim\">{\"}\"}</Text>\n </Box>\n );\n }\n\n const hasRestrictiveBash = permissions.deny?.some(\n (rule) => rule === \"Bash(*)\" || rule === \"Bash\",\n );\n const hasNoAllows = !permissions.allow || permissions.allow.length === 0;\n\n if (hasRestrictiveBash || hasNoAllows) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"yellow\" padding={1}>\n <Text bold color=\"yellow\">\n Permission Warnings\n </Text>\n {hasRestrictiveBash && (\n <Text>\n ⚠ Bash is denied in permissions. Some agents require Bash for git, testing, and build\n commands.\n </Text>\n )}\n {hasNoAllows && (\n <Text>⚠ No allow rules configured. Agents will prompt for each tool use.</Text>\n )}\n </Box>\n );\n }\n\n return null;\n}\n"],"mappings":"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","names":["path","jsx","result","path"]}
1
+ {"version":3,"sources":["../../src/cli/commands/init.tsx","../../src/cli/lib/permission-checker.tsx"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport { render } from \"ink\";\nimport path from \"path\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport { loadSkillsMatrixFromSource, type SourceLoadResult } from \"../lib/loading/index.js\";\nimport { saveSourceToProjectConfig } from \"../lib/configuration/index.js\";\nimport { installLocal } from \"../lib/installation/index.js\";\nimport { checkPermissions } from \"../lib/permission-checker.js\";\nimport { installStackAsPlugin } from \"../lib/stacks/index.js\";\nimport { getCollectivePluginDir } from \"../lib/plugins/index.js\";\nimport {\n claudePluginInstall,\n claudePluginMarketplaceExists,\n claudePluginMarketplaceAdd,\n} from \"../utils/exec.js\";\nimport { directoryExists } from \"../utils/fs.js\";\nimport { CLAUDE_DIR, LOCAL_SKILLS_PATH } from \"../consts.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\n\nexport default class Init extends BaseCommand {\n static summary = \"Initialize Claude Collective in this project\";\n static description =\n \"Interactive wizard to set up skills and agents. Supports Plugin Mode (native install) and Local Mode (copy to .claude/).\";\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote source\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Init);\n const projectDir = process.cwd();\n\n this.log(\n ` \n █████╗ ██████╗ ███████╗███╗ ██╗████████╗███████╗ ██╗███╗ ██╗ ██████╗\n██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝██╔════╝ ██║████╗ ██║██╔════╝\n███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ███████╗ ██║██╔██╗ ██║██║ \n██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ╚════██║ ██║██║╚██╗██║██║ \n██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ███████║ ██║██║ ╚████║╚██████╗\n╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝\n`,\n );\n\n if (flags[\"dry-run\"]) {\n this.log(\"[dry-run] Preview mode - no files will be created\\n\");\n }\n\n const pluginDir = getCollectivePluginDir();\n const pluginExists = await directoryExists(pluginDir);\n\n if (pluginExists) {\n this.warn(`Claude Collective is already initialized at ${pluginDir}`);\n this.log(`Use 'cc edit' to modify skills.`);\n this.log(\"No changes made.\");\n return;\n }\n\n let sourceResult: SourceLoadResult;\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n } catch (error) {\n this.error(error instanceof Error ? error.message : \"Unknown error occurred\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n let wizardResult: WizardResultV2 | null = null;\n\n const { waitUntilExit } = render(\n <Wizard\n matrix={sourceResult.matrix}\n version={this.config.version}\n projectDir={process.cwd()}\n onComplete={(result) => {\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"Setup cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n const result = wizardResult as WizardResultV2 | null;\n if (!result || result.cancelled) {\n return this.exit(EXIT_CODES.CANCELLED);\n }\n\n if (result.selectedSkills.length === 0) {\n return this.error(\"No skills selected\", { exit: EXIT_CODES.ERROR });\n }\n\n await this.handleInstallation(result, sourceResult, flags);\n }\n\n private async handleInstallation(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { \"dry-run\": boolean; source?: string; refresh: boolean },\n ): Promise<void> {\n const projectDir = process.cwd();\n const dryRun = flags[\"dry-run\"];\n\n this.log(\"\\n\");\n this.log(`Selected ${result.selectedSkills.length} skills`);\n this.log(\n `Install mode: ${result.installMode === \"plugin\" ? \"Plugin (native install)\" : \"Local (copy to .claude/skills/)\"}`,\n );\n\n if (dryRun) {\n if (result.installMode === \"plugin\" && result.selectedStackId) {\n const useMarketplace = !!sourceResult.marketplace;\n if (useMarketplace) {\n this.log(\n `[dry-run] Would install stack \"${result.selectedStackId}\" from marketplace \"${sourceResult.marketplace}\"`,\n );\n this.log(\n `[dry-run] claude plugin install ${result.selectedStackId}@${sourceResult.marketplace} --scope project`,\n );\n } else {\n this.log(\n `[dry-run] Would compile and install stack \"${result.selectedStackId}\" as a native plugin`,\n );\n this.log(\n `[dry-run] claude plugin install ./compiled-stack/${result.selectedStackId} --scope project`,\n );\n this.log(\n `[dry-run] Stack includes ${result.selectedSkills.length} skills and agents bundled together`,\n );\n }\n } else if (result.installMode === \"plugin\" && sourceResult.marketplace) {\n this.log(\n `[dry-run] Would install ${result.selectedSkills.length} skills as individual plugins from \"${sourceResult.marketplace}\"`,\n );\n for (const skillId of result.selectedSkills) {\n this.log(\n `[dry-run] claude plugin install ${skillId}@${sourceResult.marketplace} --scope project`,\n );\n }\n const localAgentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n this.log(`[dry-run] Would compile agents to ${localAgentsDir}`);\n this.log(`[dry-run] Would save config to .claude-src/config.yaml`);\n } else {\n if (result.installMode === \"plugin\") {\n this.log(\n `[dry-run] Plugin Mode requires a marketplace for individual skills — would fall back to Local Mode`,\n );\n }\n const localSkillsDir = path.join(projectDir, LOCAL_SKILLS_PATH);\n const localAgentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n this.log(\n `[dry-run] Would copy ${result.selectedSkills.length} skills to ${localSkillsDir}`,\n );\n this.log(`[dry-run] Would compile agents to ${localAgentsDir}`);\n this.log(`[dry-run] Would save config to .claude-src/config.yaml`);\n }\n this.log(\"\\n[dry-run] Preview complete - no files were created\");\n return;\n }\n\n if (result.installMode === \"plugin\") {\n if (result.selectedStackId) {\n await this.installPluginMode(result, sourceResult, flags);\n } else if (sourceResult.marketplace) {\n await this.installIndividualPlugins(result, sourceResult, flags);\n } else {\n this.warn(\"Plugin Mode requires a marketplace for individual skill installation.\");\n this.log(`Falling back to Local Mode (copying to .claude/skills/)...`);\n this.log(\"To use Plugin Mode, either select a stack or configure a marketplace source.\\n\");\n await this.installLocalMode(result, sourceResult, flags);\n }\n return;\n }\n\n await this.installLocalMode(result, sourceResult, flags);\n }\n\n private async installPluginMode(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n ): Promise<void> {\n if (!result.selectedStackId) {\n throw new Error(\"No stack selected for plugin mode\");\n }\n\n const projectDir = process.cwd();\n\n if (sourceResult.marketplace) {\n const marketplaceExists = await claudePluginMarketplaceExists(sourceResult.marketplace);\n\n if (!marketplaceExists) {\n this.log(`Registering marketplace \"${sourceResult.marketplace}\"...`);\n try {\n await claudePluginMarketplaceAdd(\n sourceResult.sourceConfig.source,\n sourceResult.marketplace,\n );\n this.log(`Registered marketplace: ${sourceResult.marketplace}`);\n } catch (error) {\n this.error(error instanceof Error ? error.message : \"Unknown error\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n }\n\n const installMethod = sourceResult.marketplace\n ? `Installing from marketplace \"${sourceResult.marketplace}\"`\n : \"Compiling and installing\";\n this.log(`${installMethod} stack \"${result.selectedStackId}\"...`);\n\n try {\n const installResult = await installStackAsPlugin({\n stackId: result.selectedStackId,\n projectDir,\n sourcePath: sourceResult.sourcePath,\n agentSourcePath: sourceResult.sourcePath,\n marketplace: sourceResult.marketplace,\n });\n\n const installedFrom = installResult.fromMarketplace\n ? `from marketplace`\n : `(compiled locally)`;\n this.log(`Installed stack plugin: ${installResult.pluginName} ${installedFrom}\\n`);\n\n this.log(\"Claude Collective initialized successfully!\\n\");\n this.log(`Stack \"${installResult.stackName}\" installed as plugin`);\n\n if (installResult.agents.length > 0) {\n this.log(\"\\nAgents included:\");\n for (const agentName of installResult.agents) {\n this.log(` ${agentName}`);\n }\n this.log(`\\nSkills bundled: ${installResult.skills.length}`);\n }\n this.log(\"\");\n\n if (flags.source) {\n await saveSourceToProjectConfig(projectDir, flags.source);\n this.log(`Source saved to .claude-src/config.yaml`);\n }\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.error(error instanceof Error ? error.message : \"Unknown error\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n private async installIndividualPlugins(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n ): Promise<void> {\n const projectDir = process.cwd();\n\n // 1. Register marketplace if needed (same pattern as installPluginMode)\n if (sourceResult.marketplace) {\n const marketplaceExists = await claudePluginMarketplaceExists(sourceResult.marketplace);\n\n if (!marketplaceExists) {\n this.log(`Registering marketplace \"${sourceResult.marketplace}\"...`);\n try {\n await claudePluginMarketplaceAdd(\n sourceResult.sourceConfig.source,\n sourceResult.marketplace,\n );\n this.log(`Registered marketplace: ${sourceResult.marketplace}`);\n } catch (error) {\n this.error(error instanceof Error ? error.message : \"Unknown error\", {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n }\n\n // 2. Install each skill as a native plugin\n this.log(\"Installing skill plugins...\");\n for (const skillId of result.selectedSkills) {\n const pluginRef = `${skillId}@${sourceResult.marketplace}`;\n try {\n await claudePluginInstall(pluginRef, \"project\", projectDir);\n this.log(` Installed ${pluginRef}`);\n } catch (error) {\n this.error(\n `Failed to install plugin ${pluginRef}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n { exit: EXIT_CODES.ERROR },\n );\n }\n }\n\n this.log(`Installed ${result.selectedSkills.length} skill plugins\\n`);\n\n // 3. Run local installation for config generation + agent compilation\n // Skills are also copied to .claude/skills/ as a local reference for the compiler\n await this.installLocalMode(result, sourceResult, flags);\n }\n\n private async installLocalMode(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n ): Promise<void> {\n const projectDir = process.cwd();\n const matrix = sourceResult.matrix;\n\n this.log(\"Copying skills to local directory...\");\n try {\n const installResult = await installLocal({\n wizardResult: result,\n sourceResult,\n projectDir,\n sourceFlag: flags.source,\n });\n\n this.log(`Copied ${installResult.copiedSkills.length} skills to .claude/skills/\\n`);\n this.log(\"Generating configuration...\");\n\n if (installResult.wasMerged) {\n this.log(`Merged with existing config at ${installResult.mergedConfigPath}`);\n }\n\n this.log(`Configuration saved (${installResult.config.agents.length} agents)\\n`);\n this.log(\"Compiling agents...\");\n this.log(`Compiled ${installResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(\"Claude Collective initialized successfully!\\n\");\n this.log(\"Skills copied to:\");\n this.log(` ${installResult.skillsDir}`);\n for (const copiedSkill of installResult.copiedSkills) {\n const skill = matrix.skills[copiedSkill.skillId];\n const displayName = skill?.displayName || copiedSkill.skillId;\n this.log(` ${displayName}/`);\n }\n this.log(\"\");\n this.log(\"Agents compiled to:\");\n this.log(` ${installResult.agentsDir}`);\n for (const agentName of installResult.compiledAgents) {\n this.log(` ${agentName}.md`);\n }\n this.log(\"\");\n this.log(\"Configuration:\");\n this.log(` ${installResult.configPath}`);\n this.log(\"\");\n this.log(\"To customize agent-skill assignments:\");\n this.log(` 1. Edit .claude-src/config.yaml`);\n this.log(` 2. Run 'cc compile' to regenerate agents`);\n this.log(\"\");\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.error(error instanceof Error ? error.message : String(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n}\n","import path from \"path\";\nimport { Text, Box } from \"ink\";\nimport React from \"react\";\nimport { fileExists, readFile } from \"../utils/fs\";\nimport { warn } from \"../utils/logger\";\nimport { settingsFileSchema } from \"./schemas\";\n\ntype PermissionConfig = {\n allow?: string[];\n deny?: string[];\n};\n\ntype SettingsFile = {\n permissions?: PermissionConfig;\n};\n\nexport async function checkPermissions(projectRoot: string): Promise<React.ReactElement | null> {\n const settingsPath = path.join(projectRoot, \".claude\", \"settings.json\");\n const localSettingsPath = path.join(projectRoot, \".claude\", \"settings.local.json\");\n\n let permissions: PermissionConfig | undefined;\n\n for (const filePath of [localSettingsPath, settingsPath]) {\n if (await fileExists(filePath)) {\n try {\n const content = await readFile(filePath);\n const raw = JSON.parse(content);\n const result = settingsFileSchema.safeParse(raw);\n const parsed: SettingsFile = result.success ? (result.data as SettingsFile) : {};\n if (parsed.permissions) {\n permissions = parsed.permissions;\n break;\n }\n } catch {\n warn(`Malformed settings file at ${filePath} — skipping`);\n }\n }\n }\n\n if (!permissions) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"yellow\" padding={1}>\n <Text bold color=\"yellow\">\n Permission Notice\n </Text>\n <Text>No permissions configured in .claude/settings.json</Text>\n <Text>Agents will prompt for approval on each tool use.</Text>\n <Text> </Text>\n <Text>For autonomous operation, add to .claude/settings.json:</Text>\n <Text> </Text>\n <Text color=\"dim\">{\"{\"}</Text>\n <Text color=\"dim\">{' \"permissions\": {'}</Text>\n <Text color=\"dim\">{' \"allow\": ['}</Text>\n <Text color=\"dim\">{' \"Read(*)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(git *)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(bun *)\"'}</Text>\n <Text color=\"dim\">{\" ]\"}</Text>\n <Text color=\"dim\">{\" }\"}</Text>\n <Text color=\"dim\">{\"}\"}</Text>\n </Box>\n );\n }\n\n const hasRestrictiveBash = permissions.deny?.some(\n (rule) => rule === \"Bash(*)\" || rule === \"Bash\",\n );\n const hasNoAllows = !permissions.allow || permissions.allow.length === 0;\n\n if (hasRestrictiveBash || hasNoAllows) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"yellow\" padding={1}>\n <Text bold color=\"yellow\">\n Permission Warnings\n </Text>\n {hasRestrictiveBash && (\n <Text>\n ⚠ Bash is denied in permissions. Some agents require Bash for git, testing, and build\n commands.\n </Text>\n )}\n {hasNoAllows && (\n <Text>⚠ No allow rules configured. Agents will prompt for each tool use.</Text>\n )}\n </Box>\n );\n }\n\n return null;\n}\n"],"mappings":"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","names":["path","jsx","result","path"]}
@@ -5,8 +5,8 @@ import {
5
5
  import {
6
6
  formatInstallationDisplay,
7
7
  getInstallationInfo
8
- } from "../chunk-YDBSSAJ6.js";
9
- import "../chunk-ZDREFYD2.js";
8
+ } from "../chunk-CQ7657GA.js";
9
+ import "../chunk-324DM2L6.js";
10
10
  import "../chunk-HWD32NP7.js";
11
11
  import "../chunk-O6ZTD7ZI.js";
12
12
  import {
@@ -7,11 +7,11 @@ import {
7
7
  fetchFromSource,
8
8
  isClaudeCLIAvailable,
9
9
  resolveSource
10
- } from "../../chunk-YDBSSAJ6.js";
10
+ } from "../../chunk-CQ7657GA.js";
11
11
  import {
12
12
  fileExists,
13
13
  readFile
14
- } from "../../chunk-ZDREFYD2.js";
14
+ } from "../../chunk-324DM2L6.js";
15
15
  import "../../chunk-HWD32NP7.js";
16
16
  import {
17
17
  CLAUDE_DIR
@@ -5,11 +5,11 @@ import {
5
5
  } from "../../chunk-OBXAY23Y.js";
6
6
  import {
7
7
  resolveAuthor
8
- } from "../../chunk-YDBSSAJ6.js";
8
+ } from "../../chunk-CQ7657GA.js";
9
9
  import {
10
10
  directoryExists,
11
11
  writeFile
12
- } from "../../chunk-ZDREFYD2.js";
12
+ } from "../../chunk-324DM2L6.js";
13
13
  import "../../chunk-HWD32NP7.js";
14
14
  import {
15
15
  LOCAL_SKILLS_PATH
@@ -6,10 +6,10 @@ import {
6
6
  import {
7
7
  compareSkills,
8
8
  loadSkillsMatrixFromSource
9
- } from "../chunk-YDBSSAJ6.js";
9
+ } from "../chunk-CQ7657GA.js";
10
10
  import {
11
11
  fileExists
12
- } from "../chunk-ZDREFYD2.js";
12
+ } from "../chunk-324DM2L6.js";
13
13
  import "../chunk-HWD32NP7.js";
14
14
  import {
15
15
  LOCAL_SKILLS_PATH
@@ -11,13 +11,13 @@ import {
11
11
  fetchFromSource,
12
12
  loadSkillsMatrixFromSource,
13
13
  resolveAllSources
14
- } from "../chunk-YDBSSAJ6.js";
14
+ } from "../chunk-CQ7657GA.js";
15
15
  import {
16
16
  copy,
17
17
  ensureDir,
18
18
  fileExists,
19
19
  listDirectories
20
- } from "../chunk-ZDREFYD2.js";
20
+ } from "../chunk-324DM2L6.js";
21
21
  import "../chunk-HWD32NP7.js";
22
22
  import {
23
23
  LOCAL_SKILLS_PATH
@@ -10,12 +10,12 @@ import {
10
10
  claudePluginUninstall,
11
11
  getCollectivePluginDir,
12
12
  isClaudeCLIAvailable
13
- } from "../chunk-YDBSSAJ6.js";
13
+ } from "../chunk-CQ7657GA.js";
14
14
  import {
15
15
  directoryExists,
16
16
  fileExists,
17
17
  remove
18
- } from "../chunk-ZDREFYD2.js";
18
+ } from "../chunk-324DM2L6.js";
19
19
  import "../chunk-HWD32NP7.js";
20
20
  import {
21
21
  CLAUDE_DIR,
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-IXBCRT3F.js";
5
5
  import {
6
6
  recompileAgents
7
- } from "../chunk-NRC7XYCI.js";
7
+ } from "../chunk-NT4K647L.js";
8
8
  import {
9
9
  BaseCommand,
10
10
  EXIT_CODES
@@ -14,11 +14,11 @@ import {
14
14
  getCollectivePluginDir,
15
15
  injectForkedFromMetadata,
16
16
  loadSkillsMatrixFromSource
17
- } from "../chunk-YDBSSAJ6.js";
17
+ } from "../chunk-CQ7657GA.js";
18
18
  import {
19
19
  copy,
20
20
  fileExists
21
- } from "../chunk-ZDREFYD2.js";
21
+ } from "../chunk-324DM2L6.js";
22
22
  import "../chunk-HWD32NP7.js";
23
23
  import {
24
24
  LOCAL_SKILLS_PATH
@@ -8,7 +8,7 @@ import {
8
8
  printPluginValidationResult,
9
9
  validateAllPlugins,
10
10
  validatePlugin
11
- } from "../chunk-YDBSSAJ6.js";
11
+ } from "../chunk-CQ7657GA.js";
12
12
  import {
13
13
  agentYamlGenerationSchema,
14
14
  fileExists,
@@ -17,7 +17,7 @@ import {
17
17
  skillFrontmatterValidationSchema,
18
18
  skillsMatrixConfigSchema,
19
19
  stackConfigValidationSchema
20
- } from "../chunk-ZDREFYD2.js";
20
+ } from "../chunk-324DM2L6.js";
21
21
  import "../chunk-HWD32NP7.js";
22
22
  import "../chunk-O6ZTD7ZI.js";
23
23
  import {
@@ -6,11 +6,11 @@ import {
6
6
  import {
7
7
  bumpPluginVersion,
8
8
  findPluginManifest
9
- } from "../../chunk-YDBSSAJ6.js";
9
+ } from "../../chunk-CQ7657GA.js";
10
10
  import {
11
11
  pluginManifestSchema,
12
12
  readFile
13
- } from "../../chunk-ZDREFYD2.js";
13
+ } from "../../chunk-324DM2L6.js";
14
14
  import "../../chunk-HWD32NP7.js";
15
15
  import {
16
16
  PLUGIN_MANIFEST_DIR,
@@ -6,8 +6,8 @@ import {
6
6
  import {
7
7
  findPluginManifest,
8
8
  getPluginVersion
9
- } from "../../chunk-YDBSSAJ6.js";
10
- import "../../chunk-ZDREFYD2.js";
9
+ } from "../../chunk-CQ7657GA.js";
10
+ import "../../chunk-324DM2L6.js";
11
11
  import "../../chunk-HWD32NP7.js";
12
12
  import {
13
13
  PLUGIN_MANIFEST_DIR,
@@ -5,12 +5,12 @@ import {
5
5
  } from "../../chunk-OBXAY23Y.js";
6
6
  import {
7
7
  findPluginManifest
8
- } from "../../chunk-YDBSSAJ6.js";
8
+ } from "../../chunk-CQ7657GA.js";
9
9
  import {
10
10
  pluginManifestSchema,
11
11
  readFile,
12
12
  writeFile
13
- } from "../../chunk-ZDREFYD2.js";
13
+ } from "../../chunk-324DM2L6.js";
14
14
  import "../../chunk-HWD32NP7.js";
15
15
  import {
16
16
  PLUGIN_MANIFEST_DIR,
@@ -6,8 +6,8 @@ import {
6
6
  import {
7
7
  findPluginManifest,
8
8
  getPluginVersion
9
- } from "../../chunk-YDBSSAJ6.js";
10
- import "../../chunk-ZDREFYD2.js";
9
+ } from "../../chunk-CQ7657GA.js";
10
+ import "../../chunk-324DM2L6.js";
11
11
  import "../../chunk-HWD32NP7.js";
12
12
  import {
13
13
  PLUGIN_MANIFEST_DIR,