@agents-inc/cli 0.82.4 → 0.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/{chunk-JQDOUNHF.js → chunk-253BRVMB.js} +10 -10
  3. package/dist/{chunk-3PB7KSF7.js → chunk-262MXFGL.js} +3 -3
  4. package/dist/{chunk-35ESNSF5.js → chunk-4BVJJSKM.js} +2 -2
  5. package/dist/{chunk-LOB3OU2D.js → chunk-4Z5FJQEP.js} +3 -3
  6. package/dist/{chunk-AAW3PYXA.js → chunk-7KYSCSYI.js} +2 -2
  7. package/dist/{chunk-FIXWR56O.js → chunk-7Q3PDSOE.js} +2 -2
  8. package/dist/{chunk-KB6LCTCD.js → chunk-C2KXQHOI.js} +181 -72
  9. package/dist/chunk-C2KXQHOI.js.map +1 -0
  10. package/dist/{chunk-M2CS5EOK.js → chunk-DUKSSZ6M.js} +3 -3
  11. package/dist/{chunk-5AHKXBNC.js → chunk-MHA6MWFP.js} +2 -2
  12. package/dist/{chunk-3BDCU5QB.js → chunk-OMTMSYUS.js} +2 -1
  13. package/dist/chunk-OMTMSYUS.js.map +1 -0
  14. package/dist/{chunk-K76AXQ7A.js → chunk-RQYGAYPW.js} +2 -2
  15. package/dist/{chunk-KEW246HB.js → chunk-SW4LP3LX.js} +2 -2
  16. package/dist/{chunk-FBLRTXEA.js → chunk-TYFBHM5E.js} +3 -3
  17. package/dist/{chunk-KZLGBHDZ.js → chunk-TYOHFFYJ.js} +2 -2
  18. package/dist/{chunk-LQ3EJBUN.js → chunk-VXQEKJTW.js} +2 -2
  19. package/dist/{chunk-63E7LOLB.js → chunk-WVVJD4K2.js} +2 -2
  20. package/dist/{chunk-RTXJLZ7A.js → chunk-WWUSBGQE.js} +2 -2
  21. package/dist/commands/build/plugins.js +2 -2
  22. package/dist/commands/build/stack.js +2 -2
  23. package/dist/commands/compile.js +2 -2
  24. package/dist/commands/config/index.js +2 -2
  25. package/dist/commands/config/path.js +1 -1
  26. package/dist/commands/config/show.js +2 -2
  27. package/dist/commands/diff.js +1 -1
  28. package/dist/commands/doctor.js +1 -1
  29. package/dist/commands/edit.js +13 -13
  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 +13 -13
  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 +1 -1
  41. package/dist/commands/update.js +2 -2
  42. package/dist/commands/validate.js +1 -1
  43. package/dist/components/wizard/category-grid.test.js +3 -3
  44. package/dist/components/wizard/domain-selection.js +3 -3
  45. package/dist/components/wizard/help-modal.js +3 -3
  46. package/dist/components/wizard/source-grid.test.js +3 -3
  47. package/dist/components/wizard/stack-selection.js +3 -3
  48. package/dist/components/wizard/step-agents.js +3 -3
  49. package/dist/components/wizard/step-agents.test.js +4 -4
  50. package/dist/components/wizard/step-build.js +3 -3
  51. package/dist/components/wizard/step-build.test.js +3 -3
  52. package/dist/components/wizard/step-confirm.test.js +2 -2
  53. package/dist/components/wizard/step-settings.js +2 -2
  54. package/dist/components/wizard/step-settings.test.js +5 -5
  55. package/dist/components/wizard/step-sources.js +3 -3
  56. package/dist/components/wizard/step-sources.test.js +4 -4
  57. package/dist/components/wizard/step-stack.js +4 -4
  58. package/dist/components/wizard/step-stack.test.js +4 -4
  59. package/dist/components/wizard/wizard-layout.js +4 -4
  60. package/dist/components/wizard/wizard.js +12 -12
  61. package/dist/hooks/init.js +13 -13
  62. package/dist/{source-loader-FMDHHYDQ.js → source-loader-TV2TFYGI.js} +2 -2
  63. package/dist/{source-manager-YMJ4Z5UG.js → source-manager-3223PJVQ.js} +2 -2
  64. package/dist/stores/wizard-store.js +2 -2
  65. package/dist/stores/wizard-store.test.js +3 -3
  66. package/package.json +1 -1
  67. package/dist/chunk-3BDCU5QB.js.map +0 -1
  68. package/dist/chunk-KB6LCTCD.js.map +0 -1
  69. /package/dist/{chunk-JQDOUNHF.js.map → chunk-253BRVMB.js.map} +0 -0
  70. /package/dist/{chunk-3PB7KSF7.js.map → chunk-262MXFGL.js.map} +0 -0
  71. /package/dist/{chunk-35ESNSF5.js.map → chunk-4BVJJSKM.js.map} +0 -0
  72. /package/dist/{chunk-LOB3OU2D.js.map → chunk-4Z5FJQEP.js.map} +0 -0
  73. /package/dist/{chunk-AAW3PYXA.js.map → chunk-7KYSCSYI.js.map} +0 -0
  74. /package/dist/{chunk-FIXWR56O.js.map → chunk-7Q3PDSOE.js.map} +0 -0
  75. /package/dist/{chunk-M2CS5EOK.js.map → chunk-DUKSSZ6M.js.map} +0 -0
  76. /package/dist/{chunk-5AHKXBNC.js.map → chunk-MHA6MWFP.js.map} +0 -0
  77. /package/dist/{chunk-K76AXQ7A.js.map → chunk-RQYGAYPW.js.map} +0 -0
  78. /package/dist/{chunk-KEW246HB.js.map → chunk-SW4LP3LX.js.map} +0 -0
  79. /package/dist/{chunk-FBLRTXEA.js.map → chunk-TYFBHM5E.js.map} +0 -0
  80. /package/dist/{chunk-KZLGBHDZ.js.map → chunk-TYOHFFYJ.js.map} +0 -0
  81. /package/dist/{chunk-LQ3EJBUN.js.map → chunk-VXQEKJTW.js.map} +0 -0
  82. /package/dist/{chunk-63E7LOLB.js.map → chunk-WVVJD4K2.js.map} +0 -0
  83. /package/dist/{chunk-RTXJLZ7A.js.map → chunk-WWUSBGQE.js.map} +0 -0
  84. /package/dist/{source-loader-FMDHHYDQ.js.map → source-loader-TV2TFYGI.js.map} +0 -0
  85. /package/dist/{source-manager-YMJ4Z5UG.js.map → source-manager-3223PJVQ.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@ 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.83.0] - 2026-03-25
11
+
12
+ **Inline global config in project config, multi-skill category fix, SkillAssignment[] arrays**
13
+
14
+ - Project config is now a self-contained snapshot with inlined global skills/agents
15
+ - Multi-select categories no longer lose skills in stack generation
16
+ - Generated config-types use proper `SkillAssignment[]` arrays
17
+
18
+ See [changelogs/0.83.0.md](./changelogs/0.83.0.md) for full details.
19
+
10
20
  ## [0.82.4] - 2026-03-24
11
21
 
12
22
  **Edit command fixes: agent detection, local skill copy, scope-aware stack splitting**
@@ -1,34 +1,34 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  WizardLayout
4
- } from "./chunk-LOB3OU2D.js";
4
+ } from "./chunk-4Z5FJQEP.js";
5
5
  import {
6
6
  StepSettings
7
- } from "./chunk-5AHKXBNC.js";
7
+ } from "./chunk-MHA6MWFP.js";
8
8
  import {
9
9
  StepSources
10
- } from "./chunk-3PB7KSF7.js";
10
+ } from "./chunk-262MXFGL.js";
11
11
  import {
12
12
  StepStack
13
- } from "./chunk-63E7LOLB.js";
13
+ } from "./chunk-WVVJD4K2.js";
14
14
  import {
15
15
  StepAgents
16
- } from "./chunk-35ESNSF5.js";
16
+ } from "./chunk-4BVJJSKM.js";
17
17
  import {
18
18
  StepBuild
19
- } from "./chunk-M2CS5EOK.js";
19
+ } from "./chunk-DUKSSZ6M.js";
20
20
  import {
21
21
  StepConfirm
22
22
  } from "./chunk-C4I4Q33M.js";
23
23
  import {
24
24
  DomainSelection
25
- } from "./chunk-RTXJLZ7A.js";
25
+ } from "./chunk-WWUSBGQE.js";
26
26
  import {
27
27
  getStackName
28
28
  } from "./chunk-FS4YWW36.js";
29
29
  import {
30
30
  useWizardStore
31
- } from "./chunk-LQ3EJBUN.js";
31
+ } from "./chunk-VXQEKJTW.js";
32
32
  import {
33
33
  cliTheme
34
34
  } from "./chunk-HEQVUIHQ.js";
@@ -42,7 +42,7 @@ import {
42
42
  import {
43
43
  resolveAlias,
44
44
  validateSelection
45
- } from "./chunk-KB6LCTCD.js";
45
+ } from "./chunk-C2KXQHOI.js";
46
46
  import {
47
47
  findStack,
48
48
  matrix
@@ -342,4 +342,4 @@ var Wizard = ({
342
342
  export {
343
343
  Wizard
344
344
  };
345
- //# sourceMappingURL=chunk-JQDOUNHF.js.map
345
+ //# sourceMappingURL=chunk-253BRVMB.js.map
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-5BRHJD7Q.js";
14
14
  import {
15
15
  useWizardStore
16
- } from "./chunk-LQ3EJBUN.js";
16
+ } from "./chunk-VXQEKJTW.js";
17
17
  import {
18
18
  HOTKEY_SET_ALL_LOCAL,
19
19
  HOTKEY_SET_ALL_PLUGIN,
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  resolveAllSources,
24
24
  searchExtraSources
25
- } from "./chunk-KB6LCTCD.js";
25
+ } from "./chunk-C2KXQHOI.js";
26
26
  import {
27
27
  CLI_COLORS,
28
28
  DEFAULT_BRANDING
@@ -168,4 +168,4 @@ var StepSources = ({ projectDir, onContinue, onBack }) => {
168
168
  export {
169
169
  StepSources
170
170
  };
171
- //# sourceMappingURL=chunk-3PB7KSF7.js.map
171
+ //# sourceMappingURL=chunk-262MXFGL.js.map
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-4QA5TIBU.js";
12
12
  import {
13
13
  useWizardStore
14
- } from "./chunk-LQ3EJBUN.js";
14
+ } from "./chunk-VXQEKJTW.js";
15
15
  import {
16
16
  matrix,
17
17
  typedKeys
@@ -271,4 +271,4 @@ var StepAgents = () => {
271
271
  export {
272
272
  StepAgents
273
273
  };
274
- //# sourceMappingURL=chunk-35ESNSF5.js.map
274
+ //# sourceMappingURL=chunk-4BVJJSKM.js.map
@@ -13,10 +13,10 @@ import {
13
13
  } from "./chunk-FS4YWW36.js";
14
14
  import {
15
15
  HelpModal
16
- } from "./chunk-AAW3PYXA.js";
16
+ } from "./chunk-7KYSCSYI.js";
17
17
  import {
18
18
  useWizardStore
19
- } from "./chunk-LQ3EJBUN.js";
19
+ } from "./chunk-VXQEKJTW.js";
20
20
  import {
21
21
  HOTKEY_FILTER_INCOMPATIBLE,
22
22
  HOTKEY_HELP,
@@ -250,4 +250,4 @@ var WizardLayout = ({
250
250
  export {
251
251
  WizardLayout
252
252
  };
253
- //# sourceMappingURL=chunk-LOB3OU2D.js.map
253
+ //# sourceMappingURL=chunk-4Z5FJQEP.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useWizardStore
4
- } from "./chunk-LQ3EJBUN.js";
4
+ } from "./chunk-VXQEKJTW.js";
5
5
  import {
6
6
  HOTKEY_HELP,
7
7
  HOTKEY_SCOPE,
@@ -108,4 +108,4 @@ var HelpModal = ({ currentStep }) => {
108
108
  export {
109
109
  HelpModal
110
110
  };
111
- //# sourceMappingURL=chunk-AAW3PYXA.js.map
111
+ //# sourceMappingURL=chunk-7KYSCSYI.js.map
@@ -7,7 +7,7 @@ import {
7
7
  loadProjectSourceConfig,
8
8
  resolveAgentsSource,
9
9
  resolveSource
10
- } from "./chunk-KB6LCTCD.js";
10
+ } from "./chunk-C2KXQHOI.js";
11
11
  import {
12
12
  BaseCommand
13
13
  } from "./chunk-X2HE3W74.js";
@@ -90,4 +90,4 @@ ${DEFAULT_BRANDING.NAME} Configuration
90
90
  export {
91
91
  ConfigShow
92
92
  };
93
- //# sourceMappingURL=chunk-FIXWR56O.js.map
93
+ //# sourceMappingURL=chunk-7Q3PDSOE.js.map
@@ -7,7 +7,6 @@ import {
7
7
  } from "./chunk-XTVWVOLD.js";
8
8
  import {
9
9
  BUILT_IN_MATRIX,
10
- getCategoryDomain,
11
10
  getCustomSkillIds,
12
11
  getSkillById,
13
12
  initializeMatrix,
@@ -521,16 +520,17 @@ function generateProjectConfigFromSkills(name, selectedSkillIds, options) {
521
520
  `${skippedCount}/${selectedSkillIds.length} skills not found in matrix. Matrix keys sample: [${matrixSample}]`
522
521
  );
523
522
  }
524
- const stackProperty = agentList.length > 0 && validSkills.length > 0 ? Object.fromEntries(
523
+ const grouped = /* @__PURE__ */ new Map();
524
+ for (const { skillId, category } of validSkills) {
525
+ const arr = grouped.get(category) ?? [];
526
+ arr.push({ id: skillId, preloaded: false });
527
+ grouped.set(category, arr);
528
+ }
529
+ const stackProperty = agentList.length > 0 && grouped.size > 0 ? Object.fromEntries(
525
530
  agentList.map((agentId) => [
526
531
  agentId,
527
532
  // Structural cast: Object.fromEntries returns Record<string, V>, narrowing to typed keys
528
- Object.fromEntries(
529
- validSkills.map(({ skillId, category }) => [
530
- category,
531
- [{ id: skillId, preloaded: false }]
532
- ])
533
- )
533
+ Object.fromEntries(grouped)
534
534
  ])
535
535
  ) : void 0;
536
536
  const skills = options?.skillConfigs ?? selectedSkillIds.map((id) => ({ id, scope: "project", source: "local" }));
@@ -559,22 +559,6 @@ function buildStackProperty(stack) {
559
559
  }).filter(([, mappings]) => typedKeys(mappings).length > 0)
560
560
  );
561
561
  }
562
- function compactAssignment(assignment) {
563
- return assignment.preloaded ? { id: assignment.id, preloaded: true } : assignment.id;
564
- }
565
- function compactStackForYaml(stack) {
566
- return Object.fromEntries(
567
- typedEntries(stack).map(([agentId, agentConfig]) => {
568
- const compacted = Object.fromEntries(
569
- typedEntries(agentConfig).filter(([, assignments]) => assignments && assignments.length > 0).map(([category, assignments]) => [
570
- category,
571
- assignments.length === 1 ? compactAssignment(assignments[0]) : assignments.map(compactAssignment)
572
- ])
573
- );
574
- return [agentId, compacted];
575
- }).filter(([, compacted]) => Object.keys(compacted).length > 0)
576
- );
577
- }
578
562
  function splitConfigByScope(config) {
579
563
  const globalSkills = config.skills.filter((s) => s.scope === "global");
580
564
  const projectSkills = config.skills.filter((s) => s.scope === "project");
@@ -979,9 +963,11 @@ function formatSkillUnion(skills) {
979
963
  }
980
964
  function generateStackAgentConfig(skillsByCategory) {
981
965
  if (skillsByCategory.size === 0) {
982
- return "export type StackAgentConfig = Partial<Record<Category, SkillAssignment>>;";
966
+ return "export type StackAgentConfig = Partial<Record<Category, SkillAssignment[]>>;";
983
967
  }
984
- const properties = [...skillsByCategory.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([category, skills]) => ` "${category}"?: SkillAssignment<${formatSkillUnion(skills)}>;`);
968
+ const properties = [...skillsByCategory.entries()].sort(([a], [b]) => a.localeCompare(b)).map(
969
+ ([category, skills]) => ` "${category}"?: SkillAssignment<${formatSkillUnion(skills)}>[];`
970
+ );
985
971
  return ["export type StackAgentConfig = {", ...properties, "};"].join("\n");
986
972
  }
987
973
  function buildSkillsByCategory(skillIds, categories, matrix2) {
@@ -1004,7 +990,7 @@ function loadConfigTypesDataInBackground(sourceFlag, projectDir) {
1004
990
  if (!await directoryExists(claudeSrcDir)) {
1005
991
  throw new Error(`${CLAUDE_SRC_DIR}/ not found \u2014 run '${CLI_BIN_NAME} init' first`);
1006
992
  }
1007
- const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-FMDHHYDQ.js");
993
+ const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-TV2TFYGI.js");
1008
994
  const { loadAllAgents: loadAllAgents2 } = await import("./loader-4XPDVCZK.js");
1009
995
  const sourceResult = await loadSkillsMatrixFromSource2({
1010
996
  sourceFlag,
@@ -1214,7 +1200,7 @@ export type Domain = ${domainUnion};
1214
1200
  export type Category = ${categoryUnion};
1215
1201
 
1216
1202
  ${PROJECT_CONFIG_TYPES_BEFORE}
1217
- export type StackAgentConfig = Partial<Record<Category, SkillAssignment>>;
1203
+ export type StackAgentConfig = Partial<Record<Category, SkillAssignment[]>>;
1218
1204
 
1219
1205
  ${PROJECT_CONFIG_INTERFACE_AFTER}`;
1220
1206
  }
@@ -1235,8 +1221,31 @@ function formatExtendedUnion(globalTypeName, projectMembers) {
1235
1221
  // src/cli/lib/configuration/config-writer.ts
1236
1222
  var EXTRACTED_FIELDS = /* @__PURE__ */ new Set(["skills", "agents", "stack", "domains"]);
1237
1223
  function generateConfigSource(config, options) {
1238
- const serializable = config.stack ? { ...config, stack: compactStackForYaml(config.stack) } : { ...config };
1239
- const cleaned = JSON.parse(JSON.stringify(serializable));
1224
+ if (options?.isProjectConfig) {
1225
+ if (options.globalConfig) {
1226
+ const cleanedProject = JSON.parse(JSON.stringify(config));
1227
+ const cleanedGlobal = JSON.parse(
1228
+ JSON.stringify(options.globalConfig)
1229
+ );
1230
+ if (cleanedProject.stack) {
1231
+ cleanedProject.stack = compactStackAssignments(
1232
+ cleanedProject.stack
1233
+ );
1234
+ }
1235
+ if (cleanedGlobal.stack) {
1236
+ cleanedGlobal.stack = compactStackAssignments(
1237
+ cleanedGlobal.stack
1238
+ );
1239
+ }
1240
+ return generateProjectConfigWithInlinedGlobal(cleanedProject, cleanedGlobal);
1241
+ }
1242
+ }
1243
+ const cleaned = JSON.parse(JSON.stringify(config));
1244
+ if (cleaned.stack) {
1245
+ cleaned.stack = compactStackAssignments(
1246
+ cleaned.stack
1247
+ );
1248
+ }
1240
1249
  if (options?.isProjectConfig) {
1241
1250
  return generateProjectConfigWithGlobalImport(cleaned, getGlobalConfigImportPath());
1242
1251
  }
@@ -1385,6 +1394,141 @@ function generateProjectConfigWithGlobalImport(cleaned, globalImportPath) {
1385
1394
  lines.push(``);
1386
1395
  return lines.join("\n");
1387
1396
  }
1397
+ function generateProjectConfigWithInlinedGlobal(cleaned, cleanedGlobal) {
1398
+ const projectSkillsArr = cleaned.skills ?? [];
1399
+ const projectAgentsArr = cleaned.agents ?? [];
1400
+ const projectStackObj = cleaned.stack;
1401
+ const projectDomainsArr = cleaned.domains ?? [];
1402
+ const projectSelectedAgentsArr = cleaned.selectedAgents ?? [];
1403
+ const globalSkillsArr = cleanedGlobal.skills ?? [];
1404
+ const globalAgentsArr = cleanedGlobal.agents ?? [];
1405
+ const globalDomainsArr = cleanedGlobal.domains ?? [];
1406
+ const globalSelectedAgentsArr = cleanedGlobal.selectedAgents ?? [];
1407
+ const hasGlobalSkills = globalSkillsArr.length > 0;
1408
+ const hasProjectSkills = projectSkillsArr.length > 0;
1409
+ const hasSkills = hasGlobalSkills || hasProjectSkills;
1410
+ const hasGlobalAgents = globalAgentsArr.length > 0;
1411
+ const hasProjectAgents = projectAgentsArr.length > 0;
1412
+ const hasAgents = hasGlobalAgents || hasProjectAgents;
1413
+ const projectAgentNames = new Set(projectAgentsArr.map((a) => a.name));
1414
+ const filteredStack = projectStackObj ? Object.fromEntries(
1415
+ Object.entries(projectStackObj).filter(([agent]) => projectAgentNames.has(agent))
1416
+ ) : void 0;
1417
+ const hasStack = filteredStack != null && Object.keys(filteredStack).length > 0;
1418
+ const hasGlobalDomains = globalDomainsArr.length > 0;
1419
+ const hasProjectDomains = projectDomainsArr.length > 0;
1420
+ const hasDomains = hasGlobalDomains || hasProjectDomains;
1421
+ const typeImports = buildTypeImports({ hasSkills, hasAgents, hasStack, hasDomains });
1422
+ const lines = [`import type { ${typeImports} } from "./config-types";`];
1423
+ if (hasSkills) {
1424
+ lines.push(``);
1425
+ lines.push(`const skills: SkillConfig[] = [`);
1426
+ if (hasGlobalSkills) {
1427
+ lines.push(` // global`);
1428
+ for (const s of globalSkillsArr) {
1429
+ lines.push(` ${JSON.stringify(s)},`);
1430
+ }
1431
+ }
1432
+ if (hasProjectSkills) {
1433
+ lines.push(` // project`);
1434
+ for (const s of projectSkillsArr) {
1435
+ lines.push(` ${JSON.stringify(s)},`);
1436
+ }
1437
+ }
1438
+ lines.push(`];`);
1439
+ }
1440
+ if (hasAgents) {
1441
+ lines.push(``);
1442
+ lines.push(`const agents: AgentScopeConfig[] = [`);
1443
+ if (hasGlobalAgents) {
1444
+ lines.push(` // global`);
1445
+ for (const a of globalAgentsArr) {
1446
+ lines.push(` ${JSON.stringify(a)},`);
1447
+ }
1448
+ }
1449
+ if (hasProjectAgents) {
1450
+ lines.push(` // project`);
1451
+ for (const a of projectAgentsArr) {
1452
+ lines.push(` ${JSON.stringify(a)},`);
1453
+ }
1454
+ }
1455
+ lines.push(`];`);
1456
+ }
1457
+ if (hasStack) {
1458
+ lines.push(``);
1459
+ const stackBody = JSON.stringify(filteredStack, null, 2);
1460
+ lines.push(`const stack: Partial<Record<AgentName, StackAgentConfig>> = ${stackBody};`);
1461
+ }
1462
+ if (hasDomains) {
1463
+ lines.push(``);
1464
+ const allDomains = [.../* @__PURE__ */ new Set([...globalDomainsArr, ...projectDomainsArr])];
1465
+ const items = allDomains.map((d) => JSON.stringify(d)).join(", ");
1466
+ lines.push(`const domains: Domain[] = [${items}];`);
1467
+ }
1468
+ const projectName = cleaned.name && cleaned.name !== "global" ? cleaned.name : DEFAULT_PLUGIN_NAME;
1469
+ const exportFields = [];
1470
+ exportFields.push(` name: ${JSON.stringify(projectName)},`);
1471
+ const projectScalarFields = Object.entries(cleaned).filter(
1472
+ ([key]) => !EXTRACTED_FIELDS.has(key) && key !== "name" && key !== "selectedAgents"
1473
+ );
1474
+ const projectScalarKeys = new Set(projectScalarFields.map(([key]) => key));
1475
+ const globalScalarFields = Object.entries(cleanedGlobal).filter(
1476
+ ([key]) => !EXTRACTED_FIELDS.has(key) && key !== "name" && key !== "selectedAgents" && !projectScalarKeys.has(key)
1477
+ );
1478
+ for (const [key, value] of globalScalarFields) {
1479
+ exportFields.push(` ${JSON.stringify(key)}: ${JSON.stringify(value)},`);
1480
+ }
1481
+ for (const [key, value] of projectScalarFields) {
1482
+ exportFields.push(` ${JSON.stringify(key)}: ${JSON.stringify(value)},`);
1483
+ }
1484
+ if (hasSkills) {
1485
+ exportFields.push(` skills,`);
1486
+ } else {
1487
+ exportFields.push(` skills: [],`);
1488
+ }
1489
+ if (hasAgents) {
1490
+ exportFields.push(` agents,`);
1491
+ } else {
1492
+ exportFields.push(` agents: [],`);
1493
+ }
1494
+ if (hasStack) {
1495
+ exportFields.push(` stack,`);
1496
+ }
1497
+ if (hasDomains) {
1498
+ exportFields.push(` domains,`);
1499
+ }
1500
+ const allSelectedAgents = [.../* @__PURE__ */ new Set([...globalSelectedAgentsArr, ...projectSelectedAgentsArr])];
1501
+ if (allSelectedAgents.length > 0) {
1502
+ const items = allSelectedAgents.map((a) => JSON.stringify(a)).join(", ");
1503
+ exportFields.push(` "selectedAgents": [${items}],`);
1504
+ }
1505
+ lines.push(``);
1506
+ lines.push(`export default {`);
1507
+ lines.push(...exportFields);
1508
+ lines.push(`} satisfies ProjectConfig;`);
1509
+ lines.push(``);
1510
+ return lines.join("\n");
1511
+ }
1512
+ function compactStackAssignments(stack) {
1513
+ const result = {};
1514
+ for (const [agent, categories] of Object.entries(stack)) {
1515
+ const compactedCategories = {};
1516
+ for (const [category, assignments] of Object.entries(categories)) {
1517
+ if (!Array.isArray(assignments) || assignments.length === 0) continue;
1518
+ compactedCategories[category] = assignments.map((a) => {
1519
+ if (typeof a === "object" && a !== null && "id" in a && "preloaded" in a) {
1520
+ const assignment = a;
1521
+ return assignment.preloaded ? { id: assignment.id, preloaded: true } : assignment.id;
1522
+ }
1523
+ return a;
1524
+ });
1525
+ }
1526
+ if (Object.keys(compactedCategories).length > 0) {
1527
+ result[agent] = compactedCategories;
1528
+ }
1529
+ }
1530
+ return result;
1531
+ }
1388
1532
  function getGlobalConfigImportPath() {
1389
1533
  return path6.join(os4.homedir(), CLAUDE_SRC_DIR);
1390
1534
  }
@@ -1411,7 +1555,7 @@ export type Domain = never;
1411
1555
  export type Category = never;
1412
1556
 
1413
1557
  ${PROJECT_CONFIG_TYPES_BEFORE}
1414
- export type StackAgentConfig = Partial<Record<Category, SkillAssignment>>;
1558
+ export type StackAgentConfig = Partial<Record<Category, SkillAssignment[]>>;
1415
1559
 
1416
1560
  ${PROJECT_CONFIG_INTERFACE_AFTER}`;
1417
1561
  }
@@ -3850,44 +3994,6 @@ async function writeStandaloneConfigTypes(configPath, matrix2, agents, finalConf
3850
3994
  );
3851
3995
  await writeFile(typesPath, source);
3852
3996
  }
3853
- async function writeProjectConfigTypes(projectConfigPath, projectDir, projectConfig, matrix2) {
3854
- const typesPath = path20.join(path20.dirname(projectConfigPath), STANDARD_FILES.CONFIG_TYPES_TS);
3855
- const projectClaudeSrc = path20.join(projectDir, CLAUDE_SRC_DIR);
3856
- const globalClaudeSrc = path20.join(os8.homedir(), CLAUDE_SRC_DIR);
3857
- const relativePath = path20.relative(projectClaudeSrc, globalClaudeSrc);
3858
- const globalTypesImportPath = relativePath.split(path20.sep).join("/");
3859
- const projectSkillIds = projectConfig?.skills.map((s) => s.id) ?? [];
3860
- const projectAgentNames = projectConfig?.agents.map((a) => a.name) ?? [];
3861
- let projectCategories = [];
3862
- let projectDomains = [];
3863
- if (matrix2 && projectSkillIds.length > 0) {
3864
- const categorySet = /* @__PURE__ */ new Set();
3865
- for (const id of projectSkillIds) {
3866
- const skill = matrix2.skills[id];
3867
- if (skill?.category && skill.category !== "local") {
3868
- categorySet.add(skill.category);
3869
- }
3870
- }
3871
- projectCategories = [...categorySet].sort();
3872
- const domainSet = /* @__PURE__ */ new Set();
3873
- for (const cat of projectCategories) {
3874
- const domain = getCategoryDomain(cat);
3875
- if (domain) {
3876
- domainSet.add(domain);
3877
- }
3878
- }
3879
- projectDomains = [...domainSet].sort();
3880
- }
3881
- const source = generateProjectConfigTypesSource({
3882
- globalTypesImportPath,
3883
- projectSkillIds,
3884
- projectAgentNames,
3885
- projectDomains,
3886
- projectCategories
3887
- });
3888
- await writeFile(typesPath, source);
3889
- verbose("Using project config-types.ts that imports from global");
3890
- }
3891
3997
  async function writeScopedConfigs(finalConfig, matrix2, agents, projectDir, projectConfigPath, projectInstallationExists) {
3892
3998
  const homeDir = os8.homedir();
3893
3999
  const isProjectContext = fs.realpathSync(projectDir) !== fs.realpathSync(homeDir);
@@ -3906,9 +4012,12 @@ async function writeScopedConfigs(finalConfig, matrix2, agents, projectDir, proj
3906
4012
  const hasProjectItems = projectSplitConfig.skills.length > 0 || projectSplitConfig.agents.length > 0;
3907
4013
  if (projectInstallationExists || hasProjectItems) {
3908
4014
  await ensureDir(path20.dirname(projectConfigPath));
3909
- await writeConfigFile(projectSplitConfig, projectConfigPath, { isProjectConfig: true });
4015
+ await writeConfigFile(projectSplitConfig, projectConfigPath, {
4016
+ isProjectConfig: true,
4017
+ globalConfig
4018
+ });
3910
4019
  verbose(`Updated project config at ${projectConfigPath}`);
3911
- await writeProjectConfigTypes(projectConfigPath, projectDir, projectSplitConfig, matrix2);
4020
+ await writeStandaloneConfigTypes(projectConfigPath, matrix2, agents, finalConfig);
3912
4021
  } else {
3913
4022
  verbose(
3914
4023
  "Skipped project config \u2014 no existing project installation and no project-scoped items"
@@ -5619,4 +5728,4 @@ export {
5619
5728
  validateAllPlugins,
5620
5729
  printPluginValidationResult
5621
5730
  };
5622
- //# sourceMappingURL=chunk-KB6LCTCD.js.map
5731
+ //# sourceMappingURL=chunk-C2KXQHOI.js.map