@swarmify/agents-cli 1.13.3 → 1.14.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 (567) hide show
  1. package/README.md +2 -319
  2. package/bin/agents.js +2 -0
  3. package/package.json +13 -79
  4. package/scripts/postinstall.js +4 -71
  5. package/CHANGELOG.md +0 -316
  6. package/LICENSE +0 -21
  7. package/dist/commands/__tests__/sessions-tail.test.d.ts +0 -2
  8. package/dist/commands/__tests__/sessions-tail.test.d.ts.map +0 -1
  9. package/dist/commands/__tests__/sessions-tail.test.js +0 -108
  10. package/dist/commands/__tests__/sessions-tail.test.js.map +0 -1
  11. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  12. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  13. package/dist/commands/__tests__/sessions.test.js +0 -636
  14. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  15. package/dist/commands/cloud.d.ts +0 -11
  16. package/dist/commands/cloud.d.ts.map +0 -1
  17. package/dist/commands/cloud.js +0 -363
  18. package/dist/commands/cloud.js.map +0 -1
  19. package/dist/commands/commands.d.ts +0 -12
  20. package/dist/commands/commands.d.ts.map +0 -1
  21. package/dist/commands/commands.js +0 -629
  22. package/dist/commands/commands.js.map +0 -1
  23. package/dist/commands/daemon.d.ts +0 -11
  24. package/dist/commands/daemon.d.ts.map +0 -1
  25. package/dist/commands/daemon.js +0 -119
  26. package/dist/commands/daemon.js.map +0 -1
  27. package/dist/commands/drive.d.ts +0 -11
  28. package/dist/commands/drive.d.ts.map +0 -1
  29. package/dist/commands/drive.js +0 -175
  30. package/dist/commands/drive.js.map +0 -1
  31. package/dist/commands/exec.d.ts +0 -11
  32. package/dist/commands/exec.d.ts.map +0 -1
  33. package/dist/commands/exec.js +0 -251
  34. package/dist/commands/exec.js.map +0 -1
  35. package/dist/commands/factory.d.ts +0 -11
  36. package/dist/commands/factory.d.ts.map +0 -1
  37. package/dist/commands/factory.js +0 -445
  38. package/dist/commands/factory.js.map +0 -1
  39. package/dist/commands/fork.d.ts +0 -11
  40. package/dist/commands/fork.d.ts.map +0 -1
  41. package/dist/commands/fork.js +0 -147
  42. package/dist/commands/fork.js.map +0 -1
  43. package/dist/commands/hooks.d.ts +0 -12
  44. package/dist/commands/hooks.d.ts.map +0 -1
  45. package/dist/commands/hooks.js +0 -690
  46. package/dist/commands/hooks.js.map +0 -1
  47. package/dist/commands/init.d.ts +0 -15
  48. package/dist/commands/init.d.ts.map +0 -1
  49. package/dist/commands/init.js +0 -137
  50. package/dist/commands/init.js.map +0 -1
  51. package/dist/commands/mcp.d.ts +0 -12
  52. package/dist/commands/mcp.d.ts.map +0 -1
  53. package/dist/commands/mcp.js +0 -583
  54. package/dist/commands/mcp.js.map +0 -1
  55. package/dist/commands/models.d.ts +0 -11
  56. package/dist/commands/models.d.ts.map +0 -1
  57. package/dist/commands/models.js +0 -170
  58. package/dist/commands/models.js.map +0 -1
  59. package/dist/commands/packages.d.ts +0 -11
  60. package/dist/commands/packages.d.ts.map +0 -1
  61. package/dist/commands/packages.js +0 -551
  62. package/dist/commands/packages.js.map +0 -1
  63. package/dist/commands/permissions.d.ts +0 -12
  64. package/dist/commands/permissions.d.ts.map +0 -1
  65. package/dist/commands/permissions.js +0 -724
  66. package/dist/commands/permissions.js.map +0 -1
  67. package/dist/commands/plugins.d.ts +0 -11
  68. package/dist/commands/plugins.d.ts.map +0 -1
  69. package/dist/commands/plugins.js +0 -393
  70. package/dist/commands/plugins.js.map +0 -1
  71. package/dist/commands/profiles.d.ts +0 -12
  72. package/dist/commands/profiles.d.ts.map +0 -1
  73. package/dist/commands/profiles.js +0 -255
  74. package/dist/commands/profiles.js.map +0 -1
  75. package/dist/commands/pty.d.ts +0 -21
  76. package/dist/commands/pty.d.ts.map +0 -1
  77. package/dist/commands/pty.js +0 -391
  78. package/dist/commands/pty.js.map +0 -1
  79. package/dist/commands/pull.d.ts +0 -11
  80. package/dist/commands/pull.d.ts.map +0 -1
  81. package/dist/commands/pull.js +0 -456
  82. package/dist/commands/pull.js.map +0 -1
  83. package/dist/commands/push.d.ts +0 -11
  84. package/dist/commands/push.d.ts.map +0 -1
  85. package/dist/commands/push.js +0 -188
  86. package/dist/commands/push.js.map +0 -1
  87. package/dist/commands/refresh-memory.d.ts +0 -16
  88. package/dist/commands/refresh-memory.d.ts.map +0 -1
  89. package/dist/commands/refresh-memory.js +0 -52
  90. package/dist/commands/refresh-memory.js.map +0 -1
  91. package/dist/commands/resource-view.d.ts +0 -39
  92. package/dist/commands/resource-view.d.ts.map +0 -1
  93. package/dist/commands/resource-view.js +0 -197
  94. package/dist/commands/resource-view.js.map +0 -1
  95. package/dist/commands/routines.d.ts +0 -11
  96. package/dist/commands/routines.d.ts.map +0 -1
  97. package/dist/commands/routines.js +0 -590
  98. package/dist/commands/routines.js.map +0 -1
  99. package/dist/commands/rules.d.ts +0 -12
  100. package/dist/commands/rules.d.ts.map +0 -1
  101. package/dist/commands/rules.js +0 -489
  102. package/dist/commands/rules.js.map +0 -1
  103. package/dist/commands/secrets.d.ts +0 -11
  104. package/dist/commands/secrets.d.ts.map +0 -1
  105. package/dist/commands/secrets.js +0 -352
  106. package/dist/commands/secrets.js.map +0 -1
  107. package/dist/commands/sessions-picker.d.ts +0 -18
  108. package/dist/commands/sessions-picker.d.ts.map +0 -1
  109. package/dist/commands/sessions-picker.js +0 -265
  110. package/dist/commands/sessions-picker.js.map +0 -1
  111. package/dist/commands/sessions-tail.d.ts +0 -20
  112. package/dist/commands/sessions-tail.d.ts.map +0 -1
  113. package/dist/commands/sessions-tail.js +0 -236
  114. package/dist/commands/sessions-tail.js.map +0 -1
  115. package/dist/commands/sessions.d.ts +0 -18
  116. package/dist/commands/sessions.d.ts.map +0 -1
  117. package/dist/commands/sessions.js +0 -1173
  118. package/dist/commands/sessions.js.map +0 -1
  119. package/dist/commands/skills.d.ts +0 -12
  120. package/dist/commands/skills.d.ts.map +0 -1
  121. package/dist/commands/skills.js +0 -717
  122. package/dist/commands/skills.js.map +0 -1
  123. package/dist/commands/status.d.ts +0 -10
  124. package/dist/commands/status.d.ts.map +0 -1
  125. package/dist/commands/status.js +0 -26
  126. package/dist/commands/status.js.map +0 -1
  127. package/dist/commands/subagents.d.ts +0 -11
  128. package/dist/commands/subagents.d.ts.map +0 -1
  129. package/dist/commands/subagents.js +0 -361
  130. package/dist/commands/subagents.js.map +0 -1
  131. package/dist/commands/sync.d.ts +0 -11
  132. package/dist/commands/sync.d.ts.map +0 -1
  133. package/dist/commands/sync.js +0 -70
  134. package/dist/commands/sync.js.map +0 -1
  135. package/dist/commands/teams-picker.d.ts +0 -18
  136. package/dist/commands/teams-picker.d.ts.map +0 -1
  137. package/dist/commands/teams-picker.js +0 -290
  138. package/dist/commands/teams-picker.js.map +0 -1
  139. package/dist/commands/teams.d.ts +0 -18
  140. package/dist/commands/teams.d.ts.map +0 -1
  141. package/dist/commands/teams.js +0 -1144
  142. package/dist/commands/teams.js.map +0 -1
  143. package/dist/commands/utils.d.ts +0 -45
  144. package/dist/commands/utils.d.ts.map +0 -1
  145. package/dist/commands/utils.js +0 -106
  146. package/dist/commands/utils.js.map +0 -1
  147. package/dist/commands/versions.d.ts +0 -11
  148. package/dist/commands/versions.d.ts.map +0 -1
  149. package/dist/commands/versions.js +0 -701
  150. package/dist/commands/versions.js.map +0 -1
  151. package/dist/commands/view.d.ts +0 -43
  152. package/dist/commands/view.d.ts.map +0 -1
  153. package/dist/commands/view.js +0 -894
  154. package/dist/commands/view.js.map +0 -1
  155. package/dist/index.d.ts +0 -9
  156. package/dist/index.d.ts.map +0 -1
  157. package/dist/index.js +0 -496
  158. package/dist/index.js.map +0 -1
  159. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  160. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  161. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  162. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  163. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  164. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  165. package/dist/lib/__tests__/exec.test.js +0 -446
  166. package/dist/lib/__tests__/exec.test.js.map +0 -1
  167. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  168. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  169. package/dist/lib/__tests__/git-sync.test.js +0 -138
  170. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  171. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  172. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  173. package/dist/lib/__tests__/hooks.test.js +0 -203
  174. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  175. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  176. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  177. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  178. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  179. package/dist/lib/__tests__/models.test.d.ts +0 -2
  180. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  181. package/dist/lib/__tests__/models.test.js +0 -239
  182. package/dist/lib/__tests__/models.test.js.map +0 -1
  183. package/dist/lib/__tests__/rotate.test.d.ts +0 -2
  184. package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
  185. package/dist/lib/__tests__/rotate.test.js +0 -80
  186. package/dist/lib/__tests__/rotate.test.js.map +0 -1
  187. package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
  188. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
  189. package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
  190. package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
  191. package/dist/lib/__tests__/secrets.test.d.ts +0 -2
  192. package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
  193. package/dist/lib/__tests__/secrets.test.js +0 -90
  194. package/dist/lib/__tests__/secrets.test.js.map +0 -1
  195. package/dist/lib/__tests__/shims.test.d.ts +0 -2
  196. package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
  197. package/dist/lib/__tests__/shims.test.js +0 -57
  198. package/dist/lib/__tests__/shims.test.js.map +0 -1
  199. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  200. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  201. package/dist/lib/__tests__/usage.test.js +0 -220
  202. package/dist/lib/__tests__/usage.test.js.map +0 -1
  203. package/dist/lib/__tests__/versions.test.d.ts +0 -2
  204. package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
  205. package/dist/lib/__tests__/versions.test.js +0 -63
  206. package/dist/lib/__tests__/versions.test.js.map +0 -1
  207. package/dist/lib/agents.d.ts +0 -158
  208. package/dist/lib/agents.d.ts.map +0 -1
  209. package/dist/lib/agents.js +0 -1159
  210. package/dist/lib/agents.js.map +0 -1
  211. package/dist/lib/artifact-actions.d.ts +0 -27
  212. package/dist/lib/artifact-actions.d.ts.map +0 -1
  213. package/dist/lib/artifact-actions.js +0 -58
  214. package/dist/lib/artifact-actions.js.map +0 -1
  215. package/dist/lib/cloud/codex.d.ts +0 -26
  216. package/dist/lib/cloud/codex.d.ts.map +0 -1
  217. package/dist/lib/cloud/codex.js +0 -237
  218. package/dist/lib/cloud/codex.js.map +0 -1
  219. package/dist/lib/cloud/factory.d.ts +0 -32
  220. package/dist/lib/cloud/factory.d.ts.map +0 -1
  221. package/dist/lib/cloud/factory.js +0 -43
  222. package/dist/lib/cloud/factory.js.map +0 -1
  223. package/dist/lib/cloud/registry.d.ts +0 -16
  224. package/dist/lib/cloud/registry.d.ts.map +0 -1
  225. package/dist/lib/cloud/registry.js +0 -68
  226. package/dist/lib/cloud/registry.js.map +0 -1
  227. package/dist/lib/cloud/rush.d.ts +0 -37
  228. package/dist/lib/cloud/rush.d.ts.map +0 -1
  229. package/dist/lib/cloud/rush.js +0 -230
  230. package/dist/lib/cloud/rush.js.map +0 -1
  231. package/dist/lib/cloud/rush.test.d.ts +0 -2
  232. package/dist/lib/cloud/rush.test.d.ts.map +0 -1
  233. package/dist/lib/cloud/rush.test.js +0 -63
  234. package/dist/lib/cloud/rush.test.js.map +0 -1
  235. package/dist/lib/cloud/store.d.ts +0 -23
  236. package/dist/lib/cloud/store.d.ts.map +0 -1
  237. package/dist/lib/cloud/store.js +0 -116
  238. package/dist/lib/cloud/store.js.map +0 -1
  239. package/dist/lib/cloud/stream.d.ts +0 -24
  240. package/dist/lib/cloud/stream.d.ts.map +0 -1
  241. package/dist/lib/cloud/stream.js +0 -145
  242. package/dist/lib/cloud/stream.js.map +0 -1
  243. package/dist/lib/cloud/types.d.ts +0 -109
  244. package/dist/lib/cloud/types.d.ts.map +0 -1
  245. package/dist/lib/cloud/types.js +0 -33
  246. package/dist/lib/cloud/types.js.map +0 -1
  247. package/dist/lib/cloud/types.test.d.ts +0 -2
  248. package/dist/lib/cloud/types.test.d.ts.map +0 -1
  249. package/dist/lib/cloud/types.test.js +0 -41
  250. package/dist/lib/cloud/types.test.js.map +0 -1
  251. package/dist/lib/commands.d.ts +0 -141
  252. package/dist/lib/commands.d.ts.map +0 -1
  253. package/dist/lib/commands.js +0 -514
  254. package/dist/lib/commands.js.map +0 -1
  255. package/dist/lib/convert.d.ts +0 -21
  256. package/dist/lib/convert.d.ts.map +0 -1
  257. package/dist/lib/convert.js +0 -54
  258. package/dist/lib/convert.js.map +0 -1
  259. package/dist/lib/daemon.d.ts +0 -43
  260. package/dist/lib/daemon.d.ts.map +0 -1
  261. package/dist/lib/daemon.js +0 -332
  262. package/dist/lib/daemon.js.map +0 -1
  263. package/dist/lib/drive-sync.d.ts +0 -46
  264. package/dist/lib/drive-sync.d.ts.map +0 -1
  265. package/dist/lib/drive-sync.js +0 -209
  266. package/dist/lib/drive-sync.js.map +0 -1
  267. package/dist/lib/exec.d.ts +0 -101
  268. package/dist/lib/exec.d.ts.map +0 -1
  269. package/dist/lib/exec.js +0 -450
  270. package/dist/lib/exec.js.map +0 -1
  271. package/dist/lib/factory/__tests__/config.test.d.ts +0 -2
  272. package/dist/lib/factory/__tests__/config.test.d.ts.map +0 -1
  273. package/dist/lib/factory/__tests__/config.test.js +0 -128
  274. package/dist/lib/factory/__tests__/config.test.js.map +0 -1
  275. package/dist/lib/factory/config.d.ts +0 -49
  276. package/dist/lib/factory/config.d.ts.map +0 -1
  277. package/dist/lib/factory/config.js +0 -127
  278. package/dist/lib/factory/config.js.map +0 -1
  279. package/dist/lib/factory.d.ts +0 -57
  280. package/dist/lib/factory.d.ts.map +0 -1
  281. package/dist/lib/factory.js +0 -107
  282. package/dist/lib/factory.js.map +0 -1
  283. package/dist/lib/git.d.ts +0 -157
  284. package/dist/lib/git.d.ts.map +0 -1
  285. package/dist/lib/git.js +0 -647
  286. package/dist/lib/git.js.map +0 -1
  287. package/dist/lib/help.d.ts +0 -10
  288. package/dist/lib/help.d.ts.map +0 -1
  289. package/dist/lib/help.js +0 -66
  290. package/dist/lib/help.js.map +0 -1
  291. package/dist/lib/hooks.d.ts +0 -125
  292. package/dist/lib/hooks.d.ts.map +0 -1
  293. package/dist/lib/hooks.js +0 -846
  294. package/dist/lib/hooks.js.map +0 -1
  295. package/dist/lib/ledger/__tests__/local.test.d.ts +0 -2
  296. package/dist/lib/ledger/__tests__/local.test.d.ts.map +0 -1
  297. package/dist/lib/ledger/__tests__/local.test.js +0 -177
  298. package/dist/lib/ledger/__tests__/local.test.js.map +0 -1
  299. package/dist/lib/ledger/__tests__/sync.test.d.ts +0 -2
  300. package/dist/lib/ledger/__tests__/sync.test.d.ts.map +0 -1
  301. package/dist/lib/ledger/__tests__/sync.test.js +0 -117
  302. package/dist/lib/ledger/__tests__/sync.test.js.map +0 -1
  303. package/dist/lib/ledger/index.d.ts +0 -18
  304. package/dist/lib/ledger/index.d.ts.map +0 -1
  305. package/dist/lib/ledger/index.js +0 -32
  306. package/dist/lib/ledger/index.js.map +0 -1
  307. package/dist/lib/ledger/local.d.ts +0 -22
  308. package/dist/lib/ledger/local.d.ts.map +0 -1
  309. package/dist/lib/ledger/local.js +0 -333
  310. package/dist/lib/ledger/local.js.map +0 -1
  311. package/dist/lib/ledger/r2.d.ts +0 -41
  312. package/dist/lib/ledger/r2.d.ts.map +0 -1
  313. package/dist/lib/ledger/r2.js +0 -335
  314. package/dist/lib/ledger/r2.js.map +0 -1
  315. package/dist/lib/ledger/sync.d.ts +0 -33
  316. package/dist/lib/ledger/sync.d.ts.map +0 -1
  317. package/dist/lib/ledger/sync.js +0 -106
  318. package/dist/lib/ledger/sync.js.map +0 -1
  319. package/dist/lib/ledger/types.d.ts +0 -100
  320. package/dist/lib/ledger/types.d.ts.map +0 -1
  321. package/dist/lib/ledger/types.js +0 -21
  322. package/dist/lib/ledger/types.js.map +0 -1
  323. package/dist/lib/manifest.d.ts +0 -14
  324. package/dist/lib/manifest.d.ts.map +0 -1
  325. package/dist/lib/manifest.js +0 -48
  326. package/dist/lib/manifest.js.map +0 -1
  327. package/dist/lib/markdown.d.ts +0 -5
  328. package/dist/lib/markdown.d.ts.map +0 -1
  329. package/dist/lib/markdown.js +0 -17
  330. package/dist/lib/markdown.js.map +0 -1
  331. package/dist/lib/mcp.d.ts +0 -64
  332. package/dist/lib/mcp.d.ts.map +0 -1
  333. package/dist/lib/mcp.js +0 -327
  334. package/dist/lib/mcp.js.map +0 -1
  335. package/dist/lib/memory-compile.d.ts +0 -65
  336. package/dist/lib/memory-compile.d.ts.map +0 -1
  337. package/dist/lib/memory-compile.js +0 -174
  338. package/dist/lib/memory-compile.js.map +0 -1
  339. package/dist/lib/memory.d.ts +0 -64
  340. package/dist/lib/memory.d.ts.map +0 -1
  341. package/dist/lib/memory.js +0 -275
  342. package/dist/lib/memory.js.map +0 -1
  343. package/dist/lib/models.d.ts +0 -98
  344. package/dist/lib/models.d.ts.map +0 -1
  345. package/dist/lib/models.js +0 -728
  346. package/dist/lib/models.js.map +0 -1
  347. package/dist/lib/permissions.d.ts +0 -227
  348. package/dist/lib/permissions.d.ts.map +0 -1
  349. package/dist/lib/permissions.js +0 -1071
  350. package/dist/lib/permissions.js.map +0 -1
  351. package/dist/lib/picker.d.ts +0 -27
  352. package/dist/lib/picker.d.ts.map +0 -1
  353. package/dist/lib/picker.js +0 -110
  354. package/dist/lib/picker.js.map +0 -1
  355. package/dist/lib/plugins.d.ts +0 -80
  356. package/dist/lib/plugins.d.ts.map +0 -1
  357. package/dist/lib/plugins.js +0 -556
  358. package/dist/lib/plugins.js.map +0 -1
  359. package/dist/lib/profiles-keychain.d.ts +0 -11
  360. package/dist/lib/profiles-keychain.d.ts.map +0 -1
  361. package/dist/lib/profiles-keychain.js +0 -14
  362. package/dist/lib/profiles-keychain.js.map +0 -1
  363. package/dist/lib/profiles-presets.d.ts +0 -25
  364. package/dist/lib/profiles-presets.d.ts.map +0 -1
  365. package/dist/lib/profiles-presets.js +0 -104
  366. package/dist/lib/profiles-presets.js.map +0 -1
  367. package/dist/lib/profiles.d.ts +0 -70
  368. package/dist/lib/profiles.d.ts.map +0 -1
  369. package/dist/lib/profiles.js +0 -145
  370. package/dist/lib/profiles.js.map +0 -1
  371. package/dist/lib/pty-client.d.ts +0 -23
  372. package/dist/lib/pty-client.d.ts.map +0 -1
  373. package/dist/lib/pty-client.js +0 -181
  374. package/dist/lib/pty-client.js.map +0 -1
  375. package/dist/lib/pty-server.d.ts +0 -21
  376. package/dist/lib/pty-server.d.ts.map +0 -1
  377. package/dist/lib/pty-server.js +0 -427
  378. package/dist/lib/pty-server.js.map +0 -1
  379. package/dist/lib/registry.d.ts +0 -45
  380. package/dist/lib/registry.d.ts.map +0 -1
  381. package/dist/lib/registry.js +0 -220
  382. package/dist/lib/registry.js.map +0 -1
  383. package/dist/lib/resources.d.ts +0 -55
  384. package/dist/lib/resources.d.ts.map +0 -1
  385. package/dist/lib/resources.js +0 -103
  386. package/dist/lib/resources.js.map +0 -1
  387. package/dist/lib/rotate.d.ts +0 -58
  388. package/dist/lib/rotate.d.ts.map +0 -1
  389. package/dist/lib/rotate.js +0 -93
  390. package/dist/lib/rotate.js.map +0 -1
  391. package/dist/lib/routines.d.ts +0 -99
  392. package/dist/lib/routines.d.ts.map +0 -1
  393. package/dist/lib/routines.js +0 -352
  394. package/dist/lib/routines.js.map +0 -1
  395. package/dist/lib/runner.d.ts +0 -26
  396. package/dist/lib/runner.d.ts.map +0 -1
  397. package/dist/lib/runner.js +0 -325
  398. package/dist/lib/runner.js.map +0 -1
  399. package/dist/lib/sandbox.d.ts +0 -26
  400. package/dist/lib/sandbox.d.ts.map +0 -1
  401. package/dist/lib/sandbox.js +0 -218
  402. package/dist/lib/sandbox.js.map +0 -1
  403. package/dist/lib/scheduler.d.ts +0 -26
  404. package/dist/lib/scheduler.d.ts.map +0 -1
  405. package/dist/lib/scheduler.js +0 -77
  406. package/dist/lib/scheduler.js.map +0 -1
  407. package/dist/lib/secrets-bundles.d.ts +0 -38
  408. package/dist/lib/secrets-bundles.d.ts.map +0 -1
  409. package/dist/lib/secrets-bundles.js +0 -176
  410. package/dist/lib/secrets-bundles.js.map +0 -1
  411. package/dist/lib/secrets.d.ts +0 -53
  412. package/dist/lib/secrets.d.ts.map +0 -1
  413. package/dist/lib/secrets.js +0 -140
  414. package/dist/lib/secrets.js.map +0 -1
  415. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  416. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  417. package/dist/lib/session/__tests__/db.test.js +0 -54
  418. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  419. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  420. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  421. package/dist/lib/session/__tests__/discover.test.js +0 -63
  422. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  423. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  424. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  425. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  426. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  427. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  428. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  429. package/dist/lib/session/__tests__/render.test.js +0 -602
  430. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  431. package/dist/lib/session/active.d.ts +0 -44
  432. package/dist/lib/session/active.d.ts.map +0 -1
  433. package/dist/lib/session/active.js +0 -379
  434. package/dist/lib/session/active.js.map +0 -1
  435. package/dist/lib/session/artifacts.d.ts +0 -15
  436. package/dist/lib/session/artifacts.d.ts.map +0 -1
  437. package/dist/lib/session/artifacts.js +0 -86
  438. package/dist/lib/session/artifacts.js.map +0 -1
  439. package/dist/lib/session/db.d.ts +0 -140
  440. package/dist/lib/session/db.d.ts.map +0 -1
  441. package/dist/lib/session/db.js +0 -599
  442. package/dist/lib/session/db.js.map +0 -1
  443. package/dist/lib/session/discover.d.ts +0 -72
  444. package/dist/lib/session/discover.d.ts.map +0 -1
  445. package/dist/lib/session/discover.js +0 -1315
  446. package/dist/lib/session/discover.js.map +0 -1
  447. package/dist/lib/session/parse.d.ts +0 -34
  448. package/dist/lib/session/parse.d.ts.map +0 -1
  449. package/dist/lib/session/parse.js +0 -663
  450. package/dist/lib/session/parse.js.map +0 -1
  451. package/dist/lib/session/prompt.d.ts +0 -13
  452. package/dist/lib/session/prompt.d.ts.map +0 -1
  453. package/dist/lib/session/prompt.js +0 -79
  454. package/dist/lib/session/prompt.js.map +0 -1
  455. package/dist/lib/session/prompt.test.d.ts +0 -2
  456. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  457. package/dist/lib/session/prompt.test.js +0 -57
  458. package/dist/lib/session/prompt.test.js.map +0 -1
  459. package/dist/lib/session/render.d.ts +0 -103
  460. package/dist/lib/session/render.d.ts.map +0 -1
  461. package/dist/lib/session/render.js +0 -798
  462. package/dist/lib/session/render.js.map +0 -1
  463. package/dist/lib/session/team-filter.d.ts +0 -35
  464. package/dist/lib/session/team-filter.d.ts.map +0 -1
  465. package/dist/lib/session/team-filter.js +0 -75
  466. package/dist/lib/session/team-filter.js.map +0 -1
  467. package/dist/lib/session/team-filter.test.d.ts +0 -2
  468. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  469. package/dist/lib/session/team-filter.test.js +0 -157
  470. package/dist/lib/session/team-filter.test.js.map +0 -1
  471. package/dist/lib/session/types.d.ts +0 -84
  472. package/dist/lib/session/types.d.ts.map +0 -1
  473. package/dist/lib/session/types.js +0 -11
  474. package/dist/lib/session/types.js.map +0 -1
  475. package/dist/lib/shims.d.ts +0 -272
  476. package/dist/lib/shims.d.ts.map +0 -1
  477. package/dist/lib/shims.js +0 -1322
  478. package/dist/lib/shims.js.map +0 -1
  479. package/dist/lib/skills.d.ts +0 -142
  480. package/dist/lib/skills.d.ts.map +0 -1
  481. package/dist/lib/skills.js +0 -791
  482. package/dist/lib/skills.js.map +0 -1
  483. package/dist/lib/state.d.ts +0 -87
  484. package/dist/lib/state.d.ts.map +0 -1
  485. package/dist/lib/state.js +0 -333
  486. package/dist/lib/state.js.map +0 -1
  487. package/dist/lib/subagents.d.ts +0 -84
  488. package/dist/lib/subagents.d.ts.map +0 -1
  489. package/dist/lib/subagents.js +0 -410
  490. package/dist/lib/subagents.js.map +0 -1
  491. package/dist/lib/teams/__tests__/oracle.test.d.ts +0 -2
  492. package/dist/lib/teams/__tests__/oracle.test.d.ts.map +0 -1
  493. package/dist/lib/teams/__tests__/oracle.test.js +0 -89
  494. package/dist/lib/teams/__tests__/oracle.test.js.map +0 -1
  495. package/dist/lib/teams/__tests__/supervisor.test.d.ts +0 -2
  496. package/dist/lib/teams/__tests__/supervisor.test.d.ts.map +0 -1
  497. package/dist/lib/teams/__tests__/supervisor.test.js +0 -179
  498. package/dist/lib/teams/__tests__/supervisor.test.js.map +0 -1
  499. package/dist/lib/teams/agents.d.ts +0 -247
  500. package/dist/lib/teams/agents.d.ts.map +0 -1
  501. package/dist/lib/teams/agents.js +0 -1244
  502. package/dist/lib/teams/agents.js.map +0 -1
  503. package/dist/lib/teams/api.d.ts +0 -91
  504. package/dist/lib/teams/api.d.ts.map +0 -1
  505. package/dist/lib/teams/api.js +0 -239
  506. package/dist/lib/teams/api.js.map +0 -1
  507. package/dist/lib/teams/cloud.d.ts +0 -11
  508. package/dist/lib/teams/cloud.d.ts.map +0 -1
  509. package/dist/lib/teams/cloud.js +0 -169
  510. package/dist/lib/teams/cloud.js.map +0 -1
  511. package/dist/lib/teams/debug.d.ts +0 -8
  512. package/dist/lib/teams/debug.d.ts.map +0 -1
  513. package/dist/lib/teams/debug.js +0 -12
  514. package/dist/lib/teams/debug.js.map +0 -1
  515. package/dist/lib/teams/file_ops.d.ts +0 -13
  516. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  517. package/dist/lib/teams/file_ops.js +0 -66
  518. package/dist/lib/teams/file_ops.js.map +0 -1
  519. package/dist/lib/teams/index.d.ts +0 -16
  520. package/dist/lib/teams/index.d.ts.map +0 -1
  521. package/dist/lib/teams/index.js +0 -15
  522. package/dist/lib/teams/index.js.map +0 -1
  523. package/dist/lib/teams/oracle.d.ts +0 -20
  524. package/dist/lib/teams/oracle.d.ts.map +0 -1
  525. package/dist/lib/teams/oracle.js +0 -59
  526. package/dist/lib/teams/oracle.js.map +0 -1
  527. package/dist/lib/teams/parsers.d.ts +0 -9
  528. package/dist/lib/teams/parsers.d.ts.map +0 -1
  529. package/dist/lib/teams/parsers.js +0 -837
  530. package/dist/lib/teams/parsers.js.map +0 -1
  531. package/dist/lib/teams/persistence.d.ts +0 -43
  532. package/dist/lib/teams/persistence.d.ts.map +0 -1
  533. package/dist/lib/teams/persistence.js +0 -299
  534. package/dist/lib/teams/persistence.js.map +0 -1
  535. package/dist/lib/teams/ralph.d.ts +0 -8
  536. package/dist/lib/teams/ralph.d.ts.map +0 -1
  537. package/dist/lib/teams/ralph.js +0 -59
  538. package/dist/lib/teams/ralph.js.map +0 -1
  539. package/dist/lib/teams/registry.d.ts +0 -18
  540. package/dist/lib/teams/registry.d.ts.map +0 -1
  541. package/dist/lib/teams/registry.js +0 -68
  542. package/dist/lib/teams/registry.js.map +0 -1
  543. package/dist/lib/teams/summarizer.d.ts +0 -73
  544. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  545. package/dist/lib/teams/summarizer.js +0 -780
  546. package/dist/lib/teams/summarizer.js.map +0 -1
  547. package/dist/lib/teams/supervisor.d.ts +0 -49
  548. package/dist/lib/teams/supervisor.d.ts.map +0 -1
  549. package/dist/lib/teams/supervisor.js +0 -74
  550. package/dist/lib/teams/supervisor.js.map +0 -1
  551. package/dist/lib/template.d.ts +0 -27
  552. package/dist/lib/template.d.ts.map +0 -1
  553. package/dist/lib/template.js +0 -60
  554. package/dist/lib/template.js.map +0 -1
  555. package/dist/lib/types.d.ts +0 -331
  556. package/dist/lib/types.d.ts.map +0 -1
  557. package/dist/lib/types.js +0 -29
  558. package/dist/lib/types.js.map +0 -1
  559. package/dist/lib/usage.d.ts +0 -105
  560. package/dist/lib/usage.d.ts.map +0 -1
  561. package/dist/lib/usage.js +0 -686
  562. package/dist/lib/usage.js.map +0 -1
  563. package/dist/lib/versions.d.ts +0 -253
  564. package/dist/lib/versions.d.ts.map +0 -1
  565. package/dist/lib/versions.js +0 -1796
  566. package/dist/lib/versions.js.map +0 -1
  567. package/scripts/rebuild-sqlite.sh +0 -46
@@ -1,791 +0,0 @@
1
- /**
2
- * Skill management -- discovery, installation, and syncing of SKILL.md bundles.
3
- *
4
- * Skills are knowledge packs stored in ~/.agents/skills/. Each skill directory
5
- * contains a SKILL.md (with frontmatter metadata) and optional supporting files
6
- * (rules/, examples/, etc.). This module handles parsing skill metadata,
7
- * installing skills into agent version homes, and tracking installation state.
8
- */
9
- import * as fs from 'fs';
10
- import * as path from 'path';
11
- import * as os from 'os';
12
- import * as yaml from 'yaml';
13
- import { SKILLS_CAPABLE_AGENTS, ensureSkillsDir } from './agents.js';
14
- import { getAgentsDir, getProjectAgentsDir } from './state.js';
15
- import { getEffectiveHome, getVersionHomePath, listInstalledVersions } from './versions.js';
16
- const HOME = os.homedir();
17
- export function getSkillsDir() {
18
- return path.join(getAgentsDir(), 'skills');
19
- }
20
- export function ensureCentralSkillsDir() {
21
- const dir = getSkillsDir();
22
- if (!fs.existsSync(dir)) {
23
- fs.mkdirSync(dir, { recursive: true });
24
- }
25
- }
26
- export function getAgentSkillsDir(agentId) {
27
- const home = getEffectiveHome(agentId);
28
- return path.join(home, `.${agentId}`, 'skills');
29
- }
30
- export function getProjectSkillsDir(agentId, cwd = process.cwd()) {
31
- const dirs = [];
32
- const projectAgentsDir = getProjectAgentsDir(cwd);
33
- if (projectAgentsDir) {
34
- dirs.push(path.join(projectAgentsDir, 'skills'));
35
- }
36
- dirs.push(path.join(cwd, `.${agentId}`, 'skills'));
37
- // Return the first existing dir, otherwise default to the first candidate
38
- for (const dir of dirs) {
39
- if (fs.existsSync(dir))
40
- return dir;
41
- }
42
- return dirs[0];
43
- }
44
- export function validateSkillMetadata(metadata, skillName) {
45
- const errors = [];
46
- const warnings = [];
47
- if (!metadata) {
48
- errors.push('SKILL.md not found or has no valid frontmatter');
49
- return { valid: false, errors, warnings };
50
- }
51
- // name is required
52
- if (!metadata.name || metadata.name.trim() === '') {
53
- errors.push('Missing required field: name');
54
- }
55
- else {
56
- if (metadata.name.length > 64) {
57
- errors.push(`name exceeds 64 characters (${metadata.name.length})`);
58
- }
59
- if (!/^[a-z0-9-]+$/.test(metadata.name)) {
60
- warnings.push('name should be lowercase with hyphens (e.g., my-skill-name)');
61
- }
62
- }
63
- // description is required
64
- if (!metadata.description || metadata.description.trim() === '') {
65
- errors.push('Missing required field: description');
66
- }
67
- else if (metadata.description.length > 1024) {
68
- warnings.push(`description exceeds 1024 characters (${metadata.description.length})`);
69
- }
70
- return { valid: errors.length === 0, errors, warnings };
71
- }
72
- /**
73
- * Parse skill metadata from SKILL.md, returning both result and any error.
74
- */
75
- export function tryParseSkillMetadata(skillDir) {
76
- const skillMdPath = path.join(skillDir, 'SKILL.md');
77
- if (!fs.existsSync(skillMdPath)) {
78
- return { metadata: null, error: 'SKILL.md not found' };
79
- }
80
- try {
81
- const content = fs.readFileSync(skillMdPath, 'utf-8');
82
- const lines = content.split('\n');
83
- // Check for YAML frontmatter (required)
84
- if (lines[0] === '---') {
85
- const endIndex = lines.slice(1).findIndex((l) => l === '---');
86
- if (endIndex > 0) {
87
- const frontmatter = lines.slice(1, endIndex + 1).join('\n');
88
- const parsed = yaml.parse(frontmatter);
89
- return {
90
- metadata: {
91
- name: parsed.name || '',
92
- description: parsed.description || '',
93
- author: parsed.author,
94
- version: parsed.version,
95
- license: parsed.license,
96
- keywords: parsed.keywords,
97
- },
98
- };
99
- }
100
- }
101
- // No valid frontmatter
102
- return { metadata: null, error: 'No valid YAML frontmatter found' };
103
- }
104
- catch (e) {
105
- const msg = e instanceof Error ? e.message : 'Unknown parse error';
106
- return { metadata: null, error: `Invalid YAML: ${msg}` };
107
- }
108
- }
109
- /**
110
- * Parse skill metadata from SKILL.md (backward-compatible, returns null on error).
111
- */
112
- export function parseSkillMetadata(skillDir) {
113
- return tryParseSkillMetadata(skillDir).metadata;
114
- }
115
- export function countSkillRules(skillDir) {
116
- const rulesDir = path.join(skillDir, 'rules');
117
- if (!fs.existsSync(rulesDir)) {
118
- return 0;
119
- }
120
- try {
121
- const files = fs.readdirSync(rulesDir);
122
- return files.filter((f) => f.endsWith('.md')).length;
123
- }
124
- catch {
125
- return 0;
126
- }
127
- }
128
- /**
129
- * Count bundled resource files in a skill directory: every regular file
130
- * beyond SKILL.md itself (reference docs, scripts, assets, etc). Hidden
131
- * files and hidden directories are skipped.
132
- */
133
- export function countSkillFiles(skillDir) {
134
- if (!fs.existsSync(skillDir))
135
- return 0;
136
- let count = 0;
137
- const walk = (dir) => {
138
- let entries;
139
- try {
140
- entries = fs.readdirSync(dir, { withFileTypes: true });
141
- }
142
- catch {
143
- return;
144
- }
145
- for (const entry of entries) {
146
- if (entry.name.startsWith('.'))
147
- continue;
148
- const full = path.join(dir, entry.name);
149
- if (entry.isDirectory()) {
150
- walk(full);
151
- }
152
- else if (entry.isFile()) {
153
- if (dir === skillDir && entry.name === 'SKILL.md')
154
- continue;
155
- count++;
156
- }
157
- }
158
- };
159
- walk(skillDir);
160
- return count;
161
- }
162
- export function discoverSkillsFromRepo(repoPath) {
163
- const skills = [];
164
- // Look for skills in common locations
165
- const searchPaths = [
166
- path.join(repoPath, 'skills'),
167
- path.join(repoPath, 'agent-skills'),
168
- repoPath, // Root level skill directories
169
- ];
170
- for (const searchPath of searchPaths) {
171
- if (!fs.existsSync(searchPath))
172
- continue;
173
- try {
174
- const entries = fs.readdirSync(searchPath, { withFileTypes: true });
175
- for (const entry of entries) {
176
- if (!entry.isDirectory())
177
- continue;
178
- // Skip hidden directories (e.g., .system)
179
- if (entry.name.startsWith('.'))
180
- continue;
181
- const skillDir = path.join(searchPath, entry.name);
182
- const skillMdPath = path.join(skillDir, 'SKILL.md');
183
- if (fs.existsSync(skillMdPath)) {
184
- const parseResult = tryParseSkillMetadata(skillDir);
185
- const validation = validateSkillMetadata(parseResult.metadata, entry.name);
186
- // Include even if invalid (for discovery/listing with warnings)
187
- skills.push({
188
- name: entry.name,
189
- path: skillDir,
190
- metadata: parseResult.metadata || { name: entry.name, description: '' },
191
- ruleCount: countSkillRules(skillDir),
192
- validation,
193
- parseError: parseResult.error,
194
- });
195
- }
196
- }
197
- }
198
- catch {
199
- // Skip inaccessible directories
200
- }
201
- }
202
- return skills;
203
- }
204
- export function installSkill(sourcePath, skillName, agents, method = 'symlink') {
205
- // Validate skill metadata before installation
206
- const metadata = parseSkillMetadata(sourcePath);
207
- const validation = validateSkillMetadata(metadata, skillName);
208
- if (!validation.valid) {
209
- return {
210
- success: false,
211
- error: `Invalid skill: ${validation.errors.join(', ')}`,
212
- warnings: validation.warnings,
213
- };
214
- }
215
- ensureCentralSkillsDir();
216
- const centralPath = path.join(getSkillsDir(), skillName);
217
- // Copy to central location if not already there
218
- if (!fs.existsSync(centralPath)) {
219
- try {
220
- fs.cpSync(sourcePath, centralPath, { recursive: true });
221
- }
222
- catch (err) {
223
- return { success: false, error: `Failed to copy skill: ${err.message}` };
224
- }
225
- }
226
- // Symlink to each agent
227
- for (const agentId of agents) {
228
- if (!SKILLS_CAPABLE_AGENTS.includes(agentId)) {
229
- continue;
230
- }
231
- ensureSkillsDir(agentId);
232
- const agentSkillPath = path.join(getAgentSkillsDir(agentId), skillName);
233
- // Remove existing if present
234
- if (fs.existsSync(agentSkillPath)) {
235
- try {
236
- fs.rmSync(agentSkillPath, { recursive: true, force: true });
237
- }
238
- catch {
239
- // Ignore removal errors
240
- }
241
- }
242
- try {
243
- if (method === 'symlink') {
244
- fs.symlinkSync(centralPath, agentSkillPath, 'dir');
245
- }
246
- else {
247
- fs.cpSync(centralPath, agentSkillPath, { recursive: true });
248
- }
249
- }
250
- catch (err) {
251
- return {
252
- success: false,
253
- error: `Failed to ${method} skill to ${agentId}: ${err.message}`,
254
- };
255
- }
256
- }
257
- return { success: true };
258
- }
259
- /**
260
- * Check if a skill exists for an agent.
261
- */
262
- export function skillExists(agentId, skillName) {
263
- const agentSkillPath = path.join(getAgentSkillsDir(agentId), skillName);
264
- return fs.existsSync(agentSkillPath);
265
- }
266
- /**
267
- * Normalize content for comparison (trim, normalize line endings).
268
- */
269
- function normalizeContent(content) {
270
- return content.replace(/\r\n/g, '\n').trim();
271
- }
272
- /**
273
- * Compare two directories recursively for content equality.
274
- */
275
- function directoriesMatch(dir1, dir2) {
276
- if (!fs.existsSync(dir1) || !fs.existsSync(dir2)) {
277
- return fs.existsSync(dir1) === fs.existsSync(dir2);
278
- }
279
- try {
280
- const files1 = fs.readdirSync(dir1).filter(f => f.endsWith('.md')).sort();
281
- const files2 = fs.readdirSync(dir2).filter(f => f.endsWith('.md')).sort();
282
- if (files1.length !== files2.length)
283
- return false;
284
- if (files1.join(',') !== files2.join(','))
285
- return false;
286
- for (const file of files1) {
287
- const content1 = fs.readFileSync(path.join(dir1, file), 'utf-8');
288
- const content2 = fs.readFileSync(path.join(dir2, file), 'utf-8');
289
- if (normalizeContent(content1) !== normalizeContent(content2)) {
290
- return false;
291
- }
292
- }
293
- return true;
294
- }
295
- catch {
296
- return false;
297
- }
298
- }
299
- /**
300
- * Check if installed skill content matches source content.
301
- * Compares SKILL.md and all rules/*.md files.
302
- */
303
- export function skillContentMatches(agentId, skillName, sourcePath) {
304
- const installedPath = path.join(getAgentSkillsDir(agentId), skillName);
305
- if (!fs.existsSync(installedPath) || !fs.existsSync(sourcePath)) {
306
- return false;
307
- }
308
- try {
309
- const installedSkillMd = path.join(installedPath, 'SKILL.md');
310
- const sourceSkillMd = path.join(sourcePath, 'SKILL.md');
311
- if (!fs.existsSync(installedSkillMd) || !fs.existsSync(sourceSkillMd)) {
312
- return false;
313
- }
314
- const installedContent = fs.readFileSync(installedSkillMd, 'utf-8');
315
- const sourceContent = fs.readFileSync(sourceSkillMd, 'utf-8');
316
- if (normalizeContent(installedContent) !== normalizeContent(sourceContent)) {
317
- return false;
318
- }
319
- const installedRulesDir = path.join(installedPath, 'rules');
320
- const sourceRulesDir = path.join(sourcePath, 'rules');
321
- return directoriesMatch(installedRulesDir, sourceRulesDir);
322
- }
323
- catch {
324
- return false;
325
- }
326
- }
327
- /**
328
- * List skill names in the central ~/.agents/skills/ directory.
329
- */
330
- export function listCentralSkills() {
331
- const dir = getSkillsDir();
332
- if (!fs.existsSync(dir))
333
- return [];
334
- return fs.readdirSync(dir, { withFileTypes: true })
335
- .filter((e) => e.isDirectory() && !e.name.startsWith('.'))
336
- .filter((e) => fs.existsSync(path.join(dir, e.name, 'SKILL.md')))
337
- .map((e) => e.name)
338
- .sort();
339
- }
340
- /**
341
- * Path to the skills dir of a specific version home (not the active one).
342
- */
343
- export function getVersionSkillsDir(agent, version) {
344
- const home = getVersionHomePath(agent, version);
345
- return path.join(home, `.${agent}`, 'skills');
346
- }
347
- /**
348
- * List skill names installed in a specific version home.
349
- */
350
- export function listSkillsInVersionHome(agent, version) {
351
- const dir = getVersionSkillsDir(agent, version);
352
- if (!fs.existsSync(dir))
353
- return [];
354
- return fs.readdirSync(dir, { withFileTypes: true })
355
- .filter((e) => e.isDirectory() && !e.name.startsWith('.'))
356
- .filter((e) => fs.existsSync(path.join(dir, e.name, 'SKILL.md')))
357
- .map((e) => e.name)
358
- .sort();
359
- }
360
- /**
361
- * Check if a skill installed in a specific version matches central content.
362
- */
363
- function versionSkillMatches(agent, version, skillName) {
364
- const installedPath = path.join(getVersionSkillsDir(agent, version), skillName);
365
- const centralPath = path.join(getSkillsDir(), skillName);
366
- if (!fs.existsSync(installedPath) || !fs.existsSync(centralPath))
367
- return false;
368
- const installedSkillMd = path.join(installedPath, 'SKILL.md');
369
- const centralSkillMd = path.join(centralPath, 'SKILL.md');
370
- if (!fs.existsSync(installedSkillMd) || !fs.existsSync(centralSkillMd))
371
- return false;
372
- try {
373
- if (normalizeContent(fs.readFileSync(installedSkillMd, 'utf-8')) !==
374
- normalizeContent(fs.readFileSync(centralSkillMd, 'utf-8'))) {
375
- return false;
376
- }
377
- }
378
- catch {
379
- return false;
380
- }
381
- return directoriesMatch(path.join(installedPath, 'rules'), path.join(centralPath, 'rules'));
382
- }
383
- /**
384
- * Compare a version home's skills against central. Returns the reconciliation diff.
385
- */
386
- export function diffVersionSkills(agent, version) {
387
- const central = new Set(listCentralSkills());
388
- const installed = new Set(listSkillsInVersionHome(agent, version));
389
- const toAdd = [];
390
- const toUpdate = [];
391
- const matched = [];
392
- const orphans = [];
393
- for (const name of central) {
394
- if (!installed.has(name)) {
395
- toAdd.push(name);
396
- }
397
- else if (!versionSkillMatches(agent, version, name)) {
398
- toUpdate.push(name);
399
- }
400
- else {
401
- matched.push(name);
402
- }
403
- }
404
- for (const name of installed) {
405
- if (!central.has(name))
406
- orphans.push(name);
407
- }
408
- return { agent, version, toAdd: toAdd.sort(), toUpdate: toUpdate.sort(), matched, orphans: orphans.sort() };
409
- }
410
- /**
411
- * Walk a directory and return every file's path relative to base.
412
- * Follows no symlinks. Returns empty set if the dir doesn't exist.
413
- */
414
- function walkRelativeFiles(base) {
415
- const out = new Set();
416
- if (!fs.existsSync(base))
417
- return out;
418
- const stack = [''];
419
- while (stack.length > 0) {
420
- const rel = stack.pop();
421
- const abs = path.join(base, rel);
422
- let entries;
423
- try {
424
- entries = fs.readdirSync(abs, { withFileTypes: true });
425
- }
426
- catch {
427
- continue;
428
- }
429
- for (const entry of entries) {
430
- const childRel = rel ? path.join(rel, entry.name) : entry.name;
431
- if (entry.isDirectory()) {
432
- stack.push(childRel);
433
- }
434
- else if (entry.isFile()) {
435
- out.add(childRel);
436
- }
437
- }
438
- }
439
- return out;
440
- }
441
- /**
442
- * Install a single skill from central into a specific version home.
443
- *
444
- * Copy mode preserves any files that exist in the version home but NOT in
445
- * central — e.g. user-populated `.env` alongside the git-tracked `.env.example`.
446
- * Without this, re-running `sync` whenever central content changes would wipe
447
- * local secrets.
448
- */
449
- export function installSkillToVersion(agent, version, skillName, method = 'copy') {
450
- const centralPath = path.join(getSkillsDir(), skillName);
451
- if (!fs.existsSync(centralPath)) {
452
- return { success: false, error: `Skill '${skillName}' not found in central` };
453
- }
454
- const skillsDir = getVersionSkillsDir(agent, version);
455
- if (!fs.existsSync(skillsDir)) {
456
- fs.mkdirSync(skillsDir, { recursive: true });
457
- }
458
- const target = path.join(skillsDir, skillName);
459
- // Snapshot files unique to the version home so we can restore them after
460
- // the fresh copy (copy mode only; symlink shares central so there's nothing
461
- // local to preserve — and writing a .env into a symlinked skill would
462
- // pollute the git-tracked central dir anyway).
463
- const preserved = [];
464
- if (method === 'copy' && fs.existsSync(target) && !fs.lstatSync(target).isSymbolicLink()) {
465
- const centralFiles = walkRelativeFiles(centralPath);
466
- const installedFiles = walkRelativeFiles(target);
467
- for (const rel of installedFiles) {
468
- if (centralFiles.has(rel))
469
- continue;
470
- try {
471
- const abs = path.join(target, rel);
472
- preserved.push({
473
- rel,
474
- buf: fs.readFileSync(abs),
475
- mode: fs.statSync(abs).mode,
476
- });
477
- }
478
- catch {
479
- // Unreadable — skip rather than fail the whole install
480
- }
481
- }
482
- }
483
- if (fs.existsSync(target) || fs.lstatSync(target, { throwIfNoEntry: false })) {
484
- try {
485
- fs.rmSync(target, { recursive: true, force: true });
486
- }
487
- catch (err) {
488
- return { success: false, error: `Failed to remove existing: ${err.message}` };
489
- }
490
- }
491
- try {
492
- if (method === 'symlink') {
493
- fs.symlinkSync(centralPath, target, 'dir');
494
- }
495
- else {
496
- fs.cpSync(centralPath, target, { recursive: true });
497
- }
498
- }
499
- catch (err) {
500
- return { success: false, error: `Failed to ${method}: ${err.message}` };
501
- }
502
- // Restore preserved files on top of the fresh copy.
503
- for (const { rel, buf, mode } of preserved) {
504
- try {
505
- const dest = path.join(target, rel);
506
- fs.mkdirSync(path.dirname(dest), { recursive: true });
507
- fs.writeFileSync(dest, buf);
508
- fs.chmodSync(dest, mode);
509
- }
510
- catch {
511
- // Best-effort; failure here shouldn't unwind the install
512
- }
513
- }
514
- return { success: true };
515
- }
516
- /**
517
- * Remove a single skill from a specific version home.
518
- */
519
- export function removeSkillFromVersion(agent, version, skillName) {
520
- const target = path.join(getVersionSkillsDir(agent, version), skillName);
521
- if (!fs.existsSync(target) && !fs.lstatSync(target, { throwIfNoEntry: false })) {
522
- return { success: true };
523
- }
524
- try {
525
- fs.rmSync(target, { recursive: true, force: true });
526
- }
527
- catch (err) {
528
- return { success: false, error: err.message };
529
- }
530
- return { success: true };
531
- }
532
- /**
533
- * Iterate all (agent, version) pairs that support skills and are installed,
534
- * optionally scoped to a single agent/version.
535
- */
536
- export function iterSkillsCapableVersions(filter) {
537
- const pairs = [];
538
- const agents = filter?.agent ? [filter.agent] : SKILLS_CAPABLE_AGENTS;
539
- for (const agent of agents) {
540
- if (!SKILLS_CAPABLE_AGENTS.includes(agent))
541
- continue;
542
- const versions = listInstalledVersions(agent);
543
- for (const version of versions) {
544
- if (filter?.version && filter.version !== version)
545
- continue;
546
- pairs.push({ agent, version });
547
- }
548
- }
549
- return pairs;
550
- }
551
- export function uninstallSkill(skillName) {
552
- // Remove from central location
553
- const centralPath = path.join(getSkillsDir(), skillName);
554
- if (!fs.existsSync(centralPath)) {
555
- return { success: false, error: `Skill '${skillName}' not found` };
556
- }
557
- // Remove from all agents
558
- for (const agentId of SKILLS_CAPABLE_AGENTS) {
559
- const agentSkillPath = path.join(getAgentSkillsDir(agentId), skillName);
560
- if (fs.existsSync(agentSkillPath)) {
561
- try {
562
- fs.rmSync(agentSkillPath, { recursive: true, force: true });
563
- }
564
- catch {
565
- // Ignore removal errors
566
- }
567
- }
568
- }
569
- try {
570
- fs.rmSync(centralPath, { recursive: true, force: true });
571
- }
572
- catch {
573
- // Ignore removal errors
574
- }
575
- return { success: true };
576
- }
577
- export function listInstalledSkills() {
578
- const skills = new Map();
579
- const centralDir = getSkillsDir();
580
- if (!fs.existsSync(centralDir)) {
581
- return skills;
582
- }
583
- try {
584
- const entries = fs.readdirSync(centralDir, { withFileTypes: true });
585
- for (const entry of entries) {
586
- if (!entry.isDirectory())
587
- continue;
588
- // Skip hidden directories (e.g., .system)
589
- if (entry.name.startsWith('.'))
590
- continue;
591
- const skillDir = path.join(centralDir, entry.name);
592
- const metadata = parseSkillMetadata(skillDir);
593
- const validation = validateSkillMetadata(metadata, entry.name);
594
- if (metadata) {
595
- skills.set(entry.name, {
596
- name: entry.name,
597
- path: skillDir,
598
- metadata,
599
- ruleCount: countSkillRules(skillDir),
600
- validation,
601
- });
602
- }
603
- }
604
- }
605
- catch {
606
- // Ignore errors
607
- }
608
- return skills;
609
- }
610
- export function listInstalledSkillsWithScope(agentId, cwd = process.cwd(), options) {
611
- const results = [];
612
- const seen = new Set();
613
- // Project-scoped skills
614
- const projectCandidates = [];
615
- const projectAgentsDir = getProjectAgentsDir(cwd);
616
- if (projectAgentsDir) {
617
- projectCandidates.push(path.join(projectAgentsDir, 'skills'));
618
- }
619
- projectCandidates.push(path.join(cwd, `.${agentId}`, 'skills'));
620
- for (const projectSkillsDir of projectCandidates) {
621
- if (!fs.existsSync(projectSkillsDir))
622
- continue;
623
- try {
624
- const entries = fs.readdirSync(projectSkillsDir, { withFileTypes: true });
625
- for (const entry of entries) {
626
- if (entry.name.startsWith('.'))
627
- continue;
628
- const skillDir = path.join(projectSkillsDir, entry.name);
629
- let isDir = entry.isDirectory();
630
- if (entry.isSymbolicLink()) {
631
- try {
632
- const stat = fs.statSync(skillDir);
633
- isDir = stat.isDirectory();
634
- }
635
- catch {
636
- continue;
637
- }
638
- }
639
- if (!isDir)
640
- continue;
641
- const result = tryParseSkillMetadata(skillDir);
642
- if (result.metadata && !seen.has(entry.name)) {
643
- results.push({
644
- name: entry.name,
645
- path: skillDir,
646
- metadata: result.metadata,
647
- ruleCount: countSkillRules(skillDir),
648
- scope: 'project',
649
- agent: agentId,
650
- });
651
- seen.add(entry.name);
652
- }
653
- else if (result.error && options?.errors && !seen.has(entry.name)) {
654
- options.errors.push({
655
- name: entry.name,
656
- path: skillDir,
657
- error: result.error,
658
- scope: 'project',
659
- });
660
- seen.add(entry.name);
661
- }
662
- }
663
- }
664
- catch {
665
- // Ignore errors
666
- }
667
- }
668
- // User-scoped skills (version-aware when home is provided)
669
- const userSkillsDir = options?.home
670
- ? path.join(options.home, `.${agentId}`, 'skills')
671
- : getAgentSkillsDir(agentId);
672
- if (fs.existsSync(userSkillsDir)) {
673
- try {
674
- const entries = fs.readdirSync(userSkillsDir, { withFileTypes: true });
675
- for (const entry of entries) {
676
- if (entry.name.startsWith('.'))
677
- continue;
678
- const skillDir = path.join(userSkillsDir, entry.name);
679
- let isDir = entry.isDirectory();
680
- if (entry.isSymbolicLink()) {
681
- try {
682
- const stat = fs.statSync(skillDir);
683
- isDir = stat.isDirectory();
684
- }
685
- catch {
686
- continue;
687
- }
688
- }
689
- if (!isDir)
690
- continue;
691
- const result = tryParseSkillMetadata(skillDir);
692
- if (result.metadata && !seen.has(entry.name)) {
693
- results.push({
694
- name: entry.name,
695
- path: skillDir,
696
- metadata: result.metadata,
697
- ruleCount: countSkillRules(skillDir),
698
- scope: 'user',
699
- agent: agentId,
700
- });
701
- seen.add(entry.name);
702
- }
703
- else if (result.error && options?.errors && !seen.has(entry.name)) {
704
- options.errors.push({
705
- name: entry.name,
706
- path: skillDir,
707
- error: result.error,
708
- scope: 'user',
709
- });
710
- seen.add(entry.name);
711
- }
712
- }
713
- }
714
- catch {
715
- // Ignore errors
716
- }
717
- }
718
- return results;
719
- }
720
- export function getSkillInfo(skillName) {
721
- const centralPath = path.join(getSkillsDir(), skillName);
722
- if (!fs.existsSync(centralPath)) {
723
- return null;
724
- }
725
- const metadata = parseSkillMetadata(centralPath);
726
- const validation = validateSkillMetadata(metadata, skillName);
727
- if (!metadata) {
728
- return null;
729
- }
730
- return {
731
- name: skillName,
732
- path: centralPath,
733
- metadata,
734
- ruleCount: countSkillRules(centralPath),
735
- validation,
736
- };
737
- }
738
- export function getSkillRules(skillName) {
739
- const centralPath = path.join(getSkillsDir(), skillName);
740
- const rulesDir = path.join(centralPath, 'rules');
741
- if (!fs.existsSync(rulesDir)) {
742
- return [];
743
- }
744
- try {
745
- const files = fs.readdirSync(rulesDir);
746
- return files.filter((f) => f.endsWith('.md')).map((f) => f.replace(/\.md$/, ''));
747
- }
748
- catch {
749
- return [];
750
- }
751
- }
752
- /**
753
- * Install a skill to central ~/.agents/skills/ directory only.
754
- * Does not create per-agent symlinks (shims handle that for synced agents).
755
- */
756
- export function installSkillCentrally(sourcePath, skillName) {
757
- // Validate skill metadata (warnings only, don't block installation)
758
- const metadata = parseSkillMetadata(sourcePath);
759
- const validation = validateSkillMetadata(metadata, skillName);
760
- const allWarnings = [...validation.warnings];
761
- // Convert validation errors to warnings instead of blocking
762
- if (!validation.valid) {
763
- allWarnings.push(...validation.errors.map(e => `Validation: ${e}`));
764
- }
765
- ensureCentralSkillsDir();
766
- const centralPath = path.join(getSkillsDir(), skillName);
767
- // Resolve to absolute paths for comparison
768
- const resolvedSource = path.resolve(sourcePath);
769
- const resolvedCentral = path.resolve(centralPath);
770
- // If source is already the central path, nothing to copy
771
- if (resolvedSource === resolvedCentral) {
772
- return { success: true, warnings: allWarnings.length > 0 ? allWarnings : undefined };
773
- }
774
- // Remove existing if present
775
- if (fs.existsSync(centralPath)) {
776
- try {
777
- fs.rmSync(centralPath, { recursive: true, force: true });
778
- }
779
- catch {
780
- // Ignore removal errors
781
- }
782
- }
783
- try {
784
- fs.cpSync(sourcePath, centralPath, { recursive: true });
785
- return { success: true, warnings: allWarnings.length > 0 ? allWarnings : undefined };
786
- }
787
- catch (err) {
788
- return { success: false, error: `Failed to copy skill: ${err.message}` };
789
- }
790
- }
791
- //# sourceMappingURL=skills.js.map