@phnx-labs/agents-cli 0.1.0 → 1.14.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 (554) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +283 -372
  3. package/dist/commands/alias.d.ts +11 -0
  4. package/dist/commands/alias.js +117 -0
  5. package/dist/commands/beta.d.ts +2 -0
  6. package/dist/commands/beta.js +53 -0
  7. package/dist/commands/cloud.d.ts +8 -1
  8. package/dist/commands/cloud.js +108 -22
  9. package/dist/commands/commands.d.ts +9 -1
  10. package/dist/commands/commands.js +24 -172
  11. package/dist/commands/daemon.d.ts +8 -1
  12. package/dist/commands/daemon.js +13 -5
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +132 -0
  15. package/dist/commands/drive.d.ts +8 -1
  16. package/dist/commands/drive.js +20 -3
  17. package/dist/commands/exec.d.ts +8 -1
  18. package/dist/commands/exec.js +96 -27
  19. package/dist/commands/factory.d.ts +19 -0
  20. package/dist/commands/factory.js +71 -0
  21. package/dist/commands/fork.d.ts +8 -1
  22. package/dist/commands/fork.js +11 -4
  23. package/dist/commands/hooks.d.ts +9 -1
  24. package/dist/commands/hooks.js +30 -182
  25. package/dist/commands/init.d.ts +15 -1
  26. package/dist/commands/init.js +168 -74
  27. package/dist/commands/mcp.d.ts +9 -1
  28. package/dist/commands/mcp.js +11 -7
  29. package/dist/commands/models.d.ts +8 -1
  30. package/dist/commands/models.js +16 -4
  31. package/dist/commands/packages.d.ts +8 -1
  32. package/dist/commands/packages.js +13 -7
  33. package/dist/commands/permissions.d.ts +9 -1
  34. package/dist/commands/permissions.js +3 -3
  35. package/dist/commands/plugins.d.ts +8 -1
  36. package/dist/commands/plugins.js +13 -2
  37. package/dist/commands/profiles.d.ts +9 -1
  38. package/dist/commands/profiles.js +56 -7
  39. package/dist/commands/prune.d.ts +22 -0
  40. package/dist/commands/prune.js +191 -0
  41. package/dist/commands/pty.d.ts +1 -1
  42. package/dist/commands/pty.js +2 -1
  43. package/dist/commands/pull.d.ts +8 -1
  44. package/dist/commands/pull.js +58 -128
  45. package/dist/commands/refresh-memory.d.ts +7 -1
  46. package/dist/commands/refresh-memory.js +7 -1
  47. package/dist/commands/repo.d.ts +15 -0
  48. package/dist/commands/repo.js +570 -0
  49. package/dist/commands/resource-view.d.ts +10 -3
  50. package/dist/commands/resource-view.js +18 -5
  51. package/dist/commands/routines.d.ts +8 -1
  52. package/dist/commands/routines.js +17 -4
  53. package/dist/commands/rules.d.ts +9 -1
  54. package/dist/commands/rules.js +16 -11
  55. package/dist/commands/secrets.d.ts +8 -1
  56. package/dist/commands/secrets.js +235 -63
  57. package/dist/commands/sessions-picker.d.ts +2 -1
  58. package/dist/commands/sessions-picker.js +88 -11
  59. package/dist/commands/sessions-tail.d.ts +19 -0
  60. package/dist/commands/sessions-tail.js +235 -0
  61. package/dist/commands/sessions.d.ts +2 -1
  62. package/dist/commands/sessions.js +188 -7
  63. package/dist/commands/skills.d.ts +9 -1
  64. package/dist/commands/skills.js +28 -178
  65. package/dist/commands/status.d.ts +7 -1
  66. package/dist/commands/status.js +7 -1
  67. package/dist/commands/subagents.d.ts +8 -1
  68. package/dist/commands/subagents.js +11 -1
  69. package/dist/commands/sync.d.ts +8 -1
  70. package/dist/commands/sync.js +8 -1
  71. package/dist/commands/teams-picker.d.ts +4 -1
  72. package/dist/commands/teams-picker.js +55 -3
  73. package/dist/commands/teams.d.ts +15 -1
  74. package/dist/commands/teams.js +323 -69
  75. package/dist/commands/usage.d.ts +11 -0
  76. package/dist/commands/usage.js +60 -0
  77. package/dist/commands/utils.d.ts +6 -1
  78. package/dist/commands/utils.js +6 -1
  79. package/dist/commands/versions.d.ts +8 -1
  80. package/dist/commands/versions.js +4 -3
  81. package/dist/commands/view.d.ts +47 -2
  82. package/dist/commands/view.js +317 -24
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +172 -34
  85. package/dist/lib/acp/client.d.ts +31 -0
  86. package/dist/lib/acp/client.js +117 -0
  87. package/dist/lib/acp/harnesses.d.ts +26 -0
  88. package/dist/lib/acp/harnesses.js +65 -0
  89. package/dist/lib/acp/run.d.ts +18 -0
  90. package/dist/lib/acp/run.js +39 -0
  91. package/dist/lib/agents.d.ts +74 -2
  92. package/dist/lib/agents.js +197 -21
  93. package/dist/lib/artifact-actions.d.ts +8 -4
  94. package/dist/lib/artifact-actions.js +8 -6
  95. package/dist/lib/auto-pull-worker.d.ts +11 -0
  96. package/dist/lib/auto-pull-worker.js +121 -0
  97. package/dist/lib/auto-pull.d.ts +31 -0
  98. package/dist/lib/auto-pull.js +97 -0
  99. package/dist/lib/beta.d.ts +23 -0
  100. package/dist/lib/beta.js +90 -0
  101. package/dist/lib/capabilities.d.ts +29 -0
  102. package/dist/lib/capabilities.js +74 -0
  103. package/dist/lib/cloud/codex.d.ts +9 -3
  104. package/dist/lib/cloud/codex.js +53 -13
  105. package/dist/lib/cloud/factory.d.ts +8 -3
  106. package/dist/lib/cloud/factory.js +19 -3
  107. package/dist/lib/cloud/registry.d.ts +10 -1
  108. package/dist/lib/cloud/registry.js +14 -3
  109. package/dist/lib/cloud/rush.d.ts +63 -3
  110. package/dist/lib/cloud/rush.js +273 -20
  111. package/dist/lib/cloud/store.d.ts +13 -1
  112. package/dist/lib/cloud/store.js +23 -4
  113. package/dist/lib/cloud/stream.d.ts +6 -1
  114. package/dist/lib/cloud/stream.js +95 -39
  115. package/dist/lib/cloud/types.d.ts +153 -8
  116. package/dist/lib/cloud/types.js +34 -2
  117. package/dist/lib/command-skills.d.ts +20 -0
  118. package/dist/lib/command-skills.js +142 -0
  119. package/dist/lib/commands.d.ts +22 -2
  120. package/dist/lib/commands.js +51 -11
  121. package/dist/lib/convert.d.ts +10 -1
  122. package/dist/lib/convert.js +9 -1
  123. package/dist/lib/daemon.d.ts +21 -1
  124. package/dist/lib/daemon.js +97 -4
  125. package/dist/lib/drive-sync.d.ts +18 -1
  126. package/dist/lib/drive-sync.js +57 -15
  127. package/dist/lib/exec.d.ts +23 -6
  128. package/dist/lib/exec.js +53 -17
  129. package/dist/lib/fs-walk.d.ts +2 -0
  130. package/dist/lib/fs-walk.js +40 -0
  131. package/dist/lib/fuzzy.d.ts +53 -0
  132. package/dist/lib/fuzzy.js +72 -0
  133. package/dist/lib/gemini-settings.d.ts +4 -0
  134. package/dist/lib/gemini-settings.js +33 -0
  135. package/dist/lib/git.d.ts +12 -2
  136. package/dist/lib/git.js +17 -6
  137. package/dist/lib/help.d.ts +20 -1
  138. package/dist/lib/help.js +45 -6
  139. package/dist/lib/hooks/match.d.ts +32 -0
  140. package/dist/lib/hooks/match.js +120 -0
  141. package/dist/lib/hooks.d.ts +17 -4
  142. package/dist/lib/hooks.js +119 -101
  143. package/dist/lib/manifest.d.ts +6 -1
  144. package/dist/lib/manifest.js +15 -4
  145. package/dist/lib/markdown.d.ts +0 -1
  146. package/dist/lib/markdown.js +6 -1
  147. package/dist/lib/mcp.d.ts +0 -1
  148. package/dist/lib/mcp.js +29 -33
  149. package/dist/lib/memory-compile.d.ts +13 -3
  150. package/dist/lib/memory-compile.js +31 -9
  151. package/dist/lib/memory.d.ts +14 -7
  152. package/dist/lib/memory.js +67 -38
  153. package/dist/lib/migrate.d.ts +8 -0
  154. package/dist/lib/migrate.js +85 -0
  155. package/dist/lib/models.d.ts +10 -4
  156. package/dist/lib/models.js +36 -15
  157. package/dist/lib/onepassword.d.ts +63 -0
  158. package/dist/lib/onepassword.js +186 -0
  159. package/dist/lib/paths.d.ts +8 -0
  160. package/dist/lib/paths.js +20 -0
  161. package/dist/lib/permissions.d.ts +24 -2
  162. package/dist/lib/permissions.js +117 -48
  163. package/dist/lib/picker.d.ts +10 -1
  164. package/dist/lib/picker.js +15 -1
  165. package/dist/lib/plugins.d.ts +7 -1
  166. package/dist/lib/plugins.js +10 -1
  167. package/dist/lib/profiles-presets.d.ts +10 -1
  168. package/dist/lib/profiles-presets.js +9 -1
  169. package/dist/lib/profiles.d.ts +35 -1
  170. package/dist/lib/profiles.js +36 -15
  171. package/dist/lib/pty-client.d.ts +1 -1
  172. package/dist/lib/pty-client.js +0 -1
  173. package/dist/lib/pty-server.d.ts +16 -2
  174. package/dist/lib/pty-server.js +92 -3
  175. package/dist/lib/registry.d.ts +23 -3
  176. package/dist/lib/registry.js +153 -8
  177. package/dist/lib/resources.d.ts +28 -1
  178. package/dist/lib/resources.js +79 -1
  179. package/dist/lib/rotate.d.ts +40 -13
  180. package/dist/lib/rotate.js +238 -40
  181. package/dist/lib/routines.d.ts +29 -1
  182. package/dist/lib/routines.js +32 -5
  183. package/dist/lib/runner.d.ts +14 -1
  184. package/dist/lib/runner.js +22 -3
  185. package/dist/lib/sandbox.d.ts +16 -1
  186. package/dist/lib/sandbox.js +39 -16
  187. package/dist/lib/scheduler.d.ts +8 -1
  188. package/dist/lib/scheduler.js +8 -1
  189. package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
  190. package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
  191. package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
  192. package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
  193. package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
  194. package/dist/lib/{secrets-bundles.d.ts → secrets/bundles.d.ts} +12 -2
  195. package/dist/lib/{secrets-bundles.js → secrets/bundles.js} +38 -17
  196. package/dist/lib/secrets/index.d.ts +55 -0
  197. package/dist/lib/secrets/index.js +211 -0
  198. package/dist/lib/secrets/profiles.d.ts +10 -0
  199. package/dist/lib/secrets/profiles.js +13 -0
  200. package/dist/lib/session/active.d.ts +43 -0
  201. package/dist/lib/session/active.js +392 -0
  202. package/dist/lib/session/artifacts.d.ts +12 -1
  203. package/dist/lib/session/artifacts.js +25 -5
  204. package/dist/lib/session/cloud.d.ts +30 -0
  205. package/dist/lib/session/cloud.js +121 -0
  206. package/dist/lib/session/db.d.ts +23 -2
  207. package/dist/lib/session/db.js +76 -12
  208. package/dist/lib/session/discover.d.ts +19 -4
  209. package/dist/lib/session/discover.js +344 -48
  210. package/dist/lib/session/parse.d.ts +28 -1
  211. package/dist/lib/session/parse.js +267 -9
  212. package/dist/lib/session/prompt.d.ts +9 -1
  213. package/dist/lib/session/prompt.js +17 -3
  214. package/dist/lib/session/render.d.ts +13 -1
  215. package/dist/lib/session/render.js +20 -1
  216. package/dist/lib/session/team-filter.d.ts +9 -1
  217. package/dist/lib/session/team-filter.js +11 -2
  218. package/dist/lib/session/types.d.ts +16 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +64 -5
  221. package/dist/lib/shims.js +309 -47
  222. package/dist/lib/skills.d.ts +27 -2
  223. package/dist/lib/skills.js +127 -65
  224. package/dist/lib/sqlite.d.ts +43 -0
  225. package/dist/lib/sqlite.js +94 -0
  226. package/dist/lib/state.d.ts +112 -27
  227. package/dist/lib/state.js +320 -148
  228. package/dist/lib/subagents.d.ts +9 -1
  229. package/dist/lib/subagents.js +70 -63
  230. package/dist/lib/sync-manifest.d.ts +81 -0
  231. package/dist/lib/sync-manifest.js +450 -0
  232. package/dist/lib/teams/agents.d.ts +103 -5
  233. package/dist/lib/teams/agents.js +414 -91
  234. package/dist/lib/teams/api.d.ts +26 -3
  235. package/dist/lib/teams/api.js +63 -3
  236. package/dist/lib/teams/debug.d.ts +6 -1
  237. package/dist/lib/teams/debug.js +6 -1
  238. package/dist/lib/teams/file_ops.d.ts +7 -1
  239. package/dist/lib/teams/file_ops.js +7 -1
  240. package/dist/lib/teams/index.d.ts +15 -0
  241. package/dist/lib/teams/index.js +14 -0
  242. package/dist/lib/teams/parsers.d.ts +4 -1
  243. package/dist/lib/teams/parsers.js +11 -1
  244. package/dist/lib/teams/persistence.d.ts +15 -1
  245. package/dist/lib/teams/persistence.js +102 -20
  246. package/dist/lib/teams/registry.d.ts +12 -1
  247. package/dist/lib/teams/registry.js +116 -33
  248. package/dist/lib/teams/summarizer.d.ts +15 -1
  249. package/dist/lib/teams/summarizer.js +14 -1
  250. package/dist/lib/teams/supervisor.d.ts +48 -0
  251. package/dist/lib/teams/supervisor.js +73 -0
  252. package/dist/lib/template.d.ts +8 -6
  253. package/dist/lib/template.js +8 -6
  254. package/dist/lib/types.d.ts +147 -8
  255. package/dist/lib/types.js +26 -3
  256. package/dist/lib/usage.d.ts +32 -1
  257. package/dist/lib/usage.js +70 -6
  258. package/dist/lib/version-duplicates.d.ts +21 -0
  259. package/dist/lib/version-duplicates.js +90 -0
  260. package/dist/lib/versions.d.ts +33 -4
  261. package/dist/lib/versions.js +376 -108
  262. package/package.json +32 -17
  263. package/scripts/postinstall.js +126 -30
  264. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  265. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  266. package/dist/commands/__tests__/sessions.test.js +0 -636
  267. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  268. package/dist/commands/cloud.d.ts.map +0 -1
  269. package/dist/commands/cloud.js.map +0 -1
  270. package/dist/commands/commands.d.ts.map +0 -1
  271. package/dist/commands/commands.js.map +0 -1
  272. package/dist/commands/daemon.d.ts.map +0 -1
  273. package/dist/commands/daemon.js.map +0 -1
  274. package/dist/commands/drive.d.ts.map +0 -1
  275. package/dist/commands/drive.js.map +0 -1
  276. package/dist/commands/exec.d.ts.map +0 -1
  277. package/dist/commands/exec.js.map +0 -1
  278. package/dist/commands/fork.d.ts.map +0 -1
  279. package/dist/commands/fork.js.map +0 -1
  280. package/dist/commands/hooks.d.ts.map +0 -1
  281. package/dist/commands/hooks.js.map +0 -1
  282. package/dist/commands/init.d.ts.map +0 -1
  283. package/dist/commands/init.js.map +0 -1
  284. package/dist/commands/mcp.d.ts.map +0 -1
  285. package/dist/commands/mcp.js.map +0 -1
  286. package/dist/commands/models.d.ts.map +0 -1
  287. package/dist/commands/models.js.map +0 -1
  288. package/dist/commands/packages.d.ts.map +0 -1
  289. package/dist/commands/packages.js.map +0 -1
  290. package/dist/commands/permissions.d.ts.map +0 -1
  291. package/dist/commands/permissions.js.map +0 -1
  292. package/dist/commands/plugins.d.ts.map +0 -1
  293. package/dist/commands/plugins.js.map +0 -1
  294. package/dist/commands/profiles.d.ts.map +0 -1
  295. package/dist/commands/profiles.js.map +0 -1
  296. package/dist/commands/pty.d.ts.map +0 -1
  297. package/dist/commands/pty.js.map +0 -1
  298. package/dist/commands/pull.d.ts.map +0 -1
  299. package/dist/commands/pull.js.map +0 -1
  300. package/dist/commands/push.d.ts +0 -3
  301. package/dist/commands/push.d.ts.map +0 -1
  302. package/dist/commands/push.js +0 -180
  303. package/dist/commands/push.js.map +0 -1
  304. package/dist/commands/refresh-memory.d.ts.map +0 -1
  305. package/dist/commands/refresh-memory.js.map +0 -1
  306. package/dist/commands/resource-view.d.ts.map +0 -1
  307. package/dist/commands/resource-view.js.map +0 -1
  308. package/dist/commands/routines.d.ts.map +0 -1
  309. package/dist/commands/routines.js.map +0 -1
  310. package/dist/commands/rules.d.ts.map +0 -1
  311. package/dist/commands/rules.js.map +0 -1
  312. package/dist/commands/secrets.d.ts.map +0 -1
  313. package/dist/commands/secrets.js.map +0 -1
  314. package/dist/commands/sessions-picker.d.ts.map +0 -1
  315. package/dist/commands/sessions-picker.js.map +0 -1
  316. package/dist/commands/sessions.d.ts.map +0 -1
  317. package/dist/commands/sessions.js.map +0 -1
  318. package/dist/commands/skills.d.ts.map +0 -1
  319. package/dist/commands/skills.js.map +0 -1
  320. package/dist/commands/status.d.ts.map +0 -1
  321. package/dist/commands/status.js.map +0 -1
  322. package/dist/commands/subagents.d.ts.map +0 -1
  323. package/dist/commands/subagents.js.map +0 -1
  324. package/dist/commands/sync.d.ts.map +0 -1
  325. package/dist/commands/sync.js.map +0 -1
  326. package/dist/commands/teams-picker.d.ts.map +0 -1
  327. package/dist/commands/teams-picker.js.map +0 -1
  328. package/dist/commands/teams.d.ts.map +0 -1
  329. package/dist/commands/teams.js.map +0 -1
  330. package/dist/commands/utils.d.ts.map +0 -1
  331. package/dist/commands/utils.js.map +0 -1
  332. package/dist/commands/versions.d.ts.map +0 -1
  333. package/dist/commands/versions.js.map +0 -1
  334. package/dist/commands/view.d.ts.map +0 -1
  335. package/dist/commands/view.js.map +0 -1
  336. package/dist/index.d.ts.map +0 -1
  337. package/dist/index.js.map +0 -1
  338. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  339. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  340. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  341. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  342. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  343. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  344. package/dist/lib/__tests__/exec.test.js +0 -446
  345. package/dist/lib/__tests__/exec.test.js.map +0 -1
  346. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  347. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  348. package/dist/lib/__tests__/git-sync.test.js +0 -138
  349. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  350. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  351. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  352. package/dist/lib/__tests__/hooks.test.js +0 -203
  353. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  354. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  355. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  356. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  357. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  358. package/dist/lib/__tests__/models.test.d.ts +0 -2
  359. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  360. package/dist/lib/__tests__/models.test.js +0 -239
  361. package/dist/lib/__tests__/models.test.js.map +0 -1
  362. package/dist/lib/__tests__/rotate.test.d.ts +0 -2
  363. package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
  364. package/dist/lib/__tests__/rotate.test.js +0 -80
  365. package/dist/lib/__tests__/rotate.test.js.map +0 -1
  366. package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
  367. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
  368. package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
  369. package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
  370. package/dist/lib/__tests__/secrets.test.d.ts +0 -2
  371. package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
  372. package/dist/lib/__tests__/secrets.test.js +0 -90
  373. package/dist/lib/__tests__/secrets.test.js.map +0 -1
  374. package/dist/lib/__tests__/shims.test.d.ts +0 -2
  375. package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
  376. package/dist/lib/__tests__/shims.test.js +0 -39
  377. package/dist/lib/__tests__/shims.test.js.map +0 -1
  378. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  379. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  380. package/dist/lib/__tests__/usage.test.js +0 -220
  381. package/dist/lib/__tests__/usage.test.js.map +0 -1
  382. package/dist/lib/__tests__/versions.test.d.ts +0 -2
  383. package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
  384. package/dist/lib/__tests__/versions.test.js +0 -63
  385. package/dist/lib/__tests__/versions.test.js.map +0 -1
  386. package/dist/lib/agents.d.ts.map +0 -1
  387. package/dist/lib/agents.js.map +0 -1
  388. package/dist/lib/artifact-actions.d.ts.map +0 -1
  389. package/dist/lib/artifact-actions.js.map +0 -1
  390. package/dist/lib/cloud/codex.d.ts.map +0 -1
  391. package/dist/lib/cloud/codex.js.map +0 -1
  392. package/dist/lib/cloud/factory.d.ts.map +0 -1
  393. package/dist/lib/cloud/factory.js.map +0 -1
  394. package/dist/lib/cloud/registry.d.ts.map +0 -1
  395. package/dist/lib/cloud/registry.js.map +0 -1
  396. package/dist/lib/cloud/rush.d.ts.map +0 -1
  397. package/dist/lib/cloud/rush.js.map +0 -1
  398. package/dist/lib/cloud/store.d.ts.map +0 -1
  399. package/dist/lib/cloud/store.js.map +0 -1
  400. package/dist/lib/cloud/stream.d.ts.map +0 -1
  401. package/dist/lib/cloud/stream.js.map +0 -1
  402. package/dist/lib/cloud/types.d.ts.map +0 -1
  403. package/dist/lib/cloud/types.js.map +0 -1
  404. package/dist/lib/commands.d.ts.map +0 -1
  405. package/dist/lib/commands.js.map +0 -1
  406. package/dist/lib/convert.d.ts.map +0 -1
  407. package/dist/lib/convert.js.map +0 -1
  408. package/dist/lib/daemon.d.ts.map +0 -1
  409. package/dist/lib/daemon.js.map +0 -1
  410. package/dist/lib/drive-sync.d.ts.map +0 -1
  411. package/dist/lib/drive-sync.js.map +0 -1
  412. package/dist/lib/exec.d.ts.map +0 -1
  413. package/dist/lib/exec.js.map +0 -1
  414. package/dist/lib/factory.d.ts +0 -57
  415. package/dist/lib/factory.d.ts.map +0 -1
  416. package/dist/lib/factory.js +0 -110
  417. package/dist/lib/factory.js.map +0 -1
  418. package/dist/lib/git.d.ts.map +0 -1
  419. package/dist/lib/git.js.map +0 -1
  420. package/dist/lib/help.d.ts.map +0 -1
  421. package/dist/lib/help.js.map +0 -1
  422. package/dist/lib/hooks.d.ts.map +0 -1
  423. package/dist/lib/hooks.js.map +0 -1
  424. package/dist/lib/manifest.d.ts.map +0 -1
  425. package/dist/lib/manifest.js.map +0 -1
  426. package/dist/lib/markdown.d.ts.map +0 -1
  427. package/dist/lib/markdown.js.map +0 -1
  428. package/dist/lib/mcp.d.ts.map +0 -1
  429. package/dist/lib/mcp.js.map +0 -1
  430. package/dist/lib/memory-compile.d.ts.map +0 -1
  431. package/dist/lib/memory-compile.js.map +0 -1
  432. package/dist/lib/memory.d.ts.map +0 -1
  433. package/dist/lib/memory.js.map +0 -1
  434. package/dist/lib/models.d.ts.map +0 -1
  435. package/dist/lib/models.js.map +0 -1
  436. package/dist/lib/permissions.d.ts.map +0 -1
  437. package/dist/lib/permissions.js.map +0 -1
  438. package/dist/lib/picker.d.ts.map +0 -1
  439. package/dist/lib/picker.js.map +0 -1
  440. package/dist/lib/plugins.d.ts.map +0 -1
  441. package/dist/lib/plugins.js.map +0 -1
  442. package/dist/lib/profiles-keychain.d.ts +0 -3
  443. package/dist/lib/profiles-keychain.d.ts.map +0 -1
  444. package/dist/lib/profiles-keychain.js +0 -10
  445. package/dist/lib/profiles-keychain.js.map +0 -1
  446. package/dist/lib/profiles-presets.d.ts.map +0 -1
  447. package/dist/lib/profiles-presets.js.map +0 -1
  448. package/dist/lib/profiles.d.ts.map +0 -1
  449. package/dist/lib/profiles.js.map +0 -1
  450. package/dist/lib/pty-client.d.ts.map +0 -1
  451. package/dist/lib/pty-client.js.map +0 -1
  452. package/dist/lib/pty-server.d.ts.map +0 -1
  453. package/dist/lib/pty-server.js.map +0 -1
  454. package/dist/lib/registry.d.ts.map +0 -1
  455. package/dist/lib/registry.js.map +0 -1
  456. package/dist/lib/resources.d.ts.map +0 -1
  457. package/dist/lib/resources.js.map +0 -1
  458. package/dist/lib/rotate.d.ts.map +0 -1
  459. package/dist/lib/rotate.js.map +0 -1
  460. package/dist/lib/routines.d.ts.map +0 -1
  461. package/dist/lib/routines.js.map +0 -1
  462. package/dist/lib/runner.d.ts.map +0 -1
  463. package/dist/lib/runner.js.map +0 -1
  464. package/dist/lib/sandbox.d.ts.map +0 -1
  465. package/dist/lib/sandbox.js.map +0 -1
  466. package/dist/lib/scheduler.d.ts.map +0 -1
  467. package/dist/lib/scheduler.js.map +0 -1
  468. package/dist/lib/secrets-bundles.d.ts.map +0 -1
  469. package/dist/lib/secrets-bundles.js.map +0 -1
  470. package/dist/lib/secrets.d.ts +0 -27
  471. package/dist/lib/secrets.d.ts.map +0 -1
  472. package/dist/lib/secrets.js +0 -127
  473. package/dist/lib/secrets.js.map +0 -1
  474. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  475. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  476. package/dist/lib/session/__tests__/db.test.js +0 -54
  477. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  478. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  479. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  480. package/dist/lib/session/__tests__/discover.test.js +0 -63
  481. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  482. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  483. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  484. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  485. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  486. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  487. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  488. package/dist/lib/session/__tests__/render.test.js +0 -602
  489. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  490. package/dist/lib/session/artifacts.d.ts.map +0 -1
  491. package/dist/lib/session/artifacts.js.map +0 -1
  492. package/dist/lib/session/db.d.ts.map +0 -1
  493. package/dist/lib/session/db.js.map +0 -1
  494. package/dist/lib/session/discover.d.ts.map +0 -1
  495. package/dist/lib/session/discover.js.map +0 -1
  496. package/dist/lib/session/parse.d.ts.map +0 -1
  497. package/dist/lib/session/parse.js.map +0 -1
  498. package/dist/lib/session/prompt.d.ts.map +0 -1
  499. package/dist/lib/session/prompt.js.map +0 -1
  500. package/dist/lib/session/prompt.test.d.ts +0 -2
  501. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  502. package/dist/lib/session/prompt.test.js +0 -57
  503. package/dist/lib/session/prompt.test.js.map +0 -1
  504. package/dist/lib/session/render.d.ts.map +0 -1
  505. package/dist/lib/session/render.js.map +0 -1
  506. package/dist/lib/session/team-filter.d.ts.map +0 -1
  507. package/dist/lib/session/team-filter.js.map +0 -1
  508. package/dist/lib/session/team-filter.test.d.ts +0 -2
  509. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  510. package/dist/lib/session/team-filter.test.js +0 -157
  511. package/dist/lib/session/team-filter.test.js.map +0 -1
  512. package/dist/lib/session/types.d.ts.map +0 -1
  513. package/dist/lib/session/types.js.map +0 -1
  514. package/dist/lib/shims.d.ts.map +0 -1
  515. package/dist/lib/shims.js.map +0 -1
  516. package/dist/lib/skills.d.ts.map +0 -1
  517. package/dist/lib/skills.js.map +0 -1
  518. package/dist/lib/state.d.ts.map +0 -1
  519. package/dist/lib/state.js.map +0 -1
  520. package/dist/lib/subagents.d.ts.map +0 -1
  521. package/dist/lib/subagents.js.map +0 -1
  522. package/dist/lib/teams/agents.d.ts.map +0 -1
  523. package/dist/lib/teams/agents.js.map +0 -1
  524. package/dist/lib/teams/api.d.ts.map +0 -1
  525. package/dist/lib/teams/api.js.map +0 -1
  526. package/dist/lib/teams/cloud.d.ts +0 -11
  527. package/dist/lib/teams/cloud.d.ts.map +0 -1
  528. package/dist/lib/teams/cloud.js +0 -169
  529. package/dist/lib/teams/cloud.js.map +0 -1
  530. package/dist/lib/teams/debug.d.ts.map +0 -1
  531. package/dist/lib/teams/debug.js.map +0 -1
  532. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  533. package/dist/lib/teams/file_ops.js.map +0 -1
  534. package/dist/lib/teams/parsers.d.ts.map +0 -1
  535. package/dist/lib/teams/parsers.js.map +0 -1
  536. package/dist/lib/teams/persistence.d.ts.map +0 -1
  537. package/dist/lib/teams/persistence.js.map +0 -1
  538. package/dist/lib/teams/ralph.d.ts +0 -8
  539. package/dist/lib/teams/ralph.d.ts.map +0 -1
  540. package/dist/lib/teams/ralph.js +0 -59
  541. package/dist/lib/teams/ralph.js.map +0 -1
  542. package/dist/lib/teams/registry.d.ts.map +0 -1
  543. package/dist/lib/teams/registry.js.map +0 -1
  544. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  545. package/dist/lib/teams/summarizer.js.map +0 -1
  546. package/dist/lib/template.d.ts.map +0 -1
  547. package/dist/lib/template.js.map +0 -1
  548. package/dist/lib/types.d.ts.map +0 -1
  549. package/dist/lib/types.js.map +0 -1
  550. package/dist/lib/usage.d.ts.map +0 -1
  551. package/dist/lib/usage.js.map +0 -1
  552. package/dist/lib/versions.d.ts.map +0 -1
  553. package/dist/lib/versions.js.map +0 -1
  554. package/scripts/rebuild-sqlite.sh +0 -46
package/dist/lib/shims.js CHANGED
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Shim generation and config symlink management for agent version switching.
3
+ *
4
+ * Shims are small shell scripts placed in ~/.agents/shims/ that resolve the
5
+ * active agent version (project-level or user-default), then exec the real
6
+ * binary. Config isolation is achieved by symlinking ~/.{agent} into the
7
+ * per-version home directory. This module also handles versioned aliases
8
+ * (e.g., claude@2.0.65), PATH setup, conflict detection during migration,
9
+ * and resource diffing between versions.
10
+ */
1
11
  import * as fs from 'fs';
2
12
  import * as path from 'path';
3
13
  import * as os from 'os';
@@ -153,9 +163,18 @@ export async function promptConflictStrategy(conflictInfos) {
153
163
  * v4 — project version marker changed from `.agents-version` to a
154
164
  * root-level `agents.yaml`; shim now skips ~/.agents/agents.yaml
155
165
  * when walking up for a project marker.
166
+ * v5 — emit CODEX_HOME for codex shims so the versioned config (permissions,
167
+ * sandbox_mode, rules/agents-deny.rules) is actually read by the codex
168
+ * binary instead of $HOME/.codex.
169
+ * v6 — hard-disable Codex startup update checks in the generated shims.
156
170
  */
157
- export const SHIM_SCHEMA_VERSION = 4;
171
+ export const SHIM_SCHEMA_VERSION = 6;
172
+ /** Internal marker string used to embed the schema version in shim scripts. */
158
173
  const SHIM_VERSION_MARKER = 'agents-shim-version:';
174
+ /**
175
+ * Generate the full bash shim script for the given agent. The returned string
176
+ * is written to ~/.agents/shims/{cliCommand} and made executable.
177
+ */
159
178
  export function generateShimScript(agent) {
160
179
  const agentConfig = AGENTS[agent];
161
180
  const cliCommand = agentConfig.cliCommand;
@@ -167,7 +186,14 @@ export function generateShimScript(agent) {
167
186
  # live Claude account.
168
187
  export CLAUDE_CONFIG_DIR="$VERSION_DIR/home/${configDirName}"
169
188
  `
170
- : '';
189
+ : agent === 'codex'
190
+ ? `
191
+ # Codex reads its config (approval_policy, sandbox_mode, MCP servers, rules)
192
+ # from CODEX_HOME. Point it at the versioned home so permissions/rules
193
+ # written by agents-cli actually take effect.
194
+ export CODEX_HOME="$VERSION_DIR/home/${configDirName}"
195
+ `
196
+ : '';
171
197
  // Agents that don't natively resolve @-imports in their memory file need
172
198
  // agents-cli to recompile when the user edits a rule/preset file. The
173
199
  // check is fast (sha256 of ~8 small files) and skips the recompile when
@@ -180,19 +206,21 @@ export CLAUDE_CONFIG_DIR="$VERSION_DIR/home/${configDirName}"
180
206
  agents refresh-memory --agent "$AGENT" --agent-version "$VERSION" --quiet 2>/dev/null || true
181
207
  `
182
208
  : '';
209
+ const launchArgs = agent === 'codex' ? ' -c check_for_update_on_startup=false' : '';
183
210
  return `#!/bin/bash
184
211
  # Auto-generated by agents-cli - do not edit
185
212
  # Shim for ${agentConfig.name}
186
213
  # ${SHIM_VERSION_MARKER} ${SHIM_SCHEMA_VERSION}
187
214
 
188
- AGENTS_DIR="$HOME/.agents"
215
+ AGENTS_SYSTEM_DIR="$HOME/.agents-system"
216
+ AGENTS_USER_DIR="$HOME/.agents"
189
217
  AGENT="${agent}"
190
218
  CLI_COMMAND="${cliCommand}"
191
219
 
192
- # Find project agents.yaml walking up from cwd (skip ~/.agents/agents.yaml)
220
+ # Find project agents.yaml walking up from cwd (skip $HOME/.agents-system/agents.yaml)
193
221
  find_project_version() {
194
222
  local dir="$PWD"
195
- local user_agents_yaml="$HOME/.agents/agents.yaml"
223
+ local user_agents_yaml="$AGENTS_SYSTEM_DIR/agents.yaml"
196
224
  while [ "$dir" != "/" ]; do
197
225
  local candidate="$dir/agents.yaml"
198
226
  if [ -f "$candidate" ] && [ "$candidate" != "$user_agents_yaml" ]; then
@@ -215,7 +243,7 @@ find_project_version() {
215
243
 
216
244
  # Resolve version from agents.yaml (user default)
217
245
  resolve_default_version() {
218
- local meta="$AGENTS_DIR/agents.yaml"
246
+ local meta="$AGENTS_USER_DIR/agents.yaml"
219
247
  if [ -f "$meta" ]; then
220
248
  awk -v agent="$AGENT" '
221
249
  /^agents:/ { in_agents=1; next }
@@ -255,7 +283,7 @@ if [ -z "$VERSION" ]; then
255
283
  exit 1
256
284
  fi
257
285
 
258
- VERSION_DIR="$AGENTS_DIR/versions/$AGENT/$VERSION"
286
+ VERSION_DIR="$AGENTS_SYSTEM_DIR/versions/$AGENT/$VERSION"
259
287
  BINARY="$VERSION_DIR/node_modules/.bin/$CLI_COMMAND"
260
288
 
261
289
  # Auto-install if not present
@@ -302,7 +330,7 @@ if [ -n "$PROJECT_AGENTS_DIR" ]; then
302
330
  fi
303
331
  ${refreshMemoryCall}${managedEnv}
304
332
 
305
- exec "$BINARY" "$@"
333
+ exec "$BINARY"${launchArgs} "$@"
306
334
  `;
307
335
  }
308
336
  /**
@@ -341,29 +369,53 @@ export function removeShim(agent) {
341
369
  * v2 — emit CLAUDE_CONFIG_DIR for claude aliases so each version has its
342
370
  * own isolated config/OAuth slot; stamp a version marker so stale
343
371
  * aliases can be detected and regenerated.
372
+ * v3 — emit CODEX_HOME for codex aliases so direct `codex@X` invocations
373
+ * read the versioned permissions/rules instead of $HOME/.codex.
374
+ * v4 — direct aliases read binaries and config homes from ~/.agents-system.
375
+ * v5 — hard-disable Codex startup update checks in versioned aliases.
344
376
  */
345
- export const VERSIONED_ALIAS_SCHEMA_VERSION = 2;
377
+ export const VERSIONED_ALIAS_SCHEMA_VERSION = 5;
378
+ /** Internal marker string used to embed the schema version in versioned alias scripts. */
346
379
  const VERSIONED_ALIAS_VERSION_MARKER = 'agents-versioned-alias-version:';
380
+ // The version string is interpolated into a generated bash script and into
381
+ // a filename. parseAgentSpec / parseVersion already validates this upstream,
382
+ // but generators are also called from internal code paths (e.g., re-emit on
383
+ // schema bump), so re-check here. Mirrors VERSION_RE in versions.ts.
384
+ const ALIAS_VERSION_RE = /^[A-Za-z0-9._+-]{1,64}$/;
385
+ function assertSafeVersion(version) {
386
+ if (!ALIAS_VERSION_RE.test(version)) {
387
+ throw new Error(`Refusing to generate shim for unsafe version: ${JSON.stringify(version)}`);
388
+ }
389
+ }
347
390
  /**
348
391
  * Generate a versioned alias script that directly execs a specific version.
349
392
  * e.g., claude@2.0.65 -> directly runs that version's binary
350
393
  */
351
394
  export function generateVersionedAliasScript(agent, version) {
395
+ assertSafeVersion(version);
352
396
  const agentConfig = AGENTS[agent];
353
397
  const configDirName = `.${agent}`;
354
398
  const managedEnv = agent === 'claude'
355
399
  ? `
356
400
  # Claude stores OAuth credentials in the macOS keychain. Scope them to this
357
401
  # version's config directory so direct aliases also switch the live account.
358
- export CLAUDE_CONFIG_DIR="$HOME/.agents/versions/${agent}/${version}/home/${configDirName}"
402
+ export CLAUDE_CONFIG_DIR="$HOME/.agents-system/versions/${agent}/${version}/home/${configDirName}"
359
403
  `
360
- : '';
404
+ : agent === 'codex'
405
+ ? `
406
+ # Codex reads its config (approval_policy, sandbox_mode, MCP servers, rules)
407
+ # from CODEX_HOME. Point direct aliases at the versioned home so permissions
408
+ # and rules written by agents-cli actually take effect.
409
+ export CODEX_HOME="$HOME/.agents-system/versions/${agent}/${version}/home/${configDirName}"
410
+ `
411
+ : '';
412
+ const launchArgs = agent === 'codex' ? ' -c check_for_update_on_startup=false' : '';
361
413
  return `#!/bin/bash
362
414
  # Auto-generated by agents-cli - do not edit
363
415
  # ${VERSIONED_ALIAS_VERSION_MARKER} ${VERSIONED_ALIAS_SCHEMA_VERSION}
364
416
  # Direct alias for ${agentConfig.name}@${version}
365
417
 
366
- BINARY="$HOME/.agents/versions/${agent}/${version}/node_modules/.bin/${agentConfig.cliCommand}"
418
+ BINARY="$HOME/.agents-system/versions/${agent}/${version}/node_modules/.bin/${agentConfig.cliCommand}"
367
419
 
368
420
  if [ ! -x "$BINARY" ]; then
369
421
  echo "agents: ${agent}@${version} not installed" >&2
@@ -371,7 +423,7 @@ if [ ! -x "$BINARY" ]; then
371
423
  fi
372
424
  ${managedEnv}
373
425
 
374
- exec "$BINARY" "$@"
426
+ exec "$BINARY"${launchArgs} "$@"
375
427
  `;
376
428
  }
377
429
  /**
@@ -394,6 +446,9 @@ export function readVersionedAliasSchemaVersion(agent, version) {
394
446
  return null;
395
447
  }
396
448
  }
449
+ /**
450
+ * True if the on-disk versioned alias matches the current schema version.
451
+ */
397
452
  export function isVersionedAliasCurrent(agent, version) {
398
453
  return readVersionedAliasSchemaVersion(agent, version) === VERSIONED_ALIAS_SCHEMA_VERSION;
399
454
  }
@@ -414,6 +469,9 @@ export function ensureVersionedAliasCurrent(agent, version) {
414
469
  }
415
470
  return 'current';
416
471
  }
472
+ /**
473
+ * Get the filesystem path for a versioned alias script.
474
+ */
417
475
  export function getVersionedAliasPath(agent, version) {
418
476
  return path.join(getShimsDir(), `${AGENTS[agent].cliCommand}@${version}`);
419
477
  }
@@ -422,6 +480,7 @@ export function getVersionedAliasPath(agent, version) {
422
480
  * e.g., claude@2.0.65
423
481
  */
424
482
  export function createVersionedAlias(agent, version) {
483
+ assertSafeVersion(version);
425
484
  ensureAgentsDir();
426
485
  const shimsDir = getShimsDir();
427
486
  const agentConfig = AGENTS[agent];
@@ -586,6 +645,15 @@ export function switchHomeFileSymlinks(agent, version) {
586
645
  const versionsDir = getVersionsDir();
587
646
  const switched = [];
588
647
  const errors = [];
648
+ // For Claude, Claude's binary reads CLAUDE_CONFIG_DIR/.claude.json (INSIDE
649
+ // the per-version .claude dir) — not the home-level file this function
650
+ // manages. Reconcile all installed Claude versions so INSIDE is a symlink
651
+ // to OUTSIDE, making OUTSIDE the single source of truth.
652
+ if (agent === 'claude') {
653
+ const reconcile = ensureAllClaudeInsideSymlinks();
654
+ for (const e of reconcile.errors)
655
+ errors.push(e);
656
+ }
589
657
  for (const fileName of homeFiles) {
590
658
  const globalPath = path.join(home, fileName);
591
659
  const versionFilePath = path.join(versionsDir, agent, version, 'home', fileName);
@@ -629,7 +697,14 @@ export function switchHomeFileSymlinks(agent, version) {
629
697
  else if (stat.isFile()) {
630
698
  // Real file — first-time migration
631
699
  // Read the global file content
632
- const globalContent = JSON.parse(fs.readFileSync(globalPath, 'utf-8'));
700
+ let globalContent;
701
+ try {
702
+ globalContent = JSON.parse(fs.readFileSync(globalPath, 'utf-8'));
703
+ }
704
+ catch (err) {
705
+ errors.push(`${fileName}: Could not parse ${globalPath}: ${err.message}`);
706
+ continue;
707
+ }
633
708
  // Merge auth into ALL installed version files for this agent
634
709
  const agentVersionsDir = path.join(versionsDir, agent);
635
710
  if (fs.existsSync(agentVersionsDir)) {
@@ -674,6 +749,108 @@ export function switchHomeFileSymlinks(agent, version) {
674
749
  }
675
750
  return { switched, errors };
676
751
  }
752
+ /**
753
+ * Claude reads `.claude.json` at `$CLAUDE_CONFIG_DIR/.claude.json`. Our shim
754
+ * points CLAUDE_CONFIG_DIR at `<ver>/home/.claude`, so Claude's real config
755
+ * file lives at `<ver>/home/.claude/.claude.json` (INSIDE), while
756
+ * `switchHomeFileSymlinks` manages `<ver>/home/.claude.json` (OUTSIDE).
757
+ *
758
+ * To keep both views consistent we make INSIDE a symlink to OUTSIDE. Claude's
759
+ * atomic write (`Uf6`) resolves symlinks before the tmp+rename cycle, so the
760
+ * symlink survives across writes and OUTSIDE remains the single source of
761
+ * truth that agents-cli's home-file machinery already manages.
762
+ *
763
+ * This function idempotently reconciles one version:
764
+ * - INSIDE missing: create symlink -> `../.claude.json` (create OUTSIDE if needed).
765
+ * - INSIDE already symlink to OUTSIDE: no-op.
766
+ * - INSIDE is a real file: it's the authoritative auth state (Claude was
767
+ * writing to it). Move its content to OUTSIDE (merging with OUTSIDE,
768
+ * INSIDE wins for `oauthAccount`), then replace INSIDE with the symlink.
769
+ * - Symlink points elsewhere: replace it.
770
+ */
771
+ export function ensureClaudeInsideSymlink(version) {
772
+ const versionsDir = getVersionsDir();
773
+ const versionHome = path.join(versionsDir, 'claude', version, 'home');
774
+ const outsidePath = path.join(versionHome, '.claude.json');
775
+ const insideDir = path.join(versionHome, '.claude');
776
+ const insidePath = path.join(insideDir, '.claude.json');
777
+ const linkTarget = '../.claude.json'; // relative so version dir can be moved
778
+ if (!fs.existsSync(insideDir)) {
779
+ fs.mkdirSync(insideDir, { recursive: true });
780
+ }
781
+ let insideStat = null;
782
+ try {
783
+ insideStat = fs.lstatSync(insidePath);
784
+ }
785
+ catch {
786
+ /* INSIDE does not exist */
787
+ }
788
+ if (insideStat?.isSymbolicLink()) {
789
+ const currentTarget = fs.readlinkSync(insidePath);
790
+ if (currentTarget === linkTarget)
791
+ return;
792
+ // Wrong target — replace.
793
+ if (!fs.existsSync(outsidePath))
794
+ fs.writeFileSync(outsidePath, '{}');
795
+ fs.unlinkSync(insidePath);
796
+ fs.symlinkSync(linkTarget, insidePath);
797
+ return;
798
+ }
799
+ if (insideStat?.isFile()) {
800
+ // INSIDE is the authoritative file — Claude has been reading/writing it.
801
+ // Merge INSIDE into OUTSIDE, with INSIDE winning on every field, then
802
+ // replace INSIDE with a symlink.
803
+ let insideContent = {};
804
+ try {
805
+ insideContent = JSON.parse(fs.readFileSync(insidePath, 'utf-8'));
806
+ }
807
+ catch {
808
+ /* INSIDE corrupt — treat as empty; OUTSIDE preserved as-is */
809
+ }
810
+ let outsideContent = {};
811
+ if (fs.existsSync(outsidePath)) {
812
+ try {
813
+ outsideContent = JSON.parse(fs.readFileSync(outsidePath, 'utf-8'));
814
+ }
815
+ catch {
816
+ /* OUTSIDE corrupt — drop it */
817
+ }
818
+ }
819
+ const merged = { ...outsideContent, ...insideContent };
820
+ fs.writeFileSync(outsidePath, JSON.stringify(merged, null, 2));
821
+ fs.unlinkSync(insidePath);
822
+ fs.symlinkSync(linkTarget, insidePath);
823
+ return;
824
+ }
825
+ // INSIDE missing — ensure OUTSIDE exists, then create symlink.
826
+ if (!fs.existsSync(outsidePath))
827
+ fs.writeFileSync(outsidePath, '{}');
828
+ fs.symlinkSync(linkTarget, insidePath);
829
+ }
830
+ /**
831
+ * Apply `ensureClaudeInsideSymlink` to every installed Claude version.
832
+ * Safe to call repeatedly; per-version calls are idempotent.
833
+ */
834
+ export function ensureAllClaudeInsideSymlinks() {
835
+ const versionsDir = getVersionsDir();
836
+ const claudeVersionsDir = path.join(versionsDir, 'claude');
837
+ const migrated = [];
838
+ const errors = [];
839
+ if (!fs.existsSync(claudeVersionsDir))
840
+ return { migrated, errors };
841
+ for (const entry of fs.readdirSync(claudeVersionsDir, { withFileTypes: true })) {
842
+ if (!entry.isDirectory())
843
+ continue;
844
+ try {
845
+ ensureClaudeInsideSymlink(entry.name);
846
+ migrated.push(entry.name);
847
+ }
848
+ catch (err) {
849
+ errors.push(`${entry.name}: ${err.message}`);
850
+ }
851
+ }
852
+ return { migrated, errors };
853
+ }
677
854
  /**
678
855
  * Get the current config symlink target version, if any.
679
856
  */
@@ -858,6 +1035,37 @@ export function getPathShadowingExecutable(agent) {
858
1035
  }
859
1036
  return null;
860
1037
  }
1038
+ /**
1039
+ * Check if the agent's CLI command is shadowed by a shell alias.
1040
+ *
1041
+ * Shell aliases live in the user's session and aren't visible from a Node.js
1042
+ * child process. We do a best-effort scan of common RC files for `alias
1043
+ * <command>=` patterns. Returns false when detection is inconclusive.
1044
+ */
1045
+ export function hasAliasShadowingShim(agent) {
1046
+ const cliCommand = AGENTS[agent].cliCommand;
1047
+ const HOME = os.homedir();
1048
+ const rcFiles = [
1049
+ path.join(HOME, '.zshrc'),
1050
+ path.join(HOME, '.bashrc'),
1051
+ path.join(HOME, '.bash_profile'),
1052
+ path.join(HOME, '.profile'),
1053
+ ];
1054
+ const pattern = new RegExp(`^\\s*alias\\s+${cliCommand}\\s*=`, 'm');
1055
+ for (const rcFile of rcFiles) {
1056
+ try {
1057
+ if (!fs.existsSync(rcFile))
1058
+ continue;
1059
+ const content = fs.readFileSync(rcFile, 'utf-8');
1060
+ if (pattern.test(content))
1061
+ return true;
1062
+ }
1063
+ catch {
1064
+ // unreadable rc file — skip
1065
+ }
1066
+ }
1067
+ return false;
1068
+ }
861
1069
  /**
862
1070
  * Check if shims directory is in PATH.
863
1071
  */
@@ -866,11 +1074,56 @@ export function isShimsInPath() {
866
1074
  const pathDirs = (process.env.PATH || '').split(path.delimiter);
867
1075
  return pathDirs.some((dir) => path.resolve(dir) === path.resolve(shimsDir));
868
1076
  }
1077
+ function isShimPathCommandLine(line, shimsDir) {
1078
+ const trimmed = line.trim();
1079
+ if (trimmed.startsWith('#')) {
1080
+ return false;
1081
+ }
1082
+ const normalized = trimmed.replace(/['"]/g, '');
1083
+ const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
1084
+ const exactMarkers = [
1085
+ shimsDir,
1086
+ '$HOME/.agents-system/shims',
1087
+ '${HOME}/.agents-system/shims',
1088
+ '~/.agents-system/shims',
1089
+ '$HOME/.agents/shims',
1090
+ '${HOME}/.agents/shims',
1091
+ '~/.agents/shims',
1092
+ ];
1093
+ const markerRegexes = exactMarkers.map((marker) => new RegExp(`${escapeRegex(marker)}(?=$|[:\\s])`));
1094
+ const suffixRegexes = [
1095
+ /\/\.agents-system\/shims(?=$|[:\s])/,
1096
+ /\/\.agents\/shims(?=$|[:\s])/,
1097
+ ];
1098
+ const touchesShimPath = [...markerRegexes, ...suffixRegexes].some((pattern) => pattern.test(normalized));
1099
+ if (!touchesShimPath) {
1100
+ return false;
1101
+ }
1102
+ return trimmed.startsWith('export PATH=') || trimmed.startsWith('fish_add_path ');
1103
+ }
1104
+ function stripShimPathLines(content, shimsDir) {
1105
+ const lines = content.split('\n');
1106
+ const kept = [];
1107
+ for (let i = 0; i < lines.length; i++) {
1108
+ const line = lines[i];
1109
+ if (line.trim() === '# agents-cli: version-managed agent CLIs' &&
1110
+ i + 1 < lines.length &&
1111
+ isShimPathCommandLine(lines[i + 1], shimsDir)) {
1112
+ i++;
1113
+ continue;
1114
+ }
1115
+ if (isShimPathCommandLine(line, shimsDir)) {
1116
+ continue;
1117
+ }
1118
+ kept.push(line);
1119
+ }
1120
+ return kept.join('\n').replace(/\n{3,}/g, '\n\n');
1121
+ }
869
1122
  /**
870
1123
  * Get the shell rc file path for the current shell.
871
1124
  */
872
- function getShellRcFile() {
873
- const shell = process.env.SHELL || '/bin/bash';
1125
+ function getShellRcFile(overrides) {
1126
+ const shell = overrides?.shell || process.env.SHELL || '/bin/bash';
874
1127
  const shellName = path.basename(shell);
875
1128
  let rcFile;
876
1129
  switch (shellName) {
@@ -887,7 +1140,7 @@ function getShellRcFile() {
887
1140
  }
888
1141
  return {
889
1142
  rcFile,
890
- rcPath: path.join(os.homedir(), rcFile),
1143
+ rcPath: path.join(overrides?.homeDir || os.homedir(), rcFile),
891
1144
  shell: shellName,
892
1145
  };
893
1146
  }
@@ -901,7 +1154,7 @@ export function getPathSetupInstructions() {
901
1154
  return `Add to ~/.config/fish/config.fish:
902
1155
  fish_add_path ${shimsDir}`;
903
1156
  }
904
- return `Add to ~/${rcFile} (BEFORE any nvm/node setup):
1157
+ return `Add to ~/${rcFile} (AFTER any nvm/node setup):
905
1158
  export PATH="${shimsDir}:$PATH"
906
1159
 
907
1160
  IMPORTANT: Shims must come FIRST in PATH to override global installs.
@@ -913,9 +1166,9 @@ Then restart your shell or run:
913
1166
  * Add shims directory to shell PATH configuration.
914
1167
  * Returns true if added, false if already present or failed.
915
1168
  */
916
- export function addShimsToPath() {
917
- const shimsDir = getShimsDir();
918
- const { rcFile, rcPath, shell } = getShellRcFile();
1169
+ export function addShimsToPath(overrides) {
1170
+ const shimsDir = overrides?.shimsDir || getShimsDir();
1171
+ const { rcFile, rcPath, shell } = getShellRcFile(overrides);
919
1172
  // Read current rc file content
920
1173
  let content = '';
921
1174
  try {
@@ -926,21 +1179,17 @@ export function addShimsToPath() {
926
1179
  catch (err) {
927
1180
  return { success: false, error: `Could not read ${rcFile}: ${err.message}` };
928
1181
  }
929
- // Check if shims path already in file
930
- if (content.includes(shimsDir) || content.includes('$HOME/.agents/shims')) {
931
- return { success: true, alreadyPresent: true, rcFile };
932
- }
933
- // Generate the export line
934
- let exportLine;
1182
+ // Generate the canonical PATH block.
1183
+ let exportBlock;
935
1184
  if (shell === 'fish') {
936
- exportLine = `\n# agents-cli: version-managed agent CLIs\nfish_add_path ${shimsDir}\n`;
1185
+ exportBlock = `# agents-cli: version-managed agent CLIs\nfish_add_path ${shimsDir}\n`;
937
1186
  }
938
1187
  else {
939
- exportLine = `\n# agents-cli: version-managed agent CLIs\nexport PATH="${shimsDir}:$PATH"\n`;
1188
+ exportBlock = `# agents-cli: version-managed agent CLIs\nexport PATH="${shimsDir}:$PATH"\n`;
940
1189
  }
941
- // Find insertion point - BEFORE nvm/node setup if possible
942
- // Look for common patterns that should come AFTER our shims
943
- const insertBeforePatterns = [
1190
+ const contentWithoutShimLines = stripShimPathLines(content, shimsDir);
1191
+ // Find insertion point - AFTER node/nvm/fnm setup if present, otherwise append.
1192
+ const insertAfterPatterns = [
944
1193
  /^export NVM_DIR=/m,
945
1194
  /^source.*nvm/m,
946
1195
  /^\[ -s.*nvm/m,
@@ -949,18 +1198,14 @@ export function addShimsToPath() {
949
1198
  /^export PATH.*npm/m,
950
1199
  ];
951
1200
  let insertIndex = -1;
952
- for (const pattern of insertBeforePatterns) {
953
- const match = content.match(pattern);
954
- if (match && match.index !== undefined) {
955
- // Find start of this line
956
- let lineStart = match.index;
957
- while (lineStart > 0 && content[lineStart - 1] !== '\n') {
958
- lineStart--;
959
- }
960
- if (insertIndex === -1 || lineStart < insertIndex) {
961
- insertIndex = lineStart;
962
- }
1201
+ const lines = contentWithoutShimLines.split('\n');
1202
+ let offset = 0;
1203
+ for (const line of lines) {
1204
+ const lineWithNewline = `${line}\n`;
1205
+ if (insertAfterPatterns.some((pattern) => pattern.test(line))) {
1206
+ insertIndex = offset + lineWithNewline.length;
963
1207
  }
1208
+ offset += lineWithNewline.length;
964
1209
  }
965
1210
  // Write the updated content
966
1211
  try {
@@ -971,12 +1216,19 @@ export function addShimsToPath() {
971
1216
  }
972
1217
  let newContent;
973
1218
  if (insertIndex >= 0) {
974
- // Insert before nvm/node setup (handles index 0 correctly)
975
- newContent = content.slice(0, insertIndex) + exportLine + content.slice(insertIndex);
1219
+ // Insert after the last node/nvm/fnm-related line so our prepend wins.
1220
+ const before = contentWithoutShimLines.slice(0, insertIndex);
1221
+ const separator = before.length > 0 && !before.endsWith('\n\n') ? '\n' : '';
1222
+ newContent = before + separator + exportBlock + contentWithoutShimLines.slice(insertIndex);
976
1223
  }
977
1224
  else {
978
1225
  // Append to end
979
- newContent = content + exportLine;
1226
+ const separator = contentWithoutShimLines.length > 0 && !contentWithoutShimLines.endsWith('\n') ? '\n' : '';
1227
+ newContent = contentWithoutShimLines + separator + exportBlock;
1228
+ }
1229
+ newContent = newContent.replace(/\n{2,}$/g, '\n');
1230
+ if (newContent === content) {
1231
+ return { success: true, alreadyPresent: true, rcFile };
980
1232
  }
981
1233
  fs.writeFileSync(rcPath, newContent, 'utf-8');
982
1234
  return { success: true, rcFile };
@@ -985,6 +1237,17 @@ export function addShimsToPath() {
985
1237
  return { success: false, error: `Could not write ${rcFile}: ${err.message}` };
986
1238
  }
987
1239
  }
1240
+ export function listAgentsWithInstalledVersions() {
1241
+ const versionsDir = getVersionsDir();
1242
+ if (!fs.existsSync(versionsDir)) {
1243
+ return [];
1244
+ }
1245
+ const entries = fs.readdirSync(versionsDir, { withFileTypes: true });
1246
+ return entries
1247
+ .filter((entry) => entry.isDirectory() && AGENTS[entry.name])
1248
+ .map((entry) => entry.name)
1249
+ .filter((agent) => fs.readdirSync(path.join(versionsDir, agent), { withFileTypes: true }).some((entry) => entry.isDirectory()));
1250
+ }
988
1251
  /**
989
1252
  * Create shims for all installed agents.
990
1253
  */
@@ -1167,4 +1430,3 @@ export function copyResourcesToVersion(agent, fromVersion, toVersion, diff) {
1167
1430
  }
1168
1431
  }
1169
1432
  }
1170
- //# sourceMappingURL=shims.js.map
@@ -1,4 +1,13 @@
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
+ */
1
9
  import type { AgentId, SkillMetadata, InstalledSkill } from './types.js';
10
+ /** User-scoped skills dir (~/.agents/skills/). Used for installs. */
2
11
  export declare function getSkillsDir(): string;
3
12
  export declare function ensureCentralSkillsDir(): void;
4
13
  export declare function getAgentSkillsDir(agentId: AgentId): string;
@@ -41,6 +50,12 @@ export interface DiscoveredSkill {
41
50
  ruleCount: number;
42
51
  validation: ValidationResult;
43
52
  parseError?: string;
53
+ /**
54
+ * Which repo the skill was discovered in. `undefined` means the primary
55
+ * ~/.agents/ repo; otherwise the alias of an extra repo registered via
56
+ * `agents repo add`. Primary wins on name collisions.
57
+ */
58
+ source?: string;
44
59
  }
45
60
  export declare function discoverSkillsFromRepo(repoPath: string): DiscoveredSkill[];
46
61
  export declare function installSkill(sourcePath: string, skillName: string, agents: AgentId[], method?: 'symlink' | 'copy'): {
@@ -58,9 +73,20 @@ export declare function skillExists(agentId: AgentId, skillName: string): boolea
58
73
  */
59
74
  export declare function skillContentMatches(agentId: AgentId, skillName: string, sourcePath: string): boolean;
60
75
  /**
61
- * List skill names in the central ~/.agents/skills/ directory.
76
+ * List skill names from user (~/.agents/skills/) and system (~/.agents-system/skills/) dirs.
77
+ * User dir takes priority; deduplication preserves first occurrence.
62
78
  */
63
79
  export declare function listCentralSkills(): string[];
80
+ /**
81
+ * Resolve a skill name to its source directory. Searches user dir first,
82
+ * then system dir, then extra repos. Returns null if no source has a SKILL.md.
83
+ */
84
+ export declare function resolveSkillSourcePath(skillName: string): string | null;
85
+ /**
86
+ * Union of skill names available across the primary and all enabled extras.
87
+ * Primary wins on name collision.
88
+ */
89
+ export declare function listAllSkills(): string[];
64
90
  /**
65
91
  * Path to the skills dir of a specific version home (not the active one).
66
92
  */
@@ -131,4 +157,3 @@ export declare function installSkillCentrally(sourcePath: string, skillName: str
131
157
  error?: string;
132
158
  warnings?: string[];
133
159
  };
134
- //# sourceMappingURL=skills.d.ts.map