@agents-inc/cli 0.74.1 → 0.74.3

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 (86) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{chunk-JWZLVWTX.js → chunk-23OJO4JS.js} +4 -4
  3. package/dist/{chunk-NTVY4G35.js → chunk-2NWQS7N4.js} +2 -2
  4. package/dist/{chunk-KTF5RKKP.js → chunk-ALCUVCY5.js} +3 -3
  5. package/dist/{chunk-QJUPZPXO.js → chunk-AV5KJHP2.js} +2 -2
  6. package/dist/{chunk-WQRFVEAA.js → chunk-DUF4UVJB.js} +2 -2
  7. package/dist/{chunk-ANUYSHQA.js → chunk-GJLM53PH.js} +2 -2
  8. package/dist/{chunk-ZCJ4YYWL.js → chunk-N2HO5IT2.js} +6 -4
  9. package/dist/chunk-N2HO5IT2.js.map +1 -0
  10. package/dist/{chunk-B7KVPY3Z.js → chunk-OLS55LVJ.js} +2 -2
  11. package/dist/{chunk-VOYGRNLS.js → chunk-SFZQL6DJ.js} +2 -2
  12. package/dist/{chunk-UFAP6GHD.js → chunk-TUILIOBW.js} +9 -9
  13. package/dist/{chunk-XP7BXHFG.js → chunk-UVNIFNIN.js} +2 -2
  14. package/dist/{chunk-ZO7C5WMJ.js → chunk-XYXDEODG.js} +3 -3
  15. package/dist/{chunk-ZLMKEYDF.js → chunk-ZD3U734W.js} +44 -23
  16. package/dist/chunk-ZD3U734W.js.map +1 -0
  17. package/dist/{chunk-J6SHWAS6.js → chunk-ZNXK2J6R.js} +14 -6
  18. package/dist/chunk-ZNXK2J6R.js.map +1 -0
  19. package/dist/{chunk-J5T7M2CS.js → chunk-ZWYCZ7BN.js} +2 -2
  20. package/dist/commands/build/plugins.js +2 -2
  21. package/dist/commands/build/stack.js +2 -2
  22. package/dist/commands/compile.js +2 -2
  23. package/dist/commands/config/index.js +2 -2
  24. package/dist/commands/config/path.js +1 -1
  25. package/dist/commands/config/show.js +2 -2
  26. package/dist/commands/diff.js +1 -1
  27. package/dist/commands/doctor.js +1 -1
  28. package/dist/commands/edit.js +15 -13
  29. package/dist/commands/edit.js.map +1 -1
  30. package/dist/commands/eject.js +1 -1
  31. package/dist/commands/import/skill.js +1 -1
  32. package/dist/commands/info.js +1 -1
  33. package/dist/commands/init.js +12 -12
  34. package/dist/commands/list.js +1 -1
  35. package/dist/commands/new/agent.js +2 -2
  36. package/dist/commands/new/marketplace.js +2 -2
  37. package/dist/commands/new/skill.js +2 -2
  38. package/dist/commands/outdated.js +1 -1
  39. package/dist/commands/search.js +1 -1
  40. package/dist/commands/uninstall.js +17 -8
  41. package/dist/commands/uninstall.js.map +1 -1
  42. package/dist/commands/update.js +2 -2
  43. package/dist/commands/validate.js +4 -2
  44. package/dist/commands/validate.js.map +1 -1
  45. package/dist/components/wizard/category-grid.test.js +2 -2
  46. package/dist/components/wizard/domain-selection.js +3 -3
  47. package/dist/components/wizard/source-grid.test.js +2 -2
  48. package/dist/components/wizard/stack-selection.js +3 -3
  49. package/dist/components/wizard/step-agents.js +3 -3
  50. package/dist/components/wizard/step-agents.test.js +3 -3
  51. package/dist/components/wizard/step-build.js +3 -3
  52. package/dist/components/wizard/step-build.test.js +3 -3
  53. package/dist/components/wizard/step-confirm.test.js +2 -2
  54. package/dist/components/wizard/step-settings.js +2 -2
  55. package/dist/components/wizard/step-settings.test.js +5 -5
  56. package/dist/components/wizard/step-sources.js +3 -3
  57. package/dist/components/wizard/step-sources.test.js +3 -3
  58. package/dist/components/wizard/step-stack.js +5 -5
  59. package/dist/components/wizard/step-stack.test.js +5 -5
  60. package/dist/components/wizard/wizard-layout.js +3 -3
  61. package/dist/components/wizard/wizard.js +11 -11
  62. package/dist/hooks/init.js +12 -12
  63. package/dist/{source-loader-RTG42MWG.js → source-loader-VTNIFSL6.js} +2 -2
  64. package/dist/{source-manager-NCOFHYHD.js → source-manager-FWAJVMYS.js} +2 -2
  65. package/dist/stores/wizard-store.js +2 -2
  66. package/dist/stores/wizard-store.test.js +2 -2
  67. package/package.json +1 -1
  68. package/dist/chunk-J6SHWAS6.js.map +0 -1
  69. package/dist/chunk-ZCJ4YYWL.js.map +0 -1
  70. package/dist/chunk-ZLMKEYDF.js.map +0 -1
  71. package/dist/plugins/dummy-skill/.claude-plugin/.content-hash +0 -1
  72. package/dist/plugins/dummy-skill/.claude-plugin/plugin.json +0 -13
  73. /package/dist/{chunk-JWZLVWTX.js.map → chunk-23OJO4JS.js.map} +0 -0
  74. /package/dist/{chunk-NTVY4G35.js.map → chunk-2NWQS7N4.js.map} +0 -0
  75. /package/dist/{chunk-KTF5RKKP.js.map → chunk-ALCUVCY5.js.map} +0 -0
  76. /package/dist/{chunk-QJUPZPXO.js.map → chunk-AV5KJHP2.js.map} +0 -0
  77. /package/dist/{chunk-WQRFVEAA.js.map → chunk-DUF4UVJB.js.map} +0 -0
  78. /package/dist/{chunk-ANUYSHQA.js.map → chunk-GJLM53PH.js.map} +0 -0
  79. /package/dist/{chunk-B7KVPY3Z.js.map → chunk-OLS55LVJ.js.map} +0 -0
  80. /package/dist/{chunk-VOYGRNLS.js.map → chunk-SFZQL6DJ.js.map} +0 -0
  81. /package/dist/{chunk-UFAP6GHD.js.map → chunk-TUILIOBW.js.map} +0 -0
  82. /package/dist/{chunk-XP7BXHFG.js.map → chunk-UVNIFNIN.js.map} +0 -0
  83. /package/dist/{chunk-ZO7C5WMJ.js.map → chunk-XYXDEODG.js.map} +0 -0
  84. /package/dist/{chunk-J5T7M2CS.js.map → chunk-ZWYCZ7BN.js.map} +0 -0
  85. /package/dist/{source-loader-RTG42MWG.js.map → source-loader-VTNIFSL6.js.map} +0 -0
  86. /package/dist/{source-manager-NCOFHYHD.js.map → source-manager-FWAJVMYS.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,30 @@ Each release has detailed notes in its own file under [`changelogs/`](./changelo
7
7
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## [0.74.3] - 2026-03-13
11
+
12
+ **Verbose slug warnings, init symlink fix, E2E test hygiene**
13
+
14
+ - Fix verbose logging in validate command and init symlink path comparison
15
+ - Demote unresolved slug warnings to verbose level
16
+ - Fix E2E fixtures with required metadata fields and valid SkillIds
17
+
18
+ See [changelogs/0.74.3.md](./changelogs/0.74.3.md) for full details.
19
+
20
+ ---
21
+
22
+ ## [0.74.2] - 2026-03-13
23
+
24
+ **Plugin scope routing, uninstall filtering, and config splitting**
25
+
26
+ - Uninstall only removes CLI-installed plugins, preserving third-party plugins
27
+ - Plugin install/uninstall uses correct cwd for scope routing
28
+ - Agent recompiler and config generator correctly split by scope
29
+
30
+ See [changelogs/0.74.2.md](./changelogs/0.74.2.md) for full details.
31
+
32
+ ---
33
+
10
34
  ## [0.74.1] - 2026-03-13
11
35
 
12
36
  **Plugin install and uninstall scope fixes**
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StackSelection
4
- } from "./chunk-VOYGRNLS.js";
4
+ } from "./chunk-SFZQL6DJ.js";
5
5
  import {
6
6
  useMeasuredHeight
7
7
  } from "./chunk-K77I4XGL.js";
8
8
  import {
9
9
  DomainSelection
10
- } from "./chunk-ANUYSHQA.js";
10
+ } from "./chunk-GJLM53PH.js";
11
11
  import {
12
12
  ViewTitle
13
13
  } from "./chunk-AQYAVLZK.js";
14
14
  import {
15
15
  useWizardStore
16
- } from "./chunk-B7KVPY3Z.js";
16
+ } from "./chunk-OLS55LVJ.js";
17
17
  import {
18
18
  init_esm_shims
19
19
  } from "./chunk-DHET7RCE.js";
@@ -37,4 +37,4 @@ var StepStack = ({ onCancel }) => {
37
37
  export {
38
38
  StepStack
39
39
  };
40
- //# sourceMappingURL=chunk-JWZLVWTX.js.map
40
+ //# sourceMappingURL=chunk-23OJO4JS.js.map
@@ -7,7 +7,7 @@ import {
7
7
  loadProjectSourceConfig,
8
8
  resolveAgentsSource,
9
9
  resolveSource
10
- } from "./chunk-ZLMKEYDF.js";
10
+ } from "./chunk-ZD3U734W.js";
11
11
  import {
12
12
  BaseCommand
13
13
  } from "./chunk-IJLAVOKZ.js";
@@ -90,4 +90,4 @@ ${DEFAULT_BRANDING.NAME} Configuration
90
90
  export {
91
91
  ConfigShow
92
92
  };
93
- //# sourceMappingURL=chunk-NTVY4G35.js.map
93
+ //# sourceMappingURL=chunk-2NWQS7N4.js.map
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-AQYAVLZK.js";
17
17
  import {
18
18
  useWizardStore
19
- } from "./chunk-B7KVPY3Z.js";
19
+ } from "./chunk-OLS55LVJ.js";
20
20
  import {
21
21
  HOTKEY_SET_ALL_LOCAL,
22
22
  HOTKEY_SET_ALL_PLUGIN,
@@ -27,7 +27,7 @@ import {
27
27
  import {
28
28
  resolveAllSources,
29
29
  searchExtraSources
30
- } from "./chunk-ZLMKEYDF.js";
30
+ } from "./chunk-ZD3U734W.js";
31
31
  import {
32
32
  CLI_COLORS,
33
33
  DEFAULT_BRANDING
@@ -181,4 +181,4 @@ var StepSources = ({ projectDir, onContinue, onBack }) => {
181
181
  export {
182
182
  StepSources
183
183
  };
184
- //# sourceMappingURL=chunk-KTF5RKKP.js.map
184
+ //# sourceMappingURL=chunk-ALCUVCY5.js.map
@@ -7,7 +7,7 @@ import {
7
7
  loadConfigTypesDataInBackground,
8
8
  regenerateConfigTypes,
9
9
  resolveAuthor
10
- } from "./chunk-ZLMKEYDF.js";
10
+ } from "./chunk-ZD3U734W.js";
11
11
  import {
12
12
  BaseCommand,
13
13
  EXIT_CODES
@@ -339,4 +339,4 @@ export {
339
339
  generateSkillRulesTs,
340
340
  NewSkill
341
341
  };
342
- //# sourceMappingURL=chunk-QJUPZPXO.js.map
342
+ //# sourceMappingURL=chunk-AV5KJHP2.js.map
@@ -27,7 +27,7 @@ import {
27
27
  addSource,
28
28
  getSourceSummary,
29
29
  removeSource
30
- } from "./chunk-ZLMKEYDF.js";
30
+ } from "./chunk-ZD3U734W.js";
31
31
  import {
32
32
  getErrorMessage,
33
33
  verbose
@@ -270,4 +270,4 @@ var StepSettings = ({
270
270
  export {
271
271
  StepSettings
272
272
  };
273
- //# sourceMappingURL=chunk-WQRFVEAA.js.map
273
+ //# sourceMappingURL=chunk-DUF4UVJB.js.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-OV5UJWS5.js";
9
9
  import {
10
10
  useWizardStore
11
- } from "./chunk-B7KVPY3Z.js";
11
+ } from "./chunk-OLS55LVJ.js";
12
12
  import {
13
13
  typedEntries
14
14
  } from "./chunk-EMX7PA2I.js";
@@ -65,4 +65,4 @@ var DomainSelection = () => {
65
65
  export {
66
66
  DomainSelection
67
67
  };
68
- //# sourceMappingURL=chunk-ANUYSHQA.js.map
68
+ //# sourceMappingURL=chunk-GJLM53PH.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Wizard
4
- } from "./chunk-UFAP6GHD.js";
4
+ } from "./chunk-TUILIOBW.js";
5
5
  import {
6
6
  SelectList
7
7
  } from "./chunk-WF5PMBIR.js";
@@ -30,7 +30,7 @@ import {
30
30
  installPluginConfig,
31
31
  loadProjectConfig,
32
32
  loadSkillsMatrixFromSource
33
- } from "./chunk-ZLMKEYDF.js";
33
+ } from "./chunk-ZD3U734W.js";
34
34
  import {
35
35
  getSkillById
36
36
  } from "./chunk-E74Q7GUE.js";
@@ -67,6 +67,7 @@ import {
67
67
  init_esm_shims();
68
68
  import { Flags } from "@oclif/core";
69
69
  import { render, Box as Box2, Text as Text2, useApp } from "ink";
70
+ import fs from "fs";
70
71
  import os from "os";
71
72
  import path2 from "path";
72
73
 
@@ -353,7 +354,8 @@ var Init = class _Init extends BaseCommand {
353
354
  }
354
355
  }
355
356
  }
356
- if (projectDir !== GLOBAL_INSTALL_ROOT) {
357
+ const isGlobalRoot = fs.realpathSync(projectDir) === fs.realpathSync(GLOBAL_INSTALL_ROOT);
358
+ if (!isGlobalRoot) {
357
359
  const created = await ensureBlankGlobalConfig();
358
360
  if (created) {
359
361
  this.log("Created blank global config at ~/" + CLAUDE_SRC_DIR);
@@ -560,4 +562,4 @@ export {
560
562
  showDashboard,
561
563
  Init
562
564
  };
563
- //# sourceMappingURL=chunk-ZCJ4YYWL.js.map
565
+ //# sourceMappingURL=chunk-N2HO5IT2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/init.tsx","../src/cli/lib/permission-checker.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { Flags } from \"@oclif/core\";\nimport { render, Box, Text, useApp } from \"ink\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport {\n loadSkillsMatrixFromSource,\n getMarketplaceLabel,\n fetchMarketplace,\n type SourceLoadResult,\n} from \"../lib/loading/index.js\";\nimport {\n installLocal,\n installPluginConfig,\n detectGlobalInstallation,\n detectProjectInstallation,\n deriveInstallMode,\n} from \"../lib/installation/index.js\";\nimport { checkPermissions } from \"../lib/permission-checker.js\";\nimport { getInstallationInfo } from \"../lib/plugins/plugin-info.js\";\nimport { hasIndividualPlugins } from \"../lib/plugins/index.js\";\nimport {\n claudePluginInstall,\n claudePluginMarketplaceExists,\n claudePluginMarketplaceAdd,\n} from \"../utils/exec.js\";\nimport {\n ASCII_LOGO,\n CLAUDE_SRC_DIR,\n CLI_BIN_NAME,\n DEFAULT_BRANDING,\n GLOBAL_INSTALL_ROOT,\n} from \"../consts.js\";\nimport { SelectList, type SelectListItem } from \"../components/common/select-list.js\";\nimport {\n KEY_LABEL_ARROWS_VERT,\n KEY_LABEL_ENTER,\n KEY_LABEL_ESC,\n} from \"../components/wizard/hotkeys.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { getSkillById } from \"../lib/matrix/matrix-provider\";\nimport { loadProjectConfig } from \"../lib/configuration/project-config.js\";\nimport {\n enableBuffering,\n drainBuffer,\n disableBuffering,\n type StartupMessage,\n} from \"../utils/logger.js\";\nimport { SUCCESS_MESSAGES, STATUS_MESSAGES } from \"../utils/messages.js\";\nimport { ensureBlankGlobalConfig } from \"../lib/configuration/config-writer.js\";\n\n/** Clears the visible terminal area so the next render starts clean. */\nfunction clearTerminalOutput(): void {\n process.stdout.write(\"\\x1b[2J\\x1b[H\");\n}\n\nconst DASHBOARD_OPTIONS: SelectListItem<string>[] = [\n { label: \"Edit\", value: \"edit\" },\n { label: \"Compile\", value: \"compile\" },\n { label: \"Doctor\", value: \"doctor\" },\n { label: \"List\", value: \"list\" },\n];\n\ntype DashboardProps = {\n onSelect: (command: string) => void;\n onCancel: () => void;\n};\n\nconst Dashboard: React.FC<DashboardProps> = ({ onSelect, onCancel }) => {\n const { exit } = useApp();\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>{DEFAULT_BRANDING.NAME}</Text>\n <Text> </Text>\n <SelectList\n items={DASHBOARD_OPTIONS}\n onSelect={(command) => {\n onSelect(command);\n exit();\n }}\n onCancel={() => {\n onCancel();\n exit();\n }}\n />\n <Text> </Text>\n <Text dimColor>\n {\" \"}\n {KEY_LABEL_ARROWS_VERT} Navigate {\" \"}\n {KEY_LABEL_ENTER} Confirm {\" \"}\n {KEY_LABEL_ESC} Exit\n </Text>\n </Box>\n );\n};\n\ntype GlobalConfigChoice = \"edit-global\" | \"create-project\";\n\nconst GLOBAL_CONFIG_OPTIONS: SelectListItem<GlobalConfigChoice>[] = [\n { label: \"Edit global installation\", value: \"edit-global\" },\n { label: \"Create new project installation\", value: \"create-project\" },\n];\n\ntype GlobalConfigPromptProps = {\n globalConfigDir: string;\n onSelect: (choice: GlobalConfigChoice) => void;\n onCancel: () => void;\n};\n\nconst GlobalConfigPrompt: React.FC<GlobalConfigPromptProps> = ({\n globalConfigDir,\n onSelect,\n onCancel,\n}) => {\n const { exit } = useApp();\n\n return (\n <Box flexDirection=\"column\">\n <Text>A global installation was found at {globalConfigDir}</Text>\n <Text> </Text>\n <SelectList\n items={GLOBAL_CONFIG_OPTIONS}\n onSelect={(choice) => {\n onSelect(choice);\n exit();\n }}\n onCancel={() => {\n onCancel();\n exit();\n }}\n />\n <Text> </Text>\n <Text dimColor>\n {\" \"}\n {KEY_LABEL_ARROWS_VERT} Navigate {\" \"}\n {KEY_LABEL_ENTER} Confirm {\" \"}\n {KEY_LABEL_ESC} Exit\n </Text>\n </Box>\n );\n};\n\nexport type DashboardData = {\n skillCount: number;\n agentCount: number;\n mode: string;\n source?: string;\n};\n\n/** Gathers dashboard data from the installation and project config. */\nexport async function getDashboardData(projectDir: string): Promise<DashboardData> {\n const [info, loaded] = await Promise.all([getInstallationInfo(), loadProjectConfig(projectDir)]);\n\n // Skill count from config (canonical source of truth for installed skills)\n const skillCount = loaded?.config?.skills?.length ?? 0;\n // Agent count from filesystem (compiled .md files in agents dir)\n const agentCount = info?.agentCount ?? 0;\n const mode =\n info?.mode ?? (loaded?.config?.skills ? deriveInstallMode(loaded.config.skills) : \"local\");\n const source = loaded?.config?.source;\n\n return { skillCount, agentCount, mode, source };\n}\n\n/** Formats the dashboard summary as plain text lines (for non-interactive/test output). */\nexport function formatDashboardText(data: DashboardData): string {\n const modeLabel = data.mode === \"plugin\" ? \"Plugin\" : \"Local\";\n const lines = [\n DEFAULT_BRANDING.NAME,\n \"\",\n ` Skills: ${data.skillCount} installed`,\n ` Agents: ${data.agentCount} compiled`,\n ` Mode: ${modeLabel}`,\n ];\n if (data.source) {\n lines.push(` Source: ${data.source}`);\n }\n lines.push(\"\");\n lines.push(` [Edit] [Compile] [Doctor] [List]`);\n return lines.join(\"\\n\");\n}\n\n/**\n * Shows the project dashboard and returns the selected command (or null if cancelled).\n * In non-interactive environments (no TTY), prints the summary text and returns null.\n */\nexport async function showDashboard(\n projectDir: string,\n log?: (message: string) => void,\n): Promise<string | null> {\n const data = await getDashboardData(projectDir);\n\n // Non-interactive: print text summary and exit (CI, piped, tests)\n if (!process.stdin.isTTY) {\n const output = log ?? console.log;\n output(formatDashboardText(data));\n return null;\n }\n\n let selectedCommand: string | null = null;\n\n const { waitUntilExit } = render(\n <Dashboard\n onSelect={(command) => {\n selectedCommand = command;\n }}\n onCancel={() => {\n selectedCommand = null;\n }}\n />,\n );\n\n await waitUntilExit();\n clearTerminalOutput();\n\n return selectedCommand;\n}\n\nexport default class Init extends BaseCommand {\n static summary = `Initialize ${DEFAULT_BRANDING.NAME} 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 examples = [\n {\n description: \"Start the setup wizard\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Initialize from a custom marketplace\",\n command: \"<%= config.bin %> <%= command.id %> --source github:org/marketplace\",\n },\n {\n description: \"Force refresh skills from remote\",\n command: \"<%= config.bin %> <%= command.id %> --refresh\",\n },\n ];\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 // For \"already initialized\" check, only look at the target directory (no global fallback)\n const individualPluginsExist = await hasIndividualPlugins(projectDir);\n const existingInstallation = await detectProjectInstallation(projectDir);\n\n if (individualPluginsExist || existingInstallation) {\n const selectedCommand = await showDashboard(projectDir, (msg) => this.log(msg));\n if (selectedCommand) {\n await this.config.runCommand(selectedCommand);\n }\n return;\n }\n\n // No project config exists: check if a global installation exists\n const globalInstallation = await detectGlobalInstallation();\n if (globalInstallation) {\n const globalConfigDir = path.join(os.homedir(), CLAUDE_SRC_DIR);\n\n // Non-interactive: skip prompt and fall through to wizard\n if (process.stdin.isTTY) {\n let globalChoice: GlobalConfigChoice | null = null;\n\n const { waitUntilExit: waitForPrompt } = render(\n <GlobalConfigPrompt\n globalConfigDir={globalConfigDir}\n onSelect={(choice) => {\n globalChoice = choice;\n }}\n onCancel={() => {\n globalChoice = null;\n }}\n />,\n );\n\n await waitForPrompt();\n clearTerminalOutput();\n\n if (globalChoice === \"edit-global\") {\n const editArgs: string[] = [];\n if (flags.source) {\n editArgs.push(\"--source\", flags.source);\n }\n if (flags.refresh) {\n editArgs.push(\"--refresh\");\n }\n await this.config.runCommand(\"edit\", editArgs);\n return;\n }\n\n // User cancelled (Esc)\n if (globalChoice === null) {\n return;\n }\n\n // \"create-project\" falls through to wizard below\n }\n }\n\n // Auto-create blank global config on first init from a project directory.\n // This ensures the project config can always import from global.\n // Resolve both paths through realpathSync — on macOS /var is a symlink to\n // /private/var, so os.homedir() and process.cwd() can return different\n // prefixes for the same directory.\n const isGlobalRoot = fs.realpathSync(projectDir) === fs.realpathSync(GLOBAL_INSTALL_ROOT);\n if (!isGlobalRoot) {\n const created = await ensureBlankGlobalConfig();\n if (created) {\n this.log(\"Created blank global config at ~/\" + CLAUDE_SRC_DIR);\n }\n }\n\n enableBuffering();\n\n let sourceResult: SourceLoadResult;\n let startupMessages: StartupMessage[] = [];\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n } catch (error) {\n disableBuffering();\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n startupMessages = drainBuffer();\n disableBuffering();\n\n let wizardResult: WizardResultV2 | null = null;\n\n const marketplaceLabel = getMarketplaceLabel(sourceResult);\n const { waitUntilExit } = render(\n <Wizard\n version={this.config.version}\n marketplaceLabel={marketplaceLabel}\n logo={ASCII_LOGO}\n projectDir={projectDir}\n startupMessages={startupMessages}\n onComplete={(result) => {\n wizardResult = result;\n }}\n onCancel={() => {\n this.log(\"Setup cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n // TypeScript can't track that onComplete callback mutates wizardResult before waitUntilExit resolves\n const result = wizardResult as WizardResultV2 | null;\n\n if (!result || result.cancelled) {\n this.exit(EXIT_CODES.CANCELLED);\n }\n\n if (result.skills.length === 0) {\n 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: { source?: string; refresh: boolean },\n ): Promise<void> {\n const projectDir = process.cwd();\n const installMode = deriveInstallMode(result.skills);\n\n this.log(\"\\n\");\n this.log(`Selected ${result.skills.length} skills`);\n this.log(\n `Install mode: ${installMode === \"plugin\" ? \"Plugin (native install)\" : \"Local (copy to .claude/skills/)\"}`,\n );\n\n if (installMode === \"plugin\") {\n await this.installIndividualPlugins(result, sourceResult, flags, projectDir);\n return;\n }\n\n await this.installLocalMode(result, sourceResult, flags, projectDir);\n }\n\n private async installIndividualPlugins(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n projectDir: string,\n ): Promise<void> {\n // Lazily resolve marketplace name if not already set (e.g. BUILT_IN_MATRIX skips fetch)\n if (!sourceResult.marketplace) {\n try {\n const marketplaceResult = await fetchMarketplace(sourceResult.sourceConfig.source, {});\n sourceResult.marketplace = marketplaceResult.marketplace.name;\n } catch {\n this.warn(\"Could not resolve marketplace. Falling back to Local Mode...\");\n await this.installLocalMode(result, sourceResult, flags, projectDir);\n return;\n }\n }\n\n // After lazy resolution, marketplace is guaranteed to be set (or we returned above)\n const marketplace = sourceResult.marketplace;\n\n const marketplaceExists = await claudePluginMarketplaceExists(marketplace);\n\n if (!marketplaceExists) {\n this.log(`Registering marketplace \"${marketplace}\"...`);\n try {\n const marketplaceSource = sourceResult.sourceConfig.source.replace(/^github:/, \"\");\n await claudePluginMarketplaceAdd(marketplaceSource);\n this.log(`Registered marketplace: ${marketplace}`);\n } catch (error) {\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n this.log(\"Installing skill plugins...\");\n for (const skill of result.skills.filter((s) => s.source !== \"local\")) {\n const pluginRef = `${skill.id}@${marketplace}`;\n const pluginScope = skill.scope === \"global\" ? \"user\" : \"project\";\n try {\n await claudePluginInstall(pluginRef, pluginScope, projectDir);\n this.log(` Installed ${pluginRef}`);\n } catch (error) {\n this.error(`Failed to install plugin ${pluginRef}: ${getErrorMessage(error)}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n const pluginSkillCount = result.skills.filter((s) => s.source !== \"local\").length;\n this.log(`Installed ${pluginSkillCount} skill plugins\\n`);\n\n this.log(\"Generating configuration...\");\n try {\n const configResult = await installPluginConfig({\n wizardResult: result,\n sourceResult,\n projectDir,\n sourceFlag: flags.source,\n });\n\n if (configResult.wasMerged) {\n this.log(`Merged with existing config at ${configResult.mergedConfigPath}`);\n }\n\n this.log(`Configuration saved (${configResult.config.agents.length} agents)\\n`);\n this.log(STATUS_MESSAGES.COMPILING_AGENTS);\n this.log(`Compiled ${configResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(`${SUCCESS_MESSAGES.INIT_SUCCESS}\\n`);\n this.log(\"Agents compiled to:\");\n this.log(` ${configResult.agentsDir}`);\n for (const agentName of configResult.compiledAgents) {\n this.log(` ${agentName}.md`);\n }\n this.log(\"\");\n this.log(\"Configuration:\");\n this.log(` ${configResult.configPath}`);\n this.log(\"\");\n this.log(\"To customize agent-skill assignments:\");\n this.log(` 1. Edit .claude-src/config.ts`);\n this.log(` 2. Run '${CLI_BIN_NAME} 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.handleError(error);\n }\n }\n\n private async installLocalMode(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n projectDir: string,\n ): Promise<void> {\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(STATUS_MESSAGES.COMPILING_AGENTS);\n this.log(`Compiled ${installResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(`${SUCCESS_MESSAGES.INIT_SUCCESS}\\n`);\n this.log(\"Skills copied to:\");\n this.log(` ${installResult.skillsDir}`);\n for (const copiedSkill of installResult.copiedSkills) {\n const displayName = getSkillById(copiedSkill.skillId).displayName;\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.ts`);\n this.log(` 2. Run '${CLI_BIN_NAME} 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.handleError(error);\n }\n }\n}\n","import React from \"react\";\n\nimport { Text, Box } from \"ink\";\nimport path from \"path\";\n\nimport { CLAUDE_DIR, CLI_COLORS, MAX_CONFIG_FILE_SIZE } from \"../consts\";\nimport { fileExists, readFileSafe } from \"../utils/fs\";\nimport { warn } from \"../utils/logger\";\nimport { settingsFileSchema, warnUnknownFields } 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_DIR, \"settings.json\");\n const localSettingsPath = path.join(projectRoot, CLAUDE_DIR, \"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 readFileSafe(filePath, MAX_CONFIG_FILE_SIZE);\n const raw = JSON.parse(content);\n if (typeof raw === \"object\" && raw !== null && !Array.isArray(raw)) {\n // Known Claude CLI settings.json fields (permissions is ours; the rest are managed by Claude CLI)\n const EXPECTED_SETTINGS_KEYS = [\n \"permissions\",\n \"enabledPlugins\",\n \"env\",\n \"allowedTools\",\n \"customInstructions\",\n \"defaultModel\",\n ] as const;\n warnUnknownFields(\n raw as Record<string, unknown>,\n EXPECTED_SETTINGS_KEYS,\n `settings file '${filePath}'`,\n );\n }\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={CLI_COLORS.WARNING} padding={1}>\n <Text bold color={CLI_COLORS.WARNING}>\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={CLI_COLORS.WARNING} padding={1}>\n <Text bold color={CLI_COLORS.WARNING}>\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":["Box","Text","path","jsx","jsxs","Box","Text","path","result"]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  deriveInstallMode,
4
4
  resolveAlias
5
- } from "./chunk-ZLMKEYDF.js";
5
+ } from "./chunk-ZD3U734W.js";
6
6
  import {
7
7
  isCategory,
8
8
  typedEntries,
@@ -518,4 +518,4 @@ var useWizardStore = create((set, get) => ({
518
518
  export {
519
519
  useWizardStore
520
520
  };
521
- //# sourceMappingURL=chunk-B7KVPY3Z.js.map
521
+ //# sourceMappingURL=chunk-OLS55LVJ.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-AUNBGZS4.js";
8
8
  import {
9
9
  useWizardStore
10
- } from "./chunk-B7KVPY3Z.js";
10
+ } from "./chunk-OLS55LVJ.js";
11
11
  import {
12
12
  matrix
13
13
  } from "./chunk-E74Q7GUE.js";
@@ -110,4 +110,4 @@ var StackSelection = ({
110
110
  export {
111
111
  StackSelection
112
112
  };
113
- //# sourceMappingURL=chunk-VOYGRNLS.js.map
113
+ //# sourceMappingURL=chunk-SFZQL6DJ.js.map
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  WizardLayout
4
- } from "./chunk-J5T7M2CS.js";
4
+ } from "./chunk-ZWYCZ7BN.js";
5
5
  import {
6
6
  StepSettings
7
- } from "./chunk-WQRFVEAA.js";
7
+ } from "./chunk-DUF4UVJB.js";
8
8
  import {
9
9
  StepSources
10
- } from "./chunk-KTF5RKKP.js";
10
+ } from "./chunk-ALCUVCY5.js";
11
11
  import {
12
12
  StepStack
13
- } from "./chunk-JWZLVWTX.js";
13
+ } from "./chunk-23OJO4JS.js";
14
14
  import {
15
15
  StepAgents
16
- } from "./chunk-XP7BXHFG.js";
16
+ } from "./chunk-UVNIFNIN.js";
17
17
  import {
18
18
  StepBuild
19
- } from "./chunk-ZO7C5WMJ.js";
19
+ } from "./chunk-XYXDEODG.js";
20
20
  import {
21
21
  StepConfirm
22
22
  } from "./chunk-NUJHWYCR.js";
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-BH4LN7XV.js";
26
26
  import {
27
27
  useWizardStore
28
- } from "./chunk-B7KVPY3Z.js";
28
+ } from "./chunk-OLS55LVJ.js";
29
29
  import {
30
30
  cliTheme
31
31
  } from "./chunk-T5DJCIUP.js";
@@ -39,7 +39,7 @@ import {
39
39
  import {
40
40
  resolveAlias,
41
41
  validateSelection
42
- } from "./chunk-ZLMKEYDF.js";
42
+ } from "./chunk-ZD3U734W.js";
43
43
  import {
44
44
  findStack,
45
45
  matrix
@@ -339,4 +339,4 @@ var Wizard = ({
339
339
  export {
340
340
  Wizard
341
341
  };
342
- //# sourceMappingURL=chunk-UFAP6GHD.js.map
342
+ //# sourceMappingURL=chunk-TUILIOBW.js.map
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-AQYAVLZK.js";
14
14
  import {
15
15
  useWizardStore
16
- } from "./chunk-B7KVPY3Z.js";
16
+ } from "./chunk-OLS55LVJ.js";
17
17
  import {
18
18
  isAgentName,
19
19
  typedKeys
@@ -268,4 +268,4 @@ var StepAgents = () => {
268
268
  export {
269
269
  StepAgents
270
270
  };
271
- //# sourceMappingURL=chunk-XP7BXHFG.js.map
271
+ //# sourceMappingURL=chunk-UVNIFNIN.js.map
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-AQYAVLZK.js";
15
15
  import {
16
16
  useWizardStore
17
- } from "./chunk-B7KVPY3Z.js";
17
+ } from "./chunk-OLS55LVJ.js";
18
18
  import {
19
19
  KEY_LABEL_ENTER,
20
20
  KEY_LABEL_ESC
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  getAvailableSkills,
24
24
  resolveAlias
25
- } from "./chunk-ZLMKEYDF.js";
25
+ } from "./chunk-ZD3U734W.js";
26
26
  import {
27
27
  getSkillById,
28
28
  matrix
@@ -243,4 +243,4 @@ export {
243
243
  validateBuildStep,
244
244
  StepBuild
245
245
  };
246
- //# sourceMappingURL=chunk-ZO7C5WMJ.js.map
246
+ //# sourceMappingURL=chunk-XYXDEODG.js.map
@@ -102,7 +102,7 @@ import {
102
102
 
103
103
  // src/cli/lib/loading/source-loader.ts
104
104
  init_esm_shims();
105
- import os9 from "os";
105
+ import os10 from "os";
106
106
  import path28 from "path";
107
107
 
108
108
  // src/cli/lib/metadata-keys.ts
@@ -595,12 +595,19 @@ function splitConfigByScope(config) {
595
595
  }
596
596
  }
597
597
  }
598
+ const globalAgentNames = new Set(globalAgents.map((a) => a.name));
599
+ const globalSelectedAgents = config.selectedAgents?.filter((a) => globalAgentNames.has(a)) ?? [];
600
+ const projectSelectedAgents = config.selectedAgents?.filter((a) => !globalAgentNames.has(a)) ?? [];
601
+ const globalDomains = config.domains ?? [];
602
+ const globalDomainSet = new Set(globalDomains);
603
+ const projectOnlyDomains = (config.domains ?? []).filter((d) => !globalDomainSet.has(d));
598
604
  const globalConfig = {
599
605
  name: "global",
600
606
  agents: globalAgents,
601
607
  skills: globalSkills,
602
608
  ...Object.keys(globalStack).length > 0 && { stack: globalStack },
603
- ...config.domains && config.domains.length > 0 && { domains: config.domains }
609
+ ...globalDomains.length > 0 && { domains: globalDomains },
610
+ ...globalSelectedAgents.length > 0 && { selectedAgents: globalSelectedAgents }
604
611
  };
605
612
  const projectConfig = {
606
613
  name: config.name,
@@ -612,8 +619,8 @@ function splitConfigByScope(config) {
612
619
  ...config.source && { source: config.source },
613
620
  ...config.marketplace && { marketplace: config.marketplace },
614
621
  ...config.agentsSource && { agentsSource: config.agentsSource },
615
- ...config.domains && config.domains.length > 0 && { domains: config.domains },
616
- ...config.selectedAgents && config.selectedAgents.length > 0 && { selectedAgents: config.selectedAgents }
622
+ ...projectOnlyDomains.length > 0 && { domains: projectOnlyDomains },
623
+ ...projectSelectedAgents.length > 0 && { selectedAgents: projectSelectedAgents }
617
624
  };
618
625
  return { global: globalConfig, project: projectConfig };
619
626
  }
@@ -975,7 +982,7 @@ function loadConfigTypesDataInBackground(sourceFlag, projectDir) {
975
982
  if (!await directoryExists(claudeSrcDir)) {
976
983
  throw new Error(`${CLAUDE_SRC_DIR}/ not found \u2014 run '${CLI_BIN_NAME} init' first`);
977
984
  }
978
- const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-RTG42MWG.js");
985
+ const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-VTNIFSL6.js");
979
986
  const { loadAllAgents: loadAllAgents2 } = await import("./loader-NHUCFMFQ.js");
980
987
  const sourceResult = await loadSkillsMatrixFromSource2({
981
988
  sourceFlag,
@@ -1004,7 +1011,8 @@ async function regenerateConfigTypes(projectDir, backgroundData, extras) {
1004
1011
  globalTypesImportPath: computeGlobalTypesImportPath(projectDir),
1005
1012
  projectSkillIds: extras?.extraSkillIds ?? [],
1006
1013
  projectAgentNames: extras?.extraAgentNames ?? [],
1007
- projectDomains: extras?.extraDomains ?? []
1014
+ projectDomains: extras?.extraDomains ?? [],
1015
+ projectCategories: extras?.extraCategories ?? []
1008
1016
  });
1009
1017
  verbose("Using project config-types.ts that imports from global");
1010
1018
  } else {
@@ -1286,8 +1294,10 @@ function generateProjectConfigWithGlobalImport(cleaned, globalImportPath) {
1286
1294
  const agentsArr = cleaned.agents ?? [];
1287
1295
  const stackObj = cleaned.stack;
1288
1296
  const domainsArr = cleaned.domains ?? [];
1297
+ const selectedAgentsArr = cleaned.selectedAgents ?? [];
1289
1298
  const hasProjectDomains = domainsArr.length > 0;
1290
1299
  const hasStack = stackObj != null && Object.keys(stackObj).length > 0;
1300
+ const hasProjectSelectedAgents = selectedAgentsArr.length > 0;
1291
1301
  const typeImports = buildTypeImports({
1292
1302
  hasSkills: true,
1293
1303
  // Always present (spread from global)
@@ -1325,11 +1335,10 @@ function generateProjectConfigWithGlobalImport(cleaned, globalImportPath) {
1325
1335
  if (domainItems) lines.push(domainItems);
1326
1336
  lines.push(`];`);
1327
1337
  }
1328
- const scalarFields = Object.entries(cleaned).filter(([key]) => !EXTRACTED_FIELDS.has(key) && key !== "name").map(([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)},`).join("\n");
1338
+ const scalarFields = Object.entries(cleaned).filter(([key]) => !EXTRACTED_FIELDS.has(key) && key !== "name" && key !== "selectedAgents").map(([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)},`).join("\n");
1329
1339
  const exportFields = [` ...globalConfig,`];
1330
- if (cleaned.name) {
1331
- exportFields.push(` name: ${JSON.stringify(cleaned.name)},`);
1332
- }
1340
+ const projectName = cleaned.name && cleaned.name !== "global" ? cleaned.name : DEFAULT_PLUGIN_NAME;
1341
+ exportFields.push(` name: ${JSON.stringify(projectName)},`);
1333
1342
  exportFields.push(` skills,`);
1334
1343
  exportFields.push(` agents,`);
1335
1344
  if (hasStack) {
@@ -1338,6 +1347,12 @@ function generateProjectConfigWithGlobalImport(cleaned, globalImportPath) {
1338
1347
  if (hasProjectDomains) {
1339
1348
  exportFields.push(` domains,`);
1340
1349
  }
1350
+ if (hasProjectSelectedAgents) {
1351
+ const projectAgentItems = selectedAgentsArr.map((a) => `${JSON.stringify(a)}`).join(", ");
1352
+ exportFields.push(
1353
+ ` "selectedAgents": [...(globalConfig.selectedAgents ?? []), ${projectAgentItems}],`
1354
+ );
1355
+ }
1341
1356
  if (scalarFields) {
1342
1357
  exportFields.push(scalarFields);
1343
1358
  }
@@ -1698,7 +1713,7 @@ function resolveToCanonicalId(slug, slugToId, context) {
1698
1713
  return slugResult;
1699
1714
  }
1700
1715
  const location = context ? ` in ${context}` : "";
1701
- warn(`Unresolved slug '${slug}'${location} \u2014 skipping`);
1716
+ verbose(`Unresolved slug '${slug}'${location} \u2014 skipping`);
1702
1717
  return null;
1703
1718
  }
1704
1719
  function mergeMatrixWithSkills(categories, relationships, skills) {
@@ -2429,7 +2444,7 @@ async function detectInstallation(projectDir = process.cwd()) {
2429
2444
 
2430
2445
  // src/cli/lib/installation/local-installer.ts
2431
2446
  init_esm_shims();
2432
- import os7 from "os";
2447
+ import os8 from "os";
2433
2448
  import path20 from "path";
2434
2449
 
2435
2450
  // src/cli/lib/skills/index.ts
@@ -3386,6 +3401,7 @@ Stack plugin compiled: ${result.stackName}`);
3386
3401
  // src/cli/utils/exec.ts
3387
3402
  init_esm_shims();
3388
3403
  import { spawn } from "child_process";
3404
+ import os7 from "os";
3389
3405
  var MAX_PLUGIN_PATH_LENGTH = 1024;
3390
3406
  var MAX_PLUGIN_NAME_LENGTH = 256;
3391
3407
  var MAX_MARKETPLACE_SOURCE_LENGTH = 1024;
@@ -3476,10 +3492,14 @@ async function execCommand(command, args, options) {
3476
3492
  });
3477
3493
  });
3478
3494
  }
3495
+ function resolvePluginCwd(scope, projectDir) {
3496
+ return scope === "user" ? os7.homedir() : projectDir;
3497
+ }
3479
3498
  async function claudePluginInstall(pluginPath, scope, projectDir) {
3480
3499
  validatePluginPath(pluginPath);
3500
+ const cwd = resolvePluginCwd(scope, projectDir);
3481
3501
  const args = ["plugin", "install", pluginPath, "--scope", scope];
3482
- const result = await execCommand("claude", args, { cwd: projectDir });
3502
+ const result = await execCommand("claude", args, { cwd });
3483
3503
  if (result.exitCode !== 0) {
3484
3504
  const errorMessage = result.stderr || result.stdout || "Unknown error";
3485
3505
  throw new Error(`Plugin installation failed: ${errorMessage.trim()}`);
@@ -3538,8 +3558,9 @@ async function claudePluginMarketplaceAdd(source) {
3538
3558
  }
3539
3559
  async function claudePluginUninstall(pluginName, scope, projectDir) {
3540
3560
  validatePluginName(pluginName);
3561
+ const cwd = resolvePluginCwd(scope, projectDir);
3541
3562
  const args = ["plugin", "uninstall", pluginName, "--scope", scope];
3542
- const result = await execCommand("claude", args, { cwd: projectDir });
3563
+ const result = await execCommand("claude", args, { cwd });
3543
3564
  if (result.exitCode !== 0) {
3544
3565
  const errorMessage = result.stderr || result.stdout || "Unknown error";
3545
3566
  if (errorMessage.includes("not installed") || errorMessage.includes("not found")) {
@@ -3551,7 +3572,7 @@ async function claudePluginUninstall(pluginName, scope, projectDir) {
3551
3572
 
3552
3573
  // src/cli/lib/installation/local-installer.ts
3553
3574
  function resolveInstallPaths(projectDir, scope = "project") {
3554
- const baseDir = scope === "global" ? os7.homedir() : projectDir;
3575
+ const baseDir = scope === "global" ? os8.homedir() : projectDir;
3555
3576
  return {
3556
3577
  skillsDir: path20.join(baseDir, LOCAL_SKILLS_PATH),
3557
3578
  agentsDir: path20.join(baseDir, CLAUDE_DIR, "agents"),
@@ -3729,7 +3750,7 @@ async function writeStandaloneConfigTypes(configPath, matrix2, agents, finalConf
3729
3750
  async function writeProjectConfigTypes(projectConfigPath, projectDir, projectConfig, matrix2) {
3730
3751
  const typesPath = path20.join(path20.dirname(projectConfigPath), STANDARD_FILES.CONFIG_TYPES_TS);
3731
3752
  const projectClaudeSrc = path20.join(projectDir, CLAUDE_SRC_DIR);
3732
- const globalClaudeSrc = path20.join(os7.homedir(), CLAUDE_SRC_DIR);
3753
+ const globalClaudeSrc = path20.join(os8.homedir(), CLAUDE_SRC_DIR);
3733
3754
  const relativePath = path20.relative(projectClaudeSrc, globalClaudeSrc);
3734
3755
  const globalTypesImportPath = relativePath.split(path20.sep).join("/");
3735
3756
  const projectSkillIds = projectConfig?.skills.map((s) => s.id) ?? [];
@@ -3766,7 +3787,7 @@ async function writeProjectConfigTypes(projectConfigPath, projectDir, projectCon
3766
3787
  verbose("Using project config-types.ts that imports from global");
3767
3788
  }
3768
3789
  async function writeScopedConfigs(finalConfig, matrix2, agents, projectDir, projectConfigPath) {
3769
- const homeDir = os7.homedir();
3790
+ const homeDir = os8.homedir();
3770
3791
  const isProjectContext = path20.resolve(projectDir) !== path20.resolve(homeDir);
3771
3792
  if (!isProjectContext) {
3772
3793
  await writeConfigFile(finalConfig, projectConfigPath);
@@ -3783,7 +3804,7 @@ async function writeScopedConfigs(finalConfig, matrix2, agents, projectDir, proj
3783
3804
  await ensureDir(path20.dirname(projectConfigPath));
3784
3805
  await writeConfigFile(projectSplitConfig, projectConfigPath, { isProjectConfig: true });
3785
3806
  verbose(`Updated project config at ${projectConfigPath}`);
3786
- await writeProjectConfigTypes(projectConfigPath, projectDir, finalConfig, matrix2);
3807
+ await writeProjectConfigTypes(projectConfigPath, projectDir, projectSplitConfig, matrix2);
3787
3808
  }
3788
3809
  async function compileAndWriteAgents(compileConfig, agents, localSkills, sourceResult, projectDir, agentsDir, installMode, agentScopeMap) {
3789
3810
  const engine = await createLiquidEngine(projectDir);
@@ -3793,7 +3814,7 @@ async function compileAndWriteAgents(compileConfig, agents, localSkills, sourceR
3793
3814
  compileConfig,
3794
3815
  sourceResult.sourcePath
3795
3816
  );
3796
- const globalAgentsDir = path20.join(os7.homedir(), CLAUDE_DIR, "agents");
3817
+ const globalAgentsDir = path20.join(os8.homedir(), CLAUDE_DIR, "agents");
3797
3818
  const compiledAgentNames = [];
3798
3819
  for (const [name, agent] of typedEntries(resolvedAgents)) {
3799
3820
  const output = await compileAgentForPlugin(
@@ -4012,7 +4033,7 @@ init_esm_shims();
4012
4033
  // src/cli/lib/plugins/plugin-settings.ts
4013
4034
  init_esm_shims();
4014
4035
  import path22 from "path";
4015
- import os8 from "os";
4036
+ import os9 from "os";
4016
4037
  import { z as z2 } from "zod";
4017
4038
  var pluginSettingsSchema = z2.object({
4018
4039
  enabledPlugins: z2.record(z2.string(), z2.unknown()).optional()
@@ -4063,7 +4084,7 @@ async function resolvePluginInstallPaths(pluginKeys, projectDir) {
4063
4084
  if (pluginKeys.length === 0) {
4064
4085
  return [];
4065
4086
  }
4066
- const registryPath = path22.join(os8.homedir(), CLAUDE_DIR, PLUGINS_SUBDIR, INSTALLED_PLUGINS_FILE);
4087
+ const registryPath = path22.join(os9.homedir(), CLAUDE_DIR, PLUGINS_SUBDIR, INSTALLED_PLUGINS_FILE);
4067
4088
  if (!await fileExists(registryPath)) {
4068
4089
  verbose(`Plugin registry not found at '${registryPath}'`);
4069
4090
  return [];
@@ -5158,7 +5179,7 @@ async function loadSkillsMatrixFromSource(options = {}) {
5158
5179
  }
5159
5180
  const resolvedProjectDir = projectDir || process.cwd();
5160
5181
  let localSkillsResult = await discoverLocalSkills(resolvedProjectDir);
5161
- const homeDir = os9.homedir();
5182
+ const homeDir = os10.homedir();
5162
5183
  if ((!localSkillsResult || localSkillsResult.skills.length === 0) && resolvedProjectDir !== homeDir) {
5163
5184
  localSkillsResult = await discoverLocalSkills(homeDir);
5164
5185
  }
@@ -5482,4 +5503,4 @@ export {
5482
5503
  validateAllPlugins,
5483
5504
  printPluginValidationResult
5484
5505
  };
5485
- //# sourceMappingURL=chunk-ZLMKEYDF.js.map
5506
+ //# sourceMappingURL=chunk-ZD3U734W.js.map