@claude-collective/cli 0.2.0 → 0.8.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 (190) hide show
  1. package/CHANGELOG.md +178 -0
  2. package/README.md +1 -1
  3. package/dist/chunk-3HBTELJN.js +114 -0
  4. package/dist/chunk-3HBTELJN.js.map +1 -0
  5. package/dist/chunk-3ZCB5K33.js +54 -0
  6. package/dist/chunk-3ZCB5K33.js.map +1 -0
  7. package/dist/chunk-66UDJBF6.js +96 -0
  8. package/dist/chunk-66UDJBF6.js.map +1 -0
  9. package/dist/chunk-6LS7XO3H.js +31 -0
  10. package/dist/chunk-6LS7XO3H.js.map +1 -0
  11. package/dist/chunk-A3J6IAXK.js +57 -0
  12. package/dist/chunk-A3J6IAXK.js.map +1 -0
  13. package/dist/chunk-A65SBAAJ.js +69 -0
  14. package/dist/chunk-A65SBAAJ.js.map +1 -0
  15. package/dist/chunk-ALEPJ6YN.js +80 -0
  16. package/dist/chunk-ALEPJ6YN.js.map +1 -0
  17. package/dist/chunk-C4ZTIYFR.js +84 -0
  18. package/dist/chunk-C4ZTIYFR.js.map +1 -0
  19. package/dist/chunk-CIY5UBRB.js +453 -0
  20. package/dist/chunk-CIY5UBRB.js.map +1 -0
  21. package/dist/chunk-DHET7RCE.js +50 -0
  22. package/dist/chunk-DHET7RCE.js.map +1 -0
  23. package/dist/chunk-DHFFRMF6.js +31 -0
  24. package/dist/chunk-DHFFRMF6.js.map +1 -0
  25. package/dist/chunk-DKGL77IY.js +307 -0
  26. package/dist/chunk-DKGL77IY.js.map +1 -0
  27. package/dist/chunk-ED73HCW2.js +315 -0
  28. package/dist/chunk-ED73HCW2.js.map +1 -0
  29. package/dist/chunk-FNOYEXUE.js +308 -0
  30. package/dist/chunk-FNOYEXUE.js.map +1 -0
  31. package/dist/chunk-G2FBJOZG.js +141 -0
  32. package/dist/chunk-G2FBJOZG.js.map +1 -0
  33. package/dist/chunk-HNDT5QRB.js +120 -0
  34. package/dist/chunk-HNDT5QRB.js.map +1 -0
  35. package/dist/chunk-K7PTOVX4.js +158 -0
  36. package/dist/chunk-K7PTOVX4.js.map +1 -0
  37. package/dist/chunk-LQTST4WY.js +91 -0
  38. package/dist/chunk-LQTST4WY.js.map +1 -0
  39. package/dist/chunk-LVKRVFYR.js +54 -0
  40. package/dist/chunk-LVKRVFYR.js.map +1 -0
  41. package/dist/chunk-M7YCPFIX.js +108 -0
  42. package/dist/chunk-M7YCPFIX.js.map +1 -0
  43. package/dist/chunk-MJSFR562.js +57 -0
  44. package/dist/chunk-MJSFR562.js.map +1 -0
  45. package/dist/chunk-MMDXNZPF.js +69 -0
  46. package/dist/chunk-MMDXNZPF.js.map +1 -0
  47. package/dist/chunk-MYAVQ23U.js +356 -0
  48. package/dist/chunk-MYAVQ23U.js.map +1 -0
  49. package/dist/chunk-NGBFJJ7Q.js +124 -0
  50. package/dist/chunk-NGBFJJ7Q.js.map +1 -0
  51. package/dist/chunk-OLBOTK3O.js +64 -0
  52. package/dist/chunk-OLBOTK3O.js.map +1 -0
  53. package/dist/chunk-PPNTD5LO.js +330 -0
  54. package/dist/chunk-PPNTD5LO.js.map +1 -0
  55. package/dist/chunk-Q2LH2DAB.js +392 -0
  56. package/dist/chunk-Q2LH2DAB.js.map +1 -0
  57. package/dist/chunk-Q6DR5QUH.js +547 -0
  58. package/dist/chunk-Q6DR5QUH.js.map +1 -0
  59. package/dist/chunk-QESUUPOE.js +241 -0
  60. package/dist/chunk-QESUUPOE.js.map +1 -0
  61. package/dist/chunk-QGGSLMO3.js +607 -0
  62. package/dist/chunk-QGGSLMO3.js.map +1 -0
  63. package/dist/chunk-SEBPPFUW.js +478 -0
  64. package/dist/chunk-SEBPPFUW.js.map +1 -0
  65. package/dist/chunk-SYQ7R2JO.js +95 -0
  66. package/dist/chunk-SYQ7R2JO.js.map +1 -0
  67. package/dist/chunk-TOPAIL5W.js +22 -0
  68. package/dist/chunk-TOPAIL5W.js.map +1 -0
  69. package/dist/chunk-U4VYHKPM.js +110 -0
  70. package/dist/chunk-U4VYHKPM.js.map +1 -0
  71. package/dist/chunk-UOWHJ6BE.js +83 -0
  72. package/dist/chunk-UOWHJ6BE.js.map +1 -0
  73. package/dist/chunk-XKEG3SCV.js +86 -0
  74. package/dist/chunk-XKEG3SCV.js.map +1 -0
  75. package/dist/chunk-XY3XDVMI.js +15599 -0
  76. package/dist/chunk-XY3XDVMI.js.map +1 -0
  77. package/dist/chunk-Y3V43XCU.js +76 -0
  78. package/dist/chunk-Y3V43XCU.js.map +1 -0
  79. package/dist/chunk-YKXBGCFD.js +129 -0
  80. package/dist/chunk-YKXBGCFD.js.map +1 -0
  81. package/dist/cli-v2/defaults/agent-mappings.yaml +185 -0
  82. package/dist/commands/build/marketplace.js +254 -0
  83. package/dist/commands/build/marketplace.js.map +1 -0
  84. package/dist/commands/build/plugins.js +324 -0
  85. package/dist/commands/build/plugins.js.map +1 -0
  86. package/dist/commands/build/stack.js +169 -0
  87. package/dist/commands/build/stack.js.map +1 -0
  88. package/dist/commands/compile.js +461 -0
  89. package/dist/commands/compile.js.map +1 -0
  90. package/dist/commands/config/get.js +60 -0
  91. package/dist/commands/config/get.js.map +1 -0
  92. package/dist/commands/config/index.js +22 -0
  93. package/dist/commands/config/index.js.map +1 -0
  94. package/dist/commands/config/path.js +35 -0
  95. package/dist/commands/config/path.js.map +1 -0
  96. package/dist/commands/config/set-project.js +61 -0
  97. package/dist/commands/config/set-project.js.map +1 -0
  98. package/dist/commands/config/set.js +60 -0
  99. package/dist/commands/config/set.js.map +1 -0
  100. package/dist/commands/config/show.js +13 -0
  101. package/dist/commands/config/show.js.map +1 -0
  102. package/dist/commands/config/unset-project.js +57 -0
  103. package/dist/commands/config/unset-project.js.map +1 -0
  104. package/dist/commands/config/unset.js +56 -0
  105. package/dist/commands/config/unset.js.map +1 -0
  106. package/dist/commands/diff.js +755 -0
  107. package/dist/commands/diff.js.map +1 -0
  108. package/dist/commands/doctor.js +413 -0
  109. package/dist/commands/doctor.js.map +1 -0
  110. package/dist/commands/edit.js +254 -0
  111. package/dist/commands/edit.js.map +1 -0
  112. package/dist/commands/eject.js +208 -0
  113. package/dist/commands/eject.js.map +1 -0
  114. package/dist/commands/info.js +205 -0
  115. package/dist/commands/info.js.map +1 -0
  116. package/dist/commands/init.js +915 -0
  117. package/dist/commands/init.js.map +1 -0
  118. package/dist/commands/list.js +44 -0
  119. package/dist/commands/list.js.map +1 -0
  120. package/dist/commands/new/agent.js +230 -0
  121. package/dist/commands/new/agent.js.map +1 -0
  122. package/dist/commands/new/skill.js +204 -0
  123. package/dist/commands/new/skill.js.map +1 -0
  124. package/dist/commands/outdated.js +242 -0
  125. package/dist/commands/outdated.js.map +1 -0
  126. package/dist/commands/search.js +115 -0
  127. package/dist/commands/search.js.map +1 -0
  128. package/dist/commands/test-imports.js +92 -0
  129. package/dist/commands/test-imports.js.map +1 -0
  130. package/dist/commands/uninstall.js +309 -0
  131. package/dist/commands/uninstall.js.map +1 -0
  132. package/dist/commands/update.js +428 -0
  133. package/dist/commands/update.js.map +1 -0
  134. package/dist/commands/validate.js +375 -0
  135. package/dist/commands/validate.js.map +1 -0
  136. package/dist/commands/version/bump.js +95 -0
  137. package/dist/commands/version/bump.js.map +1 -0
  138. package/dist/commands/version/index.js +70 -0
  139. package/dist/commands/version/index.js.map +1 -0
  140. package/dist/commands/version/set.js +101 -0
  141. package/dist/commands/version/set.js.map +1 -0
  142. package/dist/commands/version/show.js +70 -0
  143. package/dist/commands/version/show.js.map +1 -0
  144. package/dist/components/common/confirm.js +9 -0
  145. package/dist/components/common/confirm.js.map +1 -0
  146. package/dist/components/common/message.js +24 -0
  147. package/dist/components/common/message.js.map +1 -0
  148. package/dist/components/common/spinner.js +14 -0
  149. package/dist/components/common/spinner.js.map +1 -0
  150. package/dist/components/wizard/category-grid.js +9 -0
  151. package/dist/components/wizard/category-grid.js.map +1 -0
  152. package/dist/components/wizard/category-grid.test.js +728 -0
  153. package/dist/components/wizard/category-grid.test.js.map +1 -0
  154. package/dist/components/wizard/section-progress.js +9 -0
  155. package/dist/components/wizard/section-progress.js.map +1 -0
  156. package/dist/components/wizard/section-progress.test.js +281 -0
  157. package/dist/components/wizard/section-progress.test.js.map +1 -0
  158. package/dist/components/wizard/step-approach.js +11 -0
  159. package/dist/components/wizard/step-approach.js.map +1 -0
  160. package/dist/components/wizard/step-build.js +15 -0
  161. package/dist/components/wizard/step-build.js.map +1 -0
  162. package/dist/components/wizard/step-build.test.js +729 -0
  163. package/dist/components/wizard/step-build.test.js.map +1 -0
  164. package/dist/components/wizard/step-confirm.js +9 -0
  165. package/dist/components/wizard/step-confirm.js.map +1 -0
  166. package/dist/components/wizard/step-refine.js +9 -0
  167. package/dist/components/wizard/step-refine.js.map +1 -0
  168. package/dist/components/wizard/step-refine.test.js +235 -0
  169. package/dist/components/wizard/step-refine.test.js.map +1 -0
  170. package/dist/components/wizard/step-stack-options.js +11 -0
  171. package/dist/components/wizard/step-stack-options.js.map +1 -0
  172. package/dist/components/wizard/step-stack.js +11 -0
  173. package/dist/components/wizard/step-stack.js.map +1 -0
  174. package/dist/components/wizard/wizard-tabs.js +11 -0
  175. package/dist/components/wizard/wizard-tabs.js.map +1 -0
  176. package/dist/components/wizard/wizard.js +20 -0
  177. package/dist/components/wizard/wizard.js.map +1 -0
  178. package/dist/hooks/init.js +41 -0
  179. package/dist/hooks/init.js.map +1 -0
  180. package/dist/index.js +10 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/magic-string.es-RGXYGAW3.js +1316 -0
  183. package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
  184. package/dist/stores/wizard-store.js +10 -0
  185. package/dist/stores/wizard-store.js.map +1 -0
  186. package/dist/stores/wizard-store.test.js +405 -0
  187. package/dist/stores/wizard-store.test.js.map +1 -0
  188. package/package.json +44 -25
  189. package/dist/cli/index.js +0 -6314
  190. package/dist/cli/index.js.map +0 -1
@@ -0,0 +1,755 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ loadSkillsMatrixFromSource
4
+ } from "../chunk-DKGL77IY.js";
5
+ import "../chunk-QGGSLMO3.js";
6
+ import "../chunk-NGBFJJ7Q.js";
7
+ import "../chunk-QESUUPOE.js";
8
+ import {
9
+ LOCAL_SKILLS_PATH
10
+ } from "../chunk-A3J6IAXK.js";
11
+ import {
12
+ BaseCommand,
13
+ EXIT_CODES
14
+ } from "../chunk-SYQ7R2JO.js";
15
+ import "../chunk-TOPAIL5W.js";
16
+ import {
17
+ fileExists,
18
+ listDirectories,
19
+ readFile
20
+ } from "../chunk-MMDXNZPF.js";
21
+ import {
22
+ init_esm_shims
23
+ } from "../chunk-DHET7RCE.js";
24
+
25
+ // src/cli-v2/commands/diff.ts
26
+ init_esm_shims();
27
+ import { Args, Flags } from "@oclif/core";
28
+
29
+ // node_modules/chalk/source/index.js
30
+ init_esm_shims();
31
+
32
+ // node_modules/chalk/source/vendor/ansi-styles/index.js
33
+ init_esm_shims();
34
+ var ANSI_BACKGROUND_OFFSET = 10;
35
+ var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
36
+ var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
37
+ var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
38
+ var styles = {
39
+ modifier: {
40
+ reset: [0, 0],
41
+ // 21 isn't widely supported and 22 does the same thing
42
+ bold: [1, 22],
43
+ dim: [2, 22],
44
+ italic: [3, 23],
45
+ underline: [4, 24],
46
+ overline: [53, 55],
47
+ inverse: [7, 27],
48
+ hidden: [8, 28],
49
+ strikethrough: [9, 29]
50
+ },
51
+ color: {
52
+ black: [30, 39],
53
+ red: [31, 39],
54
+ green: [32, 39],
55
+ yellow: [33, 39],
56
+ blue: [34, 39],
57
+ magenta: [35, 39],
58
+ cyan: [36, 39],
59
+ white: [37, 39],
60
+ // Bright color
61
+ blackBright: [90, 39],
62
+ gray: [90, 39],
63
+ // Alias of `blackBright`
64
+ grey: [90, 39],
65
+ // Alias of `blackBright`
66
+ redBright: [91, 39],
67
+ greenBright: [92, 39],
68
+ yellowBright: [93, 39],
69
+ blueBright: [94, 39],
70
+ magentaBright: [95, 39],
71
+ cyanBright: [96, 39],
72
+ whiteBright: [97, 39]
73
+ },
74
+ bgColor: {
75
+ bgBlack: [40, 49],
76
+ bgRed: [41, 49],
77
+ bgGreen: [42, 49],
78
+ bgYellow: [43, 49],
79
+ bgBlue: [44, 49],
80
+ bgMagenta: [45, 49],
81
+ bgCyan: [46, 49],
82
+ bgWhite: [47, 49],
83
+ // Bright color
84
+ bgBlackBright: [100, 49],
85
+ bgGray: [100, 49],
86
+ // Alias of `bgBlackBright`
87
+ bgGrey: [100, 49],
88
+ // Alias of `bgBlackBright`
89
+ bgRedBright: [101, 49],
90
+ bgGreenBright: [102, 49],
91
+ bgYellowBright: [103, 49],
92
+ bgBlueBright: [104, 49],
93
+ bgMagentaBright: [105, 49],
94
+ bgCyanBright: [106, 49],
95
+ bgWhiteBright: [107, 49]
96
+ }
97
+ };
98
+ var modifierNames = Object.keys(styles.modifier);
99
+ var foregroundColorNames = Object.keys(styles.color);
100
+ var backgroundColorNames = Object.keys(styles.bgColor);
101
+ var colorNames = [...foregroundColorNames, ...backgroundColorNames];
102
+ function assembleStyles() {
103
+ const codes = /* @__PURE__ */ new Map();
104
+ for (const [groupName, group] of Object.entries(styles)) {
105
+ for (const [styleName, style] of Object.entries(group)) {
106
+ styles[styleName] = {
107
+ open: `\x1B[${style[0]}m`,
108
+ close: `\x1B[${style[1]}m`
109
+ };
110
+ group[styleName] = styles[styleName];
111
+ codes.set(style[0], style[1]);
112
+ }
113
+ Object.defineProperty(styles, groupName, {
114
+ value: group,
115
+ enumerable: false
116
+ });
117
+ }
118
+ Object.defineProperty(styles, "codes", {
119
+ value: codes,
120
+ enumerable: false
121
+ });
122
+ styles.color.close = "\x1B[39m";
123
+ styles.bgColor.close = "\x1B[49m";
124
+ styles.color.ansi = wrapAnsi16();
125
+ styles.color.ansi256 = wrapAnsi256();
126
+ styles.color.ansi16m = wrapAnsi16m();
127
+ styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
128
+ styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
129
+ styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
130
+ Object.defineProperties(styles, {
131
+ rgbToAnsi256: {
132
+ value(red, green, blue) {
133
+ if (red === green && green === blue) {
134
+ if (red < 8) {
135
+ return 16;
136
+ }
137
+ if (red > 248) {
138
+ return 231;
139
+ }
140
+ return Math.round((red - 8) / 247 * 24) + 232;
141
+ }
142
+ return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
143
+ },
144
+ enumerable: false
145
+ },
146
+ hexToRgb: {
147
+ value(hex) {
148
+ const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
149
+ if (!matches) {
150
+ return [0, 0, 0];
151
+ }
152
+ let [colorString] = matches;
153
+ if (colorString.length === 3) {
154
+ colorString = [...colorString].map((character) => character + character).join("");
155
+ }
156
+ const integer = Number.parseInt(colorString, 16);
157
+ return [
158
+ /* eslint-disable no-bitwise */
159
+ integer >> 16 & 255,
160
+ integer >> 8 & 255,
161
+ integer & 255
162
+ /* eslint-enable no-bitwise */
163
+ ];
164
+ },
165
+ enumerable: false
166
+ },
167
+ hexToAnsi256: {
168
+ value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
169
+ enumerable: false
170
+ },
171
+ ansi256ToAnsi: {
172
+ value(code) {
173
+ if (code < 8) {
174
+ return 30 + code;
175
+ }
176
+ if (code < 16) {
177
+ return 90 + (code - 8);
178
+ }
179
+ let red;
180
+ let green;
181
+ let blue;
182
+ if (code >= 232) {
183
+ red = ((code - 232) * 10 + 8) / 255;
184
+ green = red;
185
+ blue = red;
186
+ } else {
187
+ code -= 16;
188
+ const remainder = code % 36;
189
+ red = Math.floor(code / 36) / 5;
190
+ green = Math.floor(remainder / 6) / 5;
191
+ blue = remainder % 6 / 5;
192
+ }
193
+ const value = Math.max(red, green, blue) * 2;
194
+ if (value === 0) {
195
+ return 30;
196
+ }
197
+ let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
198
+ if (value === 2) {
199
+ result += 60;
200
+ }
201
+ return result;
202
+ },
203
+ enumerable: false
204
+ },
205
+ rgbToAnsi: {
206
+ value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
207
+ enumerable: false
208
+ },
209
+ hexToAnsi: {
210
+ value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
211
+ enumerable: false
212
+ }
213
+ });
214
+ return styles;
215
+ }
216
+ var ansiStyles = assembleStyles();
217
+ var ansi_styles_default = ansiStyles;
218
+
219
+ // node_modules/chalk/source/vendor/supports-color/index.js
220
+ init_esm_shims();
221
+ import process2 from "process";
222
+ import os from "os";
223
+ import tty from "tty";
224
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process2.argv) {
225
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
226
+ const position = argv.indexOf(prefix + flag);
227
+ const terminatorPosition = argv.indexOf("--");
228
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
229
+ }
230
+ var { env } = process2;
231
+ var flagForceColor;
232
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
233
+ flagForceColor = 0;
234
+ } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
235
+ flagForceColor = 1;
236
+ }
237
+ function envForceColor() {
238
+ if ("FORCE_COLOR" in env) {
239
+ if (env.FORCE_COLOR === "true") {
240
+ return 1;
241
+ }
242
+ if (env.FORCE_COLOR === "false") {
243
+ return 0;
244
+ }
245
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
246
+ }
247
+ }
248
+ function translateLevel(level) {
249
+ if (level === 0) {
250
+ return false;
251
+ }
252
+ return {
253
+ level,
254
+ hasBasic: true,
255
+ has256: level >= 2,
256
+ has16m: level >= 3
257
+ };
258
+ }
259
+ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
260
+ const noFlagForceColor = envForceColor();
261
+ if (noFlagForceColor !== void 0) {
262
+ flagForceColor = noFlagForceColor;
263
+ }
264
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
265
+ if (forceColor === 0) {
266
+ return 0;
267
+ }
268
+ if (sniffFlags) {
269
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
270
+ return 3;
271
+ }
272
+ if (hasFlag("color=256")) {
273
+ return 2;
274
+ }
275
+ }
276
+ if ("TF_BUILD" in env && "AGENT_NAME" in env) {
277
+ return 1;
278
+ }
279
+ if (haveStream && !streamIsTTY && forceColor === void 0) {
280
+ return 0;
281
+ }
282
+ const min = forceColor || 0;
283
+ if (env.TERM === "dumb") {
284
+ return min;
285
+ }
286
+ if (process2.platform === "win32") {
287
+ const osRelease = os.release().split(".");
288
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
289
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
290
+ }
291
+ return 1;
292
+ }
293
+ if ("CI" in env) {
294
+ if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
295
+ return 3;
296
+ }
297
+ if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
298
+ return 1;
299
+ }
300
+ return min;
301
+ }
302
+ if ("TEAMCITY_VERSION" in env) {
303
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
304
+ }
305
+ if (env.COLORTERM === "truecolor") {
306
+ return 3;
307
+ }
308
+ if (env.TERM === "xterm-kitty") {
309
+ return 3;
310
+ }
311
+ if (env.TERM === "xterm-ghostty") {
312
+ return 3;
313
+ }
314
+ if (env.TERM === "wezterm") {
315
+ return 3;
316
+ }
317
+ if ("TERM_PROGRAM" in env) {
318
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
319
+ switch (env.TERM_PROGRAM) {
320
+ case "iTerm.app": {
321
+ return version >= 3 ? 3 : 2;
322
+ }
323
+ case "Apple_Terminal": {
324
+ return 2;
325
+ }
326
+ }
327
+ }
328
+ if (/-256(color)?$/i.test(env.TERM)) {
329
+ return 2;
330
+ }
331
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
332
+ return 1;
333
+ }
334
+ if ("COLORTERM" in env) {
335
+ return 1;
336
+ }
337
+ return min;
338
+ }
339
+ function createSupportsColor(stream, options = {}) {
340
+ const level = _supportsColor(stream, {
341
+ streamIsTTY: stream && stream.isTTY,
342
+ ...options
343
+ });
344
+ return translateLevel(level);
345
+ }
346
+ var supportsColor = {
347
+ stdout: createSupportsColor({ isTTY: tty.isatty(1) }),
348
+ stderr: createSupportsColor({ isTTY: tty.isatty(2) })
349
+ };
350
+ var supports_color_default = supportsColor;
351
+
352
+ // node_modules/chalk/source/utilities.js
353
+ init_esm_shims();
354
+ function stringReplaceAll(string, substring, replacer) {
355
+ let index = string.indexOf(substring);
356
+ if (index === -1) {
357
+ return string;
358
+ }
359
+ const substringLength = substring.length;
360
+ let endIndex = 0;
361
+ let returnValue = "";
362
+ do {
363
+ returnValue += string.slice(endIndex, index) + substring + replacer;
364
+ endIndex = index + substringLength;
365
+ index = string.indexOf(substring, endIndex);
366
+ } while (index !== -1);
367
+ returnValue += string.slice(endIndex);
368
+ return returnValue;
369
+ }
370
+ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
371
+ let endIndex = 0;
372
+ let returnValue = "";
373
+ do {
374
+ const gotCR = string[index - 1] === "\r";
375
+ returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
376
+ endIndex = index + 1;
377
+ index = string.indexOf("\n", endIndex);
378
+ } while (index !== -1);
379
+ returnValue += string.slice(endIndex);
380
+ return returnValue;
381
+ }
382
+
383
+ // node_modules/chalk/source/index.js
384
+ var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
385
+ var GENERATOR = /* @__PURE__ */ Symbol("GENERATOR");
386
+ var STYLER = /* @__PURE__ */ Symbol("STYLER");
387
+ var IS_EMPTY = /* @__PURE__ */ Symbol("IS_EMPTY");
388
+ var levelMapping = [
389
+ "ansi",
390
+ "ansi",
391
+ "ansi256",
392
+ "ansi16m"
393
+ ];
394
+ var styles2 = /* @__PURE__ */ Object.create(null);
395
+ var applyOptions = (object, options = {}) => {
396
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
397
+ throw new Error("The `level` option should be an integer from 0 to 3");
398
+ }
399
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
400
+ object.level = options.level === void 0 ? colorLevel : options.level;
401
+ };
402
+ var chalkFactory = (options) => {
403
+ const chalk2 = (...strings) => strings.join(" ");
404
+ applyOptions(chalk2, options);
405
+ Object.setPrototypeOf(chalk2, createChalk.prototype);
406
+ return chalk2;
407
+ };
408
+ function createChalk(options) {
409
+ return chalkFactory(options);
410
+ }
411
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
412
+ for (const [styleName, style] of Object.entries(ansi_styles_default)) {
413
+ styles2[styleName] = {
414
+ get() {
415
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
416
+ Object.defineProperty(this, styleName, { value: builder });
417
+ return builder;
418
+ }
419
+ };
420
+ }
421
+ styles2.visible = {
422
+ get() {
423
+ const builder = createBuilder(this, this[STYLER], true);
424
+ Object.defineProperty(this, "visible", { value: builder });
425
+ return builder;
426
+ }
427
+ };
428
+ var getModelAnsi = (model, level, type, ...arguments_) => {
429
+ if (model === "rgb") {
430
+ if (level === "ansi16m") {
431
+ return ansi_styles_default[type].ansi16m(...arguments_);
432
+ }
433
+ if (level === "ansi256") {
434
+ return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
435
+ }
436
+ return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
437
+ }
438
+ if (model === "hex") {
439
+ return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
440
+ }
441
+ return ansi_styles_default[type][model](...arguments_);
442
+ };
443
+ var usedModels = ["rgb", "hex", "ansi256"];
444
+ for (const model of usedModels) {
445
+ styles2[model] = {
446
+ get() {
447
+ const { level } = this;
448
+ return function(...arguments_) {
449
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
450
+ return createBuilder(this, styler, this[IS_EMPTY]);
451
+ };
452
+ }
453
+ };
454
+ const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
455
+ styles2[bgModel] = {
456
+ get() {
457
+ const { level } = this;
458
+ return function(...arguments_) {
459
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
460
+ return createBuilder(this, styler, this[IS_EMPTY]);
461
+ };
462
+ }
463
+ };
464
+ }
465
+ var proto = Object.defineProperties(() => {
466
+ }, {
467
+ ...styles2,
468
+ level: {
469
+ enumerable: true,
470
+ get() {
471
+ return this[GENERATOR].level;
472
+ },
473
+ set(level) {
474
+ this[GENERATOR].level = level;
475
+ }
476
+ }
477
+ });
478
+ var createStyler = (open, close, parent) => {
479
+ let openAll;
480
+ let closeAll;
481
+ if (parent === void 0) {
482
+ openAll = open;
483
+ closeAll = close;
484
+ } else {
485
+ openAll = parent.openAll + open;
486
+ closeAll = close + parent.closeAll;
487
+ }
488
+ return {
489
+ open,
490
+ close,
491
+ openAll,
492
+ closeAll,
493
+ parent
494
+ };
495
+ };
496
+ var createBuilder = (self, _styler, _isEmpty) => {
497
+ const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
498
+ Object.setPrototypeOf(builder, proto);
499
+ builder[GENERATOR] = self;
500
+ builder[STYLER] = _styler;
501
+ builder[IS_EMPTY] = _isEmpty;
502
+ return builder;
503
+ };
504
+ var applyStyle = (self, string) => {
505
+ if (self.level <= 0 || !string) {
506
+ return self[IS_EMPTY] ? "" : string;
507
+ }
508
+ let styler = self[STYLER];
509
+ if (styler === void 0) {
510
+ return string;
511
+ }
512
+ const { openAll, closeAll } = styler;
513
+ if (string.includes("\x1B")) {
514
+ while (styler !== void 0) {
515
+ string = stringReplaceAll(string, styler.close, styler.open);
516
+ styler = styler.parent;
517
+ }
518
+ }
519
+ const lfIndex = string.indexOf("\n");
520
+ if (lfIndex !== -1) {
521
+ string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
522
+ }
523
+ return openAll + string + closeAll;
524
+ };
525
+ Object.defineProperties(createChalk.prototype, styles2);
526
+ var chalk = createChalk();
527
+ var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
528
+ var source_default = chalk;
529
+
530
+ // src/cli-v2/commands/diff.ts
531
+ import path from "path";
532
+ import { createTwoFilesPatch } from "diff";
533
+ import { parse as parseYaml } from "yaml";
534
+ async function readForkedFromMetadata(skillDir) {
535
+ const metadataPath = path.join(skillDir, "metadata.yaml");
536
+ if (!await fileExists(metadataPath)) {
537
+ return null;
538
+ }
539
+ const content = await readFile(metadataPath);
540
+ const metadata = parseYaml(content);
541
+ return metadata.forked_from ?? null;
542
+ }
543
+ function colorDiff(diffText) {
544
+ return diffText.split("\n").map((line) => {
545
+ if (line.startsWith("+++") || line.startsWith("---")) {
546
+ return source_default.bold(line);
547
+ }
548
+ if (line.startsWith("+")) {
549
+ return source_default.green(line);
550
+ }
551
+ if (line.startsWith("-")) {
552
+ return source_default.red(line);
553
+ }
554
+ if (line.startsWith("@@")) {
555
+ return source_default.cyan(line);
556
+ }
557
+ return line;
558
+ }).join("\n");
559
+ }
560
+ async function diffSkill(localSkillsPath, skillDirName, sourcePath, sourceSkills) {
561
+ const skillDir = path.join(localSkillsPath, skillDirName);
562
+ const forkedFrom = await readForkedFromMetadata(skillDir);
563
+ if (!forkedFrom) {
564
+ return {
565
+ skillDirName,
566
+ forkedFrom: null,
567
+ hasDiff: false,
568
+ diffOutput: ""
569
+ };
570
+ }
571
+ const sourceSkill = sourceSkills[forkedFrom.skill_id];
572
+ if (!sourceSkill) {
573
+ return {
574
+ skillDirName,
575
+ forkedFrom,
576
+ hasDiff: false,
577
+ diffOutput: `Source skill '${forkedFrom.skill_id}' no longer exists`
578
+ };
579
+ }
580
+ const sourceSkillMdPath = path.join(
581
+ sourcePath,
582
+ "src",
583
+ sourceSkill.path,
584
+ "SKILL.md"
585
+ );
586
+ if (!await fileExists(sourceSkillMdPath)) {
587
+ return {
588
+ skillDirName,
589
+ forkedFrom,
590
+ hasDiff: false,
591
+ diffOutput: `Source SKILL.md not found at ${sourceSkillMdPath}`
592
+ };
593
+ }
594
+ const sourceContent = await readFile(sourceSkillMdPath);
595
+ const localSkillMdPath = path.join(skillDir, "SKILL.md");
596
+ if (!await fileExists(localSkillMdPath)) {
597
+ return {
598
+ skillDirName,
599
+ forkedFrom,
600
+ hasDiff: false,
601
+ diffOutput: `Local SKILL.md not found at ${localSkillMdPath}`
602
+ };
603
+ }
604
+ const localContent = await readFile(localSkillMdPath);
605
+ const sourceLabel = `source/${sourceSkill.path}/SKILL.md`;
606
+ const localLabel = `local/${LOCAL_SKILLS_PATH}/${skillDirName}/SKILL.md`;
607
+ const diff = createTwoFilesPatch(
608
+ sourceLabel,
609
+ localLabel,
610
+ sourceContent,
611
+ localContent,
612
+ "",
613
+ // No source header
614
+ ""
615
+ // No local header
616
+ );
617
+ const hasDiff = diff.split("\n").some((line) => {
618
+ return (line.startsWith("+") || line.startsWith("-")) && !line.startsWith("+++") && !line.startsWith("---");
619
+ });
620
+ return {
621
+ skillDirName,
622
+ forkedFrom,
623
+ hasDiff,
624
+ diffOutput: diff
625
+ };
626
+ }
627
+ var Diff = class _Diff extends BaseCommand {
628
+ static summary = "Show differences between local forked skills and their source versions";
629
+ static description = "Compare local forked skills with their source versions and display differences using unified diff format with colored output";
630
+ static args = {
631
+ skill: Args.string({
632
+ description: "Show diff for specific skill only",
633
+ required: false
634
+ })
635
+ };
636
+ static flags = {
637
+ ...BaseCommand.baseFlags,
638
+ quiet: Flags.boolean({
639
+ char: "q",
640
+ description: "Suppress output, only return exit code",
641
+ default: false
642
+ })
643
+ };
644
+ async run() {
645
+ const { args, flags } = await this.parse(_Diff);
646
+ const projectDir = process.cwd();
647
+ const localSkillsPath = path.join(projectDir, LOCAL_SKILLS_PATH);
648
+ if (!await fileExists(localSkillsPath)) {
649
+ if (!flags.quiet) {
650
+ this.warn("No local skills found. Run 'cc init' or 'cc edit' first.");
651
+ }
652
+ return;
653
+ }
654
+ try {
655
+ if (!flags.quiet) {
656
+ this.log("Loading skills...");
657
+ }
658
+ const { matrix, sourcePath, isLocal } = await loadSkillsMatrixFromSource({
659
+ sourceFlag: flags.source,
660
+ projectDir
661
+ });
662
+ if (!flags.quiet) {
663
+ this.log(
664
+ source_default.dim(
665
+ `Loaded from ${isLocal ? "local" : "remote"}: ${sourcePath}`
666
+ )
667
+ );
668
+ }
669
+ const sourceSkills = {};
670
+ for (const [skillId, skill] of Object.entries(matrix.skills)) {
671
+ if (!skill.local) {
672
+ sourceSkills[skillId] = { path: skill.path };
673
+ }
674
+ }
675
+ let skillDirs = await listDirectories(localSkillsPath);
676
+ if (args.skill) {
677
+ skillDirs = skillDirs.filter((dir) => dir === args.skill);
678
+ if (skillDirs.length === 0) {
679
+ if (!flags.quiet) {
680
+ this.error(`Skill '${args.skill}' not found in local skills`, {
681
+ exit: EXIT_CODES.ERROR
682
+ });
683
+ }
684
+ }
685
+ }
686
+ const results = [];
687
+ const skillsWithoutForkedFrom = [];
688
+ for (const skillDirName of skillDirs) {
689
+ const result = await diffSkill(
690
+ localSkillsPath,
691
+ skillDirName,
692
+ sourcePath,
693
+ sourceSkills
694
+ );
695
+ results.push(result);
696
+ if (!result.forkedFrom) {
697
+ skillsWithoutForkedFrom.push(skillDirName);
698
+ }
699
+ }
700
+ const skillsWithDiffs = results.filter((r) => r.hasDiff);
701
+ if (!flags.quiet) {
702
+ this.log("");
703
+ if (skillsWithoutForkedFrom.length > 0) {
704
+ for (const skillName of skillsWithoutForkedFrom) {
705
+ this.warn(
706
+ `Skill '${skillName}' has no forked_from metadata - cannot compare`
707
+ );
708
+ }
709
+ this.log("");
710
+ }
711
+ const forkedSkills = results.filter((r) => r.forkedFrom);
712
+ if (forkedSkills.length === 0) {
713
+ this.logInfo("No forked skills to compare.");
714
+ } else if (skillsWithDiffs.length === 0) {
715
+ this.logSuccess(
716
+ `All ${forkedSkills.length} forked skill(s) are up to date with source.`
717
+ );
718
+ } else {
719
+ for (const result of skillsWithDiffs) {
720
+ this.log(
721
+ source_default.bold(
722
+ `
723
+ === ${result.skillDirName} (forked from ${result.forkedFrom?.skill_id}) ===
724
+ `
725
+ )
726
+ );
727
+ this.log(colorDiff(result.diffOutput));
728
+ }
729
+ this.log("");
730
+ this.logInfo(
731
+ `Found differences in ${source_default.yellow(String(skillsWithDiffs.length))} skill(s).`
732
+ );
733
+ }
734
+ this.log("");
735
+ }
736
+ if (skillsWithDiffs.length > 0) {
737
+ this.exit(EXIT_CODES.ERROR);
738
+ }
739
+ this.exit(EXIT_CODES.SUCCESS);
740
+ } catch (error) {
741
+ if (!flags.quiet) {
742
+ const message = error instanceof Error ? error.message : String(error);
743
+ this.error(`Failed to compare skills: ${message}`, {
744
+ exit: EXIT_CODES.ERROR
745
+ });
746
+ } else {
747
+ this.exit(EXIT_CODES.ERROR);
748
+ }
749
+ }
750
+ }
751
+ };
752
+ export {
753
+ Diff as default
754
+ };
755
+ //# sourceMappingURL=diff.js.map