@agents-inc/cli 0.65.0 → 0.71.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 (132) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/dist/chunk-2MHSOPIU.js +84 -0
  3. package/dist/chunk-2MHSOPIU.js.map +1 -0
  4. package/dist/{chunk-BGPGQF35.js → chunk-2VT2DMD7.js} +6 -6
  5. package/dist/{chunk-FGLUQSVU.js → chunk-6BXKF5GP.js} +2 -2
  6. package/dist/{chunk-KFDTVSIC.js → chunk-6YMW4HMX.js} +2 -2
  7. package/dist/{chunk-6DEK3TDF.js → chunk-AX6MMYAZ.js} +4 -4
  8. package/dist/{chunk-53URJ5XK.js → chunk-CADG5WWP.js} +32 -30
  9. package/dist/chunk-CADG5WWP.js.map +1 -0
  10. package/dist/chunk-DA3WIZ4C.js +253 -0
  11. package/dist/chunk-DA3WIZ4C.js.map +1 -0
  12. package/dist/chunk-DHBRWGRZ.js +58 -0
  13. package/dist/chunk-DHBRWGRZ.js.map +1 -0
  14. package/dist/{chunk-EE5EPS32.js → chunk-FCF4WQEI.js} +2 -2
  15. package/dist/{chunk-J4POGAJF.js → chunk-HWVRHPXR.js} +2 -2
  16. package/dist/{chunk-N4D43IOO.js → chunk-J2D6OBIX.js} +26 -2
  17. package/dist/chunk-J2D6OBIX.js.map +1 -0
  18. package/dist/{chunk-O2HK3NTG.js → chunk-KANNRFY7.js} +2 -2
  19. package/dist/{chunk-YEGPTBX5.js → chunk-KSAGOKWT.js} +3 -3
  20. package/dist/{chunk-EC3UJRKZ.js → chunk-KWB3B2HS.js} +92 -163
  21. package/dist/chunk-KWB3B2HS.js.map +1 -0
  22. package/dist/{chunk-7DI3HGKL.js → chunk-KYULKBFC.js} +2 -2
  23. package/dist/chunk-KYULKBFC.js.map +1 -0
  24. package/dist/{chunk-F3REOP7N.js → chunk-L6MTIQ2U.js} +2 -2
  25. package/dist/{chunk-4C7CSZC5.js → chunk-QOJAZI72.js} +3 -3
  26. package/dist/{chunk-LMZXL5RQ.js → chunk-R3AR4VLZ.js} +11 -11
  27. package/dist/chunk-R3AR4VLZ.js.map +1 -0
  28. package/dist/{chunk-OORWBS6F.js → chunk-UDAHHJIM.js} +16 -10
  29. package/dist/chunk-UDAHHJIM.js.map +1 -0
  30. package/dist/{chunk-ZFY5EMDV.js → chunk-UQM5YPPJ.js} +4 -4
  31. package/dist/{chunk-WSMQ5GAP.js → chunk-V5L532ZH.js} +6 -6
  32. package/dist/{chunk-4KVBH2X4.js → chunk-VUUGWE6G.js} +3 -3
  33. package/dist/chunk-WF5PMBIR.js +54 -0
  34. package/dist/chunk-WF5PMBIR.js.map +1 -0
  35. package/dist/{chunk-R46CB36B.js → chunk-X4RIMJNY.js} +4 -4
  36. package/dist/{chunk-RG3KDXMR.js → chunk-XB3TYSPL.js} +3 -3
  37. package/dist/{chunk-EZ35IPXZ.js → chunk-XMZNHLV3.js} +2 -2
  38. package/dist/{chunk-3YNT3NX3.js → chunk-XYRVAEI6.js} +76 -113
  39. package/dist/chunk-XYRVAEI6.js.map +1 -0
  40. package/dist/commands/build/marketplace.js +3 -3
  41. package/dist/commands/build/plugins.js +6 -6
  42. package/dist/commands/build/stack.js +6 -6
  43. package/dist/commands/compile.js +6 -6
  44. package/dist/commands/config/index.js +6 -6
  45. package/dist/commands/config/path.js +5 -5
  46. package/dist/commands/config/show.js +6 -6
  47. package/dist/commands/diff.js +5 -5
  48. package/dist/commands/doctor.js +5 -5
  49. package/dist/commands/edit.js +45 -24
  50. package/dist/commands/edit.js.map +1 -1
  51. package/dist/commands/eject.js +5 -5
  52. package/dist/commands/import/skill.js +5 -5
  53. package/dist/commands/info.js +5 -5
  54. package/dist/commands/init.js +22 -21
  55. package/dist/commands/list.js +5 -5
  56. package/dist/commands/new/agent.js +6 -6
  57. package/dist/commands/new/marketplace.js +7 -7
  58. package/dist/commands/new/skill.js +6 -6
  59. package/dist/commands/outdated.js +5 -5
  60. package/dist/commands/search.js +5 -5
  61. package/dist/commands/uninstall.js +5 -5
  62. package/dist/commands/update.js +6 -6
  63. package/dist/commands/validate.js +5 -5
  64. package/dist/components/common/select-list.js +11 -0
  65. package/dist/components/wizard/category-grid.test.js +6 -6
  66. package/dist/components/wizard/domain-selection.js +6 -6
  67. package/dist/components/wizard/help-modal.js +1 -1
  68. package/dist/components/wizard/search-modal.js +2 -1
  69. package/dist/components/wizard/search-modal.test.js +3 -2
  70. package/dist/components/wizard/search-modal.test.js.map +1 -1
  71. package/dist/components/wizard/source-grid.js +3 -2
  72. package/dist/components/wizard/source-grid.test.js +14 -10
  73. package/dist/components/wizard/source-grid.test.js.map +1 -1
  74. package/dist/components/wizard/stack-selection.js +6 -6
  75. package/dist/components/wizard/step-agents.js +6 -6
  76. package/dist/components/wizard/step-agents.test.js +10 -9
  77. package/dist/components/wizard/step-agents.test.js.map +1 -1
  78. package/dist/components/wizard/step-build.js +7 -7
  79. package/dist/components/wizard/step-build.test.js +17 -52
  80. package/dist/components/wizard/step-build.test.js.map +1 -1
  81. package/dist/components/wizard/step-confirm.test.js +6 -6
  82. package/dist/components/wizard/step-settings.js +5 -5
  83. package/dist/components/wizard/step-settings.test.js +8 -8
  84. package/dist/components/wizard/step-sources.js +10 -9
  85. package/dist/components/wizard/step-sources.test.js +15 -13
  86. package/dist/components/wizard/step-sources.test.js.map +1 -1
  87. package/dist/components/wizard/step-stack.js +9 -9
  88. package/dist/components/wizard/step-stack.test.js +10 -10
  89. package/dist/components/wizard/wizard-layout.js +7 -7
  90. package/dist/components/wizard/wizard.js +20 -19
  91. package/dist/config-exports.js +1 -1
  92. package/dist/hooks/init.js +22 -21
  93. package/dist/hooks/init.js.map +1 -1
  94. package/dist/{loader-4YOZCFIP.js → loader-CMSC3RAO.js} +3 -3
  95. package/dist/{source-loader-O5RMYUBW.js → source-loader-3MZ2MBOF.js} +5 -5
  96. package/dist/{source-manager-NKLL6HCL.js → source-manager-NEH6QXE5.js} +5 -5
  97. package/dist/source-manager-NEH6QXE5.js.map +1 -0
  98. package/dist/stores/matrix-store.test.js +17 -13
  99. package/dist/stores/matrix-store.test.js.map +1 -1
  100. package/dist/stores/wizard-store.js +5 -5
  101. package/dist/stores/wizard-store.test.js +31 -106
  102. package/dist/stores/wizard-store.test.js.map +1 -1
  103. package/package.json +1 -1
  104. package/src/schemas/metadata.schema.json +1 -1
  105. package/dist/chunk-3YNT3NX3.js.map +0 -1
  106. package/dist/chunk-53URJ5XK.js.map +0 -1
  107. package/dist/chunk-6IK2TCK7.js +0 -97
  108. package/dist/chunk-6IK2TCK7.js.map +0 -1
  109. package/dist/chunk-7DI3HGKL.js.map +0 -1
  110. package/dist/chunk-EC3UJRKZ.js.map +0 -1
  111. package/dist/chunk-LMZXL5RQ.js.map +0 -1
  112. package/dist/chunk-N4D43IOO.js.map +0 -1
  113. package/dist/chunk-OORWBS6F.js.map +0 -1
  114. /package/dist/{chunk-BGPGQF35.js.map → chunk-2VT2DMD7.js.map} +0 -0
  115. /package/dist/{chunk-FGLUQSVU.js.map → chunk-6BXKF5GP.js.map} +0 -0
  116. /package/dist/{chunk-KFDTVSIC.js.map → chunk-6YMW4HMX.js.map} +0 -0
  117. /package/dist/{chunk-6DEK3TDF.js.map → chunk-AX6MMYAZ.js.map} +0 -0
  118. /package/dist/{chunk-EE5EPS32.js.map → chunk-FCF4WQEI.js.map} +0 -0
  119. /package/dist/{chunk-J4POGAJF.js.map → chunk-HWVRHPXR.js.map} +0 -0
  120. /package/dist/{chunk-O2HK3NTG.js.map → chunk-KANNRFY7.js.map} +0 -0
  121. /package/dist/{chunk-YEGPTBX5.js.map → chunk-KSAGOKWT.js.map} +0 -0
  122. /package/dist/{chunk-F3REOP7N.js.map → chunk-L6MTIQ2U.js.map} +0 -0
  123. /package/dist/{chunk-4C7CSZC5.js.map → chunk-QOJAZI72.js.map} +0 -0
  124. /package/dist/{chunk-ZFY5EMDV.js.map → chunk-UQM5YPPJ.js.map} +0 -0
  125. /package/dist/{chunk-WSMQ5GAP.js.map → chunk-V5L532ZH.js.map} +0 -0
  126. /package/dist/{chunk-4KVBH2X4.js.map → chunk-VUUGWE6G.js.map} +0 -0
  127. /package/dist/{chunk-R46CB36B.js.map → chunk-X4RIMJNY.js.map} +0 -0
  128. /package/dist/{chunk-RG3KDXMR.js.map → chunk-XB3TYSPL.js.map} +0 -0
  129. /package/dist/{chunk-EZ35IPXZ.js.map → chunk-XMZNHLV3.js.map} +0 -0
  130. /package/dist/{loader-4YOZCFIP.js.map → components/common/select-list.js.map} +0 -0
  131. /package/dist/{source-loader-O5RMYUBW.js.map → loader-CMSC3RAO.js.map} +0 -0
  132. /package/dist/{source-manager-NKLL6HCL.js.map → source-loader-3MZ2MBOF.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,76 @@ 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.71.0] - 2026-03-11
11
+
12
+ **Reusable SelectList component, Dashboard and GlobalConfigPrompt UX overhaul**
13
+
14
+ - New `SelectList<T>` component for vertical single-select lists
15
+ - Dashboard simplified to vertical menu (no stats display)
16
+ - Screen clears between successive Ink renders
17
+
18
+ See [changelogs/0.71.0.md](./changelogs/0.71.0.md) for full details.
19
+
20
+ ---
21
+
22
+ ## [0.70.0] - 2026-03-11
23
+
24
+ **Centralize remaining test data (R-09b)**
25
+
26
+ - Pre-built matrix constants and config factories replace inline test data construction
27
+ - CLAUDE.md conventions updated for new test data patterns
28
+
29
+ See [changelogs/0.70.0.md](./changelogs/0.70.0.md) for full details.
30
+
31
+ ---
32
+
33
+ ## [0.69.0] - 2026-03-11
34
+
35
+ **loadStackById default stacks fallback (R-01)**
36
+
37
+ - `loadStackById` now checks built-in default stacks internally
38
+ - R-07 codegen plan for source-derived type unions
39
+
40
+ See [changelogs/0.69.0.md](./changelogs/0.69.0.md) for full details.
41
+
42
+ ---
43
+
44
+ ## [0.68.0] - 2026-03-11
45
+
46
+ **Per-agent scope in edit mode (D-74)**
47
+
48
+ - Edit command detects and displays agent scope changes (project/global)
49
+ - Agent scope configs restored when entering edit mode
50
+ - Help modal shows `S` key for agent scope toggle
51
+
52
+ See [changelogs/0.68.0.md](./changelogs/0.68.0.md) for full details.
53
+
54
+ ---
55
+
56
+ ## [0.67.0] - 2026-03-11
57
+
58
+ **Split init-wizard E2E tests for parallel execution (D-73)**
59
+
60
+ - Monolithic `init-wizard.e2e.test.ts` (55 tests) split into 7 independent files
61
+ - ~3.8x speedup from parallel execution (~3.5min → ~55s)
62
+ - TODO tracker cleanup: 8 tasks marked complete
63
+
64
+ See [changelogs/0.67.0.md](./changelogs/0.67.0.md) for full details.
65
+
66
+ ---
67
+
68
+ ## [0.66.0] - 2026-03-11
69
+
70
+ **Slug-based relationship rules (R-04 Phase 2)**
71
+
72
+ - All relationship rule types now reference skills by slug (`"react"`) instead of canonical ID (`"web-framework-react"`)
73
+ - `slug` field now required in metadata.schema.json (Step 7 finalized)
74
+ - 9 new E2E tests for slug-based relationship validation
75
+
76
+ See [changelogs/0.66.0.md](./changelogs/0.66.0.md) for full details.
77
+
78
+ ---
79
+
10
80
  ## [0.65.0] - 2026-03-11
11
81
 
12
82
  **Narrowed config types, edit command refactor, test consolidation (R-09)**
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ SelectList
4
+ } from "./chunk-WF5PMBIR.js";
5
+ import {
6
+ KEY_LABEL_ARROWS_VERT,
7
+ KEY_LABEL_ENTER,
8
+ KEY_LABEL_ESC
9
+ } from "./chunk-6VIOO74O.js";
10
+ import {
11
+ CLI_COLORS
12
+ } from "./chunk-EGMQ3SXN.js";
13
+ import {
14
+ init_esm_shims
15
+ } from "./chunk-DHET7RCE.js";
16
+
17
+ // src/cli/components/wizard/search-modal.tsx
18
+ init_esm_shims();
19
+ import { Box, Text } from "ink";
20
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
21
+ function candidateToItem(candidate) {
22
+ return {
23
+ label: `${candidate.sourceName}/${candidate.id}`,
24
+ value: candidate
25
+ };
26
+ }
27
+ var SearchModal = ({
28
+ results,
29
+ alias,
30
+ onBind,
31
+ onClose,
32
+ active
33
+ }) => {
34
+ const items = results.map(candidateToItem);
35
+ return /* @__PURE__ */ jsxs(
36
+ Box,
37
+ {
38
+ flexDirection: "column",
39
+ borderStyle: "single",
40
+ borderColor: CLI_COLORS.NEUTRAL,
41
+ paddingX: 1,
42
+ paddingY: 0,
43
+ marginTop: 1,
44
+ children: [
45
+ /* @__PURE__ */ jsxs(Text, { bold: true, children: [
46
+ 'Search results for "',
47
+ alias,
48
+ '"'
49
+ ] }),
50
+ /* @__PURE__ */ jsx(Text, { children: " " }),
51
+ results.length === 0 ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: "No results found" }) : /* @__PURE__ */ jsx(
52
+ SelectList,
53
+ {
54
+ items,
55
+ onSelect: onBind,
56
+ onCancel: onClose,
57
+ active,
58
+ renderItem: (item, isFocused) => /* @__PURE__ */ jsxs(Fragment, { children: [
59
+ /* @__PURE__ */ jsx(Text, { bold: isFocused, color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: item.label }),
60
+ item.value.description && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
61
+ " ",
62
+ item.value.description
63
+ ] })
64
+ ] })
65
+ }
66
+ ),
67
+ /* @__PURE__ */ jsx(Text, { children: " " }),
68
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
69
+ KEY_LABEL_ARROWS_VERT,
70
+ " navigate ",
71
+ KEY_LABEL_ENTER,
72
+ " bind ",
73
+ KEY_LABEL_ESC,
74
+ " close"
75
+ ] })
76
+ ]
77
+ }
78
+ );
79
+ };
80
+
81
+ export {
82
+ SearchModal
83
+ };
84
+ //# sourceMappingURL=chunk-2MHSOPIU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/search-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport type { BoundSkillCandidate } from \"../../types/index.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { SelectList, type SelectListItem } from \"../common/select-list.js\";\nimport { KEY_LABEL_ARROWS_VERT, KEY_LABEL_ENTER, KEY_LABEL_ESC } from \"./hotkeys.js\";\n\nexport type SearchModalProps = {\n results: BoundSkillCandidate[];\n alias: string;\n onBind: (candidate: BoundSkillCandidate) => void;\n onClose: () => void;\n active?: boolean;\n};\n\nfunction candidateToItem(candidate: BoundSkillCandidate): SelectListItem<BoundSkillCandidate> {\n return {\n label: `${candidate.sourceName}/${candidate.id}`,\n value: candidate,\n };\n}\n\nexport const SearchModal: React.FC<SearchModalProps> = ({\n results,\n alias,\n onBind,\n onClose,\n active,\n}) => {\n const items = results.map(candidateToItem);\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={CLI_COLORS.NEUTRAL}\n paddingX={1}\n paddingY={0}\n marginTop={1}\n >\n <Text bold>Search results for &quot;{alias}&quot;</Text>\n <Text> </Text>\n\n {results.length === 0 ? (\n <Text dimColor>No results found</Text>\n ) : (\n <SelectList\n items={items}\n onSelect={onBind}\n onCancel={onClose}\n active={active}\n renderItem={(item, isFocused) => (\n <>\n <Text bold={isFocused} color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {item.label}\n </Text>\n {item.value.description && (\n <Text dimColor>\n {\" \"}\n {item.value.description}\n </Text>\n )}\n </>\n )}\n />\n )}\n\n <Text> </Text>\n <Text dimColor>\n {KEY_LABEL_ARROWS_VERT} navigate {KEY_LABEL_ENTER} bind {KEY_LABEL_ESC} close\n </Text>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAuCpB,SAYM,UAXN,KADA;AAzBN,SAAS,gBAAgB,WAAqE;AAC5F,SAAO;AAAA,IACL,OAAO,GAAG,UAAU,UAAU,IAAI,UAAU,EAAE;AAAA,IAC9C,OAAO;AAAA,EACT;AACF;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,QAAQ,IAAI,eAAe;AAEzC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAa,WAAW;AAAA,MACxB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MAEX;AAAA,6BAAC,QAAK,MAAI,MAAC;AAAA;AAAA,UAA0B;AAAA,UAAM;AAAA,WAAM;AAAA,QACjD,oBAAC,QAAK,eAAC;AAAA,QAEN,QAAQ,WAAW,IAClB,oBAAC,QAAK,UAAQ,MAAC,8BAAgB,IAE/B;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,YACV;AAAA,YACA,YAAY,CAAC,MAAM,cACjB,iCACE;AAAA,kCAAC,QAAK,MAAM,WAAW,OAAO,YAAY,WAAW,UAAU,QAC5D,eAAK,OACR;AAAA,cACC,KAAK,MAAM,eACV,qBAAC,QAAK,UAAQ,MACX;AAAA;AAAA,gBACA,KAAK,MAAM;AAAA,iBACd;AAAA,eAEJ;AAAA;AAAA,QAEJ;AAAA,QAGF,oBAAC,QAAK,eAAC;AAAA,QACP,qBAAC,QAAK,UAAQ,MACX;AAAA;AAAA,UAAsB;AAAA,UAAW;AAAA,UAAgB;AAAA,UAAO;AAAA,UAAc;AAAA,WACzE;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -2,19 +2,19 @@
2
2
  import {
3
3
  useMeasuredHeight
4
4
  } from "./chunk-K77I4XGL.js";
5
- import {
6
- CategoryGrid
7
- } from "./chunk-CKPJTMNC.js";
8
5
  import {
9
6
  getDomainDisplayName,
10
7
  orderDomains
11
8
  } from "./chunk-ZYUASJUN.js";
9
+ import {
10
+ CategoryGrid
11
+ } from "./chunk-CKPJTMNC.js";
12
12
  import {
13
13
  ViewTitle
14
14
  } from "./chunk-AQYAVLZK.js";
15
15
  import {
16
16
  useWizardStore
17
- } from "./chunk-4C7CSZC5.js";
17
+ } from "./chunk-QOJAZI72.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-53URJ5XK.js";
25
+ } from "./chunk-CADG5WWP.js";
26
26
  import {
27
27
  findSkill,
28
28
  getMatrix
@@ -245,4 +245,4 @@ export {
245
245
  validateBuildStep,
246
246
  StepBuild
247
247
  };
248
- //# sourceMappingURL=chunk-BGPGQF35.js.map
248
+ //# sourceMappingURL=chunk-2VT2DMD7.js.map
@@ -8,7 +8,7 @@ import {
8
8
  verbose,
9
9
  warn,
10
10
  writeFile
11
- } from "./chunk-LMZXL5RQ.js";
11
+ } from "./chunk-R3AR4VLZ.js";
12
12
  import {
13
13
  MAX_PLUGIN_FILE_SIZE
14
14
  } from "./chunk-EGMQ3SXN.js";
@@ -129,4 +129,4 @@ export {
129
129
  writeMarketplace,
130
130
  getMarketplaceStats
131
131
  };
132
- //# sourceMappingURL=chunk-FGLUQSVU.js.map
132
+ //# sourceMappingURL=chunk-6BXKF5GP.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-7SOPVGDV.js";
5
5
  import {
6
6
  SearchModal
7
- } from "./chunk-6IK2TCK7.js";
7
+ } from "./chunk-2MHSOPIU.js";
8
8
  import {
9
9
  useFocusedListItem
10
10
  } from "./chunk-GG4BSB6S.js";
@@ -259,4 +259,4 @@ var SourceGrid = ({
259
259
  export {
260
260
  SourceGrid
261
261
  };
262
- //# sourceMappingURL=chunk-KFDTVSIC.js.map
262
+ //# sourceMappingURL=chunk-6YMW4HMX.js.map
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StackSelection
4
- } from "./chunk-EZ35IPXZ.js";
4
+ } from "./chunk-XMZNHLV3.js";
5
5
  import {
6
6
  useMeasuredHeight
7
7
  } from "./chunk-K77I4XGL.js";
8
8
  import {
9
9
  DomainSelection
10
- } from "./chunk-O2HK3NTG.js";
10
+ } from "./chunk-KANNRFY7.js";
11
11
  import {
12
12
  ViewTitle
13
13
  } from "./chunk-AQYAVLZK.js";
14
14
  import {
15
15
  useWizardStore
16
- } from "./chunk-4C7CSZC5.js";
16
+ } from "./chunk-QOJAZI72.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-6DEK3TDF.js.map
40
+ //# sourceMappingURL=chunk-AX6MMYAZ.js.map
@@ -4,7 +4,7 @@ import {
4
4
  loadPluginSkills,
5
5
  loadSkillsByIds,
6
6
  parseFrontmatter
7
- } from "./chunk-F3REOP7N.js";
7
+ } from "./chunk-L6MTIQ2U.js";
8
8
  import {
9
9
  typedEntries,
10
10
  typedKeys
@@ -58,7 +58,7 @@ import {
58
58
  warn,
59
59
  warnUnknownFields,
60
60
  writeFile
61
- } from "./chunk-LMZXL5RQ.js";
61
+ } from "./chunk-R3AR4VLZ.js";
62
62
  import {
63
63
  CACHE_DIR,
64
64
  CACHE_HASH_LENGTH,
@@ -99,7 +99,7 @@ import {
99
99
  defaultCategories,
100
100
  defaultRules,
101
101
  defaultStacks
102
- } from "./chunk-EC3UJRKZ.js";
102
+ } from "./chunk-KWB3B2HS.js";
103
103
  import {
104
104
  init_esm_shims
105
105
  } from "./chunk-DHET7RCE.js";
@@ -692,12 +692,17 @@ async function loadStacks(configDir, stacksFile) {
692
692
  async function loadStackById(stackId, configDir) {
693
693
  const stacks = await loadStacks(configDir);
694
694
  const stack = stacks.find((s) => s.id === stackId);
695
- if (!stack) {
696
- verbose(`Stack '${stackId}' not found`);
697
- return null;
695
+ if (stack) {
696
+ verbose(`Found stack: ${stack.name} (${stackId})`);
697
+ return stack;
698
698
  }
699
- verbose(`Found stack: ${stack.name} (${stackId})`);
700
- return stack;
699
+ const defaultStack = defaultStacks.find((s) => s.id === stackId) ?? null;
700
+ if (defaultStack) {
701
+ verbose(`Found default stack: ${defaultStack.name} (${stackId})`);
702
+ } else {
703
+ verbose(`Stack '${stackId}' not found in source or defaults`);
704
+ }
705
+ return defaultStack;
701
706
  }
702
707
  function resolveAgentConfigToSkills(agentConfig) {
703
708
  return typedEntries(agentConfig).flatMap(
@@ -1263,18 +1268,18 @@ function buildDirectoryPathToIdMap(skills) {
1263
1268
  }
1264
1269
  return map;
1265
1270
  }
1266
- function resolveToCanonicalId(nameOrId, slugToId, directoryPathToId = {}, context) {
1267
- const slugResult = slugToId[nameOrId];
1271
+ function resolveToCanonicalId(slug, slugToId, directoryPathToId = {}, context) {
1272
+ const slugResult = slugToId[slug];
1268
1273
  if (slugResult) {
1269
1274
  return slugResult;
1270
1275
  }
1271
- if (directoryPathToId[nameOrId]) {
1272
- return directoryPathToId[nameOrId];
1276
+ if (directoryPathToId[slug]) {
1277
+ return directoryPathToId[slug];
1273
1278
  }
1274
1279
  if (context) {
1275
- verbose(`Unresolved ID '${nameOrId}' in ${context} \u2014 passing through as-is`);
1280
+ verbose(`Unresolved slug '${slug}' in ${context} \u2014 passing through as-is`);
1276
1281
  }
1277
- return nameOrId;
1282
+ return slug;
1278
1283
  }
1279
1284
  async function mergeMatrixWithSkills(categories, relationships, skills) {
1280
1285
  const slugMap = buildSlugMap(skills);
@@ -1313,7 +1318,7 @@ async function mergeMatrixWithSkills(categories, relationships, skills) {
1313
1318
  function resolveConflicts(skillId, conflictRules, resolve) {
1314
1319
  const conflicts = [];
1315
1320
  for (const rule of conflictRules) {
1316
- const resolved = rule.skills.map((id) => resolve(id, "conflicts"));
1321
+ const resolved = rule.skills.map((slug) => resolve(slug, "conflicts"));
1317
1322
  if (!resolved.includes(skillId)) continue;
1318
1323
  for (const other of resolved) {
1319
1324
  if (other !== skillId && !conflicts.some((c) => c.skillId === other)) {
@@ -1326,7 +1331,7 @@ function resolveConflicts(skillId, conflictRules, resolve) {
1326
1331
  function resolveCompatibilityGroups(skillId, compatibilityGroups, resolve) {
1327
1332
  const compatible = /* @__PURE__ */ new Set();
1328
1333
  for (const group of compatibilityGroups) {
1329
- const resolved = group.skills.map((id) => resolve(id, "compatibleWith"));
1334
+ const resolved = group.skills.map((slug) => resolve(slug, "compatibleWith"));
1330
1335
  if (!resolved.includes(skillId)) continue;
1331
1336
  for (const other of resolved) {
1332
1337
  if (other !== skillId) {
@@ -1341,7 +1346,7 @@ function resolveSetupPairs(skillId, setupPairs, resolve) {
1341
1346
  const providesSetupFor = /* @__PURE__ */ new Set();
1342
1347
  for (const pair of setupPairs) {
1343
1348
  const setupId = resolve(pair.setup, "setupPairs.setup");
1344
- const configuresIds = pair.configures.map((id) => resolve(id, "setupPairs.configures"));
1349
+ const configuresIds = pair.configures.map((slug) => resolve(slug, "setupPairs.configures"));
1345
1350
  if (setupId === skillId) {
1346
1351
  for (const configuredId of configuresIds) {
1347
1352
  providesSetupFor.add(configuredId);
@@ -1361,7 +1366,7 @@ function resolveRequirements(skillId, requireRules, resolve) {
1361
1366
  for (const rule of requireRules) {
1362
1367
  if (resolve(rule.skill, "requires.skill") !== skillId) continue;
1363
1368
  requires.push({
1364
- skillIds: rule.needs.map((id) => resolve(id, "requires.needs")),
1369
+ skillIds: rule.needs.map((slug) => resolve(slug, "requires.needs")),
1365
1370
  needsAny: rule.needsAny ?? false,
1366
1371
  reason: rule.reason
1367
1372
  });
@@ -1371,7 +1376,7 @@ function resolveRequirements(skillId, requireRules, resolve) {
1371
1376
  function resolveAlternatives(skillId, alternativeGroups, resolve) {
1372
1377
  const alternatives = [];
1373
1378
  for (const group of alternativeGroups) {
1374
- const resolved = group.skills.map((id) => resolve(id, "alternatives"));
1379
+ const resolved = group.skills.map((slug) => resolve(slug, "alternatives"));
1375
1380
  if (!resolved.includes(skillId)) continue;
1376
1381
  for (const alt of resolved) {
1377
1382
  if (alt !== skillId) {
@@ -1385,7 +1390,7 @@ function resolveDiscourages(skillId, discourageRules, resolve) {
1385
1390
  if (!discourageRules) return [];
1386
1391
  const discourages = [];
1387
1392
  for (const rule of discourageRules) {
1388
- const resolved = rule.skills.map((id) => resolve(id, "discourages"));
1393
+ const resolved = rule.skills.map((slug) => resolve(slug, "discourages"));
1389
1394
  if (!resolved.includes(skillId)) continue;
1390
1395
  for (const other of resolved) {
1391
1396
  if (other !== skillId && !discourages.some((d) => d.skillId === other)) {
@@ -1396,14 +1401,14 @@ function resolveDiscourages(skillId, discourageRules, resolve) {
1396
1401
  return discourages;
1397
1402
  }
1398
1403
  function buildResolvedSkill(skill, _categories, relationships, slugMap, directoryPathToId) {
1399
- const resolve = (id, context) => resolveToCanonicalId(
1400
- id,
1404
+ const resolve = (slug2, context) => resolveToCanonicalId(
1405
+ slug2,
1401
1406
  slugMap.slugToId,
1402
1407
  directoryPathToId,
1403
1408
  context ? `${skill.id} ${context}` : void 0
1404
1409
  );
1405
1410
  const slug = skill.slug;
1406
- const recommendation = relationships.recommends.find((r) => r.skill === skill.id);
1411
+ const recommendation = relationships.recommends.find((r) => r.skill === skill.slug);
1407
1412
  const { requiresSetup, providesSetupFor } = resolveSetupPairs(
1408
1413
  skill.id,
1409
1414
  relationships.setupPairs ?? [],
@@ -2814,7 +2819,7 @@ async function compileStackPlugin(options) {
2814
2819
  verbose(
2815
2820
  ` Loaded ${Object.keys(localAgents).length} local agents, ${Object.keys(cliAgents).length} CLI agents`
2816
2821
  );
2817
- const newStack = options.stack || await loadStackById(stackId, projectRoot) || defaultStacks.find((s) => s.id === stackId) || null;
2822
+ const newStack = options.stack || await loadStackById(stackId, projectRoot);
2818
2823
  let stack;
2819
2824
  if (newStack) {
2820
2825
  verbose(` Found stack: ${newStack.name}`);
@@ -3193,8 +3198,8 @@ function loadConfigTypesDataInBackground(sourceFlag, projectDir) {
3193
3198
  if (!await directoryExists(claudeSrcDir)) {
3194
3199
  throw new Error(`${CLAUDE_SRC_DIR}/ not found \u2014 run '${CLI_BIN_NAME} init' first`);
3195
3200
  }
3196
- const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-O5RMYUBW.js");
3197
- const { loadAllAgents: loadAllAgents2 } = await import("./loader-4YOZCFIP.js");
3201
+ const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-3MZ2MBOF.js");
3202
+ const { loadAllAgents: loadAllAgents2 } = await import("./loader-CMSC3RAO.js");
3198
3203
  const sourceResult = await loadSkillsMatrixFromSource2({
3199
3204
  sourceFlag,
3200
3205
  projectDir,
@@ -3652,9 +3657,6 @@ async function buildLocalConfig(wizardResult, sourceResult) {
3652
3657
  let loadedStack = null;
3653
3658
  if (wizardResult.selectedStackId) {
3654
3659
  loadedStack = await loadStackById(wizardResult.selectedStackId, sourceResult.sourcePath);
3655
- if (!loadedStack) {
3656
- loadedStack = defaultStacks.find((s) => s.id === wizardResult.selectedStackId) ?? null;
3657
- }
3658
3660
  verbose(
3659
3661
  `buildLocalConfig: loadedStack=${loadedStack ? `found (id='${loadedStack.id}')` : "NOT FOUND"}`
3660
3662
  );
@@ -5653,4 +5655,4 @@ export {
5653
5655
  validateAllPlugins,
5654
5656
  printPluginValidationResult
5655
5657
  };
5656
- //# sourceMappingURL=chunk-53URJ5XK.js.map
5658
+ //# sourceMappingURL=chunk-CADG5WWP.js.map