@claude-collective/cli 0.2.0 → 0.6.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 (166) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/README.md +1 -1
  3. package/dist/chunk-367K3JB3.js +84 -0
  4. package/dist/chunk-367K3JB3.js.map +1 -0
  5. package/dist/chunk-6ESUJMM7.js +54 -0
  6. package/dist/chunk-6ESUJMM7.js.map +1 -0
  7. package/dist/chunk-6OY6ZYQF.js +93 -0
  8. package/dist/chunk-6OY6ZYQF.js.map +1 -0
  9. package/dist/chunk-6WEQADPL.js +307 -0
  10. package/dist/chunk-6WEQADPL.js.map +1 -0
  11. package/dist/chunk-AU7XVCLO.js +91 -0
  12. package/dist/chunk-AU7XVCLO.js.map +1 -0
  13. package/dist/chunk-AZP2AA5M.js +425 -0
  14. package/dist/chunk-AZP2AA5M.js.map +1 -0
  15. package/dist/chunk-D4IQAT27.js +114 -0
  16. package/dist/chunk-D4IQAT27.js.map +1 -0
  17. package/dist/chunk-DHET7RCE.js +50 -0
  18. package/dist/chunk-DHET7RCE.js.map +1 -0
  19. package/dist/chunk-DHFFRMF6.js +31 -0
  20. package/dist/chunk-DHFFRMF6.js.map +1 -0
  21. package/dist/chunk-FKU7VSUD.js +453 -0
  22. package/dist/chunk-FKU7VSUD.js.map +1 -0
  23. package/dist/chunk-J2Y4A3LP.js +478 -0
  24. package/dist/chunk-J2Y4A3LP.js.map +1 -0
  25. package/dist/chunk-JMQGWQZU.js +607 -0
  26. package/dist/chunk-JMQGWQZU.js.map +1 -0
  27. package/dist/chunk-JY4RO76L.js +73 -0
  28. package/dist/chunk-JY4RO76L.js.map +1 -0
  29. package/dist/chunk-M7YCPFIX.js +108 -0
  30. package/dist/chunk-M7YCPFIX.js.map +1 -0
  31. package/dist/chunk-MJSFR562.js +57 -0
  32. package/dist/chunk-MJSFR562.js.map +1 -0
  33. package/dist/chunk-MMDXNZPF.js +69 -0
  34. package/dist/chunk-MMDXNZPF.js.map +1 -0
  35. package/dist/chunk-MYAVQ23U.js +356 -0
  36. package/dist/chunk-MYAVQ23U.js.map +1 -0
  37. package/dist/chunk-OSQDDJXX.js +146 -0
  38. package/dist/chunk-OSQDDJXX.js.map +1 -0
  39. package/dist/chunk-QESUUPOE.js +241 -0
  40. package/dist/chunk-QESUUPOE.js.map +1 -0
  41. package/dist/chunk-SJYG4EJZ.js +57 -0
  42. package/dist/chunk-SJYG4EJZ.js.map +1 -0
  43. package/dist/chunk-SYQ7R2JO.js +95 -0
  44. package/dist/chunk-SYQ7R2JO.js.map +1 -0
  45. package/dist/chunk-TD643KB3.js +245 -0
  46. package/dist/chunk-TD643KB3.js.map +1 -0
  47. package/dist/chunk-TFV6Z7F7.js +129 -0
  48. package/dist/chunk-TFV6Z7F7.js.map +1 -0
  49. package/dist/chunk-TGOHJCQ4.js +83 -0
  50. package/dist/chunk-TGOHJCQ4.js.map +1 -0
  51. package/dist/chunk-TOPAIL5W.js +22 -0
  52. package/dist/chunk-TOPAIL5W.js.map +1 -0
  53. package/dist/chunk-U4VYHKPM.js +110 -0
  54. package/dist/chunk-U4VYHKPM.js.map +1 -0
  55. package/dist/chunk-UFWNMW3G.js +392 -0
  56. package/dist/chunk-UFWNMW3G.js.map +1 -0
  57. package/dist/chunk-UNHCZRO4.js +64 -0
  58. package/dist/chunk-UNHCZRO4.js.map +1 -0
  59. package/dist/chunk-URDV4OCP.js +308 -0
  60. package/dist/chunk-URDV4OCP.js.map +1 -0
  61. package/dist/chunk-YI6JVSFO.js +43 -0
  62. package/dist/chunk-YI6JVSFO.js.map +1 -0
  63. package/dist/chunk-YNSNRR5D.js +184 -0
  64. package/dist/chunk-YNSNRR5D.js.map +1 -0
  65. package/dist/chunk-Z6DLWTBY.js +46 -0
  66. package/dist/chunk-Z6DLWTBY.js.map +1 -0
  67. package/dist/chunk-ZDQIUHAM.js +89 -0
  68. package/dist/chunk-ZDQIUHAM.js.map +1 -0
  69. package/dist/chunk-ZSKHDU5P.js +124 -0
  70. package/dist/chunk-ZSKHDU5P.js.map +1 -0
  71. package/dist/cli-v2/defaults/agent-mappings.yaml +185 -0
  72. package/dist/commands/build/marketplace.js +295 -0
  73. package/dist/commands/build/marketplace.js.map +1 -0
  74. package/dist/commands/build/plugins.js +362 -0
  75. package/dist/commands/build/plugins.js.map +1 -0
  76. package/dist/commands/build/stack.js +169 -0
  77. package/dist/commands/build/stack.js.map +1 -0
  78. package/dist/commands/compile.js +461 -0
  79. package/dist/commands/compile.js.map +1 -0
  80. package/dist/commands/config/get.js +60 -0
  81. package/dist/commands/config/get.js.map +1 -0
  82. package/dist/commands/config/index.js +22 -0
  83. package/dist/commands/config/index.js.map +1 -0
  84. package/dist/commands/config/path.js +35 -0
  85. package/dist/commands/config/path.js.map +1 -0
  86. package/dist/commands/config/set-project.js +61 -0
  87. package/dist/commands/config/set-project.js.map +1 -0
  88. package/dist/commands/config/set.js +60 -0
  89. package/dist/commands/config/set.js.map +1 -0
  90. package/dist/commands/config/show.js +13 -0
  91. package/dist/commands/config/show.js.map +1 -0
  92. package/dist/commands/config/unset-project.js +57 -0
  93. package/dist/commands/config/unset-project.js.map +1 -0
  94. package/dist/commands/config/unset.js +56 -0
  95. package/dist/commands/config/unset.js.map +1 -0
  96. package/dist/commands/diff.js +755 -0
  97. package/dist/commands/diff.js.map +1 -0
  98. package/dist/commands/doctor.js +413 -0
  99. package/dist/commands/doctor.js.map +1 -0
  100. package/dist/commands/edit.js +253 -0
  101. package/dist/commands/edit.js.map +1 -0
  102. package/dist/commands/eject.js +208 -0
  103. package/dist/commands/eject.js.map +1 -0
  104. package/dist/commands/info.js +205 -0
  105. package/dist/commands/info.js.map +1 -0
  106. package/dist/commands/init.js +914 -0
  107. package/dist/commands/init.js.map +1 -0
  108. package/dist/commands/list.js +44 -0
  109. package/dist/commands/list.js.map +1 -0
  110. package/dist/commands/new/agent.js +230 -0
  111. package/dist/commands/new/agent.js.map +1 -0
  112. package/dist/commands/new/skill.js +204 -0
  113. package/dist/commands/new/skill.js.map +1 -0
  114. package/dist/commands/outdated.js +242 -0
  115. package/dist/commands/outdated.js.map +1 -0
  116. package/dist/commands/search.js +115 -0
  117. package/dist/commands/search.js.map +1 -0
  118. package/dist/commands/test-imports.js +92 -0
  119. package/dist/commands/test-imports.js.map +1 -0
  120. package/dist/commands/uninstall.js +302 -0
  121. package/dist/commands/uninstall.js.map +1 -0
  122. package/dist/commands/update.js +428 -0
  123. package/dist/commands/update.js.map +1 -0
  124. package/dist/commands/validate.js +375 -0
  125. package/dist/commands/validate.js.map +1 -0
  126. package/dist/commands/version/bump.js +95 -0
  127. package/dist/commands/version/bump.js.map +1 -0
  128. package/dist/commands/version/index.js +70 -0
  129. package/dist/commands/version/index.js.map +1 -0
  130. package/dist/commands/version/set.js +101 -0
  131. package/dist/commands/version/set.js.map +1 -0
  132. package/dist/commands/version/show.js +70 -0
  133. package/dist/commands/version/show.js.map +1 -0
  134. package/dist/components/common/confirm.js +9 -0
  135. package/dist/components/common/confirm.js.map +1 -0
  136. package/dist/components/common/message.js +24 -0
  137. package/dist/components/common/message.js.map +1 -0
  138. package/dist/components/common/spinner.js +14 -0
  139. package/dist/components/common/spinner.js.map +1 -0
  140. package/dist/components/wizard/selection-header.js +11 -0
  141. package/dist/components/wizard/selection-header.js.map +1 -0
  142. package/dist/components/wizard/step-approach.js +11 -0
  143. package/dist/components/wizard/step-approach.js.map +1 -0
  144. package/dist/components/wizard/step-category.js +12 -0
  145. package/dist/components/wizard/step-category.js.map +1 -0
  146. package/dist/components/wizard/step-confirm.js +12 -0
  147. package/dist/components/wizard/step-confirm.js.map +1 -0
  148. package/dist/components/wizard/step-stack.js +11 -0
  149. package/dist/components/wizard/step-stack.js.map +1 -0
  150. package/dist/components/wizard/step-subcategory.js +13 -0
  151. package/dist/components/wizard/step-subcategory.js.map +1 -0
  152. package/dist/components/wizard/wizard.js +19 -0
  153. package/dist/components/wizard/wizard.js.map +1 -0
  154. package/dist/hooks/init.js +41 -0
  155. package/dist/hooks/init.js.map +1 -0
  156. package/dist/index.js +10 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/magic-string.es-RGXYGAW3.js +1316 -0
  159. package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
  160. package/dist/stores/wizard-store.js +10 -0
  161. package/dist/stores/wizard-store.js.map +1 -0
  162. package/dist/stores/wizard-store.test.js +15991 -0
  163. package/dist/stores/wizard-store.test.js.map +1 -0
  164. package/package.json +44 -25
  165. package/dist/cli/index.js +0 -6314
  166. package/dist/cli/index.js.map +0 -1
@@ -0,0 +1,425 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-DHET7RCE.js";
5
+
6
+ // src/cli-v2/lib/matrix-resolver.ts
7
+ init_esm_shims();
8
+ function resolveAlias(aliasOrId, matrix) {
9
+ return matrix.aliases[aliasOrId] || aliasOrId;
10
+ }
11
+ function getDependentSkills(skillId, currentSelections, matrix) {
12
+ const fullId = resolveAlias(skillId, matrix);
13
+ const skill = matrix.skills[fullId];
14
+ if (!skill) return [];
15
+ const resolvedSelections = currentSelections.map(
16
+ (s) => resolveAlias(s, matrix)
17
+ );
18
+ const dependents = [];
19
+ for (const selectedId of resolvedSelections) {
20
+ if (selectedId === fullId) continue;
21
+ const selectedSkill = matrix.skills[selectedId];
22
+ if (!selectedSkill) continue;
23
+ for (const requirement of selectedSkill.requires) {
24
+ if (requirement.needsAny) {
25
+ const satisfiedReqs = requirement.skillIds.filter(
26
+ (reqId) => resolvedSelections.includes(reqId)
27
+ );
28
+ if (satisfiedReqs.length === 1 && satisfiedReqs[0] === fullId) {
29
+ dependents.push(selectedId);
30
+ }
31
+ } else {
32
+ if (requirement.skillIds.includes(fullId)) {
33
+ dependents.push(selectedId);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return dependents;
39
+ }
40
+ function isDisabled(skillId, currentSelections, matrix, options) {
41
+ if (options?.expertMode) {
42
+ return false;
43
+ }
44
+ const fullId = resolveAlias(skillId, matrix);
45
+ const skill = matrix.skills[fullId];
46
+ if (!skill) {
47
+ return false;
48
+ }
49
+ for (const selectedId of currentSelections) {
50
+ const selectedFullId = resolveAlias(selectedId, matrix);
51
+ if (skill.conflictsWith.some((c) => c.skillId === selectedFullId)) {
52
+ return true;
53
+ }
54
+ const selectedSkill = matrix.skills[selectedFullId];
55
+ if (selectedSkill && selectedSkill.conflictsWith.some((c) => c.skillId === fullId)) {
56
+ return true;
57
+ }
58
+ }
59
+ const resolvedSelections = currentSelections.map(
60
+ (s) => resolveAlias(s, matrix)
61
+ );
62
+ for (const requirement of skill.requires) {
63
+ if (requirement.needsAny) {
64
+ const hasAny = requirement.skillIds.some(
65
+ (reqId) => resolvedSelections.includes(reqId)
66
+ );
67
+ if (!hasAny) {
68
+ return true;
69
+ }
70
+ } else {
71
+ const hasAll = requirement.skillIds.every(
72
+ (reqId) => resolvedSelections.includes(reqId)
73
+ );
74
+ if (!hasAll) {
75
+ return true;
76
+ }
77
+ }
78
+ }
79
+ return false;
80
+ }
81
+ function getDisableReason(skillId, currentSelections, matrix) {
82
+ const fullId = resolveAlias(skillId, matrix);
83
+ const skill = matrix.skills[fullId];
84
+ if (!skill) {
85
+ return void 0;
86
+ }
87
+ const resolvedSelections = currentSelections.map(
88
+ (s) => resolveAlias(s, matrix)
89
+ );
90
+ for (const selectedId of resolvedSelections) {
91
+ const conflict = skill.conflictsWith.find((c) => c.skillId === selectedId);
92
+ if (conflict) {
93
+ const selectedSkill2 = matrix.skills[selectedId];
94
+ const selectedName = selectedSkill2?.name || selectedId;
95
+ return `${conflict.reason} (conflicts with ${selectedName})`;
96
+ }
97
+ const selectedSkill = matrix.skills[selectedId];
98
+ if (selectedSkill) {
99
+ const reverseConflict = selectedSkill.conflictsWith.find(
100
+ (c) => c.skillId === fullId
101
+ );
102
+ if (reverseConflict) {
103
+ const selectedName = selectedSkill.name;
104
+ return `${reverseConflict.reason} (conflicts with ${selectedName})`;
105
+ }
106
+ }
107
+ }
108
+ for (const requirement of skill.requires) {
109
+ if (requirement.needsAny) {
110
+ const hasAny = requirement.skillIds.some(
111
+ (reqId) => resolvedSelections.includes(reqId)
112
+ );
113
+ if (!hasAny) {
114
+ const requiredNames = requirement.skillIds.map((id) => matrix.skills[id]?.name || id).join(" or ");
115
+ return `${requirement.reason} (requires ${requiredNames})`;
116
+ }
117
+ } else {
118
+ const missingIds = requirement.skillIds.filter(
119
+ (reqId) => !resolvedSelections.includes(reqId)
120
+ );
121
+ if (missingIds.length > 0) {
122
+ const missingNames = missingIds.map((id) => matrix.skills[id]?.name || id).join(", ");
123
+ return `${requirement.reason} (requires ${missingNames})`;
124
+ }
125
+ }
126
+ }
127
+ return void 0;
128
+ }
129
+ function isDiscouraged(skillId, currentSelections, matrix) {
130
+ const fullId = resolveAlias(skillId, matrix);
131
+ const skill = matrix.skills[fullId];
132
+ if (!skill) {
133
+ return false;
134
+ }
135
+ const resolvedSelections = currentSelections.map(
136
+ (s) => resolveAlias(s, matrix)
137
+ );
138
+ for (const selectedId of resolvedSelections) {
139
+ const selectedSkill = matrix.skills[selectedId];
140
+ if (selectedSkill && selectedSkill.discourages.some((d) => d.skillId === fullId)) {
141
+ return true;
142
+ }
143
+ if (skill.discourages.some((d) => d.skillId === selectedId)) {
144
+ return true;
145
+ }
146
+ }
147
+ return false;
148
+ }
149
+ function getDiscourageReason(skillId, currentSelections, matrix) {
150
+ const fullId = resolveAlias(skillId, matrix);
151
+ const skill = matrix.skills[fullId];
152
+ if (!skill) {
153
+ return void 0;
154
+ }
155
+ const resolvedSelections = currentSelections.map(
156
+ (s) => resolveAlias(s, matrix)
157
+ );
158
+ for (const selectedId of resolvedSelections) {
159
+ const selectedSkill = matrix.skills[selectedId];
160
+ if (selectedSkill) {
161
+ const discourage = selectedSkill.discourages.find(
162
+ (d) => d.skillId === fullId
163
+ );
164
+ if (discourage) {
165
+ return discourage.reason;
166
+ }
167
+ }
168
+ const reverseDiscourage = skill.discourages.find(
169
+ (d) => d.skillId === selectedId
170
+ );
171
+ if (reverseDiscourage) {
172
+ return reverseDiscourage.reason;
173
+ }
174
+ }
175
+ return void 0;
176
+ }
177
+ function isRecommended(skillId, currentSelections, matrix) {
178
+ const fullId = resolveAlias(skillId, matrix);
179
+ const skill = matrix.skills[fullId];
180
+ if (!skill) {
181
+ return false;
182
+ }
183
+ const resolvedSelections = currentSelections.map(
184
+ (s) => resolveAlias(s, matrix)
185
+ );
186
+ for (const selectedId of resolvedSelections) {
187
+ const selectedSkill = matrix.skills[selectedId];
188
+ if (selectedSkill && selectedSkill.recommends.some((r) => r.skillId === fullId)) {
189
+ return true;
190
+ }
191
+ }
192
+ return false;
193
+ }
194
+ function getRecommendReason(skillId, currentSelections, matrix) {
195
+ const fullId = resolveAlias(skillId, matrix);
196
+ const skill = matrix.skills[fullId];
197
+ if (!skill) {
198
+ return void 0;
199
+ }
200
+ const resolvedSelections = currentSelections.map(
201
+ (s) => resolveAlias(s, matrix)
202
+ );
203
+ for (const selectedId of resolvedSelections) {
204
+ const selectedSkill = matrix.skills[selectedId];
205
+ if (selectedSkill) {
206
+ const recommendation = selectedSkill.recommends.find(
207
+ (r) => r.skillId === fullId
208
+ );
209
+ if (recommendation) {
210
+ return `${recommendation.reason} (recommended by ${selectedSkill.name})`;
211
+ }
212
+ }
213
+ }
214
+ return void 0;
215
+ }
216
+ function validateSelection(selections, matrix) {
217
+ const errors = [];
218
+ const warnings = [];
219
+ const resolvedSelections = selections.map((s) => resolveAlias(s, matrix));
220
+ for (let i = 0; i < resolvedSelections.length; i++) {
221
+ const skillA = matrix.skills[resolvedSelections[i]];
222
+ if (!skillA) continue;
223
+ for (let j = i + 1; j < resolvedSelections.length; j++) {
224
+ const skillBId = resolvedSelections[j];
225
+ const conflict = skillA.conflictsWith.find((c) => c.skillId === skillBId);
226
+ if (conflict) {
227
+ errors.push({
228
+ type: "conflict",
229
+ message: `${skillA.name} conflicts with ${matrix.skills[skillBId]?.name || skillBId}: ${conflict.reason}`,
230
+ skills: [skillA.id, skillBId]
231
+ });
232
+ }
233
+ }
234
+ }
235
+ for (const skillId of resolvedSelections) {
236
+ const skill = matrix.skills[skillId];
237
+ if (!skill) continue;
238
+ for (const requirement of skill.requires) {
239
+ if (requirement.needsAny) {
240
+ const hasAny = requirement.skillIds.some(
241
+ (reqId) => resolvedSelections.includes(reqId)
242
+ );
243
+ if (!hasAny) {
244
+ errors.push({
245
+ type: "missing_requirement",
246
+ message: `${skill.name} requires one of: ${requirement.skillIds.map((id) => matrix.skills[id]?.name || id).join(", ")}`,
247
+ skills: [skillId, ...requirement.skillIds]
248
+ });
249
+ }
250
+ } else {
251
+ const missingIds = requirement.skillIds.filter(
252
+ (reqId) => !resolvedSelections.includes(reqId)
253
+ );
254
+ if (missingIds.length > 0) {
255
+ errors.push({
256
+ type: "missing_requirement",
257
+ message: `${skill.name} requires: ${missingIds.map((id) => matrix.skills[id]?.name || id).join(", ")}`,
258
+ skills: [skillId, ...missingIds]
259
+ });
260
+ }
261
+ }
262
+ }
263
+ }
264
+ const categorySelections = /* @__PURE__ */ new Map();
265
+ for (const skillId of resolvedSelections) {
266
+ const skill = matrix.skills[skillId];
267
+ if (!skill) continue;
268
+ const existing = categorySelections.get(skill.category) || [];
269
+ existing.push(skillId);
270
+ categorySelections.set(skill.category, existing);
271
+ }
272
+ for (const [categoryId, skillIds] of categorySelections.entries()) {
273
+ if (skillIds.length > 1) {
274
+ const category = matrix.categories[categoryId];
275
+ if (category?.exclusive) {
276
+ errors.push({
277
+ type: "category_exclusive",
278
+ message: `Category "${category.name}" only allows one selection, but multiple selected: ${skillIds.map((id) => matrix.skills[id]?.name || id).join(", ")}`,
279
+ skills: skillIds
280
+ });
281
+ }
282
+ }
283
+ }
284
+ for (const skillId of resolvedSelections) {
285
+ const skill = matrix.skills[skillId];
286
+ if (!skill) continue;
287
+ for (const recommendation of skill.recommends) {
288
+ if (!resolvedSelections.includes(recommendation.skillId)) {
289
+ const recommendedSkill = matrix.skills[recommendation.skillId];
290
+ if (recommendedSkill) {
291
+ const hasConflict = recommendedSkill.conflictsWith.some(
292
+ (c) => resolvedSelections.includes(c.skillId)
293
+ );
294
+ if (!hasConflict) {
295
+ warnings.push({
296
+ type: "missing_recommendation",
297
+ message: `${skill.name} recommends ${recommendedSkill.name}: ${recommendation.reason}`,
298
+ skills: [skillId, recommendation.skillId]
299
+ });
300
+ }
301
+ }
302
+ }
303
+ }
304
+ }
305
+ for (const skillId of resolvedSelections) {
306
+ const skill = matrix.skills[skillId];
307
+ if (!skill || skill.providesSetupFor.length === 0) continue;
308
+ const hasUsageSkill = skill.providesSetupFor.some(
309
+ (usageId) => resolvedSelections.includes(usageId)
310
+ );
311
+ if (!hasUsageSkill) {
312
+ warnings.push({
313
+ type: "unused_setup",
314
+ message: `Setup skill "${skill.name}" selected but no corresponding usage skills: ${skill.providesSetupFor.map((id) => matrix.skills[id]?.name || id).join(", ")}`,
315
+ skills: [skillId, ...skill.providesSetupFor]
316
+ });
317
+ }
318
+ }
319
+ return {
320
+ valid: errors.length === 0,
321
+ errors,
322
+ warnings
323
+ };
324
+ }
325
+ function getAvailableSkills(categoryId, currentSelections, matrix, options) {
326
+ const skillOptions = [];
327
+ const resolvedSelections = currentSelections.map(
328
+ (s) => resolveAlias(s, matrix)
329
+ );
330
+ for (const skill of Object.values(matrix.skills)) {
331
+ if (skill.category !== categoryId) {
332
+ continue;
333
+ }
334
+ const disabled = isDisabled(skill.id, currentSelections, matrix, options);
335
+ const discouraged = !disabled && isDiscouraged(skill.id, currentSelections, matrix);
336
+ const recommended = !disabled && !discouraged && isRecommended(skill.id, currentSelections, matrix);
337
+ skillOptions.push({
338
+ id: skill.id,
339
+ alias: skill.alias,
340
+ name: skill.name,
341
+ description: skill.description,
342
+ disabled,
343
+ disabledReason: disabled ? getDisableReason(skill.id, currentSelections, matrix) : void 0,
344
+ discouraged,
345
+ discouragedReason: discouraged ? getDiscourageReason(skill.id, currentSelections, matrix) : void 0,
346
+ recommended,
347
+ recommendedReason: recommended ? getRecommendReason(skill.id, currentSelections, matrix) : void 0,
348
+ selected: resolvedSelections.includes(skill.id),
349
+ alternatives: skill.alternatives.map((a) => a.skillId)
350
+ });
351
+ }
352
+ return skillOptions;
353
+ }
354
+ function getSkillsByCategory(categoryId, matrix) {
355
+ const skills = [];
356
+ for (const skill of Object.values(matrix.skills)) {
357
+ if (skill.category === categoryId) {
358
+ skills.push(skill);
359
+ }
360
+ }
361
+ return skills;
362
+ }
363
+ function isCategoryAllDisabled(categoryId, currentSelections, matrix, options) {
364
+ if (options?.expertMode) {
365
+ return { disabled: false };
366
+ }
367
+ const skills = getSkillsByCategory(categoryId, matrix);
368
+ if (skills.length === 0) {
369
+ return { disabled: false };
370
+ }
371
+ const disabledSkills = [];
372
+ for (const skill of skills) {
373
+ if (isDisabled(skill.id, currentSelections, matrix, options)) {
374
+ disabledSkills.push({
375
+ skillId: skill.id,
376
+ reason: getDisableReason(skill.id, currentSelections, matrix)
377
+ });
378
+ }
379
+ }
380
+ if (disabledSkills.length === skills.length) {
381
+ const firstReason = disabledSkills[0]?.reason;
382
+ const shortReason = firstReason?.split(" (")[0] || "requirements not met";
383
+ return { disabled: true, reason: shortReason };
384
+ }
385
+ return { disabled: false };
386
+ }
387
+ function getSubcategories(parentCategoryId, matrix) {
388
+ const subcategories = [];
389
+ for (const category of Object.values(matrix.categories)) {
390
+ if (category.parent === parentCategoryId) {
391
+ subcategories.push(category.id);
392
+ }
393
+ }
394
+ subcategories.sort((a, b) => {
395
+ const catA = matrix.categories[a];
396
+ const catB = matrix.categories[b];
397
+ return (catA?.order ?? 0) - (catB?.order ?? 0);
398
+ });
399
+ return subcategories;
400
+ }
401
+ function getTopLevelCategories(matrix) {
402
+ const topLevel = [];
403
+ for (const category of Object.values(matrix.categories)) {
404
+ if (!category.parent) {
405
+ topLevel.push(category.id);
406
+ }
407
+ }
408
+ topLevel.sort((a, b) => {
409
+ const catA = matrix.categories[a];
410
+ const catB = matrix.categories[b];
411
+ return (catA?.order ?? 0) - (catB?.order ?? 0);
412
+ });
413
+ return topLevel;
414
+ }
415
+
416
+ export {
417
+ resolveAlias,
418
+ getDependentSkills,
419
+ validateSelection,
420
+ getAvailableSkills,
421
+ isCategoryAllDisabled,
422
+ getSubcategories,
423
+ getTopLevelCategories
424
+ };
425
+ //# sourceMappingURL=chunk-AZP2AA5M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli-v2/lib/matrix-resolver.ts"],"sourcesContent":["import type {\n MergedSkillsMatrix,\n ResolvedSkill,\n SkillOption,\n SelectionValidation,\n ValidationError,\n ValidationWarning,\n} from \"../types-matrix\";\n\nexport function resolveAlias(\n aliasOrId: string,\n matrix: MergedSkillsMatrix,\n): string {\n return matrix.aliases[aliasOrId] || aliasOrId;\n}\n\nexport function getDependentSkills(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n): string[] {\n const fullId = resolveAlias(skillId, matrix);\n const skill = matrix.skills[fullId];\n\n if (!skill) return [];\n\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n const dependents: string[] = [];\n\n for (const selectedId of resolvedSelections) {\n if (selectedId === fullId) continue;\n\n const selectedSkill = matrix.skills[selectedId];\n if (!selectedSkill) continue;\n\n for (const requirement of selectedSkill.requires) {\n if (requirement.needsAny) {\n const satisfiedReqs = requirement.skillIds.filter((reqId) =>\n resolvedSelections.includes(reqId),\n );\n if (satisfiedReqs.length === 1 && satisfiedReqs[0] === fullId) {\n dependents.push(selectedId);\n }\n } else {\n if (requirement.skillIds.includes(fullId)) {\n dependents.push(selectedId);\n }\n }\n }\n }\n\n return dependents;\n}\n\nexport interface SkillCheckOptions {\n expertMode?: boolean;\n}\n\nexport function isDisabled(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n options?: SkillCheckOptions,\n): boolean {\n if (options?.expertMode) {\n return false;\n }\n\n const fullId = resolveAlias(skillId, matrix);\n const skill = matrix.skills[fullId];\n\n if (!skill) {\n return false;\n }\n\n for (const selectedId of currentSelections) {\n const selectedFullId = resolveAlias(selectedId, matrix);\n\n if (skill.conflictsWith.some((c) => c.skillId === selectedFullId)) {\n return true;\n }\n\n const selectedSkill = matrix.skills[selectedFullId];\n if (\n selectedSkill &&\n selectedSkill.conflictsWith.some((c) => c.skillId === fullId)\n ) {\n return true;\n }\n }\n\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n\n for (const requirement of skill.requires) {\n if (requirement.needsAny) {\n const hasAny = requirement.skillIds.some((reqId) =>\n resolvedSelections.includes(reqId),\n );\n if (!hasAny) {\n return true;\n }\n } else {\n const hasAll = requirement.skillIds.every((reqId) =>\n resolvedSelections.includes(reqId),\n );\n if (!hasAll) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function getDisableReason(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n): string | undefined {\n const fullId = resolveAlias(skillId, matrix);\n const skill = matrix.skills[fullId];\n\n if (!skill) {\n return undefined;\n }\n\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n\n for (const selectedId of resolvedSelections) {\n const conflict = skill.conflictsWith.find((c) => c.skillId === selectedId);\n if (conflict) {\n const selectedSkill = matrix.skills[selectedId];\n const selectedName = selectedSkill?.name || selectedId;\n return `${conflict.reason} (conflicts with ${selectedName})`;\n }\n\n const selectedSkill = matrix.skills[selectedId];\n if (selectedSkill) {\n const reverseConflict = selectedSkill.conflictsWith.find(\n (c) => c.skillId === fullId,\n );\n if (reverseConflict) {\n const selectedName = selectedSkill.name;\n return `${reverseConflict.reason} (conflicts with ${selectedName})`;\n }\n }\n }\n\n for (const requirement of skill.requires) {\n if (requirement.needsAny) {\n const hasAny = requirement.skillIds.some((reqId) =>\n resolvedSelections.includes(reqId),\n );\n if (!hasAny) {\n const requiredNames = requirement.skillIds\n .map((id) => matrix.skills[id]?.name || id)\n .join(\" or \");\n return `${requirement.reason} (requires ${requiredNames})`;\n }\n } else {\n const missingIds = requirement.skillIds.filter(\n (reqId) => !resolvedSelections.includes(reqId),\n );\n if (missingIds.length > 0) {\n const missingNames = missingIds\n .map((id) => matrix.skills[id]?.name || id)\n .join(\", \");\n return `${requirement.reason} (requires ${missingNames})`;\n }\n }\n }\n\n return undefined;\n}\n\nexport function isDiscouraged(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n): boolean {\n const fullId = resolveAlias(skillId, matrix);\n const skill = matrix.skills[fullId];\n\n if (!skill) {\n return false;\n }\n\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n\n for (const selectedId of resolvedSelections) {\n const selectedSkill = matrix.skills[selectedId];\n if (\n selectedSkill &&\n selectedSkill.discourages.some((d) => d.skillId === fullId)\n ) {\n return true;\n }\n\n if (skill.discourages.some((d) => d.skillId === selectedId)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getDiscourageReason(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n): string | undefined {\n const fullId = resolveAlias(skillId, matrix);\n const skill = matrix.skills[fullId];\n\n if (!skill) {\n return undefined;\n }\n\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n\n for (const selectedId of resolvedSelections) {\n const selectedSkill = matrix.skills[selectedId];\n if (selectedSkill) {\n const discourage = selectedSkill.discourages.find(\n (d) => d.skillId === fullId,\n );\n if (discourage) {\n return discourage.reason;\n }\n }\n\n const reverseDiscourage = skill.discourages.find(\n (d) => d.skillId === selectedId,\n );\n if (reverseDiscourage) {\n return reverseDiscourage.reason;\n }\n }\n\n return undefined;\n}\n\nexport function isRecommended(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n): boolean {\n const fullId = resolveAlias(skillId, matrix);\n const skill = matrix.skills[fullId];\n\n if (!skill) {\n return false;\n }\n\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n\n for (const selectedId of resolvedSelections) {\n const selectedSkill = matrix.skills[selectedId];\n if (\n selectedSkill &&\n selectedSkill.recommends.some((r) => r.skillId === fullId)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getRecommendReason(\n skillId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n): string | undefined {\n const fullId = resolveAlias(skillId, matrix);\n const skill = matrix.skills[fullId];\n\n if (!skill) {\n return undefined;\n }\n\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n\n for (const selectedId of resolvedSelections) {\n const selectedSkill = matrix.skills[selectedId];\n if (selectedSkill) {\n const recommendation = selectedSkill.recommends.find(\n (r) => r.skillId === fullId,\n );\n if (recommendation) {\n return `${recommendation.reason} (recommended by ${selectedSkill.name})`;\n }\n }\n }\n\n return undefined;\n}\n\nexport function validateSelection(\n selections: string[],\n matrix: MergedSkillsMatrix,\n): SelectionValidation {\n const errors: ValidationError[] = [];\n const warnings: ValidationWarning[] = [];\n const resolvedSelections = selections.map((s) => resolveAlias(s, matrix));\n\n for (let i = 0; i < resolvedSelections.length; i++) {\n const skillA = matrix.skills[resolvedSelections[i]];\n if (!skillA) continue;\n\n for (let j = i + 1; j < resolvedSelections.length; j++) {\n const skillBId = resolvedSelections[j];\n const conflict = skillA.conflictsWith.find((c) => c.skillId === skillBId);\n if (conflict) {\n errors.push({\n type: \"conflict\",\n message: `${skillA.name} conflicts with ${matrix.skills[skillBId]?.name || skillBId}: ${conflict.reason}`,\n skills: [skillA.id, skillBId],\n });\n }\n }\n }\n\n for (const skillId of resolvedSelections) {\n const skill = matrix.skills[skillId];\n if (!skill) continue;\n\n for (const requirement of skill.requires) {\n if (requirement.needsAny) {\n const hasAny = requirement.skillIds.some((reqId) =>\n resolvedSelections.includes(reqId),\n );\n if (!hasAny) {\n errors.push({\n type: \"missing_requirement\",\n message: `${skill.name} requires one of: ${requirement.skillIds.map((id) => matrix.skills[id]?.name || id).join(\", \")}`,\n skills: [skillId, ...requirement.skillIds],\n });\n }\n } else {\n const missingIds = requirement.skillIds.filter(\n (reqId) => !resolvedSelections.includes(reqId),\n );\n if (missingIds.length > 0) {\n errors.push({\n type: \"missing_requirement\",\n message: `${skill.name} requires: ${missingIds.map((id) => matrix.skills[id]?.name || id).join(\", \")}`,\n skills: [skillId, ...missingIds],\n });\n }\n }\n }\n }\n\n const categorySelections = new Map<string, string[]>();\n for (const skillId of resolvedSelections) {\n const skill = matrix.skills[skillId];\n if (!skill) continue;\n\n const existing = categorySelections.get(skill.category) || [];\n existing.push(skillId);\n categorySelections.set(skill.category, existing);\n }\n\n for (const [categoryId, skillIds] of categorySelections.entries()) {\n if (skillIds.length > 1) {\n const category = matrix.categories[categoryId];\n if (category?.exclusive) {\n errors.push({\n type: \"category_exclusive\",\n message: `Category \"${category.name}\" only allows one selection, but multiple selected: ${skillIds.map((id) => matrix.skills[id]?.name || id).join(\", \")}`,\n skills: skillIds,\n });\n }\n }\n }\n\n for (const skillId of resolvedSelections) {\n const skill = matrix.skills[skillId];\n if (!skill) continue;\n\n for (const recommendation of skill.recommends) {\n if (!resolvedSelections.includes(recommendation.skillId)) {\n const recommendedSkill = matrix.skills[recommendation.skillId];\n if (recommendedSkill) {\n const hasConflict = recommendedSkill.conflictsWith.some((c) =>\n resolvedSelections.includes(c.skillId),\n );\n if (!hasConflict) {\n warnings.push({\n type: \"missing_recommendation\",\n message: `${skill.name} recommends ${recommendedSkill.name}: ${recommendation.reason}`,\n skills: [skillId, recommendation.skillId],\n });\n }\n }\n }\n }\n }\n\n for (const skillId of resolvedSelections) {\n const skill = matrix.skills[skillId];\n if (!skill || skill.providesSetupFor.length === 0) continue;\n\n const hasUsageSkill = skill.providesSetupFor.some((usageId) =>\n resolvedSelections.includes(usageId),\n );\n if (!hasUsageSkill) {\n warnings.push({\n type: \"unused_setup\",\n message: `Setup skill \"${skill.name}\" selected but no corresponding usage skills: ${skill.providesSetupFor.map((id) => matrix.skills[id]?.name || id).join(\", \")}`,\n skills: [skillId, ...skill.providesSetupFor],\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n}\n\nexport function getAvailableSkills(\n categoryId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n options?: SkillCheckOptions,\n): SkillOption[] {\n const skillOptions: SkillOption[] = [];\n const resolvedSelections = currentSelections.map((s) =>\n resolveAlias(s, matrix),\n );\n\n for (const skill of Object.values(matrix.skills)) {\n if (skill.category !== categoryId) {\n continue;\n }\n\n const disabled = isDisabled(skill.id, currentSelections, matrix, options);\n const discouraged =\n !disabled && isDiscouraged(skill.id, currentSelections, matrix);\n const recommended =\n !disabled &&\n !discouraged &&\n isRecommended(skill.id, currentSelections, matrix);\n\n skillOptions.push({\n id: skill.id,\n alias: skill.alias,\n name: skill.name,\n description: skill.description,\n disabled,\n disabledReason: disabled\n ? getDisableReason(skill.id, currentSelections, matrix)\n : undefined,\n discouraged,\n discouragedReason: discouraged\n ? getDiscourageReason(skill.id, currentSelections, matrix)\n : undefined,\n recommended,\n recommendedReason: recommended\n ? getRecommendReason(skill.id, currentSelections, matrix)\n : undefined,\n selected: resolvedSelections.includes(skill.id),\n alternatives: skill.alternatives.map((a) => a.skillId),\n });\n }\n\n return skillOptions;\n}\n\nexport function getSkillsByCategory(\n categoryId: string,\n matrix: MergedSkillsMatrix,\n): ResolvedSkill[] {\n const skills: ResolvedSkill[] = [];\n\n for (const skill of Object.values(matrix.skills)) {\n if (skill.category === categoryId) {\n skills.push(skill);\n }\n }\n\n return skills;\n}\n\nexport function isCategoryAllDisabled(\n categoryId: string,\n currentSelections: string[],\n matrix: MergedSkillsMatrix,\n options?: SkillCheckOptions,\n): { disabled: boolean; reason?: string } {\n if (options?.expertMode) {\n return { disabled: false };\n }\n\n const skills = getSkillsByCategory(categoryId, matrix);\n\n if (skills.length === 0) {\n return { disabled: false };\n }\n\n const disabledSkills: Array<{ skillId: string; reason: string | undefined }> =\n [];\n\n for (const skill of skills) {\n if (isDisabled(skill.id, currentSelections, matrix, options)) {\n disabledSkills.push({\n skillId: skill.id,\n reason: getDisableReason(skill.id, currentSelections, matrix),\n });\n }\n }\n\n if (disabledSkills.length === skills.length) {\n const firstReason = disabledSkills[0]?.reason;\n const shortReason = firstReason?.split(\" (\")[0] || \"requirements not met\";\n return { disabled: true, reason: shortReason };\n }\n\n return { disabled: false };\n}\n\nexport function getSubcategories(\n parentCategoryId: string,\n matrix: MergedSkillsMatrix,\n): string[] {\n const subcategories: string[] = [];\n\n for (const category of Object.values(matrix.categories)) {\n if (category.parent === parentCategoryId) {\n subcategories.push(category.id);\n }\n }\n\n subcategories.sort((a, b) => {\n const catA = matrix.categories[a];\n const catB = matrix.categories[b];\n return (catA?.order ?? 0) - (catB?.order ?? 0);\n });\n\n return subcategories;\n}\n\nexport function getTopLevelCategories(matrix: MergedSkillsMatrix): string[] {\n const topLevel: string[] = [];\n\n for (const category of Object.values(matrix.categories)) {\n if (!category.parent) {\n topLevel.push(category.id);\n }\n }\n\n topLevel.sort((a, b) => {\n const catA = matrix.categories[a];\n const catB = matrix.categories[b];\n return (catA?.order ?? 0) - (catB?.order ?? 0);\n });\n\n return topLevel;\n}\n"],"mappings":"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","names":["selectedSkill"]}
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ CLAUDE_DIR,
4
+ PLUGINS_SUBDIR,
5
+ PLUGIN_MANIFEST_DIR,
6
+ PLUGIN_MANIFEST_FILE
7
+ } from "./chunk-SJYG4EJZ.js";
8
+ import {
9
+ verbose
10
+ } from "./chunk-TOPAIL5W.js";
11
+ import {
12
+ fileExists,
13
+ glob,
14
+ readFile
15
+ } from "./chunk-MMDXNZPF.js";
16
+ import {
17
+ init_esm_shims
18
+ } from "./chunk-DHET7RCE.js";
19
+
20
+ // src/cli-v2/lib/plugin-finder.ts
21
+ init_esm_shims();
22
+ import path from "path";
23
+ function getCollectivePluginDir(projectDir) {
24
+ const dir = projectDir ?? process.cwd();
25
+ return path.join(dir, CLAUDE_DIR, PLUGINS_SUBDIR, "claude-collective");
26
+ }
27
+ function getProjectPluginsDir(projectDir) {
28
+ const dir = projectDir ?? process.cwd();
29
+ return path.join(dir, CLAUDE_DIR, PLUGINS_SUBDIR);
30
+ }
31
+ function getPluginSkillsDir(pluginDir) {
32
+ return path.join(pluginDir, "skills");
33
+ }
34
+ function getPluginAgentsDir(pluginDir) {
35
+ return path.join(pluginDir, "agents");
36
+ }
37
+ function getPluginManifestPath(pluginDir) {
38
+ return path.join(pluginDir, PLUGIN_MANIFEST_DIR, PLUGIN_MANIFEST_FILE);
39
+ }
40
+ async function readPluginManifest(pluginDir) {
41
+ const manifestPath = getPluginManifestPath(pluginDir);
42
+ if (!await fileExists(manifestPath)) {
43
+ verbose(` No manifest at ${manifestPath}`);
44
+ return null;
45
+ }
46
+ try {
47
+ const content = await readFile(manifestPath);
48
+ const manifest = JSON.parse(content);
49
+ if (!manifest.name || typeof manifest.name !== "string") {
50
+ verbose(` Invalid manifest at ${manifestPath}: missing name`);
51
+ return null;
52
+ }
53
+ return manifest;
54
+ } catch (error) {
55
+ verbose(` Failed to parse manifest at ${manifestPath}: ${error}`);
56
+ return null;
57
+ }
58
+ }
59
+ async function getPluginSkillIds(pluginSkillsDir, matrix) {
60
+ const skillFiles = await glob("**/SKILL.md", pluginSkillsDir);
61
+ const skillIds = [];
62
+ const nameToId = /* @__PURE__ */ new Map();
63
+ for (const [id, skill] of Object.entries(matrix.skills)) {
64
+ nameToId.set(skill.name.toLowerCase(), id);
65
+ if (skill.alias) {
66
+ nameToId.set(skill.alias.toLowerCase(), id);
67
+ }
68
+ }
69
+ const dirToId = /* @__PURE__ */ new Map();
70
+ for (const [id, skill] of Object.entries(matrix.skills)) {
71
+ const baseName = skill.name.toLowerCase().replace(/\s+/g, "-");
72
+ dirToId.set(baseName, id);
73
+ const idParts = id.split("/");
74
+ const lastPart = idParts[idParts.length - 1];
75
+ if (lastPart) {
76
+ dirToId.set(lastPart.toLowerCase(), id);
77
+ }
78
+ }
79
+ for (const skillFile of skillFiles) {
80
+ const fullPath = path.join(pluginSkillsDir, skillFile);
81
+ const content = await readFile(fullPath);
82
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
83
+ if (frontmatterMatch) {
84
+ const frontmatter = frontmatterMatch[1];
85
+ const nameMatch = frontmatter.match(/^name:\s*["']?(.+?)["']?\s*$/m);
86
+ if (nameMatch) {
87
+ const skillName = nameMatch[1].trim();
88
+ const skillId2 = nameToId.get(skillName.toLowerCase());
89
+ if (skillId2) {
90
+ skillIds.push(skillId2);
91
+ continue;
92
+ }
93
+ }
94
+ }
95
+ const dirPath = path.dirname(skillFile);
96
+ const dirName = path.basename(dirPath);
97
+ const skillId = dirToId.get(dirName.toLowerCase());
98
+ if (skillId) {
99
+ skillIds.push(skillId);
100
+ }
101
+ }
102
+ return skillIds;
103
+ }
104
+
105
+ export {
106
+ getCollectivePluginDir,
107
+ getProjectPluginsDir,
108
+ getPluginSkillsDir,
109
+ getPluginAgentsDir,
110
+ getPluginManifestPath,
111
+ readPluginManifest,
112
+ getPluginSkillIds
113
+ };
114
+ //# sourceMappingURL=chunk-D4IQAT27.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli-v2/lib/plugin-finder.ts"],"sourcesContent":["import path from \"path\";\nimport os from \"os\";\nimport { fileExists, readFile, glob } from \"../utils/fs\";\nimport { verbose } from \"../utils/logger\";\nimport {\n CLAUDE_DIR,\n PLUGINS_SUBDIR,\n PLUGIN_MANIFEST_DIR,\n PLUGIN_MANIFEST_FILE,\n} from \"../consts\";\nimport type { PluginManifest } from \"../../types\";\nimport type { MergedSkillsMatrix } from \"../types-matrix\";\n\nexport function getUserPluginsDir(): string {\n return path.join(os.homedir(), CLAUDE_DIR, PLUGINS_SUBDIR);\n}\n\nexport function getCollectivePluginDir(projectDir?: string): string {\n const dir = projectDir ?? process.cwd();\n return path.join(dir, CLAUDE_DIR, PLUGINS_SUBDIR, \"claude-collective\");\n}\n\nexport function getProjectPluginsDir(projectDir?: string): string {\n const dir = projectDir ?? process.cwd();\n return path.join(dir, CLAUDE_DIR, PLUGINS_SUBDIR);\n}\n\nexport function getPluginSkillsDir(pluginDir: string): string {\n return path.join(pluginDir, \"skills\");\n}\n\nexport function getPluginAgentsDir(pluginDir: string): string {\n return path.join(pluginDir, \"agents\");\n}\n\nexport function getPluginManifestPath(pluginDir: string): string {\n return path.join(pluginDir, PLUGIN_MANIFEST_DIR, PLUGIN_MANIFEST_FILE);\n}\n\nexport async function readPluginManifest(\n pluginDir: string,\n): Promise<PluginManifest | null> {\n const manifestPath = getPluginManifestPath(pluginDir);\n\n if (!(await fileExists(manifestPath))) {\n verbose(` No manifest at ${manifestPath}`);\n return null;\n }\n\n try {\n const content = await readFile(manifestPath);\n const manifest = JSON.parse(content) as PluginManifest;\n\n if (!manifest.name || typeof manifest.name !== \"string\") {\n verbose(` Invalid manifest at ${manifestPath}: missing name`);\n return null;\n }\n\n return manifest;\n } catch (error) {\n verbose(` Failed to parse manifest at ${manifestPath}: ${error}`);\n return null;\n }\n}\n\nexport async function getPluginSkillIds(\n pluginSkillsDir: string,\n matrix: MergedSkillsMatrix,\n): Promise<string[]> {\n const skillFiles = await glob(\"**/SKILL.md\", pluginSkillsDir);\n const skillIds: string[] = [];\n\n const nameToId = new Map<string, string>();\n for (const [id, skill] of Object.entries(matrix.skills)) {\n nameToId.set(skill.name.toLowerCase(), id);\n if (skill.alias) {\n nameToId.set(skill.alias.toLowerCase(), id);\n }\n }\n\n const dirToId = new Map<string, string>();\n for (const [id, skill] of Object.entries(matrix.skills)) {\n const baseName = skill.name.toLowerCase().replace(/\\s+/g, \"-\");\n dirToId.set(baseName, id);\n\n const idParts = id.split(\"/\");\n const lastPart = idParts[idParts.length - 1];\n if (lastPart) {\n dirToId.set(lastPart.toLowerCase(), id);\n }\n }\n\n for (const skillFile of skillFiles) {\n const fullPath = path.join(pluginSkillsDir, skillFile);\n const content = await readFile(fullPath);\n\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (frontmatterMatch) {\n const frontmatter = frontmatterMatch[1];\n const nameMatch = frontmatter.match(/^name:\\s*[\"']?(.+?)[\"']?\\s*$/m);\n if (nameMatch) {\n const skillName = nameMatch[1].trim();\n const skillId = nameToId.get(skillName.toLowerCase());\n if (skillId) {\n skillIds.push(skillId);\n continue;\n }\n }\n }\n\n const dirPath = path.dirname(skillFile);\n const dirName = path.basename(dirPath);\n const skillId = dirToId.get(dirName.toLowerCase());\n if (skillId) {\n skillIds.push(skillId);\n }\n }\n\n return skillIds;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA,OAAO,UAAU;AAiBV,SAAS,uBAAuB,YAA6B;AAClE,QAAM,MAAM,cAAc,QAAQ,IAAI;AACtC,SAAO,KAAK,KAAK,KAAK,YAAY,gBAAgB,mBAAmB;AACvE;AAEO,SAAS,qBAAqB,YAA6B;AAChE,QAAM,MAAM,cAAc,QAAQ,IAAI;AACtC,SAAO,KAAK,KAAK,KAAK,YAAY,cAAc;AAClD;AAEO,SAAS,mBAAmB,WAA2B;AAC5D,SAAO,KAAK,KAAK,WAAW,QAAQ;AACtC;AAEO,SAAS,mBAAmB,WAA2B;AAC5D,SAAO,KAAK,KAAK,WAAW,QAAQ;AACtC;AAEO,SAAS,sBAAsB,WAA2B;AAC/D,SAAO,KAAK,KAAK,WAAW,qBAAqB,oBAAoB;AACvE;AAEA,eAAsB,mBACpB,WACgC;AAChC,QAAM,eAAe,sBAAsB,SAAS;AAEpD,MAAI,CAAE,MAAM,WAAW,YAAY,GAAI;AACrC,YAAQ,oBAAoB,YAAY,EAAE;AAC1C,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,UAAU,MAAM,SAAS,YAAY;AAC3C,UAAM,WAAW,KAAK,MAAM,OAAO;AAEnC,QAAI,CAAC,SAAS,QAAQ,OAAO,SAAS,SAAS,UAAU;AACvD,cAAQ,yBAAyB,YAAY,gBAAgB;AAC7D,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,iCAAiC,YAAY,KAAK,KAAK,EAAE;AACjE,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,kBACpB,iBACA,QACmB;AACnB,QAAM,aAAa,MAAM,KAAK,eAAe,eAAe;AAC5D,QAAM,WAAqB,CAAC;AAE5B,QAAM,WAAW,oBAAI,IAAoB;AACzC,aAAW,CAAC,IAAI,KAAK,KAAK,OAAO,QAAQ,OAAO,MAAM,GAAG;AACvD,aAAS,IAAI,MAAM,KAAK,YAAY,GAAG,EAAE;AACzC,QAAI,MAAM,OAAO;AACf,eAAS,IAAI,MAAM,MAAM,YAAY,GAAG,EAAE;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,UAAU,oBAAI,IAAoB;AACxC,aAAW,CAAC,IAAI,KAAK,KAAK,OAAO,QAAQ,OAAO,MAAM,GAAG;AACvD,UAAM,WAAW,MAAM,KAAK,YAAY,EAAE,QAAQ,QAAQ,GAAG;AAC7D,YAAQ,IAAI,UAAU,EAAE;AAExB,UAAM,UAAU,GAAG,MAAM,GAAG;AAC5B,UAAM,WAAW,QAAQ,QAAQ,SAAS,CAAC;AAC3C,QAAI,UAAU;AACZ,cAAQ,IAAI,SAAS,YAAY,GAAG,EAAE;AAAA,IACxC;AAAA,EACF;AAEA,aAAW,aAAa,YAAY;AAClC,UAAM,WAAW,KAAK,KAAK,iBAAiB,SAAS;AACrD,UAAM,UAAU,MAAM,SAAS,QAAQ;AAEvC,UAAM,mBAAmB,QAAQ,MAAM,uBAAuB;AAC9D,QAAI,kBAAkB;AACpB,YAAM,cAAc,iBAAiB,CAAC;AACtC,YAAM,YAAY,YAAY,MAAM,+BAA+B;AACnE,UAAI,WAAW;AACb,cAAM,YAAY,UAAU,CAAC,EAAE,KAAK;AACpC,cAAMA,WAAU,SAAS,IAAI,UAAU,YAAY,CAAC;AACpD,YAAIA,UAAS;AACX,mBAAS,KAAKA,QAAO;AACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,UAAM,UAAU,KAAK,SAAS,OAAO;AACrC,UAAM,UAAU,QAAQ,IAAI,QAAQ,YAAY,CAAC;AACjD,QAAI,SAAS;AACX,eAAS,KAAK,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AACT;","names":["skillId"]}
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+ var __commonJS = (cb, mod) => function __require() {
12
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
13
+ };
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
27
+ // If the importer is in node compatibility mode or this is not an ESM
28
+ // file that has been converted to a CommonJS file using a Babel-
29
+ // compatible transform (i.e. "__esModule" has not been set), then set
30
+ // "default" to the CommonJS "module.exports" for node compatibility.
31
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
32
+ mod
33
+ ));
34
+
35
+ // node_modules/tsup/assets/esm_shims.js
36
+ import path from "path";
37
+ import { fileURLToPath } from "url";
38
+ var init_esm_shims = __esm({
39
+ "node_modules/tsup/assets/esm_shims.js"() {
40
+ "use strict";
41
+ }
42
+ });
43
+
44
+ export {
45
+ __commonJS,
46
+ __export,
47
+ __toESM,
48
+ init_esm_shims
49
+ };
50
+ //# sourceMappingURL=chunk-DHET7RCE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAF9B;AAAA;AAAA;AAAA;AAAA;","names":[]}