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
@@ -0,0 +1,368 @@
1
+ # Custom Relay Commands: Design Spec
2
+
3
+ > **Status:** Proposal
4
+ > **Decision Required:** Which implementation approach?
5
+ > **Created:** 2026-01-04
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ Allow users to define custom command patterns that trigger code execution when agents output them.
12
+
13
+ ```
14
+ ->deploy:staging → executes user-defined deploy script
15
+ ->jira:create "Bug" → runs Jira integration, returns ticket ID
16
+ ->test:e2e → runs tests, injects results back to agent
17
+ ```
18
+
19
+ ---
20
+
21
+ ## Use Cases
22
+
23
+ ### DevOps & CI/CD
24
+ ```
25
+ ->deploy:staging # Deploy to environment
26
+ ->rollback:prod # Rollback last deployment
27
+ ->build:docker # Build and push container
28
+ ```
29
+
30
+ ### Integrations
31
+ ```
32
+ ->jira:create "Login broken" # Create ticket, return ID
33
+ ->slack:#team "Build done" # Post to Slack channel
34
+ ->github:pr "Feature X" # Create pull request
35
+ ```
36
+
37
+ ### Testing & Quality
38
+ ```
39
+ ->test:unit # Run unit tests
40
+ ->test:e2e --headed # Run E2E with browser
41
+ ->lint:fix # Run linter with autofix
42
+ ```
43
+
44
+ ### Context & Knowledge
45
+ ```
46
+ ->load:api-docs # Inject API documentation
47
+ ->search:codebase "auth" # Search and inject results
48
+ ->context:clear # Clear injected context
49
+ ```
50
+
51
+ ### Agent Coordination
52
+ ```
53
+ ->assign:Alice "Review PR" # Assign task + notify
54
+ ->escalate:Lead "Blocked" # Escalate with context
55
+ ->handoff:Bob # Transfer work to another agent
56
+ ```
57
+
58
+ ---
59
+
60
+ ## Design Options
61
+
62
+ ### Option A: Script Directory (Convention-Based)
63
+
64
+ **Pattern:** `->cmd:{name} {args}` → `.relay/commands/{name}.sh {args}`
65
+
66
+ ```
67
+ .relay/
68
+ commands/
69
+ deploy.sh # ->cmd:deploy staging
70
+ test.sh # ->cmd:test unit
71
+ jira.sh # ->cmd:jira create "Bug title"
72
+ ```
73
+
74
+ **Example script:**
75
+ ```bash
76
+ #!/bin/bash
77
+ # .relay/commands/deploy.sh
78
+ ENV="$1"
79
+ ./scripts/deploy.sh "$ENV" 2>&1
80
+ echo "[DEPLOY] Completed deployment to $ENV"
81
+ ```
82
+
83
+ **Pros:**
84
+ - Zero configuration
85
+ - Works with any language (bash, python, node)
86
+ - Easy to understand
87
+
88
+ **Cons:**
89
+ - Single prefix (`->cmd:`)
90
+ - Limited pattern matching
91
+ - No validation or typing
92
+
93
+ ---
94
+
95
+ ### Option B: YAML Configuration
96
+
97
+ **Config file:** `.relay/commands.yaml`
98
+
99
+ ```yaml
100
+ commands:
101
+ # Simple script mapping
102
+ deploy:
103
+ pattern: "->deploy:{env}"
104
+ run: "./scripts/deploy.sh $env"
105
+
106
+ # With validation
107
+ test:
108
+ pattern: "->test:{suite}"
109
+ run: "npm test -- --suite=$suite"
110
+ validate:
111
+ suite: ["unit", "e2e", "integration"]
112
+ timeout: 300000
113
+
114
+ # Integration with response handling
115
+ jira:
116
+ pattern: "->jira:create {title}"
117
+ run: "node .relay/integrations/jira.js create '$title'"
118
+ response: inject # inject | silent | broadcast
119
+
120
+ # Restricted command
121
+ deploy-prod:
122
+ pattern: "->deploy:prod"
123
+ run: "./scripts/deploy.sh prod"
124
+ security:
125
+ requireApproval: true
126
+ allowedAgents: ["Lead"]
127
+ ```
128
+
129
+ **Pros:**
130
+ - Custom prefixes per command
131
+ - Validation rules
132
+ - Security controls
133
+ - Configurable response handling
134
+
135
+ **Cons:**
136
+ - Requires configuration
137
+ - YAML can get complex
138
+
139
+ ---
140
+
141
+ ### Option C: TypeScript Handlers (Programmatic)
142
+
143
+ **Handler file:** `.relay/commands/deploy.ts`
144
+
145
+ ```typescript
146
+ import { defineCommand, type CommandContext } from 'agent-relay';
147
+
148
+ export default defineCommand({
149
+ // Pattern with named captures
150
+ pattern: /^->deploy:(?<env>staging|prod)$/,
151
+
152
+ // Optional validation
153
+ validate({ env }) {
154
+ if (env === 'prod' && !process.env.PROD_DEPLOY_ENABLED) {
155
+ return 'Production deploys are disabled';
156
+ }
157
+ },
158
+
159
+ // Execution
160
+ async execute(ctx: CommandContext) {
161
+ const { env } = ctx.match.groups;
162
+ const { agent, inject, broadcast } = ctx;
163
+
164
+ // Run deployment
165
+ const result = await ctx.exec(`./deploy.sh ${env}`);
166
+
167
+ // Inject response to calling agent
168
+ await inject(`[DEPLOY] ${env}: ${result.stdout}`);
169
+
170
+ // Optionally notify others
171
+ if (env === 'prod') {
172
+ await broadcast(`Production deployed by ${agent.name}`);
173
+ }
174
+
175
+ // Return structured data (stored in message metadata)
176
+ return {
177
+ env,
178
+ success: result.exitCode === 0,
179
+ duration: result.duration,
180
+ };
181
+ },
182
+ });
183
+ ```
184
+
185
+ **Auto-discovery:** All `.ts` files in `.relay/commands/` are loaded.
186
+
187
+ **Pros:**
188
+ - Full programmatic control
189
+ - Type safety
190
+ - Can interact with relay (inject, broadcast, spawn)
191
+ - Async/await support
192
+ - Structured return data
193
+
194
+ **Cons:**
195
+ - Requires TypeScript knowledge
196
+ - More complex setup
197
+ - Needs compilation step
198
+
199
+ ---
200
+
201
+ ### Option D: Hybrid (Recommended)
202
+
203
+ Combine A + B: Convention with optional configuration.
204
+
205
+ **Default behavior (zero config):**
206
+ ```
207
+ ->cmd:deploy staging → .relay/commands/deploy.sh staging
208
+ ```
209
+
210
+ **With config (opt-in):**
211
+ ```yaml
212
+ # .relay/commands.yaml
213
+ commands:
214
+ deploy:
215
+ pattern: "->deploy:{env}" # Custom prefix
216
+ run: ".relay/commands/deploy.sh $env"
217
+
218
+ # Or inline script
219
+ notify:
220
+ pattern: "->notify:{channel} {message}"
221
+ run: |
222
+ curl -X POST "$SLACK_WEBHOOK" \
223
+ -d "{\"channel\": \"$channel\", \"text\": \"$message\"}"
224
+ ```
225
+
226
+ **Progression:**
227
+ 1. Start with `->cmd:name` convention (no config)
228
+ 2. Add `.relay/commands.yaml` when you need custom patterns
229
+ 3. Use `.ts` handlers for complex logic (future)
230
+
231
+ ---
232
+
233
+ ## Response Handling
234
+
235
+ | Mode | Behavior | Use Case |
236
+ |------|----------|----------|
237
+ | `inject` | Output sent to calling agent | Default - agent sees result |
238
+ | `silent` | No response | Fire-and-forget (notifications) |
239
+ | `broadcast` | Output to all agents | Team-wide announcements |
240
+ | `reply:{agent}` | Output to specific agent | Targeted responses |
241
+
242
+ **Default:** `inject` (most useful for agent workflows)
243
+
244
+ ---
245
+
246
+ ## Security Model
247
+
248
+ ### Execution Context
249
+ - Commands run in project directory
250
+ - Inherit environment from daemon
251
+ - Can access `RELAY_*` env vars
252
+
253
+ ### Access Control (Optional)
254
+ ```yaml
255
+ commands:
256
+ deploy-prod:
257
+ pattern: "->deploy:prod"
258
+ run: "./deploy.sh prod"
259
+ security:
260
+ # Require human approval in dashboard
261
+ requireApproval: true
262
+
263
+ # Restrict to specific agents
264
+ allowedAgents: ["Lead", "DevOps"]
265
+
266
+ # Rate limiting
267
+ rateLimit: "1/hour"
268
+
269
+ # Audit logging
270
+ audit: true
271
+ ```
272
+
273
+ ### Sandboxing (Future)
274
+ - Optional Docker/VM isolation
275
+ - Resource limits (CPU, memory, time)
276
+ - Network restrictions
277
+
278
+ ---
279
+
280
+ ## Implementation Plan
281
+
282
+ ### Phase 1: Script Directory (MVP)
283
+ - [ ] Detect `->cmd:{name}` pattern in parser
284
+ - [ ] Execute `.relay/commands/{name}.sh` with args
285
+ - [ ] Inject stdout back to agent
286
+ - [ ] Handle errors gracefully
287
+
288
+ ### Phase 2: YAML Configuration
289
+ - [ ] Parse `.relay/commands.yaml`
290
+ - [ ] Support custom patterns
291
+ - [ ] Add validation rules
292
+ - [ ] Response mode configuration
293
+
294
+ ### Phase 3: Dashboard Integration
295
+ - [ ] Show command executions in dashboard
296
+ - [ ] Approval workflow UI
297
+ - [ ] Audit log viewer
298
+
299
+ ### Phase 4: TypeScript Handlers (Future)
300
+ - [ ] Hot-reload `.ts` command files
301
+ - [ ] Provide `CommandContext` API
302
+ - [ ] Type definitions package
303
+
304
+ ---
305
+
306
+ ## Decision Required
307
+
308
+ **Which approach should we implement first?**
309
+
310
+ | Option | Complexity | Flexibility | Time to MVP |
311
+ |--------|------------|-------------|-------------|
312
+ | A. Script Directory | Low | Low | 1-2 days |
313
+ | B. YAML Config | Medium | High | 3-5 days |
314
+ | C. TypeScript | High | Very High | 1-2 weeks |
315
+ | D. Hybrid (A→B) | Low→Medium | Progressive | 2 days + iterate |
316
+
317
+ **Recommendation:** Option D (Hybrid)
318
+ - Ship script directory first (works immediately)
319
+ - Add YAML config based on user feedback
320
+ - TypeScript handlers as future enhancement
321
+
322
+ ---
323
+
324
+ ## Open Questions
325
+
326
+ 1. **Prefix:** Single `->cmd:` or allow any `->prefix:`?
327
+ 2. **Discovery:** Auto-discover scripts or require registration?
328
+ 3. **Async:** How to handle long-running commands (>30s)?
329
+ 4. **Errors:** Inject error output or handle differently?
330
+ 5. **Chaining:** Can command output trigger another command?
331
+
332
+ ---
333
+
334
+ ## Examples
335
+
336
+ ### Minimal Setup (Phase 1)
337
+ ```bash
338
+ # Create command
339
+ mkdir -p .relay/commands
340
+ cat > .relay/commands/deploy.sh << 'EOF'
341
+ #!/bin/bash
342
+ echo "Deploying to $1..."
343
+ ./scripts/deploy.sh "$1"
344
+ echo "Done!"
345
+ EOF
346
+ chmod +x .relay/commands/deploy.sh
347
+
348
+ # Agent uses it
349
+ ->cmd:deploy staging
350
+ ```
351
+
352
+ ### With Configuration (Phase 2)
353
+ ```yaml
354
+ # .relay/commands.yaml
355
+ commands:
356
+ deploy:
357
+ pattern: "->deploy:{env}"
358
+ run: ".relay/commands/deploy.sh $env"
359
+ validate:
360
+ env: ["staging", "prod"]
361
+ security:
362
+ requireApproval:
363
+ when: "$env == 'prod'"
364
+ ```
365
+
366
+ ---
367
+
368
+ *Spec created 2026-01-04*
@@ -0,0 +1,230 @@
1
+ # Agent Relay Skills via PRPM
2
+
3
+ Leverage PRPM (Prompt Package Manager) to distribute agent-relay skills that users can opt into.
4
+
5
+ ## Overview
6
+
7
+ PRPM already provides:
8
+ - Registry at `registry.prpm.dev`
9
+ - `prpm install @org/package` CLI
10
+ - Lockfile tracking (`prpm.lock`)
11
+ - Format conversion (claude, cursor, agents.md)
12
+ - Subtypes: skill, agent, rule, snippet
13
+ - Lazy loading (`eager: false`)
14
+
15
+ **We should publish `@agent-relay/*` packages to PRPM instead of building custom infrastructure.**
16
+
17
+ ## Current State
18
+
19
+ Already using prpm in this repo (see `prpm.lock`):
20
+ - `@agent-relay/agent-relay-snippet` - Relay messaging syntax
21
+ - `@agent-relay/agent-relay-protocol` - Full protocol docs
22
+ - Various skills from `@prpm/*`, `@anthropic/*`, `@my-senior-dev/*`
23
+
24
+ ## Problem: Global vs Project Skills
25
+
26
+ PRPM installs to project directories (`.claude/skills/`). We need:
27
+ - Skills NOT in project source control
28
+ - Skills available across all projects
29
+ - Per-user opt-in, not per-project
30
+
31
+ ### Potential Solutions
32
+
33
+ **A. PRPM Global Flag (feature request)**
34
+ ```bash
35
+ prpm install --global @agent-relay/browser-testing
36
+ # Installs to ~/.prpm/skills/ or ~/.config/prpm/skills/
37
+ ```
38
+
39
+ **B. User-level prpm.lock**
40
+ ```
41
+ ~/.agent-relay/
42
+ ├── prpm.lock # User's global skills
43
+ └── .claude/skills/ # Installed skill content
44
+ ```
45
+ Agent reads both project and user prpm.lock.
46
+
47
+ **C. Workspace Bundle**
48
+ Cloud workspaces come with @agent-relay skills pre-installed.
49
+ Users don't manage - just available in cloud.
50
+
51
+ ## Proposed Skills to Publish
52
+
53
+ ### @agent-relay/workspace-capabilities
54
+ Documentation for browser testing + container spawning.
55
+
56
+ ```json
57
+ {
58
+ "name": "@agent-relay/workspace-capabilities",
59
+ "version": "1.0.0",
60
+ "description": "Browser testing (Playwright, VNC) and container spawning (Docker) for agent-relay workspaces",
61
+ "format": "claude",
62
+ "subtype": "skill",
63
+ "eager": false,
64
+ "tags": ["agent-relay", "browser-testing", "docker", "workspace"],
65
+ "files": [".claude/skills/workspace-capabilities/SKILL.md"]
66
+ }
67
+ ```
68
+
69
+ ### @agent-relay/browser-testing
70
+ Focused Playwright/screenshot skill.
71
+
72
+ ### @agent-relay/container-spawning
73
+ Focused Docker/container skill.
74
+
75
+ ### @agent-relay/linear-integration
76
+ Linear webhook/API patterns.
77
+
78
+ ### @agent-relay/slack-integration
79
+ Slack bot patterns.
80
+
81
+ ### @agent-relay/workspace-pack (collection)
82
+ Bundle of all workspace skills.
83
+
84
+ ```json
85
+ {
86
+ "collections": [{
87
+ "id": "workspace-pack",
88
+ "name": "Agent Relay Workspace Pack",
89
+ "description": "All workspace capability skills",
90
+ "packages": [
91
+ { "packageId": "@agent-relay/workspace-capabilities" },
92
+ { "packageId": "@agent-relay/browser-testing" },
93
+ { "packageId": "@agent-relay/container-spawning" }
94
+ ]
95
+ }]
96
+ }
97
+ ```
98
+
99
+ ## Tasks
100
+
101
+ ### prpm-global-research
102
+ - [ ] Check if prpm supports `--global` flag
103
+ - [ ] If not, evaluate: feature request vs workaround
104
+ - [ ] Document findings
105
+
106
+ Dependencies: none
107
+ Priority: high
108
+
109
+ ### user-skills-directory
110
+ - [ ] Define `~/.agent-relay/skills/` structure
111
+ - [ ] Implement reading from user directory in daemon
112
+ - [ ] Merge user + project skills in agent manifest
113
+
114
+ Dependencies: prpm-global-research
115
+ Priority: high
116
+
117
+ ### publish-workspace-capabilities
118
+ - [ ] Create skill content (SKILL.md)
119
+ - [ ] Create prpm.json manifest
120
+ - [ ] Test locally with `prpm install .`
121
+ - [ ] Publish to registry.prpm.dev
122
+
123
+ Dependencies: none (can do in parallel)
124
+ Priority: high
125
+
126
+ ### publish-browser-testing
127
+ - [ ] Extract browser-specific content from workspace-capabilities
128
+ - [ ] Create focused SKILL.md
129
+ - [ ] Publish to registry
130
+
131
+ Dependencies: publish-workspace-capabilities
132
+ Priority: medium
133
+
134
+ ### publish-container-spawning
135
+ - [ ] Extract container-specific content
136
+ - [ ] Create focused SKILL.md
137
+ - [ ] Publish to registry
138
+
139
+ Dependencies: publish-workspace-capabilities
140
+ Priority: medium
141
+
142
+ ### workspace-pack-collection
143
+ - [ ] Create collection prpm.json
144
+ - [ ] Bundle all workspace skills
145
+ - [ ] Publish collection
146
+
147
+ Dependencies: publish-browser-testing, publish-container-spawning
148
+ Priority: low
149
+
150
+ ### cloud-workspace-provisioning
151
+ - [ ] Pre-install @agent-relay skills in cloud workspace images
152
+ - [ ] Or: fetch on workspace creation
153
+ - [ ] Make configurable per-workspace
154
+
155
+ Dependencies: publish-workspace-capabilities
156
+ Priority: medium
157
+
158
+ ## Example Skill Content
159
+
160
+ ```markdown
161
+ ---
162
+ name: workspace-capabilities
163
+ description: Browser testing and container spawning for agent-relay workspaces
164
+ ---
165
+
166
+ # Workspace Capabilities
167
+
168
+ This workspace may have additional capabilities available.
169
+
170
+ ## Checking Availability
171
+
172
+ Before using these features, verify they're available:
173
+
174
+ \`\`\`typescript
175
+ // Check for browser testing
176
+ const hasBrowser = process.env.DISPLAY !== undefined;
177
+
178
+ // Check for container spawning
179
+ const hasDocker = existsSync('/var/run/docker.sock');
180
+ \`\`\`
181
+
182
+ ## Browser Testing
183
+
184
+ [Content about Playwright, screenshots, VNC...]
185
+
186
+ ## Container Spawning
187
+
188
+ [Content about Docker, presets, resource limits...]
189
+ ```
190
+
191
+ ## User Flow
192
+
193
+ ```bash
194
+ # Option A: Global install (if prpm supports it)
195
+ prpm install --global @agent-relay/workspace-pack
196
+
197
+ # Option B: User directory workaround
198
+ cd ~/.agent-relay
199
+ prpm install @agent-relay/workspace-pack
200
+
201
+ # Option C: Cloud workspace (automatic)
202
+ # Skills pre-installed, just use them
203
+ ```
204
+
205
+ ## Why PRPM Over Custom
206
+
207
+ | Custom System | PRPM |
208
+ |--------------|------|
209
+ | Build registry | ✅ Already exists |
210
+ | Build CLI | ✅ Already exists |
211
+ | Build lockfile | ✅ Already exists |
212
+ | Version management | ✅ Already exists |
213
+ | Format conversion | ✅ Already exists |
214
+
215
+ **PRPM gives us distribution for free. We just publish packages.**
216
+
217
+ ## Open Questions for PRPM
218
+
219
+ 1. **Global installs** - `prpm install --global`?
220
+ 2. **Multiple lockfile locations** - project + user?
221
+ 3. **Conditional activation** - `activationCondition` field?
222
+
223
+ May need to contribute these features or work around them.
224
+
225
+ ## References
226
+
227
+ - `prpm.lock` - Current installed packages
228
+ - `.claude/skills/prpm-json-best-practices-skill/` - How to create packages
229
+ - `docs/tasks/workspace-capabilities.tasks.md` - Runtime capability discovery
230
+ - Implementation: `src/daemon/services/browser-testing.ts`, `container-spawner.ts`