agent-relay 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +1 -1
  2. package/dist/bridge/spawner.d.ts +53 -0
  3. package/dist/bridge/spawner.d.ts.map +1 -1
  4. package/dist/bridge/spawner.js +203 -19
  5. package/dist/bridge/spawner.js.map +1 -1
  6. package/dist/bridge/types.d.ts +12 -0
  7. package/dist/bridge/types.d.ts.map +1 -1
  8. package/dist/cli/index.js +401 -5
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cloud/api/auth.d.ts +3 -2
  11. package/dist/cloud/api/auth.d.ts.map +1 -1
  12. package/dist/cloud/api/auth.js +10 -98
  13. package/dist/cloud/api/auth.js.map +1 -1
  14. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  15. package/dist/cloud/api/cli-pty-runner.d.ts.map +1 -0
  16. package/dist/cloud/api/cli-pty-runner.js +119 -0
  17. package/dist/cloud/api/cli-pty-runner.js.map +1 -0
  18. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  19. package/dist/cloud/api/generic-webhooks.d.ts.map +1 -0
  20. package/dist/cloud/api/generic-webhooks.js +129 -0
  21. package/dist/cloud/api/generic-webhooks.js.map +1 -0
  22. package/dist/cloud/api/git.d.ts +8 -0
  23. package/dist/cloud/api/git.d.ts.map +1 -0
  24. package/dist/cloud/api/git.js +131 -0
  25. package/dist/cloud/api/git.js.map +1 -0
  26. package/dist/cloud/api/github-app.d.ts +11 -0
  27. package/dist/cloud/api/github-app.d.ts.map +1 -0
  28. package/dist/cloud/api/github-app.js +189 -0
  29. package/dist/cloud/api/github-app.js.map +1 -0
  30. package/dist/cloud/api/middleware/planLimits.d.ts +7 -0
  31. package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -1
  32. package/dist/cloud/api/middleware/planLimits.js +39 -1
  33. package/dist/cloud/api/middleware/planLimits.js.map +1 -1
  34. package/dist/cloud/api/monitoring.d.ts +11 -0
  35. package/dist/cloud/api/monitoring.d.ts.map +1 -0
  36. package/dist/cloud/api/monitoring.js +578 -0
  37. package/dist/cloud/api/monitoring.js.map +1 -0
  38. package/dist/cloud/api/nango-auth.d.ts +9 -0
  39. package/dist/cloud/api/nango-auth.d.ts.map +1 -0
  40. package/dist/cloud/api/nango-auth.js +377 -0
  41. package/dist/cloud/api/nango-auth.js.map +1 -0
  42. package/dist/cloud/api/onboarding.d.ts +8 -1
  43. package/dist/cloud/api/onboarding.d.ts.map +1 -1
  44. package/dist/cloud/api/onboarding.js +300 -119
  45. package/dist/cloud/api/onboarding.js.map +1 -1
  46. package/dist/cloud/api/policy.d.ts +8 -0
  47. package/dist/cloud/api/policy.d.ts.map +1 -0
  48. package/dist/cloud/api/policy.js +229 -0
  49. package/dist/cloud/api/policy.js.map +1 -0
  50. package/dist/cloud/api/providers.js +114 -42
  51. package/dist/cloud/api/providers.js.map +1 -1
  52. package/dist/cloud/api/test-helpers.d.ts +10 -0
  53. package/dist/cloud/api/test-helpers.d.ts.map +1 -0
  54. package/dist/cloud/api/test-helpers.js +575 -0
  55. package/dist/cloud/api/test-helpers.js.map +1 -0
  56. package/dist/cloud/api/webhooks.d.ts +7 -0
  57. package/dist/cloud/api/webhooks.d.ts.map +1 -0
  58. package/dist/cloud/api/webhooks.js +496 -0
  59. package/dist/cloud/api/webhooks.js.map +1 -0
  60. package/dist/cloud/api/workspaces.js +225 -8
  61. package/dist/cloud/api/workspaces.js.map +1 -1
  62. package/dist/cloud/billing/plans.d.ts.map +1 -1
  63. package/dist/cloud/billing/plans.js +13 -0
  64. package/dist/cloud/billing/plans.js.map +1 -1
  65. package/dist/cloud/billing/types.d.ts +9 -3
  66. package/dist/cloud/billing/types.d.ts.map +1 -1
  67. package/dist/cloud/config.d.ts +9 -2
  68. package/dist/cloud/config.d.ts.map +1 -1
  69. package/dist/cloud/config.js +13 -4
  70. package/dist/cloud/config.js.map +1 -1
  71. package/dist/cloud/db/drizzle.d.ts +84 -1
  72. package/dist/cloud/db/drizzle.d.ts.map +1 -1
  73. package/dist/cloud/db/drizzle.js +470 -0
  74. package/dist/cloud/db/drizzle.js.map +1 -1
  75. package/dist/cloud/db/index.d.ts +9 -4
  76. package/dist/cloud/db/index.d.ts.map +1 -1
  77. package/dist/cloud/db/index.js +11 -3
  78. package/dist/cloud/db/index.js.map +1 -1
  79. package/dist/cloud/db/schema.d.ts +3283 -556
  80. package/dist/cloud/db/schema.d.ts.map +1 -1
  81. package/dist/cloud/db/schema.js +314 -1
  82. package/dist/cloud/db/schema.js.map +1 -1
  83. package/dist/cloud/index.d.ts +1 -0
  84. package/dist/cloud/index.d.ts.map +1 -1
  85. package/dist/cloud/index.js +2 -0
  86. package/dist/cloud/index.js.map +1 -1
  87. package/dist/cloud/provisioner/index.d.ts +24 -0
  88. package/dist/cloud/provisioner/index.d.ts.map +1 -1
  89. package/dist/cloud/provisioner/index.js +319 -18
  90. package/dist/cloud/provisioner/index.js.map +1 -1
  91. package/dist/cloud/server.d.ts +1 -0
  92. package/dist/cloud/server.d.ts.map +1 -1
  93. package/dist/cloud/server.js +357 -13
  94. package/dist/cloud/server.js.map +1 -1
  95. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  96. package/dist/cloud/services/auto-scaler.d.ts.map +1 -0
  97. package/dist/cloud/services/auto-scaler.js +439 -0
  98. package/dist/cloud/services/auto-scaler.js.map +1 -0
  99. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  100. package/dist/cloud/services/capacity-manager.d.ts.map +1 -0
  101. package/dist/cloud/services/capacity-manager.js +449 -0
  102. package/dist/cloud/services/capacity-manager.js.map +1 -0
  103. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  104. package/dist/cloud/services/ci-agent-spawner.d.ts.map +1 -0
  105. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  106. package/dist/cloud/services/ci-agent-spawner.js.map +1 -0
  107. package/dist/cloud/services/index.d.ts +12 -0
  108. package/dist/cloud/services/index.d.ts.map +1 -0
  109. package/dist/cloud/services/index.js +15 -0
  110. package/dist/cloud/services/index.js.map +1 -0
  111. package/dist/cloud/services/mention-handler.d.ts +65 -0
  112. package/dist/cloud/services/mention-handler.d.ts.map +1 -0
  113. package/dist/cloud/services/mention-handler.js +405 -0
  114. package/dist/cloud/services/mention-handler.js.map +1 -0
  115. package/dist/cloud/services/nango.d.ts +126 -0
  116. package/dist/cloud/services/nango.d.ts.map +1 -0
  117. package/dist/cloud/services/nango.js +191 -0
  118. package/dist/cloud/services/nango.js.map +1 -0
  119. package/dist/cloud/services/persistence.d.ts +131 -0
  120. package/dist/cloud/services/persistence.d.ts.map +1 -0
  121. package/dist/cloud/services/persistence.js +200 -0
  122. package/dist/cloud/services/persistence.js.map +1 -0
  123. package/dist/cloud/services/planLimits.d.ts +15 -0
  124. package/dist/cloud/services/planLimits.d.ts.map +1 -1
  125. package/dist/cloud/services/planLimits.js +28 -0
  126. package/dist/cloud/services/planLimits.js.map +1 -1
  127. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  128. package/dist/cloud/services/scaling-orchestrator.d.ts.map +1 -0
  129. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  130. package/dist/cloud/services/scaling-orchestrator.js.map +1 -0
  131. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  132. package/dist/cloud/services/scaling-policy.d.ts.map +1 -0
  133. package/dist/cloud/services/scaling-policy.js +415 -0
  134. package/dist/cloud/services/scaling-policy.js.map +1 -0
  135. package/dist/cloud/vault/index.js +1 -1
  136. package/dist/cloud/vault/index.js.map +1 -1
  137. package/dist/cloud/webhooks/index.d.ts +24 -0
  138. package/dist/cloud/webhooks/index.d.ts.map +1 -0
  139. package/dist/cloud/webhooks/index.js +29 -0
  140. package/dist/cloud/webhooks/index.js.map +1 -0
  141. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  142. package/dist/cloud/webhooks/parsers/github.d.ts.map +1 -0
  143. package/dist/cloud/webhooks/parsers/github.js +234 -0
  144. package/dist/cloud/webhooks/parsers/github.js.map +1 -0
  145. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  146. package/dist/cloud/webhooks/parsers/index.d.ts.map +1 -0
  147. package/dist/cloud/webhooks/parsers/index.js +30 -0
  148. package/dist/cloud/webhooks/parsers/index.js.map +1 -0
  149. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  150. package/dist/cloud/webhooks/parsers/linear.d.ts.map +1 -0
  151. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  152. package/dist/cloud/webhooks/parsers/linear.js.map +1 -0
  153. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  154. package/dist/cloud/webhooks/parsers/slack.d.ts.map +1 -0
  155. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  156. package/dist/cloud/webhooks/parsers/slack.js.map +1 -0
  157. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  158. package/dist/cloud/webhooks/responders/github.d.ts.map +1 -0
  159. package/dist/cloud/webhooks/responders/github.js +73 -0
  160. package/dist/cloud/webhooks/responders/github.js.map +1 -0
  161. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  162. package/dist/cloud/webhooks/responders/index.d.ts.map +1 -0
  163. package/dist/cloud/webhooks/responders/index.js +30 -0
  164. package/dist/cloud/webhooks/responders/index.js.map +1 -0
  165. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  166. package/dist/cloud/webhooks/responders/linear.d.ts.map +1 -0
  167. package/dist/cloud/webhooks/responders/linear.js +149 -0
  168. package/dist/cloud/webhooks/responders/linear.js.map +1 -0
  169. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  170. package/dist/cloud/webhooks/responders/slack.d.ts.map +1 -0
  171. package/dist/cloud/webhooks/responders/slack.js +178 -0
  172. package/dist/cloud/webhooks/responders/slack.js.map +1 -0
  173. package/dist/cloud/webhooks/router.d.ts +25 -0
  174. package/dist/cloud/webhooks/router.d.ts.map +1 -0
  175. package/dist/cloud/webhooks/router.js +504 -0
  176. package/dist/cloud/webhooks/router.js.map +1 -0
  177. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  178. package/dist/cloud/webhooks/rules-engine.d.ts.map +1 -0
  179. package/dist/cloud/webhooks/rules-engine.js +287 -0
  180. package/dist/cloud/webhooks/rules-engine.js.map +1 -0
  181. package/dist/cloud/webhooks/types.d.ts +186 -0
  182. package/dist/cloud/webhooks/types.d.ts.map +1 -0
  183. package/dist/cloud/webhooks/types.js +8 -0
  184. package/dist/cloud/webhooks/types.js.map +1 -0
  185. package/dist/continuity/formatter.d.ts +51 -0
  186. package/dist/continuity/formatter.d.ts.map +1 -0
  187. package/dist/continuity/formatter.js +313 -0
  188. package/dist/continuity/formatter.js.map +1 -0
  189. package/dist/continuity/handoff-store.d.ts +67 -0
  190. package/dist/continuity/handoff-store.d.ts.map +1 -0
  191. package/dist/continuity/handoff-store.js +472 -0
  192. package/dist/continuity/handoff-store.js.map +1 -0
  193. package/dist/continuity/index.d.ts +45 -0
  194. package/dist/continuity/index.d.ts.map +1 -0
  195. package/dist/continuity/index.js +48 -0
  196. package/dist/continuity/index.js.map +1 -0
  197. package/dist/continuity/ledger-store.d.ts +110 -0
  198. package/dist/continuity/ledger-store.d.ts.map +1 -0
  199. package/dist/continuity/ledger-store.js +500 -0
  200. package/dist/continuity/ledger-store.js.map +1 -0
  201. package/dist/continuity/manager.d.ts +178 -0
  202. package/dist/continuity/manager.d.ts.map +1 -0
  203. package/dist/continuity/manager.js +562 -0
  204. package/dist/continuity/manager.js.map +1 -0
  205. package/dist/continuity/parser.d.ts +76 -0
  206. package/dist/continuity/parser.d.ts.map +1 -0
  207. package/dist/continuity/parser.js +579 -0
  208. package/dist/continuity/parser.js.map +1 -0
  209. package/dist/continuity/types.d.ts +180 -0
  210. package/dist/continuity/types.d.ts.map +1 -0
  211. package/dist/continuity/types.js +9 -0
  212. package/dist/continuity/types.js.map +1 -0
  213. package/dist/daemon/agent-manager.d.ts +27 -0
  214. package/dist/daemon/agent-manager.d.ts.map +1 -1
  215. package/dist/daemon/agent-manager.js +107 -6
  216. package/dist/daemon/agent-manager.js.map +1 -1
  217. package/dist/daemon/agent-registry.d.ts +32 -0
  218. package/dist/daemon/agent-registry.d.ts.map +1 -1
  219. package/dist/daemon/agent-registry.js +42 -2
  220. package/dist/daemon/agent-registry.js.map +1 -1
  221. package/dist/daemon/api.d.ts +12 -0
  222. package/dist/daemon/api.d.ts.map +1 -1
  223. package/dist/daemon/api.js +131 -2
  224. package/dist/daemon/api.js.map +1 -1
  225. package/dist/daemon/cli-auth.d.ts +67 -0
  226. package/dist/daemon/cli-auth.d.ts.map +1 -0
  227. package/dist/daemon/cli-auth.js +537 -0
  228. package/dist/daemon/cli-auth.js.map +1 -0
  229. package/dist/daemon/cloud-sync.d.ts.map +1 -1
  230. package/dist/daemon/cloud-sync.js +9 -7
  231. package/dist/daemon/cloud-sync.js.map +1 -1
  232. package/dist/daemon/orchestrator.d.ts.map +1 -1
  233. package/dist/daemon/orchestrator.js +30 -0
  234. package/dist/daemon/orchestrator.js.map +1 -1
  235. package/dist/daemon/router.d.ts +5 -0
  236. package/dist/daemon/router.d.ts.map +1 -1
  237. package/dist/daemon/router.js +78 -26
  238. package/dist/daemon/router.js.map +1 -1
  239. package/dist/daemon/server.d.ts +5 -0
  240. package/dist/daemon/server.d.ts.map +1 -1
  241. package/dist/daemon/server.js +9 -1
  242. package/dist/daemon/server.js.map +1 -1
  243. package/dist/daemon/services/browser-testing.d.ts +88 -0
  244. package/dist/daemon/services/browser-testing.d.ts.map +1 -0
  245. package/dist/daemon/services/browser-testing.js +244 -0
  246. package/dist/daemon/services/browser-testing.js.map +1 -0
  247. package/dist/daemon/services/container-spawner.d.ts +135 -0
  248. package/dist/daemon/services/container-spawner.d.ts.map +1 -0
  249. package/dist/daemon/services/container-spawner.js +313 -0
  250. package/dist/daemon/services/container-spawner.js.map +1 -0
  251. package/dist/daemon/types.d.ts +5 -1
  252. package/dist/daemon/types.d.ts.map +1 -1
  253. package/dist/dashboard/out/404.html +1 -1
  254. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  255. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  256. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +1 -0
  257. package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +9 -0
  258. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +1 -0
  259. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +1 -0
  260. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +1 -0
  261. package/dist/dashboard/out/_next/static/chunks/app/history/{page-b6edd4dde8d08194.js → page-56a8b4616a90dc43.js} +1 -1
  262. package/dist/dashboard/out/_next/static/chunks/app/login/page-3eac37ea6f5dd153.js +1 -0
  263. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +1 -0
  264. package/dist/dashboard/out/_next/static/chunks/app/page-daf87e86f783f980.js +1 -0
  265. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +1 -0
  266. package/dist/dashboard/out/_next/static/chunks/app/signup/page-fee4ed1709070bcd.js +1 -0
  267. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  268. package/dist/dashboard/out/_next/static/chunks/{main-c2f423b9c9f4591b.js → main-97850e03d723ea8c.js} +1 -1
  269. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  270. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  271. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +1 -0
  272. package/dist/dashboard/out/app.html +1 -14
  273. package/dist/dashboard/out/app.txt +2 -2
  274. package/dist/dashboard/out/connect-repos.html +1 -0
  275. package/dist/dashboard/out/connect-repos.txt +7 -0
  276. package/dist/dashboard/out/history.html +1 -1
  277. package/dist/dashboard/out/history.txt +2 -2
  278. package/dist/dashboard/out/index.html +1 -1
  279. package/dist/dashboard/out/index.txt +2 -2
  280. package/dist/dashboard/out/login.html +6 -0
  281. package/dist/dashboard/out/login.txt +7 -0
  282. package/dist/dashboard/out/metrics.html +1 -1
  283. package/dist/dashboard/out/metrics.txt +2 -2
  284. package/dist/dashboard/out/pricing.html +2 -2
  285. package/dist/dashboard/out/pricing.txt +2 -2
  286. package/dist/dashboard/out/providers.html +1 -0
  287. package/dist/dashboard/out/providers.txt +7 -0
  288. package/dist/dashboard/out/signup.html +6 -0
  289. package/dist/dashboard/out/signup.txt +7 -0
  290. package/dist/dashboard-server/server.d.ts.map +1 -1
  291. package/dist/dashboard-server/server.js +1308 -8
  292. package/dist/dashboard-server/server.js.map +1 -1
  293. package/dist/hooks/emitter.d.ts +40 -0
  294. package/dist/hooks/emitter.d.ts.map +1 -0
  295. package/dist/hooks/emitter.js +63 -0
  296. package/dist/hooks/emitter.js.map +1 -0
  297. package/dist/hooks/index.d.ts +3 -0
  298. package/dist/hooks/index.d.ts.map +1 -1
  299. package/dist/hooks/index.js +3 -0
  300. package/dist/hooks/index.js.map +1 -1
  301. package/dist/hooks/registry.d.ts +173 -0
  302. package/dist/hooks/registry.d.ts.map +1 -0
  303. package/dist/hooks/registry.js +476 -0
  304. package/dist/hooks/registry.js.map +1 -0
  305. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  306. package/dist/hooks/trajectory-hooks.d.ts.map +1 -0
  307. package/dist/hooks/trajectory-hooks.js +183 -0
  308. package/dist/hooks/trajectory-hooks.js.map +1 -0
  309. package/dist/hooks/types.d.ts +141 -0
  310. package/dist/hooks/types.d.ts.map +1 -1
  311. package/dist/index.d.ts +2 -0
  312. package/dist/index.d.ts.map +1 -1
  313. package/dist/index.js +3 -0
  314. package/dist/index.js.map +1 -1
  315. package/dist/memory/adapters/index.d.ts +8 -0
  316. package/dist/memory/adapters/index.d.ts.map +1 -0
  317. package/dist/memory/adapters/index.js +8 -0
  318. package/dist/memory/adapters/index.js.map +1 -0
  319. package/dist/memory/adapters/inmemory.d.ts +59 -0
  320. package/dist/memory/adapters/inmemory.d.ts.map +1 -0
  321. package/dist/memory/adapters/inmemory.js +195 -0
  322. package/dist/memory/adapters/inmemory.js.map +1 -0
  323. package/dist/memory/adapters/supermemory.d.ts +71 -0
  324. package/dist/memory/adapters/supermemory.d.ts.map +1 -0
  325. package/dist/memory/adapters/supermemory.js +338 -0
  326. package/dist/memory/adapters/supermemory.js.map +1 -0
  327. package/dist/memory/factory.d.ts +48 -0
  328. package/dist/memory/factory.d.ts.map +1 -0
  329. package/dist/memory/factory.js +143 -0
  330. package/dist/memory/factory.js.map +1 -0
  331. package/dist/memory/index.d.ts +32 -0
  332. package/dist/memory/index.d.ts.map +1 -0
  333. package/dist/memory/index.js +32 -0
  334. package/dist/memory/index.js.map +1 -0
  335. package/dist/memory/memory-hooks.d.ts +60 -0
  336. package/dist/memory/memory-hooks.d.ts.map +1 -0
  337. package/dist/memory/memory-hooks.js +313 -0
  338. package/dist/memory/memory-hooks.js.map +1 -0
  339. package/dist/memory/service.d.ts +49 -0
  340. package/dist/memory/service.d.ts.map +1 -0
  341. package/dist/memory/service.js +146 -0
  342. package/dist/memory/service.js.map +1 -0
  343. package/dist/memory/types.d.ts +195 -0
  344. package/dist/memory/types.d.ts.map +1 -0
  345. package/dist/memory/types.js +8 -0
  346. package/dist/memory/types.js.map +1 -0
  347. package/dist/policy/agent-policy.d.ts +225 -0
  348. package/dist/policy/agent-policy.d.ts.map +1 -0
  349. package/dist/policy/agent-policy.js +665 -0
  350. package/dist/policy/agent-policy.js.map +1 -0
  351. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  352. package/dist/policy/cloud-policy-fetcher.d.ts.map +1 -0
  353. package/dist/policy/cloud-policy-fetcher.js +64 -0
  354. package/dist/policy/cloud-policy-fetcher.js.map +1 -0
  355. package/dist/resiliency/crash-insights.d.ts +156 -0
  356. package/dist/resiliency/crash-insights.d.ts.map +1 -0
  357. package/dist/resiliency/crash-insights.js +492 -0
  358. package/dist/resiliency/crash-insights.js.map +1 -0
  359. package/dist/resiliency/gossip-health.d.ts +137 -0
  360. package/dist/resiliency/gossip-health.d.ts.map +1 -0
  361. package/dist/resiliency/gossip-health.js +241 -0
  362. package/dist/resiliency/gossip-health.js.map +1 -0
  363. package/dist/resiliency/index.d.ts +5 -0
  364. package/dist/resiliency/index.d.ts.map +1 -1
  365. package/dist/resiliency/index.js +5 -0
  366. package/dist/resiliency/index.js.map +1 -1
  367. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  368. package/dist/resiliency/leader-watchdog.d.ts.map +1 -0
  369. package/dist/resiliency/leader-watchdog.js +189 -0
  370. package/dist/resiliency/leader-watchdog.js.map +1 -0
  371. package/dist/resiliency/memory-monitor.d.ts +172 -0
  372. package/dist/resiliency/memory-monitor.d.ts.map +1 -0
  373. package/dist/resiliency/memory-monitor.js +593 -0
  374. package/dist/resiliency/memory-monitor.js.map +1 -0
  375. package/dist/resiliency/stateless-lead.d.ts +149 -0
  376. package/dist/resiliency/stateless-lead.d.ts.map +1 -0
  377. package/dist/resiliency/stateless-lead.js +308 -0
  378. package/dist/resiliency/stateless-lead.js.map +1 -0
  379. package/dist/resiliency/supervisor.d.ts +38 -0
  380. package/dist/resiliency/supervisor.d.ts.map +1 -1
  381. package/dist/resiliency/supervisor.js +122 -0
  382. package/dist/resiliency/supervisor.js.map +1 -1
  383. package/dist/shared/cli-auth-config.d.ts +91 -0
  384. package/dist/shared/cli-auth-config.d.ts.map +1 -0
  385. package/dist/shared/cli-auth-config.js +264 -0
  386. package/dist/shared/cli-auth-config.js.map +1 -0
  387. package/dist/storage/adapter.d.ts +1 -1
  388. package/dist/storage/adapter.d.ts.map +1 -1
  389. package/dist/trajectory/config.d.ts +84 -0
  390. package/dist/trajectory/config.d.ts.map +1 -0
  391. package/dist/trajectory/config.js +163 -0
  392. package/dist/trajectory/config.js.map +1 -0
  393. package/dist/trajectory/index.d.ts +8 -0
  394. package/dist/trajectory/index.d.ts.map +1 -0
  395. package/dist/trajectory/index.js +8 -0
  396. package/dist/trajectory/index.js.map +1 -0
  397. package/dist/trajectory/integration.d.ts +292 -0
  398. package/dist/trajectory/integration.d.ts.map +1 -0
  399. package/dist/trajectory/integration.js +834 -0
  400. package/dist/trajectory/integration.js.map +1 -0
  401. package/dist/utils/logger.js +1 -1
  402. package/dist/utils/logger.js.map +1 -1
  403. package/dist/utils/project-namespace.d.ts +24 -0
  404. package/dist/utils/project-namespace.d.ts.map +1 -1
  405. package/dist/utils/project-namespace.js +84 -0
  406. package/dist/utils/project-namespace.js.map +1 -1
  407. package/dist/wrapper/parser.d.ts +10 -0
  408. package/dist/wrapper/parser.d.ts.map +1 -1
  409. package/dist/wrapper/parser.js +100 -33
  410. package/dist/wrapper/parser.js.map +1 -1
  411. package/dist/wrapper/pty-wrapper.d.ts +197 -16
  412. package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
  413. package/dist/wrapper/pty-wrapper.js +943 -106
  414. package/dist/wrapper/pty-wrapper.js.map +1 -1
  415. package/dist/wrapper/shared.d.ts +165 -0
  416. package/dist/wrapper/shared.d.ts.map +1 -0
  417. package/dist/wrapper/shared.js +270 -0
  418. package/dist/wrapper/shared.js.map +1 -0
  419. package/dist/wrapper/tmux-wrapper.d.ts +73 -11
  420. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
  421. package/dist/wrapper/tmux-wrapper.js +541 -120
  422. package/dist/wrapper/tmux-wrapper.js.map +1 -1
  423. package/docs/CLOUD-ARCHITECTURE.md +152 -0
  424. package/docs/HOOKS_API.md +394 -0
  425. package/docs/WRAPPER_EVENTS.md +358 -0
  426. package/docs/agent-policy-snippet.md +40 -0
  427. package/docs/agent-relay-protocol.md +238 -0
  428. package/docs/agent-relay-snippet.md +53 -47
  429. package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
  430. package/docs/archive/ROADMAP.md +329 -0
  431. package/docs/competitive/GASTOWN.md +451 -0
  432. package/docs/{COMPETITIVE_ANALYSIS.md → competitive/OVERVIEW.md} +1 -0
  433. package/docs/competitive/README.md +34 -0
  434. package/docs/competitive/TMUX_ORCHESTRATOR.md +605 -0
  435. package/docs/dashboard.png +0 -0
  436. package/docs/design/ci-failure-webhooks.md +812 -0
  437. package/docs/design/comprehensive-integrations.md +238 -0
  438. package/docs/design/e2b-sandbox-integration.md +504 -0
  439. package/docs/design/github-app-permissions.md +264 -0
  440. package/docs/local-testing.md +428 -0
  441. package/docs/proposals/continuous-claude-integration.md +622 -0
  442. package/docs/proposals/custom-commands.md +368 -0
  443. package/docs/tasks/global-skills-system.tasks.md +230 -0
  444. package/docs/tasks/webhook-integrations.tasks.md +184 -0
  445. package/docs/tasks/workspace-capabilities.tasks.md +121 -0
  446. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +366 -0
  447. package/package.json +16 -7
  448. package/scripts/cloud-setup.sh +96 -0
  449. package/scripts/manual-qa.sh +293 -0
  450. package/scripts/postinstall.js +60 -0
  451. package/scripts/run-cloud-qa.sh +220 -0
  452. package/scripts/test-cli-auth/Dockerfile +44 -0
  453. package/scripts/test-cli-auth/Dockerfile.real +79 -0
  454. package/scripts/test-cli-auth/README.md +286 -0
  455. package/scripts/test-cli-auth/ci-test-real-clis.ts +251 -0
  456. package/scripts/test-cli-auth/ci-test-runner.ts +263 -0
  457. package/scripts/test-cli-auth/mock-cli.sh +147 -0
  458. package/scripts/test-cli-auth/package.json +14 -0
  459. package/scripts/test-cli-auth/test-oauth-flow.ts +220 -0
  460. package/scripts/test-pty-input-auto.js +222 -0
  461. package/scripts/test-pty-input.js +150 -0
  462. package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +0 -1
  463. package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +0 -1
  464. package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +0 -1
  465. package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +0 -1
  466. package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +0 -1
  467. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +0 -1
  468. package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +0 -1
  469. package/dist/dashboard/out/_next/static/chunks/webpack-a5acc2831d094776.js +0 -1
  470. package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +0 -1
  471. package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +0 -1
  472. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
  473. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
  474. /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-b100311aff8d5c61.js} +0 -0
  475. /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-a13d3c2b1be45466.js} +0 -0
  476. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.js → page-a4973f3e3c82fb67.js} +0 -0
  477. /package/dist/dashboard/out/_next/static/chunks/app/pricing/{page-d80e03a5297f95b6.js → page-4d72d5a5d8a9b618.js} +0 -0
  478. /package/docs/{CHANGELOG.md → archive/CHANGELOG.md} +0 -0
  479. /package/docs/{CLI-SIMPLIFICATION-COMPLETE.md → archive/CLI-SIMPLIFICATION-COMPLETE.md} +0 -0
  480. /package/docs/{DESIGN_BRIDGE_STAFFING.md → archive/DESIGN_BRIDGE_STAFFING.md} +0 -0
  481. /package/docs/{DESIGN_V2.md → archive/DESIGN_V2.md} +0 -0
  482. /package/docs/{MONETIZATION.md → archive/MONETIZATION.md} +0 -0
  483. /package/docs/{PROPOSAL-trajectories.md → archive/PROPOSAL-trajectories.md} +0 -0
  484. /package/docs/{SCALING_ANALYSIS.md → archive/SCALING_ANALYSIS.md} +0 -0
  485. /package/docs/{TESTING_PRESENCE_FEATURES.md → archive/TESTING_PRESENCE_FEATURES.md} +0 -0
  486. /package/docs/{TMUX_IMPLEMENTATION_NOTES.md → archive/TMUX_IMPLEMENTATION_NOTES.md} +0 -0
  487. /package/docs/{TMUX_IMPROVEMENTS.md → archive/TMUX_IMPROVEMENTS.md} +0 -0
  488. /package/docs/{dashboard-v2-plan.md → archive/dashboard-v2-plan.md} +0 -0
  489. /package/docs/{removable-code-analysis.md → archive/removable-code-analysis.md} +0 -0
  490. /package/docs/{competitive-analysis-mcp-agent-mail.md → competitive/MCP_AGENT_MAIL.md} +0 -0
package/dist/cli/index.js CHANGED
@@ -55,6 +55,7 @@ program
55
55
  .option('-n, --name <name>', 'Agent name (auto-generated if not set)')
56
56
  .option('-q, --quiet', 'Disable debug output', false)
57
57
  .option('--prefix <pattern>', 'Relay prefix pattern (default: ->relay:)')
58
+ .option('--dashboard-port <port>', 'Dashboard port for spawn/release API (auto-detected if not set)')
58
59
  .option('--shadow <name>', 'Spawn a shadow agent with this name that monitors the primary')
59
60
  .option('--shadow-role <role>', 'Shadow role: reviewer, auditor, or triggers (comma-separated: SESSION_END,CODE_WRITTEN,REVIEW_REQUEST,EXPLICIT_ASK,ALL_MESSAGES)')
60
61
  .argument('[command...]', 'Command to wrap (e.g., claude)')
@@ -85,8 +86,31 @@ program
85
86
  }
86
87
  const { TmuxWrapper } = await import('../wrapper/tmux-wrapper.js');
87
88
  const { AgentSpawner } = await import('../bridge/spawner.js');
88
- // Create spawner so any agent can spawn workers
89
- const spawner = new AgentSpawner(paths.projectRoot);
89
+ // Determine dashboard port for spawn/release API
90
+ // Priority: CLI flag > env var > auto-detect default port
91
+ let dashboardPort;
92
+ if (options.dashboardPort) {
93
+ dashboardPort = parseInt(options.dashboardPort, 10);
94
+ }
95
+ else {
96
+ // Try to detect if dashboard is running at default port
97
+ const defaultPort = parseInt(DEFAULT_DASHBOARD_PORT, 10);
98
+ try {
99
+ const response = await fetch(`http://localhost:${defaultPort}/api/status`, {
100
+ method: 'GET',
101
+ signal: AbortSignal.timeout(500), // Quick timeout for detection
102
+ });
103
+ if (response.ok) {
104
+ dashboardPort = defaultPort;
105
+ console.error(`Dashboard detected: http://localhost:${dashboardPort}`);
106
+ }
107
+ }
108
+ catch {
109
+ // Dashboard not running - spawn/release will use fallback callbacks
110
+ }
111
+ }
112
+ // Create spawner as fallback for direct spawn (if dashboard API not available)
113
+ const spawner = new AgentSpawner(paths.projectRoot, undefined, dashboardPort);
90
114
  const wrapper = new TmuxWrapper({
91
115
  name: agentName,
92
116
  command: mainCommand,
@@ -96,7 +120,9 @@ program
96
120
  relayPrefix: options.prefix,
97
121
  useInbox: true,
98
122
  inboxDir: paths.dataDir, // Use the project-specific data directory for the inbox
99
- // Wire up spawn/release callbacks so any agent can spawn workers
123
+ // Use dashboard API for spawn/release when available (preferred - works from any context)
124
+ dashboardPort,
125
+ // Wire up spawn/release callbacks as fallback (if no dashboardPort)
100
126
  onSpawn: async (workerName, workerCli, task) => {
101
127
  console.error(`[${agentName}] Spawning ${workerName} (${workerCli})...`);
102
128
  const result = await spawner.spawn({
@@ -125,7 +151,7 @@ program
125
151
  });
126
152
  process.on('SIGINT', async () => {
127
153
  await spawner.releaseAll();
128
- wrapper.stop();
154
+ await wrapper.stop();
129
155
  process.exit(0);
130
156
  });
131
157
  await wrapper.start();
@@ -1650,6 +1676,57 @@ cloudCommand
1650
1676
  process.exit(1);
1651
1677
  }
1652
1678
  });
1679
+ // ============================================================================
1680
+ // TRAJECTORY COMMANDS (trail proxy)
1681
+ // ============================================================================
1682
+ // trail - Proxy to trail CLI for trajectory tracking
1683
+ program
1684
+ .command('trail')
1685
+ .description('Trajectory tracking commands (proxies to trail CLI)')
1686
+ .argument('[args...]', 'Arguments to pass to trail CLI')
1687
+ .allowUnknownOption()
1688
+ .action(async (args) => {
1689
+ const { spawn } = await import('node:child_process');
1690
+ const { getProjectPaths } = await import('../utils/project-namespace.js');
1691
+ const paths = getProjectPaths();
1692
+ // Check if trail is available
1693
+ const trailCheck = spawn('which', ['trail'], { stdio: 'pipe' });
1694
+ const trailExists = await new Promise((resolve) => {
1695
+ trailCheck.on('close', (code) => resolve(code === 0));
1696
+ trailCheck.on('error', () => resolve(false));
1697
+ });
1698
+ if (!trailExists) {
1699
+ console.error('trail CLI not found. Install with: npm install -g agent-trajectories');
1700
+ console.log('');
1701
+ console.log('The trail CLI provides trajectory tracking for agent work:');
1702
+ console.log(' trail start "<task>" Start tracking a new trajectory');
1703
+ console.log(' trail status Show current trajectory status');
1704
+ console.log(' trail phase <phase> Transition to PDERO phase');
1705
+ console.log(' trail decision "<choice>" Record a decision');
1706
+ console.log(' trail complete Complete the trajectory');
1707
+ console.log(' trail list List all trajectories');
1708
+ console.log('');
1709
+ console.log('PDERO phases: plan, design, execute, review, observe');
1710
+ process.exit(1);
1711
+ }
1712
+ // Spawn trail with the provided arguments
1713
+ const trailProc = spawn('trail', args, {
1714
+ cwd: paths.projectRoot,
1715
+ stdio: 'inherit',
1716
+ env: {
1717
+ ...process.env,
1718
+ TRAJECTORIES_PROJECT: paths.projectId,
1719
+ TRAJECTORIES_DATA_DIR: paths.dataDir,
1720
+ },
1721
+ });
1722
+ trailProc.on('close', (code) => {
1723
+ process.exit(code ?? 0);
1724
+ });
1725
+ trailProc.on('error', (err) => {
1726
+ console.error(`Failed to run trail: ${err.message}`);
1727
+ process.exit(1);
1728
+ });
1729
+ });
1653
1730
  cloudCommand
1654
1731
  .command('agents')
1655
1732
  .description('List agents across all linked machines')
@@ -1795,7 +1872,7 @@ cloudCommand
1795
1872
  .command('daemons')
1796
1873
  .description('List all linked daemon instances')
1797
1874
  .option('--json', 'Output as JSON')
1798
- .action(async (options) => {
1875
+ .action(async (_options) => {
1799
1876
  const os = await import('node:os');
1800
1877
  const dataDir = process.env.AGENT_RELAY_DATA_DIR ||
1801
1878
  path.join(os.homedir(), '.local', 'share', 'agent-relay');
@@ -1824,5 +1901,324 @@ cloudCommand
1824
1901
  process.exit(1);
1825
1902
  }
1826
1903
  });
1904
+ // ============================================================================
1905
+ // Monitoring commands (metrics, health, profiler)
1906
+ // ============================================================================
1907
+ // metrics - Show agent memory metrics
1908
+ program
1909
+ .command('metrics')
1910
+ .description('Show agent memory metrics and resource usage')
1911
+ .option('--agent <name>', 'Show metrics for specific agent')
1912
+ .option('--port <port>', 'Dashboard port', DEFAULT_DASHBOARD_PORT)
1913
+ .option('--json', 'Output as JSON')
1914
+ .option('--watch', 'Continuously update metrics')
1915
+ .option('--interval <ms>', 'Update interval for watch mode', '5000')
1916
+ .action(async (options) => {
1917
+ const port = options.port || DEFAULT_DASHBOARD_PORT;
1918
+ const fetchMetrics = async () => {
1919
+ try {
1920
+ const response = await fetch(`http://localhost:${port}/api/metrics/agents`);
1921
+ if (!response.ok) {
1922
+ throw new Error(`HTTP ${response.status}`);
1923
+ }
1924
+ return await response.json();
1925
+ }
1926
+ catch (err) {
1927
+ if (err.code === 'ECONNREFUSED') {
1928
+ console.error(`Cannot connect to dashboard at port ${port}. Is the daemon running?`);
1929
+ console.log(`Run 'agent-relay up' to start the daemon.`);
1930
+ }
1931
+ else {
1932
+ console.error(`Failed to fetch metrics: ${err.message}`);
1933
+ }
1934
+ process.exit(1);
1935
+ }
1936
+ };
1937
+ const formatBytes = (bytes) => {
1938
+ if (bytes === 0)
1939
+ return '0 B';
1940
+ const k = 1024;
1941
+ const sizes = ['B', 'KB', 'MB', 'GB'];
1942
+ const i = Math.floor(Math.log(Math.abs(bytes)) / Math.log(k));
1943
+ return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
1944
+ };
1945
+ const formatUptime = (ms) => {
1946
+ if (ms < 60000)
1947
+ return `${Math.floor(ms / 1000)}s`;
1948
+ if (ms < 3600000)
1949
+ return `${Math.floor(ms / 60000)}m`;
1950
+ return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;
1951
+ };
1952
+ const displayMetrics = (data) => {
1953
+ let agents = data.agents;
1954
+ if (options.agent) {
1955
+ agents = agents.filter(a => a.name === options.agent);
1956
+ if (agents.length === 0) {
1957
+ console.error(`Agent "${options.agent}" not found`);
1958
+ return;
1959
+ }
1960
+ }
1961
+ if (options.json) {
1962
+ console.log(JSON.stringify({ agents, system: data.system }, null, 2));
1963
+ return;
1964
+ }
1965
+ if (options.watch) {
1966
+ // Clear screen for watch mode
1967
+ console.clear();
1968
+ console.log(`Agent Metrics (updating every ${options.interval}ms) [Ctrl+C to stop]`);
1969
+ console.log(`System: ${formatBytes(data.system.heapUsed)} heap / ${formatBytes(data.system.freeMemory)} free`);
1970
+ console.log('');
1971
+ }
1972
+ if (agents.length === 0) {
1973
+ console.log('No agents with memory metrics.');
1974
+ console.log('Ensure agents are running and memory monitoring is enabled.');
1975
+ return;
1976
+ }
1977
+ console.log('AGENT PID MEMORY CPU TREND ALERT UPTIME');
1978
+ console.log('─'.repeat(75));
1979
+ for (const agent of agents) {
1980
+ const name = agent.name.padEnd(15);
1981
+ const pid = (agent.pid?.toString() || '-').padEnd(8);
1982
+ const memory = formatBytes(agent.rssBytes || 0).padEnd(11);
1983
+ const cpu = ((agent.cpuPercent?.toFixed(1) || '0') + '%').padEnd(6);
1984
+ const trend = (agent.trend || 'unknown').padEnd(11);
1985
+ const alertColors = {
1986
+ normal: 'normal',
1987
+ warning: '\x1b[33mwarning\x1b[0m',
1988
+ critical: '\x1b[31mcritical\x1b[0m',
1989
+ oom_imminent: '\x1b[31;1mOOM!\x1b[0m',
1990
+ };
1991
+ const alert = (alertColors[agent.alertLevel || 'normal'] || agent.alertLevel || '-').padEnd(9);
1992
+ const uptime = formatUptime(agent.uptimeMs || 0);
1993
+ console.log(`${name} ${pid} ${memory} ${cpu} ${trend} ${alert} ${uptime}`);
1994
+ }
1995
+ if (!options.watch) {
1996
+ console.log('');
1997
+ console.log(`Total: ${agents.length} agent(s)`);
1998
+ if (agents.some(a => a.alertLevel && a.alertLevel !== 'normal')) {
1999
+ console.log('');
2000
+ console.log('⚠️ Some agents have elevated memory usage. Run `agent-relay health` for details.');
2001
+ }
2002
+ }
2003
+ };
2004
+ if (options.watch) {
2005
+ const interval = parseInt(options.interval || '5000', 10);
2006
+ const update = async () => {
2007
+ try {
2008
+ const data = await fetchMetrics();
2009
+ displayMetrics(data);
2010
+ }
2011
+ catch {
2012
+ // Error already logged in fetchMetrics
2013
+ }
2014
+ };
2015
+ process.on('SIGINT', () => {
2016
+ console.log('\nStopped watching metrics.');
2017
+ process.exit(0);
2018
+ });
2019
+ await update();
2020
+ setInterval(update, interval);
2021
+ }
2022
+ else {
2023
+ const data = await fetchMetrics();
2024
+ displayMetrics(data);
2025
+ }
2026
+ });
2027
+ // health - Show crash insights and system health
2028
+ program
2029
+ .command('health')
2030
+ .description('Show system health, crash insights, and recommendations')
2031
+ .option('--port <port>', 'Dashboard port', DEFAULT_DASHBOARD_PORT)
2032
+ .option('--json', 'Output as JSON')
2033
+ .option('--crashes', 'Show recent crash history')
2034
+ .option('--alerts', 'Show unacknowledged alerts')
2035
+ .action(async (options) => {
2036
+ const port = options.port || DEFAULT_DASHBOARD_PORT;
2037
+ try {
2038
+ const response = await fetch(`http://localhost:${port}/api/metrics/health`);
2039
+ if (!response.ok) {
2040
+ throw new Error(`HTTP ${response.status}`);
2041
+ }
2042
+ const data = await response.json();
2043
+ if (options.json) {
2044
+ console.log(JSON.stringify(data, null, 2));
2045
+ return;
2046
+ }
2047
+ // Health score with color
2048
+ const scoreColor = data.healthScore >= 80 ? '\x1b[32m' : // Green
2049
+ data.healthScore >= 50 ? '\x1b[33m' : // Yellow
2050
+ '\x1b[31m'; // Red
2051
+ const resetColor = '\x1b[0m';
2052
+ console.log('');
2053
+ console.log('═══════════════════════════════════════════════════════════════');
2054
+ console.log(` SYSTEM HEALTH: ${scoreColor}${data.healthScore}/100${resetColor}`);
2055
+ console.log('═══════════════════════════════════════════════════════════════');
2056
+ console.log('');
2057
+ console.log(` ${data.summary}`);
2058
+ console.log('');
2059
+ // Show stats
2060
+ console.log(` Agents: ${data.stats.agentCount}`);
2061
+ console.log(` Crashes (24h): ${data.stats.totalCrashes24h}`);
2062
+ console.log(` Alerts (24h): ${data.stats.totalAlerts24h}`);
2063
+ console.log('');
2064
+ // Show issues
2065
+ if (data.issues.length > 0) {
2066
+ console.log(' ISSUES:');
2067
+ for (const issue of data.issues) {
2068
+ const icon = issue.severity === 'critical' ? '🔴' :
2069
+ issue.severity === 'high' ? '🟠' :
2070
+ issue.severity === 'medium' ? '🟡' : '🔵';
2071
+ console.log(` ${icon} ${issue.message}`);
2072
+ }
2073
+ console.log('');
2074
+ }
2075
+ // Show recommendations
2076
+ if (data.recommendations.length > 0) {
2077
+ console.log(' RECOMMENDATIONS:');
2078
+ for (const rec of data.recommendations) {
2079
+ console.log(` → ${rec}`);
2080
+ }
2081
+ console.log('');
2082
+ }
2083
+ // Show crashes if requested
2084
+ if (options.crashes && data.crashes.length > 0) {
2085
+ console.log(' RECENT CRASHES:');
2086
+ console.log(' ─────────────────────────────────────────────────────────────');
2087
+ for (const crash of data.crashes.slice(0, 10)) {
2088
+ const time = new Date(crash.crashedAt).toLocaleString();
2089
+ console.log(` ${crash.agentName} - ${time}`);
2090
+ console.log(` Cause: ${crash.likelyCause} | ${crash.summary.slice(0, 60)}...`);
2091
+ }
2092
+ console.log('');
2093
+ }
2094
+ // Show alerts if requested
2095
+ if (options.alerts && data.alerts.length > 0) {
2096
+ console.log(' UNACKNOWLEDGED ALERTS:');
2097
+ console.log(' ─────────────────────────────────────────────────────────────');
2098
+ for (const alert of data.alerts.slice(0, 10)) {
2099
+ const _time = new Date(alert.createdAt).toLocaleString();
2100
+ const icon = alert.alertType === 'oom_imminent' ? '🔴' :
2101
+ alert.alertType === 'critical' ? '🟠' : '🟡';
2102
+ console.log(` ${icon} ${alert.agentName} - ${alert.alertType}`);
2103
+ console.log(` ${alert.message}`);
2104
+ }
2105
+ console.log('');
2106
+ }
2107
+ console.log('═══════════════════════════════════════════════════════════════');
2108
+ console.log('');
2109
+ if (!options.crashes && data.stats.totalCrashes24h > 0) {
2110
+ console.log(' Tip: Run `agent-relay health --crashes` to see crash details');
2111
+ }
2112
+ if (!options.alerts && data.stats.totalAlerts24h > 0) {
2113
+ console.log(' Tip: Run `agent-relay health --alerts` to see alerts');
2114
+ }
2115
+ console.log('');
2116
+ }
2117
+ catch (err) {
2118
+ if (err.code === 'ECONNREFUSED') {
2119
+ console.error(`Cannot connect to dashboard at port ${port}. Is the daemon running?`);
2120
+ console.log(`Run 'agent-relay up' to start the daemon.`);
2121
+ }
2122
+ else {
2123
+ console.error(`Failed to fetch health data: ${err.message}`);
2124
+ }
2125
+ process.exit(1);
2126
+ }
2127
+ });
2128
+ // profile - Run agent with profiling enabled
2129
+ program
2130
+ .command('profile')
2131
+ .description('Run an agent with memory profiling enabled')
2132
+ .argument('<command...>', 'Command to profile')
2133
+ .option('-n, --name <name>', 'Agent name')
2134
+ .option('--heap-snapshot-interval <ms>', 'Take heap snapshots at interval (ms)', '60000')
2135
+ .option('--output-dir <dir>', 'Directory for profile output', './profiles')
2136
+ .option('--expose-gc', 'Expose garbage collector for manual GC')
2137
+ .action(async (commandParts, options) => {
2138
+ const { getProjectPaths } = await import('../utils/project-namespace.js');
2139
+ if (!commandParts || commandParts.length === 0) {
2140
+ console.error('No command specified');
2141
+ process.exit(1);
2142
+ }
2143
+ const [cmd, ...args] = commandParts;
2144
+ const agentName = options.name ?? generateAgentName();
2145
+ const outputDir = options.outputDir || './profiles';
2146
+ const snapshotInterval = parseInt(options.heapSnapshotInterval || '60000', 10);
2147
+ // Create output directory
2148
+ if (!fs.existsSync(outputDir)) {
2149
+ fs.mkdirSync(outputDir, { recursive: true });
2150
+ }
2151
+ console.log('');
2152
+ console.log('🔬 Agent Relay Profiler');
2153
+ console.log('');
2154
+ console.log(` Agent: ${agentName}`);
2155
+ console.log(` Command: ${cmd} ${args.join(' ')}`);
2156
+ console.log(` Output: ${outputDir}`);
2157
+ console.log(` Heap snapshots: every ${snapshotInterval}ms`);
2158
+ console.log('');
2159
+ // Build Node.js flags for profiling
2160
+ const nodeFlags = [
2161
+ '--inspect', // Enable inspector
2162
+ '--inspect-brk=0', // Don't actually break, just enable
2163
+ ];
2164
+ if (options.exposeGc) {
2165
+ nodeFlags.push('--expose-gc');
2166
+ }
2167
+ // Set environment variables for profiling
2168
+ const profileEnv = {
2169
+ ...process.env,
2170
+ NODE_OPTIONS: `${process.env.NODE_OPTIONS || ''} ${nodeFlags.join(' ')}`.trim(),
2171
+ AGENT_RELAY_PROFILE_ENABLED: '1',
2172
+ AGENT_RELAY_PROFILE_OUTPUT: outputDir,
2173
+ AGENT_RELAY_PROFILE_INTERVAL: snapshotInterval.toString(),
2174
+ };
2175
+ console.log('Starting profiled agent...');
2176
+ console.log('');
2177
+ // Use the regular wrapper but with profiling environment
2178
+ const paths = getProjectPaths();
2179
+ const { TmuxWrapper } = await import('../wrapper/tmux-wrapper.js');
2180
+ const wrapper = new TmuxWrapper({
2181
+ name: agentName,
2182
+ command: cmd,
2183
+ args,
2184
+ socketPath: paths.socketPath,
2185
+ debug: true,
2186
+ env: profileEnv,
2187
+ useInbox: true,
2188
+ inboxDir: paths.dataDir,
2189
+ });
2190
+ // Start memory sampling
2191
+ const sampleInterval = setInterval(() => {
2192
+ const memUsage = process.memoryUsage();
2193
+ const timestamp = new Date().toISOString();
2194
+ const sample = {
2195
+ timestamp,
2196
+ heapUsed: memUsage.heapUsed,
2197
+ heapTotal: memUsage.heapTotal,
2198
+ external: memUsage.external,
2199
+ rss: memUsage.rss,
2200
+ };
2201
+ // Append to samples file
2202
+ const samplesFile = path.join(outputDir, `${agentName}-memory.jsonl`);
2203
+ fs.appendFileSync(samplesFile, JSON.stringify(sample) + '\n');
2204
+ }, 5000);
2205
+ process.on('SIGINT', async () => {
2206
+ clearInterval(sampleInterval);
2207
+ console.log('\n');
2208
+ console.log('Profiling stopped.');
2209
+ console.log('');
2210
+ console.log(`Profile data saved to: ${outputDir}/`);
2211
+ console.log(` - ${agentName}-memory.jsonl (memory samples)`);
2212
+ console.log('');
2213
+ console.log('To analyze:');
2214
+ console.log(` 1. Open chrome://inspect in Chrome`);
2215
+ console.log(` 2. Load CPU/heap profiles from ${outputDir}/`);
2216
+ console.log('');
2217
+ wrapper.stop();
2218
+ process.exit(0);
2219
+ });
2220
+ await wrapper.start();
2221
+ console.log(`Profiling ${agentName}... Press Ctrl+C to stop.`);
2222
+ });
1827
2223
  program.parse();
1828
2224
  //# sourceMappingURL=index.js.map