@g3nomaly/skills 1.0.0 → 1.0.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 (384) hide show
  1. package/dist/cli/adapter.d.ts +19 -16
  2. package/dist/cli/adapter.d.ts.map +1 -1
  3. package/dist/cli/adapter.js +39 -63
  4. package/dist/cli/adapter.js.map +1 -1
  5. package/dist/cli/commands/add.d.ts +7 -10
  6. package/dist/cli/commands/add.d.ts.map +1 -1
  7. package/dist/cli/commands/add.js +12 -98
  8. package/dist/cli/commands/add.js.map +1 -1
  9. package/dist/cli/commands/ls.d.ts +9 -2
  10. package/dist/cli/commands/ls.d.ts.map +1 -1
  11. package/dist/cli/commands/ls.js +21 -5
  12. package/dist/cli/commands/ls.js.map +1 -1
  13. package/dist/cli/commands/remove.d.ts +7 -7
  14. package/dist/cli/commands/remove.d.ts.map +1 -1
  15. package/dist/cli/commands/remove.js +11 -56
  16. package/dist/cli/commands/remove.js.map +1 -1
  17. package/dist/cli/commands/source.d.ts +29 -0
  18. package/dist/cli/commands/source.d.ts.map +1 -0
  19. package/dist/cli/commands/source.js +31 -0
  20. package/dist/cli/commands/source.js.map +1 -0
  21. package/dist/cli/commands/update.d.ts +6 -6
  22. package/dist/cli/commands/update.d.ts.map +1 -1
  23. package/dist/cli/commands/update.js +9 -43
  24. package/dist/cli/commands/update.js.map +1 -1
  25. package/dist/cli/index.js +79 -58
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/index.d.ts +2 -8
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -8
  30. package/dist/index.js.map +1 -1
  31. package/dist/packages/index.d.ts +3 -0
  32. package/dist/packages/index.d.ts.map +1 -0
  33. package/dist/packages/index.js +3 -0
  34. package/dist/packages/index.js.map +1 -0
  35. package/dist/packages/install.d.ts +24 -0
  36. package/dist/packages/install.d.ts.map +1 -0
  37. package/dist/packages/install.js +47 -0
  38. package/dist/packages/install.js.map +1 -0
  39. package/dist/registry/index.d.ts +4 -2
  40. package/dist/registry/index.d.ts.map +1 -1
  41. package/dist/registry/index.js +3 -2
  42. package/dist/registry/index.js.map +1 -1
  43. package/dist/registry/locate.d.ts +22 -0
  44. package/dist/registry/locate.d.ts.map +1 -0
  45. package/dist/registry/locate.js +81 -0
  46. package/dist/registry/locate.js.map +1 -0
  47. package/dist/registry/manifest.d.ts +9 -0
  48. package/dist/registry/manifest.d.ts.map +1 -0
  49. package/dist/registry/manifest.js +14 -0
  50. package/dist/registry/manifest.js.map +1 -0
  51. package/dist/registry/readSkillDir.d.ts +8 -6
  52. package/dist/registry/readSkillDir.d.ts.map +1 -1
  53. package/dist/registry/readSkillDir.js +19 -24
  54. package/dist/registry/readSkillDir.js.map +1 -1
  55. package/dist/registry/readSource.d.ts +9 -0
  56. package/dist/registry/readSource.d.ts.map +1 -0
  57. package/dist/registry/readSource.js +30 -0
  58. package/dist/registry/readSource.js.map +1 -0
  59. package/dist/registry/types.d.ts +16 -16
  60. package/dist/registry/types.d.ts.map +1 -1
  61. package/dist/registry/types.js +13 -23
  62. package/dist/registry/types.js.map +1 -1
  63. package/dist/sources/builtins.d.ts +4 -0
  64. package/dist/sources/builtins.d.ts.map +1 -0
  65. package/dist/sources/builtins.js +5 -0
  66. package/dist/sources/builtins.js.map +1 -0
  67. package/dist/sources/index.d.ts +2 -0
  68. package/dist/sources/index.d.ts.map +1 -0
  69. package/dist/sources/index.js +3 -0
  70. package/dist/sources/index.js.map +1 -0
  71. package/dist/utils/frontmatter.d.ts +7 -0
  72. package/dist/utils/frontmatter.d.ts.map +1 -0
  73. package/dist/utils/frontmatter.js +20 -0
  74. package/dist/utils/frontmatter.js.map +1 -0
  75. package/dist/utils/index.d.ts +2 -0
  76. package/dist/utils/index.d.ts.map +1 -0
  77. package/dist/utils/index.js +3 -0
  78. package/dist/utils/index.js.map +1 -0
  79. package/package.json +8 -32
  80. package/dist/cli/commands/hook.d.ts +0 -6
  81. package/dist/cli/commands/hook.d.ts.map +0 -1
  82. package/dist/cli/commands/hook.js +0 -18
  83. package/dist/cli/commands/hook.js.map +0 -1
  84. package/dist/decisions/index.d.ts +0 -6
  85. package/dist/decisions/index.d.ts.map +0 -1
  86. package/dist/decisions/index.js +0 -5
  87. package/dist/decisions/index.js.map +0 -1
  88. package/dist/decisions/paths.d.ts +0 -4
  89. package/dist/decisions/paths.d.ts.map +0 -1
  90. package/dist/decisions/paths.js +0 -12
  91. package/dist/decisions/paths.js.map +0 -1
  92. package/dist/decisions/read.d.ts +0 -18
  93. package/dist/decisions/read.d.ts.map +0 -1
  94. package/dist/decisions/read.js +0 -45
  95. package/dist/decisions/read.js.map +0 -1
  96. package/dist/decisions/write.d.ts +0 -20
  97. package/dist/decisions/write.d.ts.map +0 -1
  98. package/dist/decisions/write.js +0 -48
  99. package/dist/decisions/write.js.map +0 -1
  100. package/dist/filetree/ensure.d.ts +0 -7
  101. package/dist/filetree/ensure.d.ts.map +0 -1
  102. package/dist/filetree/ensure.js +0 -36
  103. package/dist/filetree/ensure.js.map +0 -1
  104. package/dist/filetree/entries.d.ts +0 -9
  105. package/dist/filetree/entries.d.ts.map +0 -1
  106. package/dist/filetree/entries.js +0 -49
  107. package/dist/filetree/entries.js.map +0 -1
  108. package/dist/filetree/frontmatter.d.ts +0 -16
  109. package/dist/filetree/frontmatter.d.ts.map +0 -1
  110. package/dist/filetree/frontmatter.js +0 -43
  111. package/dist/filetree/frontmatter.js.map +0 -1
  112. package/dist/filetree/generate.d.ts +0 -16
  113. package/dist/filetree/generate.d.ts.map +0 -1
  114. package/dist/filetree/generate.js +0 -62
  115. package/dist/filetree/generate.js.map +0 -1
  116. package/dist/filetree/index.d.ts +0 -17
  117. package/dist/filetree/index.d.ts.map +0 -1
  118. package/dist/filetree/index.js +0 -13
  119. package/dist/filetree/index.js.map +0 -1
  120. package/dist/filetree/levels.d.ts +0 -25
  121. package/dist/filetree/levels.d.ts.map +0 -1
  122. package/dist/filetree/levels.js +0 -45
  123. package/dist/filetree/levels.js.map +0 -1
  124. package/dist/filetree/locate.d.ts +0 -44
  125. package/dist/filetree/locate.d.ts.map +0 -1
  126. package/dist/filetree/locate.js +0 -76
  127. package/dist/filetree/locate.js.map +0 -1
  128. package/dist/filetree/paths.d.ts +0 -15
  129. package/dist/filetree/paths.d.ts.map +0 -1
  130. package/dist/filetree/paths.js +0 -38
  131. package/dist/filetree/paths.js.map +0 -1
  132. package/dist/filetree/read.d.ts +0 -23
  133. package/dist/filetree/read.d.ts.map +0 -1
  134. package/dist/filetree/read.js +0 -36
  135. package/dist/filetree/read.js.map +0 -1
  136. package/dist/filetree/remove.d.ts +0 -9
  137. package/dist/filetree/remove.d.ts.map +0 -1
  138. package/dist/filetree/remove.js +0 -17
  139. package/dist/filetree/remove.js.map +0 -1
  140. package/dist/filetree/root.d.ts +0 -9
  141. package/dist/filetree/root.d.ts.map +0 -1
  142. package/dist/filetree/root.js +0 -15
  143. package/dist/filetree/root.js.map +0 -1
  144. package/dist/filetree/status.d.ts +0 -21
  145. package/dist/filetree/status.d.ts.map +0 -1
  146. package/dist/filetree/status.js +0 -55
  147. package/dist/filetree/status.js.map +0 -1
  148. package/dist/hooks/cli.d.ts +0 -29
  149. package/dist/hooks/cli.d.ts.map +0 -1
  150. package/dist/hooks/cli.js +0 -65
  151. package/dist/hooks/cli.js.map +0 -1
  152. package/dist/hooks/index.d.ts +0 -3
  153. package/dist/hooks/index.d.ts.map +0 -1
  154. package/dist/hooks/index.js +0 -3
  155. package/dist/hooks/index.js.map +0 -1
  156. package/dist/plugins/grilling/.claude-plugin/plugin.json +0 -7
  157. package/dist/plugins/grilling/skills/domain-modeling/ADR-FORMAT.md +0 -47
  158. package/dist/plugins/grilling/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  159. package/dist/plugins/grilling/skills/domain-modeling/SKILL.md +0 -74
  160. package/dist/plugins/grilling/skills/domain-modeling/agents/openai.yaml +0 -3
  161. package/dist/plugins/grilling/skills/grill-me/SKILL.md +0 -7
  162. package/dist/plugins/grilling/skills/grill-me/agents/openai.yaml +0 -5
  163. package/dist/plugins/grilling/skills/grill-with-docs/SKILL.md +0 -7
  164. package/dist/plugins/grilling/skills/grill-with-docs/agents/openai.yaml +0 -5
  165. package/dist/plugins/grilling/skills/grilling/SKILL.md +0 -12
  166. package/dist/plugins/grilling/skills/grilling/agents/openai.yaml +0 -3
  167. package/dist/plugins/speech/.claude-plugin/plugin.json +0 -7
  168. package/dist/plugins/speech/skills/emphasise/SKILL.md +0 -49
  169. package/dist/plugins/speech/skills/emphasise/agents/openai.yaml +0 -5
  170. package/dist/plugins/speech/skills/unslop/SKILL.md +0 -80
  171. package/dist/plugins/task-manager/.claude-plugin/plugin.json +0 -11
  172. package/dist/plugins/task-manager/hooks/hooks.json +0 -19
  173. package/dist/plugins/task-manager/skills/decisions/SKILL.md +0 -39
  174. package/dist/plugins/task-manager/skills/decisions/agents/openai.yaml +0 -5
  175. package/dist/plugins/task-manager/skills/decisions/references/usage.md +0 -26
  176. package/dist/plugins/task-manager/skills/task-manager/SKILL.md +0 -99
  177. package/dist/plugins/task-manager/skills/vocabulary/SKILL.md +0 -42
  178. package/dist/plugins/task-manager/skills/vocabulary/agents/openai.yaml +0 -5
  179. package/dist/plugins/task-manager/skills/vocabulary/references/usage.md +0 -26
  180. package/dist/plugins/using-hooks/.claude-plugin/plugin.json +0 -7
  181. package/dist/plugins/using-hooks/skills/hook-post-tool-use/SKILL.md +0 -79
  182. package/dist/plugins/using-hooks/skills/hook-post-tool-use/agents/openai.yaml +0 -5
  183. package/dist/plugins/using-hooks/skills/hook-pre-tool-use/SKILL.md +0 -84
  184. package/dist/plugins/using-hooks/skills/hook-pre-tool-use/agents/openai.yaml +0 -5
  185. package/dist/plugins/using-hooks/skills/hook-stop/SKILL.md +0 -69
  186. package/dist/plugins/using-hooks/skills/hook-stop/agents/openai.yaml +0 -5
  187. package/dist/plugins/using-hooks/skills/hook-user-prompt-submit/SKILL.md +0 -64
  188. package/dist/plugins/using-hooks/skills/hook-user-prompt-submit/agents/openai.yaml +0 -5
  189. package/dist/plugins/workflow/.claude-plugin/plugin.json +0 -16
  190. package/dist/plugins/workflow/agents/reviewer.md +0 -9
  191. package/dist/plugins/workflow/skills/execute/SKILL.md +0 -21
  192. package/dist/plugins/workflow/skills/execute/agents/openai.yaml +0 -5
  193. package/dist/plugins/workflow/skills/orchestrator/SKILL.md +0 -27
  194. package/dist/plugins/workflow/skills/orchestrator/agents/openai.yaml +0 -5
  195. package/dist/plugins/workflow/skills/plan/SKILL.md +0 -18
  196. package/dist/plugins/workflow/skills/plan/agents/openai.yaml +0 -5
  197. package/dist/plugins/workflow/skills/plan/references/task-frontmatter.md +0 -33
  198. package/dist/plugins/workflow/skills/review/SKILL.md +0 -25
  199. package/dist/plugins/workflow/skills/review/agents/openai.yaml +0 -5
  200. package/dist/plugins/workflow/skills/run/SKILL.md +0 -33
  201. package/dist/plugins/workflow/skills/run/agents/openai.yaml +0 -5
  202. package/dist/plugins/workflow/skills/run/references/sub-agents.md +0 -46
  203. package/dist/plugins/workflow/skills/sync/SKILL.md +0 -18
  204. package/dist/plugins/workflow/skills/sync/agents/openai.yaml +0 -5
  205. package/dist/plugins/workflow/skills/worktree/SKILL.md +0 -38
  206. package/dist/plugins/workflow/skills/worktree/agents/openai.yaml +0 -5
  207. package/dist/plugins/workflow/skills/worktree/references/git-commands.md +0 -27
  208. package/dist/plugins/writing/.claude-plugin/plugin.json +0 -7
  209. package/dist/plugins/writing/skills/writing-great-hooks/SKILL.md +0 -192
  210. package/dist/plugins/writing/skills/writing-great-hooks/agents/openai.yaml +0 -5
  211. package/dist/plugins/writing/skills/writing-great-skills/GLOSSARY.md +0 -201
  212. package/dist/plugins/writing/skills/writing-great-skills/SKILL.md +0 -92
  213. package/dist/plugins/writing/skills/writing-great-skills/agents/openai.yaml +0 -5
  214. package/dist/plugins/writing/skills/writing-great-tasks/SKILL.md +0 -136
  215. package/dist/plugins/writing/skills/writing-great-tasks/agents/openai.yaml +0 -5
  216. package/dist/plugins/writing/skills/writing-great-tasks/templates/template_task.md +0 -108
  217. package/dist/registry/loadPackageRegistry.d.ts +0 -14
  218. package/dist/registry/loadPackageRegistry.d.ts.map +0 -1
  219. package/dist/registry/loadPackageRegistry.js +0 -59
  220. package/dist/registry/loadPackageRegistry.js.map +0 -1
  221. package/dist/registry/userManifest.d.ts +0 -7
  222. package/dist/registry/userManifest.d.ts.map +0 -1
  223. package/dist/registry/userManifest.js +0 -21
  224. package/dist/registry/userManifest.js.map +0 -1
  225. package/dist/remote/fetch.d.ts +0 -16
  226. package/dist/remote/fetch.d.ts.map +0 -1
  227. package/dist/remote/fetch.js +0 -41
  228. package/dist/remote/fetch.js.map +0 -1
  229. package/dist/remote/index.d.ts +0 -7
  230. package/dist/remote/index.d.ts.map +0 -1
  231. package/dist/remote/index.js +0 -5
  232. package/dist/remote/index.js.map +0 -1
  233. package/dist/remote/manifest.d.ts +0 -23
  234. package/dist/remote/manifest.d.ts.map +0 -1
  235. package/dist/remote/manifest.js +0 -116
  236. package/dist/remote/manifest.js.map +0 -1
  237. package/dist/remote/registry.d.ts +0 -18
  238. package/dist/remote/registry.d.ts.map +0 -1
  239. package/dist/remote/registry.js +0 -58
  240. package/dist/remote/registry.js.map +0 -1
  241. package/dist/schemas/config.d.ts +0 -3
  242. package/dist/schemas/config.d.ts.map +0 -1
  243. package/dist/schemas/config.js +0 -3
  244. package/dist/schemas/config.js.map +0 -1
  245. package/dist/schemas/decision.d.ts +0 -43
  246. package/dist/schemas/decision.d.ts.map +0 -1
  247. package/dist/schemas/decision.js +0 -24
  248. package/dist/schemas/decision.js.map +0 -1
  249. package/dist/schemas/index.d.ts +0 -17
  250. package/dist/schemas/index.d.ts.map +0 -1
  251. package/dist/schemas/index.js +0 -10
  252. package/dist/schemas/index.js.map +0 -1
  253. package/dist/schemas/phase.d.ts +0 -46
  254. package/dist/schemas/phase.d.ts.map +0 -1
  255. package/dist/schemas/phase.js +0 -16
  256. package/dist/schemas/phase.js.map +0 -1
  257. package/dist/schemas/plan.d.ts +0 -44
  258. package/dist/schemas/plan.d.ts.map +0 -1
  259. package/dist/schemas/plan.js +0 -15
  260. package/dist/schemas/plan.js.map +0 -1
  261. package/dist/schemas/primitives.d.ts +0 -38
  262. package/dist/schemas/primitives.d.ts.map +0 -1
  263. package/dist/schemas/primitives.js +0 -33
  264. package/dist/schemas/primitives.js.map +0 -1
  265. package/dist/schemas/task.d.ts +0 -70
  266. package/dist/schemas/task.d.ts.map +0 -1
  267. package/dist/schemas/task.js +0 -19
  268. package/dist/schemas/task.js.map +0 -1
  269. package/dist/schemas/term.d.ts +0 -17
  270. package/dist/schemas/term.d.ts.map +0 -1
  271. package/dist/schemas/term.js +0 -22
  272. package/dist/schemas/term.js.map +0 -1
  273. package/dist/schemas/validation.d.ts +0 -24
  274. package/dist/schemas/validation.d.ts.map +0 -1
  275. package/dist/schemas/validation.js +0 -39
  276. package/dist/schemas/validation.js.map +0 -1
  277. package/dist/task-manager/hooks/add-decision.d.ts +0 -2
  278. package/dist/task-manager/hooks/add-decision.d.ts.map +0 -1
  279. package/dist/task-manager/hooks/add-decision.js +0 -19
  280. package/dist/task-manager/hooks/add-decision.js.map +0 -1
  281. package/dist/task-manager/hooks/cleanup.d.ts +0 -2
  282. package/dist/task-manager/hooks/cleanup.d.ts.map +0 -1
  283. package/dist/task-manager/hooks/cleanup.js +0 -27
  284. package/dist/task-manager/hooks/cleanup.js.map +0 -1
  285. package/dist/task-manager/hooks/get-decision.d.ts +0 -2
  286. package/dist/task-manager/hooks/get-decision.d.ts.map +0 -1
  287. package/dist/task-manager/hooks/get-decision.js +0 -11
  288. package/dist/task-manager/hooks/get-decision.js.map +0 -1
  289. package/dist/task-manager/hooks/get-entry.d.ts +0 -2
  290. package/dist/task-manager/hooks/get-entry.d.ts.map +0 -1
  291. package/dist/task-manager/hooks/get-entry.js +0 -20
  292. package/dist/task-manager/hooks/get-entry.js.map +0 -1
  293. package/dist/task-manager/hooks/get-term.d.ts +0 -2
  294. package/dist/task-manager/hooks/get-term.d.ts.map +0 -1
  295. package/dist/task-manager/hooks/get-term.js +0 -13
  296. package/dist/task-manager/hooks/get-term.js.map +0 -1
  297. package/dist/task-manager/hooks/guard-tree.d.ts +0 -2
  298. package/dist/task-manager/hooks/guard-tree.d.ts.map +0 -1
  299. package/dist/task-manager/hooks/guard-tree.js +0 -63
  300. package/dist/task-manager/hooks/guard-tree.js.map +0 -1
  301. package/dist/task-manager/hooks/index.d.ts +0 -4
  302. package/dist/task-manager/hooks/index.d.ts.map +0 -1
  303. package/dist/task-manager/hooks/index.js +0 -32
  304. package/dist/task-manager/hooks/index.js.map +0 -1
  305. package/dist/task-manager/hooks/list-decisions.d.ts +0 -2
  306. package/dist/task-manager/hooks/list-decisions.d.ts.map +0 -1
  307. package/dist/task-manager/hooks/list-decisions.js +0 -20
  308. package/dist/task-manager/hooks/list-decisions.js.map +0 -1
  309. package/dist/task-manager/hooks/list-entries.d.ts +0 -2
  310. package/dist/task-manager/hooks/list-entries.d.ts.map +0 -1
  311. package/dist/task-manager/hooks/list-entries.js +0 -19
  312. package/dist/task-manager/hooks/list-entries.js.map +0 -1
  313. package/dist/task-manager/hooks/list-terms.d.ts +0 -2
  314. package/dist/task-manager/hooks/list-terms.d.ts.map +0 -1
  315. package/dist/task-manager/hooks/list-terms.js +0 -8
  316. package/dist/task-manager/hooks/list-terms.js.map +0 -1
  317. package/dist/task-manager/hooks/next-entry.d.ts +0 -2
  318. package/dist/task-manager/hooks/next-entry.d.ts.map +0 -1
  319. package/dist/task-manager/hooks/next-entry.js +0 -23
  320. package/dist/task-manager/hooks/next-entry.js.map +0 -1
  321. package/dist/task-manager/hooks/remove-term.d.ts +0 -2
  322. package/dist/task-manager/hooks/remove-term.d.ts.map +0 -1
  323. package/dist/task-manager/hooks/remove-term.js +0 -15
  324. package/dist/task-manager/hooks/remove-term.js.map +0 -1
  325. package/dist/task-manager/hooks/set-state.d.ts +0 -2
  326. package/dist/task-manager/hooks/set-state.d.ts.map +0 -1
  327. package/dist/task-manager/hooks/set-state.js +0 -15
  328. package/dist/task-manager/hooks/set-state.js.map +0 -1
  329. package/dist/task-manager/hooks/set-term.d.ts +0 -2
  330. package/dist/task-manager/hooks/set-term.d.ts.map +0 -1
  331. package/dist/task-manager/hooks/set-term.js +0 -27
  332. package/dist/task-manager/hooks/set-term.js.map +0 -1
  333. package/dist/task-manager/hooks/sync-tree.d.ts +0 -2
  334. package/dist/task-manager/hooks/sync-tree.d.ts.map +0 -1
  335. package/dist/task-manager/hooks/sync-tree.js +0 -28
  336. package/dist/task-manager/hooks/sync-tree.js.map +0 -1
  337. package/dist/task-manager/index.d.ts +0 -2
  338. package/dist/task-manager/index.d.ts.map +0 -1
  339. package/dist/task-manager/index.js +0 -3
  340. package/dist/task-manager/index.js.map +0 -1
  341. package/dist/vocabulary/file.d.ts +0 -15
  342. package/dist/vocabulary/file.d.ts.map +0 -1
  343. package/dist/vocabulary/file.js +0 -80
  344. package/dist/vocabulary/file.js.map +0 -1
  345. package/dist/vocabulary/index.d.ts +0 -4
  346. package/dist/vocabulary/index.d.ts.map +0 -1
  347. package/dist/vocabulary/index.js +0 -4
  348. package/dist/vocabulary/index.js.map +0 -1
  349. package/dist/vocabulary/match.d.ts +0 -22
  350. package/dist/vocabulary/match.d.ts.map +0 -1
  351. package/dist/vocabulary/match.js +0 -31
  352. package/dist/vocabulary/match.js.map +0 -1
  353. package/dist/workflow/gates.d.ts +0 -24
  354. package/dist/workflow/gates.d.ts.map +0 -1
  355. package/dist/workflow/gates.js +0 -34
  356. package/dist/workflow/gates.js.map +0 -1
  357. package/dist/workflow/hooks/advance-step.d.ts +0 -2
  358. package/dist/workflow/hooks/advance-step.d.ts.map +0 -1
  359. package/dist/workflow/hooks/advance-step.js +0 -51
  360. package/dist/workflow/hooks/advance-step.js.map +0 -1
  361. package/dist/workflow/hooks/current-step.d.ts +0 -2
  362. package/dist/workflow/hooks/current-step.d.ts.map +0 -1
  363. package/dist/workflow/hooks/current-step.js +0 -24
  364. package/dist/workflow/hooks/current-step.js.map +0 -1
  365. package/dist/workflow/hooks/index.d.ts +0 -4
  366. package/dist/workflow/hooks/index.d.ts.map +0 -1
  367. package/dist/workflow/hooks/index.js +0 -10
  368. package/dist/workflow/hooks/index.js.map +0 -1
  369. package/dist/workflow/hooks/ready-phases.d.ts +0 -2
  370. package/dist/workflow/hooks/ready-phases.d.ts.map +0 -1
  371. package/dist/workflow/hooks/ready-phases.js +0 -15
  372. package/dist/workflow/hooks/ready-phases.js.map +0 -1
  373. package/dist/workflow/index.d.ts +0 -8
  374. package/dist/workflow/index.d.ts.map +0 -1
  375. package/dist/workflow/index.js +0 -6
  376. package/dist/workflow/index.js.map +0 -1
  377. package/dist/workflow/phase.d.ts +0 -16
  378. package/dist/workflow/phase.d.ts.map +0 -1
  379. package/dist/workflow/phase.js +0 -22
  380. package/dist/workflow/phase.js.map +0 -1
  381. package/dist/workflow/steps.d.ts +0 -15
  382. package/dist/workflow/steps.d.ts.map +0 -1
  383. package/dist/workflow/steps.js +0 -32
  384. package/dist/workflow/steps.js.map +0 -1
@@ -1,7 +1,9 @@
1
1
  import { resolveProjectRoot } from "@g3nomaly/core/config";
2
2
  import type { G3nConfig } from "@g3nomaly/core/config";
3
- import type { EntrySource, InstallTarget } from "@g3nomaly/core/cli";
4
- import type { SkillRegistry } from "../registry/types";
3
+ import type { InstallCommandContext, ManifestTarget } from "@g3nomaly/core/cli";
4
+ import type { SourceRegistry } from "@g3nomaly/core/installer";
5
+ import type { RegisteredSource } from "@g3nomaly/core/sources";
6
+ import type { SkillMeta, SkillRegistry } from "../registry/types";
5
7
  /** Injection point for tests; the real project root comes from git discovery. */
6
8
  export interface ProjectDeps {
7
9
  resolveProjectRoot?: typeof resolveProjectRoot;
@@ -11,20 +13,21 @@ export declare function openSkillProject(deps?: ProjectDeps): Promise<{
11
13
  projectRoot: string;
12
14
  config: G3nConfig;
13
15
  }>;
14
- export declare function skillRegistry(): Promise<SkillRegistry>;
15
- /** One install target per configured harness, narrowed to `only` when given. */
16
- export declare function skillTargets(config: G3nConfig, projectRoot: string, only?: string[]): Promise<InstallTarget[]>;
16
+ /** One target per configured harness, narrowed to `only` when given; exits on an unreadable `skills.json`. */
17
+ export declare function skillTargets(config: G3nConfig, projectRoot: string, only?: string[]): ManifestTarget[];
18
+ /** Built-in sources plus those registered in any of the targets' `skills.json`. */
19
+ export declare function skillSources(targets: readonly ManifestTarget[]): RegisteredSource[];
20
+ /** Installed skills of one target. */
21
+ export declare function installedSkills(target: ManifestTarget): SkillRegistry;
22
+ /** What the core install and source commands print and check for skills. */
23
+ export declare const SKILL_CONTEXT: InstallCommandContext<SkillMeta>;
17
24
  /**
18
- * Expands group names to their skills and separates unknown keys. With
19
- * `withDependencies` each skill also pulls in its `registryDependencies`
20
- * closure; `notes` says which skill required each pulled-in key. When a key
21
- * names both a group and a skill, the group wins unless `skillFirst` is set
22
- * (remote plugins often carry a skill named like the plugin itself).
25
+ * Reads the skills of the targets' sources, or only those of `only`, and
26
+ * prints what could not be read; the caller disposes the result.
27
+ *
28
+ * @param only - Source name to read alone; exits when no such source is registered
23
29
  */
24
- export declare function resolveSkillKeys(keys: string[], registry: SkillRegistry, withDependencies?: boolean, skillFirst?: boolean): {
25
- resolved: string[];
26
- unknown: string[];
27
- notes: Record<string, string>;
28
- };
29
- export declare const skillSource: EntrySource;
30
+ export declare function openSkillRegistry(targets: readonly ManifestTarget[], projectRoot: string, only?: string): Promise<SourceRegistry<SkillMeta>>;
31
+ /** Installs the packages of the given skills in one target and prints each failure; sets exit code 1 on any. */
32
+ export declare function installPackagesReporting(target: ManifestTarget, keys: readonly string[]): Promise<void>;
30
33
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAAC,EAAE,OAAO,kBAAkB,CAAC;CAChD;AAED,8FAA8F;AAC9F,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,CAOlH;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAE5D;AAED,gFAAgF;AAChF,wBAAsB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAgBpH;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,aAAa,EACvB,gBAAgB,UAAQ,EACxB,UAAU,UAAQ,GACjB;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAgC1E;AAED,eAAO,MAAM,WAAW,EAAE,WAGzB,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlE,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAAC,EAAE,OAAO,kBAAkB,CAAC;CAChD;AAED,8FAA8F;AAC9F,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,CAOlH;AAED,8GAA8G;AAC9G,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAWtG;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAEnF;AAED,sCAAsC;AACtC,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAErE;AAED,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAsE,CAAC;AAElI;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAIlJ;AAED,gHAAgH;AAChH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7G"}
@@ -1,86 +1,62 @@
1
1
  // packages/skills/src/cli/adapter.ts
2
2
  import path from "node:path";
3
- import { collectDependencies, entries } from "@g3nomaly/core/registry";
4
- import { copySource } from "@g3nomaly/core/installer";
5
3
  import { SkillTargetSchema, loadConfig, resolveProjectRoot } from "@g3nomaly/core/config";
6
- import { lineError } from "@g3nomaly/core/cli";
7
- import { loadPackageRegistry, resolveSkillSourcePath } from "../registry/loadPackageRegistry";
8
- import { loadUserManifest } from "../registry/userManifest";
4
+ import { c, lineError, narrowSources, orExit, reportSourceRegistry } from "@g3nomaly/core/cli";
5
+ import { installedEntries, loadInstallManifest, loadSourceRegistry, manifestSources } from "@g3nomaly/core/installer";
6
+ import { skillsManifestPath } from "../registry/manifest";
7
+ import { readSkillSource } from "../registry/readSource";
9
8
  import { SkillMetaSchema } from "../registry/types";
9
+ import { installSkillPackages } from "../packages/install";
10
+ import { BUILTIN_SOURCES } from "../sources/builtins";
10
11
  /** Anchors the command to the git project and loads its config; exits when outside a repo. */
11
12
  export async function openSkillProject(deps = {}) {
12
13
  const projectRoot = (deps.resolveProjectRoot ?? resolveProjectRoot)();
13
14
  if (projectRoot === null) {
14
- console.error(lineError("No g3n project found — run `g3n-skills init` inside a git repository."));
15
+ console.error(lineError("No g3n project found: run `g3n-skills init` inside a git repository."));
15
16
  process.exit(1);
16
17
  }
17
18
  return { projectRoot, config: await loadConfig(projectRoot) };
18
19
  }
19
- export async function skillRegistry() {
20
- return entries(await loadPackageRegistry());
21
- }
22
- /** One install target per configured harness, narrowed to `only` when given. */
23
- export async function skillTargets(config, projectRoot, only) {
20
+ /** One target per configured harness, narrowed to `only` when given; exits on an unreadable `skills.json`. */
21
+ export function skillTargets(config, projectRoot, only) {
24
22
  const settings = config.skills.settings;
25
23
  const wanted = only === undefined || only.length === 0
26
24
  ? settings.targets
27
25
  : only.map((t) => SkillTargetSchema.parse(t));
28
- const targets = [];
29
- for (const target of wanted) {
26
+ return wanted.map((target) => {
30
27
  const installDir = settings.installDirs[target];
31
- targets.push({
32
- label: target,
33
- installDir: path.join(projectRoot, installDir),
34
- store: await loadUserManifest(projectRoot, installDir),
35
- });
36
- }
37
- return targets;
28
+ const manifest = orExit(() => loadInstallManifest(skillsManifestPath(projectRoot, installDir), SkillMetaSchema));
29
+ return { label: target, installDir: path.join(projectRoot, installDir), store: manifest.store, manifest };
30
+ });
31
+ }
32
+ /** Built-in sources plus those registered in any of the targets' `skills.json`. */
33
+ export function skillSources(targets) {
34
+ return manifestSources(targets.map((t) => t.manifest), BUILTIN_SOURCES);
38
35
  }
36
+ /** Installed skills of one target. */
37
+ export function installedSkills(target) {
38
+ return installedEntries(target.manifest, SkillMetaSchema);
39
+ }
40
+ /** What the core install and source commands print and check for skills. */
41
+ export const SKILL_CONTEXT = { bin: "g3n-skills", noun: "skill", entrySchema: SkillMetaSchema };
39
42
  /**
40
- * Expands group names to their skills and separates unknown keys. With
41
- * `withDependencies` each skill also pulls in its `registryDependencies`
42
- * closure; `notes` says which skill required each pulled-in key. When a key
43
- * names both a group and a skill, the group wins unless `skillFirst` is set
44
- * (remote plugins often carry a skill named like the plugin itself).
43
+ * Reads the skills of the targets' sources, or only those of `only`, and
44
+ * prints what could not be read; the caller disposes the result.
45
+ *
46
+ * @param only - Source name to read alone; exits when no such source is registered
45
47
  */
46
- export function resolveSkillKeys(keys, registry, withDependencies = false, skillFirst = false) {
47
- const groups = {};
48
- for (const [key, meta] of Object.entries(registry))
49
- (groups[meta.group] ??= []).push(key);
50
- const named = [];
51
- const unknown = [];
52
- const notes = {};
53
- for (const raw of keys) {
54
- const key = raw.toLowerCase();
55
- const group = groups[key];
56
- if (registry[key] && (skillFirst || group === undefined)) {
57
- named.push(key);
58
- if (group !== undefined)
59
- notes[key] = `also a plugin name — picked the single skill; name the plugin's other skills to add more`;
60
- }
61
- else if (group !== undefined) {
62
- named.push(...group);
63
- }
64
- else {
65
- unknown.push(key);
66
- }
67
- }
68
- if (!withDependencies)
69
- return { resolved: [...new Set(named)], unknown, notes };
70
- const resolved = [];
71
- for (const key of new Set(named)) {
72
- const closure = new Set();
73
- collectDependencies(key, registry, closure, unknown);
74
- for (const dep of closure) {
75
- if (!named.includes(dep) && notes[dep] === undefined)
76
- notes[dep] = `dep of ${key}`;
77
- resolved.push(dep);
78
- }
48
+ export async function openSkillRegistry(targets, projectRoot, only) {
49
+ const registry = await loadSourceRegistry(narrowSources(skillSources(targets), only, "g3n-skills"), projectRoot, readSkillSource);
50
+ reportSourceRegistry(registry);
51
+ return registry;
52
+ }
53
+ /** Installs the packages of the given skills in one target and prints each failure; sets exit code 1 on any. */
54
+ export async function installPackagesReporting(target, keys) {
55
+ for (const result of await installSkillPackages(target.installDir, keys)) {
56
+ if (result.error === undefined)
57
+ continue;
58
+ console.error(lineError(`${c.key(result.key)} (${c.target(target.label)}): its packages could not be installed, so its hooks will not run: ${result.error}`));
59
+ process.exitCode = 1;
79
60
  }
80
- return { resolved: [...new Set(resolved)], unknown: [...new Set(unknown)], notes };
81
61
  }
82
- export const skillSource = (entry) => {
83
- const { group } = SkillMetaSchema.pick({ group: true }).parse(entry);
84
- return copySource((filePath) => resolveSkillSourcePath(group, filePath));
85
- };
86
62
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE1F,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/F,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGtH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAI,GAAgB,EAAE;IAC3D,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,EAAE,CAAC;IACtE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,sEAAsE,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,YAAY,CAAC,MAAiB,EAAE,WAAmB,EAAE,IAAe;IAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IACxC,MAAM,MAAM,GAAK,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QACtD,CAAC,CAAC,QAAQ,CAAC,OAAO;QAClB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAK,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;QACnH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5G,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,OAAkC;IAC7D,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC;AAC1E,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,OAAO,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC5D,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,aAAa,GAAqC,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAElI;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkC,EAAE,WAAmB,EAAE,IAAa;IAC5G,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAClI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gHAAgH;AAChH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAsB,EAAE,IAAuB;IAC5F,KAAK,MAAM,MAAM,IAAI,MAAM,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;QACzE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,SAAS;QACzC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9J,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -1,17 +1,14 @@
1
- import type { Dialogue, InstallInput, InstallOptions } from "@g3nomaly/core/cli";
1
+ import type { InstallOptions } from "@g3nomaly/core/cli";
2
2
  import type { ProjectDeps } from "../adapter";
3
3
  export interface AddOptions extends InstallOptions {
4
4
  targets?: string[];
5
- /** Git URL of a plugin or marketplace repository to install from instead of the package */
6
- remote?: string;
7
5
  }
8
- export declare const noValueDialogue: Dialogue<InstallInput>;
9
- export declare const entryNotFoundDialogue: Dialogue<InstallInput>;
10
- export declare const collisionDialogue: Dialogue<InstallInput>;
11
6
  /**
12
- * Installs skills (or whole groups) into every configured target. With
13
- * `--remote` the registry comes from a cloned plugin repository instead of
14
- * the package; dependency resolution is off there.
7
+ * Installs skills or whole groups from the registered sources into every
8
+ * configured target, each with the skills it depends on from any source, and
9
+ * installs the packages of the skills that ship a `package.json`. A name more
10
+ * than one source offers is picked as `<name>@<source>`; with no names the
11
+ * user picks from what the sources offer.
15
12
  */
16
- export declare function addCommand(keys: string[], options?: AddOptions, deps?: ProjectDeps): Promise<void>;
13
+ export declare function addCommand(names: string[], options?: AddOptions, deps?: ProjectDeps): Promise<void>;
17
14
  //# sourceMappingURL=add.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAe,YAAY,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAC;AAO7G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,YAAY,CAQlD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAQxD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAWpD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BhH"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CASjH"}
@@ -1,108 +1,22 @@
1
1
  // packages/skills/src/cli/commands/add.ts
2
- import { addEntries, runDialogueValue, ConflictDecision, StepKind, c, lineError, lineInfo, lineWarn } from "@g3nomaly/core/cli";
3
- import { saveUserManifest } from "../../registry/userManifest";
4
- import { cloneRemote, removeCheckout } from "../../remote/fetch";
5
- import { loadRemoteRegistry, remoteSkillSource } from "../../remote/registry";
6
- import { openSkillProject, resolveSkillKeys, skillRegistry, skillSource, skillTargets } from "../adapter";
7
- export const noValueDialogue = {
8
- steps: {
9
- selectSkills: {
10
- kind: StepKind.MultiSelect,
11
- message: "Select skills to install:",
12
- choices: (input) => input.keyChoices ?? [],
13
- },
14
- },
15
- };
16
- export const entryNotFoundDialogue = {
17
- steps: {
18
- entryNotFound: {
19
- kind: StepKind.Confirm,
20
- message: "Unknown skill(s): {unknown}. Continue with the remaining selection?",
21
- initial: false,
22
- },
23
- },
24
- };
25
- export const collisionDialogue = {
26
- steps: {
27
- conflict: {
28
- kind: StepKind.Select,
29
- message: "{key} ({target}) has local changes. What would you like to do?",
30
- choices: [
31
- { value: ConflictDecision.Keep, label: "Keep my changes — skip modified files" },
32
- { value: ConflictDecision.Overwrite, label: "Overwrite with the package version" },
33
- ],
34
- },
35
- },
36
- };
2
+ import { addFromSources } from "@g3nomaly/core/cli";
3
+ import { SKILL_CONTEXT, installPackagesReporting, openSkillProject, openSkillRegistry, skillTargets } from "../adapter";
37
4
  /**
38
- * Installs skills (or whole groups) into every configured target. With
39
- * `--remote` the registry comes from a cloned plugin repository instead of
40
- * the package; dependency resolution is off there.
5
+ * Installs skills or whole groups from the registered sources into every
6
+ * configured target, each with the skills it depends on from any source, and
7
+ * installs the packages of the skills that ship a `package.json`. A name more
8
+ * than one source offers is picked as `<name>@<source>`; with no names the
9
+ * user picks from what the sources offer.
41
10
  */
42
- export async function addCommand(keys, options = {}, deps = {}) {
11
+ export async function addCommand(names, options = {}, deps = {}) {
43
12
  const { projectRoot, config } = await openSkillProject(deps);
44
- const targets = await skillTargets(config, projectRoot, options.targets);
45
- if (options.remote === undefined) {
46
- const registry = await skillRegistry();
47
- await installSkills(keys, registry, skillSource, targets, options, {
48
- withDependencies: true,
49
- skillFirst: false,
50
- unknownHint: `Run ${c.cmd("g3n-skills ls")} to see what is available.`,
51
- });
52
- return;
53
- }
54
- const checkout = await cloneRemoteOrExit(options.remote);
13
+ const targets = skillTargets(config, projectRoot, options.targets);
14
+ const registry = await openSkillRegistry(targets, projectRoot);
55
15
  try {
56
- const { registry, warnings } = await loadRemoteRegistryOrExit(checkout);
57
- for (const warning of warnings)
58
- console.log(lineWarn(warning));
59
- await installSkills(keys, registry, remoteSkillSource(checkout), targets, options, {
60
- withDependencies: false,
61
- skillFirst: true,
62
- unknownHint: `The repository provides: ${Object.keys(registry).map((k) => c.key(k)).join(", ")}.`,
63
- });
16
+ await addFromSources(targets, names, registry, options, SKILL_CONTEXT, installPackagesReporting);
64
17
  }
65
18
  finally {
66
- removeCheckout(checkout);
67
- }
68
- }
69
- async function installSkills(keys, registry, source, targets, options, plan) {
70
- const { resolved, unknown, notes } = resolveSkillKeys(keys, registry, plan.withDependencies, plan.skillFirst);
71
- if (unknown.length > 0) {
72
- console.error(lineError(`Unknown skill(s): ${unknown.map((k) => c.key(k)).join(", ")}. ${plan.unknownHint}`));
73
- const proceed = resolved.length > 0
74
- && (await runDialogueValue(entryNotFoundDialogue, { unknown: unknown.map((k) => c.key(k)).join(", ") }, options.answers)) === true;
75
- if (!proceed)
76
- process.exit(1);
77
- }
78
- for (const [dep, why] of Object.entries(notes))
79
- console.log(lineInfo(`${c.key(dep)} — ${why}`));
80
- await addEntries(registry, targets, source, resolved, options, {
81
- onNoValue: noValueDialogue,
82
- onCollision: collisionDialogue,
83
- });
84
- for (const target of targets)
85
- saveUserManifest(target.store);
86
- }
87
- async function cloneRemoteOrExit(url) {
88
- try {
89
- return await cloneRemote(url);
19
+ registry.dispose();
90
20
  }
91
- catch (error) {
92
- console.error(lineError(`Could not fetch ${c.key(url)} — ${errorMessage(error)}`));
93
- process.exit(1);
94
- }
95
- }
96
- async function loadRemoteRegistryOrExit(checkout) {
97
- try {
98
- return await loadRemoteRegistry(checkout);
99
- }
100
- catch (error) {
101
- console.error(lineError(`${c.key(checkout.url)} — ${errorMessage(error)}`));
102
- process.exit(1);
103
- }
104
- }
105
- function errorMessage(error) {
106
- return error instanceof Error ? error.message : String(error);
107
21
  }
108
22
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAOxH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAe,EAAE,OAAO,GAAe,EAAE,EAAE,IAAI,GAAgB,EAAE;IAChG,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAI,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,wBAAwB,CAAC,CAAC;IACnG,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -1,4 +1,11 @@
1
1
  import type { LSOptions } from "@g3nomaly/core/cli";
2
- /** Lists skills available in the package, grouped by plugin. */
3
- export declare function lsCommand(options?: LSOptions): Promise<void>;
2
+ import type { ProjectDeps } from "../adapter";
3
+ export interface LsOptions extends LSOptions {
4
+ /** List what `skills.json` records instead of what the sources offer */
5
+ installed?: boolean;
6
+ /** Only the skills of this registered source */
7
+ source?: string;
8
+ }
9
+ /** Lists the skills the registered sources offer, `●` marking installed ones, or with `installed` only what is installed. */
10
+ export declare function lsCommand(options?: LsOptions, deps?: ProjectDeps): Promise<void>;
4
11
  //# sourceMappingURL=ls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ls.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,gEAAgE;AAChE,wBAAsB,SAAS,CAAC,OAAO,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
1
+ {"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ls.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,MAAM,CAAC,EAAK,MAAM,CAAC;CACpB;AAED,6HAA6H;AAC7H,wBAAsB,SAAS,CAAC,OAAO,GAAE,SAAc,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9F"}
@@ -1,8 +1,24 @@
1
1
  // packages/skills/src/cli/commands/ls.ts
2
- import { lsEntries } from "@g3nomaly/core/cli";
3
- import { skillRegistry } from "../adapter";
4
- /** Lists skills available in the package, grouped by plugin. */
5
- export async function lsCommand(options = {}) {
6
- lsEntries(await skillRegistry(), options);
2
+ import { lsEntries, lsSourceRegistry } from "@g3nomaly/core/cli";
3
+ import { installedSkills, openSkillProject, openSkillRegistry, skillSources, skillTargets } from "../adapter";
4
+ /** Lists the skills the registered sources offer, `●` marking installed ones, or with `installed` only what is installed. */
5
+ export async function lsCommand(options = {}, deps = {}) {
6
+ const { projectRoot, config } = await openSkillProject(deps);
7
+ const targets = skillTargets(config, projectRoot);
8
+ const installed = {};
9
+ for (const target of targets)
10
+ for (const [key, entry] of Object.entries(installedSkills(target)))
11
+ installed[key] ??= entry;
12
+ if (options.installed === true) {
13
+ lsEntries(installed, options);
14
+ return;
15
+ }
16
+ const registry = await openSkillRegistry(targets, projectRoot, options.source);
17
+ try {
18
+ lsSourceRegistry(registry, skillSources(targets), installed, options);
19
+ }
20
+ finally {
21
+ registry.dispose();
22
+ }
7
23
  }
8
24
  //# sourceMappingURL=ls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/cli/commands/ls.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAO,GAAc,EAAE;IACrD,SAAS,CAAC,MAAM,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/cli/commands/ls.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU9G,6HAA6H;AAC7H,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAO,GAAc,EAAE,EAAE,IAAI,GAAgB,EAAE;IAC7E,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAK,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;IAE3H,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC/B,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,CAAC;QACH,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -1,12 +1,12 @@
1
- import type { Dialogue, InstallInput, InstallOptions } from "@g3nomaly/core/cli";
1
+ import type { InstallOptions } from "@g3nomaly/core/cli";
2
2
  import type { ProjectDeps } from "../adapter";
3
3
  export interface RemoveOptions extends InstallOptions {
4
4
  targets?: string[];
5
5
  }
6
- export declare const noValueDialogue: Dialogue<InstallInput>;
7
- export declare const cascadeDialogue: Dialogue<InstallInput>;
8
- export declare const collisionDialogue: Dialogue<InstallInput>;
9
- export declare const incompleteDialogue: Dialogue<InstallInput>;
10
- /** Removes installed skills and drops them from each target's `skills.json`. */
11
- export declare function removeCommand(keys: string[], options?: RemoveOptions, deps?: ProjectDeps): Promise<void>;
6
+ /**
7
+ * Removes installed skills, hooks included, with the packages installed into
8
+ * them, and drops them from each target's `skills.json`. Works from the
9
+ * manifests alone; installed dependents are offered for removal too.
10
+ */
11
+ export declare function removeCommand(names: string[], options?: RemoveOptions, deps?: ProjectDeps): Promise<void>;
12
12
  //# sourceMappingURL=remove.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,YAAY,CAQlD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,YAAY,CAQlD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAWpD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,YAAY,CAQrD,CAAC;AAEF,gFAAgF;AAChF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtH"}
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvH"}
@@ -1,60 +1,15 @@
1
1
  // packages/skills/src/cli/commands/remove.ts
2
- import { removeEntries, ConflictDecision, StepKind } from "@g3nomaly/core/cli";
3
- import { saveUserManifest } from "../../registry/userManifest";
4
- import { openSkillProject, resolveSkillKeys, skillRegistry, skillTargets } from "../adapter";
5
- export const noValueDialogue = {
6
- steps: {
7
- selectSkills: {
8
- kind: StepKind.MultiSelect,
9
- message: "Select skills to remove:",
10
- choices: (input) => input.keyChoices ?? [],
11
- },
12
- },
13
- };
14
- export const cascadeDialogue = {
15
- steps: {
16
- cascade: {
17
- kind: StepKind.Confirm,
18
- message: "Also remove {dependents}?",
19
- initial: true,
20
- },
21
- },
22
- };
23
- export const collisionDialogue = {
24
- steps: {
25
- conflict: {
26
- kind: StepKind.Select,
27
- message: "{key} ({target}) has local changes. What would you like to do?",
28
- choices: [
29
- { value: ConflictDecision.Keep, label: "Keep the skill — remove nothing" },
30
- { value: ConflictDecision.Overwrite, label: "Remove it anyway, including my changes" },
31
- ],
32
- },
33
- },
34
- };
35
- export const incompleteDialogue = {
36
- steps: {
37
- incomplete: {
38
- kind: StepKind.Confirm,
39
- message: "{key} ({target}) is missing {missing} on disk. Remove the rest and untrack it?",
40
- initial: true,
41
- },
42
- },
43
- };
44
- /** Removes installed skills and drops them from each target's `skills.json`. */
45
- export async function removeCommand(keys, options = {}, deps = {}) {
2
+ import { removeFromTargets } from "@g3nomaly/core/cli";
3
+ import { removeSkillPackages } from "../../packages/install";
4
+ import { SKILL_CONTEXT, openSkillProject, skillTargets } from "../adapter";
5
+ /**
6
+ * Removes installed skills, hooks included, with the packages installed into
7
+ * them, and drops them from each target's `skills.json`. Works from the
8
+ * manifests alone; installed dependents are offered for removal too.
9
+ */
10
+ export async function removeCommand(names, options = {}, deps = {}) {
46
11
  const { projectRoot, config } = await openSkillProject(deps);
47
- const registry = await skillRegistry();
48
- const targets = await skillTargets(config, projectRoot, options.targets);
49
- // Unknown keys stay in the list so the command reports them as "not installed".
50
- const { resolved, unknown } = resolveSkillKeys(keys, registry);
51
- await removeEntries(registry, targets, [...resolved, ...unknown], options, {
52
- onNoValue: noValueDialogue,
53
- onCascade: cascadeDialogue,
54
- onCollision: collisionDialogue,
55
- onIncomplete: incompleteDialogue,
56
- });
57
- for (const target of targets)
58
- saveUserManifest(target.store);
12
+ const targets = skillTargets(config, projectRoot, options.targets);
13
+ await removeFromTargets(targets, names, options, SKILL_CONTEXT, (target, removed) => removeSkillPackages(target.installDir, removed));
59
14
  }
60
15
  //# sourceMappingURL=remove.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO7F,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,KAAK,EAAE;QACL,YAAY,EAAE;YACZ,IAAI,EAAK,QAAQ,CAAC,WAAW;YAC7B,OAAO,EAAE,0BAA0B;YACnC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;SAC3C;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,KAAK,EAAE;QACL,OAAO,EAAE;YACP,IAAI,EAAK,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,2BAA2B;YACpC,OAAO,EAAE,IAAI;SACd;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,KAAK,EAAE;QACL,QAAQ,EAAE;YACR,IAAI,EAAK,QAAQ,CAAC,MAAM;YACxB,OAAO,EAAE,gEAAgE;YACzE,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAO,KAAK,EAAE,iCAAiC,EAAE;gBAC/E,EAAE,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,wCAAwC,EAAE;aACvF;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,KAAK,EAAE;QACL,UAAU,EAAE;YACV,IAAI,EAAK,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,gFAAgF;YACzF,OAAO,EAAE,IAAI;SACd;KACF;CACF,CAAC;AAEF,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc,EAAE,OAAO,GAAkB,EAAE,EAAE,IAAI,GAAgB,EAAE;IACrG,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;IACvC,MAAM,OAAO,GAAI,MAAM,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1E,gFAAgF;IAChF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE/D,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,EAAE;QACzE,SAAS,EAAK,eAAe;QAC7B,SAAS,EAAK,eAAe;QAC7B,WAAW,EAAG,iBAAiB;QAC/B,YAAY,EAAE,kBAAkB;KACjC,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO3E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAe,EAAE,OAAO,GAAkB,EAAE,EAAE,IAAI,GAAgB,EAAE;IACtG,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AACxI,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { ProjectDeps } from "../adapter";
2
+ export interface SourceAddOptions {
3
+ /** Name to register under; derived from the source when absent */
4
+ name?: string;
5
+ /** Branch or tag a git source is pinned to */
6
+ ref?: string;
7
+ targets?: string[];
8
+ }
9
+ export interface SourceLsOptions {
10
+ json?: boolean;
11
+ targets?: string[];
12
+ }
13
+ export interface SourceRemoveOptions {
14
+ /** Unregister even when installed skills came from the source */
15
+ force?: boolean;
16
+ targets?: string[];
17
+ }
18
+ /**
19
+ * Registers a git repository, npm package or local folder as a skill source
20
+ * in every target's `skills.json`, after checking it offers at least one skill.
21
+ *
22
+ * @param input - The source as typed, e.g. `owner/repo`, `npm:@scope/skills` or `./my-skills`
23
+ */
24
+ export declare function sourceAddCommand(input: string, options?: SourceAddOptions, deps?: ProjectDeps): Promise<void>;
25
+ /** Lists each target's sources, built-in ones first, with how many installed skills came from each. */
26
+ export declare function sourceLsCommand(options?: SourceLsOptions, deps?: ProjectDeps): Promise<void>;
27
+ /** Unregisters a source from every target; refused for built-in sources and, unless forced, while skills came from it. */
28
+ export declare function sourceRemoveCommand(name: string, options?: SourceRemoveOptions, deps?: ProjectDeps): Promise<void>;
29
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/source.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,IAAI,CAAC,EAAK,MAAM,CAAC;IACjB,8CAA8C;IAC9C,GAAG,CAAC,EAAM,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAK,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,KAAK,CAAC,EAAI,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAOD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3H;AAED,uGAAuG;AACvG,wBAAsB,eAAe,CAAC,OAAO,GAAE,eAAoB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1G;AAED,0HAA0H;AAC1H,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhI"}