@agents-inc/cli 0.50.0 → 0.60.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/CHANGELOG.md +155 -5
  2. package/dist/{chunk-YDYRAXSY.js → chunk-52M2XF3W.js} +6 -6
  3. package/dist/{chunk-2BWCR762.js → chunk-52XO4ULK.js} +6 -8
  4. package/dist/chunk-52XO4ULK.js.map +1 -0
  5. package/dist/{chunk-KQOU4POU.js → chunk-6G3KZSO4.js} +72 -51
  6. package/dist/chunk-6G3KZSO4.js.map +1 -0
  7. package/dist/{chunk-AWP5A6IM.js → chunk-6OWHQ7HM.js} +14 -12
  8. package/dist/chunk-6OWHQ7HM.js.map +1 -0
  9. package/dist/{chunk-D72AFYQR.js → chunk-7FMEMXJ4.js} +71 -71
  10. package/dist/chunk-7FMEMXJ4.js.map +1 -0
  11. package/dist/{chunk-RA2IPRO2.js → chunk-AJJJE7F7.js} +2 -2
  12. package/dist/{chunk-4R52TQ3K.js → chunk-AX3SZZWA.js} +2 -2
  13. package/dist/{chunk-U2W5SENM.js → chunk-BFD5NZQ4.js} +5 -4
  14. package/dist/chunk-BFD5NZQ4.js.map +1 -0
  15. package/dist/{chunk-HYEUETIC.js → chunk-BKJHAJQW.js} +2 -2
  16. package/dist/{chunk-HYEUETIC.js.map → chunk-BKJHAJQW.js.map} +1 -1
  17. package/dist/{chunk-DCE423KO.js → chunk-BMJZBLP7.js} +5 -5
  18. package/dist/{chunk-GBOW6FUW.js → chunk-BNQ5O6LE.js} +2 -2
  19. package/dist/{chunk-KAO3LKB5.js → chunk-C577AJE7.js} +3 -3
  20. package/dist/{chunk-C3Q43WLC.js → chunk-CIG7IKX3.js} +4 -4
  21. package/dist/chunk-EC3UJRKZ.js +1534 -0
  22. package/dist/chunk-EC3UJRKZ.js.map +1 -0
  23. package/dist/{chunk-I6IOGZSZ.js → chunk-EMIUPGPL.js} +11 -15
  24. package/dist/chunk-EMIUPGPL.js.map +1 -0
  25. package/dist/{chunk-4QWDB2MD.js → chunk-G6WHCALR.js} +127 -105
  26. package/dist/chunk-G6WHCALR.js.map +1 -0
  27. package/dist/{chunk-JFF7P4LC.js → chunk-H7WJK7NJ.js} +22 -6
  28. package/dist/chunk-H7WJK7NJ.js.map +1 -0
  29. package/dist/chunk-HGTC76BX.js +16 -0
  30. package/dist/chunk-HGTC76BX.js.map +1 -0
  31. package/dist/{chunk-RDWGYKDY.js → chunk-K6OLORQL.js} +6 -6
  32. package/dist/{chunk-XDSVV5GZ.js → chunk-KIWFEBKH.js} +41 -11
  33. package/dist/chunk-KIWFEBKH.js.map +1 -0
  34. package/dist/{chunk-WBHPCBVN.js → chunk-LWXRUR6B.js} +66 -94
  35. package/dist/chunk-LWXRUR6B.js.map +1 -0
  36. package/dist/{chunk-CMNKHDOX.js → chunk-MGNYPVOJ.js} +2 -2
  37. package/dist/{chunk-5FPIKTSA.js → chunk-MKCHLXMY.js} +7 -7
  38. package/dist/{chunk-U7X4V4HE.js → chunk-MMFQNJPE.js} +2 -2
  39. package/dist/{chunk-WLZHCM7O.js → chunk-MR6OBL3B.js} +3 -11
  40. package/dist/{chunk-WLZHCM7O.js.map → chunk-MR6OBL3B.js.map} +1 -1
  41. package/dist/{chunk-RFKDGJAJ.js → chunk-O6BA7Q2B.js} +6 -6
  42. package/dist/chunk-O6BA7Q2B.js.map +1 -0
  43. package/dist/chunk-OCEFD7V6.js +201 -0
  44. package/dist/chunk-OCEFD7V6.js.map +1 -0
  45. package/dist/{chunk-YZTWZVGX.js → chunk-PUT7X3GA.js} +1 -1
  46. package/dist/chunk-PUT7X3GA.js.map +1 -0
  47. package/dist/{chunk-WFFV254H.js → chunk-RO6LX3UV.js} +110 -82
  48. package/dist/chunk-RO6LX3UV.js.map +1 -0
  49. package/dist/{chunk-QYLCINGC.js → chunk-SDKCQXWE.js} +2 -2
  50. package/dist/{chunk-M3GQ2R3E.js → chunk-SEJF7CGJ.js} +19 -7
  51. package/dist/chunk-SEJF7CGJ.js.map +1 -0
  52. package/dist/{chunk-SPFHPHYL.js → chunk-SZRK3VOR.js} +24 -14
  53. package/dist/chunk-SZRK3VOR.js.map +1 -0
  54. package/dist/{chunk-QB5HHTAA.js → chunk-TC3NHO34.js} +28 -12
  55. package/dist/chunk-TC3NHO34.js.map +1 -0
  56. package/dist/{chunk-5L724R4C.js → chunk-TGLRDEEL.js} +8 -13
  57. package/dist/chunk-TGLRDEEL.js.map +1 -0
  58. package/dist/{chunk-HMSHB5EQ.js → chunk-TZXYBG3R.js} +3544 -3037
  59. package/dist/chunk-TZXYBG3R.js.map +1 -0
  60. package/dist/{chunk-PGY5XROM.js → chunk-VR3CDXDT.js} +2 -6
  61. package/dist/chunk-VR3CDXDT.js.map +1 -0
  62. package/dist/{chunk-5FCHJLM7.js → chunk-WF6RM73R.js} +252 -38
  63. package/dist/chunk-WF6RM73R.js.map +1 -0
  64. package/dist/{chunk-3VOL4WEG.js → chunk-WYVDNGJB.js} +3 -3
  65. package/dist/{chunk-WJHFV6RI.js → chunk-X5EG4EFP.js} +2 -2
  66. package/dist/{chunk-JWYRXE6C.js → chunk-XUDTFI4M.js} +2 -2
  67. package/dist/{chunk-7LV4V6A4.js → chunk-YHCYKUA3.js} +14 -10
  68. package/dist/chunk-YHCYKUA3.js.map +1 -0
  69. package/dist/commands/build/marketplace.js +4 -4
  70. package/dist/commands/build/plugins.js +9 -7
  71. package/dist/commands/build/plugins.js.map +1 -1
  72. package/dist/commands/build/stack.js +13 -10
  73. package/dist/commands/build/stack.js.map +1 -1
  74. package/dist/commands/compile.js +42 -71
  75. package/dist/commands/compile.js.map +1 -1
  76. package/dist/commands/config/index.js +7 -5
  77. package/dist/commands/config/index.js.map +1 -1
  78. package/dist/commands/config/path.js +8 -6
  79. package/dist/commands/config/path.js.map +1 -1
  80. package/dist/commands/config/show.js +7 -5
  81. package/dist/commands/diff.js +9 -7
  82. package/dist/commands/diff.js.map +1 -1
  83. package/dist/commands/doctor.js +20 -16
  84. package/dist/commands/doctor.js.map +1 -1
  85. package/dist/commands/edit.js +175 -79
  86. package/dist/commands/edit.js.map +1 -1
  87. package/dist/commands/eject.js +20 -41
  88. package/dist/commands/eject.js.map +1 -1
  89. package/dist/commands/import/skill.js +10 -18
  90. package/dist/commands/import/skill.js.map +1 -1
  91. package/dist/commands/info.js +21 -20
  92. package/dist/commands/info.js.map +1 -1
  93. package/dist/commands/init.js +32 -31
  94. package/dist/commands/list.js +8 -6
  95. package/dist/commands/list.js.map +1 -1
  96. package/dist/commands/new/agent.js +23 -11
  97. package/dist/commands/new/agent.js.map +1 -1
  98. package/dist/commands/new/marketplace.js +63 -46
  99. package/dist/commands/new/marketplace.js.map +1 -1
  100. package/dist/commands/new/skill.js +11 -9
  101. package/dist/commands/outdated.js +9 -7
  102. package/dist/commands/outdated.js.map +1 -1
  103. package/dist/commands/search.js +45 -35
  104. package/dist/commands/search.js.map +1 -1
  105. package/dist/commands/uninstall.js +93 -123
  106. package/dist/commands/uninstall.js.map +1 -1
  107. package/dist/commands/update.js +11 -9
  108. package/dist/commands/update.js.map +1 -1
  109. package/dist/commands/validate.js +23 -27
  110. package/dist/commands/validate.js.map +1 -1
  111. package/dist/components/common/confirm.test.js +4 -4
  112. package/dist/components/skill-search/skill-search.js +3 -3
  113. package/dist/components/wizard/category-grid.js +3 -3
  114. package/dist/components/wizard/category-grid.test.js +4 -4
  115. package/dist/components/wizard/category-grid.test.js.map +1 -1
  116. package/dist/components/wizard/checkbox-grid.js +5 -5
  117. package/dist/components/wizard/checkbox-grid.test.js +6 -6
  118. package/dist/components/wizard/domain-selection.js +12 -11
  119. package/dist/components/wizard/help-modal.js +2 -2
  120. package/dist/components/wizard/menu-item.js +1 -1
  121. package/dist/components/wizard/search-modal.js +2 -2
  122. package/dist/components/wizard/search-modal.test.js +3 -3
  123. package/dist/components/wizard/search-modal.test.js.map +1 -1
  124. package/dist/components/wizard/section-progress.js +2 -2
  125. package/dist/components/wizard/section-progress.test.js +4 -4
  126. package/dist/components/wizard/section-progress.test.js.map +1 -1
  127. package/dist/components/wizard/selection-card.js +2 -2
  128. package/dist/components/wizard/source-grid.js +4 -4
  129. package/dist/components/wizard/source-grid.test.js +5 -5
  130. package/dist/components/wizard/source-grid.test.js.map +1 -1
  131. package/dist/components/wizard/stack-selection.js +9 -8
  132. package/dist/components/wizard/step-agents.js +11 -10
  133. package/dist/components/wizard/step-agents.test.js +13 -12
  134. package/dist/components/wizard/step-agents.test.js.map +1 -1
  135. package/dist/components/wizard/step-build.js +11 -9
  136. package/dist/components/wizard/step-build.test.js +18 -22
  137. package/dist/components/wizard/step-build.test.js.map +1 -1
  138. package/dist/components/wizard/step-confirm.js +4 -4
  139. package/dist/components/wizard/step-confirm.test.js +83 -23
  140. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  141. package/dist/components/wizard/step-refine.js +2 -2
  142. package/dist/components/wizard/step-refine.test.js +3 -3
  143. package/dist/components/wizard/step-settings.js +9 -7
  144. package/dist/components/wizard/step-settings.test.js +13 -11
  145. package/dist/components/wizard/step-settings.test.js.map +1 -1
  146. package/dist/components/wizard/step-sources.js +13 -11
  147. package/dist/components/wizard/step-sources.test.js +19 -17
  148. package/dist/components/wizard/step-sources.test.js.map +1 -1
  149. package/dist/components/wizard/step-stack.js +15 -14
  150. package/dist/components/wizard/step-stack.test.js +17 -16
  151. package/dist/components/wizard/step-stack.test.js.map +1 -1
  152. package/dist/components/wizard/view-title.js +2 -2
  153. package/dist/components/wizard/wizard-layout.js +10 -8
  154. package/dist/components/wizard/wizard-tabs.js +2 -2
  155. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  156. package/dist/components/wizard/wizard.js +29 -27
  157. package/dist/config-exports.js +20 -0
  158. package/dist/config-exports.js.map +1 -0
  159. package/dist/hooks/init.js +34 -33
  160. package/dist/hooks/init.js.map +1 -1
  161. package/dist/loader-2O32KKAQ.js +19 -0
  162. package/dist/source-loader-A6B3NDI4.js +16 -0
  163. package/dist/source-loader-A6B3NDI4.js.map +1 -0
  164. package/dist/source-manager-Q7IQSGIX.js +18 -0
  165. package/dist/source-manager-Q7IQSGIX.js.map +1 -0
  166. package/dist/src/agents/meta/agent-summoner/workflow.md +3 -3
  167. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  168. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  169. package/dist/src/agents/meta/skill-summoner/intro.md +1 -1
  170. package/dist/src/agents/meta/skill-summoner/output-format.md +3 -3
  171. package/dist/src/agents/meta/skill-summoner/workflow.md +8 -8
  172. package/dist/stores/wizard-store.js +6 -5
  173. package/dist/stores/wizard-store.test.js +299 -59
  174. package/dist/stores/wizard-store.test.js.map +1 -1
  175. package/package.json +5 -1
  176. package/src/agents/meta/agent-summoner/workflow.md +3 -3
  177. package/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  178. package/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  179. package/src/agents/meta/skill-summoner/intro.md +1 -1
  180. package/src/agents/meta/skill-summoner/output-format.md +3 -3
  181. package/src/agents/meta/skill-summoner/workflow.md +8 -8
  182. package/src/schemas/metadata.schema.json +6 -0
  183. package/src/schemas/stacks.schema.json +1 -1
  184. package/config/skill-categories.yaml +0 -344
  185. package/config/skill-rules.yaml +0 -740
  186. package/config/stacks.yaml +0 -1864
  187. package/dist/chunk-26MXZUHU.js +0 -183
  188. package/dist/chunk-26MXZUHU.js.map +0 -1
  189. package/dist/chunk-2BWCR762.js.map +0 -1
  190. package/dist/chunk-4QWDB2MD.js.map +0 -1
  191. package/dist/chunk-5FCHJLM7.js.map +0 -1
  192. package/dist/chunk-5L724R4C.js.map +0 -1
  193. package/dist/chunk-7LV4V6A4.js.map +0 -1
  194. package/dist/chunk-AWP5A6IM.js.map +0 -1
  195. package/dist/chunk-D72AFYQR.js.map +0 -1
  196. package/dist/chunk-HMSHB5EQ.js.map +0 -1
  197. package/dist/chunk-I6IOGZSZ.js.map +0 -1
  198. package/dist/chunk-JFF7P4LC.js.map +0 -1
  199. package/dist/chunk-KQOU4POU.js.map +0 -1
  200. package/dist/chunk-M3GQ2R3E.js.map +0 -1
  201. package/dist/chunk-PGY5XROM.js.map +0 -1
  202. package/dist/chunk-QB5HHTAA.js.map +0 -1
  203. package/dist/chunk-RFKDGJAJ.js.map +0 -1
  204. package/dist/chunk-SPFHPHYL.js.map +0 -1
  205. package/dist/chunk-U2W5SENM.js.map +0 -1
  206. package/dist/chunk-UAD3SC27.js +0 -107
  207. package/dist/chunk-UAD3SC27.js.map +0 -1
  208. package/dist/chunk-WBHPCBVN.js.map +0 -1
  209. package/dist/chunk-WFFV254H.js.map +0 -1
  210. package/dist/chunk-XDSVV5GZ.js.map +0 -1
  211. package/dist/chunk-YZTWZVGX.js.map +0 -1
  212. package/dist/commands/config/get.js +0 -61
  213. package/dist/commands/config/get.js.map +0 -1
  214. package/dist/commands/config/set-project.js +0 -61
  215. package/dist/commands/config/set-project.js.map +0 -1
  216. package/dist/commands/config/unset-project.js +0 -57
  217. package/dist/commands/config/unset-project.js.map +0 -1
  218. package/dist/config/skill-categories.yaml +0 -344
  219. package/dist/config/skill-rules.yaml +0 -740
  220. package/dist/config/stacks.yaml +0 -1864
  221. package/dist/source-manager-BVB2SG73.js +0 -16
  222. /package/dist/{chunk-YDYRAXSY.js.map → chunk-52M2XF3W.js.map} +0 -0
  223. /package/dist/{chunk-RA2IPRO2.js.map → chunk-AJJJE7F7.js.map} +0 -0
  224. /package/dist/{chunk-4R52TQ3K.js.map → chunk-AX3SZZWA.js.map} +0 -0
  225. /package/dist/{chunk-DCE423KO.js.map → chunk-BMJZBLP7.js.map} +0 -0
  226. /package/dist/{chunk-GBOW6FUW.js.map → chunk-BNQ5O6LE.js.map} +0 -0
  227. /package/dist/{chunk-KAO3LKB5.js.map → chunk-C577AJE7.js.map} +0 -0
  228. /package/dist/{chunk-C3Q43WLC.js.map → chunk-CIG7IKX3.js.map} +0 -0
  229. /package/dist/{chunk-RDWGYKDY.js.map → chunk-K6OLORQL.js.map} +0 -0
  230. /package/dist/{chunk-CMNKHDOX.js.map → chunk-MGNYPVOJ.js.map} +0 -0
  231. /package/dist/{chunk-5FPIKTSA.js.map → chunk-MKCHLXMY.js.map} +0 -0
  232. /package/dist/{chunk-U7X4V4HE.js.map → chunk-MMFQNJPE.js.map} +0 -0
  233. /package/dist/{chunk-QYLCINGC.js.map → chunk-SDKCQXWE.js.map} +0 -0
  234. /package/dist/{chunk-3VOL4WEG.js.map → chunk-WYVDNGJB.js.map} +0 -0
  235. /package/dist/{chunk-WJHFV6RI.js.map → chunk-X5EG4EFP.js.map} +0 -0
  236. /package/dist/{chunk-JWYRXE6C.js.map → chunk-XUDTFI4M.js.map} +0 -0
  237. /package/dist/{source-manager-BVB2SG73.js.map → loader-2O32KKAQ.js.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getDomainDisplayName
4
- } from "./chunk-HYEUETIC.js";
4
+ } from "./chunk-BKJHAJQW.js";
5
5
  import {
6
6
  ViewTitle
7
- } from "./chunk-CMNKHDOX.js";
7
+ } from "./chunk-MGNYPVOJ.js";
8
8
  import {
9
9
  CLI_COLORS
10
- } from "./chunk-AWP5A6IM.js";
10
+ } from "./chunk-6OWHQ7HM.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "./chunk-DHET7RCE.js";
@@ -15,7 +15,15 @@ import {
15
15
  // src/cli/components/wizard/step-confirm.tsx
16
16
  init_esm_shims();
17
17
  import { Box, Text, useInput } from "ink";
18
- import { jsx, jsxs } from "react/jsx-runtime";
18
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
19
+ var getInstallModeLabel = (skillConfigs) => {
20
+ if (skillConfigs.length === 0) return "Local (editable copies)";
21
+ const localCount = skillConfigs.filter((s) => s.source === "local").length;
22
+ const pluginCount = skillConfigs.length - localCount;
23
+ if (localCount === 0) return "Plugin";
24
+ if (pluginCount === 0) return "Local (editable copies)";
25
+ return `Mixed (${localCount} local, ${pluginCount} plugin)`;
26
+ };
19
27
  var StepConfirm = ({
20
28
  onComplete,
21
29
  stackName,
@@ -24,7 +32,8 @@ var StepConfirm = ({
24
32
  technologyCount,
25
33
  skillCount,
26
34
  agentCount,
27
- installMode,
35
+ skillConfigs,
36
+ agentConfigs,
28
37
  onBack
29
38
  }) => {
30
39
  useInput((_input, key) => {
@@ -69,12 +78,33 @@ var StepConfirm = ({
69
78
  agentCount !== void 0 && /* @__PURE__ */ jsxs(Text, { children: [
70
79
  /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Agents:" }),
71
80
  " ",
72
- /* @__PURE__ */ jsx(Text, { bold: true, children: agentCount })
81
+ /* @__PURE__ */ jsx(Text, { bold: true, children: agentCount }),
82
+ agentConfigs && agentConfigs.length > 0 && /* @__PURE__ */ jsxs(Text, { children: [
83
+ " ",
84
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
85
+ "(",
86
+ agentConfigs.filter((a) => a.scope === "project").length,
87
+ " project",
88
+ agentConfigs.some((a) => a.scope === "global") && `, ${agentConfigs.filter((a) => a.scope === "global").length} global`,
89
+ ")"
90
+ ] })
91
+ ] })
73
92
  ] }),
74
- installMode && /* @__PURE__ */ jsxs(Text, { children: [
75
- /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Install mode:" }),
76
- " ",
77
- /* @__PURE__ */ jsx(Text, { bold: true, children: installMode === "plugin" ? "Plugin" : "Local" })
93
+ skillConfigs && skillConfigs.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
94
+ /* @__PURE__ */ jsxs(Text, { children: [
95
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Install mode:" }),
96
+ " ",
97
+ /* @__PURE__ */ jsx(Text, { bold: true, children: getInstallModeLabel(skillConfigs) })
98
+ ] }),
99
+ /* @__PURE__ */ jsxs(Text, { children: [
100
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Scope:" }),
101
+ " ",
102
+ /* @__PURE__ */ jsxs(Text, { bold: true, children: [
103
+ skillConfigs.filter((s) => s.scope === "project").length,
104
+ " project",
105
+ skillConfigs.some((s) => s.scope === "global") && `, ${skillConfigs.filter((s) => s.scope === "global").length} global`
106
+ ] })
107
+ ] })
78
108
  ] })
79
109
  ] }),
80
110
  /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "ENTER install ESC go back" }) })
@@ -84,4 +114,4 @@ var StepConfirm = ({
84
114
  export {
85
115
  StepConfirm
86
116
  };
87
- //# sourceMappingURL=chunk-XDSVV5GZ.js.map
117
+ //# sourceMappingURL=chunk-KIWFEBKH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/step-confirm.tsx"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React from \"react\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../../types/config.js\";\nimport type { Domain, DomainSelections } from \"../../types/index.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\ntype StepConfirmProps = {\n onComplete: () => void;\n stackName?: string;\n selectedDomains?: Domain[];\n domainSelections?: DomainSelections;\n technologyCount?: number;\n skillCount?: number;\n agentCount?: number;\n skillConfigs?: SkillConfig[];\n agentConfigs?: AgentScopeConfig[];\n onBack?: () => void;\n};\n\nconst getInstallModeLabel = (skillConfigs: SkillConfig[]): string => {\n if (skillConfigs.length === 0) return \"Local (editable copies)\";\n\n const localCount = skillConfigs.filter((s) => s.source === \"local\").length;\n const pluginCount = skillConfigs.length - localCount;\n\n if (localCount === 0) return \"Plugin\";\n if (pluginCount === 0) return \"Local (editable copies)\";\n return `Mixed (${localCount} local, ${pluginCount} plugin)`;\n};\n\nexport const StepConfirm: React.FC<StepConfirmProps> = ({\n onComplete,\n stackName,\n selectedDomains,\n domainSelections,\n technologyCount,\n skillCount,\n agentCount,\n skillConfigs,\n agentConfigs,\n onBack,\n}) => {\n useInput((_input, key) => {\n if (key.return) {\n onComplete();\n }\n if (key.escape && onBack) {\n onBack();\n }\n });\n\n const domainsText = selectedDomains?.map(getDomainDisplayName).join(\" + \") || \"\";\n const title = stackName\n ? `Ready to install ${stackName}`\n : `Ready to install your custom stack${domainsText ? ` (${domainsText})` : \"\"}`;\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <ViewTitle>{title}</ViewTitle>\n <Text> </Text>\n\n {domainSelections && selectedDomains && !stackName && (\n <Box flexDirection=\"column\" marginBottom={1}>\n {selectedDomains.map((domain) => {\n const selections = domainSelections[domain] || {};\n const techs = Object.values(selections).flat();\n if (techs.length === 0) return null;\n return (\n <Text key={domain}>\n <Text bold>{getDomainDisplayName(domain)}:</Text> <Text>{techs.join(\", \")}</Text>\n </Text>\n );\n })}\n </Box>\n )}\n\n <Box flexDirection=\"column\" marginY={1}>\n {technologyCount !== undefined && (\n <Text>\n <Text dimColor>Technologies:</Text> <Text bold>{technologyCount}</Text>\n </Text>\n )}\n {skillCount !== undefined && (\n <Text>\n <Text dimColor>Skills:</Text> <Text bold>{skillCount}</Text>{\" \"}\n <Text color={CLI_COLORS.PRIMARY}>(all verified)</Text>\n </Text>\n )}\n {agentCount !== undefined && (\n <Text>\n <Text dimColor>Agents:</Text> <Text bold>{agentCount}</Text>\n {agentConfigs && agentConfigs.length > 0 && (\n <Text>\n {\" \"}\n <Text dimColor>\n ({agentConfigs.filter((a) => a.scope === \"project\").length} project\n {agentConfigs.some((a) => a.scope === \"global\") &&\n `, ${agentConfigs.filter((a) => a.scope === \"global\").length} global`}\n )\n </Text>\n </Text>\n )}\n </Text>\n )}\n {skillConfigs && skillConfigs.length > 0 && (\n <>\n <Text>\n <Text dimColor>Install mode:</Text>{\" \"}\n <Text bold>{getInstallModeLabel(skillConfigs)}</Text>\n </Text>\n <Text>\n <Text dimColor>Scope:</Text>{\" \"}\n <Text bold>\n {skillConfigs.filter((s) => s.scope === \"project\").length} project\n {skillConfigs.some((s) => s.scope === \"global\") &&\n `, ${skillConfigs.filter((s) => s.scope === \"global\").length} global`}\n </Text>\n </Text>\n </>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>ENTER install ESC go back</Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  KEBAB_CASE_PATTERN
4
- } from "./chunk-AWP5A6IM.js";
4
+ } from "./chunk-6OWHQ7HM.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -135,7 +135,7 @@ var boundSkillSchema = z.object({
135
135
  boundTo: z.string(),
136
136
  description: z.string().optional()
137
137
  });
138
- var SUBCATEGORY_VALUES = [
138
+ var CATEGORY_VALUES = [
139
139
  "web-framework",
140
140
  "web-styling",
141
141
  "web-client-state",
@@ -175,8 +175,8 @@ var SUBCATEGORY_VALUES = [
175
175
  "cli-prompts",
176
176
  "cli-testing"
177
177
  ];
178
- var subcategorySchema = z.enum(SUBCATEGORY_VALUES);
179
- var SUBCATEGORY_VALUES_SET = new Set(SUBCATEGORY_VALUES);
178
+ var categorySchema = z.enum(CATEGORY_VALUES);
179
+ var CATEGORY_VALUES_SET = new Set(CATEGORY_VALUES);
180
180
  var agentNameSchema = z.enum([
181
181
  "web-developer",
182
182
  "api-developer",
@@ -210,7 +210,7 @@ var permissionModeSchema = z.enum([
210
210
  "plan",
211
211
  "delegate"
212
212
  ]);
213
- var skillDisplayNameSchema = z.enum([
213
+ var skillSlugSchema = z.enum([
214
214
  "react",
215
215
  "vue",
216
216
  "angular",
@@ -279,7 +279,6 @@ var skillDisplayNameSchema = z.enum([
279
279
  "file-upload",
280
280
  "image-handling",
281
281
  "date-fns",
282
- "api-testing",
283
282
  "api-performance",
284
283
  "web-performance",
285
284
  "security",
@@ -312,9 +311,9 @@ var extensibleSkillIdSchema = z.string().refine(
312
311
  (val) => skillIdSchema.safeParse(val).success || customExtensions.skillIds.has(val),
313
312
  { message: "Must be a valid skill ID" }
314
313
  );
315
- var extensibleSubcategorySchema = z.string().refine(
316
- (val) => subcategorySchema.safeParse(val).success || customExtensions.categories.has(val),
317
- { message: "Must be a valid subcategory" }
314
+ var extensibleCategorySchema = z.string().refine(
315
+ (val) => categorySchema.safeParse(val).success || customExtensions.categories.has(val),
316
+ { message: "Must be a valid category" }
318
317
  );
319
318
  var extensibleAgentNameSchema = z.string().refine(
320
319
  (val) => agentNameSchema.safeParse(val).success || customExtensions.agentNames.has(val),
@@ -356,7 +355,7 @@ var categoryPathSchema = z.string().refine(
356
355
  (val) => {
357
356
  if (val === "local") return true;
358
357
  if (/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(val)) return true;
359
- if (subcategorySchema.safeParse(val).success) return true;
358
+ if (categorySchema.safeParse(val).success) return true;
360
359
  return customExtensions.categories.has(val);
361
360
  },
362
361
  {
@@ -398,10 +397,7 @@ var skillMetadataLoaderSchema = z.object({
398
397
  category: z.string().optional(),
399
398
  author: z.string().optional(),
400
399
  tags: z.array(z.string()).optional(),
401
- requires: z.array(extensibleSkillIdSchema).optional(),
402
- compatibleWith: z.array(extensibleSkillIdSchema).optional(),
403
- conflictsWith: z.array(extensibleSkillIdSchema).optional(),
404
- domain: extensibleDomainSchema.optional(),
400
+ domain: extensibleDomainSchema,
405
401
  custom: z.boolean().optional()
406
402
  }).passthrough().superRefine(validateCategoryField);
407
403
  var pluginAuthorSchema = z.object({
@@ -448,30 +444,35 @@ var stackAgentConfigSchema = z.record(
448
444
  z.string(),
449
445
  z.union([skillAssignmentElementSchema, z.array(skillAssignmentElementSchema)])
450
446
  ).superRefine(
451
- validateExtensibleRecordKeys(
452
- SUBCATEGORY_VALUES_SET,
453
- customExtensions.categories,
454
- "subcategory"
455
- )
447
+ validateExtensibleRecordKeys(CATEGORY_VALUES_SET, customExtensions.categories, "category")
456
448
  );
457
449
  var projectConfigLoaderSchema = z.object({
458
450
  version: z.literal("1").optional(),
459
451
  /** Project/plugin name in kebab-case */
460
452
  name: z.string().optional(),
461
453
  description: z.string().optional(),
462
- /** Agent IDs to compile (e.g., ["web-developer", "api-developer"]) */
463
- agents: z.array(z.string()).optional(),
464
- /** Flat list of all skill IDs used by this project */
465
- skills: z.array(extensibleSkillIdSchema).optional(),
454
+ /** Per-agent configuration with scope (e.g., [{ name: "web-developer", scope: "project" }]) */
455
+ agents: z.array(
456
+ z.object({
457
+ name: z.string(),
458
+ scope: z.enum(["project", "global"])
459
+ })
460
+ ).optional(),
461
+ /** Per-skill configuration with scope and source */
462
+ skills: z.array(
463
+ z.object({
464
+ id: extensibleSkillIdSchema,
465
+ scope: z.enum(["project", "global"]),
466
+ source: z.string()
467
+ })
468
+ ).optional(),
466
469
  /** Author handle (e.g., "@vince") */
467
470
  author: z.string().optional(),
468
- /** "local" = .claude/agents, "plugin" = .claude/plugins/ (DEFAULT_PLUGIN_NAME) */
469
- installMode: z.enum(["local", "plugin"]).optional(),
470
471
  /** Selected domains from the wizard (persisted for edit mode restoration) */
471
472
  domains: z.array(extensibleDomainSchema).optional(),
472
473
  /** Selected agents from the wizard (persisted for edit mode restoration) */
473
474
  selectedAgents: z.array(z.string()).optional(),
474
- /** Agent-to-subcategory-to-skill mappings from selected stack (accepts same formats as stacks.yaml) */
475
+ /** Agent-to-category-to-skill mappings from selected stack (accepts same formats as stacks.ts) */
475
476
  stack: z.record(z.string(), stackAgentConfigSchema).optional(),
476
477
  /** Skills source path or URL (e.g., "github:my-org/skills") */
477
478
  source: z.string().optional(),
@@ -480,42 +481,15 @@ var projectConfigLoaderSchema = z.object({
480
481
  /** Separate source for agents when different from skills source */
481
482
  agentsSource: z.string().optional()
482
483
  }).passthrough();
483
- var projectConfigValidationSchema = z.object({
484
- version: z.literal("1").optional(),
485
- /** Project/plugin name in kebab-case */
486
- name: z.string(),
487
- description: z.string().optional(),
488
- /** Agent IDs to compile (e.g., ["web-developer", "api-developer"]) */
489
- agents: z.array(z.string()),
490
- /** Flat list of all skill IDs used by this project */
491
- skills: z.array(skillIdSchema),
492
- /** Author handle (e.g., "@vince") */
493
- author: z.string().optional(),
494
- /** "local" = .claude/agents, "plugin" = .claude/plugins/ (DEFAULT_PLUGIN_NAME) */
495
- installMode: z.enum(["local", "plugin"]),
496
- /** Selected domains from the wizard (persisted for edit mode restoration) */
497
- domains: z.array(domainSchema).optional(),
498
- /** Selected agents from the wizard (persisted for edit mode restoration) */
499
- selectedAgents: z.array(z.string()).optional(),
500
- /** Agent-to-subcategory-to-skill mappings from selected stack */
501
- stack: z.record(z.string(), stackAgentConfigSchema),
502
- /** Skills source path or URL (e.g., "github:my-org/skills") */
503
- source: z.string(),
504
- /** Marketplace identifier for plugin installation */
505
- marketplace: z.string().optional(),
506
- /** Separate source for agents when different from skills source */
507
- agentsSource: z.string().optional()
508
- });
509
484
  var categoryDefinitionSchema = z.object({
510
- id: extensibleSubcategorySchema,
485
+ id: extensibleCategorySchema,
511
486
  displayName: z.string(),
512
487
  description: z.string(),
513
488
  domain: extensibleDomainSchema.optional(),
514
489
  exclusive: z.boolean(),
515
490
  required: z.boolean(),
516
491
  order: z.number(),
517
- icon: z.string().optional(),
518
- custom: z.boolean().optional()
492
+ icon: z.string().optional()
519
493
  });
520
494
  var skillRefInYaml = z.string();
521
495
  var conflictRuleSchema = z.object({
@@ -526,9 +500,17 @@ var discourageRuleSchema = z.object({
526
500
  skills: z.array(skillRefInYaml).min(2),
527
501
  reason: z.string()
528
502
  });
529
- var recommendRuleSchema = z.object({
530
- when: skillRefInYaml,
531
- suggest: z.array(skillRefInYaml).min(1),
503
+ var recommendationSchema = z.object({
504
+ skill: skillIdSchema,
505
+ reason: z.string()
506
+ });
507
+ var compatibilityGroupSchema = z.object({
508
+ skills: z.array(skillIdSchema).min(2),
509
+ reason: z.string()
510
+ });
511
+ var setupPairSchema = z.object({
512
+ setup: skillIdSchema,
513
+ configures: z.array(skillIdSchema).min(1),
532
514
  reason: z.string()
533
515
  });
534
516
  var requireRuleSchema = z.object({
@@ -544,46 +526,41 @@ var alternativeGroupSchema = z.object({
544
526
  var relationshipDefinitionsSchema = z.object({
545
527
  conflicts: z.array(conflictRuleSchema),
546
528
  discourages: z.array(discourageRuleSchema),
547
- recommends: z.array(recommendRuleSchema),
529
+ recommends: z.array(recommendationSchema),
548
530
  requires: z.array(requireRuleSchema),
549
- alternatives: z.array(alternativeGroupSchema)
531
+ alternatives: z.array(alternativeGroupSchema),
532
+ compatibleWith: z.array(compatibilityGroupSchema).optional().default([]),
533
+ setupPairs: z.array(setupPairSchema).optional().default([])
550
534
  });
551
535
  var skillCategoriesFileSchema = z.object({
552
536
  version: z.string(),
553
537
  categories: z.record(z.string(), categoryDefinitionSchema).superRefine(
554
538
  validateExtensibleRecordKeys(
555
- SUBCATEGORY_VALUES_SET,
539
+ CATEGORY_VALUES_SET,
556
540
  customExtensions.categories,
557
541
  "category key"
558
542
  )
559
543
  )
560
544
  });
561
- var perSkillRulesSchema = z.object({
562
- compatibleWith: z.array(extensibleSkillIdSchema).optional(),
563
- conflictsWith: z.array(extensibleSkillIdSchema).optional(),
564
- requires: z.array(extensibleSkillIdSchema).optional(),
565
- requiresSetup: z.array(extensibleSkillIdSchema).optional(),
566
- providesSetupFor: z.array(extensibleSkillIdSchema).optional()
567
- });
568
545
  var skillRulesFileSchema = z.object({
569
546
  version: z.string(),
570
- aliases: z.record(z.string(), extensibleSkillIdSchema).optional(),
571
- relationships: relationshipDefinitionsSchema.optional(),
572
- "per-skill": z.record(z.string(), perSkillRulesSchema).optional()
547
+ relationships: relationshipDefinitionsSchema.optional()
573
548
  });
574
549
  var localRawMetadataSchema = z.object({
575
550
  /** Short name shown in the wizard grid (e.g., "my-custom-react") */
576
- displayName: z.string().optional(),
551
+ displayName: z.string(),
552
+ /** Kebab-case short key for alias resolution (e.g., "react") */
553
+ slug: z.string(),
577
554
  /** One-line description for the wizard */
578
555
  cliDescription: z.string().optional(),
579
- /** Subcategory to place this skill in (e.g., "web-framework") */
556
+ /** Category to place this skill in (e.g., "web-framework") */
580
557
  // Field accepts any string; cross-field validation in superRefine enforces strict/custom rules
581
- category: z.string().optional(),
558
+ category: z.string(),
582
559
  /** When an AI agent should invoke this skill */
583
560
  usageGuidance: z.string().optional(),
584
561
  tags: z.array(z.string()).optional(),
585
- /** Explicit domain assignment (overrides inference from category prefix) */
586
- domain: extensibleDomainSchema.optional(),
562
+ /** Domain this skill belongs to (e.g., "web", "api", "cli") */
563
+ domain: extensibleDomainSchema,
587
564
  /** True if this skill was created outside the CLI's built-in vocabulary */
588
565
  custom: z.boolean().optional()
589
566
  }).passthrough().superRefine(validateCategoryField);
@@ -603,7 +580,7 @@ var stackSchema = z.object({
603
580
  id: z.string().min(1),
604
581
  name: z.string().min(1),
605
582
  description: z.string(),
606
- /** Maps agent IDs to their subcategory-to-skill assignments */
583
+ /** Maps agent IDs to their category-to-skill assignments */
607
584
  agents: z.record(z.string(), stackAgentConfigSchema),
608
585
  /** High-level philosophy guiding this stack's technology choices */
609
586
  philosophy: z.string().optional()
@@ -693,7 +670,7 @@ var projectSourceConfigSchema = z.object({
693
670
  ref: z.string().optional()
694
671
  })
695
672
  ).optional(),
696
- /** Skills explicitly bound to subcategories via search (from Step Sources) */
673
+ /** Skills explicitly bound to categories via search (from Step Sources) */
697
674
  boundSkills: z.array(boundSkillSchema).optional(),
698
675
  /** Branding overrides for white-labeling the CLI */
699
676
  branding: brandingConfigSchema.optional(),
@@ -701,11 +678,11 @@ var projectSourceConfigSchema = z.object({
701
678
  skillsDir: z.string().optional(),
702
679
  /** Custom agents directory override (default: "src/agents") */
703
680
  agentsDir: z.string().optional(),
704
- /** Custom stacks file path override (default: "config/stacks.yaml") */
681
+ /** Custom stacks file path override (default: "config/stacks.ts") */
705
682
  stacksFile: z.string().optional(),
706
- /** Custom categories file path override (default: "config/skill-categories.yaml") */
683
+ /** Custom categories file path override (default: "config/skill-categories.ts") */
707
684
  categoriesFile: z.string().optional(),
708
- /** Custom rules file path override (default: "config/skill-rules.yaml") */
685
+ /** Custom rules file path override (default: "config/skill-rules.ts") */
709
686
  rulesFile: z.string().optional()
710
687
  }).passthrough();
711
688
  var projectSourceConfigValidationSchema = z.object({
@@ -775,8 +752,8 @@ var skillFrontmatterValidationSchema = z.object({
775
752
  "argument-hint": z.string().optional()
776
753
  }).strict();
777
754
  var metadataValidationSchema = z.object({
778
- /** Domain-prefixed subcategory (e.g., "web-framework") */
779
- category: extensibleSubcategorySchema,
755
+ /** Domain-prefixed category (e.g., "web-framework") */
756
+ category: extensibleCategorySchema,
780
757
  /** Author handle — must start with @ (e.g., "@vince") */
781
758
  author: z.string().regex(/^@[a-z][a-z0-9-]*$/),
782
759
  /** Short display name for the wizard grid (max 30 chars) */
@@ -785,13 +762,10 @@ var metadataValidationSchema = z.object({
785
762
  cliDescription: z.string().min(1).max(60),
786
763
  /** When an AI agent should invoke this skill (min 10 chars to ensure usefulness) */
787
764
  usageGuidance: z.string().min(10),
788
- requires: z.array(z.string().min(1)).optional(),
789
- compatibleWith: z.array(z.string().min(1)).optional(),
790
- conflictsWith: z.array(z.string().min(1)).optional(),
765
+ /** Kebab-case short key for alias resolution, search, and relationship rules */
766
+ slug: z.string().regex(/^[a-z][a-z0-9-]*$/).min(1).max(50),
791
767
  /** Searchable tags — kebab-case only */
792
768
  tags: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)).optional(),
793
- requiresSetup: z.array(z.string().min(1)).optional(),
794
- providesSetupFor: z.array(z.string().min(1)).optional(),
795
769
  /** 7-char hex SHA of skill content (for change detection) */
796
770
  contentHash: z.string().regex(/^[a-f0-9]{7}$/).optional(),
797
771
  /** ISO date of last update */
@@ -809,7 +783,7 @@ var metadataValidationSchema = z.object({
809
783
  /** ISO date of the fork */
810
784
  date: z.string()
811
785
  }).optional(),
812
- /** Explicit domain assignment (overrides inference from category prefix) */
786
+ /** Domain assignment from metadata */
813
787
  domain: extensibleDomainSchema.optional(),
814
788
  /** True if this skill was created outside the CLI's built-in vocabulary */
815
789
  custom: z.boolean().optional()
@@ -836,7 +810,7 @@ var stackConfigValidationSchema = z.object({
836
810
  skills: z.array(stackSkillAssignmentSchema).min(1),
837
811
  /** Agent IDs this stack compiles (at least one required) */
838
812
  agents: z.array(z.string().regex(KEBAB_CASE_PATTERN)).min(1),
839
- /** Per-agent skill assignments: { agentId: { subcategory: [skillAssignment] } } */
813
+ /** Per-agent skill assignments: { agentId: { category: [skillAssignment] } } */
840
814
  agentSkills: z.record(z.string(), z.record(z.string(), z.array(stackSkillAssignmentSchema))).optional(),
841
815
  /** High-level philosophy guiding technology choices */
842
816
  philosophy: z.string().optional(),
@@ -930,12 +904,10 @@ export {
930
904
  remove,
931
905
  copy,
932
906
  DOMAIN_VALUES,
933
- SUBCATEGORY_VALUES,
907
+ CATEGORY_VALUES,
934
908
  agentNameSchema,
935
- skillDisplayNameSchema,
936
909
  SKILL_ID_PATTERN,
937
910
  isValidSkillId,
938
- skillIdSchema,
939
911
  extensibleDomainSchema,
940
912
  categoryPathSchema,
941
913
  hooksRecordSchema,
@@ -964,4 +936,4 @@ export {
964
936
  warnUnknownFields,
965
937
  extendSchemasWithCustomValues
966
938
  };
967
- //# sourceMappingURL=chunk-WBHPCBVN.js.map
939
+ //# sourceMappingURL=chunk-LWXRUR6B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/utils/errors.ts","../src/cli/utils/logger.ts","../src/cli/utils/fs.ts","../src/cli/lib/schemas.ts"],"sourcesContent":["/** Extract a human-readable message from an unknown error value. */\nexport function getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","// Logging utility for lib/ modules that don't have access to oclif command context.\n// In oclif commands, prefer using this.log() instead.\n\nlet verboseMode = false;\n\nexport function setVerbose(enabled: boolean): void {\n verboseMode = enabled;\n}\n\nexport function verbose(msg: string): void {\n if (verboseMode) {\n console.log(` ${msg}`);\n }\n}\n\n// Always visible (not gated by verbose mode).\n// Used for user-facing progress output: compilation ticks, summaries, validation results.\nexport function log(msg: string): void {\n console.log(msg);\n}\n\n// --- Startup message buffering ---\n// When buffer mode is enabled (before Ink takes over the terminal), warn() pushes\n// messages into a buffer instead of writing to stderr. The buffer is drained and\n// passed to Ink's <Static> component so messages survive Ink's clearTerminal.\n\nexport type StartupMessage = {\n level: \"info\" | \"warn\" | \"error\";\n text: string;\n};\n\nlet bufferMode = false;\nlet messageBuffer: StartupMessage[] = [];\n\nexport function enableBuffering(): void {\n bufferMode = true;\n messageBuffer = [];\n}\n\nexport function drainBuffer(): StartupMessage[] {\n const messages = [...messageBuffer];\n messageBuffer = [];\n return messages;\n}\n\nexport function disableBuffering(): void {\n bufferMode = false;\n messageBuffer = [];\n}\n\nexport function pushBufferMessage(level: StartupMessage[\"level\"], text: string): void {\n messageBuffer.push({ level, text });\n}\n\n// Always visible (not gated by verbose mode).\n// Used for issues the user should know about, like unresolved references.\n//\n// Error/warning message style guide:\n// - Start with a capital letter (restructure if it would capitalize a function name)\n// - End with a period if it's a complete sentence\n// - End without a period if it's a fragment (e.g., \"Skipping 'foo': missing SKILL.md\")\n// - Wrap dynamic values in single quotes: 'value' (not bare or double-quoted)\n// - Do NOT prefix the message with \"Warning:\" — this function adds it automatically\n// - After a colon, use lowercase (e.g., \"Skipping 'foo': invalid frontmatter\")\n// - Use em dash for supplemental info (e.g., \"Missing category — defaulting to 'local'\")\nexport function warn(msg: string): void {\n if (bufferMode) {\n messageBuffer.push({ level: \"warn\", text: msg });\n return;\n }\n console.warn(` Warning: ${msg}`);\n}\n","import fs from \"fs-extra\";\nimport fg from \"fast-glob\";\nimport path from \"path\";\n\nexport async function readFile(filePath: string): Promise<string> {\n return fs.readFile(filePath, \"utf-8\");\n}\n\n/**\n * Reads a file with a size limit check before reading content.\n * Throws if the file exceeds maxSizeBytes. Prevents DoS from oversized files.\n */\nexport async function readFileSafe(filePath: string, maxSizeBytes: number): Promise<string> {\n const stats = await fs.stat(filePath);\n if (stats.size > maxSizeBytes) {\n throw new Error(\n `File too large: '${filePath}' is ${stats.size} bytes (limit: ${maxSizeBytes} bytes)`,\n );\n }\n return fs.readFile(filePath, \"utf-8\");\n}\n\nexport async function readFileOptional(filePath: string, fallback = \"\"): Promise<string> {\n try {\n return await fs.readFile(filePath, \"utf-8\");\n } catch {\n return fallback;\n }\n}\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n return fs.pathExists(filePath);\n}\n\nexport async function directoryExists(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function listDirectories(dirPath: string): Promise<string[]> {\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory()).map((e) => e.name);\n } catch {\n return [];\n }\n}\n\nexport async function glob(pattern: string, cwd: string): Promise<string[]> {\n return fg(pattern, { cwd, onlyFiles: true });\n}\n\nexport async function writeFile(filePath: string, content: string): Promise<void> {\n await fs.ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content, \"utf-8\");\n}\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.ensureDir(dirPath);\n}\n\nexport async function remove(filePath: string): Promise<void> {\n await fs.remove(filePath);\n}\n\nexport async function copy(src: string, dest: string): Promise<void> {\n await fs.copy(src, dest);\n}\n","import { z } from \"zod\";\nimport { KEBAB_CASE_PATTERN } from \"../consts\";\nimport { warn } from \"../utils/logger\";\nimport type {\n AgentHookAction,\n AgentHookDefinition,\n AgentName,\n AgentYamlConfig,\n AlternativeGroup,\n BoundSkill,\n CategoryDefinition,\n CategoryMap,\n CategoryPath,\n CompatibilityGroup,\n ConflictRule,\n DiscourageRule,\n Domain,\n Marketplace,\n MarketplaceMetadata,\n MarketplaceOwner,\n MarketplacePlugin,\n MarketplaceRemoteSource,\n ModelName,\n PermissionMode,\n PluginAuthor,\n PluginManifest,\n Recommendation,\n RelationshipDefinitions,\n RequireRule,\n SetupPair,\n SkillAssignment,\n SkillId,\n SkillSlug,\n SkillSourceType,\n Category,\n} from \"../types\";\n\n/**\n * Runtime-extensible sets of custom values discovered from source matrices.\n * Populated by extendSchemasWithCustomValues() after matrix merge.\n * Checked by categoryPathSchema, stackAgentConfigSchema, and agentYamlConfigSchema\n * to accept custom categories, domains, and agent names at parse time.\n */\nconst customExtensions = {\n categories: new Set<string>(),\n domains: new Set<string>(),\n agentNames: new Set<string>(),\n skillIds: new Set<string>(),\n};\n\n/** Raw domain values (before cast) — single source of truth for built-in domains */\nexport const DOMAIN_VALUES = [\"web\", \"api\", \"cli\", \"mobile\", \"shared\"] as const;\n\n// Bridge pattern: z.ZodType<ExistingType> ensures Zod output matches our union types\nexport const domainSchema = z.enum(DOMAIN_VALUES) as z.ZodType<Domain>;\n\nexport const skillSourceTypeSchema = z.enum([\n \"public\",\n \"private\",\n \"local\",\n]) as z.ZodType<SkillSourceType>;\n\nexport const boundSkillSchema: z.ZodType<BoundSkill> = z.object({\n id: z.string() as z.ZodType<SkillId>,\n sourceUrl: z.string(),\n sourceName: z.string(),\n boundTo: z.string(),\n description: z.string().optional(),\n});\n\n/** Raw category values (before cast) — single source of truth for built-in categories */\nexport const CATEGORY_VALUES = [\n \"web-framework\",\n \"web-styling\",\n \"web-client-state\",\n \"web-server-state\",\n \"web-forms\",\n \"web-testing\",\n \"web-ui-components\",\n \"web-mocking\",\n \"web-error-handling\",\n \"web-i18n\",\n \"web-file-upload\",\n \"web-files\",\n \"web-utilities\",\n \"web-realtime\",\n \"web-animation\",\n \"web-pwa\",\n \"web-accessibility\",\n \"web-performance\",\n \"web-base-framework\",\n \"api-api\",\n \"api-database\",\n \"api-auth\",\n \"api-observability\",\n \"api-analytics\",\n \"api-email\",\n \"api-performance\",\n \"mobile-framework\",\n \"mobile-platform\",\n \"shared-monorepo\",\n \"shared-tooling\",\n \"shared-security\",\n \"shared-methodology\",\n \"shared-research\",\n \"shared-reviewing\",\n \"shared-ci-cd\",\n \"cli-framework\",\n \"cli-prompts\",\n \"cli-testing\",\n] as const;\n\n// Bridge pattern: z.ZodType<ExistingType> ensures Zod output matches our union types\nexport const categorySchema = z.enum(CATEGORY_VALUES) as z.ZodType<Category>;\n\n/** Built-in category values as a Set — used for record key validation in stack and category schemas */\nconst CATEGORY_VALUES_SET = new Set<Category>(CATEGORY_VALUES);\n\nexport const agentNameSchema = z.enum([\n \"web-developer\",\n \"api-developer\",\n \"cli-developer\",\n \"web-architecture\",\n \"agent-summoner\",\n \"documentor\",\n \"skill-summoner\",\n \"pattern-scout\",\n \"web-pattern-critique\",\n \"web-pm\",\n \"api-researcher\",\n \"web-researcher\",\n \"api-reviewer\",\n \"cli-reviewer\",\n \"web-reviewer\",\n \"cli-tester\",\n \"web-tester\",\n]) as z.ZodType<AgentName>;\n\nexport const modelNameSchema = z.enum([\n \"sonnet\",\n \"opus\",\n \"haiku\",\n \"inherit\",\n]) as z.ZodType<ModelName>;\n\nexport const permissionModeSchema = z.enum([\n \"default\",\n \"acceptEdits\",\n \"dontAsk\",\n \"bypassPermissions\",\n \"plan\",\n \"delegate\",\n]) as z.ZodType<PermissionMode>;\n\nexport const skillSlugSchema = z.enum([\n \"react\",\n \"vue\",\n \"angular\",\n \"solidjs\",\n \"nextjs-app-router\",\n \"nextjs-server-actions\",\n \"remix\",\n \"nuxt\",\n \"scss-modules\",\n \"cva\",\n \"tailwind\",\n \"zustand\",\n \"redux-toolkit\",\n \"pinia\",\n \"ngrx-signalstore\",\n \"jotai\",\n \"mobx\",\n \"react-query\",\n \"swr\",\n \"graphql-apollo\",\n \"graphql-urql\",\n \"trpc\",\n \"react-hook-form\",\n \"vee-validate\",\n \"zod-validation\",\n \"vitest\",\n \"playwright-e2e\",\n \"cypress-e2e\",\n \"react-testing-library\",\n \"vue-test-utils\",\n \"msw\",\n \"shadcn-ui\",\n \"tanstack-table\",\n \"radix-ui\",\n \"hono\",\n \"express\",\n \"fastify\",\n \"drizzle\",\n \"prisma\",\n \"better-auth\",\n \"axiom-pino-sentry\",\n \"posthog\",\n \"posthog-flags\",\n \"resend\",\n \"github-actions\",\n \"react-native\",\n \"expo\",\n \"turborepo\",\n \"tooling\",\n \"posthog-setup\",\n \"env\",\n \"observability-setup\",\n \"email-setup\",\n \"framer-motion\",\n \"css-animations\",\n \"view-transitions\",\n \"storybook\",\n \"error-boundaries\",\n \"result-types\",\n \"accessibility\",\n \"websockets\",\n \"sse\",\n \"socket-io\",\n \"service-workers\",\n \"offline-first\",\n \"file-upload\",\n \"image-handling\",\n \"date-fns\",\n \"api-performance\",\n \"web-performance\",\n \"security\",\n \"commander\",\n \"cli-commander\",\n \"oclif\",\n \"reviewing\",\n \"cli-reviewing\",\n \"research-methodology\",\n \"investigation-requirements\",\n \"anti-over-engineering\",\n \"success-criteria\",\n \"write-verification\",\n \"improvement-protocol\",\n \"context-management\",\n]) as z.ZodType<SkillSlug>;\n\n/** Matches SkillId format: prefix-category-name (at least 3 dash-separated segments) */\nexport const SKILL_ID_PATTERN = /^(web|api|cli|mobile|infra|meta|security)-.+-.+$/;\n\n/**\n * Checks if a string is a valid skill ID: either matches the built-in prefix pattern\n * (web|api|cli|mobile|infra|meta|security) or was registered as a custom skill ID\n * via extendSchemasWithCustomValues().\n */\nexport function isValidSkillId(id: string): boolean {\n return SKILL_ID_PATTERN.test(id) || customExtensions.skillIds.has(id);\n}\n\n// Regex-based since Zod cannot express template literal types natively\nexport const skillIdSchema = z\n .string()\n .regex(\n SKILL_ID_PATTERN,\n \"Must be a valid skill ID (e.g., 'web-framework-react')\",\n ) as z.ZodType<SkillId>;\n\n/** Extensible schemas that accept both built-in values and custom values registered via extendSchemasWithCustomValues() */\nexport const extensibleDomainSchema = z\n .string()\n .refine(\n (val): val is Domain =>\n domainSchema.safeParse(val).success || customExtensions.domains.has(val),\n { message: \"Must be a valid domain\" },\n ) as z.ZodType<Domain>;\n\nconst extensibleSkillIdSchema = z\n .string()\n .refine(\n (val): val is SkillId =>\n skillIdSchema.safeParse(val).success || customExtensions.skillIds.has(val),\n { message: \"Must be a valid skill ID\" },\n ) as z.ZodType<SkillId>;\n\nconst extensibleCategorySchema = z\n .string()\n .refine(\n (val): val is Category =>\n categorySchema.safeParse(val).success || customExtensions.categories.has(val),\n { message: \"Must be a valid category\" },\n ) as z.ZodType<Category>;\n\nconst extensibleAgentNameSchema = z\n .string()\n .refine(\n (val): val is AgentName =>\n agentNameSchema.safeParse(val).success || customExtensions.agentNames.has(val),\n { message: \"Must be a valid agent name\" },\n ) as z.ZodType<AgentName>;\n\n/** Validates category: strict categoryPathSchema by default, any kebab-case string when custom: true */\nfunction validateCategoryField(\n val: { category?: string; custom?: boolean },\n ctx: z.RefinementCtx,\n): void {\n if (!val.category) return;\n\n if (val.custom) {\n if (!KEBAB_CASE_PATTERN.test(val.category)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"category\"],\n message: \"Custom category must be kebab-case\",\n });\n }\n return;\n }\n\n const result = categoryPathSchema.safeParse(val.category);\n if (!result.success) {\n for (const issue of result.error.issues) {\n ctx.addIssue({ ...issue, path: [\"category\"] });\n }\n }\n}\n\n/** Creates a superRefine callback that validates record keys against built-in + custom extension sets */\nfunction validateExtensibleRecordKeys(\n builtinSet: Set<string>,\n extensionSet: Set<string>,\n label: string,\n) {\n return (val: Record<string, unknown>, ctx: z.RefinementCtx) => {\n for (const key of Object.keys(val)) {\n if (!builtinSet.has(key) && !extensionSet.has(key)) {\n ctx.addIssue({\n code: \"custom\",\n path: [key],\n message: `Invalid ${label} '${key}'.`,\n });\n }\n }\n };\n}\n\n// Accepts: \"prefix-category\", bare category, \"local\", or custom category from extended schema\nexport const categoryPathSchema = z.string().refine(\n (val): val is CategoryPath => {\n if (val === \"local\") return true;\n if (/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(val)) return true;\n if (categorySchema.safeParse(val).success) return true;\n // Accept custom categories registered via extendSchemasWithCustomValues()\n return customExtensions.categories.has(val);\n },\n {\n message: \"Must be a valid category path (e.g., 'web-framework', 'shared-testing', or 'local')\",\n },\n) as z.ZodType<CategoryPath>;\n\nexport const agentHookActionSchema: z.ZodType<AgentHookAction> = z.object({\n type: z.enum([\"command\", \"script\", \"prompt\"]),\n command: z.string().optional(),\n script: z.string().optional(),\n prompt: z.string().optional(),\n});\n\nexport const agentHookDefinitionSchema: z.ZodType<AgentHookDefinition> = z.object({\n matcher: z.string().optional(),\n hooks: z.array(agentHookActionSchema).optional(),\n});\n\nexport const hooksRecordSchema = z.record(z.string(), z.array(agentHookDefinitionSchema));\n\n/** Strict hook definition — hooks array is required and must have at least one action */\nconst strictAgentHookDefinitionSchema = z.object({\n matcher: z.string().optional(),\n hooks: z.array(agentHookActionSchema).min(1),\n});\n\n/** Strict hooks record for validation schemas (requires at least one hook action per definition) */\nexport const strictHooksRecordSchema = z.record(\n z.string(),\n z.array(strictAgentHookDefinitionSchema),\n);\n\nexport const skillAssignmentSchema: z.ZodType<SkillAssignment> = z.object({\n id: extensibleSkillIdSchema,\n preloaded: z.boolean().optional(),\n local: z.boolean().optional(),\n path: z.string().optional(),\n});\n\n// Lenient: accepts any string for `name` since local/custom skills may not follow strict SkillId pattern\nexport const skillFrontmatterLoaderSchema = z.object({\n name: z.string(),\n description: z.string(),\n model: modelNameSchema.optional(),\n});\n\n// Loader schema: category strictness depends on custom field (see validateCategoryField)\nexport const skillMetadataLoaderSchema = z\n .object({\n // Field accepts any string; cross-field validation in superRefine enforces strict/custom rules\n category: (z.string() as z.ZodType<CategoryPath>).optional(),\n author: z.string().optional(),\n tags: z.array(z.string()).optional(),\n domain: extensibleDomainSchema,\n custom: z.boolean().optional(),\n })\n .passthrough()\n .superRefine(validateCategoryField);\n\nexport const pluginAuthorSchema: z.ZodType<PluginAuthor> = z.object({\n name: z.string().min(1),\n email: z.string().optional(),\n});\n\nexport const pluginManifestSchema: z.ZodType<PluginManifest> = z.object({\n name: z.string(),\n version: z.string().optional(),\n description: z.string().optional(),\n author: pluginAuthorSchema.optional(),\n keywords: z.array(z.string()).optional(),\n commands: z.union([z.string(), z.array(z.string())]).optional(),\n agents: z.union([z.string(), z.array(z.string())]).optional(),\n skills: z.union([z.string(), z.array(z.string())]).optional(),\n hooks: z.union([z.string(), hooksRecordSchema]).optional(),\n});\n\n/** Strict schema for plugin.json validation (IDE, agentsinc validate). Rejects unknown fields. */\nexport const pluginManifestValidationSchema = z\n .object({\n name: z.string().min(1),\n version: z.string().optional(),\n description: z.string().optional(),\n author: pluginAuthorSchema.optional(),\n keywords: z.array(z.string()).optional(),\n commands: z.union([z.string(), z.array(z.string())]).optional(),\n agents: z.union([z.string(), z.array(z.string())]).optional(),\n skills: z.union([z.string(), z.array(z.string())]).optional(),\n hooks: z.union([z.string(), strictHooksRecordSchema]).optional(),\n })\n .strict();\n\nexport const agentYamlConfigSchema: z.ZodType<AgentYamlConfig> = z.object({\n id: extensibleAgentNameSchema,\n title: z.string(),\n description: z.string(),\n model: modelNameSchema.optional(),\n tools: z.array(z.string()),\n disallowedTools: z.array(z.string()).optional(),\n permissionMode: permissionModeSchema.optional(),\n hooks: hooksRecordSchema.optional(),\n outputFormat: z.string().optional(),\n domain: extensibleDomainSchema.optional(),\n custom: z.boolean().optional(),\n});\n\n// Defined before projectConfigLoaderSchema so it can reference stackAgentConfigSchema\n// Single skill assignment element: either a bare SkillId string or an object { id, preloaded? }\nconst skillAssignmentElementSchema = z.union([extensibleSkillIdSchema, skillAssignmentSchema]);\n\n/**\n * Agent config within a stack: maps category to skill assignment(s).\n * Keys restricted to valid Category values from skill-categories.ts.\n * Lenient: accepts bare string, object, or array from YAML.\n * Consumers normalize all values to SkillAssignment[] after parsing.\n *\n * Uses z.record(z.string()) with superRefine for key validation because\n * z.record(z.enum()) treats all enum values as required properties.\n */\nexport const stackAgentConfigSchema = z\n .record(\n z.string(),\n z.union([skillAssignmentElementSchema, z.array(skillAssignmentElementSchema)]),\n )\n .superRefine(\n validateExtensibleRecordKeys(CATEGORY_VALUES_SET, customExtensions.categories, \"category\"),\n );\n\n/**\n * Lenient loader for .claude-src/config.ts (ProjectConfig).\n * name/agents optional since partial configs are valid at load time.\n * Full validation happens in validateProjectConfig().\n */\nexport const projectConfigLoaderSchema = z\n .object({\n version: z.literal(\"1\").optional(),\n /** Project/plugin name in kebab-case */\n name: z.string().optional(),\n description: z.string().optional(),\n /** Per-agent configuration with scope (e.g., [{ name: \"web-developer\", scope: \"project\" }]) */\n agents: z\n .array(\n z.object({\n name: z.string(),\n scope: z.enum([\"project\", \"global\"]),\n }),\n )\n .optional(),\n /** Per-skill configuration with scope and source */\n skills: z\n .array(\n z.object({\n id: extensibleSkillIdSchema,\n scope: z.enum([\"project\", \"global\"]),\n source: z.string(),\n }),\n )\n .optional(),\n\n /** Author handle (e.g., \"@vince\") */\n author: z.string().optional(),\n /** Selected domains from the wizard (persisted for edit mode restoration) */\n domains: z.array(extensibleDomainSchema).optional(),\n /** Selected agents from the wizard (persisted for edit mode restoration) */\n selectedAgents: z.array(z.string()).optional(),\n /** Agent-to-category-to-skill mappings from selected stack (accepts same formats as stacks.ts) */\n stack: z.record(z.string(), stackAgentConfigSchema).optional(),\n /** Skills source path or URL (e.g., \"github:my-org/skills\") */\n source: z.string().optional(),\n /** Marketplace identifier for plugin installation */\n marketplace: z.string().optional(),\n /** Separate source for agents when different from skills source */\n agentsSource: z.string().optional(),\n })\n .passthrough();\n\nexport const categoryDefinitionSchema: z.ZodType<CategoryDefinition> = z.object({\n id: extensibleCategorySchema,\n displayName: z.string(),\n description: z.string(),\n domain: extensibleDomainSchema.optional() as z.ZodType<Domain | undefined>,\n exclusive: z.boolean(),\n required: z.boolean(),\n order: z.number(),\n icon: z.string().optional(),\n});\n\n// Lenient: accepts both SkillId and SkillSlug, resolved to canonical IDs by matrix-loader\nconst skillRefInYaml = z.string() as z.ZodType<SkillId>;\n\nexport const conflictRuleSchema: z.ZodType<ConflictRule> = z.object({\n skills: z.array(skillRefInYaml).min(2),\n reason: z.string(),\n});\n\nexport const discourageRuleSchema: z.ZodType<DiscourageRule> = z.object({\n skills: z.array(skillRefInYaml).min(2),\n reason: z.string(),\n});\n\nexport const recommendationSchema: z.ZodType<Recommendation> = z.object({\n skill: skillIdSchema,\n reason: z.string(),\n});\n\nexport const compatibilityGroupSchema: z.ZodType<CompatibilityGroup> = z.object({\n skills: z.array(skillIdSchema).min(2),\n reason: z.string(),\n});\n\nexport const setupPairSchema: z.ZodType<SetupPair> = z.object({\n setup: skillIdSchema,\n configures: z.array(skillIdSchema).min(1),\n reason: z.string(),\n});\n\nexport const requireRuleSchema: z.ZodType<RequireRule> = z.object({\n skill: skillRefInYaml,\n needs: z.array(skillRefInYaml).min(1),\n needsAny: z.boolean().optional(),\n reason: z.string(),\n});\n\nexport const alternativeGroupSchema: z.ZodType<AlternativeGroup> = z.object({\n purpose: z.string(),\n skills: z.array(skillRefInYaml).min(1),\n});\n\nexport const relationshipDefinitionsSchema: z.ZodType<RelationshipDefinitions> = z.object({\n conflicts: z.array(conflictRuleSchema),\n discourages: z.array(discourageRuleSchema),\n recommends: z.array(recommendationSchema),\n requires: z.array(requireRuleSchema),\n alternatives: z.array(alternativeGroupSchema),\n compatibleWith: z.array(compatibilityGroupSchema).optional().default([]),\n setupPairs: z.array(setupPairSchema).optional().default([]),\n});\n\n/**\n * Standalone skill-categories.ts file schema.\n * Top-level object with version string and categories map using existing categoryDefinitionSchema.\n */\nexport const skillCategoriesFileSchema = z.object({\n version: z.string(),\n categories: z\n .record(z.string(), categoryDefinitionSchema)\n .superRefine(\n validateExtensibleRecordKeys(\n CATEGORY_VALUES_SET,\n customExtensions.categories,\n \"category key\",\n ),\n ) as z.ZodType<CategoryMap>,\n});\n\n/**\n * Standalone skill-rules.ts file schema.\n * Contains version and aggregate relationship rules between skills.\n */\nexport const skillRulesFileSchema = z.object({\n version: z.string(),\n relationships: relationshipDefinitionsSchema.optional(),\n});\n\n/**\n * Raw metadata from a local skill's metadata.yaml.\n * displayName and category are required — the skill must declare both.\n */\nexport const localRawMetadataSchema = z\n .object({\n /** Short name shown in the wizard grid (e.g., \"my-custom-react\") */\n displayName: z.string(),\n /** Kebab-case short key for alias resolution (e.g., \"react\") */\n slug: z.string() as z.ZodType<SkillSlug>,\n /** One-line description for the wizard */\n cliDescription: z.string().optional(),\n /** Category to place this skill in (e.g., \"web-framework\") */\n // Field accepts any string; cross-field validation in superRefine enforces strict/custom rules\n category: z.string() as z.ZodType<CategoryPath>,\n /** When an AI agent should invoke this skill */\n usageGuidance: z.string().optional(),\n tags: z.array(z.string()).optional(),\n /** Domain this skill belongs to (e.g., \"web\", \"api\", \"cli\") */\n domain: extensibleDomainSchema,\n /** True if this skill was created outside the CLI's built-in vocabulary */\n custom: z.boolean().optional(),\n })\n .passthrough()\n .superRefine(validateCategoryField);\n\n/** Metadata for local skills that were forked/copied from a marketplace skill */\nexport const localSkillMetadataSchema = z\n .object({\n forkedFrom: z\n .object({\n /** Original skill ID before forking (e.g., \"web-framework-react\") */\n skillId: skillIdSchema,\n /** SHA hash of the original content at fork time (for diff detection) */\n contentHash: z.string(),\n /** ISO date when the fork was created */\n date: z.string(),\n /** Source URL the skill was installed from (e.g., \"github:agents-inc/skills\") */\n source: z.string().optional(),\n })\n .optional(),\n })\n .passthrough();\n\nexport const stackSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string(),\n /** Maps agent IDs to their category-to-skill assignments */\n agents: z.record(z.string(), stackAgentConfigSchema),\n /** High-level philosophy guiding this stack's technology choices */\n philosophy: z.string().optional(),\n});\n\n// Pre-normalization schema: values may be string or string[].\n// loadStacks() normalizes to StacksConfig (all values SkillId[]) after parsing.\nexport const stacksConfigSchema = z.object({\n stacks: z.array(stackSchema).min(1),\n});\n\nexport const marketplaceRemoteSourceSchema: z.ZodType<MarketplaceRemoteSource> = z.object({\n source: z.enum([\"github\", \"url\"]),\n repo: z.string().optional(),\n url: z.string().optional(),\n ref: z.string().optional(),\n});\n\nexport const marketplacePluginSchema: z.ZodType<MarketplacePlugin> = z.object({\n name: z.string().min(1),\n /** Local directory path (relative to pluginRoot) or remote source config */\n source: z.union([z.string(), marketplaceRemoteSourceSchema]),\n description: z.string().optional(),\n version: z.string().optional(),\n author: pluginAuthorSchema.optional(),\n /** Marketplace category for grouping (e.g., \"framework\", \"testing\") */\n category: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n});\n\nexport const marketplaceOwnerSchema: z.ZodType<MarketplaceOwner> = z.object({\n name: z.string().min(1),\n email: z.string().optional(),\n});\n\nexport const marketplaceMetadataSchema: z.ZodType<MarketplaceMetadata> = z.object({\n /** Base directory for resolving plugin source paths (e.g., \"plugins/\") */\n pluginRoot: z.string().optional(),\n});\n\nexport const marketplaceSchema: z.ZodType<Marketplace> = z.object({\n $schema: z.string().optional(),\n name: z.string().min(1),\n version: z.string().min(1),\n description: z.string().optional(),\n owner: marketplaceOwnerSchema,\n metadata: marketplaceMetadataSchema.optional(),\n plugins: z.array(marketplacePluginSchema).min(1),\n});\n\n/** Tool permission overrides (allow/deny lists for Claude Code tool access) */\nexport const permissionConfigSchema = z.object({\n /** Tool names or patterns to explicitly allow */\n allow: z.array(z.string()).optional(),\n /** Tool names or patterns to explicitly deny */\n deny: z.array(z.string()).optional(),\n});\n\n/** Settings file schema (.claude/settings.yaml) for project-level configuration */\nexport const settingsFileSchema = z\n .object({\n permissions: permissionConfigSchema.optional(),\n })\n .passthrough();\n\n/** Metadata for skills imported via `agentsinc import skill` (tracks original source for updates) */\nexport const importedSkillMetadataSchema = z\n .object({\n forkedFrom: z\n .object({\n /** Source URL or identifier where the skill was imported from */\n source: z.string(),\n /** Original skill name in the source */\n skillName: z.string(),\n /** SHA hash of the original content at import time */\n contentHash: z.string(),\n /** ISO date when the import was performed */\n date: z.string(),\n })\n .optional(),\n })\n .passthrough();\n\n/** Branding overrides for white-labeling the CLI */\nexport const brandingConfigSchema = z.object({\n /** Custom CLI name (e.g., \"Acme Dev Tools\") */\n name: z.string().optional(),\n /** Custom tagline shown in wizard header */\n tagline: z.string().optional(),\n});\n\n/**\n * Project source configuration from .claude-src/config.ts.\n * Stores multi-source settings, custom directory overrides, and bound skills.\n */\nexport const projectSourceConfigSchema = z\n .object({\n /** Primary skills source (path or URL) */\n source: z.string().optional(),\n /** Author handle for this project's config */\n author: z.string().optional(),\n /** Marketplace identifier for plugin installation */\n marketplace: z.string().optional(),\n /** Separate source for agent definitions (when different from skills) */\n agentsSource: z.string().optional(),\n /** Additional skill sources (private marketplaces, custom repos) */\n sources: z\n .array(\n z.object({\n /** Display name for the source (shown in wizard) */\n name: z.string(),\n /** Source URL (e.g., \"github:acme-corp/claude-skills\") */\n url: z.string(),\n description: z.string().optional(),\n /** Git ref (branch/tag/commit) for the source */\n ref: z.string().optional(),\n }),\n )\n .optional(),\n /** Skills explicitly bound to categories via search (from Step Sources) */\n boundSkills: z.array(boundSkillSchema).optional(),\n /** Branding overrides for white-labeling the CLI */\n branding: brandingConfigSchema.optional(),\n /** Custom skills directory override (default: \"src/skills\") */\n skillsDir: z.string().optional(),\n /** Custom agents directory override (default: \"src/agents\") */\n agentsDir: z.string().optional(),\n /** Custom stacks file path override (default: \"config/stacks.ts\") */\n stacksFile: z.string().optional(),\n /** Custom categories file path override (default: \"config/skill-categories.ts\") */\n categoriesFile: z.string().optional(),\n /** Custom rules file path override (default: \"config/skill-rules.ts\") */\n rulesFile: z.string().optional(),\n })\n .passthrough();\n\n/**\n * Strict schema for IDE validation of .claude-src/config.ts (ProjectSourceConfig).\n * Used to generate project-source-config.schema.json for IDE validation.\n * All fields optional (source configs may have any subset) but no unknown properties.\n */\nexport const projectSourceConfigValidationSchema = z.object({\n source: z.string().optional(),\n author: z.string().optional(),\n marketplace: z.string().optional(),\n agentsSource: z.string().optional(),\n sources: z\n .array(\n z.object({\n name: z.string(),\n url: z.string(),\n description: z.string().optional(),\n ref: z.string().optional(),\n }),\n )\n .optional(),\n boundSkills: z.array(boundSkillSchema).optional(),\n branding: brandingConfigSchema.optional(),\n skillsDir: z.string().optional(),\n agentsDir: z.string().optional(),\n stacksFile: z.string().optional(),\n categoriesFile: z.string().optional(),\n rulesFile: z.string().optional(),\n});\n\n// Strict validation schemas enforce all constraints and use .strict() to reject unknown fields,\n// unlike the lenient loader schemas above which use .passthrough() for forward compatibility at parse boundaries\n\n/** Strict schema for compiled agent metadata.yaml output. Lenient id (any string) since marketplace agents may use custom identifiers. */\nexport const agentYamlGenerationSchema = z\n .object({\n $schema: z.string().optional(),\n id: z.string().min(1),\n title: z.string().min(1),\n description: z.string().min(1),\n model: modelNameSchema.optional(),\n tools: z.array(z.string()).min(1),\n disallowedTools: z.array(z.string()).optional(),\n permissionMode: permissionModeSchema.optional(),\n hooks: strictHooksRecordSchema.optional(),\n outputFormat: z.string().optional(),\n domain: extensibleDomainSchema.optional(),\n custom: z.boolean().optional(),\n })\n .strict();\n\n/** Strict validation for agent AGENT.md frontmatter (used by plugin-validator) */\nexport const agentFrontmatterValidationSchema = z\n .object({\n /** Agent name in kebab-case (becomes the Task tool identifier) */\n name: z.string().regex(KEBAB_CASE_PATTERN).min(1),\n description: z.string().min(1),\n /** Comma-separated list of allowed tools */\n tools: z.string().optional(),\n /** Comma-separated list of denied tools */\n disallowedTools: z.string().optional(),\n model: modelNameSchema.optional(),\n permissionMode: permissionModeSchema.optional(),\n /** Skill names to preload (embed in agent prompt) */\n skills: z.array(z.string().min(1)).optional(),\n hooks: strictHooksRecordSchema.optional(),\n })\n .strict();\n\n/** Strict validation for SKILL.md frontmatter (matches Claude Code plugin spec) */\nexport const skillFrontmatterValidationSchema = z\n .object({\n name: z.string().min(1),\n description: z.string().min(1),\n /** If true, Claude cannot invoke this skill on its own */\n \"disable-model-invocation\": z.boolean().optional(),\n /** If true, user can invoke this skill directly */\n \"user-invocable\": z.boolean().optional(),\n /** Comma-separated list of tools this skill can use */\n \"allowed-tools\": z.string().optional(),\n model: modelNameSchema.optional(),\n /** \"fork\" means skill runs in a forked context (separate conversation) */\n context: z.enum([\"fork\"]).optional(),\n /** Agent name this skill is scoped to */\n agent: z.string().optional(),\n /** Hint text shown when user invokes the skill */\n \"argument-hint\": z.string().optional(),\n })\n .strict();\n\n/** Strict validation for metadata.yaml in published skills (enforces author format, length limits) */\nexport const metadataValidationSchema = z\n .object({\n /** Domain-prefixed category (e.g., \"web-framework\") */\n category: extensibleCategorySchema,\n /** Author handle — must start with @ (e.g., \"@vince\") */\n author: z.string().regex(/^@[a-z][a-z0-9-]*$/),\n /** Short display name for the wizard grid (max 30 chars) */\n displayName: z.string().min(1).max(30),\n /** One-line description for the wizard (max 60 chars) */\n cliDescription: z.string().min(1).max(60),\n /** When an AI agent should invoke this skill (min 10 chars to ensure usefulness) */\n usageGuidance: z.string().min(10),\n /** Kebab-case short key for alias resolution, search, and relationship rules */\n slug: z\n .string()\n .regex(/^[a-z][a-z0-9-]*$/)\n .min(1)\n .max(50),\n /** Searchable tags — kebab-case only */\n tags: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)).optional(),\n /** 7-char hex SHA of skill content (for change detection) */\n contentHash: z\n .string()\n .regex(/^[a-f0-9]{7}$/)\n .optional(),\n /** ISO date of last update */\n updated: z.string().optional(),\n /** Provenance tracking when skill was forked from another */\n forkedFrom: z\n .object({\n /** Original skill ID */\n skillId: z.string(),\n /** Version of the original at fork time */\n version: z.number().int().min(1).optional(),\n /** Content hash of the original at fork time */\n contentHash: z.string(),\n /** Source URL or identifier */\n source: z.string().optional(),\n /** ISO date of the fork */\n date: z.string(),\n })\n .optional(),\n /** Domain assignment from metadata */\n domain: extensibleDomainSchema.optional(),\n /** True if this skill was created outside the CLI's built-in vocabulary */\n custom: z.boolean().optional(),\n })\n .strict();\n\nconst stackSkillAssignmentSchema = z\n .object({\n id: z.string().min(1),\n /** If true, skill content is embedded in the compiled agent prompt */\n preloaded: z.boolean().optional(),\n })\n .strict();\n\n/** Strict validation for published stack config.yaml (marketplace stacks) */\nexport const stackConfigValidationSchema = z\n .object({\n /** Unique stack identifier in kebab-case */\n id: z.string().regex(KEBAB_CASE_PATTERN).optional(),\n name: z.string().min(1),\n version: z.string(),\n author: z.string().min(1),\n description: z.string().optional(),\n /** ISO date when this stack was first created */\n created: z.string().optional(),\n /** ISO date of last update */\n updated: z.string().optional(),\n /** Primary framework this stack is designed for (e.g., \"nextjs\", \"remix\") */\n framework: z.string().optional(),\n /** All skills used in this stack (flat list, at least one required) */\n skills: z.array(stackSkillAssignmentSchema).min(1),\n /** Agent IDs this stack compiles (at least one required) */\n agents: z.array(z.string().regex(KEBAB_CASE_PATTERN)).min(1),\n /** Per-agent skill assignments: { agentId: { category: [skillAssignment] } } */\n agentSkills: z\n .record(z.string(), z.record(z.string(), z.array(stackSkillAssignmentSchema)))\n .optional(),\n /** High-level philosophy guiding technology choices */\n philosophy: z.string().optional(),\n /** Guiding principles for agents using this stack */\n principles: z.array(z.string().min(1)).optional(),\n tags: z.array(z.string().regex(KEBAB_CASE_PATTERN)).optional(),\n /** Per-skill overrides: alternative suggestions and lock status */\n overrides: z\n .record(\n z.string(),\n z\n .object({\n /** Suggested alternative skill IDs if this one is swapped */\n alternatives: z.array(z.string().min(1)).optional(),\n /** If true, this skill cannot be swapped by the user */\n locked: z.boolean().optional(),\n })\n .strict(),\n )\n .optional(),\n /** Community metrics for sorting/ranking */\n metrics: z\n .object({\n upvotes: z.number().int().min(0).optional(),\n downloads: z.number().int().min(0).optional(),\n })\n .strict()\n .optional(),\n /** Lifecycle hooks triggered by file changes or commands */\n hooks: z\n .record(\n z.string(),\n z.array(\n z.object({\n /** Glob pattern to match file paths (e.g., \"*.tsx\") */\n matcher: z.string().optional(),\n hooks: z.array(agentHookActionSchema).min(1),\n }),\n ),\n )\n .optional(),\n })\n .strict();\n\n/** Format Zod validation issues into a human-readable string (e.g., \"path.to.field: Expected string; other: Required\") */\nexport function formatZodErrors(issues: z.ZodIssue[]): string {\n return issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n}\n\n/**\n * Validates that a parsed JSON/YAML value does not exceed a maximum nesting depth.\n * Returns true if the structure is within limits, false if it exceeds maxDepth.\n */\nexport function validateNestingDepth(value: unknown, maxDepth: number): boolean {\n function check(val: unknown, depth: number): boolean {\n if (depth > maxDepth) return false;\n if (Array.isArray(val)) {\n return val.every((item) => check(item, depth + 1));\n }\n if (val !== null && typeof val === \"object\") {\n return Object.values(val).every((v) => check(v, depth + 1));\n }\n return true;\n }\n return check(value, 0);\n}\n\n/**\n * Logs warnings for unknown fields in a parsed object compared to a list of expected keys.\n * Used at security-critical parsing boundaries (marketplace, settings) where `.passthrough()`\n * is kept for forward compatibility but unexpected fields should be surfaced.\n */\nexport function warnUnknownFields(\n parsed: Record<string, unknown>,\n expectedKeys: readonly string[],\n context: string,\n): void {\n const expectedSet = new Set(expectedKeys);\n const unknownKeys = Object.keys(parsed).filter((k) => !expectedSet.has(k));\n if (unknownKeys.length > 0) {\n warn(`Unknown fields in ${context}: ${unknownKeys.join(\", \")}`);\n }\n}\n\nexport type SchemaExtensionOptions = {\n categories?: string[];\n domains?: string[];\n agentNames?: string[];\n skillIds?: string[];\n};\n\n/**\n * Extends runtime schema validation to accept custom values discovered from\n * source matrices, agent directories, and skill directories.\n *\n * This populates the customExtensions sets checked by categoryPathSchema,\n * stackAgentConfigSchema, agentYamlConfigSchema, metadataValidationSchema,\n * skillAssignmentSchema, and projectConfigLoaderSchema at parse time.\n *\n * Idempotent: calling multiple times accumulates values (Set deduplicates).\n */\nexport function extendSchemasWithCustomValues(options: SchemaExtensionOptions): void {\n for (const category of options.categories ?? []) {\n customExtensions.categories.add(category);\n }\n for (const domain of options.domains ?? []) {\n customExtensions.domains.add(domain);\n }\n for (const agentName of options.agentNames ?? []) {\n customExtensions.agentNames.add(agentName);\n }\n for (const skillId of options.skillIds ?? []) {\n customExtensions.skillIds.add(skillId);\n }\n}\n\n/**\n * Clears all custom schema extensions. Used in tests to reset state between runs.\n */\nexport function resetSchemaExtensions(): void {\n customExtensions.categories.clear();\n customExtensions.domains.clear();\n customExtensions.agentNames.clear();\n customExtensions.skillIds.clear();\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CLI_COLORS
4
- } from "./chunk-AWP5A6IM.js";
4
+ } from "./chunk-6OWHQ7HM.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -17,4 +17,4 @@ var ViewTitle = ({ children }) => {
17
17
  export {
18
18
  ViewTitle
19
19
  };
20
- //# sourceMappingURL=chunk-CMNKHDOX.js.map
20
+ //# sourceMappingURL=chunk-MGNYPVOJ.js.map