agent-relay 2.0.28 → 2.0.32

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 (894) hide show
  1. package/README.md +19 -0
  2. package/dist/index.cjs +85691 -0
  3. package/dist/src/bridge/index.d.ts.map +1 -0
  4. package/dist/src/bridge/index.js.map +1 -0
  5. package/dist/src/cli/commands/doctor.d.ts +2 -0
  6. package/dist/src/cli/commands/doctor.d.ts.map +1 -0
  7. package/dist/src/cli/commands/doctor.js +451 -0
  8. package/dist/src/cli/commands/doctor.js.map +1 -0
  9. package/dist/src/cli/index.d.ts.map +1 -0
  10. package/dist/src/cli/index.js +29 -1
  11. package/dist/src/cli/index.js.map +1 -0
  12. package/dist/src/config/relay-config.d.ts.map +1 -0
  13. package/dist/src/config/relay-config.js.map +1 -0
  14. package/dist/src/continuity/index.d.ts.map +1 -0
  15. package/dist/src/continuity/index.js.map +1 -0
  16. package/dist/src/daemon/index.d.ts.map +1 -0
  17. package/dist/src/daemon/index.js.map +1 -0
  18. package/dist/src/health-worker-manager.d.ts.map +1 -0
  19. package/dist/src/health-worker-manager.js.map +1 -0
  20. package/dist/src/health-worker.d.ts.map +1 -0
  21. package/dist/src/health-worker.js.map +1 -0
  22. package/dist/src/hooks/index.d.ts.map +1 -0
  23. package/dist/src/hooks/index.js.map +1 -0
  24. package/dist/src/index.d.ts.map +1 -0
  25. package/dist/src/index.js.map +1 -0
  26. package/dist/src/memory/index.d.ts.map +1 -0
  27. package/dist/src/memory/index.js.map +1 -0
  28. package/dist/src/policy/index.d.ts.map +1 -0
  29. package/dist/src/policy/index.js.map +1 -0
  30. package/dist/src/protocol/index.d.ts.map +1 -0
  31. package/dist/src/protocol/index.js.map +1 -0
  32. package/dist/src/resiliency/index.d.ts.map +1 -0
  33. package/dist/src/resiliency/index.js.map +1 -0
  34. package/dist/src/shared/cli-auth-config.d.ts.map +1 -0
  35. package/dist/src/shared/cli-auth-config.js.map +1 -0
  36. package/dist/src/state/index.d.ts.map +1 -0
  37. package/dist/src/state/index.js.map +1 -0
  38. package/dist/src/storage/index.d.ts.map +1 -0
  39. package/dist/src/storage/index.js.map +1 -0
  40. package/dist/src/trajectory/index.d.ts.map +1 -0
  41. package/dist/src/trajectory/index.js.map +1 -0
  42. package/dist/src/utils/index.d.ts.map +1 -0
  43. package/dist/src/utils/index.js.map +1 -0
  44. package/dist/src/wrapper/index.d.ts.map +1 -0
  45. package/dist/src/wrapper/index.js.map +1 -0
  46. package/package.json +83 -20
  47. package/packages/api-types/dist/index.d.ts.map +1 -0
  48. package/packages/api-types/dist/index.js.map +1 -0
  49. package/packages/api-types/dist/schemas/agent.d.ts.map +1 -0
  50. package/packages/api-types/dist/schemas/agent.js.map +1 -0
  51. package/packages/api-types/dist/schemas/api.d.ts.map +1 -0
  52. package/packages/api-types/dist/schemas/api.js.map +1 -0
  53. package/packages/api-types/dist/schemas/decision.d.ts.map +1 -0
  54. package/packages/api-types/dist/schemas/decision.js.map +1 -0
  55. package/packages/api-types/dist/schemas/fleet.d.ts.map +1 -0
  56. package/packages/api-types/dist/schemas/fleet.js.map +1 -0
  57. package/packages/api-types/dist/schemas/history.d.ts.map +1 -0
  58. package/packages/api-types/dist/schemas/history.js.map +1 -0
  59. package/packages/api-types/dist/schemas/index.d.ts.map +1 -0
  60. package/packages/api-types/dist/schemas/index.js.map +1 -0
  61. package/packages/api-types/dist/schemas/message.d.ts.map +1 -0
  62. package/packages/api-types/dist/schemas/message.js.map +1 -0
  63. package/packages/api-types/dist/schemas/session.d.ts.map +1 -0
  64. package/packages/api-types/dist/schemas/session.js.map +1 -0
  65. package/packages/api-types/dist/schemas/task.d.ts.map +1 -0
  66. package/packages/api-types/dist/schemas/task.js.map +1 -0
  67. package/packages/api-types/package.json +1 -1
  68. package/packages/api-types/src/index.ts +22 -0
  69. package/packages/api-types/src/schemas/agent.test.ts +164 -0
  70. package/packages/api-types/src/schemas/agent.ts +110 -0
  71. package/packages/api-types/src/schemas/api.test.ts +372 -0
  72. package/packages/api-types/src/schemas/api.ts +194 -0
  73. package/packages/api-types/src/schemas/decision.test.ts +324 -0
  74. package/packages/api-types/src/schemas/decision.ts +136 -0
  75. package/packages/api-types/src/schemas/fleet.test.ts +212 -0
  76. package/packages/api-types/src/schemas/fleet.ts +83 -0
  77. package/packages/api-types/src/schemas/history.test.ts +242 -0
  78. package/packages/api-types/src/schemas/history.ts +84 -0
  79. package/packages/api-types/src/schemas/index.ts +148 -0
  80. package/packages/api-types/src/schemas/message.test.ts +192 -0
  81. package/packages/api-types/src/schemas/message.ts +98 -0
  82. package/packages/api-types/src/schemas/session.test.ts +104 -0
  83. package/packages/api-types/src/schemas/session.ts +40 -0
  84. package/packages/api-types/src/schemas/task.test.ts +192 -0
  85. package/packages/api-types/src/schemas/task.ts +78 -0
  86. package/packages/api-types/tsconfig.json +19 -0
  87. package/packages/api-types/vitest.config.ts +9 -0
  88. package/packages/benchmark/README.md +200 -0
  89. package/packages/benchmark/datasets/coding-tasks.yaml +127 -0
  90. package/packages/benchmark/datasets/coordination-tasks.yaml +122 -0
  91. package/packages/benchmark/dist/benchmark.d.ts +47 -0
  92. package/packages/benchmark/dist/benchmark.d.ts.map +1 -0
  93. package/packages/benchmark/dist/benchmark.js +224 -0
  94. package/packages/benchmark/dist/benchmark.js.map +1 -0
  95. package/packages/benchmark/dist/cli.d.ts +8 -0
  96. package/packages/benchmark/dist/cli.d.ts.map +1 -0
  97. package/packages/benchmark/dist/cli.js +185 -0
  98. package/packages/benchmark/dist/cli.js.map +1 -0
  99. package/packages/benchmark/dist/harbor.d.ts +53 -0
  100. package/packages/benchmark/dist/harbor.d.ts.map +1 -0
  101. package/packages/benchmark/dist/harbor.js +127 -0
  102. package/packages/benchmark/dist/harbor.js.map +1 -0
  103. package/packages/benchmark/dist/index.d.ts +48 -0
  104. package/packages/benchmark/dist/index.d.ts.map +1 -0
  105. package/packages/benchmark/dist/index.js +50 -0
  106. package/packages/benchmark/dist/index.js.map +1 -0
  107. package/packages/benchmark/dist/runners/base.d.ts +63 -0
  108. package/packages/benchmark/dist/runners/base.d.ts.map +1 -0
  109. package/packages/benchmark/dist/runners/base.js +155 -0
  110. package/packages/benchmark/dist/runners/base.js.map +1 -0
  111. package/packages/benchmark/dist/runners/index.d.ts +10 -0
  112. package/packages/benchmark/dist/runners/index.d.ts.map +1 -0
  113. package/packages/benchmark/dist/runners/index.js +10 -0
  114. package/packages/benchmark/dist/runners/index.js.map +1 -0
  115. package/packages/benchmark/dist/runners/single.d.ts +19 -0
  116. package/packages/benchmark/dist/runners/single.d.ts.map +1 -0
  117. package/packages/benchmark/dist/runners/single.js +111 -0
  118. package/packages/benchmark/dist/runners/single.js.map +1 -0
  119. package/packages/benchmark/dist/runners/subagent.d.ts +32 -0
  120. package/packages/benchmark/dist/runners/subagent.d.ts.map +1 -0
  121. package/packages/benchmark/dist/runners/subagent.js +212 -0
  122. package/packages/benchmark/dist/runners/subagent.js.map +1 -0
  123. package/packages/benchmark/dist/runners/swarm.d.ts +36 -0
  124. package/packages/benchmark/dist/runners/swarm.d.ts.map +1 -0
  125. package/packages/benchmark/dist/runners/swarm.js +273 -0
  126. package/packages/benchmark/dist/runners/swarm.js.map +1 -0
  127. package/packages/benchmark/dist/types.d.ts +178 -0
  128. package/packages/benchmark/dist/types.d.ts.map +1 -0
  129. package/packages/benchmark/dist/types.js +16 -0
  130. package/packages/benchmark/dist/types.js.map +1 -0
  131. package/packages/benchmark/package.json +80 -0
  132. package/packages/benchmark/src/benchmark.ts +298 -0
  133. package/packages/benchmark/src/cli.ts +240 -0
  134. package/packages/benchmark/src/harbor.ts +170 -0
  135. package/packages/benchmark/src/index.ts +73 -0
  136. package/packages/benchmark/src/runners/base.ts +204 -0
  137. package/packages/benchmark/src/runners/index.ts +10 -0
  138. package/packages/benchmark/src/runners/single.ts +121 -0
  139. package/packages/benchmark/src/runners/subagent.ts +240 -0
  140. package/packages/benchmark/src/runners/swarm.ts +326 -0
  141. package/packages/benchmark/src/types.ts +205 -0
  142. package/packages/benchmark/tsconfig.json +20 -0
  143. package/packages/bridge/dist/index.d.ts.map +1 -0
  144. package/packages/bridge/dist/index.js.map +1 -0
  145. package/packages/bridge/dist/multi-project-client.d.ts.map +1 -0
  146. package/packages/bridge/dist/multi-project-client.js.map +1 -0
  147. package/packages/bridge/dist/shadow-cli.d.ts.map +1 -0
  148. package/packages/bridge/dist/shadow-cli.js.map +1 -0
  149. package/packages/bridge/dist/spawner.d.ts.map +1 -0
  150. package/packages/bridge/dist/spawner.js +15 -2
  151. package/packages/bridge/dist/spawner.js.map +1 -0
  152. package/packages/bridge/dist/types.d.ts.map +1 -0
  153. package/packages/bridge/dist/types.js.map +1 -0
  154. package/packages/bridge/dist/utils.d.ts.map +1 -0
  155. package/packages/bridge/dist/utils.js.map +1 -0
  156. package/packages/bridge/package.json +8 -8
  157. package/packages/bridge/src/index.ts +25 -0
  158. package/packages/bridge/src/multi-project-client.test.ts +340 -0
  159. package/packages/bridge/src/multi-project-client.ts +469 -0
  160. package/packages/bridge/src/shadow-cli.ts +95 -0
  161. package/packages/bridge/src/spawner-mcp.test.ts +505 -0
  162. package/packages/bridge/src/spawner.ts +1724 -0
  163. package/packages/bridge/src/types.ts +145 -0
  164. package/packages/bridge/src/utils.test.ts +98 -0
  165. package/packages/bridge/src/utils.ts +67 -0
  166. package/packages/bridge/tsconfig.json +29 -0
  167. package/packages/bridge/vitest.config.ts +9 -0
  168. package/packages/cli-tester/dist/index.d.ts.map +1 -0
  169. package/packages/cli-tester/dist/index.js.map +1 -0
  170. package/packages/cli-tester/dist/utils/credential-check.d.ts.map +1 -0
  171. package/packages/cli-tester/dist/utils/credential-check.js.map +1 -0
  172. package/packages/cli-tester/dist/utils/socket-client.d.ts.map +1 -0
  173. package/packages/cli-tester/dist/utils/socket-client.js.map +1 -0
  174. package/packages/cli-tester/docker/Dockerfile +61 -0
  175. package/packages/cli-tester/docker/docker-compose.yml +71 -0
  176. package/packages/cli-tester/package.json +1 -1
  177. package/packages/cli-tester/src/index.ts +40 -0
  178. package/packages/cli-tester/src/utils/credential-check.ts +284 -0
  179. package/packages/cli-tester/src/utils/socket-client.ts +211 -0
  180. package/packages/cli-tester/tests/credential-check.test.ts +56 -0
  181. package/packages/cli-tester/tsconfig.json +11 -0
  182. package/packages/config/dist/agent-config.d.ts.map +1 -0
  183. package/packages/config/dist/agent-config.js.map +1 -0
  184. package/packages/config/dist/bridge-config.d.ts.map +1 -0
  185. package/packages/config/dist/bridge-config.js.map +1 -0
  186. package/packages/config/dist/bridge-utils.d.ts.map +1 -0
  187. package/packages/config/dist/bridge-utils.js.map +1 -0
  188. package/packages/config/dist/cli-auth-config.d.ts.map +1 -0
  189. package/packages/config/dist/cli-auth-config.js.map +1 -0
  190. package/packages/config/dist/cloud-config.d.ts.map +1 -0
  191. package/packages/config/dist/cloud-config.js.map +1 -0
  192. package/packages/config/dist/index.d.ts.map +1 -0
  193. package/packages/config/dist/index.js.map +1 -0
  194. package/packages/config/dist/project-namespace.d.ts.map +1 -0
  195. package/packages/config/dist/project-namespace.js.map +1 -0
  196. package/packages/config/dist/relay-config.d.ts.map +1 -0
  197. package/packages/config/dist/relay-config.js.map +1 -0
  198. package/packages/config/dist/relay-file-writer.d.ts.map +1 -0
  199. package/packages/config/dist/relay-file-writer.js.map +1 -0
  200. package/packages/config/dist/schemas.d.ts.map +1 -0
  201. package/packages/config/dist/schemas.js.map +1 -0
  202. package/packages/config/dist/shadow-config.d.ts.map +1 -0
  203. package/packages/config/dist/shadow-config.js.map +1 -0
  204. package/packages/config/dist/teams-config.d.ts.map +1 -0
  205. package/packages/config/dist/teams-config.js.map +1 -0
  206. package/packages/config/dist/trajectory-config.d.ts.map +1 -0
  207. package/packages/config/dist/trajectory-config.js.map +1 -0
  208. package/packages/config/package.json +2 -2
  209. package/packages/config/src/agent-config.test.ts +245 -0
  210. package/packages/config/src/agent-config.ts +160 -0
  211. package/packages/config/src/bridge-config.test.ts +132 -0
  212. package/packages/config/src/bridge-config.ts +189 -0
  213. package/packages/config/src/bridge-utils.ts +59 -0
  214. package/packages/config/src/cli-auth-config.ts +548 -0
  215. package/packages/config/src/cloud-config.ts +208 -0
  216. package/packages/config/src/index.ts +12 -0
  217. package/packages/config/src/project-namespace.ts +344 -0
  218. package/packages/config/src/relay-config.test.ts +51 -0
  219. package/packages/config/src/relay-config.ts +36 -0
  220. package/packages/config/src/relay-file-writer.test.ts +351 -0
  221. package/packages/config/src/relay-file-writer.ts +508 -0
  222. package/packages/config/src/schemas.test.ts +59 -0
  223. package/packages/config/src/schemas.ts +201 -0
  224. package/packages/config/src/shadow-config.ts +205 -0
  225. package/packages/config/src/teams-config.ts +135 -0
  226. package/packages/config/src/trajectory-config.ts +222 -0
  227. package/packages/config/tsconfig.json +21 -0
  228. package/packages/config/vitest.config.ts +9 -0
  229. package/packages/continuity/dist/formatter.d.ts.map +1 -0
  230. package/packages/continuity/dist/formatter.js.map +1 -0
  231. package/packages/continuity/dist/handoff-store.d.ts.map +1 -0
  232. package/packages/continuity/dist/handoff-store.js.map +1 -0
  233. package/packages/continuity/dist/index.d.ts.map +1 -0
  234. package/packages/continuity/dist/index.js.map +1 -0
  235. package/packages/continuity/dist/ledger-store.d.ts.map +1 -0
  236. package/packages/continuity/dist/ledger-store.js.map +1 -0
  237. package/packages/continuity/dist/manager.d.ts.map +1 -0
  238. package/packages/continuity/dist/manager.js.map +1 -0
  239. package/packages/continuity/dist/parser.d.ts.map +1 -0
  240. package/packages/continuity/dist/parser.js.map +1 -0
  241. package/packages/continuity/dist/types.d.ts.map +1 -0
  242. package/packages/continuity/dist/types.js.map +1 -0
  243. package/packages/continuity/package.json +1 -1
  244. package/packages/continuity/src/formatter.ts +371 -0
  245. package/packages/continuity/src/handoff-store.ts +523 -0
  246. package/packages/continuity/src/index.ts +9 -0
  247. package/packages/continuity/src/ledger-store.ts +594 -0
  248. package/packages/continuity/src/manager.test.ts +291 -0
  249. package/packages/continuity/src/manager.ts +774 -0
  250. package/packages/continuity/src/parser.test.ts +292 -0
  251. package/packages/continuity/src/parser.ts +680 -0
  252. package/packages/continuity/src/types.ts +211 -0
  253. package/packages/continuity/tsconfig.json +21 -0
  254. package/packages/continuity/vitest.config.ts +9 -0
  255. package/packages/daemon/dist/agent-manager.d.ts.map +1 -0
  256. package/packages/daemon/dist/agent-manager.js.map +1 -0
  257. package/packages/daemon/dist/agent-registry.d.ts.map +1 -0
  258. package/packages/daemon/dist/agent-registry.js.map +1 -0
  259. package/packages/daemon/dist/agent-signing.d.ts.map +1 -0
  260. package/packages/daemon/dist/agent-signing.js.map +1 -0
  261. package/packages/daemon/dist/api.d.ts.map +1 -0
  262. package/packages/daemon/dist/api.js.map +1 -0
  263. package/packages/daemon/dist/auth.d.ts.map +1 -0
  264. package/packages/daemon/dist/auth.js.map +1 -0
  265. package/packages/daemon/dist/channel-membership-store.d.ts.map +1 -0
  266. package/packages/daemon/dist/channel-membership-store.js.map +1 -0
  267. package/packages/daemon/dist/cli-auth.d.ts.map +1 -0
  268. package/packages/daemon/dist/cli-auth.js.map +1 -0
  269. package/packages/daemon/dist/cloud-sync.d.ts.map +1 -0
  270. package/packages/daemon/dist/cloud-sync.js.map +1 -0
  271. package/packages/daemon/dist/connection.d.ts.map +1 -0
  272. package/packages/daemon/dist/connection.js.map +1 -0
  273. package/packages/daemon/dist/consensus-integration.d.ts.map +1 -0
  274. package/packages/daemon/dist/consensus-integration.js.map +1 -0
  275. package/packages/daemon/dist/consensus.d.ts.map +1 -0
  276. package/packages/daemon/dist/consensus.js.map +1 -0
  277. package/packages/daemon/dist/delivery-tracker.d.ts.map +1 -0
  278. package/packages/daemon/dist/delivery-tracker.js.map +1 -0
  279. package/packages/daemon/dist/enhanced-features.d.ts.map +1 -0
  280. package/packages/daemon/dist/enhanced-features.js.map +1 -0
  281. package/packages/daemon/dist/index.d.ts.map +1 -0
  282. package/packages/daemon/dist/index.js.map +1 -0
  283. package/packages/daemon/dist/migrations/index.d.ts.map +1 -0
  284. package/packages/daemon/dist/migrations/index.js.map +1 -0
  285. package/packages/daemon/dist/orchestrator.d.ts.map +1 -0
  286. package/packages/daemon/dist/orchestrator.js.map +1 -0
  287. package/packages/daemon/dist/rate-limiter.d.ts.map +1 -0
  288. package/packages/daemon/dist/rate-limiter.js.map +1 -0
  289. package/packages/daemon/dist/registry.d.ts.map +1 -0
  290. package/packages/daemon/dist/registry.js.map +1 -0
  291. package/packages/daemon/dist/relay-ledger.d.ts.map +1 -0
  292. package/packages/daemon/dist/relay-ledger.js.map +1 -0
  293. package/packages/daemon/dist/relay-watchdog.d.ts.map +1 -0
  294. package/packages/daemon/dist/relay-watchdog.js.map +1 -0
  295. package/packages/daemon/dist/repo-manager.d.ts.map +1 -0
  296. package/packages/daemon/dist/repo-manager.js.map +1 -0
  297. package/packages/daemon/dist/router.d.ts.map +1 -0
  298. package/packages/daemon/dist/router.js.map +1 -0
  299. package/packages/daemon/dist/server.d.ts +1 -0
  300. package/packages/daemon/dist/server.d.ts.map +1 -0
  301. package/packages/daemon/dist/server.js +46 -16
  302. package/packages/daemon/dist/server.js.map +1 -0
  303. package/packages/daemon/dist/spawn-manager.d.ts.map +1 -0
  304. package/packages/daemon/dist/spawn-manager.js.map +1 -0
  305. package/packages/daemon/dist/sync-queue.d.ts.map +1 -0
  306. package/packages/daemon/dist/sync-queue.js.map +1 -0
  307. package/packages/daemon/dist/types.d.ts.map +1 -0
  308. package/packages/daemon/dist/types.js.map +1 -0
  309. package/packages/daemon/dist/workspace-manager.d.ts.map +1 -0
  310. package/packages/daemon/dist/workspace-manager.js.map +1 -0
  311. package/packages/daemon/package.json +12 -12
  312. package/packages/daemon/src/agent-manager.ts +679 -0
  313. package/packages/daemon/src/agent-registry.ts +284 -0
  314. package/packages/daemon/src/agent-signing.ts +707 -0
  315. package/packages/daemon/src/api.ts +1012 -0
  316. package/packages/daemon/src/auth.ts +276 -0
  317. package/packages/daemon/src/channel-membership-store.ts +217 -0
  318. package/packages/daemon/src/cli-auth.ts +906 -0
  319. package/packages/daemon/src/cloud-sync.ts +902 -0
  320. package/packages/daemon/src/connection.ts +534 -0
  321. package/packages/daemon/src/consensus-integration.ts +510 -0
  322. package/packages/daemon/src/consensus.ts +848 -0
  323. package/packages/daemon/src/delivery-tracker.ts +145 -0
  324. package/packages/daemon/src/enhanced-features.ts +390 -0
  325. package/packages/daemon/src/index.ts +52 -0
  326. package/packages/daemon/src/migrations/0001_initial.sql +72 -0
  327. package/packages/daemon/src/migrations/index.test.ts +195 -0
  328. package/packages/daemon/src/migrations/index.ts +286 -0
  329. package/packages/daemon/src/orchestrator.test.ts +231 -0
  330. package/packages/daemon/src/orchestrator.ts +1376 -0
  331. package/packages/daemon/src/rate-limiter.ts +172 -0
  332. package/packages/daemon/src/registry.ts +8 -0
  333. package/packages/daemon/src/relay-ledger.test.ts +358 -0
  334. package/packages/daemon/src/relay-ledger.ts +713 -0
  335. package/packages/daemon/src/relay-watchdog.test.ts +881 -0
  336. package/packages/daemon/src/relay-watchdog.ts +785 -0
  337. package/packages/daemon/src/repo-manager.ts +468 -0
  338. package/packages/daemon/src/router.test.ts +149 -0
  339. package/packages/daemon/src/router.ts +1885 -0
  340. package/packages/daemon/src/server.ts +1871 -0
  341. package/packages/daemon/src/spawn-manager.ts +275 -0
  342. package/packages/daemon/src/sync-queue.ts +477 -0
  343. package/packages/daemon/src/types.ts +158 -0
  344. package/packages/daemon/src/workspace-manager.ts +371 -0
  345. package/packages/daemon/tsconfig.json +21 -0
  346. package/packages/hooks/dist/browser.d.ts.map +1 -0
  347. package/packages/hooks/dist/browser.js.map +1 -0
  348. package/packages/hooks/dist/emitter.d.ts.map +1 -0
  349. package/packages/hooks/dist/emitter.js.map +1 -0
  350. package/packages/hooks/dist/inbox-check/hook.d.ts.map +1 -0
  351. package/packages/hooks/dist/inbox-check/hook.js.map +1 -0
  352. package/packages/hooks/dist/inbox-check/index.d.ts.map +1 -0
  353. package/packages/hooks/dist/inbox-check/index.js.map +1 -0
  354. package/packages/hooks/dist/inbox-check/types.d.ts.map +1 -0
  355. package/packages/hooks/dist/inbox-check/types.js.map +1 -0
  356. package/packages/hooks/dist/inbox-check/utils.d.ts.map +1 -0
  357. package/packages/hooks/dist/inbox-check/utils.js.map +1 -0
  358. package/packages/hooks/dist/index.d.ts.map +1 -0
  359. package/packages/hooks/dist/index.js.map +1 -0
  360. package/packages/hooks/dist/registry.d.ts.map +1 -0
  361. package/packages/hooks/dist/registry.js.map +1 -0
  362. package/packages/hooks/dist/trajectory-hooks.d.ts.map +1 -0
  363. package/packages/hooks/dist/trajectory-hooks.js.map +1 -0
  364. package/packages/hooks/dist/types.d.ts.map +1 -0
  365. package/packages/hooks/dist/types.js.map +1 -0
  366. package/packages/hooks/package.json +4 -4
  367. package/packages/hooks/src/browser.ts +2 -0
  368. package/packages/hooks/src/emitter.ts +84 -0
  369. package/packages/hooks/src/inbox-check/hook.ts +114 -0
  370. package/packages/hooks/src/inbox-check/index.ts +8 -0
  371. package/packages/hooks/src/inbox-check/types.ts +39 -0
  372. package/packages/hooks/src/inbox-check/utils.test.ts +287 -0
  373. package/packages/hooks/src/inbox-check/utils.ts +125 -0
  374. package/packages/hooks/src/index.ts +11 -0
  375. package/packages/hooks/src/registry.ts +614 -0
  376. package/packages/hooks/src/shims.d.ts +3 -0
  377. package/packages/hooks/src/trajectory-hooks.ts +251 -0
  378. package/packages/hooks/src/types.ts +342 -0
  379. package/packages/hooks/tsconfig.json +21 -0
  380. package/packages/hooks/vitest.config.ts +9 -0
  381. package/packages/mcp/dist/bin.d.ts.map +1 -0
  382. package/packages/mcp/dist/bin.js.map +1 -0
  383. package/packages/mcp/dist/client.d.ts +9 -15
  384. package/packages/mcp/dist/client.d.ts.map +1 -0
  385. package/packages/mcp/dist/client.js +42 -74
  386. package/packages/mcp/dist/client.js.map +1 -0
  387. package/packages/mcp/dist/cloud.d.ts.map +1 -0
  388. package/packages/mcp/dist/cloud.js.map +1 -0
  389. package/packages/mcp/dist/errors.d.ts.map +1 -0
  390. package/packages/mcp/dist/errors.js.map +1 -0
  391. package/packages/mcp/dist/file-transport.d.ts.map +1 -0
  392. package/packages/mcp/dist/file-transport.js.map +1 -0
  393. package/packages/mcp/dist/hybrid-client.d.ts.map +1 -0
  394. package/packages/mcp/dist/hybrid-client.js.map +1 -0
  395. package/packages/mcp/dist/index.d.ts.map +1 -0
  396. package/packages/mcp/dist/index.js.map +1 -0
  397. package/packages/mcp/dist/install-cli.d.ts.map +1 -0
  398. package/packages/mcp/dist/install-cli.js.map +1 -0
  399. package/packages/mcp/dist/install.d.ts.map +1 -0
  400. package/packages/mcp/dist/install.js.map +1 -0
  401. package/packages/mcp/dist/prompts/index.d.ts.map +1 -0
  402. package/packages/mcp/dist/prompts/index.js.map +1 -0
  403. package/packages/mcp/dist/prompts/protocol.d.ts.map +1 -0
  404. package/packages/mcp/dist/prompts/protocol.js.map +1 -0
  405. package/packages/mcp/dist/resources/agents.d.ts.map +1 -0
  406. package/packages/mcp/dist/resources/agents.js.map +1 -0
  407. package/packages/mcp/dist/resources/inbox.d.ts.map +1 -0
  408. package/packages/mcp/dist/resources/inbox.js.map +1 -0
  409. package/packages/mcp/dist/resources/index.d.ts.map +1 -0
  410. package/packages/mcp/dist/resources/index.js.map +1 -0
  411. package/packages/mcp/dist/resources/project.d.ts.map +1 -0
  412. package/packages/mcp/dist/resources/project.js.map +1 -0
  413. package/packages/mcp/dist/server.d.ts.map +1 -0
  414. package/packages/mcp/dist/server.js.map +1 -0
  415. package/packages/mcp/dist/simple.d.ts +2 -5
  416. package/packages/mcp/dist/simple.d.ts.map +1 -0
  417. package/packages/mcp/dist/simple.js.map +1 -0
  418. package/packages/mcp/dist/tools/index.d.ts.map +1 -0
  419. package/packages/mcp/dist/tools/index.js.map +1 -0
  420. package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +1 -0
  421. package/packages/mcp/dist/tools/relay-broadcast.js.map +1 -0
  422. package/packages/mcp/dist/tools/relay-channel.d.ts.map +1 -0
  423. package/packages/mcp/dist/tools/relay-channel.js.map +1 -0
  424. package/packages/mcp/dist/tools/relay-connected.d.ts.map +1 -0
  425. package/packages/mcp/dist/tools/relay-connected.js.map +1 -0
  426. package/packages/mcp/dist/tools/relay-consensus.d.ts.map +1 -0
  427. package/packages/mcp/dist/tools/relay-consensus.js.map +1 -0
  428. package/packages/mcp/dist/tools/relay-continuity.d.ts.map +1 -0
  429. package/packages/mcp/dist/tools/relay-continuity.js.map +1 -0
  430. package/packages/mcp/dist/tools/relay-health.d.ts.map +1 -0
  431. package/packages/mcp/dist/tools/relay-health.js.map +1 -0
  432. package/packages/mcp/dist/tools/relay-inbox.d.ts.map +1 -0
  433. package/packages/mcp/dist/tools/relay-inbox.js.map +1 -0
  434. package/packages/mcp/dist/tools/relay-logs.d.ts.map +1 -0
  435. package/packages/mcp/dist/tools/relay-logs.js.map +1 -0
  436. package/packages/mcp/dist/tools/relay-metrics.d.ts.map +1 -0
  437. package/packages/mcp/dist/tools/relay-metrics.js.map +1 -0
  438. package/packages/mcp/dist/tools/relay-release.d.ts.map +1 -0
  439. package/packages/mcp/dist/tools/relay-release.js.map +1 -0
  440. package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +1 -0
  441. package/packages/mcp/dist/tools/relay-remove-agent.js.map +1 -0
  442. package/packages/mcp/dist/tools/relay-send.d.ts.map +1 -0
  443. package/packages/mcp/dist/tools/relay-send.js +4 -2
  444. package/packages/mcp/dist/tools/relay-send.js.map +1 -0
  445. package/packages/mcp/dist/tools/relay-shadow.d.ts.map +1 -0
  446. package/packages/mcp/dist/tools/relay-shadow.js.map +1 -0
  447. package/packages/mcp/dist/tools/relay-spawn.d.ts.map +1 -0
  448. package/packages/mcp/dist/tools/relay-spawn.js.map +1 -0
  449. package/packages/mcp/dist/tools/relay-status.d.ts.map +1 -0
  450. package/packages/mcp/dist/tools/relay-status.js.map +1 -0
  451. package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +1 -0
  452. package/packages/mcp/dist/tools/relay-subscribe.js.map +1 -0
  453. package/packages/mcp/dist/tools/relay-who.d.ts.map +1 -0
  454. package/packages/mcp/dist/tools/relay-who.js.map +1 -0
  455. package/packages/mcp/package.json +3 -3
  456. package/packages/mcp/src/bin.ts +149 -0
  457. package/packages/mcp/src/client.ts +400 -0
  458. package/packages/mcp/src/cloud.ts +523 -0
  459. package/packages/mcp/src/errors.ts +54 -0
  460. package/packages/mcp/src/file-transport.ts +268 -0
  461. package/packages/mcp/src/hybrid-client.ts +209 -0
  462. package/packages/mcp/src/index.ts +122 -0
  463. package/packages/mcp/src/install-cli.ts +210 -0
  464. package/packages/mcp/src/install.ts +745 -0
  465. package/packages/mcp/src/prompts/index.ts +1 -0
  466. package/packages/mcp/src/prompts/protocol.ts +164 -0
  467. package/packages/mcp/src/resources/agents.ts +21 -0
  468. package/packages/mcp/src/resources/inbox.ts +21 -0
  469. package/packages/mcp/src/resources/index.ts +3 -0
  470. package/packages/mcp/src/resources/project.ts +29 -0
  471. package/packages/mcp/src/server.ts +431 -0
  472. package/packages/mcp/src/simple.ts +214 -0
  473. package/packages/mcp/src/tools/index.ts +133 -0
  474. package/packages/mcp/src/tools/relay-broadcast.ts +32 -0
  475. package/packages/mcp/src/tools/relay-channel.ts +93 -0
  476. package/packages/mcp/src/tools/relay-connected.ts +52 -0
  477. package/packages/mcp/src/tools/relay-consensus.ts +92 -0
  478. package/packages/mcp/src/tools/relay-continuity.ts +127 -0
  479. package/packages/mcp/src/tools/relay-health.ts +148 -0
  480. package/packages/mcp/src/tools/relay-inbox.ts +70 -0
  481. package/packages/mcp/src/tools/relay-logs.ts +106 -0
  482. package/packages/mcp/src/tools/relay-metrics.ts +140 -0
  483. package/packages/mcp/src/tools/relay-release.ts +54 -0
  484. package/packages/mcp/src/tools/relay-remove-agent.ts +58 -0
  485. package/packages/mcp/src/tools/relay-send.ts +84 -0
  486. package/packages/mcp/src/tools/relay-shadow.ts +67 -0
  487. package/packages/mcp/src/tools/relay-spawn.ts +87 -0
  488. package/packages/mcp/src/tools/relay-status.ts +57 -0
  489. package/packages/mcp/src/tools/relay-subscribe.ts +61 -0
  490. package/packages/mcp/src/tools/relay-who.ts +59 -0
  491. package/packages/mcp/tests/client.test.ts +476 -0
  492. package/packages/mcp/tests/discover.test.ts +195 -0
  493. package/packages/mcp/tests/install.test.ts +123 -0
  494. package/packages/mcp/tests/prompts.test.ts +12 -0
  495. package/packages/mcp/tests/resources.test.ts +53 -0
  496. package/packages/mcp/tests/tools.test.ts +1242 -0
  497. package/packages/mcp/tsconfig.json +22 -0
  498. package/packages/mcp/vitest.config.ts +9 -0
  499. package/packages/memory/dist/adapters/index.d.ts.map +1 -0
  500. package/packages/memory/dist/adapters/index.js.map +1 -0
  501. package/packages/memory/dist/adapters/inmemory.d.ts.map +1 -0
  502. package/packages/memory/dist/adapters/inmemory.js.map +1 -0
  503. package/packages/memory/dist/adapters/supermemory.d.ts.map +1 -0
  504. package/packages/memory/dist/adapters/supermemory.js.map +1 -0
  505. package/packages/memory/dist/context-compaction.d.ts.map +1 -0
  506. package/packages/memory/dist/context-compaction.js.map +1 -0
  507. package/packages/memory/dist/factory.d.ts.map +1 -0
  508. package/packages/memory/dist/factory.js.map +1 -0
  509. package/packages/memory/dist/index.d.ts.map +1 -0
  510. package/packages/memory/dist/index.js.map +1 -0
  511. package/packages/memory/dist/memory-hooks.d.ts.map +1 -0
  512. package/packages/memory/dist/memory-hooks.js.map +1 -0
  513. package/packages/memory/dist/service.d.ts.map +1 -0
  514. package/packages/memory/dist/service.js.map +1 -0
  515. package/packages/memory/dist/types.d.ts.map +1 -0
  516. package/packages/memory/dist/types.js.map +1 -0
  517. package/packages/memory/package.json +2 -2
  518. package/packages/memory/src/adapters/index.ts +8 -0
  519. package/packages/memory/src/adapters/inmemory.ts +265 -0
  520. package/packages/memory/src/adapters/supermemory.ts +449 -0
  521. package/packages/memory/src/context-compaction.test.ts +660 -0
  522. package/packages/memory/src/context-compaction.ts +612 -0
  523. package/packages/memory/src/factory.ts +170 -0
  524. package/packages/memory/src/index.ts +33 -0
  525. package/packages/memory/src/memory-hooks.ts +410 -0
  526. package/packages/memory/src/service.ts +194 -0
  527. package/packages/memory/src/types.ts +211 -0
  528. package/packages/memory/tsconfig.json +21 -0
  529. package/packages/memory/vitest.config.ts +9 -0
  530. package/packages/policy/dist/agent-policy.d.ts.map +1 -0
  531. package/packages/policy/dist/agent-policy.js.map +1 -0
  532. package/packages/policy/dist/cloud-policy-fetcher.d.ts.map +1 -0
  533. package/packages/policy/dist/cloud-policy-fetcher.js.map +1 -0
  534. package/packages/policy/dist/index.d.ts.map +1 -0
  535. package/packages/policy/dist/index.js.map +1 -0
  536. package/packages/policy/package.json +2 -2
  537. package/packages/policy/src/agent-policy.ts +866 -0
  538. package/packages/policy/src/cloud-policy-fetcher.ts +78 -0
  539. package/packages/policy/src/index.ts +21 -0
  540. package/packages/policy/tsconfig.json +21 -0
  541. package/packages/policy/vitest.config.ts +9 -0
  542. package/packages/protocol/dist/channels.d.ts.map +1 -0
  543. package/packages/protocol/dist/channels.js.map +1 -0
  544. package/packages/protocol/dist/framing.d.ts.map +1 -0
  545. package/packages/protocol/dist/framing.js.map +1 -0
  546. package/packages/protocol/dist/id-generator.d.ts.map +1 -0
  547. package/packages/protocol/dist/id-generator.js.map +1 -0
  548. package/packages/protocol/dist/index.d.ts.map +1 -0
  549. package/packages/protocol/dist/index.js.map +1 -0
  550. package/packages/protocol/dist/relay-pty-schemas.d.ts +70 -2
  551. package/packages/protocol/dist/relay-pty-schemas.d.ts.map +1 -0
  552. package/packages/protocol/dist/relay-pty-schemas.js.map +1 -0
  553. package/packages/protocol/dist/types.d.ts +8 -0
  554. package/packages/protocol/dist/types.d.ts.map +1 -0
  555. package/packages/protocol/dist/types.js.map +1 -0
  556. package/packages/protocol/package.json +1 -1
  557. package/packages/protocol/src/channels.test.ts +330 -0
  558. package/packages/protocol/src/channels.ts +270 -0
  559. package/packages/protocol/src/framing.test.ts +164 -0
  560. package/packages/protocol/src/framing.ts +242 -0
  561. package/packages/protocol/src/id-generator.ts +69 -0
  562. package/packages/protocol/src/index.ts +4 -0
  563. package/packages/protocol/src/relay-pty-schemas.ts +400 -0
  564. package/packages/protocol/src/types.test.ts +271 -0
  565. package/packages/protocol/src/types.ts +846 -0
  566. package/packages/protocol/tsconfig.json +21 -0
  567. package/packages/protocol/vitest.config.ts +9 -0
  568. package/packages/resiliency/dist/cgroup-manager.d.ts.map +1 -0
  569. package/packages/resiliency/dist/cgroup-manager.js.map +1 -0
  570. package/packages/resiliency/dist/context-persistence.d.ts.map +1 -0
  571. package/packages/resiliency/dist/context-persistence.js.map +1 -0
  572. package/packages/resiliency/dist/crash-insights.d.ts.map +1 -0
  573. package/packages/resiliency/dist/crash-insights.js.map +1 -0
  574. package/packages/resiliency/dist/gossip-health.d.ts.map +1 -0
  575. package/packages/resiliency/dist/gossip-health.js.map +1 -0
  576. package/packages/resiliency/dist/health-monitor.d.ts.map +1 -0
  577. package/packages/resiliency/dist/health-monitor.js.map +1 -0
  578. package/packages/resiliency/dist/index.d.ts.map +1 -0
  579. package/packages/resiliency/dist/index.js.map +1 -0
  580. package/packages/resiliency/dist/leader-watchdog.d.ts.map +1 -0
  581. package/packages/resiliency/dist/leader-watchdog.js.map +1 -0
  582. package/packages/resiliency/dist/logger.d.ts.map +1 -0
  583. package/packages/resiliency/dist/logger.js.map +1 -0
  584. package/packages/resiliency/dist/memory-monitor.d.ts.map +1 -0
  585. package/packages/resiliency/dist/memory-monitor.js.map +1 -0
  586. package/packages/resiliency/dist/metrics.d.ts.map +1 -0
  587. package/packages/resiliency/dist/metrics.js.map +1 -0
  588. package/packages/resiliency/dist/provider-context.d.ts.map +1 -0
  589. package/packages/resiliency/dist/provider-context.js.map +1 -0
  590. package/packages/resiliency/dist/stateless-lead.d.ts.map +1 -0
  591. package/packages/resiliency/dist/stateless-lead.js.map +1 -0
  592. package/packages/resiliency/dist/supervisor.d.ts.map +1 -0
  593. package/packages/resiliency/dist/supervisor.js.map +1 -0
  594. package/packages/resiliency/package.json +1 -1
  595. package/packages/resiliency/src/cgroup-manager.ts +468 -0
  596. package/packages/resiliency/src/context-persistence.ts +538 -0
  597. package/packages/resiliency/src/crash-insights.test.ts +620 -0
  598. package/packages/resiliency/src/crash-insights.ts +660 -0
  599. package/packages/resiliency/src/gossip-health.ts +333 -0
  600. package/packages/resiliency/src/health-monitor.ts +371 -0
  601. package/packages/resiliency/src/index.ts +157 -0
  602. package/packages/resiliency/src/leader-watchdog.ts +260 -0
  603. package/packages/resiliency/src/logger.ts +320 -0
  604. package/packages/resiliency/src/memory-monitor.test.ts +637 -0
  605. package/packages/resiliency/src/memory-monitor.ts +740 -0
  606. package/packages/resiliency/src/metrics.ts +311 -0
  607. package/packages/resiliency/src/provider-context.ts +452 -0
  608. package/packages/resiliency/src/stateless-lead.ts +408 -0
  609. package/packages/resiliency/src/supervisor.ts +578 -0
  610. package/packages/resiliency/tsconfig.json +21 -0
  611. package/packages/resiliency/vitest.config.ts +9 -0
  612. package/packages/sdk/dist/client.d.ts.map +1 -0
  613. package/packages/sdk/dist/client.js.map +1 -0
  614. package/packages/sdk/dist/index.d.ts.map +1 -0
  615. package/packages/sdk/dist/index.js.map +1 -0
  616. package/packages/sdk/dist/logs.d.ts.map +1 -0
  617. package/packages/sdk/dist/logs.js.map +1 -0
  618. package/packages/sdk/dist/protocol/index.d.ts.map +1 -0
  619. package/packages/sdk/dist/protocol/index.js.map +1 -0
  620. package/packages/sdk/dist/standalone.d.ts.map +1 -0
  621. package/packages/sdk/dist/standalone.js.map +1 -0
  622. package/packages/sdk/examples/SWARM_CAPABILITIES.md +498 -0
  623. package/packages/sdk/examples/SWARM_PATTERNS.md +541 -0
  624. package/packages/sdk/package.json +2 -2
  625. package/packages/sdk/src/client.test.ts +568 -0
  626. package/packages/sdk/src/client.ts +1418 -0
  627. package/packages/sdk/src/index.ts +103 -0
  628. package/packages/sdk/src/logs.test.ts +98 -0
  629. package/packages/sdk/src/logs.ts +126 -0
  630. package/packages/sdk/src/protocol/framing.test.ts +164 -0
  631. package/packages/sdk/src/protocol/index.ts +8 -0
  632. package/packages/sdk/src/standalone.ts +176 -0
  633. package/packages/sdk/tsconfig.json +22 -0
  634. package/packages/sdk/vitest.config.ts +9 -0
  635. package/packages/spawner/.trajectories/index.json +5 -0
  636. package/packages/spawner/dist/index.d.ts.map +1 -0
  637. package/packages/spawner/dist/index.js.map +1 -0
  638. package/packages/spawner/dist/types.d.ts.map +1 -0
  639. package/packages/spawner/dist/types.js.map +1 -0
  640. package/packages/spawner/package.json +1 -1
  641. package/packages/spawner/src/index.ts +8 -0
  642. package/packages/spawner/src/types.test.ts +385 -0
  643. package/packages/spawner/src/types.ts +228 -0
  644. package/packages/spawner/tsconfig.json +19 -0
  645. package/packages/spawner/vitest.config.ts +9 -0
  646. package/packages/state/dist/agent-state.d.ts.map +1 -0
  647. package/packages/state/dist/agent-state.js.map +1 -0
  648. package/packages/state/dist/index.d.ts.map +1 -0
  649. package/packages/state/dist/index.js.map +1 -0
  650. package/packages/state/package.json +1 -1
  651. package/packages/state/src/agent-state.test.ts +335 -0
  652. package/packages/state/src/agent-state.ts +153 -0
  653. package/packages/state/src/index.ts +12 -0
  654. package/packages/state/tsconfig.json +21 -0
  655. package/packages/state/vitest.config.ts +9 -0
  656. package/packages/storage/dist/adapter.d.ts +28 -1
  657. package/packages/storage/dist/adapter.d.ts.map +1 -0
  658. package/packages/storage/dist/adapter.js +104 -10
  659. package/packages/storage/dist/adapter.js.map +1 -0
  660. package/packages/storage/dist/batched-sqlite-adapter.d.ts.map +1 -0
  661. package/packages/storage/dist/batched-sqlite-adapter.js.map +1 -0
  662. package/packages/storage/dist/dead-letter-queue.d.ts.map +1 -0
  663. package/packages/storage/dist/dead-letter-queue.js.map +1 -0
  664. package/packages/storage/dist/dlq-adapter.d.ts.map +1 -0
  665. package/packages/storage/dist/dlq-adapter.js.map +1 -0
  666. package/packages/storage/dist/index.d.ts +1 -0
  667. package/packages/storage/dist/index.d.ts.map +1 -0
  668. package/packages/storage/dist/index.js +1 -0
  669. package/packages/storage/dist/index.js.map +1 -0
  670. package/packages/storage/dist/jsonl-adapter.d.ts +77 -0
  671. package/packages/storage/dist/jsonl-adapter.d.ts.map +1 -0
  672. package/packages/storage/dist/jsonl-adapter.js +505 -0
  673. package/packages/storage/dist/jsonl-adapter.js.map +1 -0
  674. package/packages/storage/dist/sqlite-adapter.d.ts +6 -1
  675. package/packages/storage/dist/sqlite-adapter.d.ts.map +1 -0
  676. package/packages/storage/dist/sqlite-adapter.js +47 -0
  677. package/packages/storage/dist/sqlite-adapter.js.map +1 -0
  678. package/packages/storage/package.json +2 -2
  679. package/packages/storage/src/adapter.ts +438 -0
  680. package/packages/storage/src/batched-sqlite-adapter.test.ts +240 -0
  681. package/packages/storage/src/batched-sqlite-adapter.ts +239 -0
  682. package/packages/storage/src/dead-letter-queue.ts +643 -0
  683. package/packages/storage/src/dlq-adapter.test.ts +492 -0
  684. package/packages/storage/src/dlq-adapter.ts +954 -0
  685. package/packages/storage/src/index.ts +6 -0
  686. package/packages/storage/src/jsonl-adapter.test.ts +200 -0
  687. package/packages/storage/src/jsonl-adapter.ts +618 -0
  688. package/packages/storage/src/memory-adapter.test.ts +36 -0
  689. package/packages/storage/src/sqlite-adapter.test.ts +562 -0
  690. package/packages/storage/src/sqlite-adapter.ts +1058 -0
  691. package/packages/storage/tsconfig.json +21 -0
  692. package/packages/storage/vitest.config.ts +9 -0
  693. package/packages/telemetry/dist/client.d.ts.map +1 -0
  694. package/packages/telemetry/dist/client.js.map +1 -0
  695. package/packages/telemetry/dist/config.d.ts.map +1 -0
  696. package/packages/telemetry/dist/config.js.map +1 -0
  697. package/packages/telemetry/dist/events.d.ts.map +1 -0
  698. package/packages/telemetry/dist/events.js.map +1 -0
  699. package/packages/telemetry/dist/index.d.ts.map +1 -0
  700. package/packages/telemetry/dist/index.js.map +1 -0
  701. package/packages/telemetry/dist/machine-id.d.ts.map +1 -0
  702. package/packages/telemetry/dist/machine-id.js.map +1 -0
  703. package/packages/telemetry/dist/posthog-config.d.ts.map +1 -0
  704. package/packages/telemetry/dist/posthog-config.js.map +1 -0
  705. package/packages/telemetry/package.json +1 -1
  706. package/packages/telemetry/src/client.ts +158 -0
  707. package/packages/telemetry/src/config.ts +110 -0
  708. package/packages/telemetry/src/events.ts +137 -0
  709. package/packages/telemetry/src/index.ts +46 -0
  710. package/packages/telemetry/src/machine-id.ts +63 -0
  711. package/packages/telemetry/src/posthog-config.ts +39 -0
  712. package/packages/telemetry/tsconfig.json +21 -0
  713. package/packages/trajectory/dist/index.d.ts.map +1 -0
  714. package/packages/trajectory/dist/index.js.map +1 -0
  715. package/packages/trajectory/dist/integration.d.ts.map +1 -0
  716. package/packages/trajectory/dist/integration.js.map +1 -0
  717. package/packages/trajectory/package.json +2 -2
  718. package/packages/trajectory/src/index.ts +1 -0
  719. package/packages/trajectory/src/integration.ts +1268 -0
  720. package/packages/trajectory/tsconfig.json +21 -0
  721. package/packages/trajectory/vitest.config.ts +9 -0
  722. package/packages/user-directory/dist/index.d.ts.map +1 -0
  723. package/packages/user-directory/dist/index.js.map +1 -0
  724. package/packages/user-directory/dist/user-directory.d.ts.map +1 -0
  725. package/packages/user-directory/dist/user-directory.js.map +1 -0
  726. package/packages/user-directory/package.json +2 -2
  727. package/packages/user-directory/src/index.ts +12 -0
  728. package/packages/user-directory/src/user-directory.ts +393 -0
  729. package/packages/user-directory/tsconfig.json +21 -0
  730. package/packages/user-directory/vitest.config.ts +9 -0
  731. package/packages/utils/dist/cjs/client-helpers.js +127 -0
  732. package/packages/utils/dist/cjs/command-resolver.js +89 -0
  733. package/packages/utils/dist/cjs/error-tracking.js +106 -0
  734. package/packages/utils/dist/cjs/git-remote.js +120 -0
  735. package/packages/utils/dist/cjs/index.js +40 -0
  736. package/packages/utils/dist/cjs/logger.js +105 -0
  737. package/packages/utils/dist/cjs/model-mapping.js +54 -0
  738. package/packages/utils/dist/cjs/name-generator.js +179 -0
  739. package/packages/utils/dist/cjs/package.json +3 -0
  740. package/packages/utils/dist/cjs/precompiled-patterns.js +271 -0
  741. package/packages/utils/dist/cjs/relay-pty-path.js +143 -0
  742. package/packages/utils/dist/cjs/update-checker.js +185 -0
  743. package/packages/utils/dist/client-helpers.d.ts +73 -0
  744. package/packages/utils/dist/client-helpers.d.ts.map +1 -0
  745. package/packages/utils/dist/client-helpers.js +130 -0
  746. package/packages/utils/dist/client-helpers.js.map +1 -0
  747. package/packages/utils/dist/command-resolver.d.ts.map +1 -0
  748. package/packages/utils/dist/command-resolver.js.map +1 -0
  749. package/packages/utils/dist/error-tracking.d.ts.map +1 -0
  750. package/packages/utils/dist/error-tracking.js.map +1 -0
  751. package/packages/utils/dist/git-remote.d.ts.map +1 -0
  752. package/packages/utils/dist/git-remote.js.map +1 -0
  753. package/packages/utils/dist/index.d.ts +1 -0
  754. package/packages/utils/dist/index.d.ts.map +1 -0
  755. package/packages/utils/dist/index.js +1 -0
  756. package/packages/utils/dist/index.js.map +1 -0
  757. package/packages/utils/dist/logger.d.ts.map +1 -0
  758. package/packages/utils/dist/logger.js.map +1 -0
  759. package/packages/utils/dist/model-mapping.d.ts.map +1 -0
  760. package/packages/utils/dist/model-mapping.js.map +1 -0
  761. package/packages/utils/dist/name-generator.d.ts.map +1 -0
  762. package/packages/utils/dist/name-generator.js.map +1 -0
  763. package/packages/utils/dist/precompiled-patterns.d.ts.map +1 -0
  764. package/packages/utils/dist/precompiled-patterns.js.map +1 -0
  765. package/packages/utils/dist/relay-pty-path.d.ts +11 -5
  766. package/packages/utils/dist/relay-pty-path.d.ts.map +1 -0
  767. package/packages/utils/dist/relay-pty-path.js +60 -5
  768. package/packages/utils/dist/relay-pty-path.js.map +1 -0
  769. package/packages/utils/dist/update-checker.d.ts.map +1 -0
  770. package/packages/utils/dist/update-checker.js.map +1 -0
  771. package/packages/utils/package.json +37 -14
  772. package/packages/utils/scripts/build-cjs.mjs +24 -0
  773. package/packages/utils/src/client-helpers.ts +221 -0
  774. package/packages/utils/src/command-resolver.ts +82 -0
  775. package/packages/utils/src/error-tracking.ts +189 -0
  776. package/packages/utils/src/git-remote.ts +143 -0
  777. package/packages/utils/src/index.ts +10 -0
  778. package/packages/utils/src/logger.ts +107 -0
  779. package/packages/utils/src/model-mapping.test.ts +122 -0
  780. package/packages/utils/src/model-mapping.ts +58 -0
  781. package/packages/utils/src/name-generator.test.ts +259 -0
  782. package/packages/utils/src/name-generator.ts +56 -0
  783. package/packages/utils/src/precompiled-patterns.test.ts +452 -0
  784. package/packages/utils/src/precompiled-patterns.ts +395 -0
  785. package/packages/utils/src/relay-pty-path.ts +196 -0
  786. package/packages/utils/src/update-checker.test.ts +260 -0
  787. package/packages/utils/src/update-checker.ts +211 -0
  788. package/packages/utils/tsconfig.json +21 -0
  789. package/packages/utils/vitest.config.ts +9 -0
  790. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts.map +1 -0
  791. package/packages/wrapper/dist/__fixtures__/claude-outputs.js.map +1 -0
  792. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts.map +1 -0
  793. package/packages/wrapper/dist/__fixtures__/codex-outputs.js.map +1 -0
  794. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts.map +1 -0
  795. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js.map +1 -0
  796. package/packages/wrapper/dist/__fixtures__/index.d.ts.map +1 -0
  797. package/packages/wrapper/dist/__fixtures__/index.js.map +1 -0
  798. package/packages/wrapper/dist/auth-detection.d.ts.map +1 -0
  799. package/packages/wrapper/dist/auth-detection.js.map +1 -0
  800. package/packages/wrapper/dist/base-wrapper.d.ts.map +1 -0
  801. package/packages/wrapper/dist/base-wrapper.js.map +1 -0
  802. package/packages/wrapper/dist/client.d.ts.map +1 -0
  803. package/packages/wrapper/dist/client.js.map +1 -0
  804. package/packages/wrapper/dist/id-generator.d.ts.map +1 -0
  805. package/packages/wrapper/dist/id-generator.js.map +1 -0
  806. package/packages/wrapper/dist/idle-detector.d.ts.map +1 -0
  807. package/packages/wrapper/dist/idle-detector.js.map +1 -0
  808. package/packages/wrapper/dist/inbox.d.ts.map +1 -0
  809. package/packages/wrapper/dist/inbox.js.map +1 -0
  810. package/packages/wrapper/dist/index.d.ts.map +1 -0
  811. package/packages/wrapper/dist/index.js.map +1 -0
  812. package/packages/wrapper/dist/parser.d.ts.map +1 -0
  813. package/packages/wrapper/dist/parser.js.map +1 -0
  814. package/packages/wrapper/dist/prompt-composer.d.ts.map +1 -0
  815. package/packages/wrapper/dist/prompt-composer.js.map +1 -0
  816. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +10 -0
  817. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +1 -0
  818. package/packages/wrapper/dist/relay-pty-orchestrator.js +69 -0
  819. package/packages/wrapper/dist/relay-pty-orchestrator.js.map +1 -0
  820. package/packages/wrapper/dist/shared.d.ts.map +1 -0
  821. package/packages/wrapper/dist/shared.js.map +1 -0
  822. package/packages/wrapper/dist/stuck-detector.d.ts.map +1 -0
  823. package/packages/wrapper/dist/stuck-detector.js.map +1 -0
  824. package/packages/wrapper/dist/tmux-resolver.d.ts.map +1 -0
  825. package/packages/wrapper/dist/tmux-resolver.js.map +1 -0
  826. package/packages/wrapper/dist/tmux-wrapper.d.ts.map +1 -0
  827. package/packages/wrapper/dist/tmux-wrapper.js.map +1 -0
  828. package/packages/wrapper/dist/trajectory-integration.d.ts.map +1 -0
  829. package/packages/wrapper/dist/trajectory-integration.js.map +1 -0
  830. package/packages/wrapper/dist/wrapper-types.d.ts.map +1 -0
  831. package/packages/wrapper/dist/wrapper-types.js.map +1 -0
  832. package/packages/wrapper/package.json +6 -9
  833. package/packages/wrapper/src/__fixtures__/claude-outputs.ts +471 -0
  834. package/packages/wrapper/src/__fixtures__/codex-outputs.ts +99 -0
  835. package/packages/wrapper/src/__fixtures__/gemini-outputs.ts +151 -0
  836. package/packages/wrapper/src/__fixtures__/index.ts +47 -0
  837. package/packages/wrapper/src/auth-detection.ts +244 -0
  838. package/packages/wrapper/src/base-wrapper.test.ts +589 -0
  839. package/packages/wrapper/src/base-wrapper.ts +810 -0
  840. package/packages/wrapper/src/client.test.ts +262 -0
  841. package/packages/wrapper/src/client.ts +984 -0
  842. package/packages/wrapper/src/id-generator.test.ts +71 -0
  843. package/packages/wrapper/src/id-generator.ts +69 -0
  844. package/packages/wrapper/src/idle-detector.test.ts +418 -0
  845. package/packages/wrapper/src/idle-detector.ts +384 -0
  846. package/packages/wrapper/src/inbox.test.ts +233 -0
  847. package/packages/wrapper/src/inbox.ts +89 -0
  848. package/packages/wrapper/src/index.ts +170 -0
  849. package/packages/wrapper/src/parser.regression.test.ts +251 -0
  850. package/packages/wrapper/src/parser.test.ts +1359 -0
  851. package/packages/wrapper/src/parser.ts +1477 -0
  852. package/packages/wrapper/src/prompt-composer.test.ts +219 -0
  853. package/packages/wrapper/src/prompt-composer.ts +231 -0
  854. package/packages/wrapper/src/relay-pty-orchestrator.test.ts +1204 -0
  855. package/packages/wrapper/src/relay-pty-orchestrator.ts +2626 -0
  856. package/packages/wrapper/src/shared.test.ts +322 -0
  857. package/packages/wrapper/src/shared.ts +495 -0
  858. package/packages/wrapper/src/stuck-detector.test.ts +303 -0
  859. package/packages/wrapper/src/stuck-detector.ts +511 -0
  860. package/packages/wrapper/src/tmux-resolver.test.ts +104 -0
  861. package/packages/wrapper/src/tmux-resolver.ts +207 -0
  862. package/packages/wrapper/src/tmux-wrapper.test.ts +316 -0
  863. package/packages/wrapper/src/tmux-wrapper.ts +2095 -0
  864. package/packages/wrapper/src/trajectory-detection.test.ts +151 -0
  865. package/packages/wrapper/src/trajectory-integration.ts +1261 -0
  866. package/packages/wrapper/src/wrapper-types.ts +45 -0
  867. package/packages/wrapper/tsconfig.json +19 -0
  868. package/packages/wrapper/vitest.config.ts +9 -0
  869. package/scripts/build-cjs.mjs +23 -0
  870. package/scripts/postinstall.js +132 -0
  871. package/.cursor/mcp.json +0 -11
  872. package/.gitattributes +0 -3
  873. package/.gitleaks.toml +0 -26
  874. package/.mcp.json +0 -11
  875. package/.nvmrc +0 -1
  876. package/ARCHITECTURE.md +0 -1245
  877. package/CHANGELOG.md +0 -231
  878. package/TESTING.md +0 -278
  879. package/TRAIL_GIT_AUTH_FIX.md +0 -113
  880. package/scripts/demos/README.md +0 -79
  881. package/scripts/demos/server-capacity.sh +0 -69
  882. package/scripts/demos/sprint-planning.sh +0 -73
  883. package/scripts/hooks/install.sh +0 -16
  884. package/scripts/hooks/pre-commit +0 -60
  885. package/scripts/post-publish-verify/README.md +0 -80
  886. package/scripts/post-publish-verify/run-verify.sh +0 -127
  887. package/scripts/post-publish-verify/verify-install.sh +0 -249
  888. package/scripts/stress-test-orchestrator-integration.mts +0 -1366
  889. package/scripts/stress-test-orchestrator.mjs +0 -584
  890. package/scripts/stress-test-relay-pty.sh +0 -452
  891. package/scripts/test-interactive-terminal.sh +0 -248
  892. package/specs/PRIMITIVES_ROADMAP.md +0 -2154
  893. package/tests/benchmarks/protocol.bench.ts +0 -310
  894. package/turbo.json +0 -37
@@ -0,0 +1,810 @@
1
+ /**
2
+ * BaseWrapper - Abstract base class for agent wrappers
3
+ *
4
+ * Provides shared functionality between TmuxWrapper and PtyWrapper:
5
+ * - Message queue management and deduplication
6
+ * - Spawn/release command parsing and execution
7
+ * - Continuity integration (agent ID, summary saving)
8
+ * - Relay command handling
9
+ * - Line joining for multi-line commands
10
+ *
11
+ * Subclasses implement:
12
+ * - start() - Initialize and start the agent process
13
+ * - stop() - Stop the agent process
14
+ * - performInjection() - Inject content into the agent
15
+ * - getCleanOutput() - Get cleaned output for parsing
16
+ */
17
+
18
+ import { EventEmitter } from 'node:events';
19
+ import { RelayClient } from './client.js';
20
+ import type { ParsedCommand, ParsedSummary } from './parser.js';
21
+ import { isPlaceholderTarget } from './parser.js';
22
+ import type { SendPayload, SendMeta, SpeakOnTrigger, Envelope } from '@agent-relay/protocol/types';
23
+ import type { ChannelMessagePayload } from '@agent-relay/protocol/channels';
24
+ import {
25
+ type QueuedMessage,
26
+ type InjectionMetrics,
27
+ type CliType,
28
+ type MessagePriority,
29
+ getDefaultRelayPrefix,
30
+ detectCliType,
31
+ createInjectionMetrics,
32
+ sortByPriority,
33
+ getPriorityFromImportance,
34
+ MESSAGE_PRIORITY,
35
+ } from './shared.js';
36
+ import {
37
+ DEFAULT_IDLE_BEFORE_INJECT_MS,
38
+ DEFAULT_IDLE_CONFIDENCE_THRESHOLD,
39
+ } from '@agent-relay/config/relay-config';
40
+ import {
41
+ getContinuityManager,
42
+ parseContinuityCommand,
43
+ hasContinuityCommand,
44
+ type ContinuityManager,
45
+ } from '@agent-relay/continuity';
46
+ import { UniversalIdleDetector } from './idle-detector.js';
47
+ import { StuckDetector, type StuckEvent, type StuckReason } from './stuck-detector.js';
48
+
49
+ /**
50
+ * Base configuration shared by all wrapper types
51
+ */
52
+ export interface BaseWrapperConfig {
53
+ /** Agent name (must be unique) */
54
+ name: string;
55
+ /** Command to execute */
56
+ command: string;
57
+ /** Command arguments */
58
+ args?: string[];
59
+ /** Relay daemon socket path */
60
+ socketPath?: string;
61
+ /** Working directory */
62
+ cwd?: string;
63
+ /** Environment variables */
64
+ env?: Record<string, string>;
65
+ /** Relay prefix pattern (default: '->relay:') */
66
+ relayPrefix?: string;
67
+ /** CLI type (auto-detected if not set) */
68
+ cliType?: CliType;
69
+ /** Dashboard port for spawn/release API */
70
+ dashboardPort?: number;
71
+ /** Callback when spawn command is parsed */
72
+ onSpawn?: (name: string, cli: string, task: string) => Promise<void>;
73
+ /** Callback when release command is parsed */
74
+ onRelease?: (name: string) => Promise<void>;
75
+ /** Agent ID to resume from (for continuity) */
76
+ resumeAgentId?: string;
77
+ /** Stream logs to daemon */
78
+ streamLogs?: boolean;
79
+ /** Task/role description */
80
+ task?: string;
81
+ /** Shadow configuration */
82
+ shadowOf?: string;
83
+ shadowSpeakOn?: SpeakOnTrigger[];
84
+ /** Milliseconds of idle time before injection is allowed (default: 1500) */
85
+ idleBeforeInjectMs?: number;
86
+ /** Confidence threshold for idle detection (0-1, default: 0.7) */
87
+ idleConfidenceThreshold?: number;
88
+ /** Skip initial instruction injection (when using --append-system-prompt) */
89
+ skipInstructions?: boolean;
90
+ /** Skip continuity loading (for spawned agents that don't need session recovery) */
91
+ skipContinuity?: boolean;
92
+ }
93
+
94
+ /**
95
+ * Abstract base class for agent wrappers
96
+ */
97
+ export abstract class BaseWrapper extends EventEmitter {
98
+ protected config: BaseWrapperConfig;
99
+ protected client: RelayClient;
100
+ protected relayPrefix: string;
101
+ protected cliType: CliType;
102
+ protected running = false;
103
+
104
+ // Message queue state
105
+ protected messageQueue: QueuedMessage[] = [];
106
+ protected sentMessageHashes: Set<string> = new Set();
107
+ protected isInjecting = false;
108
+ protected receivedMessageIds: Set<string> = new Set();
109
+ protected injectionMetrics: InjectionMetrics = createInjectionMetrics();
110
+
111
+ // Spawn/release state
112
+ protected processedSpawnCommands: Set<string> = new Set();
113
+ protected processedReleaseCommands: Set<string> = new Set();
114
+ protected pendingFencedSpawn: { name: string; cli: string; taskLines: string[] } | null = null;
115
+
116
+ // Continuity state
117
+ protected continuity?: ContinuityManager;
118
+ protected agentId?: string;
119
+ protected processedContinuityCommands: Set<string> = new Set();
120
+ protected sessionEndProcessed = false;
121
+ protected sessionEndData?: { summary?: string; completedTasks?: string[] };
122
+ protected lastSummaryRawContent = '';
123
+
124
+ // Universal idle detection (shared across all wrapper types)
125
+ protected idleDetector: UniversalIdleDetector;
126
+
127
+ // Stuck detection (extended idle, error loops, output loops)
128
+ protected stuckDetector: StuckDetector;
129
+
130
+ constructor(config: BaseWrapperConfig) {
131
+ super();
132
+ this.config = config;
133
+ this.relayPrefix = config.relayPrefix ?? getDefaultRelayPrefix();
134
+ this.cliType = config.cliType ?? detectCliType(config.command);
135
+
136
+ // Initialize relay client with full config
137
+ this.client = new RelayClient({
138
+ agentName: config.name,
139
+ socketPath: config.socketPath,
140
+ cli: this.cliType,
141
+ task: config.task,
142
+ workingDirectory: config.cwd,
143
+ quiet: true,
144
+ _internal: true, // Suppress deprecation warning for internal wrapper usage
145
+ });
146
+
147
+ // Initialize continuity manager (skip for spawned agents that don't need session recovery)
148
+ if (!config.skipContinuity) {
149
+ this.continuity = getContinuityManager({ defaultCli: this.cliType });
150
+ }
151
+
152
+ // Initialize universal idle detector for robust injection timing
153
+ this.idleDetector = new UniversalIdleDetector({
154
+ minSilenceMs: config.idleBeforeInjectMs ?? DEFAULT_IDLE_BEFORE_INJECT_MS,
155
+ confidenceThreshold: config.idleConfidenceThreshold ?? DEFAULT_IDLE_CONFIDENCE_THRESHOLD,
156
+ });
157
+
158
+ // Initialize stuck detector for extended idle and loop detection
159
+ this.stuckDetector = new StuckDetector();
160
+ this.stuckDetector.on('stuck', (event: StuckEvent) => {
161
+ // Events are emitted for programmatic use - no terminal logging to avoid noise
162
+ this.emit('stuck', event);
163
+ });
164
+ this.stuckDetector.on('unstuck', () => {
165
+ this.emit('unstuck');
166
+ });
167
+
168
+ // Set up message handler for direct messages
169
+ this.client.onMessage = (from, payload, messageId, meta, originalTo) => {
170
+ this.handleIncomingMessage(from, payload, messageId, meta, originalTo);
171
+ };
172
+
173
+ // Set up channel message handler
174
+ this.client.onChannelMessage = (from, channel, body, envelope) => {
175
+ this.handleIncomingChannelMessage(from, channel, body, envelope);
176
+ };
177
+ }
178
+
179
+ // =========================================================================
180
+ // Abstract methods (subclasses must implement)
181
+ // =========================================================================
182
+
183
+ /** Start the agent process */
184
+ abstract start(): Promise<void>;
185
+
186
+ /** Stop the agent process */
187
+ abstract stop(): Promise<void> | void;
188
+
189
+ /** Inject content into the agent */
190
+ protected abstract performInjection(content: string): Promise<void>;
191
+
192
+ /** Get cleaned output for parsing */
193
+ protected abstract getCleanOutput(): string;
194
+
195
+ // =========================================================================
196
+ // Common getters
197
+ // =========================================================================
198
+
199
+ get isRunning(): boolean {
200
+ return this.running;
201
+ }
202
+
203
+ get name(): string {
204
+ return this.config.name;
205
+ }
206
+
207
+ getAgentId(): string | undefined {
208
+ return this.agentId;
209
+ }
210
+
211
+ getInjectionMetrics(): InjectionMetrics & { successRate: number } {
212
+ const total = this.injectionMetrics.total;
213
+ const successes = this.injectionMetrics.successFirstTry + this.injectionMetrics.successWithRetry;
214
+ const successRate = total > 0
215
+ ? (successes / total) * 100
216
+ : 100;
217
+ return {
218
+ ...this.injectionMetrics,
219
+ successRate,
220
+ };
221
+ }
222
+
223
+ get pendingMessageCount(): number {
224
+ return this.messageQueue.length;
225
+ }
226
+
227
+ // =========================================================================
228
+ // Idle detection (shared across all wrapper types)
229
+ // =========================================================================
230
+
231
+ /**
232
+ * Set the PID for process state inspection (Linux only).
233
+ * Call this after the agent process is started.
234
+ */
235
+ protected setIdleDetectorPid(pid: number): void {
236
+ this.idleDetector.setPid(pid);
237
+ }
238
+
239
+ /**
240
+ * Start stuck detection. Call after the agent process starts.
241
+ */
242
+ protected startStuckDetection(): void {
243
+ this.stuckDetector.start();
244
+ }
245
+
246
+ /**
247
+ * Stop stuck detection. Call when the agent process stops.
248
+ */
249
+ protected stopStuckDetection(): void {
250
+ this.stuckDetector.stop();
251
+ }
252
+
253
+ /**
254
+ * Check if the agent is currently stuck.
255
+ */
256
+ isStuck(): boolean {
257
+ return this.stuckDetector.getIsStuck();
258
+ }
259
+
260
+ /**
261
+ * Get the reason for being stuck (if stuck).
262
+ */
263
+ getStuckReason(): StuckReason | null {
264
+ return this.stuckDetector.getStuckReason();
265
+ }
266
+
267
+ /**
268
+ * Feed output to the idle and stuck detectors.
269
+ * Call this whenever new output is received from the agent.
270
+ */
271
+ protected feedIdleDetectorOutput(output: string): void {
272
+ this.idleDetector.onOutput(output);
273
+ this.stuckDetector.onOutput(output);
274
+ }
275
+
276
+ /**
277
+ * Check if the agent is idle and ready for injection.
278
+ * Returns idle state with confidence signals.
279
+ */
280
+ protected checkIdleForInjection(): { isIdle: boolean; confidence: number; signals: Array<{ source: string; confidence: number }> } {
281
+ return this.idleDetector.checkIdle({
282
+ minSilenceMs: this.config.idleBeforeInjectMs ?? DEFAULT_IDLE_BEFORE_INJECT_MS,
283
+ });
284
+ }
285
+
286
+ /**
287
+ * Wait for the agent to become idle.
288
+ * Returns when idle or after timeout.
289
+ */
290
+ protected async waitForIdleState(timeoutMs = 30000, pollMs = 200): Promise<{ isIdle: boolean; confidence: number }> {
291
+ return this.idleDetector.waitForIdle(timeoutMs, pollMs);
292
+ }
293
+
294
+ // =========================================================================
295
+ // Priority queue management
296
+ // =========================================================================
297
+
298
+ /**
299
+ * Sort the message queue by priority (urgent first).
300
+ * Call this before processing messages to ensure proper ordering.
301
+ */
302
+ protected sortQueueByPriority(): void {
303
+ if (this.messageQueue.length > 1) {
304
+ this.messageQueue = sortByPriority(this.messageQueue);
305
+ }
306
+ }
307
+
308
+ /**
309
+ * Get the next message from the queue (highest priority first).
310
+ * Does not remove the message - call dequeueMessage() to remove.
311
+ */
312
+ protected peekNextMessage(): QueuedMessage | undefined {
313
+ this.sortQueueByPriority();
314
+ return this.messageQueue[0];
315
+ }
316
+
317
+ /**
318
+ * Remove and return the next message from the queue.
319
+ * Messages are sorted by priority before dequeue.
320
+ */
321
+ protected dequeueMessage(): QueuedMessage | undefined {
322
+ this.sortQueueByPriority();
323
+ return this.messageQueue.shift();
324
+ }
325
+
326
+ /**
327
+ * Get the priority of the next message in queue.
328
+ * Returns MESSAGE_PRIORITY.NORMAL if queue is empty.
329
+ */
330
+ protected getNextMessagePriority(): MessagePriority {
331
+ const next = this.messageQueue[0];
332
+ return next ? getPriorityFromImportance(next.importance) : MESSAGE_PRIORITY.NORMAL;
333
+ }
334
+
335
+ /**
336
+ * Check if there are urgent messages that should bypass normal idle wait.
337
+ */
338
+ protected hasUrgentMessages(): boolean {
339
+ return this.messageQueue.some(
340
+ msg => getPriorityFromImportance(msg.importance) === MESSAGE_PRIORITY.URGENT
341
+ );
342
+ }
343
+
344
+ // =========================================================================
345
+ // Message handling
346
+ // =========================================================================
347
+
348
+ /**
349
+ * Handle incoming message from relay
350
+ */
351
+ protected handleIncomingMessage(
352
+ from: string,
353
+ payload: SendPayload,
354
+ messageId: string,
355
+ meta?: SendMeta,
356
+ originalTo?: string
357
+ ): void {
358
+ // Deduplicate by message ID
359
+ if (this.receivedMessageIds.has(messageId)) return;
360
+ this.receivedMessageIds.add(messageId);
361
+
362
+ // Limit dedup set size
363
+ if (this.receivedMessageIds.size > 1000) {
364
+ const oldest = this.receivedMessageIds.values().next().value;
365
+ if (oldest) this.receivedMessageIds.delete(oldest);
366
+ }
367
+
368
+ // Queue the message
369
+ const queuedMsg: QueuedMessage = {
370
+ from,
371
+ body: payload.body,
372
+ messageId,
373
+ thread: payload.thread,
374
+ importance: meta?.importance,
375
+ data: payload.data,
376
+ sync: meta?.sync,
377
+ originalTo,
378
+ };
379
+
380
+ this.messageQueue.push(queuedMsg);
381
+ }
382
+
383
+ /**
384
+ * Send an ACK for a sync message after processing completes.
385
+ * @param messageId - The message ID being acknowledged
386
+ * @param sync - Sync metadata from the original message
387
+ * @param response - Response status: 'OK' for success, 'ERROR' for failure
388
+ * @param responseData - Optional structured response data
389
+ */
390
+ protected sendSyncAck(messageId: string, sync: SendMeta['sync'] | undefined, response: 'OK' | 'ERROR' | string, responseData?: unknown): void {
391
+ if (!sync?.correlationId) return;
392
+ this.client.sendAck({
393
+ ack_id: messageId,
394
+ seq: 0,
395
+ correlationId: sync.correlationId,
396
+ response,
397
+ responseData,
398
+ });
399
+ }
400
+
401
+ /**
402
+ * Handle incoming channel message from relay.
403
+ * Channel messages include a channel indicator so the agent knows to reply to the channel.
404
+ */
405
+ protected handleIncomingChannelMessage(
406
+ from: string,
407
+ channel: string,
408
+ body: string,
409
+ envelope: Envelope<ChannelMessagePayload>
410
+ ): void {
411
+ const messageId = envelope.id;
412
+
413
+ // Deduplicate by message ID
414
+ if (this.receivedMessageIds.has(messageId)) return;
415
+ this.receivedMessageIds.add(messageId);
416
+
417
+ // Limit dedup set size
418
+ if (this.receivedMessageIds.size > 1000) {
419
+ const oldest = this.receivedMessageIds.values().next().value;
420
+ if (oldest) this.receivedMessageIds.delete(oldest);
421
+ }
422
+
423
+ // Queue the message with channel indicator in the body
424
+ // Format: "Relay message from Alice [abc123] [#general]: message body"
425
+ // This lets the agent know to reply to the channel, not the sender
426
+ const queuedMsg: QueuedMessage = {
427
+ from,
428
+ body,
429
+ messageId,
430
+ thread: envelope.payload.thread,
431
+ data: {
432
+ _isChannelMessage: true,
433
+ _channel: channel,
434
+ _mentions: envelope.payload.mentions,
435
+ },
436
+ originalTo: channel, // Set channel as the reply target
437
+ };
438
+
439
+ console.error(`[base-wrapper] Received channel message: from=${from} channel=${channel} id=${messageId.substring(0, 8)}`);
440
+ this.messageQueue.push(queuedMsg);
441
+ }
442
+
443
+ /**
444
+ * Send a relay command via the client
445
+ */
446
+ protected sendRelayCommand(cmd: ParsedCommand): void {
447
+ // Validate target
448
+ if (isPlaceholderTarget(cmd.to)) {
449
+ console.error(`[base-wrapper] Skipped message - placeholder target: ${cmd.to}`);
450
+ return;
451
+ }
452
+
453
+ // Create hash for deduplication (use first 100 chars of body)
454
+ const hash = `${cmd.to}:${cmd.body.substring(0, 100)}`;
455
+ if (this.sentMessageHashes.has(hash)) {
456
+ console.error(`[base-wrapper] Skipped duplicate message to ${cmd.to}`);
457
+ return;
458
+ }
459
+
460
+ // Only send if client ready - check BEFORE adding hash to avoid blocking retries
461
+ if (this.client.state !== 'READY') {
462
+ console.error(`[base-wrapper] Client not ready (state=${this.client.state}), dropping message to ${cmd.to}`);
463
+ return;
464
+ }
465
+
466
+ console.error(`[base-wrapper] sendRelayCommand: to=${cmd.to}, body=${cmd.body.substring(0, 50)}...`);
467
+
468
+ let sendMeta: SendMeta | undefined;
469
+ if (cmd.meta) {
470
+ sendMeta = {
471
+ importance: cmd.meta.importance,
472
+ replyTo: cmd.meta.replyTo,
473
+ requires_ack: cmd.meta.ackRequired,
474
+ };
475
+ }
476
+
477
+ // Helper to mark message as sent (only after successful transmission)
478
+ const markSent = () => {
479
+ this.sentMessageHashes.add(hash);
480
+ // Limit hash set size
481
+ if (this.sentMessageHashes.size > 500) {
482
+ const oldest = this.sentMessageHashes.values().next().value;
483
+ if (oldest) this.sentMessageHashes.delete(oldest);
484
+ }
485
+ };
486
+
487
+ // Check if target is a channel (starts with #)
488
+ if (cmd.to.startsWith('#')) {
489
+ // Use CHANNEL_MESSAGE protocol for channel targets
490
+ console.error(`[base-wrapper] Sending CHANNEL_MESSAGE to ${cmd.to}`);
491
+ const success = this.client.sendChannelMessage(cmd.to, cmd.body, {
492
+ thread: cmd.thread,
493
+ data: cmd.data,
494
+ });
495
+ if (success) {
496
+ markSent();
497
+ } else {
498
+ console.error(`[base-wrapper] sendChannelMessage failed for ${cmd.to}`);
499
+ }
500
+ } else {
501
+ // Use SEND protocol for direct messages and broadcasts
502
+ if (cmd.sync?.blocking) {
503
+ this.client.sendAndWait(cmd.to, cmd.body, {
504
+ timeoutMs: cmd.sync.timeoutMs,
505
+ kind: cmd.kind,
506
+ data: cmd.data,
507
+ thread: cmd.thread,
508
+ }).then(() => {
509
+ markSent();
510
+ }).catch((err) => {
511
+ console.error(`[base-wrapper] sendAndWait failed for ${cmd.to}: ${err.message}`);
512
+ });
513
+ } else {
514
+ const success = this.client.sendMessage(cmd.to, cmd.body, cmd.kind, cmd.data, cmd.thread, sendMeta);
515
+ if (success) {
516
+ markSent();
517
+ } else {
518
+ console.error(`[base-wrapper] sendMessage failed for ${cmd.to}`);
519
+ }
520
+ }
521
+ }
522
+ }
523
+
524
+ // =========================================================================
525
+ // Spawn/release handling
526
+ // =========================================================================
527
+
528
+ /**
529
+ * Parse spawn and release commands from output
530
+ */
531
+ protected parseSpawnReleaseCommands(content: string): void {
532
+ // Single-line spawn: ->relay:spawn Name cli "task"
533
+ const spawnPattern = new RegExp(
534
+ `${this.relayPrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}spawn\\s+(\\w+)\\s+(\\w+)\\s+"([^"]+)"`
535
+ );
536
+ const spawnMatch = content.match(spawnPattern);
537
+ if (spawnMatch) {
538
+ const [, name, cli, task] = spawnMatch;
539
+ const cmdHash = `spawn:${name}:${cli}:${task}`;
540
+ if (!this.processedSpawnCommands.has(cmdHash)) {
541
+ this.processedSpawnCommands.add(cmdHash);
542
+ this.executeSpawn(name, cli, task);
543
+ }
544
+ }
545
+
546
+ // Fenced spawn: ->relay:spawn Name cli <<<\ntask\n>>>
547
+ const fencedSpawnPattern = new RegExp(
548
+ `${this.relayPrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}spawn\\s+(\\w+)\\s+(\\w+)\\s*<<<[\\s]*([\\s\\S]*?)>>>`
549
+ );
550
+ const fencedSpawnMatch = content.match(fencedSpawnPattern);
551
+ if (fencedSpawnMatch) {
552
+ const [, name, cli, task] = fencedSpawnMatch;
553
+ const cmdHash = `spawn:${name}:${cli}:${task.trim()}`;
554
+ if (!this.processedSpawnCommands.has(cmdHash)) {
555
+ this.processedSpawnCommands.add(cmdHash);
556
+ this.executeSpawn(name, cli, task.trim());
557
+ }
558
+ }
559
+
560
+ // Release: ->relay:release Name
561
+ const releasePattern = new RegExp(
562
+ `${this.relayPrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}release\\s+(\\w+)`
563
+ );
564
+ const releaseMatch = content.match(releasePattern);
565
+ if (releaseMatch) {
566
+ const name = releaseMatch[1];
567
+ const cmdHash = `release:${name}`;
568
+ if (!this.processedReleaseCommands.has(cmdHash)) {
569
+ this.processedReleaseCommands.add(cmdHash);
570
+ this.executeRelease(name);
571
+ }
572
+ }
573
+ }
574
+
575
+ /**
576
+ * Execute a spawn command
577
+ */
578
+ protected async executeSpawn(name: string, cli: string, task: string): Promise<void> {
579
+ // TODO: Re-enable daemon socket spawn when client.spawn() is implemented
580
+ // See: docs/SDK-MIGRATION-PLAN.md for planned implementation
581
+ // For now, go directly to dashboard API or callback
582
+
583
+ // Try dashboard API
584
+ if (this.config.dashboardPort) {
585
+ try {
586
+ const response = await fetch(
587
+ `http://localhost:${this.config.dashboardPort}/api/spawn`,
588
+ {
589
+ method: 'POST',
590
+ headers: { 'Content-Type': 'application/json' },
591
+ body: JSON.stringify({ name, cli, task }),
592
+ }
593
+ );
594
+ if (response.ok) return;
595
+ } catch {
596
+ // Fall through to callback
597
+ }
598
+ }
599
+
600
+ // Use callback as final fallback
601
+ if (this.config.onSpawn) {
602
+ await this.config.onSpawn(name, cli, task);
603
+ }
604
+ }
605
+
606
+ /**
607
+ * Execute a release command
608
+ */
609
+ protected async executeRelease(name: string): Promise<void> {
610
+ // TODO: Re-enable daemon socket release when client.release() is implemented
611
+ // See: docs/SDK-MIGRATION-PLAN.md for planned implementation
612
+ // For now, go directly to dashboard API or callback
613
+
614
+ // Try dashboard API as fallback (backwards compatibility)
615
+ if (this.config.dashboardPort) {
616
+ try {
617
+ const response = await fetch(
618
+ `http://localhost:${this.config.dashboardPort}/api/agents/${name}`,
619
+ { method: 'DELETE' }
620
+ );
621
+ if (response.ok) return;
622
+ } catch {
623
+ // Fall through to callback
624
+ }
625
+ }
626
+
627
+ // Use callback as final fallback
628
+ if (this.config.onRelease) {
629
+ await this.config.onRelease(name);
630
+ }
631
+ }
632
+
633
+ // =========================================================================
634
+ // Continuity handling
635
+ // =========================================================================
636
+
637
+ /**
638
+ * Initialize agent ID for continuity/resume
639
+ */
640
+ protected async initializeAgentId(): Promise<void> {
641
+ if (!this.continuity) return;
642
+
643
+ try {
644
+ let ledger;
645
+
646
+ // If resuming, try to find previous ledger
647
+ if (this.config.resumeAgentId) {
648
+ ledger = await this.continuity.findLedgerByAgentId(this.config.resumeAgentId);
649
+ }
650
+
651
+ // Otherwise get or create
652
+ if (!ledger) {
653
+ ledger = await this.continuity.getOrCreateLedger(
654
+ this.config.name,
655
+ this.cliType
656
+ );
657
+ }
658
+
659
+ this.agentId = ledger.agentId;
660
+ } catch (err: any) {
661
+ console.error(`[${this.config.name}] Failed to initialize agent ID: ${err.message}`);
662
+ }
663
+ }
664
+
665
+ /**
666
+ * Parse continuity commands from output
667
+ */
668
+ protected async parseContinuityCommands(content: string): Promise<void> {
669
+ if (!this.continuity) return;
670
+ if (!hasContinuityCommand(content)) return;
671
+
672
+ const command = parseContinuityCommand(content);
673
+ if (!command) return;
674
+
675
+ // Deduplication
676
+ const cmdHash = `${command.type}:${command.content || command.query || command.item || 'no-content'}`;
677
+ if (command.content && this.processedContinuityCommands.has(cmdHash)) return;
678
+ this.processedContinuityCommands.add(cmdHash);
679
+
680
+ // Limit dedup set size
681
+ if (this.processedContinuityCommands.size > 100) {
682
+ const oldest = this.processedContinuityCommands.values().next().value;
683
+ if (oldest) this.processedContinuityCommands.delete(oldest);
684
+ }
685
+
686
+ try {
687
+ const response = await this.continuity.handleCommand(this.config.name, command);
688
+ if (response) {
689
+ // Queue response for injection
690
+ this.messageQueue.push({
691
+ from: 'system',
692
+ body: response,
693
+ messageId: `continuity-${Date.now()}`,
694
+ thread: 'continuity-response',
695
+ });
696
+ }
697
+ } catch (err: any) {
698
+ console.error(`[${this.config.name}] Continuity command error: ${err.message}`);
699
+ }
700
+ }
701
+
702
+ /**
703
+ * Save a parsed summary to the continuity ledger
704
+ */
705
+ protected async saveSummaryToLedger(summary: ParsedSummary): Promise<void> {
706
+ if (!this.continuity) return;
707
+
708
+ const updates: Record<string, unknown> = {};
709
+
710
+ if (summary.currentTask) {
711
+ updates.currentTask = summary.currentTask;
712
+ }
713
+
714
+ if (summary.completedTasks && summary.completedTasks.length > 0) {
715
+ updates.completed = summary.completedTasks;
716
+ }
717
+
718
+ if (summary.context) {
719
+ updates.inProgress = [summary.context];
720
+ }
721
+
722
+ if (summary.files && summary.files.length > 0) {
723
+ updates.fileContext = summary.files.map((f: string) => ({ path: f }));
724
+ }
725
+
726
+ if (Object.keys(updates).length > 0) {
727
+ await this.continuity.saveLedger(this.config.name, updates);
728
+ }
729
+ }
730
+
731
+ /**
732
+ * Reset session-specific state for wrapper reuse
733
+ */
734
+ resetSessionState(): void {
735
+ this.sessionEndProcessed = false;
736
+ this.lastSummaryRawContent = '';
737
+ this.sessionEndData = undefined;
738
+ }
739
+
740
+ // =========================================================================
741
+ // Utility methods
742
+ // =========================================================================
743
+
744
+ /**
745
+ * Join continuation lines for multi-line relay/continuity commands.
746
+ * TUIs like Claude Code insert real newlines in output, causing
747
+ * messages to span multiple lines. This joins indented
748
+ * continuation lines back to the command line.
749
+ */
750
+ protected joinContinuationLines(content: string): string {
751
+ const lines = content.split('\n');
752
+ const result: string[] = [];
753
+
754
+ // Pattern to detect relay OR continuity command line (with optional bullet prefix)
755
+ const escapedPrefix = this.relayPrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
756
+ const commandPattern = new RegExp(
757
+ `^(?:\\s*(?:[>$%#→➜›»●•◦‣⁃\\-*⏺◆◇○□■]\\s*)*)?(?:${escapedPrefix}|->continuity:)`
758
+ );
759
+ // Pattern to detect a continuation line (starts with spaces, no bullet/command)
760
+ const continuationPattern = /^[ \t]+[^>$%#→➜›»●•◦‣⁃\-*⏺◆◇○□■\s]/;
761
+ // Pattern to detect a new block/bullet (stops continuation)
762
+ const newBlockPattern = /^(?:\s*)?[>$%#→➜›»●•◦‣⁃\-*⏺◆◇○□■]/;
763
+
764
+ let i = 0;
765
+ while (i < lines.length) {
766
+ const line = lines[i];
767
+
768
+ // Check if this is a command line
769
+ if (commandPattern.test(line)) {
770
+ let joined = line;
771
+ let j = i + 1;
772
+
773
+ // Look ahead for continuation lines
774
+ while (j < lines.length) {
775
+ const nextLine = lines[j];
776
+
777
+ // Empty line stops continuation
778
+ if (nextLine.trim() === '') break;
779
+
780
+ // New bullet/block stops continuation
781
+ if (newBlockPattern.test(nextLine)) break;
782
+
783
+ // Check if it looks like a continuation (indented text)
784
+ if (continuationPattern.test(nextLine)) {
785
+ // Join with newline to preserve multi-line message content
786
+ joined += '\n' + nextLine.trim();
787
+ j++;
788
+ } else {
789
+ break;
790
+ }
791
+ }
792
+
793
+ result.push(joined);
794
+ i = j; // Skip the lines we joined
795
+ } else {
796
+ result.push(line);
797
+ i++;
798
+ }
799
+ }
800
+
801
+ return result.join('\n');
802
+ }
803
+
804
+ /**
805
+ * Clean up resources
806
+ */
807
+ protected destroyClient(): void {
808
+ this.client.destroy();
809
+ }
810
+ }