@phnx-labs/agents-cli 1.12.0 → 1.14.2

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 (496) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +308 -297
  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 +10 -0
  8. package/dist/commands/cloud.js +408 -0
  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 +207 -20
  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 +45 -6
  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 +11 -0
  38. package/dist/commands/profiles.js +291 -0
  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 +93 -129
  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 +10 -0
  56. package/dist/commands/secrets.js +518 -0
  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 +288 -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 +353 -20
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +205 -38
  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 +207 -23
  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 +25 -0
  104. package/dist/lib/cloud/codex.js +250 -0
  105. package/dist/lib/cloud/factory.d.ts +31 -0
  106. package/dist/lib/cloud/factory.js +53 -0
  107. package/dist/lib/cloud/registry.d.ts +15 -0
  108. package/dist/lib/cloud/registry.js +67 -0
  109. package/dist/lib/cloud/rush.d.ts +75 -0
  110. package/dist/lib/cloud/rush.js +438 -0
  111. package/dist/lib/cloud/store.d.ts +22 -0
  112. package/dist/lib/cloud/store.js +115 -0
  113. package/dist/lib/cloud/stream.d.ts +23 -0
  114. package/dist/lib/cloud/stream.js +194 -0
  115. package/dist/lib/cloud/types.d.ts +205 -0
  116. package/dist/lib/cloud/types.js +34 -0
  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 +25 -5
  128. package/dist/lib/exec.js +72 -27
  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 +191 -21
  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 +25 -11
  156. package/dist/lib/models.js +405 -16
  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 +24 -0
  168. package/dist/lib/profiles-presets.js +103 -0
  169. package/dist/lib/profiles.d.ts +69 -0
  170. package/dist/lib/profiles.js +144 -0
  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 +89 -0
  180. package/dist/lib/rotate.js +327 -0
  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 +39 -0
  195. package/dist/lib/secrets/bundles.js +189 -0
  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 +16 -0
  203. package/dist/lib/session/artifacts.js +95 -0
  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 +24 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +93 -5
  221. package/dist/lib/shims.js +380 -67
  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 +114 -22
  227. package/dist/lib/state.js +323 -138
  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 +48 -1
  257. package/dist/lib/usage.js +97 -16
  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 +39 -4
  261. package/dist/lib/versions.js +401 -111
  262. package/package.json +33 -18
  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/commands.d.ts.map +0 -1
  269. package/dist/commands/commands.js.map +0 -1
  270. package/dist/commands/daemon.d.ts.map +0 -1
  271. package/dist/commands/daemon.js.map +0 -1
  272. package/dist/commands/drive.d.ts.map +0 -1
  273. package/dist/commands/drive.js.map +0 -1
  274. package/dist/commands/exec.d.ts.map +0 -1
  275. package/dist/commands/exec.js.map +0 -1
  276. package/dist/commands/fork.d.ts.map +0 -1
  277. package/dist/commands/fork.js.map +0 -1
  278. package/dist/commands/hooks.d.ts.map +0 -1
  279. package/dist/commands/hooks.js.map +0 -1
  280. package/dist/commands/init.d.ts.map +0 -1
  281. package/dist/commands/init.js.map +0 -1
  282. package/dist/commands/mcp.d.ts.map +0 -1
  283. package/dist/commands/mcp.js.map +0 -1
  284. package/dist/commands/models.d.ts.map +0 -1
  285. package/dist/commands/models.js.map +0 -1
  286. package/dist/commands/packages.d.ts.map +0 -1
  287. package/dist/commands/packages.js.map +0 -1
  288. package/dist/commands/permissions.d.ts.map +0 -1
  289. package/dist/commands/permissions.js.map +0 -1
  290. package/dist/commands/plugins.d.ts.map +0 -1
  291. package/dist/commands/plugins.js.map +0 -1
  292. package/dist/commands/pty.d.ts.map +0 -1
  293. package/dist/commands/pty.js.map +0 -1
  294. package/dist/commands/pull.d.ts.map +0 -1
  295. package/dist/commands/pull.js.map +0 -1
  296. package/dist/commands/push.d.ts +0 -3
  297. package/dist/commands/push.d.ts.map +0 -1
  298. package/dist/commands/push.js +0 -180
  299. package/dist/commands/push.js.map +0 -1
  300. package/dist/commands/refresh-memory.d.ts.map +0 -1
  301. package/dist/commands/refresh-memory.js.map +0 -1
  302. package/dist/commands/resource-view.d.ts.map +0 -1
  303. package/dist/commands/resource-view.js.map +0 -1
  304. package/dist/commands/routines.d.ts.map +0 -1
  305. package/dist/commands/routines.js.map +0 -1
  306. package/dist/commands/rules.d.ts.map +0 -1
  307. package/dist/commands/rules.js.map +0 -1
  308. package/dist/commands/sessions-picker.d.ts.map +0 -1
  309. package/dist/commands/sessions-picker.js.map +0 -1
  310. package/dist/commands/sessions.d.ts.map +0 -1
  311. package/dist/commands/sessions.js.map +0 -1
  312. package/dist/commands/skills.d.ts.map +0 -1
  313. package/dist/commands/skills.js.map +0 -1
  314. package/dist/commands/status.d.ts.map +0 -1
  315. package/dist/commands/status.js.map +0 -1
  316. package/dist/commands/subagents.d.ts.map +0 -1
  317. package/dist/commands/subagents.js.map +0 -1
  318. package/dist/commands/sync.d.ts.map +0 -1
  319. package/dist/commands/sync.js.map +0 -1
  320. package/dist/commands/teams-picker.d.ts.map +0 -1
  321. package/dist/commands/teams-picker.js.map +0 -1
  322. package/dist/commands/teams.d.ts.map +0 -1
  323. package/dist/commands/teams.js.map +0 -1
  324. package/dist/commands/utils.d.ts.map +0 -1
  325. package/dist/commands/utils.js.map +0 -1
  326. package/dist/commands/versions.d.ts.map +0 -1
  327. package/dist/commands/versions.js.map +0 -1
  328. package/dist/commands/view.d.ts.map +0 -1
  329. package/dist/commands/view.js.map +0 -1
  330. package/dist/index.d.ts.map +0 -1
  331. package/dist/index.js.map +0 -1
  332. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  333. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  334. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  335. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  336. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  337. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  338. package/dist/lib/__tests__/exec.test.js +0 -446
  339. package/dist/lib/__tests__/exec.test.js.map +0 -1
  340. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  341. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  342. package/dist/lib/__tests__/git-sync.test.js +0 -138
  343. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  344. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  345. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  346. package/dist/lib/__tests__/hooks.test.js +0 -203
  347. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  348. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  349. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  350. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  351. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  352. package/dist/lib/__tests__/models.test.d.ts +0 -2
  353. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  354. package/dist/lib/__tests__/models.test.js +0 -184
  355. package/dist/lib/__tests__/models.test.js.map +0 -1
  356. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  357. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  358. package/dist/lib/__tests__/usage.test.js +0 -218
  359. package/dist/lib/__tests__/usage.test.js.map +0 -1
  360. package/dist/lib/agents.d.ts.map +0 -1
  361. package/dist/lib/agents.js.map +0 -1
  362. package/dist/lib/artifact-actions.d.ts.map +0 -1
  363. package/dist/lib/artifact-actions.js.map +0 -1
  364. package/dist/lib/commands.d.ts.map +0 -1
  365. package/dist/lib/commands.js.map +0 -1
  366. package/dist/lib/convert.d.ts.map +0 -1
  367. package/dist/lib/convert.js.map +0 -1
  368. package/dist/lib/daemon.d.ts.map +0 -1
  369. package/dist/lib/daemon.js.map +0 -1
  370. package/dist/lib/drive-sync.d.ts.map +0 -1
  371. package/dist/lib/drive-sync.js.map +0 -1
  372. package/dist/lib/exec.d.ts.map +0 -1
  373. package/dist/lib/exec.js.map +0 -1
  374. package/dist/lib/factory.d.ts +0 -57
  375. package/dist/lib/factory.d.ts.map +0 -1
  376. package/dist/lib/factory.js +0 -110
  377. package/dist/lib/factory.js.map +0 -1
  378. package/dist/lib/git.d.ts.map +0 -1
  379. package/dist/lib/git.js.map +0 -1
  380. package/dist/lib/help.d.ts.map +0 -1
  381. package/dist/lib/help.js.map +0 -1
  382. package/dist/lib/hooks.d.ts.map +0 -1
  383. package/dist/lib/hooks.js.map +0 -1
  384. package/dist/lib/manifest.d.ts.map +0 -1
  385. package/dist/lib/manifest.js.map +0 -1
  386. package/dist/lib/markdown.d.ts.map +0 -1
  387. package/dist/lib/markdown.js.map +0 -1
  388. package/dist/lib/mcp.d.ts.map +0 -1
  389. package/dist/lib/mcp.js.map +0 -1
  390. package/dist/lib/memory-compile.d.ts.map +0 -1
  391. package/dist/lib/memory-compile.js.map +0 -1
  392. package/dist/lib/memory.d.ts.map +0 -1
  393. package/dist/lib/memory.js.map +0 -1
  394. package/dist/lib/models.d.ts.map +0 -1
  395. package/dist/lib/models.js.map +0 -1
  396. package/dist/lib/permissions.d.ts.map +0 -1
  397. package/dist/lib/permissions.js.map +0 -1
  398. package/dist/lib/picker.d.ts.map +0 -1
  399. package/dist/lib/picker.js.map +0 -1
  400. package/dist/lib/plugins.d.ts.map +0 -1
  401. package/dist/lib/plugins.js.map +0 -1
  402. package/dist/lib/pty-client.d.ts.map +0 -1
  403. package/dist/lib/pty-client.js.map +0 -1
  404. package/dist/lib/pty-server.d.ts.map +0 -1
  405. package/dist/lib/pty-server.js.map +0 -1
  406. package/dist/lib/registry.d.ts.map +0 -1
  407. package/dist/lib/registry.js.map +0 -1
  408. package/dist/lib/resources.d.ts.map +0 -1
  409. package/dist/lib/resources.js.map +0 -1
  410. package/dist/lib/routines.d.ts.map +0 -1
  411. package/dist/lib/routines.js.map +0 -1
  412. package/dist/lib/runner.d.ts.map +0 -1
  413. package/dist/lib/runner.js.map +0 -1
  414. package/dist/lib/sandbox.d.ts.map +0 -1
  415. package/dist/lib/sandbox.js.map +0 -1
  416. package/dist/lib/scheduler.d.ts.map +0 -1
  417. package/dist/lib/scheduler.js.map +0 -1
  418. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  419. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  420. package/dist/lib/session/__tests__/db.test.js +0 -54
  421. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  422. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  423. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  424. package/dist/lib/session/__tests__/discover.test.js +0 -63
  425. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  426. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  427. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  428. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  429. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  430. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  431. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  432. package/dist/lib/session/__tests__/render.test.js +0 -602
  433. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  434. package/dist/lib/session/db.d.ts.map +0 -1
  435. package/dist/lib/session/db.js.map +0 -1
  436. package/dist/lib/session/discover.d.ts.map +0 -1
  437. package/dist/lib/session/discover.js.map +0 -1
  438. package/dist/lib/session/parse.d.ts.map +0 -1
  439. package/dist/lib/session/parse.js.map +0 -1
  440. package/dist/lib/session/prompt.d.ts.map +0 -1
  441. package/dist/lib/session/prompt.js.map +0 -1
  442. package/dist/lib/session/prompt.test.d.ts +0 -2
  443. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  444. package/dist/lib/session/prompt.test.js +0 -57
  445. package/dist/lib/session/prompt.test.js.map +0 -1
  446. package/dist/lib/session/render.d.ts.map +0 -1
  447. package/dist/lib/session/render.js.map +0 -1
  448. package/dist/lib/session/team-filter.d.ts.map +0 -1
  449. package/dist/lib/session/team-filter.js.map +0 -1
  450. package/dist/lib/session/team-filter.test.d.ts +0 -2
  451. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  452. package/dist/lib/session/team-filter.test.js +0 -157
  453. package/dist/lib/session/team-filter.test.js.map +0 -1
  454. package/dist/lib/session/types.d.ts.map +0 -1
  455. package/dist/lib/session/types.js.map +0 -1
  456. package/dist/lib/shims.d.ts.map +0 -1
  457. package/dist/lib/shims.js.map +0 -1
  458. package/dist/lib/skills.d.ts.map +0 -1
  459. package/dist/lib/skills.js.map +0 -1
  460. package/dist/lib/state.d.ts.map +0 -1
  461. package/dist/lib/state.js.map +0 -1
  462. package/dist/lib/subagents.d.ts.map +0 -1
  463. package/dist/lib/subagents.js.map +0 -1
  464. package/dist/lib/teams/agents.d.ts.map +0 -1
  465. package/dist/lib/teams/agents.js.map +0 -1
  466. package/dist/lib/teams/api.d.ts.map +0 -1
  467. package/dist/lib/teams/api.js.map +0 -1
  468. package/dist/lib/teams/cloud.d.ts +0 -11
  469. package/dist/lib/teams/cloud.d.ts.map +0 -1
  470. package/dist/lib/teams/cloud.js +0 -169
  471. package/dist/lib/teams/cloud.js.map +0 -1
  472. package/dist/lib/teams/debug.d.ts.map +0 -1
  473. package/dist/lib/teams/debug.js.map +0 -1
  474. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  475. package/dist/lib/teams/file_ops.js.map +0 -1
  476. package/dist/lib/teams/parsers.d.ts.map +0 -1
  477. package/dist/lib/teams/parsers.js.map +0 -1
  478. package/dist/lib/teams/persistence.d.ts.map +0 -1
  479. package/dist/lib/teams/persistence.js.map +0 -1
  480. package/dist/lib/teams/ralph.d.ts +0 -8
  481. package/dist/lib/teams/ralph.d.ts.map +0 -1
  482. package/dist/lib/teams/ralph.js +0 -59
  483. package/dist/lib/teams/ralph.js.map +0 -1
  484. package/dist/lib/teams/registry.d.ts.map +0 -1
  485. package/dist/lib/teams/registry.js.map +0 -1
  486. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  487. package/dist/lib/teams/summarizer.js.map +0 -1
  488. package/dist/lib/template.d.ts.map +0 -1
  489. package/dist/lib/template.js.map +0 -1
  490. package/dist/lib/types.d.ts.map +0 -1
  491. package/dist/lib/types.js.map +0 -1
  492. package/dist/lib/usage.d.ts.map +0 -1
  493. package/dist/lib/usage.js.map +0 -1
  494. package/dist/lib/versions.d.ts.map +0 -1
  495. package/dist/lib/versions.js.map +0 -1
  496. package/scripts/rebuild-sqlite.sh +0 -46
package/dist/lib/mcp.js CHANGED
@@ -10,10 +10,10 @@
10
10
  import * as fs from 'fs';
11
11
  import * as path from 'path';
12
12
  import * as yaml from 'yaml';
13
- import { execSync } from 'child_process';
14
- import * as os from 'os';
15
- import { getMcpDir, getProjectAgentsDir } from './state.js';
13
+ import { execFileSync } from 'child_process';
14
+ import { getMcpDir, getUserMcpDir, getProjectAgentsDir, getVersionsDir } from './state.js';
16
15
  import { MCP_CAPABLE_AGENTS, AGENTS } from './agents.js';
16
+ import { setGeminiAutoUpdateDisabled, updateGeminiSettings } from './gemini-settings.js';
17
17
  /**
18
18
  * Parse an MCP server config from a YAML file.
19
19
  */
@@ -53,6 +53,8 @@ export function listMcpServerConfigs(cwd = process.cwd()) {
53
53
  if (projectAgentsDir) {
54
54
  dirs.push({ scope: 'project', dir: path.join(projectAgentsDir, 'mcp') });
55
55
  }
56
+ // User dir first (wins on name collision), then system
57
+ dirs.push({ scope: 'user', dir: getUserMcpDir() });
56
58
  dirs.push({ scope: 'user', dir: getMcpDir() });
57
59
  const results = new Map();
58
60
  for (const { scope, dir } of dirs) {
@@ -113,7 +115,7 @@ function installMcpViaClaude(binaryPath, server, versionHome) {
113
115
  server.config.command,
114
116
  ...(server.config.args || [])
115
117
  ];
116
- execSync(`"${binaryPath}" ${args.map(a => a.includes(' ') ? `"${a}"` : a).join(' ')}`, {
118
+ execFileSync(binaryPath, args, {
117
119
  stdio: 'pipe',
118
120
  timeout: 30000,
119
121
  env: execEnv,
@@ -121,7 +123,7 @@ function installMcpViaClaude(binaryPath, server, versionHome) {
121
123
  }
122
124
  else {
123
125
  // claude mcp add --scope user --transport http <name> <url>
124
- execSync(`"${binaryPath}" mcp add --scope user --transport http "${server.name}" "${server.config.url}"`, {
126
+ execFileSync(binaryPath, ['mcp', 'add', '--scope', 'user', '--transport', 'http', server.name, server.config.url], {
125
127
  stdio: 'pipe',
126
128
  timeout: 30000,
127
129
  env: execEnv,
@@ -141,7 +143,7 @@ function installMcpViaCodex(binaryPath, server, versionHome) {
141
143
  server.config.command,
142
144
  ...(server.config.args || [])
143
145
  ];
144
- execSync(`"${binaryPath}" ${args.map(a => a.includes(' ') ? `"${a}"` : a).join(' ')}`, {
146
+ execFileSync(binaryPath, args, {
145
147
  stdio: 'pipe',
146
148
  timeout: 30000,
147
149
  env: { ...process.env, HOME: versionHome },
@@ -154,28 +156,25 @@ function installMcpViaCodex(binaryPath, server, versionHome) {
154
156
  */
155
157
  function installMcpToGeminiConfig(server, versionHome) {
156
158
  const configPath = path.join(versionHome, '.gemini', 'settings.json');
157
- let config = {};
158
- if (fs.existsSync(configPath)) {
159
- config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
160
- }
161
- if (!config.mcpServers || typeof config.mcpServers !== 'object') {
162
- config.mcpServers = {};
163
- }
164
- const mcpServers = config.mcpServers;
165
- if (server.config.transport === 'stdio') {
166
- mcpServers[server.name] = {
167
- command: server.config.command,
168
- args: server.config.args || [],
169
- env: server.config.env || {},
170
- };
171
- }
172
- else {
173
- mcpServers[server.name] = {
174
- url: server.config.url,
175
- };
176
- }
177
- fs.mkdirSync(path.dirname(configPath), { recursive: true });
178
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
159
+ updateGeminiSettings(configPath, (config) => {
160
+ setGeminiAutoUpdateDisabled(config);
161
+ if (!config.mcpServers || typeof config.mcpServers !== 'object') {
162
+ config.mcpServers = {};
163
+ }
164
+ const mcpServers = config.mcpServers;
165
+ if (server.config.transport === 'stdio') {
166
+ mcpServers[server.name] = {
167
+ command: server.config.command,
168
+ args: server.config.args || [],
169
+ env: server.config.env || {},
170
+ };
171
+ }
172
+ else {
173
+ mcpServers[server.name] = {
174
+ url: server.config.url,
175
+ };
176
+ }
177
+ });
179
178
  }
180
179
  /**
181
180
  * Install MCP server to Cursor config file.
@@ -260,10 +259,8 @@ export function installMcpServers(agentId, version, versionHome, mcpNames, optio
260
259
  const applied = [];
261
260
  const errors = [];
262
261
  // Get binary path for CLI-based agents
263
- const homeDir = os.homedir();
264
- const agentsDir = path.join(homeDir, '.agents');
265
262
  const cliCommand = AGENTS[agentId].cliCommand;
266
- const binaryPath = path.join(agentsDir, 'versions', agentId, version, 'node_modules', '.bin', cliCommand);
263
+ const binaryPath = path.join(getVersionsDir(), agentId, version, 'node_modules', '.bin', cliCommand);
267
264
  for (const server of servers) {
268
265
  try {
269
266
  if (agentId === 'claude') {
@@ -304,7 +301,7 @@ export function installMcpServers(agentId, version, versionHome, mcpNames, optio
304
301
  * Write an MCP server config to ~/.agents/mcp/.
305
302
  */
306
303
  export function writeMcpServerConfig(config) {
307
- const mcpDir = getMcpDir();
304
+ const mcpDir = getUserMcpDir();
308
305
  fs.mkdirSync(mcpDir, { recursive: true });
309
306
  const fileName = `${config.name.toLowerCase().replace(/[^a-z0-9]/g, '-')}.yaml`;
310
307
  const filePath = path.join(mcpDir, fileName);
@@ -324,4 +321,3 @@ export function removeMcpServerConfig(name) {
324
321
  fs.unlinkSync(server.path);
325
322
  return true;
326
323
  }
327
- //# sourceMappingURL=mcp.js.map
@@ -1,11 +1,22 @@
1
+ /**
2
+ * Rules file compilation -- resolving @-imports into a single flat file.
3
+ *
4
+ * Agents that do not natively resolve `@path/to/file` imports (Codex, Gemini)
5
+ * need a pre-compiled rules file with all imports inlined. This module
6
+ * handles that expansion.
7
+ */
1
8
  import type { AgentId } from './types.js';
9
+ /** Sidecar manifest recording source file hashes for staleness detection. */
2
10
  export interface CompileManifest {
3
11
  compiledAt: string;
4
12
  sources: {
5
13
  path: string;
6
14
  sha256: string;
15
+ mtime?: number;
16
+ size?: number;
7
17
  }[];
8
18
  }
19
+ /** Result of resolving @-imports in a rules file. */
9
20
  export interface ResolveResult {
10
21
  /** Fully-inlined content. */
11
22
  content: string;
@@ -22,7 +33,7 @@ export interface ResolveResult {
22
33
  * paths resolve against the filesystem root / home directory.
23
34
  */
24
35
  export declare function resolveImports(content: string, baseDir: string): ResolveResult;
25
- /** True if the agent's native runtime resolves `@path` imports in its memory file. */
36
+ /** True if the agent's native runtime resolves `@path` imports in its rules file. */
26
37
  export declare function supportsMemoryImports(agentId: AgentId): boolean;
27
38
  /**
28
39
  * Fast staleness check. Returns true when:
@@ -35,7 +46,7 @@ export declare function supportsMemoryImports(agentId: AgentId): boolean;
35
46
  */
36
47
  export declare function isMemoryStale(agentId: AgentId, version: string): boolean;
37
48
  /**
38
- * Resolve the source `memory/AGENTS.md` (with all @-imports expanded) and
49
+ * Resolve the source `rules/AGENTS.md` (with all @-imports expanded) and
39
50
  * write the result into the version home, alongside a sidecar manifest that
40
51
  * records source file hashes for staleness detection.
41
52
  *
@@ -53,4 +64,3 @@ export declare function compileMemoryForAgent(agentId: AgentId, version: string)
53
64
  * true if a recompile happened, false otherwise.
54
65
  */
55
66
  export declare function ensureMemoryFresh(agentId: AgentId, version: string): boolean;
56
- //# sourceMappingURL=memory-compile.d.ts.map
@@ -1,16 +1,23 @@
1
+ /**
2
+ * Rules file compilation -- resolving @-imports into a single flat file.
3
+ *
4
+ * Agents that do not natively resolve `@path/to/file` imports (Codex, Gemini)
5
+ * need a pre-compiled rules file with all imports inlined. This module
6
+ * handles that expansion.
7
+ */
1
8
  import * as fs from 'fs';
2
9
  import * as path from 'path';
3
10
  import * as os from 'os';
4
11
  import * as crypto from 'crypto';
5
12
  import { AGENTS } from './agents.js';
6
- import { getMemoryDir, getVersionsDir } from './state.js';
13
+ import { getResolvedRulesDir, getVersionsDir } from './state.js';
7
14
  // Match `@path` preceded by start-of-string or whitespace. This avoids
8
15
  // matching emails ("foo@bar.com") and the middle of words. The leading
9
16
  // whitespace (if any) is captured so we can preserve it in the output.
10
17
  const IMPORT_RE = /(^|\s)@(\S+)/g;
11
18
  const MAX_DEPTH = 5;
12
- const COMPILED_HEADER = '<!-- Auto-compiled by agents-cli from ~/.agents/memory/AGENTS.md + imports.\n' +
13
- ' Edit the source files under ~/.agents/memory/ — edits to this file will be overwritten on next sync. -->\n\n';
19
+ const COMPILED_HEADER = '<!-- Auto-compiled by agents-cli from ~/.agents/rules/AGENTS.md + imports.\n' +
20
+ ' Edit the source files under ~/.agents/rules/ — edits to this file will be overwritten on next sync. -->\n\n';
14
21
  function expandTilde(p) {
15
22
  if (p === '~')
16
23
  return os.homedir();
@@ -79,7 +86,7 @@ export function resolveImports(content, baseDir) {
79
86
  const result = expand(content, baseDir, 0);
80
87
  return { content: result, sources };
81
88
  }
82
- /** True if the agent's native runtime resolves `@path` imports in its memory file. */
89
+ /** True if the agent's native runtime resolves `@path` imports in its rules file. */
83
90
  export function supportsMemoryImports(agentId) {
84
91
  return !!AGENTS[agentId].capabilities.memoryImports;
85
92
  }
@@ -112,6 +119,13 @@ export function isMemoryStale(agentId, version) {
112
119
  for (const src of manifest.sources) {
113
120
  if (!fs.existsSync(src.path))
114
121
  return true;
122
+ // Tier 1: mtime+size fast path (no file read needed)
123
+ if (src.mtime !== undefined && src.size !== undefined) {
124
+ const stat = fs.statSync(src.path);
125
+ if (stat.mtimeMs === src.mtime && stat.size === src.size)
126
+ continue;
127
+ }
128
+ // Tier 2: content hash
115
129
  if (sha256(fs.readFileSync(src.path, 'utf8')) !== src.sha256)
116
130
  return true;
117
131
  }
@@ -122,7 +136,7 @@ export function isMemoryStale(agentId, version) {
122
136
  }
123
137
  }
124
138
  /**
125
- * Resolve the source `memory/AGENTS.md` (with all @-imports expanded) and
139
+ * Resolve the source `rules/AGENTS.md` (with all @-imports expanded) and
126
140
  * write the result into the version home, alongside a sidecar manifest that
127
141
  * records source file hashes for staleness detection.
128
142
  *
@@ -133,20 +147,29 @@ export function compileMemoryForAgent(agentId, version) {
133
147
  if (supportsMemoryImports(agentId)) {
134
148
  return { compiled: false, compiledPath: '', sources: 0 };
135
149
  }
136
- const memoryDir = getMemoryDir();
150
+ const memoryDir = getResolvedRulesDir();
137
151
  const sourceAgents = path.join(memoryDir, 'AGENTS.md');
138
152
  if (!fs.existsSync(sourceAgents)) {
139
153
  return { compiled: false, compiledPath: '', sources: 0 };
140
154
  }
141
155
  const rootContent = fs.readFileSync(sourceAgents, 'utf8');
142
156
  const { content, sources } = resolveImports(rootContent, memoryDir);
157
+ const newContent = COMPILED_HEADER + content;
143
158
  const compiledPath = getCompiledMemoryPath(agentId, version);
144
159
  fs.mkdirSync(path.dirname(compiledPath), { recursive: true });
145
- fs.writeFileSync(compiledPath, COMPILED_HEADER + content);
160
+ const existing = fs.existsSync(compiledPath) ? fs.readFileSync(compiledPath, 'utf8') : null;
161
+ if (existing === newContent) {
162
+ return { compiled: false, compiledPath, sources: 0 };
163
+ }
164
+ fs.writeFileSync(compiledPath, newContent);
146
165
  const allSources = [sourceAgents, ...sources];
147
166
  const manifest = {
148
167
  compiledAt: new Date().toISOString(),
149
- sources: allSources.map(p => ({ path: p, sha256: sha256(fs.readFileSync(p, 'utf8')) })),
168
+ sources: allSources.map(p => {
169
+ const content = fs.readFileSync(p, 'utf8');
170
+ const stat = fs.statSync(p);
171
+ return { path: p, sha256: sha256(content), mtime: stat.mtimeMs, size: stat.size };
172
+ }),
150
173
  };
151
174
  fs.writeFileSync(getManifestPath(compiledPath), JSON.stringify(manifest, null, 2));
152
175
  return { compiled: true, compiledPath, sources: allSources.length };
@@ -164,4 +187,3 @@ export function ensureMemoryFresh(agentId, version) {
164
187
  const result = compileMemoryForAgent(agentId, version);
165
188
  return result.compiled;
166
189
  }
167
- //# sourceMappingURL=memory-compile.js.map
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Rules file management -- reading, writing, and syncing agent instructions.
3
+ *
4
+ * The canonical rules file (AGENTS.md) gets synced
5
+ * into each agent's config directory under their native name (CLAUDE.md,
6
+ * GEMINI.md, etc.). This module handles reading, managing includes, and
7
+ * refreshing rules files across version homes.
8
+ */
1
9
  import type { AgentId } from './types.js';
2
10
  export type InstructionsScope = 'user' | 'project';
3
11
  export interface InstalledInstructions {
@@ -12,12 +20,12 @@ export interface DiscoveredInstructions {
12
20
  filename: string;
13
21
  }
14
22
  /**
15
- * Central memory filename constant.
16
- * All agents map to this file in ~/.agents/memory/, renamed per-agent when synced.
23
+ * Central rules filename constant.
24
+ * All agents map to this file in ~/.agents/rules/, renamed per-agent when synced.
17
25
  */
18
26
  export declare const CENTRAL_MEMORY_FILENAME = "AGENTS.md";
19
27
  /**
20
- * Get the canonical central memory filename for an agent's instructionsFile.
28
+ * Get the canonical central rules filename for an agent's instructionsFile.
21
29
  * Central storage uses AGENTS.md, which gets renamed per-agent when syncing:
22
30
  * - Claude: AGENTS.md → CLAUDE.md
23
31
  * - Gemini: AGENTS.md → GEMINI.md
@@ -42,15 +50,14 @@ export declare function listInstalledInstructionsWithScope(agentId: AgentId, cwd
42
50
  }): InstalledInstructions[];
43
51
  export declare function getInstructionsContent(agentId: AgentId, scope?: InstructionsScope, cwd?: string): string | null;
44
52
  /**
45
- * Install memory files from repo memory/ to central ~/.agents/memory/ directory.
46
- * Shims will symlink these to per-agent directories for synced agents.
53
+ * Install rules files from repo rules/ to central ~/.agents/rules/ directory.
54
+ * Nested presets/ and rules/ fragments are preserved so @imports keep working.
47
55
  */
48
56
  export declare function installInstructionsCentrally(repoPath: string, filesToInstall?: string[]): {
49
57
  installed: string[];
50
58
  errors: string[];
51
59
  };
52
60
  /**
53
- * List memory files from central ~/.agents/memory/ directory.
61
+ * List top-level rules files from user and system dirs (user wins on collision).
54
62
  */
55
63
  export declare function listCentralMemory(): string[];
56
- //# sourceMappingURL=memory.d.ts.map
@@ -1,15 +1,45 @@
1
+ /**
2
+ * Rules file management -- reading, writing, and syncing agent instructions.
3
+ *
4
+ * The canonical rules file (AGENTS.md) gets synced
5
+ * into each agent's config directory under their native name (CLAUDE.md,
6
+ * GEMINI.md, etc.). This module handles reading, managing includes, and
7
+ * refreshing rules files across version homes.
8
+ */
1
9
  import * as fs from 'fs';
2
10
  import * as path from 'path';
3
11
  import { AGENTS, ALL_AGENT_IDS } from './agents.js';
4
- import { getMemoryDir, getProjectAgentsDir } from './state.js';
12
+ import { getResolvedRulesDir, getUserRulesDir, getProjectAgentsDir } from './state.js';
5
13
  import { getEffectiveHome } from './versions.js';
6
14
  /**
7
- * Central memory filename constant.
8
- * All agents map to this file in ~/.agents/memory/, renamed per-agent when synced.
15
+ * Central rules filename constant.
16
+ * All agents map to this file in ~/.agents/rules/, renamed per-agent when synced.
9
17
  */
10
18
  export const CENTRAL_MEMORY_FILENAME = 'AGENTS.md';
19
+ const RULES_DOC_FILENAME = 'README.md';
20
+ function isSyncableRuleMarkdown(filename) {
21
+ return filename.endsWith('.md') && filename !== RULES_DOC_FILENAME;
22
+ }
23
+ const RULES_SUBDIRS = ['default', 'presets'];
24
+ function listRuleMarkdownFiles(rulesDir) {
25
+ const files = [];
26
+ const readDir = (dir, prefix) => {
27
+ if (!fs.existsSync(dir))
28
+ return;
29
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
30
+ if (entry.isFile() && isSyncableRuleMarkdown(entry.name)) {
31
+ files.push(prefix ? `${prefix}/${entry.name}` : entry.name);
32
+ }
33
+ }
34
+ };
35
+ readDir(rulesDir, '');
36
+ for (const sub of RULES_SUBDIRS) {
37
+ readDir(path.join(rulesDir, sub), sub);
38
+ }
39
+ return files.sort();
40
+ }
11
41
  /**
12
- * Get the canonical central memory filename for an agent's instructionsFile.
42
+ * Get the canonical central rules filename for an agent's instructionsFile.
13
43
  * Central storage uses AGENTS.md, which gets renamed per-agent when syncing:
14
44
  * - Claude: AGENTS.md → CLAUDE.md
15
45
  * - Gemini: AGENTS.md → GEMINI.md
@@ -44,11 +74,11 @@ export function getInstructionsPath(agentId, scope, cwd = process.cwd()) {
44
74
  }
45
75
  const projectAgentsDir = getProjectAgentsDir(cwd);
46
76
  if (projectAgentsDir) {
47
- const projectMemoryDir = path.join(projectAgentsDir, 'memory');
77
+ const projectRulesDir = path.join(projectAgentsDir, 'rules');
48
78
  const centralName = getCentralMemoryFileName(agentId);
49
79
  const candidates = [
50
- path.join(projectMemoryDir, centralName),
51
- path.join(projectMemoryDir, agent.instructionsFile),
80
+ path.join(projectRulesDir, centralName),
81
+ path.join(projectRulesDir, agent.instructionsFile),
52
82
  ];
53
83
  for (const candidate of candidates) {
54
84
  if (fs.existsSync(candidate)) {
@@ -68,20 +98,20 @@ export function instructionsExists(agentId, scope = 'user', cwd = process.cwd())
68
98
  }
69
99
  export function discoverInstructionsFromRepo(repoPath) {
70
100
  const instructions = [];
71
- const memoryDir = path.join(repoPath, 'memory');
72
- if (!fs.existsSync(memoryDir)) {
101
+ const rulesDir = path.join(repoPath, 'rules');
102
+ if (!fs.existsSync(rulesDir)) {
73
103
  return instructions;
74
104
  }
75
105
  for (const agentId of ALL_AGENT_IDS) {
76
106
  const agent = AGENTS[agentId];
77
- // AGENTS.md is the canonical central memory file - don't claim it per-agent.
78
- // It gets installed centrally to ~/.agents/memory/ and shims symlink it per-agent.
107
+ // AGENTS.md is the canonical central rules file - don't claim it per-agent.
108
+ // It gets installed centrally to ~/.agents/rules/ and synced per-agent.
79
109
  const possibleNames = [
80
110
  `${agentId}.md`,
81
111
  agent.instructionsFile,
82
112
  ].filter(name => name !== 'AGENTS.md');
83
113
  for (const filename of possibleNames) {
84
- const sourcePath = path.join(memoryDir, filename);
114
+ const sourcePath = path.join(rulesDir, filename);
85
115
  if (fs.existsSync(sourcePath)) {
86
116
  instructions.push({
87
117
  agentId,
@@ -96,8 +126,8 @@ export function discoverInstructionsFromRepo(repoPath) {
96
126
  }
97
127
  export function resolveInstructionsSource(repoPath, agentId) {
98
128
  const agent = AGENTS[agentId];
99
- const memoryDir = path.join(repoPath, 'memory');
100
- if (!fs.existsSync(memoryDir)) {
129
+ const rulesDir = path.join(repoPath, 'rules');
130
+ if (!fs.existsSync(rulesDir)) {
101
131
  return null;
102
132
  }
103
133
  const possibleNames = [
@@ -105,7 +135,7 @@ export function resolveInstructionsSource(repoPath, agentId) {
105
135
  agent.instructionsFile,
106
136
  ].filter(name => name !== 'AGENTS.md');
107
137
  for (const filename of possibleNames) {
108
- const sourcePath = path.join(memoryDir, filename);
138
+ const sourcePath = path.join(rulesDir, filename);
109
139
  if (fs.existsSync(sourcePath)) {
110
140
  return sourcePath;
111
141
  }
@@ -113,15 +143,12 @@ export function resolveInstructionsSource(repoPath, agentId) {
113
143
  return null;
114
144
  }
115
145
  export function discoverMemoryFilesFromRepo(repoPath) {
116
- const memoryDir = path.join(repoPath, 'memory');
117
- if (!fs.existsSync(memoryDir)) {
146
+ const rulesDir = path.join(repoPath, 'rules');
147
+ if (!fs.existsSync(rulesDir)) {
118
148
  return [];
119
149
  }
120
150
  try {
121
- return fs
122
- .readdirSync(memoryDir, { withFileTypes: true })
123
- .filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
124
- .map((entry) => entry.name);
151
+ return listRuleMarkdownFiles(rulesDir);
125
152
  }
126
153
  catch {
127
154
  return [];
@@ -214,30 +241,31 @@ export function getInstructionsContent(agentId, scope = 'user', cwd = process.cw
214
241
  }
215
242
  }
216
243
  /**
217
- * Install memory files from repo memory/ to central ~/.agents/memory/ directory.
218
- * Shims will symlink these to per-agent directories for synced agents.
244
+ * Install rules files from repo rules/ to central ~/.agents/rules/ directory.
245
+ * Nested presets/ and rules/ fragments are preserved so @imports keep working.
219
246
  */
220
247
  export function installInstructionsCentrally(repoPath, filesToInstall) {
221
248
  const installed = [];
222
249
  const errors = [];
223
- const centralDir = getMemoryDir();
250
+ const centralDir = getUserRulesDir();
224
251
  if (!fs.existsSync(centralDir)) {
225
252
  fs.mkdirSync(centralDir, { recursive: true });
226
253
  }
227
- const memoryDir = path.join(repoPath, 'memory');
228
- if (!fs.existsSync(memoryDir)) {
254
+ const rulesDir = path.join(repoPath, 'rules');
255
+ if (!fs.existsSync(rulesDir)) {
229
256
  return { installed, errors };
230
257
  }
231
258
  try {
232
- const files = filesToInstall ?? fs.readdirSync(memoryDir);
259
+ const files = filesToInstall ?? listRuleMarkdownFiles(rulesDir);
233
260
  for (const file of files) {
234
- if (!file.endsWith('.md'))
261
+ if (!isSyncableRuleMarkdown(path.basename(file)))
235
262
  continue;
236
- const sourcePath = path.join(memoryDir, file);
263
+ const sourcePath = path.join(rulesDir, file);
237
264
  const stat = fs.statSync(sourcePath);
238
265
  if (!stat.isFile())
239
266
  continue;
240
267
  const targetPath = path.join(centralDir, file);
268
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
241
269
  try {
242
270
  fs.copyFileSync(sourcePath, targetPath);
243
271
  installed.push(file);
@@ -248,20 +276,21 @@ export function installInstructionsCentrally(repoPath, filesToInstall) {
248
276
  }
249
277
  }
250
278
  catch (err) {
251
- errors.push(`Failed to read memory directory: ${err.message}`);
279
+ errors.push(`Failed to read rules directory: ${err.message}`);
252
280
  }
253
281
  return { installed, errors };
254
282
  }
255
283
  /**
256
- * List memory files from central ~/.agents/memory/ directory.
284
+ * List top-level rules files from user and system dirs (user wins on collision).
257
285
  */
258
286
  export function listCentralMemory() {
259
- const centralDir = getMemoryDir();
260
- if (!fs.existsSync(centralDir)) {
261
- return [];
287
+ const seen = new Set();
288
+ for (const dir of [getUserRulesDir(), getResolvedRulesDir()]) {
289
+ if (!fs.existsSync(dir))
290
+ continue;
291
+ for (const f of fs.readdirSync(dir).filter((f) => isSyncableRuleMarkdown(f))) {
292
+ seen.add(f);
293
+ }
262
294
  }
263
- return fs
264
- .readdirSync(centralDir)
265
- .filter((f) => f.endsWith('.md'));
295
+ return Array.from(seen);
266
296
  }
267
- //# sourceMappingURL=memory.js.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * One-shot idempotent migrations for the FOUNDATION refactor.
3
+ *
4
+ * Called from postinstall and as a command-time fallback from agents view/use/pull.
5
+ * Each migration is guarded by an existence check so re-running is safe.
6
+ */
7
+ /** Run all idempotent migrations. Safe to call multiple times. */
8
+ export declare function runMigration(): void;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * One-shot idempotent migrations for the FOUNDATION refactor.
3
+ *
4
+ * Called from postinstall and as a command-time fallback from agents view/use/pull.
5
+ * Each migration is guarded by an existence check so re-running is safe.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ const HOME = os.homedir();
11
+ const SYSTEM_DIR = path.join(HOME, '.agents-system');
12
+ const USER_DIR = path.join(HOME, '.agents');
13
+ /**
14
+ * Move ~/.agents-system/agents.yaml -> ~/.agents/agents.yaml.
15
+ * No-op if user file already exists or system file absent.
16
+ * (This is also handled inline in state.ts readMeta, but is exposed here
17
+ * for explicit migration calls from postinstall / CLI entry points.)
18
+ */
19
+ function migrateAgentsYaml() {
20
+ const src = path.join(SYSTEM_DIR, 'agents.yaml');
21
+ const dest = path.join(USER_DIR, 'agents.yaml');
22
+ if (fs.existsSync(dest) || !fs.existsSync(src))
23
+ return;
24
+ try {
25
+ fs.mkdirSync(USER_DIR, { recursive: true, mode: 0o700 });
26
+ fs.renameSync(src, dest);
27
+ console.log('Migrated agents.yaml to ~/.agents/');
28
+ }
29
+ catch { /* best-effort */ }
30
+ }
31
+ /**
32
+ * Delete ~/.agents-system/prompts.json (dead file — zero refs in src/).
33
+ */
34
+ function deleteSystemPromptsJson() {
35
+ const f = path.join(SYSTEM_DIR, 'prompts.json');
36
+ if (!fs.existsSync(f))
37
+ return;
38
+ try {
39
+ fs.unlinkSync(f);
40
+ }
41
+ catch { /* best-effort */ }
42
+ }
43
+ /**
44
+ * Move ~/.agents-system/config.json -> ~/.agents/teams/config.json.
45
+ * The teams persistence layer already reads the legacy path as a fallback;
46
+ * moving it here keeps the canonical location consistent.
47
+ */
48
+ function migrateSystemConfigJson() {
49
+ const src = path.join(SYSTEM_DIR, 'config.json');
50
+ const dest = path.join(USER_DIR, 'teams', 'config.json');
51
+ if (!fs.existsSync(src) || fs.existsSync(dest))
52
+ return;
53
+ try {
54
+ fs.mkdirSync(path.dirname(dest), { recursive: true, mode: 0o700 });
55
+ fs.copyFileSync(src, dest);
56
+ fs.unlinkSync(src);
57
+ }
58
+ catch { /* best-effort */ }
59
+ }
60
+ /**
61
+ * Move promptcuts.yaml from each repo root into hooks/ subdir.
62
+ * ~/.agents-system/promptcuts.yaml -> ~/.agents-system/hooks/promptcuts.yaml
63
+ * ~/.agents/promptcuts.yaml -> ~/.agents/hooks/promptcuts.yaml
64
+ * Idempotent: skips if dest already exists or src absent.
65
+ */
66
+ function migratePromptcutsIntoHooks() {
67
+ for (const root of [SYSTEM_DIR, USER_DIR]) {
68
+ const src = path.join(root, 'promptcuts.yaml');
69
+ const dest = path.join(root, 'hooks', 'promptcuts.yaml');
70
+ if (fs.existsSync(dest) || !fs.existsSync(src))
71
+ continue;
72
+ try {
73
+ fs.mkdirSync(path.dirname(dest), { recursive: true, mode: 0o700 });
74
+ fs.renameSync(src, dest);
75
+ }
76
+ catch { /* best-effort */ }
77
+ }
78
+ }
79
+ /** Run all idempotent migrations. Safe to call multiple times. */
80
+ export function runMigration() {
81
+ migrateAgentsYaml();
82
+ deleteSystemPromptsJson();
83
+ migrateSystemConfigJson();
84
+ migratePromptcutsIntoHooks();
85
+ }