agent-relay 1.1.0 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/.gitattributes +3 -0
  2. package/.nvmrc +1 -0
  3. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +65 -0
  4. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +37 -0
  5. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +65 -0
  6. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +37 -0
  7. package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +49 -0
  8. package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +31 -0
  9. package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +113 -0
  10. package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +57 -0
  11. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +53 -0
  12. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +32 -0
  13. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +26 -0
  14. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +6 -0
  15. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +47 -0
  16. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +32 -0
  17. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +53 -0
  18. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +32 -0
  19. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +59 -0
  20. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +33 -0
  21. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +53 -0
  22. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +32 -0
  23. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +48 -0
  24. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +24 -0
  25. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +209 -0
  26. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +97 -0
  27. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +48 -0
  28. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +24 -0
  29. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +49 -0
  30. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +23 -0
  31. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +53 -0
  32. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +32 -0
  33. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +49 -0
  34. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +31 -0
  35. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +26 -0
  36. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +6 -0
  37. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +59 -0
  38. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +37 -0
  39. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +77 -0
  40. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +42 -0
  41. package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +53 -0
  42. package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +32 -0
  43. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +25 -0
  44. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +15 -0
  45. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +101 -0
  46. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +44 -0
  47. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +22 -0
  48. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +5 -0
  49. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +53 -0
  50. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +32 -0
  51. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +25 -0
  52. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +15 -0
  53. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +53 -0
  54. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +32 -0
  55. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +53 -0
  56. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +32 -0
  57. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +48 -0
  58. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +24 -0
  59. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +53 -0
  60. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +32 -0
  61. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +77 -0
  62. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +42 -0
  63. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +53 -0
  64. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +32 -0
  65. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +83 -0
  66. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +47 -0
  67. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +59 -0
  68. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +37 -0
  69. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +48 -0
  70. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +16 -0
  71. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +59 -0
  72. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +37 -0
  73. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +53 -0
  74. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +32 -0
  75. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +84 -0
  76. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +109 -0
  77. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +53 -0
  78. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +32 -0
  79. package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +71 -0
  80. package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +42 -0
  81. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +53 -0
  82. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +32 -0
  83. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +20 -0
  84. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +6 -0
  85. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +175 -0
  86. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +82 -0
  87. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +47 -0
  88. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +32 -0
  89. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +59 -0
  90. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +37 -0
  91. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +53 -0
  92. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +32 -0
  93. package/.trajectories/index.json +314 -0
  94. package/ARCHITECTURE.md +1245 -0
  95. package/README.md +1 -1
  96. package/TESTING.md +278 -0
  97. package/deploy/init-db.sql +5 -0
  98. package/deploy/scripts/setup-fly-workspaces.sh +69 -0
  99. package/deploy/scripts/setup-railway.sh +75 -0
  100. package/deploy/workspace/entrypoint-browser.sh +118 -0
  101. package/deploy/workspace/entrypoint.sh +348 -0
  102. package/deploy/workspace/git-credential-relay +111 -0
  103. package/dist/bridge/spawner.d.ts +53 -0
  104. package/dist/bridge/spawner.js +203 -19
  105. package/dist/bridge/types.d.ts +12 -0
  106. package/dist/cli/index.js +618 -5
  107. package/dist/cloud/api/auth.d.ts +3 -2
  108. package/dist/cloud/api/auth.js +10 -98
  109. package/dist/cloud/api/billing.js +30 -9
  110. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  111. package/dist/cloud/api/cli-pty-runner.js +119 -0
  112. package/dist/cloud/api/codex-auth-helper.d.ts +15 -0
  113. package/dist/cloud/api/codex-auth-helper.js +100 -0
  114. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  115. package/dist/cloud/api/generic-webhooks.js +129 -0
  116. package/dist/cloud/api/git.d.ts +8 -0
  117. package/dist/cloud/api/git.js +152 -0
  118. package/dist/cloud/api/github-app.d.ts +11 -0
  119. package/dist/cloud/api/github-app.js +189 -0
  120. package/dist/cloud/api/middleware/planLimits.d.ts +7 -0
  121. package/dist/cloud/api/middleware/planLimits.js +39 -1
  122. package/dist/cloud/api/monitoring.d.ts +11 -0
  123. package/dist/cloud/api/monitoring.js +578 -0
  124. package/dist/cloud/api/nango-auth.d.ts +9 -0
  125. package/dist/cloud/api/nango-auth.js +377 -0
  126. package/dist/cloud/api/onboarding.d.ts +8 -1
  127. package/dist/cloud/api/onboarding.js +313 -119
  128. package/dist/cloud/api/policy.d.ts +8 -0
  129. package/dist/cloud/api/policy.js +229 -0
  130. package/dist/cloud/api/providers.js +114 -42
  131. package/dist/cloud/api/repos.d.ts +1 -0
  132. package/dist/cloud/api/repos.js +186 -0
  133. package/dist/cloud/api/test-helpers.d.ts +10 -0
  134. package/dist/cloud/api/test-helpers.js +575 -0
  135. package/dist/cloud/api/webhooks.d.ts +8 -0
  136. package/dist/cloud/api/webhooks.js +645 -0
  137. package/dist/cloud/api/workspaces.js +320 -12
  138. package/dist/cloud/billing/plans.js +32 -19
  139. package/dist/cloud/billing/types.d.ts +9 -3
  140. package/dist/cloud/config.d.ts +9 -2
  141. package/dist/cloud/config.js +13 -4
  142. package/dist/cloud/db/drizzle.d.ts +84 -1
  143. package/dist/cloud/db/drizzle.js +470 -0
  144. package/dist/cloud/db/index.d.ts +9 -4
  145. package/dist/cloud/db/index.js +11 -3
  146. package/dist/cloud/db/schema.d.ts +3283 -556
  147. package/dist/cloud/db/schema.js +314 -1
  148. package/dist/cloud/index.d.ts +1 -0
  149. package/dist/cloud/index.js +2 -0
  150. package/dist/cloud/provisioner/index.d.ts +56 -0
  151. package/dist/cloud/provisioner/index.js +676 -34
  152. package/dist/cloud/server.d.ts +1 -0
  153. package/dist/cloud/server.js +362 -13
  154. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  155. package/dist/cloud/services/auto-scaler.js +439 -0
  156. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  157. package/dist/cloud/services/capacity-manager.js +449 -0
  158. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  159. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  160. package/dist/cloud/services/index.d.ts +12 -0
  161. package/dist/cloud/services/index.js +15 -0
  162. package/dist/cloud/services/mention-handler.d.ts +65 -0
  163. package/dist/cloud/services/mention-handler.js +405 -0
  164. package/dist/cloud/services/nango.d.ts +186 -0
  165. package/dist/cloud/services/nango.js +344 -0
  166. package/dist/cloud/services/persistence.d.ts +131 -0
  167. package/dist/cloud/services/persistence.js +200 -0
  168. package/dist/cloud/services/planLimits.d.ts +37 -0
  169. package/dist/cloud/services/planLimits.js +86 -5
  170. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  171. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  172. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  173. package/dist/cloud/services/scaling-policy.js +415 -0
  174. package/dist/cloud/vault/index.js +1 -1
  175. package/dist/cloud/webhooks/index.d.ts +24 -0
  176. package/dist/cloud/webhooks/index.js +29 -0
  177. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  178. package/dist/cloud/webhooks/parsers/github.js +234 -0
  179. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  180. package/dist/cloud/webhooks/parsers/index.js +30 -0
  181. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  182. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  183. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  184. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  185. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  186. package/dist/cloud/webhooks/responders/github.js +73 -0
  187. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  188. package/dist/cloud/webhooks/responders/index.js +30 -0
  189. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  190. package/dist/cloud/webhooks/responders/linear.js +149 -0
  191. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  192. package/dist/cloud/webhooks/responders/slack.js +178 -0
  193. package/dist/cloud/webhooks/router.d.ts +25 -0
  194. package/dist/cloud/webhooks/router.js +504 -0
  195. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  196. package/dist/cloud/webhooks/rules-engine.js +287 -0
  197. package/dist/cloud/webhooks/types.d.ts +186 -0
  198. package/dist/cloud/webhooks/types.js +8 -0
  199. package/dist/continuity/formatter.d.ts +51 -0
  200. package/dist/continuity/formatter.js +313 -0
  201. package/dist/continuity/handoff-store.d.ts +67 -0
  202. package/dist/continuity/handoff-store.js +472 -0
  203. package/dist/continuity/index.d.ts +45 -0
  204. package/dist/continuity/index.js +48 -0
  205. package/dist/continuity/ledger-store.d.ts +110 -0
  206. package/dist/continuity/ledger-store.js +500 -0
  207. package/dist/continuity/manager.d.ts +178 -0
  208. package/dist/continuity/manager.js +562 -0
  209. package/dist/continuity/parser.d.ts +76 -0
  210. package/dist/continuity/parser.js +579 -0
  211. package/dist/continuity/types.d.ts +180 -0
  212. package/dist/continuity/types.js +9 -0
  213. package/dist/daemon/agent-manager.d.ts +27 -0
  214. package/dist/daemon/agent-manager.js +107 -6
  215. package/dist/daemon/agent-registry.d.ts +32 -0
  216. package/dist/daemon/agent-registry.js +42 -2
  217. package/dist/daemon/api.d.ts +12 -0
  218. package/dist/daemon/api.js +131 -2
  219. package/dist/daemon/cli-auth.d.ts +67 -0
  220. package/dist/daemon/cli-auth.js +537 -0
  221. package/dist/daemon/cloud-sync.js +9 -7
  222. package/dist/daemon/orchestrator.js +30 -0
  223. package/dist/daemon/router.d.ts +5 -0
  224. package/dist/daemon/router.js +78 -26
  225. package/dist/daemon/server.d.ts +5 -0
  226. package/dist/daemon/server.js +9 -1
  227. package/dist/daemon/services/browser-testing.d.ts +88 -0
  228. package/dist/daemon/services/browser-testing.js +244 -0
  229. package/dist/daemon/services/container-spawner.d.ts +135 -0
  230. package/dist/daemon/services/container-spawner.js +313 -0
  231. package/dist/daemon/types.d.ts +5 -1
  232. package/dist/dashboard/out/404.html +1 -1
  233. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  234. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  235. package/dist/dashboard/out/_next/static/chunks/699-3b1cd6618a45d259.js +1 -0
  236. package/dist/dashboard/out/_next/static/chunks/724-2dae7627550ab88f.js +9 -0
  237. package/dist/dashboard/out/_next/static/chunks/766-1f2dd8cb7f766b0b.js +1 -0
  238. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-3fdfa60e53f2810d.js +1 -0
  239. package/dist/dashboard/out/_next/static/chunks/app/app/page-e6381e5a6e1fbcfd.js +1 -0
  240. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-3538dfe0ffe984b8.js +1 -0
  241. package/dist/dashboard/out/_next/static/chunks/app/history/{page-b6edd4dde8d08194.js → page-abb9ab2d329f56e9.js} +1 -1
  242. package/dist/dashboard/out/_next/static/chunks/app/layout-c0d118c0f92d969c.js +1 -0
  243. package/dist/dashboard/out/_next/static/chunks/app/login/page-c22d080201cbd9fb.js +1 -0
  244. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-67a3e98d9a43a6ed.js +1 -0
  245. package/dist/dashboard/out/_next/static/chunks/app/page-77e9c65420a06cfb.js +1 -0
  246. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-b08ed1c34d14434a.js +1 -0
  247. package/dist/dashboard/out/_next/static/chunks/app/providers/page-e88bc117ef7671c3.js +1 -0
  248. package/dist/dashboard/out/_next/static/chunks/app/signup/page-68d34f50baa8ab6b.js +1 -0
  249. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  250. package/dist/dashboard/out/_next/static/chunks/{main-app-5d692157a8eb1fd9.js → main-app-6e8e8d3ef4e0192a.js} +1 -1
  251. package/dist/dashboard/out/_next/static/chunks/{main-c2f423b9c9f4591b.js → main-ed4e1fb6f29c34cf.js} +1 -1
  252. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  253. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  254. package/dist/dashboard/out/_next/static/css/7c3ae9e8617d42a5.css +1 -0
  255. package/dist/dashboard/out/app/onboarding.html +1 -0
  256. package/dist/dashboard/out/app/onboarding.txt +7 -0
  257. package/dist/dashboard/out/app.html +1 -14
  258. package/dist/dashboard/out/app.txt +2 -2
  259. package/dist/dashboard/out/connect-repos.html +1 -0
  260. package/dist/dashboard/out/connect-repos.txt +7 -0
  261. package/dist/dashboard/out/history.html +1 -1
  262. package/dist/dashboard/out/history.txt +2 -2
  263. package/dist/dashboard/out/index.html +1 -1
  264. package/dist/dashboard/out/index.txt +2 -2
  265. package/dist/dashboard/out/login.html +6 -0
  266. package/dist/dashboard/out/login.txt +7 -0
  267. package/dist/dashboard/out/metrics.html +1 -1
  268. package/dist/dashboard/out/metrics.txt +2 -2
  269. package/dist/dashboard/out/pricing.html +3 -3
  270. package/dist/dashboard/out/pricing.txt +2 -2
  271. package/dist/dashboard/out/providers.html +1 -0
  272. package/dist/dashboard/out/providers.txt +7 -0
  273. package/dist/dashboard/out/signup.html +6 -0
  274. package/dist/dashboard/out/signup.txt +7 -0
  275. package/dist/dashboard-server/server.js +1308 -8
  276. package/dist/hooks/emitter.d.ts +40 -0
  277. package/dist/hooks/emitter.js +63 -0
  278. package/dist/hooks/index.d.ts +3 -0
  279. package/dist/hooks/index.js +3 -0
  280. package/dist/hooks/registry.d.ts +173 -0
  281. package/dist/hooks/registry.js +476 -0
  282. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  283. package/dist/hooks/trajectory-hooks.js +183 -0
  284. package/dist/hooks/types.d.ts +141 -0
  285. package/dist/index.d.ts +2 -0
  286. package/dist/index.js +3 -0
  287. package/dist/memory/adapters/index.d.ts +8 -0
  288. package/dist/memory/adapters/index.js +8 -0
  289. package/dist/memory/adapters/inmemory.d.ts +59 -0
  290. package/dist/memory/adapters/inmemory.js +195 -0
  291. package/dist/memory/adapters/supermemory.d.ts +71 -0
  292. package/dist/memory/adapters/supermemory.js +338 -0
  293. package/dist/memory/factory.d.ts +48 -0
  294. package/dist/memory/factory.js +143 -0
  295. package/dist/memory/index.d.ts +32 -0
  296. package/dist/memory/index.js +32 -0
  297. package/dist/memory/memory-hooks.d.ts +60 -0
  298. package/dist/memory/memory-hooks.js +313 -0
  299. package/dist/memory/service.d.ts +49 -0
  300. package/dist/memory/service.js +146 -0
  301. package/dist/memory/types.d.ts +195 -0
  302. package/dist/memory/types.js +8 -0
  303. package/dist/policy/agent-policy.d.ts +225 -0
  304. package/dist/policy/agent-policy.js +665 -0
  305. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  306. package/dist/policy/cloud-policy-fetcher.js +64 -0
  307. package/dist/resiliency/crash-insights.d.ts +156 -0
  308. package/dist/resiliency/crash-insights.js +492 -0
  309. package/dist/resiliency/gossip-health.d.ts +137 -0
  310. package/dist/resiliency/gossip-health.js +241 -0
  311. package/dist/resiliency/index.d.ts +5 -0
  312. package/dist/resiliency/index.js +5 -0
  313. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  314. package/dist/resiliency/leader-watchdog.js +189 -0
  315. package/dist/resiliency/memory-monitor.d.ts +172 -0
  316. package/dist/resiliency/memory-monitor.js +593 -0
  317. package/dist/resiliency/stateless-lead.d.ts +149 -0
  318. package/dist/resiliency/stateless-lead.js +308 -0
  319. package/dist/resiliency/supervisor.d.ts +38 -0
  320. package/dist/resiliency/supervisor.js +122 -0
  321. package/dist/shared/cli-auth-config.d.ts +91 -0
  322. package/dist/shared/cli-auth-config.js +264 -0
  323. package/dist/storage/adapter.d.ts +1 -1
  324. package/dist/trajectory/config.d.ts +84 -0
  325. package/dist/trajectory/config.js +163 -0
  326. package/dist/trajectory/index.d.ts +8 -0
  327. package/dist/trajectory/index.js +8 -0
  328. package/dist/trajectory/integration.d.ts +292 -0
  329. package/dist/trajectory/integration.js +834 -0
  330. package/dist/utils/logger.js +1 -1
  331. package/dist/utils/project-namespace.d.ts +24 -0
  332. package/dist/utils/project-namespace.js +84 -0
  333. package/dist/wrapper/parser.d.ts +10 -0
  334. package/dist/wrapper/parser.js +100 -33
  335. package/dist/wrapper/pty-wrapper.d.ts +197 -16
  336. package/dist/wrapper/pty-wrapper.js +943 -106
  337. package/dist/wrapper/shared.d.ts +165 -0
  338. package/dist/wrapper/shared.js +270 -0
  339. package/dist/wrapper/tmux-wrapper.d.ts +73 -11
  340. package/dist/wrapper/tmux-wrapper.js +541 -120
  341. package/package.json +16 -16
  342. package/scripts/postinstall.js +60 -0
  343. package/test-push.txt +1 -0
  344. package/bin/tmux +0 -0
  345. package/dist/bridge/config.d.ts.map +0 -1
  346. package/dist/bridge/config.js.map +0 -1
  347. package/dist/bridge/index.d.ts.map +0 -1
  348. package/dist/bridge/index.js.map +0 -1
  349. package/dist/bridge/multi-project-client.d.ts.map +0 -1
  350. package/dist/bridge/multi-project-client.js.map +0 -1
  351. package/dist/bridge/shadow-cli.d.ts.map +0 -1
  352. package/dist/bridge/shadow-cli.js.map +0 -1
  353. package/dist/bridge/shadow-config.d.ts.map +0 -1
  354. package/dist/bridge/shadow-config.js.map +0 -1
  355. package/dist/bridge/spawner.d.ts.map +0 -1
  356. package/dist/bridge/spawner.js.map +0 -1
  357. package/dist/bridge/teams-config.d.ts.map +0 -1
  358. package/dist/bridge/teams-config.js.map +0 -1
  359. package/dist/bridge/types.d.ts.map +0 -1
  360. package/dist/bridge/types.js.map +0 -1
  361. package/dist/bridge/utils.d.ts.map +0 -1
  362. package/dist/bridge/utils.js.map +0 -1
  363. package/dist/cli/index.d.ts.map +0 -1
  364. package/dist/cli/index.js.map +0 -1
  365. package/dist/cloud/api/auth.d.ts.map +0 -1
  366. package/dist/cloud/api/auth.js.map +0 -1
  367. package/dist/cloud/api/billing.d.ts.map +0 -1
  368. package/dist/cloud/api/billing.js.map +0 -1
  369. package/dist/cloud/api/coordinators.d.ts.map +0 -1
  370. package/dist/cloud/api/coordinators.js.map +0 -1
  371. package/dist/cloud/api/daemons.d.ts.map +0 -1
  372. package/dist/cloud/api/daemons.js.map +0 -1
  373. package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
  374. package/dist/cloud/api/middleware/planLimits.js.map +0 -1
  375. package/dist/cloud/api/onboarding.d.ts.map +0 -1
  376. package/dist/cloud/api/onboarding.js.map +0 -1
  377. package/dist/cloud/api/providers.d.ts.map +0 -1
  378. package/dist/cloud/api/providers.js.map +0 -1
  379. package/dist/cloud/api/repos.d.ts.map +0 -1
  380. package/dist/cloud/api/repos.js.map +0 -1
  381. package/dist/cloud/api/teams.d.ts.map +0 -1
  382. package/dist/cloud/api/teams.js.map +0 -1
  383. package/dist/cloud/api/usage.d.ts.map +0 -1
  384. package/dist/cloud/api/usage.js.map +0 -1
  385. package/dist/cloud/api/workspaces.d.ts.map +0 -1
  386. package/dist/cloud/api/workspaces.js.map +0 -1
  387. package/dist/cloud/billing/index.d.ts.map +0 -1
  388. package/dist/cloud/billing/index.js.map +0 -1
  389. package/dist/cloud/billing/plans.d.ts.map +0 -1
  390. package/dist/cloud/billing/plans.js.map +0 -1
  391. package/dist/cloud/billing/service.d.ts.map +0 -1
  392. package/dist/cloud/billing/service.js.map +0 -1
  393. package/dist/cloud/billing/types.d.ts.map +0 -1
  394. package/dist/cloud/billing/types.js.map +0 -1
  395. package/dist/cloud/config.d.ts.map +0 -1
  396. package/dist/cloud/config.js.map +0 -1
  397. package/dist/cloud/db/drizzle.d.ts.map +0 -1
  398. package/dist/cloud/db/drizzle.js.map +0 -1
  399. package/dist/cloud/db/index.d.ts.map +0 -1
  400. package/dist/cloud/db/index.js.map +0 -1
  401. package/dist/cloud/db/schema.d.ts.map +0 -1
  402. package/dist/cloud/db/schema.js.map +0 -1
  403. package/dist/cloud/index.d.ts.map +0 -1
  404. package/dist/cloud/index.js.map +0 -1
  405. package/dist/cloud/provisioner/index.d.ts.map +0 -1
  406. package/dist/cloud/provisioner/index.js.map +0 -1
  407. package/dist/cloud/server.d.ts.map +0 -1
  408. package/dist/cloud/server.js.map +0 -1
  409. package/dist/cloud/services/coordinator.d.ts.map +0 -1
  410. package/dist/cloud/services/coordinator.js.map +0 -1
  411. package/dist/cloud/services/planLimits.d.ts.map +0 -1
  412. package/dist/cloud/services/planLimits.js.map +0 -1
  413. package/dist/cloud/vault/index.d.ts.map +0 -1
  414. package/dist/cloud/vault/index.js.map +0 -1
  415. package/dist/daemon/agent-manager.d.ts.map +0 -1
  416. package/dist/daemon/agent-manager.js.map +0 -1
  417. package/dist/daemon/agent-registry.d.ts.map +0 -1
  418. package/dist/daemon/agent-registry.js.map +0 -1
  419. package/dist/daemon/api.d.ts.map +0 -1
  420. package/dist/daemon/api.js.map +0 -1
  421. package/dist/daemon/auth.d.ts.map +0 -1
  422. package/dist/daemon/auth.js.map +0 -1
  423. package/dist/daemon/cloud-sync.d.ts.map +0 -1
  424. package/dist/daemon/cloud-sync.js.map +0 -1
  425. package/dist/daemon/connection.d.ts.map +0 -1
  426. package/dist/daemon/connection.js.map +0 -1
  427. package/dist/daemon/index.d.ts.map +0 -1
  428. package/dist/daemon/index.js.map +0 -1
  429. package/dist/daemon/orchestrator.d.ts.map +0 -1
  430. package/dist/daemon/orchestrator.js.map +0 -1
  431. package/dist/daemon/registry.d.ts.map +0 -1
  432. package/dist/daemon/registry.js.map +0 -1
  433. package/dist/daemon/router.d.ts.map +0 -1
  434. package/dist/daemon/router.js.map +0 -1
  435. package/dist/daemon/server.d.ts.map +0 -1
  436. package/dist/daemon/server.js.map +0 -1
  437. package/dist/daemon/types.d.ts.map +0 -1
  438. package/dist/daemon/types.js.map +0 -1
  439. package/dist/daemon/workspace-manager.d.ts.map +0 -1
  440. package/dist/daemon/workspace-manager.js.map +0 -1
  441. package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +0 -1
  442. package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +0 -1
  443. package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +0 -1
  444. package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +0 -1
  445. package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +0 -1
  446. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +0 -1
  447. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +0 -1
  448. package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +0 -1
  449. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-d80e03a5297f95b6.js +0 -1
  450. package/dist/dashboard/out/_next/static/chunks/webpack-a5acc2831d094776.js +0 -1
  451. package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +0 -1
  452. package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +0 -1
  453. package/dist/dashboard-server/metrics.d.ts.map +0 -1
  454. package/dist/dashboard-server/metrics.js.map +0 -1
  455. package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
  456. package/dist/dashboard-server/needs-attention.js.map +0 -1
  457. package/dist/dashboard-server/server.d.ts.map +0 -1
  458. package/dist/dashboard-server/server.js.map +0 -1
  459. package/dist/dashboard-server/start.d.ts.map +0 -1
  460. package/dist/dashboard-server/start.js.map +0 -1
  461. package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
  462. package/dist/hooks/inbox-check/hook.js.map +0 -1
  463. package/dist/hooks/inbox-check/index.d.ts.map +0 -1
  464. package/dist/hooks/inbox-check/index.js.map +0 -1
  465. package/dist/hooks/inbox-check/types.d.ts.map +0 -1
  466. package/dist/hooks/inbox-check/types.js.map +0 -1
  467. package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
  468. package/dist/hooks/inbox-check/utils.js.map +0 -1
  469. package/dist/hooks/index.d.ts.map +0 -1
  470. package/dist/hooks/index.js.map +0 -1
  471. package/dist/hooks/types.d.ts.map +0 -1
  472. package/dist/hooks/types.js.map +0 -1
  473. package/dist/index.d.ts.map +0 -1
  474. package/dist/index.js.map +0 -1
  475. package/dist/protocol/framing.d.ts.map +0 -1
  476. package/dist/protocol/framing.js.map +0 -1
  477. package/dist/protocol/index.d.ts.map +0 -1
  478. package/dist/protocol/index.js.map +0 -1
  479. package/dist/protocol/types.d.ts.map +0 -1
  480. package/dist/protocol/types.js.map +0 -1
  481. package/dist/resiliency/context-persistence.d.ts.map +0 -1
  482. package/dist/resiliency/context-persistence.js.map +0 -1
  483. package/dist/resiliency/health-monitor.d.ts.map +0 -1
  484. package/dist/resiliency/health-monitor.js.map +0 -1
  485. package/dist/resiliency/index.d.ts.map +0 -1
  486. package/dist/resiliency/index.js.map +0 -1
  487. package/dist/resiliency/logger.d.ts.map +0 -1
  488. package/dist/resiliency/logger.js.map +0 -1
  489. package/dist/resiliency/metrics.d.ts.map +0 -1
  490. package/dist/resiliency/metrics.js.map +0 -1
  491. package/dist/resiliency/provider-context.d.ts.map +0 -1
  492. package/dist/resiliency/provider-context.js.map +0 -1
  493. package/dist/resiliency/supervisor.d.ts.map +0 -1
  494. package/dist/resiliency/supervisor.js.map +0 -1
  495. package/dist/state/agent-state.d.ts.map +0 -1
  496. package/dist/state/agent-state.js.map +0 -1
  497. package/dist/storage/adapter.d.ts.map +0 -1
  498. package/dist/storage/adapter.js.map +0 -1
  499. package/dist/storage/sqlite-adapter.d.ts.map +0 -1
  500. package/dist/storage/sqlite-adapter.js.map +0 -1
  501. package/dist/utils/agent-config.d.ts.map +0 -1
  502. package/dist/utils/agent-config.js.map +0 -1
  503. package/dist/utils/command-resolver.d.ts.map +0 -1
  504. package/dist/utils/command-resolver.js.map +0 -1
  505. package/dist/utils/index.d.ts.map +0 -1
  506. package/dist/utils/index.js.map +0 -1
  507. package/dist/utils/logger.d.ts.map +0 -1
  508. package/dist/utils/logger.js.map +0 -1
  509. package/dist/utils/name-generator.d.ts.map +0 -1
  510. package/dist/utils/name-generator.js.map +0 -1
  511. package/dist/utils/project-namespace.d.ts.map +0 -1
  512. package/dist/utils/project-namespace.js.map +0 -1
  513. package/dist/utils/tmux-resolver.d.ts.map +0 -1
  514. package/dist/utils/tmux-resolver.js.map +0 -1
  515. package/dist/utils/update-checker.d.ts.map +0 -1
  516. package/dist/utils/update-checker.js.map +0 -1
  517. package/dist/wrapper/client.d.ts.map +0 -1
  518. package/dist/wrapper/client.js.map +0 -1
  519. package/dist/wrapper/inbox.d.ts.map +0 -1
  520. package/dist/wrapper/inbox.js.map +0 -1
  521. package/dist/wrapper/index.d.ts.map +0 -1
  522. package/dist/wrapper/index.js.map +0 -1
  523. package/dist/wrapper/parser.d.ts.map +0 -1
  524. package/dist/wrapper/parser.js.map +0 -1
  525. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  526. package/dist/wrapper/pty-wrapper.js.map +0 -1
  527. package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
  528. package/dist/wrapper/tmux-wrapper.js.map +0 -1
  529. package/docs/AGENTS.md +0 -513
  530. package/docs/ARCHITECTURE_DECISIONS.md +0 -175
  531. package/docs/CHANGELOG.md +0 -11
  532. package/docs/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
  533. package/docs/CLOUD-ARCHITECTURE.md +0 -652
  534. package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
  535. package/docs/COMPETITIVE_ANALYSIS.md +0 -897
  536. package/docs/CONTRIBUTING.md +0 -151
  537. package/docs/DESIGN_BRIDGE_STAFFING.md +0 -878
  538. package/docs/DESIGN_V2.md +0 -1079
  539. package/docs/INTEGRATION-GUIDE.md +0 -926
  540. package/docs/MONETIZATION.md +0 -1679
  541. package/docs/PROPOSAL-trajectories.md +0 -1582
  542. package/docs/PROTOCOL.md +0 -325
  543. package/docs/SCALING_ANALYSIS.md +0 -280
  544. package/docs/TESTING_PRESENCE_FEATURES.md +0 -327
  545. package/docs/TMUX_IMPLEMENTATION_NOTES.md +0 -364
  546. package/docs/TMUX_IMPROVEMENTS.md +0 -968
  547. package/docs/agent-relay-snippet.md +0 -168
  548. package/docs/competitive-analysis-mcp-agent-mail.md +0 -389
  549. package/docs/dashboard-v2-plan.md +0 -179
  550. package/docs/guides/CLOUD.md +0 -236
  551. package/docs/guides/LOCAL.md +0 -535
  552. package/docs/guides/SELF-HOSTED.md +0 -494
  553. package/docs/proposals/shadow-as-subagent.md +0 -765
  554. package/docs/proposals/slack-bot-integration.md +0 -1457
  555. package/docs/removable-code-analysis.md +0 -24
  556. package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
  557. package/scripts/dev/dev-team-setup.sh +0 -431
  558. package/scripts/e2e-test.sh +0 -119
  559. package/scripts/games/game-protocol.md +0 -79
  560. package/scripts/games/hearts-setup.sh +0 -264
  561. package/scripts/tictactoe-setup.sh +0 -181
  562. /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-f7b8ab0809342e77.js} +0 -0
  563. /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-5cc6e1921389a58a.js} +0 -0
  564. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.js → page-53b8a69f76db17d0.js} +0 -0
  565. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
  566. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_buildManifest.js +0 -0
  567. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_ssgManifest.js +0 -0
@@ -0,0 +1,313 @@
1
+ /**
2
+ * Memory Hooks
3
+ *
4
+ * Provides memory-aware lifecycle hooks that automatically:
5
+ * - Load relevant context on session start
6
+ * - Prompt for memory save on session end
7
+ * - Handle @memory: pattern output
8
+ */
9
+ import { createMemoryAdapter } from './factory.js';
10
+ /**
11
+ * Default patterns that indicate content worth auto-saving
12
+ *
13
+ * Categories:
14
+ * - Learnings: discoveries, realizations, insights
15
+ * - Decisions: significant choices made
16
+ * - Breakthroughs: problems solved, aha moments
17
+ * - Failures: things that went wrong, errors encountered
18
+ * - Preferences: user/project preferences
19
+ * - Retrospectives: end-of-task reflections
20
+ */
21
+ const DEFAULT_SAVE_PATTERNS = [
22
+ // Learnings and discoveries
23
+ /(?:learned|discovered|found out|realized|important|remember|note to self)/i,
24
+ /(?:key insight|takeaway|lesson learned|now I understand)/i,
25
+ // Significant decisions
26
+ /(?:decided to|decision:|chose to|going with|settled on|approach:|strategy:)/i,
27
+ /(?:trade-?off|weighing|considering|opting for)/i,
28
+ // Breakthroughs and solutions
29
+ /(?:breakthrough|finally|solved|figured out|the fix was|root cause)/i,
30
+ /(?:aha|eureka|that's why|the issue was|problem was)/i,
31
+ // Failures and problems
32
+ /(?:failed because|mistake was|should have|shouldn't have|next time)/i,
33
+ /(?:went wrong|broke because|error was due to|caused by)/i,
34
+ /(?:avoid|don't repeat|pitfall|gotcha|watch out)/i,
35
+ // User/project preferences
36
+ /(?:user prefers?|preference|always use|never use|don't use)/i,
37
+ /(?:project uses?|codebase uses?|this repo|this project)/i,
38
+ /(?:convention|pattern|style guide|best practice)/i,
39
+ // Retrospectives
40
+ /(?:in retrospect|looking back|reflecting|summary:|recap:)/i,
41
+ /(?:what worked|what didn't|improvements for next time)/i,
42
+ ];
43
+ /**
44
+ * Create memory hooks for automatic context loading and saving
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const hooks = createMemoryHooks({
49
+ * config: { type: 'supermemory', apiKey: 'xxx' },
50
+ * agentId: 'my-agent',
51
+ * projectId: 'my-project',
52
+ * });
53
+ *
54
+ * registry.registerLifecycleHooks(hooks);
55
+ * ```
56
+ */
57
+ export function createMemoryHooks(options = {}) {
58
+ const state = {
59
+ adapter: options.adapter ?? null,
60
+ adapterPromise: null,
61
+ sessionLearnings: [],
62
+ options: {
63
+ agentId: options.agentId ?? 'default',
64
+ projectId: options.projectId ?? 'default',
65
+ injectOnStart: options.injectOnStart ?? true,
66
+ maxStartMemories: options.maxStartMemories ?? 5,
67
+ startSearchQuery: options.startSearchQuery ?? '',
68
+ promptOnEnd: options.promptOnEnd ?? false,
69
+ autoSave: options.autoSave ?? true,
70
+ autoSaveOnEnd: options.autoSaveOnEnd ?? true,
71
+ savePatterns: options.savePatterns ?? DEFAULT_SAVE_PATTERNS,
72
+ config: options.config,
73
+ },
74
+ };
75
+ return {
76
+ onSessionStart: createSessionStartHook(state),
77
+ onSessionEnd: createSessionEndHook(state),
78
+ onOutput: createOutputHook(state),
79
+ };
80
+ }
81
+ /**
82
+ * Lazily get or create the memory adapter
83
+ */
84
+ async function getAdapter(state) {
85
+ if (state.adapter) {
86
+ return state.adapter;
87
+ }
88
+ if (!state.adapterPromise) {
89
+ state.adapterPromise = createMemoryAdapter({
90
+ ...state.options.config,
91
+ defaultAgentId: state.options.agentId,
92
+ defaultProjectId: state.options.projectId,
93
+ }).catch(error => {
94
+ console.error('[memory-hooks] Failed to create adapter:', error);
95
+ return null;
96
+ });
97
+ }
98
+ state.adapter = await state.adapterPromise;
99
+ return state.adapter;
100
+ }
101
+ /**
102
+ * Session start hook - loads relevant memories
103
+ */
104
+ function createSessionStartHook(state) {
105
+ return async (ctx) => {
106
+ if (!state.options.injectOnStart) {
107
+ return;
108
+ }
109
+ state.sessionId = ctx.sessionId;
110
+ const adapter = await getAdapter(state);
111
+ if (!adapter) {
112
+ return;
113
+ }
114
+ try {
115
+ // Build search query based on context
116
+ const searchQuery = state.options.startSearchQuery ||
117
+ `project: ${ctx.workingDir} OR agent: ${state.options.agentId}`;
118
+ const memories = await adapter.search({
119
+ query: searchQuery,
120
+ limit: state.options.maxStartMemories,
121
+ agentId: state.options.agentId,
122
+ projectId: state.options.projectId,
123
+ });
124
+ if (memories.length === 0) {
125
+ return;
126
+ }
127
+ const formattedMemories = formatMemoriesForInjection(memories);
128
+ return {
129
+ inject: `\n[CONTEXT FROM MEMORY]\n${formattedMemories}\n`,
130
+ };
131
+ }
132
+ catch (error) {
133
+ console.error('[memory-hooks] Failed to load memories:', error);
134
+ }
135
+ };
136
+ }
137
+ /**
138
+ * Session end hook - logs learnings summary and optionally prompts for more
139
+ */
140
+ function createSessionEndHook(state) {
141
+ return async (ctx) => {
142
+ // Log session summary (learnings were already saved immediately during output)
143
+ if (state.options.autoSaveOnEnd && ctx.graceful && state.sessionLearnings.length > 0) {
144
+ const uniqueLearnings = [...new Set(state.sessionLearnings)];
145
+ console.log(`[memory-hooks] Session captured ${uniqueLearnings.length} learnings (saved during session)`);
146
+ // Clear for next session
147
+ state.sessionLearnings = [];
148
+ }
149
+ // Optional prompt for additional saves
150
+ if (state.options.promptOnEnd && ctx.graceful) {
151
+ return {
152
+ inject: `
153
+ [SESSION ENDING]
154
+ If you learned anything important, save it for future sessions:
155
+ @memory:save <what you learned>
156
+
157
+ Examples:
158
+ @memory:save User prefers TypeScript over JavaScript
159
+ @memory:save This project uses Prisma for database access
160
+ @memory:save Auth tokens stored in httpOnly cookies
161
+ `,
162
+ };
163
+ }
164
+ };
165
+ }
166
+ /**
167
+ * Output hook - handles @memory: patterns and auto-save
168
+ */
169
+ function createOutputHook(state) {
170
+ return async (ctx) => {
171
+ const { content } = ctx;
172
+ // Handle @memory: patterns (explicit saves)
173
+ const memoryMatch = content.match(/@memory:(\w+)\s+(.+)/);
174
+ if (memoryMatch) {
175
+ const [, action, payload] = memoryMatch;
176
+ return handleMemoryCommand(state, action, payload.trim());
177
+ }
178
+ // Auto-detect and save learnings
179
+ if (state.options.autoSave) {
180
+ for (const pattern of state.options.savePatterns) {
181
+ if (pattern.test(content)) {
182
+ // Extract the relevant sentence/phrase
183
+ const relevantContent = extractRelevantContent(content, pattern);
184
+ if (relevantContent && relevantContent.length > 10) {
185
+ // Collect for session-end retrospective
186
+ if (state.options.autoSaveOnEnd) {
187
+ state.sessionLearnings.push(relevantContent);
188
+ }
189
+ // Also save immediately (ensures persistence even on crash)
190
+ const adapter = await getAdapter(state);
191
+ if (adapter) {
192
+ await adapter.add(relevantContent, {
193
+ source: 'auto-detected',
194
+ sessionId: state.sessionId,
195
+ tags: ['auto-saved'],
196
+ });
197
+ }
198
+ }
199
+ break;
200
+ }
201
+ }
202
+ }
203
+ };
204
+ }
205
+ /**
206
+ * Handle @memory: commands
207
+ */
208
+ async function handleMemoryCommand(state, action, payload) {
209
+ const adapter = await getAdapter(state);
210
+ if (!adapter) {
211
+ return { inject: '[memory] Memory service not available' };
212
+ }
213
+ switch (action.toLowerCase()) {
214
+ case 'save':
215
+ case 'add': {
216
+ const result = await adapter.add(payload, {
217
+ source: 'agent-command',
218
+ sessionId: state.sessionId,
219
+ });
220
+ if (result.success) {
221
+ return { inject: `[memory] Saved: "${truncate(payload, 50)}"` };
222
+ }
223
+ else {
224
+ return { inject: `[memory] Failed to save: ${result.error}` };
225
+ }
226
+ }
227
+ case 'search':
228
+ case 'find':
229
+ case 'recall': {
230
+ const memories = await adapter.search({
231
+ query: payload,
232
+ limit: 5,
233
+ });
234
+ if (memories.length === 0) {
235
+ return { inject: '[memory] No relevant memories found' };
236
+ }
237
+ const formatted = formatMemoriesForInjection(memories);
238
+ return { inject: `[memory] Found ${memories.length} memories:\n${formatted}` };
239
+ }
240
+ case 'forget':
241
+ case 'delete': {
242
+ const result = await adapter.delete(payload);
243
+ if (result.success) {
244
+ return { inject: `[memory] Deleted memory: ${payload}` };
245
+ }
246
+ else {
247
+ return { inject: `[memory] Failed to delete: ${result.error}` };
248
+ }
249
+ }
250
+ case 'list': {
251
+ if (!adapter.list) {
252
+ return { inject: '[memory] List not supported by this adapter' };
253
+ }
254
+ const limit = parseInt(payload) || 10;
255
+ const memories = await adapter.list({ limit });
256
+ if (memories.length === 0) {
257
+ return { inject: '[memory] No memories stored' };
258
+ }
259
+ const formatted = formatMemoriesForInjection(memories);
260
+ return { inject: `[memory] Recent memories:\n${formatted}` };
261
+ }
262
+ default:
263
+ return {
264
+ inject: `[memory] Unknown action: ${action}. Use: save, search, forget, list`,
265
+ };
266
+ }
267
+ }
268
+ /**
269
+ * Format memories for injection into agent context
270
+ */
271
+ function formatMemoriesForInjection(memories) {
272
+ return memories
273
+ .map((m, i) => {
274
+ const score = m.score ? ` (relevance: ${Math.round(m.score * 100)}%)` : '';
275
+ const tags = m.tags?.length ? ` [${m.tags.join(', ')}]` : '';
276
+ return `${i + 1}. ${m.content}${tags}${score}`;
277
+ })
278
+ .join('\n');
279
+ }
280
+ /**
281
+ * Extract relevant content around a pattern match
282
+ */
283
+ function extractRelevantContent(content, pattern) {
284
+ const match = content.match(pattern);
285
+ if (!match)
286
+ return null;
287
+ // Find the sentence containing the match
288
+ const sentences = content.split(/[.!?]+/);
289
+ for (const sentence of sentences) {
290
+ if (pattern.test(sentence)) {
291
+ return sentence.trim();
292
+ }
293
+ }
294
+ return match[0];
295
+ }
296
+ /**
297
+ * Truncate string with ellipsis
298
+ */
299
+ function truncate(str, maxLen) {
300
+ if (str.length <= maxLen)
301
+ return str;
302
+ return str.slice(0, maxLen - 3) + '...';
303
+ }
304
+ /**
305
+ * Get memory hooks with default settings
306
+ *
307
+ * @param agentId - Agent identifier
308
+ * @param projectId - Project identifier
309
+ */
310
+ export function getMemoryHooks(agentId, projectId) {
311
+ return createMemoryHooks({ agentId, projectId });
312
+ }
313
+ //# sourceMappingURL=memory-hooks.js.map
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Memory Service
3
+ *
4
+ * A simplified service wrapper around memory adapters for use in hooks.
5
+ * Provides a consistent interface and handles common operations.
6
+ */
7
+ import type { MemoryAdapter, MemoryService, MemoryConfig } from './types.js';
8
+ /**
9
+ * Options for creating a memory service
10
+ */
11
+ export interface MemoryServiceOptions {
12
+ /** Pre-configured adapter to use */
13
+ adapter?: MemoryAdapter;
14
+ /** Configuration for creating a new adapter */
15
+ config?: Partial<MemoryConfig>;
16
+ /** Default agent ID for all operations */
17
+ agentId?: string;
18
+ /** Default project ID for all operations */
19
+ projectId?: string;
20
+ /** Default session ID for all operations */
21
+ sessionId?: string;
22
+ }
23
+ /**
24
+ * Create a memory service instance
25
+ *
26
+ * @param options - Service configuration
27
+ * @returns Memory service instance
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Create with default in-memory adapter
32
+ * const memory = createMemoryService();
33
+ *
34
+ * // Create with specific adapter
35
+ * const adapter = await createMemoryAdapter({ type: 'supermemory', apiKey });
36
+ * const memory = createMemoryService({ adapter });
37
+ *
38
+ * // Create with config
39
+ * const memory = createMemoryService({
40
+ * config: { type: 'supermemory' },
41
+ * agentId: 'my-agent',
42
+ * });
43
+ * ```
44
+ */
45
+ export declare function createMemoryService(options?: MemoryServiceOptions): MemoryService & {
46
+ getUnderlyingAdapter(): MemoryAdapter | null;
47
+ close(): Promise<void>;
48
+ };
49
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Memory Service
3
+ *
4
+ * A simplified service wrapper around memory adapters for use in hooks.
5
+ * Provides a consistent interface and handles common operations.
6
+ */
7
+ import { createMemoryAdapter } from './factory.js';
8
+ /**
9
+ * Internal memory service implementation
10
+ */
11
+ class MemoryServiceImpl {
12
+ adapter = null;
13
+ adapterPromise = null;
14
+ options;
15
+ available = false;
16
+ constructor(options = {}) {
17
+ this.options = options;
18
+ if (options.adapter) {
19
+ this.adapter = options.adapter;
20
+ this.available = true;
21
+ }
22
+ }
23
+ /**
24
+ * Lazily initialize the adapter
25
+ */
26
+ async getAdapter() {
27
+ if (this.adapter) {
28
+ return this.adapter;
29
+ }
30
+ if (!this.adapterPromise) {
31
+ this.adapterPromise = this.initAdapter();
32
+ }
33
+ return this.adapterPromise;
34
+ }
35
+ async initAdapter() {
36
+ try {
37
+ const config = this.options.config ?? {};
38
+ this.adapter = await createMemoryAdapter({
39
+ ...config,
40
+ defaultAgentId: config.defaultAgentId ?? this.options.agentId,
41
+ defaultProjectId: config.defaultProjectId ?? this.options.projectId,
42
+ });
43
+ this.available = true;
44
+ return this.adapter;
45
+ }
46
+ catch (error) {
47
+ console.error('[memory] Failed to initialize adapter:', error);
48
+ this.available = false;
49
+ return null;
50
+ }
51
+ }
52
+ async add(content, options) {
53
+ const adapter = await this.getAdapter();
54
+ if (!adapter) {
55
+ return { success: false, error: 'Memory adapter not available' };
56
+ }
57
+ return adapter.add(content, {
58
+ ...options,
59
+ agentId: options?.agentId ?? this.options.agentId,
60
+ projectId: options?.projectId ?? this.options.projectId,
61
+ sessionId: options?.sessionId ?? this.options.sessionId,
62
+ });
63
+ }
64
+ async search(query) {
65
+ const adapter = await this.getAdapter();
66
+ if (!adapter) {
67
+ return [];
68
+ }
69
+ const searchQuery = typeof query === 'string'
70
+ ? {
71
+ query,
72
+ agentId: this.options.agentId,
73
+ projectId: this.options.projectId,
74
+ }
75
+ : {
76
+ ...query,
77
+ agentId: query.agentId ?? this.options.agentId,
78
+ projectId: query.projectId ?? this.options.projectId,
79
+ };
80
+ return adapter.search(searchQuery);
81
+ }
82
+ async delete(id) {
83
+ const adapter = await this.getAdapter();
84
+ if (!adapter) {
85
+ return { success: false, error: 'Memory adapter not available' };
86
+ }
87
+ return adapter.delete(id);
88
+ }
89
+ async list(limit) {
90
+ const adapter = await this.getAdapter();
91
+ if (!adapter || !adapter.list) {
92
+ return [];
93
+ }
94
+ return adapter.list({
95
+ limit,
96
+ agentId: this.options.agentId,
97
+ projectId: this.options.projectId,
98
+ });
99
+ }
100
+ isAvailable() {
101
+ return this.available;
102
+ }
103
+ /**
104
+ * Get the underlying adapter (for advanced use)
105
+ */
106
+ getUnderlyingAdapter() {
107
+ return this.adapter;
108
+ }
109
+ /**
110
+ * Close the adapter
111
+ */
112
+ async close() {
113
+ if (this.adapter?.close) {
114
+ await this.adapter.close();
115
+ }
116
+ this.adapter = null;
117
+ this.adapterPromise = null;
118
+ this.available = false;
119
+ }
120
+ }
121
+ /**
122
+ * Create a memory service instance
123
+ *
124
+ * @param options - Service configuration
125
+ * @returns Memory service instance
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * // Create with default in-memory adapter
130
+ * const memory = createMemoryService();
131
+ *
132
+ * // Create with specific adapter
133
+ * const adapter = await createMemoryAdapter({ type: 'supermemory', apiKey });
134
+ * const memory = createMemoryService({ adapter });
135
+ *
136
+ * // Create with config
137
+ * const memory = createMemoryService({
138
+ * config: { type: 'supermemory' },
139
+ * agentId: 'my-agent',
140
+ * });
141
+ * ```
142
+ */
143
+ export function createMemoryService(options) {
144
+ return new MemoryServiceImpl(options);
145
+ }
146
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Agent Relay Memory Types
3
+ *
4
+ * Core types for the memory adapter system. Memory adapters provide
5
+ * semantic storage and retrieval of agent learnings and context.
6
+ */
7
+ /**
8
+ * A memory entry stored in the system
9
+ */
10
+ export interface MemoryEntry {
11
+ /** Unique identifier for the memory */
12
+ id: string;
13
+ /** The actual content of the memory */
14
+ content: string;
15
+ /** Timestamp when memory was created */
16
+ createdAt: number;
17
+ /** Timestamp when memory was last accessed */
18
+ lastAccessedAt?: number;
19
+ /** Optional metadata tags */
20
+ tags?: string[];
21
+ /** Source of the memory (e.g., 'agent', 'user', 'session') */
22
+ source?: string;
23
+ /** Agent that created the memory */
24
+ agentId?: string;
25
+ /** Project associated with this memory */
26
+ projectId?: string;
27
+ /** Session ID where memory was created */
28
+ sessionId?: string;
29
+ /** Relevance score (when returned from search) */
30
+ score?: number;
31
+ /** Additional structured metadata */
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ /**
35
+ * Query options for searching memories
36
+ */
37
+ export interface MemorySearchQuery {
38
+ /** Semantic search query text */
39
+ query: string;
40
+ /** Maximum number of results to return */
41
+ limit?: number;
42
+ /** Minimum relevance score threshold (0-1) */
43
+ minScore?: number;
44
+ /** Filter by tags */
45
+ tags?: string[];
46
+ /** Filter by agent ID */
47
+ agentId?: string;
48
+ /** Filter by project ID */
49
+ projectId?: string;
50
+ /** Filter by memories created after this timestamp */
51
+ since?: number;
52
+ /** Filter by memories created before this timestamp */
53
+ before?: number;
54
+ }
55
+ /**
56
+ * Options for adding a memory
57
+ */
58
+ export interface AddMemoryOptions {
59
+ /** Optional tags for the memory */
60
+ tags?: string[];
61
+ /** Source of the memory */
62
+ source?: string;
63
+ /** Agent creating the memory */
64
+ agentId?: string;
65
+ /** Project context */
66
+ projectId?: string;
67
+ /** Session context */
68
+ sessionId?: string;
69
+ /** Additional metadata */
70
+ metadata?: Record<string, unknown>;
71
+ }
72
+ /**
73
+ * Result of a memory operation
74
+ */
75
+ export interface MemoryResult {
76
+ /** Whether the operation succeeded */
77
+ success: boolean;
78
+ /** ID of the affected memory (if applicable) */
79
+ id?: string;
80
+ /** Error message if operation failed */
81
+ error?: string;
82
+ }
83
+ /**
84
+ * Memory adapter interface
85
+ *
86
+ * All memory backends must implement this interface to be used
87
+ * with the agent-relay memory system.
88
+ */
89
+ export interface MemoryAdapter {
90
+ /** Unique identifier for this adapter type */
91
+ readonly type: string;
92
+ /**
93
+ * Initialize the adapter (connect to backend, etc.)
94
+ */
95
+ init(): Promise<void>;
96
+ /**
97
+ * Add a new memory to the system
98
+ * @param content - The content to remember
99
+ * @param options - Optional metadata and context
100
+ * @returns Result with the new memory's ID
101
+ */
102
+ add(content: string, options?: AddMemoryOptions): Promise<MemoryResult>;
103
+ /**
104
+ * Search for relevant memories
105
+ * @param query - Search parameters
106
+ * @returns Array of matching memories, ordered by relevance
107
+ */
108
+ search(query: MemorySearchQuery): Promise<MemoryEntry[]>;
109
+ /**
110
+ * Get a specific memory by ID
111
+ * @param id - The memory ID
112
+ * @returns The memory entry or null if not found
113
+ */
114
+ get(id: string): Promise<MemoryEntry | null>;
115
+ /**
116
+ * Delete a memory
117
+ * @param id - The memory ID to delete
118
+ * @returns Result indicating success/failure
119
+ */
120
+ delete(id: string): Promise<MemoryResult>;
121
+ /**
122
+ * Update an existing memory
123
+ * @param id - The memory ID
124
+ * @param content - New content
125
+ * @param options - Optional updated metadata
126
+ * @returns Result indicating success/failure
127
+ */
128
+ update?(id: string, content: string, options?: Partial<AddMemoryOptions>): Promise<MemoryResult>;
129
+ /**
130
+ * List recent memories
131
+ * @param options - Filter options
132
+ * @returns Array of recent memories
133
+ */
134
+ list?(options?: {
135
+ limit?: number;
136
+ agentId?: string;
137
+ projectId?: string;
138
+ }): Promise<MemoryEntry[]>;
139
+ /**
140
+ * Clear all memories matching criteria
141
+ * @param options - Filter for what to clear
142
+ */
143
+ clear?(options?: {
144
+ agentId?: string;
145
+ projectId?: string;
146
+ before?: number;
147
+ }): Promise<MemoryResult>;
148
+ /**
149
+ * Get statistics about stored memories
150
+ */
151
+ stats?(): Promise<{
152
+ totalCount: number;
153
+ byAgent?: Record<string, number>;
154
+ byProject?: Record<string, number>;
155
+ }>;
156
+ /**
157
+ * Close the adapter and release resources
158
+ */
159
+ close?(): Promise<void>;
160
+ }
161
+ /**
162
+ * Configuration for memory adapters
163
+ */
164
+ export interface MemoryConfig {
165
+ /** Adapter type: 'inmemory', 'supermemory', 'claude', etc. */
166
+ type: string;
167
+ /** API key for external services */
168
+ apiKey?: string;
169
+ /** API endpoint URL (for supermemory, etc.) */
170
+ endpoint?: string;
171
+ /** Default agent ID to use */
172
+ defaultAgentId?: string;
173
+ /** Default project ID to use */
174
+ defaultProjectId?: string;
175
+ /** Additional adapter-specific options */
176
+ options?: Record<string, unknown>;
177
+ }
178
+ /**
179
+ * Memory service interface for hooks
180
+ *
181
+ * This is a simplified interface exposed to hooks for memory operations.
182
+ */
183
+ export interface MemoryService {
184
+ /** Add a memory */
185
+ add(content: string, options?: AddMemoryOptions): Promise<MemoryResult>;
186
+ /** Search for memories */
187
+ search(query: string | MemorySearchQuery): Promise<MemoryEntry[]>;
188
+ /** Delete a memory */
189
+ delete(id: string): Promise<MemoryResult>;
190
+ /** List recent memories */
191
+ list(limit?: number): Promise<MemoryEntry[]>;
192
+ /** Check if memory service is available */
193
+ isAvailable(): boolean;
194
+ }
195
+ //# sourceMappingURL=types.d.ts.map