@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
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Hook predicate evaluator.
3
+ *
4
+ * Evaluates the optional `matches:` block on a hook manifest entry against
5
+ * the runtime input passed by the agent CLI on a hook event. All declared
6
+ * predicates AND together — the hook fires only if every one passes.
7
+ *
8
+ * Empty/missing matches => always passes (backward compat with hooks
9
+ * authored before predicate support).
10
+ *
11
+ * Used at hook-fire time by either:
12
+ * (a) generated hook wrappers we install alongside the script, or
13
+ * (b) the script itself, by calling shouldFire() with parsed JSON input.
14
+ */
15
+ import type { HookMatches } from '../types.js';
16
+ /** Runtime context passed to a hook by the agent CLI. */
17
+ export interface HookInput {
18
+ hook_event_name?: string;
19
+ prompt?: string;
20
+ tool_name?: string;
21
+ tool_args?: unknown;
22
+ cwd?: string;
23
+ }
24
+ /**
25
+ * Decide whether a hook with the given match config should fire on this input.
26
+ * Pure function — no side effects, no IO except git/cwd checks for predicates
27
+ * that explicitly require them.
28
+ *
29
+ * Returns true if the hook should fire (all declared predicates pass), false
30
+ * if it should be skipped.
31
+ */
32
+ export declare function shouldFire(matches: HookMatches | undefined, input: HookInput): boolean;
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Hook predicate evaluator.
3
+ *
4
+ * Evaluates the optional `matches:` block on a hook manifest entry against
5
+ * the runtime input passed by the agent CLI on a hook event. All declared
6
+ * predicates AND together — the hook fires only if every one passes.
7
+ *
8
+ * Empty/missing matches => always passes (backward compat with hooks
9
+ * authored before predicate support).
10
+ *
11
+ * Used at hook-fire time by either:
12
+ * (a) generated hook wrappers we install alongside the script, or
13
+ * (b) the script itself, by calling shouldFire() with parsed JSON input.
14
+ */
15
+ import * as fs from 'fs';
16
+ import * as path from 'path';
17
+ import { execSync } from 'child_process';
18
+ function arrayOf(v) {
19
+ if (v === undefined)
20
+ return [];
21
+ return Array.isArray(v) ? v : [v];
22
+ }
23
+ function isGitDirty(cwd) {
24
+ try {
25
+ const out = execSync('git status --porcelain', {
26
+ cwd,
27
+ stdio: ['ignore', 'pipe', 'ignore'],
28
+ encoding: 'utf-8',
29
+ });
30
+ return out.trim().length > 0;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ function findProjectRoot(start) {
37
+ let dir = path.resolve(start);
38
+ while (true) {
39
+ if (fs.existsSync(path.join(dir, '.git')))
40
+ return dir;
41
+ const parent = path.dirname(dir);
42
+ if (parent === dir)
43
+ return null;
44
+ dir = parent;
45
+ }
46
+ }
47
+ /**
48
+ * Decide whether a hook with the given match config should fire on this input.
49
+ * Pure function — no side effects, no IO except git/cwd checks for predicates
50
+ * that explicitly require them.
51
+ *
52
+ * Returns true if the hook should fire (all declared predicates pass), false
53
+ * if it should be skipped.
54
+ */
55
+ export function shouldFire(matches, input) {
56
+ if (!matches)
57
+ return true;
58
+ const cwd = input.cwd || process.cwd();
59
+ if (matches.prompt_contains !== undefined) {
60
+ const prompt = input.prompt ?? '';
61
+ if (!prompt.includes(matches.prompt_contains))
62
+ return false;
63
+ }
64
+ if (matches.prompt_matches !== undefined) {
65
+ const prompt = input.prompt ?? '';
66
+ let re;
67
+ try {
68
+ re = new RegExp(matches.prompt_matches);
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ if (!re.test(prompt))
74
+ return false;
75
+ }
76
+ if (matches.tool_name !== undefined) {
77
+ const allowed = arrayOf(matches.tool_name);
78
+ if (allowed.length > 0) {
79
+ if (!input.tool_name)
80
+ return false;
81
+ if (!allowed.includes(input.tool_name))
82
+ return false;
83
+ }
84
+ }
85
+ if (matches.tool_args_match !== undefined) {
86
+ const serialized = typeof input.tool_args === 'string'
87
+ ? input.tool_args
88
+ : JSON.stringify(input.tool_args ?? '');
89
+ let re;
90
+ try {
91
+ re = new RegExp(matches.tool_args_match);
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ if (!re.test(serialized))
97
+ return false;
98
+ }
99
+ if (matches.cwd_includes !== undefined) {
100
+ const needles = arrayOf(matches.cwd_includes);
101
+ if (needles.length > 0) {
102
+ const hit = needles.some((n) => cwd.includes(n));
103
+ if (!hit)
104
+ return false;
105
+ }
106
+ }
107
+ if (matches.project_has !== undefined) {
108
+ const root = findProjectRoot(cwd);
109
+ if (!root)
110
+ return false;
111
+ if (!fs.existsSync(path.join(root, matches.project_has)))
112
+ return false;
113
+ }
114
+ if (matches.git_dirty !== undefined) {
115
+ const dirty = isGitDirty(cwd);
116
+ if (matches.git_dirty !== dirty)
117
+ return false;
118
+ }
119
+ return true;
120
+ }
@@ -1,3 +1,12 @@
1
+ /**
2
+ * Hook management -- discovery, registration, and syncing of event hooks.
3
+ *
4
+ * Hooks are shell scripts in ~/.agents/hooks/ that fire on agent events
5
+ * (tool calls, session start, etc.). Each hook directory contains a manifest
6
+ * (agents.yaml) declaring events, matchers, and timeout. This module handles
7
+ * parsing those manifests, registering hooks into agent-native settings files,
8
+ * and syncing them across version switches.
9
+ */
1
10
  import type { AgentId, InstalledHook, ManifestHook } from './types.js';
2
11
  export type HookEntry = {
3
12
  name: string;
@@ -93,12 +102,17 @@ export declare function installHooksCentrally(source: string): Promise<{
93
102
  errors: string[];
94
103
  }>;
95
104
  /**
96
- * List hooks from central ~/.agents/hooks/ directory.
105
+ * List hooks from user (~/.agents/hooks/) and system (~/.agents-system/hooks/) dirs.
106
+ * User dir takes priority; deduplication preserves first occurrence.
97
107
  */
98
108
  export declare function listCentralHooks(): HookEntry[];
99
109
  /**
100
- * Parse ~/.agents/hooks.yaml manifest.
101
- * Returns hook definitions with lifecycle event metadata.
110
+ * Parse hooks.yaml manifests. Reads BOTH system (~/.agents-system/hooks.yaml)
111
+ * and user (~/.agents/hooks.yaml), merging with user-wins-on-key-collision
112
+ * precedence. A user entry with `enabled: false` disables the system-shipped
113
+ * hook of the same name without forking the system file.
114
+ *
115
+ * Hooks marked `enabled: false` are dropped from the returned map.
102
116
  */
103
117
  export declare function parseHookManifest(): Record<string, ManifestHook>;
104
118
  /**
@@ -113,4 +127,3 @@ export declare function registerHooksToSettings(agentId: AgentId, versionHome: s
113
127
  registered: string[];
114
128
  errors: string[];
115
129
  };
116
- //# sourceMappingURL=hooks.d.ts.map
package/dist/lib/hooks.js CHANGED
@@ -1,9 +1,21 @@
1
+ /**
2
+ * Hook management -- discovery, registration, and syncing of event hooks.
3
+ *
4
+ * Hooks are shell scripts in ~/.agents/hooks/ that fire on agent events
5
+ * (tool calls, session start, etc.). Each hook directory contains a manifest
6
+ * (agents.yaml) declaring events, matchers, and timeout. This module handles
7
+ * parsing those manifests, registering hooks into agent-native settings files,
8
+ * and syncing them across version switches.
9
+ */
1
10
  import * as fs from 'fs';
2
11
  import * as path from 'path';
3
12
  import * as yaml from 'yaml';
4
13
  import * as TOML from 'smol-toml';
5
14
  import { AGENTS, HOOKS_CAPABLE_AGENTS } from './agents.js';
6
- import { getAgentsDir, getHooksDir as getCentralHooksDir, getProjectAgentsDir } from './state.js';
15
+ import { supports, explainSkip } from './capabilities.js';
16
+ import { setGeminiAutoUpdateDisabled, updateGeminiSettings } from './gemini-settings.js';
17
+ import { getAgentsDir, getHooksDir as getSystemHooksDir, getUserHooksDir, getUserAgentsDir, getProjectAgentsDir } from './state.js';
18
+ function getCentralHooksDir() { return getUserHooksDir(); }
7
19
  import { getEffectiveHome, getVersionHomePath, listInstalledVersions } from './versions.js';
8
20
  const SCRIPT_EXTENSIONS = new Set([
9
21
  '.sh',
@@ -329,6 +341,10 @@ export function diffVersionHooks(agent, version) {
329
341
  * Install a single hook from central into a specific version home.
330
342
  */
331
343
  export function installHookToVersion(agent, version, hookName) {
344
+ const gate = supports(agent, 'hooks', version);
345
+ if (!gate.ok) {
346
+ return { success: false, error: explainSkip(agent, 'hooks', gate, version) };
347
+ }
332
348
  const central = listHookEntriesFromDir(getCentralHooksDir()).find((e) => e.name === hookName);
333
349
  if (!central) {
334
350
  return { success: false, error: `Hook '${hookName}' not found in central` };
@@ -464,28 +480,56 @@ export async function installHooksCentrally(source) {
464
480
  return { installed, errors };
465
481
  }
466
482
  /**
467
- * List hooks from central ~/.agents/hooks/ directory.
483
+ * List hooks from user (~/.agents/hooks/) and system (~/.agents-system/hooks/) dirs.
484
+ * User dir takes priority; deduplication preserves first occurrence.
468
485
  */
469
486
  export function listCentralHooks() {
470
- return listHookEntriesFromDir(getCentralHooksDir());
487
+ const seen = new Set();
488
+ const results = [];
489
+ for (const dir of [getUserHooksDir(), getSystemHooksDir()]) {
490
+ for (const entry of listHookEntriesFromDir(dir)) {
491
+ if (!seen.has(entry.name)) {
492
+ seen.add(entry.name);
493
+ results.push(entry);
494
+ }
495
+ }
496
+ }
497
+ return results;
471
498
  }
472
499
  /**
473
- * Parse ~/.agents/hooks.yaml manifest.
474
- * Returns hook definitions with lifecycle event metadata.
500
+ * Parse hooks.yaml manifests. Reads BOTH system (~/.agents-system/hooks.yaml)
501
+ * and user (~/.agents/hooks.yaml), merging with user-wins-on-key-collision
502
+ * precedence. A user entry with `enabled: false` disables the system-shipped
503
+ * hook of the same name without forking the system file.
504
+ *
505
+ * Hooks marked `enabled: false` are dropped from the returned map.
475
506
  */
476
507
  export function parseHookManifest() {
477
- const manifestPath = path.join(getAgentsDir(), 'hooks.yaml');
478
- if (!fs.existsSync(manifestPath)) {
479
- return {};
480
- }
481
- try {
482
- const content = fs.readFileSync(manifestPath, 'utf-8');
483
- const parsed = yaml.parse(content);
484
- return parsed || {};
508
+ const merged = {};
509
+ // System first (lower precedence), user second (overrides).
510
+ for (const dir of [getAgentsDir(), getUserAgentsDir()]) {
511
+ const manifestPath = path.join(dir, 'hooks.yaml');
512
+ if (!fs.existsSync(manifestPath))
513
+ continue;
514
+ try {
515
+ const content = fs.readFileSync(manifestPath, 'utf-8');
516
+ const parsed = yaml.parse(content);
517
+ if (!parsed)
518
+ continue;
519
+ for (const [name, def] of Object.entries(parsed)) {
520
+ merged[name] = def;
521
+ }
522
+ }
523
+ catch {
524
+ /* skip unreadable manifest, keep going */
525
+ }
485
526
  }
486
- catch {
487
- return {};
527
+ // Strip disabled hooks so they never reach the registrar.
528
+ for (const [name, def] of Object.entries(merged)) {
529
+ if (def.enabled === false)
530
+ delete merged[name];
488
531
  }
532
+ return merged;
489
533
  }
490
534
  // Codex events that support a matcher field (matches tool name or session type).
491
535
  // UserPromptSubmit and Stop never include a matcher.
@@ -549,8 +593,6 @@ function registerHooksForClaude(versionHome, manifest, agentsDir) {
549
593
  const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
550
594
  const currentManifestPaths = new Set();
551
595
  for (const hookDef of Object.values(manifest)) {
552
- if (hookDef.agents && !hookDef.agents.includes('claude'))
553
- continue;
554
596
  if (!hookDef.events || hookDef.events.length === 0)
555
597
  continue;
556
598
  currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
@@ -573,8 +615,6 @@ function registerHooksForClaude(versionHome, manifest, agentsDir) {
573
615
  hooks[event] = eventEntries.filter((g) => g.hooks && g.hooks.length > 0);
574
616
  }
575
617
  for (const [name, hookDef] of Object.entries(manifest)) {
576
- if (hookDef.agents && !hookDef.agents.includes('claude'))
577
- continue;
578
618
  if (!hookDef.events || hookDef.events.length === 0)
579
619
  continue;
580
620
  const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
@@ -645,8 +685,6 @@ function registerHooksForCodex(versionHome, manifest, agentsDir) {
645
685
  const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
646
686
  const currentManifestPaths = new Set();
647
687
  for (const hookDef of Object.values(manifest)) {
648
- if (hookDef.agents && !hookDef.agents.includes('codex'))
649
- continue;
650
688
  if (!hookDef.events || hookDef.events.length === 0)
651
689
  continue;
652
690
  currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
@@ -663,8 +701,6 @@ function registerHooksForCodex(versionHome, manifest, agentsDir) {
663
701
  hooksFile.hooks[event] = eventGroups.filter((g) => g.hooks && g.hooks.length > 0);
664
702
  }
665
703
  for (const [name, hookDef] of Object.entries(manifest)) {
666
- if (hookDef.agents && !hookDef.agents.includes('codex'))
667
- continue;
668
704
  if (!hookDef.events || hookDef.events.length === 0)
669
705
  continue;
670
706
  const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
@@ -746,92 +782,74 @@ function registerHooksForCodex(versionHome, manifest, agentsDir) {
746
782
  function registerHooksForGemini(versionHome, manifest, agentsDir) {
747
783
  const registered = [];
748
784
  const errors = [];
749
- const configDir = path.join(versionHome, '.gemini');
750
- const settingsPath = path.join(configDir, 'settings.json');
751
- let config = {};
752
- if (fs.existsSync(settingsPath)) {
753
- try {
754
- config = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
755
- }
756
- catch {
757
- errors.push('Failed to parse gemini settings.json');
758
- return { registered, errors };
759
- }
760
- }
761
- if (!config.hooks || typeof config.hooks !== 'object') {
762
- config.hooks = {};
763
- }
764
- const hooks = config.hooks;
765
- // Build set of current manifest command paths for gemini to GC stale entries
766
- const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
767
- const currentManifestPaths = new Set();
768
- for (const hookDef of Object.values(manifest)) {
769
- if (hookDef.agents && !hookDef.agents.includes('gemini'))
770
- continue;
771
- if (!hookDef.events || hookDef.events.length === 0)
772
- continue;
773
- currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
774
- }
775
- // Remove stale entries
776
- for (const eventEntries of Object.values(hooks)) {
777
- if (!Array.isArray(eventEntries))
778
- continue;
779
- for (const group of eventEntries) {
780
- if (!group.hooks)
781
- continue;
782
- group.hooks = group.hooks.filter((h) => !h.command.startsWith(managedHooksPrefix) || currentManifestPaths.has(h.command));
783
- }
784
- }
785
- for (const [event, eventEntries] of Object.entries(hooks)) {
786
- if (!Array.isArray(eventEntries))
787
- continue;
788
- hooks[event] = eventEntries.filter((g) => g.hooks && g.hooks.length > 0);
789
- }
790
- for (const [name, hookDef] of Object.entries(manifest)) {
791
- if (hookDef.agents && !hookDef.agents.includes('gemini'))
792
- continue;
793
- if (!hookDef.events || hookDef.events.length === 0)
794
- continue;
795
- const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
796
- if (!fs.existsSync(commandPath)) {
797
- errors.push(`${name}: script not found at ${commandPath}`);
798
- continue;
799
- }
800
- // Gemini timeouts are in milliseconds; manifest timeouts are seconds.
801
- const timeoutMs = (hookDef.timeout || 600) * 1000;
802
- for (const event of hookDef.events) {
803
- const geminiEvent = GEMINI_EVENT_MAP[event] ?? event;
804
- if (!hooks[geminiEvent]) {
805
- hooks[geminiEvent] = [];
785
+ const settingsPath = path.join(versionHome, '.gemini', 'settings.json');
786
+ try {
787
+ updateGeminiSettings(settingsPath, (config) => {
788
+ setGeminiAutoUpdateDisabled(config);
789
+ if (!config.hooks || typeof config.hooks !== 'object') {
790
+ config.hooks = {};
806
791
  }
807
- const eventEntries = hooks[geminiEvent];
808
- const matcher = hookDef.matcher || '';
809
- let matcherGroup = eventEntries.find((e) => (e.matcher || '') === matcher);
810
- if (!matcherGroup) {
811
- matcherGroup = { matcher, hooks: [] };
812
- eventEntries.push(matcherGroup);
792
+ const hooks = config.hooks;
793
+ const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
794
+ const currentManifestPaths = new Set();
795
+ for (const hookDef of Object.values(manifest)) {
796
+ if (!hookDef.events || hookDef.events.length === 0)
797
+ continue;
798
+ currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
813
799
  }
814
- if (!matcherGroup.hooks) {
815
- matcherGroup.hooks = [];
800
+ for (const eventEntries of Object.values(hooks)) {
801
+ if (!Array.isArray(eventEntries))
802
+ continue;
803
+ for (const group of eventEntries) {
804
+ if (!group.hooks)
805
+ continue;
806
+ group.hooks = group.hooks.filter((h) => !h.command.startsWith(managedHooksPrefix) || currentManifestPaths.has(h.command));
807
+ }
816
808
  }
817
- const existingIdx = matcherGroup.hooks.findIndex((h) => h.command === commandPath);
818
- const hookEntry = { name, type: 'command', command: commandPath, timeout: timeoutMs };
819
- if (existingIdx >= 0) {
820
- matcherGroup.hooks[existingIdx] = hookEntry;
809
+ for (const [event, eventEntries] of Object.entries(hooks)) {
810
+ if (!Array.isArray(eventEntries))
811
+ continue;
812
+ hooks[event] = eventEntries.filter((g) => g.hooks && g.hooks.length > 0);
821
813
  }
822
- else {
823
- matcherGroup.hooks.push(hookEntry);
814
+ for (const [name, hookDef] of Object.entries(manifest)) {
815
+ if (!hookDef.events || hookDef.events.length === 0)
816
+ continue;
817
+ const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
818
+ if (!fs.existsSync(commandPath)) {
819
+ errors.push(`${name}: script not found at ${commandPath}`);
820
+ continue;
821
+ }
822
+ const timeoutMs = (hookDef.timeout || 600) * 1000;
823
+ for (const event of hookDef.events) {
824
+ const geminiEvent = GEMINI_EVENT_MAP[event] ?? event;
825
+ if (!hooks[geminiEvent]) {
826
+ hooks[geminiEvent] = [];
827
+ }
828
+ const eventEntries = hooks[geminiEvent];
829
+ const matcher = hookDef.matcher || '';
830
+ let matcherGroup = eventEntries.find((e) => (e.matcher || '') === matcher);
831
+ if (!matcherGroup) {
832
+ matcherGroup = { matcher, hooks: [] };
833
+ eventEntries.push(matcherGroup);
834
+ }
835
+ if (!matcherGroup.hooks) {
836
+ matcherGroup.hooks = [];
837
+ }
838
+ const existingIdx = matcherGroup.hooks.findIndex((h) => h.command === commandPath);
839
+ const hookEntry = { name, type: 'command', command: commandPath, timeout: timeoutMs };
840
+ if (existingIdx >= 0) {
841
+ matcherGroup.hooks[existingIdx] = hookEntry;
842
+ }
843
+ else {
844
+ matcherGroup.hooks.push(hookEntry);
845
+ }
846
+ registered.push(`${name} -> ${geminiEvent}`);
847
+ }
824
848
  }
825
- registered.push(`${name} -> ${geminiEvent}`);
826
- }
827
- }
828
- try {
829
- fs.mkdirSync(configDir, { recursive: true });
830
- fs.writeFileSync(settingsPath, JSON.stringify(config, null, 2), 'utf-8');
849
+ });
831
850
  }
832
851
  catch (err) {
833
852
  errors.push(`Failed to write gemini settings.json: ${err.message}`);
834
853
  }
835
854
  return { registered, errors };
836
855
  }
837
- //# sourceMappingURL=hooks.js.map
@@ -1,8 +1,13 @@
1
1
  import type { Manifest } from './types.js';
2
+ /** Canonical filename for the manifest in any agents repo or project root. */
2
3
  export declare const MANIFEST_FILENAME = "agents.yaml";
4
+ /** Parse a YAML string into a typed Manifest object. */
3
5
  export declare function parseManifest(content: string): Manifest;
6
+ /** Serialize a Manifest object to a YAML string with 2-space indentation. */
4
7
  export declare function serializeManifest(manifest: Manifest): string;
8
+ /** Read and parse agents.yaml from a directory. Returns null if the file does not exist. */
5
9
  export declare function readManifest(repoPath: string): Manifest | null;
10
+ /** Write a Manifest object to agents.yaml in the given directory. */
6
11
  export declare function writeManifest(repoPath: string, manifest: Manifest): void;
12
+ /** Create a Manifest with sensible defaults for a fresh agents repo. */
7
13
  export declare function createDefaultManifest(): Manifest;
8
- //# sourceMappingURL=manifest.d.ts.map
@@ -1,26 +1,38 @@
1
+ /**
2
+ * agents.yaml manifest reading, writing, and serialization.
3
+ *
4
+ * The manifest file (agents.yaml) is the central configuration for version defaults,
5
+ * repository overrides, dependencies, and MCP server declarations.
6
+ */
1
7
  import * as fs from 'fs';
2
- import * as path from 'path';
3
8
  import * as yaml from 'yaml';
9
+ import { safeJoin } from './paths.js';
10
+ /** Canonical filename for the manifest in any agents repo or project root. */
4
11
  export const MANIFEST_FILENAME = 'agents.yaml';
12
+ /** Parse a YAML string into a typed Manifest object. */
5
13
  export function parseManifest(content) {
6
14
  return yaml.parse(content);
7
15
  }
16
+ /** Serialize a Manifest object to a YAML string with 2-space indentation. */
8
17
  export function serializeManifest(manifest) {
9
18
  return yaml.stringify(manifest, { indent: 2 });
10
19
  }
20
+ /** Read and parse agents.yaml from a directory. Returns null if the file does not exist. */
11
21
  export function readManifest(repoPath) {
12
- const manifestPath = path.join(repoPath, MANIFEST_FILENAME);
22
+ const manifestPath = safeJoin(repoPath, MANIFEST_FILENAME);
13
23
  if (!fs.existsSync(manifestPath)) {
14
24
  return null;
15
25
  }
16
26
  const content = fs.readFileSync(manifestPath, 'utf-8');
17
27
  return parseManifest(content);
18
28
  }
29
+ /** Write a Manifest object to agents.yaml in the given directory. */
19
30
  export function writeManifest(repoPath, manifest) {
20
- const manifestPath = path.join(repoPath, MANIFEST_FILENAME);
31
+ const manifestPath = safeJoin(repoPath, MANIFEST_FILENAME);
21
32
  const content = serializeManifest(manifest);
22
33
  fs.writeFileSync(manifestPath, content, 'utf-8');
23
34
  }
35
+ /** Create a Manifest with sensible defaults for a fresh agents repo. */
24
36
  export function createDefaultManifest() {
25
37
  return {
26
38
  agents: {},
@@ -33,4 +45,3 @@ export function createDefaultManifest() {
33
45
  },
34
46
  };
35
47
  }
36
- //# sourceMappingURL=manifest.js.map
@@ -2,4 +2,3 @@
2
2
  * Render markdown content for terminal display.
3
3
  */
4
4
  export declare function renderMarkdown(content: string): string;
5
- //# sourceMappingURL=markdown.d.ts.map
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Terminal-aware Markdown rendering using marked and marked-terminal.
3
+ *
4
+ * Provides a single function for converting Markdown content into
5
+ * ANSI-formatted text suitable for terminal output.
6
+ */
1
7
  import { marked } from 'marked';
2
8
  import { markedTerminal } from 'marked-terminal';
3
9
  // @ts-expect-error - marked-terminal types don't match marked's MarkedExtension
@@ -8,4 +14,3 @@ marked.use(markedTerminal());
8
14
  export function renderMarkdown(content) {
9
15
  return marked.parse(content);
10
16
  }
11
- //# sourceMappingURL=markdown.js.map
package/dist/lib/mcp.d.ts CHANGED
@@ -61,4 +61,3 @@ export declare function writeMcpServerConfig(config: McpYamlConfig): string;
61
61
  * Remove an MCP server config from ~/.agents/mcp/.
62
62
  */
63
63
  export declare function removeMcpServerConfig(name: string): boolean;
64
- //# sourceMappingURL=mcp.d.ts.map