agent-relay 1.0.22 → 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 (613) hide show
  1. package/README.md +1 -1
  2. package/dist/bridge/shadow-cli.d.ts +17 -0
  3. package/dist/bridge/shadow-cli.d.ts.map +1 -0
  4. package/dist/bridge/shadow-cli.js +75 -0
  5. package/dist/bridge/shadow-cli.js.map +1 -0
  6. package/dist/bridge/shadow-config.d.ts +87 -0
  7. package/dist/bridge/shadow-config.d.ts.map +1 -0
  8. package/dist/bridge/shadow-config.js +134 -0
  9. package/dist/bridge/shadow-config.js.map +1 -0
  10. package/dist/bridge/spawner.d.ts +68 -1
  11. package/dist/bridge/spawner.d.ts.map +1 -1
  12. package/dist/bridge/spawner.js +360 -16
  13. package/dist/bridge/spawner.js.map +1 -1
  14. package/dist/bridge/types.d.ts +67 -0
  15. package/dist/bridge/types.d.ts.map +1 -1
  16. package/dist/cli/index.js +1196 -15
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cloud/api/auth.d.ts +20 -0
  19. package/dist/cloud/api/auth.d.ts.map +1 -0
  20. package/dist/cloud/api/auth.js +128 -0
  21. package/dist/cloud/api/auth.js.map +1 -0
  22. package/dist/cloud/api/billing.d.ts +17 -0
  23. package/dist/cloud/api/billing.d.ts.map +1 -0
  24. package/dist/cloud/api/billing.js +353 -0
  25. package/dist/cloud/api/billing.js.map +1 -0
  26. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  27. package/dist/cloud/api/cli-pty-runner.d.ts.map +1 -0
  28. package/dist/cloud/api/cli-pty-runner.js +119 -0
  29. package/dist/cloud/api/cli-pty-runner.js.map +1 -0
  30. package/dist/cloud/api/coordinators.d.ts +8 -0
  31. package/dist/cloud/api/coordinators.d.ts.map +1 -0
  32. package/dist/cloud/api/coordinators.js +347 -0
  33. package/dist/cloud/api/coordinators.js.map +1 -0
  34. package/dist/cloud/api/daemons.d.ts +12 -0
  35. package/dist/cloud/api/daemons.d.ts.map +1 -0
  36. package/dist/cloud/api/daemons.js +320 -0
  37. package/dist/cloud/api/daemons.js.map +1 -0
  38. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  39. package/dist/cloud/api/generic-webhooks.d.ts.map +1 -0
  40. package/dist/cloud/api/generic-webhooks.js +129 -0
  41. package/dist/cloud/api/generic-webhooks.js.map +1 -0
  42. package/dist/cloud/api/git.d.ts +8 -0
  43. package/dist/cloud/api/git.d.ts.map +1 -0
  44. package/dist/cloud/api/git.js +131 -0
  45. package/dist/cloud/api/git.js.map +1 -0
  46. package/dist/cloud/api/github-app.d.ts +11 -0
  47. package/dist/cloud/api/github-app.d.ts.map +1 -0
  48. package/dist/cloud/api/github-app.js +189 -0
  49. package/dist/cloud/api/github-app.js.map +1 -0
  50. package/dist/cloud/api/middleware/planLimits.d.ts +43 -0
  51. package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -0
  52. package/dist/cloud/api/middleware/planLimits.js +202 -0
  53. package/dist/cloud/api/middleware/planLimits.js.map +1 -0
  54. package/dist/cloud/api/monitoring.d.ts +11 -0
  55. package/dist/cloud/api/monitoring.d.ts.map +1 -0
  56. package/dist/cloud/api/monitoring.js +578 -0
  57. package/dist/cloud/api/monitoring.js.map +1 -0
  58. package/dist/cloud/api/nango-auth.d.ts +9 -0
  59. package/dist/cloud/api/nango-auth.d.ts.map +1 -0
  60. package/dist/cloud/api/nango-auth.js +377 -0
  61. package/dist/cloud/api/nango-auth.js.map +1 -0
  62. package/dist/cloud/api/onboarding.d.ts +15 -0
  63. package/dist/cloud/api/onboarding.d.ts.map +1 -0
  64. package/dist/cloud/api/onboarding.js +588 -0
  65. package/dist/cloud/api/onboarding.js.map +1 -0
  66. package/dist/cloud/api/policy.d.ts +8 -0
  67. package/dist/cloud/api/policy.d.ts.map +1 -0
  68. package/dist/cloud/api/policy.js +229 -0
  69. package/dist/cloud/api/policy.js.map +1 -0
  70. package/dist/cloud/api/providers.d.ts +7 -0
  71. package/dist/cloud/api/providers.d.ts.map +1 -0
  72. package/dist/cloud/api/providers.js +507 -0
  73. package/dist/cloud/api/providers.js.map +1 -0
  74. package/dist/cloud/api/repos.d.ts +7 -0
  75. package/dist/cloud/api/repos.d.ts.map +1 -0
  76. package/dist/cloud/api/repos.js +314 -0
  77. package/dist/cloud/api/repos.js.map +1 -0
  78. package/dist/cloud/api/teams.d.ts +7 -0
  79. package/dist/cloud/api/teams.d.ts.map +1 -0
  80. package/dist/cloud/api/teams.js +279 -0
  81. package/dist/cloud/api/teams.js.map +1 -0
  82. package/dist/cloud/api/test-helpers.d.ts +10 -0
  83. package/dist/cloud/api/test-helpers.d.ts.map +1 -0
  84. package/dist/cloud/api/test-helpers.js +575 -0
  85. package/dist/cloud/api/test-helpers.js.map +1 -0
  86. package/dist/cloud/api/usage.d.ts +7 -0
  87. package/dist/cloud/api/usage.d.ts.map +1 -0
  88. package/dist/cloud/api/usage.js +98 -0
  89. package/dist/cloud/api/usage.js.map +1 -0
  90. package/dist/cloud/api/webhooks.d.ts +7 -0
  91. package/dist/cloud/api/webhooks.d.ts.map +1 -0
  92. package/dist/cloud/api/webhooks.js +496 -0
  93. package/dist/cloud/api/webhooks.js.map +1 -0
  94. package/dist/cloud/api/workspaces.d.ts +7 -0
  95. package/dist/cloud/api/workspaces.d.ts.map +1 -0
  96. package/dist/cloud/api/workspaces.js +727 -0
  97. package/dist/cloud/api/workspaces.js.map +1 -0
  98. package/dist/cloud/billing/index.d.ts +9 -0
  99. package/dist/cloud/billing/index.d.ts.map +1 -0
  100. package/dist/cloud/billing/index.js +9 -0
  101. package/dist/cloud/billing/index.js.map +1 -0
  102. package/dist/cloud/billing/plans.d.ts +39 -0
  103. package/dist/cloud/billing/plans.d.ts.map +1 -0
  104. package/dist/cloud/billing/plans.js +245 -0
  105. package/dist/cloud/billing/plans.js.map +1 -0
  106. package/dist/cloud/billing/service.d.ts +80 -0
  107. package/dist/cloud/billing/service.d.ts.map +1 -0
  108. package/dist/cloud/billing/service.js +388 -0
  109. package/dist/cloud/billing/service.js.map +1 -0
  110. package/dist/cloud/billing/types.d.ts +141 -0
  111. package/dist/cloud/billing/types.d.ts.map +1 -0
  112. package/dist/cloud/billing/types.js +7 -0
  113. package/dist/cloud/billing/types.js.map +1 -0
  114. package/dist/cloud/config.d.ts +66 -0
  115. package/dist/cloud/config.d.ts.map +1 -0
  116. package/dist/cloud/config.js +92 -0
  117. package/dist/cloud/config.js.map +1 -0
  118. package/dist/cloud/db/drizzle.d.ts +215 -0
  119. package/dist/cloud/db/drizzle.d.ts.map +1 -0
  120. package/dist/cloud/db/drizzle.js +1083 -0
  121. package/dist/cloud/db/drizzle.js.map +1 -0
  122. package/dist/cloud/db/index.d.ts +35 -0
  123. package/dist/cloud/db/index.d.ts.map +1 -0
  124. package/dist/cloud/db/index.js +52 -0
  125. package/dist/cloud/db/index.js.map +1 -0
  126. package/dist/cloud/db/schema.d.ts +4519 -0
  127. package/dist/cloud/db/schema.d.ts.map +1 -0
  128. package/dist/cloud/db/schema.js +547 -0
  129. package/dist/cloud/db/schema.js.map +1 -0
  130. package/dist/cloud/index.d.ts +12 -0
  131. package/dist/cloud/index.d.ts.map +1 -0
  132. package/dist/cloud/index.js +39 -0
  133. package/dist/cloud/index.js.map +1 -0
  134. package/dist/cloud/provisioner/index.d.ts +75 -0
  135. package/dist/cloud/provisioner/index.d.ts.map +1 -0
  136. package/dist/cloud/provisioner/index.js +977 -0
  137. package/dist/cloud/provisioner/index.js.map +1 -0
  138. package/dist/cloud/server.d.ts +17 -0
  139. package/dist/cloud/server.d.ts.map +1 -0
  140. package/dist/cloud/server.js +534 -0
  141. package/dist/cloud/server.js.map +1 -0
  142. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  143. package/dist/cloud/services/auto-scaler.d.ts.map +1 -0
  144. package/dist/cloud/services/auto-scaler.js +439 -0
  145. package/dist/cloud/services/auto-scaler.js.map +1 -0
  146. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  147. package/dist/cloud/services/capacity-manager.d.ts.map +1 -0
  148. package/dist/cloud/services/capacity-manager.js +449 -0
  149. package/dist/cloud/services/capacity-manager.js.map +1 -0
  150. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  151. package/dist/cloud/services/ci-agent-spawner.d.ts.map +1 -0
  152. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  153. package/dist/cloud/services/ci-agent-spawner.js.map +1 -0
  154. package/dist/cloud/services/coordinator.d.ts +62 -0
  155. package/dist/cloud/services/coordinator.d.ts.map +1 -0
  156. package/dist/cloud/services/coordinator.js +389 -0
  157. package/dist/cloud/services/coordinator.js.map +1 -0
  158. package/dist/cloud/services/index.d.ts +12 -0
  159. package/dist/cloud/services/index.d.ts.map +1 -0
  160. package/dist/cloud/services/index.js +15 -0
  161. package/dist/cloud/services/index.js.map +1 -0
  162. package/dist/cloud/services/mention-handler.d.ts +65 -0
  163. package/dist/cloud/services/mention-handler.d.ts.map +1 -0
  164. package/dist/cloud/services/mention-handler.js +405 -0
  165. package/dist/cloud/services/mention-handler.js.map +1 -0
  166. package/dist/cloud/services/nango.d.ts +126 -0
  167. package/dist/cloud/services/nango.d.ts.map +1 -0
  168. package/dist/cloud/services/nango.js +191 -0
  169. package/dist/cloud/services/nango.js.map +1 -0
  170. package/dist/cloud/services/persistence.d.ts +131 -0
  171. package/dist/cloud/services/persistence.d.ts.map +1 -0
  172. package/dist/cloud/services/persistence.js +200 -0
  173. package/dist/cloud/services/persistence.js.map +1 -0
  174. package/dist/cloud/services/planLimits.d.ts +125 -0
  175. package/dist/cloud/services/planLimits.d.ts.map +1 -0
  176. package/dist/cloud/services/planLimits.js +282 -0
  177. package/dist/cloud/services/planLimits.js.map +1 -0
  178. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  179. package/dist/cloud/services/scaling-orchestrator.d.ts.map +1 -0
  180. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  181. package/dist/cloud/services/scaling-orchestrator.js.map +1 -0
  182. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  183. package/dist/cloud/services/scaling-policy.d.ts.map +1 -0
  184. package/dist/cloud/services/scaling-policy.js +415 -0
  185. package/dist/cloud/services/scaling-policy.js.map +1 -0
  186. package/dist/cloud/vault/index.d.ts +76 -0
  187. package/dist/cloud/vault/index.d.ts.map +1 -0
  188. package/dist/cloud/vault/index.js +219 -0
  189. package/dist/cloud/vault/index.js.map +1 -0
  190. package/dist/cloud/webhooks/index.d.ts +24 -0
  191. package/dist/cloud/webhooks/index.d.ts.map +1 -0
  192. package/dist/cloud/webhooks/index.js +29 -0
  193. package/dist/cloud/webhooks/index.js.map +1 -0
  194. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  195. package/dist/cloud/webhooks/parsers/github.d.ts.map +1 -0
  196. package/dist/cloud/webhooks/parsers/github.js +234 -0
  197. package/dist/cloud/webhooks/parsers/github.js.map +1 -0
  198. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  199. package/dist/cloud/webhooks/parsers/index.d.ts.map +1 -0
  200. package/dist/cloud/webhooks/parsers/index.js +30 -0
  201. package/dist/cloud/webhooks/parsers/index.js.map +1 -0
  202. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  203. package/dist/cloud/webhooks/parsers/linear.d.ts.map +1 -0
  204. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  205. package/dist/cloud/webhooks/parsers/linear.js.map +1 -0
  206. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  207. package/dist/cloud/webhooks/parsers/slack.d.ts.map +1 -0
  208. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  209. package/dist/cloud/webhooks/parsers/slack.js.map +1 -0
  210. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  211. package/dist/cloud/webhooks/responders/github.d.ts.map +1 -0
  212. package/dist/cloud/webhooks/responders/github.js +73 -0
  213. package/dist/cloud/webhooks/responders/github.js.map +1 -0
  214. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  215. package/dist/cloud/webhooks/responders/index.d.ts.map +1 -0
  216. package/dist/cloud/webhooks/responders/index.js +30 -0
  217. package/dist/cloud/webhooks/responders/index.js.map +1 -0
  218. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  219. package/dist/cloud/webhooks/responders/linear.d.ts.map +1 -0
  220. package/dist/cloud/webhooks/responders/linear.js +149 -0
  221. package/dist/cloud/webhooks/responders/linear.js.map +1 -0
  222. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  223. package/dist/cloud/webhooks/responders/slack.d.ts.map +1 -0
  224. package/dist/cloud/webhooks/responders/slack.js +178 -0
  225. package/dist/cloud/webhooks/responders/slack.js.map +1 -0
  226. package/dist/cloud/webhooks/router.d.ts +25 -0
  227. package/dist/cloud/webhooks/router.d.ts.map +1 -0
  228. package/dist/cloud/webhooks/router.js +504 -0
  229. package/dist/cloud/webhooks/router.js.map +1 -0
  230. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  231. package/dist/cloud/webhooks/rules-engine.d.ts.map +1 -0
  232. package/dist/cloud/webhooks/rules-engine.js +287 -0
  233. package/dist/cloud/webhooks/rules-engine.js.map +1 -0
  234. package/dist/cloud/webhooks/types.d.ts +186 -0
  235. package/dist/cloud/webhooks/types.d.ts.map +1 -0
  236. package/dist/cloud/webhooks/types.js +8 -0
  237. package/dist/cloud/webhooks/types.js.map +1 -0
  238. package/dist/continuity/formatter.d.ts +51 -0
  239. package/dist/continuity/formatter.d.ts.map +1 -0
  240. package/dist/continuity/formatter.js +313 -0
  241. package/dist/continuity/formatter.js.map +1 -0
  242. package/dist/continuity/handoff-store.d.ts +67 -0
  243. package/dist/continuity/handoff-store.d.ts.map +1 -0
  244. package/dist/continuity/handoff-store.js +472 -0
  245. package/dist/continuity/handoff-store.js.map +1 -0
  246. package/dist/continuity/index.d.ts +45 -0
  247. package/dist/continuity/index.d.ts.map +1 -0
  248. package/dist/continuity/index.js +48 -0
  249. package/dist/continuity/index.js.map +1 -0
  250. package/dist/continuity/ledger-store.d.ts +110 -0
  251. package/dist/continuity/ledger-store.d.ts.map +1 -0
  252. package/dist/continuity/ledger-store.js +500 -0
  253. package/dist/continuity/ledger-store.js.map +1 -0
  254. package/dist/continuity/manager.d.ts +178 -0
  255. package/dist/continuity/manager.d.ts.map +1 -0
  256. package/dist/continuity/manager.js +562 -0
  257. package/dist/continuity/manager.js.map +1 -0
  258. package/dist/continuity/parser.d.ts +76 -0
  259. package/dist/continuity/parser.d.ts.map +1 -0
  260. package/dist/continuity/parser.js +579 -0
  261. package/dist/continuity/parser.js.map +1 -0
  262. package/dist/continuity/types.d.ts +180 -0
  263. package/dist/continuity/types.d.ts.map +1 -0
  264. package/dist/continuity/types.js +9 -0
  265. package/dist/continuity/types.js.map +1 -0
  266. package/dist/daemon/agent-manager.d.ts +114 -0
  267. package/dist/daemon/agent-manager.d.ts.map +1 -0
  268. package/dist/daemon/agent-manager.js +513 -0
  269. package/dist/daemon/agent-manager.js.map +1 -0
  270. package/dist/daemon/agent-registry.d.ts +34 -0
  271. package/dist/daemon/agent-registry.d.ts.map +1 -1
  272. package/dist/daemon/agent-registry.js +45 -2
  273. package/dist/daemon/agent-registry.js.map +1 -1
  274. package/dist/daemon/api.d.ts +81 -0
  275. package/dist/daemon/api.d.ts.map +1 -0
  276. package/dist/daemon/api.js +554 -0
  277. package/dist/daemon/api.js.map +1 -0
  278. package/dist/daemon/cli-auth.d.ts +67 -0
  279. package/dist/daemon/cli-auth.d.ts.map +1 -0
  280. package/dist/daemon/cli-auth.js +537 -0
  281. package/dist/daemon/cli-auth.js.map +1 -0
  282. package/dist/daemon/cloud-sync.d.ts +101 -0
  283. package/dist/daemon/cloud-sync.d.ts.map +1 -0
  284. package/dist/daemon/cloud-sync.js +263 -0
  285. package/dist/daemon/cloud-sync.js.map +1 -0
  286. package/dist/daemon/index.d.ts +4 -0
  287. package/dist/daemon/index.d.ts.map +1 -1
  288. package/dist/daemon/index.js +6 -0
  289. package/dist/daemon/index.js.map +1 -1
  290. package/dist/daemon/orchestrator.d.ts +155 -0
  291. package/dist/daemon/orchestrator.d.ts.map +1 -0
  292. package/dist/daemon/orchestrator.js +766 -0
  293. package/dist/daemon/orchestrator.js.map +1 -0
  294. package/dist/daemon/router.d.ts +29 -0
  295. package/dist/daemon/router.d.ts.map +1 -1
  296. package/dist/daemon/router.js +143 -21
  297. package/dist/daemon/router.js.map +1 -1
  298. package/dist/daemon/server.d.ts +42 -0
  299. package/dist/daemon/server.d.ts.map +1 -1
  300. package/dist/daemon/server.js +199 -16
  301. package/dist/daemon/server.js.map +1 -1
  302. package/dist/daemon/services/browser-testing.d.ts +88 -0
  303. package/dist/daemon/services/browser-testing.d.ts.map +1 -0
  304. package/dist/daemon/services/browser-testing.js +244 -0
  305. package/dist/daemon/services/browser-testing.js.map +1 -0
  306. package/dist/daemon/services/container-spawner.d.ts +135 -0
  307. package/dist/daemon/services/container-spawner.d.ts.map +1 -0
  308. package/dist/daemon/services/container-spawner.js +313 -0
  309. package/dist/daemon/services/container-spawner.js.map +1 -0
  310. package/dist/daemon/types.d.ts +131 -0
  311. package/dist/daemon/types.d.ts.map +1 -0
  312. package/dist/daemon/types.js +6 -0
  313. package/dist/daemon/types.js.map +1 -0
  314. package/dist/daemon/workspace-manager.d.ts +75 -0
  315. package/dist/daemon/workspace-manager.d.ts.map +1 -0
  316. package/dist/daemon/workspace-manager.js +289 -0
  317. package/dist/daemon/workspace-manager.js.map +1 -0
  318. package/dist/dashboard/out/404.html +1 -1
  319. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  320. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  321. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +1 -0
  322. package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +9 -0
  323. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +1 -0
  324. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +1 -0
  325. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +1 -0
  326. package/dist/dashboard/out/_next/static/chunks/app/history/page-56a8b4616a90dc43.js +1 -0
  327. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +1 -0
  328. package/dist/dashboard/out/_next/static/chunks/app/login/page-3eac37ea6f5dd153.js +1 -0
  329. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +1 -0
  330. package/dist/dashboard/out/_next/static/chunks/app/page-daf87e86f783f980.js +1 -0
  331. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-4d72d5a5d8a9b618.js +1 -0
  332. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +1 -0
  333. package/dist/dashboard/out/_next/static/chunks/app/signup/page-fee4ed1709070bcd.js +1 -0
  334. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  335. package/dist/dashboard/out/_next/static/chunks/{main-e0a1f53fe0617a63.js → main-97850e03d723ea8c.js} +1 -1
  336. package/dist/dashboard/out/_next/static/chunks/main-app-5d692157a8eb1fd9.js +1 -0
  337. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  338. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  339. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +1 -0
  340. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  341. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  342. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  343. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  344. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  345. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
  346. package/dist/dashboard/out/alt-logos/logo.svg +38 -0
  347. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  348. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  349. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  350. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  351. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  352. package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
  353. package/dist/dashboard/out/app.html +1 -0
  354. package/dist/dashboard/out/app.txt +7 -0
  355. package/dist/dashboard/out/connect-repos.html +1 -0
  356. package/dist/dashboard/out/connect-repos.txt +7 -0
  357. package/dist/dashboard/out/history.html +1 -0
  358. package/dist/dashboard/out/history.txt +7 -0
  359. package/dist/dashboard/out/index.html +1 -1
  360. package/dist/dashboard/out/index.txt +2 -2
  361. package/dist/dashboard/out/login.html +6 -0
  362. package/dist/dashboard/out/login.txt +7 -0
  363. package/dist/dashboard/out/metrics.html +1 -515
  364. package/dist/dashboard/out/metrics.txt +2 -2
  365. package/dist/dashboard/out/pricing.html +13 -0
  366. package/dist/dashboard/out/pricing.txt +7 -0
  367. package/dist/dashboard/out/providers.html +1 -0
  368. package/dist/dashboard/out/providers.txt +7 -0
  369. package/dist/dashboard/out/signup.html +6 -0
  370. package/dist/dashboard/out/signup.txt +7 -0
  371. package/dist/dashboard-server/metrics.d.ts.map +1 -1
  372. package/dist/dashboard-server/metrics.js +3 -2
  373. package/dist/dashboard-server/metrics.js.map +1 -1
  374. package/dist/dashboard-server/server.d.ts.map +1 -1
  375. package/dist/dashboard-server/server.js +2653 -130
  376. package/dist/dashboard-server/server.js.map +1 -1
  377. package/dist/hooks/emitter.d.ts +40 -0
  378. package/dist/hooks/emitter.d.ts.map +1 -0
  379. package/dist/hooks/emitter.js +63 -0
  380. package/dist/hooks/emitter.js.map +1 -0
  381. package/dist/hooks/index.d.ts +3 -0
  382. package/dist/hooks/index.d.ts.map +1 -1
  383. package/dist/hooks/index.js +3 -0
  384. package/dist/hooks/index.js.map +1 -1
  385. package/dist/hooks/registry.d.ts +173 -0
  386. package/dist/hooks/registry.d.ts.map +1 -0
  387. package/dist/hooks/registry.js +476 -0
  388. package/dist/hooks/registry.js.map +1 -0
  389. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  390. package/dist/hooks/trajectory-hooks.d.ts.map +1 -0
  391. package/dist/hooks/trajectory-hooks.js +183 -0
  392. package/dist/hooks/trajectory-hooks.js.map +1 -0
  393. package/dist/hooks/types.d.ts +141 -0
  394. package/dist/hooks/types.d.ts.map +1 -1
  395. package/dist/index.d.ts +2 -0
  396. package/dist/index.d.ts.map +1 -1
  397. package/dist/index.js +3 -0
  398. package/dist/index.js.map +1 -1
  399. package/dist/memory/adapters/index.d.ts +8 -0
  400. package/dist/memory/adapters/index.d.ts.map +1 -0
  401. package/dist/memory/adapters/index.js +8 -0
  402. package/dist/memory/adapters/index.js.map +1 -0
  403. package/dist/memory/adapters/inmemory.d.ts +59 -0
  404. package/dist/memory/adapters/inmemory.d.ts.map +1 -0
  405. package/dist/memory/adapters/inmemory.js +195 -0
  406. package/dist/memory/adapters/inmemory.js.map +1 -0
  407. package/dist/memory/adapters/supermemory.d.ts +71 -0
  408. package/dist/memory/adapters/supermemory.d.ts.map +1 -0
  409. package/dist/memory/adapters/supermemory.js +338 -0
  410. package/dist/memory/adapters/supermemory.js.map +1 -0
  411. package/dist/memory/factory.d.ts +48 -0
  412. package/dist/memory/factory.d.ts.map +1 -0
  413. package/dist/memory/factory.js +143 -0
  414. package/dist/memory/factory.js.map +1 -0
  415. package/dist/memory/index.d.ts +32 -0
  416. package/dist/memory/index.d.ts.map +1 -0
  417. package/dist/memory/index.js +32 -0
  418. package/dist/memory/index.js.map +1 -0
  419. package/dist/memory/memory-hooks.d.ts +60 -0
  420. package/dist/memory/memory-hooks.d.ts.map +1 -0
  421. package/dist/memory/memory-hooks.js +313 -0
  422. package/dist/memory/memory-hooks.js.map +1 -0
  423. package/dist/memory/service.d.ts +49 -0
  424. package/dist/memory/service.d.ts.map +1 -0
  425. package/dist/memory/service.js +146 -0
  426. package/dist/memory/service.js.map +1 -0
  427. package/dist/memory/types.d.ts +195 -0
  428. package/dist/memory/types.d.ts.map +1 -0
  429. package/dist/memory/types.js +8 -0
  430. package/dist/memory/types.js.map +1 -0
  431. package/dist/policy/agent-policy.d.ts +225 -0
  432. package/dist/policy/agent-policy.d.ts.map +1 -0
  433. package/dist/policy/agent-policy.js +665 -0
  434. package/dist/policy/agent-policy.js.map +1 -0
  435. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  436. package/dist/policy/cloud-policy-fetcher.d.ts.map +1 -0
  437. package/dist/policy/cloud-policy-fetcher.js +64 -0
  438. package/dist/policy/cloud-policy-fetcher.js.map +1 -0
  439. package/dist/protocol/types.d.ts +10 -1
  440. package/dist/protocol/types.d.ts.map +1 -1
  441. package/dist/resiliency/context-persistence.d.ts +140 -0
  442. package/dist/resiliency/context-persistence.d.ts.map +1 -0
  443. package/dist/resiliency/context-persistence.js +397 -0
  444. package/dist/resiliency/context-persistence.js.map +1 -0
  445. package/dist/resiliency/crash-insights.d.ts +156 -0
  446. package/dist/resiliency/crash-insights.d.ts.map +1 -0
  447. package/dist/resiliency/crash-insights.js +492 -0
  448. package/dist/resiliency/crash-insights.js.map +1 -0
  449. package/dist/resiliency/gossip-health.d.ts +137 -0
  450. package/dist/resiliency/gossip-health.d.ts.map +1 -0
  451. package/dist/resiliency/gossip-health.js +241 -0
  452. package/dist/resiliency/gossip-health.js.map +1 -0
  453. package/dist/resiliency/health-monitor.d.ts +97 -0
  454. package/dist/resiliency/health-monitor.d.ts.map +1 -0
  455. package/dist/resiliency/health-monitor.js +291 -0
  456. package/dist/resiliency/health-monitor.js.map +1 -0
  457. package/dist/resiliency/index.d.ts +68 -0
  458. package/dist/resiliency/index.d.ts.map +1 -0
  459. package/dist/resiliency/index.js +68 -0
  460. package/dist/resiliency/index.js.map +1 -0
  461. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  462. package/dist/resiliency/leader-watchdog.d.ts.map +1 -0
  463. package/dist/resiliency/leader-watchdog.js +189 -0
  464. package/dist/resiliency/leader-watchdog.js.map +1 -0
  465. package/dist/resiliency/logger.d.ts +114 -0
  466. package/dist/resiliency/logger.d.ts.map +1 -0
  467. package/dist/resiliency/logger.js +250 -0
  468. package/dist/resiliency/logger.js.map +1 -0
  469. package/dist/resiliency/memory-monitor.d.ts +172 -0
  470. package/dist/resiliency/memory-monitor.d.ts.map +1 -0
  471. package/dist/resiliency/memory-monitor.js +593 -0
  472. package/dist/resiliency/memory-monitor.js.map +1 -0
  473. package/dist/resiliency/metrics.d.ts +115 -0
  474. package/dist/resiliency/metrics.d.ts.map +1 -0
  475. package/dist/resiliency/metrics.js +239 -0
  476. package/dist/resiliency/metrics.js.map +1 -0
  477. package/dist/resiliency/provider-context.d.ts +100 -0
  478. package/dist/resiliency/provider-context.d.ts.map +1 -0
  479. package/dist/resiliency/provider-context.js +360 -0
  480. package/dist/resiliency/provider-context.js.map +1 -0
  481. package/dist/resiliency/stateless-lead.d.ts +149 -0
  482. package/dist/resiliency/stateless-lead.d.ts.map +1 -0
  483. package/dist/resiliency/stateless-lead.js +308 -0
  484. package/dist/resiliency/stateless-lead.js.map +1 -0
  485. package/dist/resiliency/supervisor.d.ts +147 -0
  486. package/dist/resiliency/supervisor.d.ts.map +1 -0
  487. package/dist/resiliency/supervisor.js +459 -0
  488. package/dist/resiliency/supervisor.js.map +1 -0
  489. package/dist/shared/cli-auth-config.d.ts +91 -0
  490. package/dist/shared/cli-auth-config.d.ts.map +1 -0
  491. package/dist/shared/cli-auth-config.js +264 -0
  492. package/dist/shared/cli-auth-config.js.map +1 -0
  493. package/dist/storage/adapter.d.ts +3 -1
  494. package/dist/storage/adapter.d.ts.map +1 -1
  495. package/dist/storage/adapter.js +12 -2
  496. package/dist/storage/adapter.js.map +1 -1
  497. package/dist/storage/sqlite-adapter.d.ts.map +1 -1
  498. package/dist/storage/sqlite-adapter.js +18 -14
  499. package/dist/storage/sqlite-adapter.js.map +1 -1
  500. package/dist/trajectory/config.d.ts +84 -0
  501. package/dist/trajectory/config.d.ts.map +1 -0
  502. package/dist/trajectory/config.js +163 -0
  503. package/dist/trajectory/config.js.map +1 -0
  504. package/dist/trajectory/index.d.ts +8 -0
  505. package/dist/trajectory/index.d.ts.map +1 -0
  506. package/dist/trajectory/index.js +8 -0
  507. package/dist/trajectory/index.js.map +1 -0
  508. package/dist/trajectory/integration.d.ts +292 -0
  509. package/dist/trajectory/integration.d.ts.map +1 -0
  510. package/dist/trajectory/integration.js +834 -0
  511. package/dist/trajectory/integration.js.map +1 -0
  512. package/dist/utils/index.d.ts +1 -0
  513. package/dist/utils/index.d.ts.map +1 -1
  514. package/dist/utils/index.js +1 -0
  515. package/dist/utils/index.js.map +1 -1
  516. package/dist/utils/logger.d.ts +40 -0
  517. package/dist/utils/logger.d.ts.map +1 -0
  518. package/dist/utils/logger.js +84 -0
  519. package/dist/utils/logger.js.map +1 -0
  520. package/dist/utils/project-namespace.d.ts +24 -0
  521. package/dist/utils/project-namespace.d.ts.map +1 -1
  522. package/dist/utils/project-namespace.js +84 -0
  523. package/dist/utils/project-namespace.js.map +1 -1
  524. package/dist/wrapper/client.d.ts +16 -1
  525. package/dist/wrapper/client.d.ts.map +1 -1
  526. package/dist/wrapper/client.js +32 -1
  527. package/dist/wrapper/client.js.map +1 -1
  528. package/dist/wrapper/parser.d.ts +13 -0
  529. package/dist/wrapper/parser.d.ts.map +1 -1
  530. package/dist/wrapper/parser.js +217 -47
  531. package/dist/wrapper/parser.js.map +1 -1
  532. package/dist/wrapper/pty-wrapper.d.ts +219 -17
  533. package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
  534. package/dist/wrapper/pty-wrapper.js +1050 -104
  535. package/dist/wrapper/pty-wrapper.js.map +1 -1
  536. package/dist/wrapper/shared.d.ts +165 -0
  537. package/dist/wrapper/shared.d.ts.map +1 -0
  538. package/dist/wrapper/shared.js +270 -0
  539. package/dist/wrapper/shared.js.map +1 -0
  540. package/dist/wrapper/tmux-wrapper.d.ts +78 -11
  541. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
  542. package/dist/wrapper/tmux-wrapper.js +567 -106
  543. package/dist/wrapper/tmux-wrapper.js.map +1 -1
  544. package/docs/CLOUD-ARCHITECTURE.md +804 -0
  545. package/docs/CLOUD-ONBOARDING-DESIGN.md +1983 -0
  546. package/docs/HOOKS_API.md +394 -0
  547. package/docs/WRAPPER_EVENTS.md +358 -0
  548. package/docs/agent-policy-snippet.md +40 -0
  549. package/docs/agent-relay-protocol.md +238 -0
  550. package/docs/agent-relay-snippet.md +115 -6
  551. package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
  552. package/docs/archive/ROADMAP.md +329 -0
  553. package/docs/archive/TESTING_PRESENCE_FEATURES.md +327 -0
  554. package/docs/competitive/GASTOWN.md +451 -0
  555. package/docs/{COMPETITIVE_ANALYSIS.md → competitive/OVERVIEW.md} +1 -0
  556. package/docs/competitive/README.md +34 -0
  557. package/docs/competitive/TMUX_ORCHESTRATOR.md +605 -0
  558. package/docs/dashboard.png +0 -0
  559. package/docs/design/ci-failure-webhooks.md +812 -0
  560. package/docs/design/comprehensive-integrations.md +238 -0
  561. package/docs/design/e2b-sandbox-integration.md +504 -0
  562. package/docs/design/github-app-permissions.md +264 -0
  563. package/docs/guides/CLOUD.md +236 -0
  564. package/docs/guides/LOCAL.md +535 -0
  565. package/docs/guides/SELF-HOSTED.md +494 -0
  566. package/docs/local-testing.md +428 -0
  567. package/docs/proposals/continuous-claude-integration.md +622 -0
  568. package/docs/proposals/custom-commands.md +368 -0
  569. package/docs/proposals/shadow-as-subagent.md +765 -0
  570. package/docs/proposals/slack-bot-integration.md +1457 -0
  571. package/docs/tasks/global-skills-system.tasks.md +230 -0
  572. package/docs/tasks/webhook-integrations.tasks.md +184 -0
  573. package/docs/tasks/workspace-capabilities.tasks.md +121 -0
  574. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +366 -0
  575. package/package.json +45 -7
  576. package/scripts/cloud-setup.sh +96 -0
  577. package/scripts/manual-qa.sh +293 -0
  578. package/scripts/postinstall.js +60 -0
  579. package/scripts/run-cloud-qa.sh +220 -0
  580. package/scripts/test-cli-auth/Dockerfile +44 -0
  581. package/scripts/test-cli-auth/Dockerfile.real +79 -0
  582. package/scripts/test-cli-auth/README.md +286 -0
  583. package/scripts/test-cli-auth/ci-test-real-clis.ts +251 -0
  584. package/scripts/test-cli-auth/ci-test-runner.ts +263 -0
  585. package/scripts/test-cli-auth/mock-cli.sh +147 -0
  586. package/scripts/test-cli-auth/package.json +14 -0
  587. package/scripts/test-cli-auth/test-oauth-flow.ts +220 -0
  588. package/scripts/test-pty-input-auto.js +222 -0
  589. package/scripts/test-pty-input.js +150 -0
  590. package/dist/dashboard/out/_next/static/chunks/app/layout-c9d8c5d95e48c6bf.js +0 -1
  591. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +0 -1
  592. package/dist/dashboard/out/_next/static/chunks/app/page-4498be09a5157759.js +0 -1
  593. package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +0 -1
  594. package/dist/dashboard/out/_next/static/chunks/webpack-c81f7fd28659d64f.js +0 -1
  595. package/dist/dashboard/out/_next/static/css/50ed6996e3df7bdd.css +0 -1
  596. /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
  597. /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
  598. /package/dist/dashboard/out/_next/static/chunks/{117-3bef7b19f3e60751.js → 117-b100311aff8d5c61.js} +0 -0
  599. /package/dist/dashboard/out/_next/static/chunks/{648-6cf686106c891ad3.js → 648-a13d3c2b1be45466.js} +0 -0
  600. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-8ff6572bc7c9bc61.js → page-a4973f3e3c82fb67.js} +0 -0
  601. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-26bd8d656b496dba.js → fd9d1056-bf46c09eb57e019c.js} +0 -0
  602. /package/docs/{CHANGELOG.md → archive/CHANGELOG.md} +0 -0
  603. /package/docs/{CLI-SIMPLIFICATION-COMPLETE.md → archive/CLI-SIMPLIFICATION-COMPLETE.md} +0 -0
  604. /package/docs/{DESIGN_BRIDGE_STAFFING.md → archive/DESIGN_BRIDGE_STAFFING.md} +0 -0
  605. /package/docs/{DESIGN_V2.md → archive/DESIGN_V2.md} +0 -0
  606. /package/docs/{MONETIZATION.md → archive/MONETIZATION.md} +0 -0
  607. /package/docs/{PROPOSAL-trajectories.md → archive/PROPOSAL-trajectories.md} +0 -0
  608. /package/docs/{SCALING_ANALYSIS.md → archive/SCALING_ANALYSIS.md} +0 -0
  609. /package/docs/{TMUX_IMPLEMENTATION_NOTES.md → archive/TMUX_IMPLEMENTATION_NOTES.md} +0 -0
  610. /package/docs/{TMUX_IMPROVEMENTS.md → archive/TMUX_IMPROVEMENTS.md} +0 -0
  611. /package/docs/{dashboard-v2-plan.md → archive/dashboard-v2-plan.md} +0 -0
  612. /package/docs/{removable-code-analysis.md → archive/removable-code-analysis.md} +0 -0
  613. /package/docs/{competitive-analysis-mcp-agent-mail.md → competitive/MCP_AGENT_MAIL.md} +0 -0
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Workspace Manager
3
+ * Manages multiple workspaces (repositories) and handles switching between them.
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { EventEmitter } from 'events';
8
+ import { execSync } from 'child_process';
9
+ import { createLogger } from '../resiliency/logger.js';
10
+ const logger = createLogger('workspace-manager');
11
+ function generateId() {
12
+ return Math.random().toString(36).substring(2, 15);
13
+ }
14
+ export class WorkspaceManager extends EventEmitter {
15
+ workspaces = new Map();
16
+ activeWorkspaceId;
17
+ dataDir;
18
+ workspacesFile;
19
+ constructor(dataDir) {
20
+ super();
21
+ this.dataDir = dataDir;
22
+ this.workspacesFile = path.join(dataDir, 'workspaces.json');
23
+ // Ensure data directory exists
24
+ if (!fs.existsSync(dataDir)) {
25
+ fs.mkdirSync(dataDir, { recursive: true });
26
+ }
27
+ // Load existing workspaces
28
+ this.loadWorkspaces();
29
+ }
30
+ /**
31
+ * Add a new workspace
32
+ */
33
+ add(request) {
34
+ const resolvedPath = this.resolvePath(request.path);
35
+ // Check if already exists
36
+ const existing = this.findByPath(resolvedPath);
37
+ if (existing) {
38
+ logger.info('Workspace already exists', { id: existing.id, path: resolvedPath });
39
+ return existing;
40
+ }
41
+ // Validate path exists
42
+ if (!fs.existsSync(resolvedPath)) {
43
+ throw new Error(`Path does not exist: ${resolvedPath}`);
44
+ }
45
+ // Get git info
46
+ const gitInfo = this.getGitInfo(resolvedPath);
47
+ const workspace = {
48
+ id: generateId(),
49
+ name: request.name || path.basename(resolvedPath),
50
+ path: resolvedPath,
51
+ status: 'inactive',
52
+ provider: request.provider || this.detectProvider(resolvedPath),
53
+ createdAt: new Date(),
54
+ lastActiveAt: new Date(),
55
+ gitRemote: gitInfo.remote,
56
+ gitBranch: gitInfo.branch,
57
+ };
58
+ this.workspaces.set(workspace.id, workspace);
59
+ this.saveWorkspaces();
60
+ logger.info('Workspace added', { id: workspace.id, name: workspace.name, path: resolvedPath });
61
+ this.emitEvent({
62
+ type: 'workspace:added',
63
+ workspaceId: workspace.id,
64
+ data: workspace,
65
+ timestamp: new Date(),
66
+ });
67
+ return workspace;
68
+ }
69
+ /**
70
+ * Remove a workspace
71
+ */
72
+ remove(workspaceId) {
73
+ const workspace = this.workspaces.get(workspaceId);
74
+ if (!workspace) {
75
+ return false;
76
+ }
77
+ // If this is the active workspace, deactivate first
78
+ if (this.activeWorkspaceId === workspaceId) {
79
+ this.activeWorkspaceId = undefined;
80
+ }
81
+ this.workspaces.delete(workspaceId);
82
+ this.saveWorkspaces();
83
+ logger.info('Workspace removed', { id: workspaceId, name: workspace.name });
84
+ this.emitEvent({
85
+ type: 'workspace:removed',
86
+ workspaceId,
87
+ data: { id: workspaceId, name: workspace.name },
88
+ timestamp: new Date(),
89
+ });
90
+ return true;
91
+ }
92
+ /**
93
+ * Switch to a workspace (set as active)
94
+ */
95
+ switchTo(workspaceId) {
96
+ const workspace = this.workspaces.get(workspaceId);
97
+ if (!workspace) {
98
+ throw new Error(`Workspace not found: ${workspaceId}`);
99
+ }
100
+ const previousId = this.activeWorkspaceId;
101
+ // Deactivate previous workspace
102
+ if (previousId && previousId !== workspaceId) {
103
+ const prev = this.workspaces.get(previousId);
104
+ if (prev) {
105
+ prev.status = 'inactive';
106
+ }
107
+ }
108
+ // Activate new workspace
109
+ workspace.status = 'active';
110
+ workspace.lastActiveAt = new Date();
111
+ this.activeWorkspaceId = workspaceId;
112
+ this.saveWorkspaces();
113
+ logger.info('Switched to workspace', { id: workspaceId, name: workspace.name });
114
+ this.emitEvent({
115
+ type: 'workspace:switched',
116
+ workspaceId,
117
+ data: { previousId, currentId: workspaceId, workspace },
118
+ timestamp: new Date(),
119
+ });
120
+ return workspace;
121
+ }
122
+ /**
123
+ * Get a workspace by ID
124
+ */
125
+ get(workspaceId) {
126
+ return this.workspaces.get(workspaceId);
127
+ }
128
+ /**
129
+ * Get the active workspace
130
+ */
131
+ getActive() {
132
+ if (!this.activeWorkspaceId)
133
+ return undefined;
134
+ return this.workspaces.get(this.activeWorkspaceId);
135
+ }
136
+ /**
137
+ * Get all workspaces
138
+ */
139
+ getAll() {
140
+ return Array.from(this.workspaces.values());
141
+ }
142
+ /**
143
+ * Find workspace by path
144
+ */
145
+ findByPath(workspacePath) {
146
+ const resolved = this.resolvePath(workspacePath);
147
+ return Array.from(this.workspaces.values()).find((w) => w.path === resolved);
148
+ }
149
+ /**
150
+ * Update workspace status
151
+ */
152
+ updateStatus(workspaceId, status) {
153
+ const workspace = this.workspaces.get(workspaceId);
154
+ if (!workspace)
155
+ return;
156
+ workspace.status = status;
157
+ this.saveWorkspaces();
158
+ this.emitEvent({
159
+ type: 'workspace:updated',
160
+ workspaceId,
161
+ data: { status },
162
+ timestamp: new Date(),
163
+ });
164
+ }
165
+ /**
166
+ * Update workspace git info
167
+ */
168
+ refreshGitInfo(workspaceId) {
169
+ const workspace = this.workspaces.get(workspaceId);
170
+ if (!workspace)
171
+ return;
172
+ const gitInfo = this.getGitInfo(workspace.path);
173
+ workspace.gitRemote = gitInfo.remote;
174
+ workspace.gitBranch = gitInfo.branch;
175
+ this.saveWorkspaces();
176
+ }
177
+ /**
178
+ * Resolve path (expand ~ and make absolute)
179
+ */
180
+ resolvePath(p) {
181
+ if (p.startsWith('~')) {
182
+ p = path.join(process.env.HOME || '', p.slice(1));
183
+ }
184
+ return path.resolve(p);
185
+ }
186
+ /**
187
+ * Detect provider from workspace files
188
+ */
189
+ detectProvider(workspacePath) {
190
+ // Check for CLAUDE.md or .claude directory
191
+ if (fs.existsSync(path.join(workspacePath, 'CLAUDE.md')) ||
192
+ fs.existsSync(path.join(workspacePath, '.claude'))) {
193
+ return 'claude';
194
+ }
195
+ // Check for .codex directory
196
+ if (fs.existsSync(path.join(workspacePath, '.codex'))) {
197
+ return 'codex';
198
+ }
199
+ // Check for .gemini directory
200
+ if (fs.existsSync(path.join(workspacePath, '.gemini'))) {
201
+ return 'gemini';
202
+ }
203
+ return 'generic';
204
+ }
205
+ /**
206
+ * Get git info for a workspace
207
+ */
208
+ getGitInfo(workspacePath) {
209
+ try {
210
+ const branch = execSync('git branch --show-current', {
211
+ cwd: workspacePath,
212
+ encoding: 'utf8',
213
+ stdio: ['pipe', 'pipe', 'pipe'],
214
+ }).trim();
215
+ let remote;
216
+ try {
217
+ remote = execSync('git remote get-url origin', {
218
+ cwd: workspacePath,
219
+ encoding: 'utf8',
220
+ stdio: ['pipe', 'pipe', 'pipe'],
221
+ }).trim();
222
+ }
223
+ catch {
224
+ // No remote configured
225
+ }
226
+ return { remote, branch };
227
+ }
228
+ catch {
229
+ // Not a git repo
230
+ return {};
231
+ }
232
+ }
233
+ /**
234
+ * Load workspaces from disk
235
+ */
236
+ loadWorkspaces() {
237
+ if (!fs.existsSync(this.workspacesFile)) {
238
+ return;
239
+ }
240
+ try {
241
+ const data = JSON.parse(fs.readFileSync(this.workspacesFile, 'utf8'));
242
+ if (Array.isArray(data.workspaces)) {
243
+ for (const w of data.workspaces) {
244
+ this.workspaces.set(w.id, {
245
+ ...w,
246
+ createdAt: new Date(w.createdAt),
247
+ lastActiveAt: new Date(w.lastActiveAt),
248
+ status: 'inactive', // Reset status on load
249
+ });
250
+ }
251
+ }
252
+ this.activeWorkspaceId = data.activeWorkspaceId;
253
+ logger.info('Loaded workspaces', { count: this.workspaces.size });
254
+ }
255
+ catch (err) {
256
+ logger.error('Failed to load workspaces', { error: String(err) });
257
+ }
258
+ }
259
+ /**
260
+ * Save workspaces to disk
261
+ */
262
+ saveWorkspaces() {
263
+ try {
264
+ const data = {
265
+ workspaces: Array.from(this.workspaces.values()),
266
+ activeWorkspaceId: this.activeWorkspaceId,
267
+ };
268
+ fs.writeFileSync(this.workspacesFile, JSON.stringify(data, null, 2));
269
+ }
270
+ catch (err) {
271
+ logger.error('Failed to save workspaces', { error: String(err) });
272
+ }
273
+ }
274
+ /**
275
+ * Emit a daemon event
276
+ */
277
+ emitEvent(event) {
278
+ this.emit('event', event);
279
+ }
280
+ }
281
+ let workspaceManagerInstance;
282
+ export function getWorkspaceManager(dataDir) {
283
+ if (!workspaceManagerInstance) {
284
+ const dir = dataDir || path.join(process.env.HOME || '', '.agent-relay', 'daemon');
285
+ workspaceManagerInstance = new WorkspaceManager(dir);
286
+ }
287
+ return workspaceManagerInstance;
288
+ }
289
+ //# sourceMappingURL=workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../src/daemon/workspace-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/50ed6996e3df7bdd.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-c81f7fd28659d64f.js"/><script src="/_next/static/chunks/fd9d1056-26bd8d656b496dba.js" async=""></script><script src="/_next/static/chunks/117-3bef7b19f3e60751.js" async=""></script><script src="/_next/static/chunks/main-app-bae2e535de00de50.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Agent Relay Dashboard</title><meta name="description" content="Fleet control dashboard for Agent Relay"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-c81f7fd28659d64f.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/50ed6996e3df7bdd.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"DXFA-jj8wb3PcY5DX2xcU\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/50ed6996e3df7bdd.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$6\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$7\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$9\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Agent Relay Dashboard\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Fleet control dashboard for Agent Relay\"}]]\n3:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/411ce23ffeae9f76.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1cdd8ed57114d5e1.js"/><script src="/_next/static/chunks/fd9d1056-bf46c09eb57e019c.js" async=""></script><script src="/_next/static/chunks/117-b100311aff8d5c61.js" async=""></script><script src="/_next/static/chunks/main-app-5d692157a8eb1fd9.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Agent Relay Dashboard</title><meta name="description" content="Fleet control dashboard for Agent Relay"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-1cdd8ed57114d5e1.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/411ce23ffeae9f76.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"H5aWG0udPB4iOUIl_gytz\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/411ce23ffeae9f76.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$6\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$7\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$9\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Agent Relay Dashboard\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Fleet control dashboard for Agent Relay\"}]]\n3:null\n"])</script></body></html>
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[116],{9116:function(e,r,t){t.d(r,{$3:function(){return i},XP:function(){return y},aM:function(){return o},hc:function(){return n},hi:function(){return d},kG:function(){return u}});let s="agentrelay_workspace_id",a=null,c=null;function o(e){c=e}function n(e){a=e,e?localStorage.setItem(s,e):localStorage.removeItem(s)}function i(){if(a)return a;{let e=localStorage.getItem(s);if(e)return a=e,e}return null}function u(e){if(a){let r=e.startsWith("/api/")?e.substring(5):e.replace(/^\//,"");return"/api/workspaces/".concat(a,"/proxy/").concat(r)}return"".concat("").concat(e)}async function l(e){var r;let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=(null===(r=t.method)||void 0===r?void 0:r.toUpperCase())||"GET",a={...t.headers};"GET"!==s&&"HEAD"!==s&&"OPTIONS"!==s&&(c&&(a["X-CSRF-Token"]=c),t.body&&!a["Content-Type"]&&(a["Content-Type"]="application/json"));let o=await fetch(e,{...t,headers:a,credentials:"include"});return!function(e){let r=e.headers.get("X-CSRF-Token");r&&(c=r)}(o),o}let d={async sendMessage(e){try{let r=await l(u("/api/send"),{method:"POST",body:JSON.stringify(e)}),t=await r.json();if(r.ok&&t.success)return{success:!0};return{success:!1,error:t.error||"Failed to send message"}}catch(e){return{success:!1,error:"Network error"}}},async uploadAttachment(e){try{let r,t,s;e instanceof File?(r=e.name,t=e.type,s=await new Promise((r,t)=>{let s=new FileReader;s.onload=()=>r(s.result),s.onerror=t,s.readAsDataURL(e)})):(r=e.filename,t=e.mimeType,s=e.data);let a=await l(u("/api/upload"),{method:"POST",body:JSON.stringify({filename:r,mimeType:t,data:s})}),c=await a.json();if(a.ok&&c.success&&c.attachment)return{success:!0,data:{attachment:c.attachment}};return{success:!1,error:c.error||"Failed to upload attachment"}}catch(e){return{success:!1,error:"Network error"}}},async spawnAgent(e){try{let r=await l(u("/api/spawn"),{method:"POST",body:JSON.stringify(e)});return await r.json()}catch(r){return{success:!1,name:e.name,error:"Network error"}}},async getSpawnedAgents(){try{let e=await l(u("/api/spawned")),r=await e.json();if(e.ok&&r.success)return{success:!0,data:{agents:r.agents||[]}};return{success:!1,error:r.error}}catch(e){return{success:!1,error:"Network error"}}},async releaseAgent(e){try{let r=await l(u("/api/spawned/".concat(encodeURIComponent(e))),{method:"DELETE"}),t=await r.json();if(r.ok&&t.success)return{success:!0};return{success:!1,error:t.error}}catch(e){return{success:!1,error:"Network error"}}},async getData(){try{let e=await l(u("/api/data")),r=await e.json();if(e.ok)return{success:!0,data:r};return{success:!1,error:"Failed to fetch data"}}catch(e){return{success:!1,error:"Network error"}}},async getBridgeData(){try{let e=await l(u("/api/bridge")),r=await e.json();if(e.ok)return{success:!0,data:r};return{success:!1,error:"Failed to fetch bridge data"}}catch(e){return{success:!1,error:"Network error"}}},async getMetrics(){try{let e=await l(u("/api/metrics")),r=await e.json();if(e.ok)return{success:!0,data:r};return{success:!1,error:"Failed to fetch metrics"}}catch(e){return{success:!1,error:"Network error"}}},async getHistorySessions(e){try{let r=new URLSearchParams;(null==e?void 0:e.agent)&&r.set("agent",e.agent),(null==e?void 0:e.since)&&r.set("since",String(e.since)),(null==e?void 0:e.limit)&&r.set("limit",String(e.limit));let t=await l(u("/api/history/sessions?".concat(r))),s=await t.json();if(t.ok)return{success:!0,data:s};return{success:!1,error:"Failed to fetch sessions"}}catch(e){return{success:!1,error:"Network error"}}},async getHistoryMessages(e){try{let r=new URLSearchParams;(null==e?void 0:e.from)&&r.set("from",e.from),(null==e?void 0:e.to)&&r.set("to",e.to),(null==e?void 0:e.thread)&&r.set("thread",e.thread),(null==e?void 0:e.since)&&r.set("since",String(e.since)),(null==e?void 0:e.limit)&&r.set("limit",String(e.limit)),(null==e?void 0:e.order)&&r.set("order",e.order),(null==e?void 0:e.search)&&r.set("search",e.search);let t=await l(u("/api/history/messages?".concat(r))),s=await t.json();if(t.ok)return{success:!0,data:s};return{success:!1,error:"Failed to fetch messages"}}catch(e){return{success:!1,error:"Network error"}}},async getHistoryConversations(){try{let e=await l(u("/api/history/conversations")),r=await e.json();if(e.ok)return{success:!0,data:r};return{success:!1,error:"Failed to fetch conversations"}}catch(e){return{success:!1,error:"Network error"}}},async getHistoryMessage(e){try{let r=await l(u("/api/history/message/".concat(encodeURIComponent(e)))),t=await r.json();if(r.ok)return{success:!0,data:t};return{success:!1,error:t.error||"Failed to fetch message"}}catch(e){return{success:!1,error:"Network error"}}},async getHistoryStats(){try{let e=await l(u("/api/history/stats")),r=await e.json();if(e.ok)return{success:!0,data:r};return{success:!1,error:"Failed to fetch stats"}}catch(e){return{success:!1,error:"Network error"}}},async searchFiles(e){try{let r=new URLSearchParams;(null==e?void 0:e.query)&&r.set("q",e.query),(null==e?void 0:e.limit)&&r.set("limit",String(e.limit));let t=await l(u("/api/files?".concat(r))),s=await t.json();if(t.ok)return{success:!0,data:s};return{success:!1,error:"Failed to search files"}}catch(e){return{success:!1,error:"Network error"}}},async getDecisions(){try{let e=await l(u("/api/decisions")),r=await e.json();if(e.ok&&r.success)return{success:!0,data:{decisions:r.decisions||[]}};return{success:!1,error:r.error||"Failed to fetch decisions"}}catch(e){return{success:!1,error:"Network error"}}},async approveDecision(e,r,t){try{let s=await l(u("/api/decisions/".concat(encodeURIComponent(e),"/approve")),{method:"POST",body:JSON.stringify({optionId:r,response:t})}),a=await s.json();if(s.ok&&a.success)return{success:!0};return{success:!1,error:a.error||"Failed to approve decision"}}catch(e){return{success:!1,error:"Network error"}}},async rejectDecision(e,r){try{let t=await l(u("/api/decisions/".concat(encodeURIComponent(e),"/reject")),{method:"POST",body:JSON.stringify({reason:r})}),s=await t.json();if(t.ok&&s.success)return{success:!0};return{success:!1,error:s.error||"Failed to reject decision"}}catch(e){return{success:!1,error:"Network error"}}},async dismissDecision(e){try{let r=await l(u("/api/decisions/".concat(encodeURIComponent(e))),{method:"DELETE"}),t=await r.json();if(r.ok&&t.success)return{success:!0};return{success:!1,error:t.error||"Failed to dismiss decision"}}catch(e){return{success:!1,error:"Network error"}}},async getFleetServers(){try{let e=await l(u("/api/fleet/servers")),r=await e.json();if(e.ok&&r.success)return{success:!0,data:{servers:r.servers||[]}};return{success:!1,error:r.error||"Failed to fetch fleet servers"}}catch(e){return{success:!1,error:"Network error"}}},async getFleetStats(){try{let e=await l(u("/api/fleet/stats")),r=await e.json();if(e.ok&&r.success)return{success:!0,data:{stats:r.stats}};return{success:!1,error:r.error||"Failed to fetch fleet stats"}}catch(e){return{success:!1,error:"Network error"}}},async getTasks(e){try{let r=new URLSearchParams;(null==e?void 0:e.status)&&r.set("status",e.status),(null==e?void 0:e.agent)&&r.set("agent",e.agent);let t=await l(u("/api/tasks?".concat(r))),s=await t.json();if(t.ok&&s.success)return{success:!0,data:{tasks:s.tasks||[]}};return{success:!1,error:s.error||"Failed to fetch tasks"}}catch(e){return{success:!1,error:"Network error"}}},async createTask(e){try{let r=await l(u("/api/tasks"),{method:"POST",body:JSON.stringify(e)}),t=await r.json();if(r.ok&&t.success)return{success:!0,data:{task:t.task}};return{success:!1,error:t.error||"Failed to create task"}}catch(e){return{success:!1,error:"Network error"}}},async updateTask(e,r){try{let t=await l(u("/api/tasks/".concat(encodeURIComponent(e))),{method:"PATCH",body:JSON.stringify(r)}),s=await t.json();if(t.ok&&s.success)return{success:!0,data:{task:s.task}};return{success:!1,error:s.error||"Failed to update task"}}catch(e){return{success:!1,error:"Network error"}}},async cancelTask(e){try{let r=await l(u("/api/tasks/".concat(encodeURIComponent(e))),{method:"DELETE"}),t=await r.json();if(r.ok&&t.success)return{success:!0};return{success:!1,error:t.error||"Failed to cancel task"}}catch(e){return{success:!1,error:"Network error"}}},async createBead(e){try{let r=await l(u("/api/beads"),{method:"POST",body:JSON.stringify(e)}),t=await r.json();if(r.ok&&t.success)return{success:!0,data:{bead:t.bead}};return{success:!1,error:t.error||"Failed to create bead"}}catch(e){return{success:!1,error:"Network error"}}},async sendRelayMessage(e){try{let r=await l(u("/api/relay/send"),{method:"POST",body:JSON.stringify(e)}),t=await r.json();if(r.ok&&t.success)return{success:!0,data:{messageId:t.messageId}};return{success:!1,error:t.error||"Failed to send message"}}catch(e){return{success:!1,error:"Network error"}}}};function y(e){return{id:e.id,agentName:e.agentName,timestamp:e.createdAt,type:e.category,title:e.title,description:e.description,options:e.options,priority:e.urgency,context:e.context,expiresAt:e.expiresAt}}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[282],{282:function(e,t,i){i.d(t,{ZP:function(){return h}});let s="[nango]";class n{baseURL;debug;swClient;errorHandler;modal;isProcessingMessage=!1;constructor({baseUrl:e,debug:t,webSocketUrl:i,successHandler:s,errorHandler:n}){this.baseURL=e,this.debug=t,this.swClient=new WebSocket(i),this.errorHandler=n,this.swClient.onmessage=e=>{this.isProcessingMessage=!0,this.handleMessage(e,s),this.isProcessingMessage=!1}}setModal(e){this.modal=e}handleMessage(e,t){let i=JSON.parse(e.data);switch(i.message_type){case"connection_ack":this.debug&&console.log(s,"Connection ack received. Opening modal..."),this.baseURL.searchParams.set("ws_client_id",i.ws_client_id),this.open();break;case"error":this.debug&&console.log(s,"Error received. Rejecting authorization..."),this.errorHandler(i.error_type,i.error_desc),this.swClient.close();break;case"success":this.debug&&console.log(s,"Success received. Resolving authorization..."),t({providerConfigKey:i.provider_config_key,connectionId:i.connection_id,isPending:i.is_pending}),this.swClient.close();break;default:this.debug&&console.log(s,"Unknown message type received from Nango server. Ignoring...");return}}open(){if(this.modal&&(this.debug&&console.log(s,"opening",this.baseURL.href),this.modal.location=this.baseURL.href,!this.modal||this.modal.closed||void 0===this.modal.closed)){this.errorHandler("blocked_by_browser","Modal blocked by browser");return}}close(){this.modal&&!this.modal.closed&&(this.modal.close(),delete this.modal),this.swClient.close(),delete this.swClient}}class o{iframe=null;isReady=!1;listener=null;sessionToken;baseURL;apiURL;onEvent;detectClosedAuthWindow;lang;themeOverride;constructor({sessionToken:e,baseURL:t="https://connect.nango.dev",apiURL:i="https://api.nango.dev",detectClosedAuthWindow:s,onEvent:n,lang:o,themeOverride:r}){this.sessionToken=e,this.baseURL=t,this.apiURL=i,this.onEvent=n,this.detectClosedAuthWindow=s,this.lang=o,this.themeOverride=r}open(){this.iframe=this.createIframe(),document.body.append(this.iframe),document.body.style.overflow="hidden",this.setupEventListeners()}createIframe(){let e=new URL(this.baseURL);this.apiURL&&e.searchParams.append("apiURL",this.apiURL),this.detectClosedAuthWindow&&e.searchParams.append("detectClosedAuthWindow",String(this.detectClosedAuthWindow)),this.lang&&e.searchParams.append("lang",this.lang),this.themeOverride&&e.searchParams.append("theme",this.themeOverride);let t=document.createElement("iframe");return t.src=e.href,t.id="connect-ui",t.style.position="fixed",t.style.zIndex="9999",t.style.top="0",t.style.left="0",t.style.right="0",t.style.bottom="0",t.style.width="100vw",t.style.height="100vh",t.style.backgroundColor="transparent",t}setupEventListeners(){this.listener=e=>{if(e.origin!==new URL(this.baseURL).origin||"object"!=typeof e.data||!e.data||!e.data.type)return;let t=e.data;switch(t.type){case"ready":this.isReady=!0,this.sendSessionToken();break;case"close":this.close()}this.onEvent&&this.onEvent(t)},window.addEventListener("message",this.listener,!1)}setSessionToken(e){this.sessionToken=e,this.isReady&&this.sendSessionToken()}close(){this.listener&&window.removeEventListener("message",this.listener),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null,document.body.style.overflow="")}sendSessionToken(){if(!this.sessionToken)return;let e={type:"session_token",sessionToken:this.sessionToken};this.iframe?.contentWindow?.postMessage(e,"*")}}let r="NANGO DEBUG LOG: ";class a extends Error{type;constructor(e,t){super(e),this.type=t}}class h{hostBaseUrl;websocketsBaseUrl;publicKey;connectSessionToken;debug=!1;width=500;height=600;tm=null;win=null;constructor(e={}){e.host=e.host||"https://api.nango.dev",e.websocketsPath=e.websocketsPath||"/",this.debug=e.debug||!1,this.debug&&(console.log(r,"Debug mode is enabled."),console.log(r,`Using host: ${e.host}.`)),e.width&&(this.width=e.width),e.height&&(this.height=e.height),this.hostBaseUrl=e.host.replace(/\/+$/,""),this.publicKey=e.publicKey,this.connectSessionToken=e.connectSessionToken;try{let t=new URL(this.hostBaseUrl),i=new URL(e.websocketsPath,t);this.websocketsBaseUrl=i.toString().replace("https://","wss://").replace("http://","ws://")}catch{throw new a("Invalid URL provided for the Nango host.","invalid_host_url")}}async create(e,t,i){this.ensureCredentials();let s=null,n=i;"string"==typeof t?s=t:n=t;let o=this.hostBaseUrl+`/auth/unauthenticated/${e}${this.toQueryString(s,n)}`;return await this.triggerAuth({authUrl:o})}auth(e,t,i){this.ensureCredentials();let s=null,o=i;if("string"==typeof t?s=t:o={...o,...t},o&&("installation"in o&&"outbound"===o.installation||"credentials"in o&&("token_id"in o.credentials&&"token_secret"in o.credentials||!("oauth_client_id_override"in o.credentials)||!("oauth_client_secret_override"in o.credentials))&&Object.keys(o.credentials).length>0)){let t=o.credentials;if(!t)throw new a("Credentials are required for custom auth","missing_credentials");let{credentials:i,...n}=o;return this.customAuth(e,s,this.convertCredentialsToConfig(t),n,o.installation)}let r=window.open("","_blank",function(e){let t={...e,scrollbars:"yes",resizable:"yes",status:"no",toolbar:"no",location:"no",copyhistory:"no",menubar:"no",directories:"no"},i=[];for(let e in t)i.push(`${e}=${t[e]}`);return i.join(",")}(function({expectedWidth:e,expectedHeight:t}){let i=window.screen.width,s=window.screen.height;return{left:Math.max(i/2-e/2,0),top:Math.max(s/2-t/2,0),width:Math.min(e,i),height:Math.min(t,s)}}({expectedWidth:this.width,expectedHeight:this.height})));return new Promise((t,i)=>{let h;let l=(e,t)=>{i(new a(t,e))};if(this.win&&this.clear(),!r||r.closed||void 0===r.closed){l("blocked_by_browser","Modal blocked by browser");return}try{h=new URL(`${this.hostBaseUrl}/oauth/connect/${e}${this.toQueryString(s,o)}`)}catch{l("invalid_host_url","Invalid URL provided for the Nango host.");return}this.win=new n({baseUrl:h,debug:this.debug,webSocketUrl:this.websocketsBaseUrl,successHandler:e=>{t(e)},errorHandler:l}),this.win.setModal(r),this.tm=setInterval(()=>{this.win&&this.win.modal&&(!this.win.modal.window||this.win.modal.closed)&&!this.win.isProcessingMessage&&o?.detectClosedAuthWindow&&(clearInterval(this.tm),this.win.close(),this.win=null,i(new a("The authorization window was closed before the authorization flow was completed","window_closed")))},500)}).finally(()=>{this.clear()})}reconnect(e,t){if(!this.connectSessionToken)throw new a("Reconnect requires a session token","missing_connect_session_token");return this.auth(e,t)}clear(){if(this.tm&&clearInterval(this.tm),this.win){try{this.win.close()}catch(e){console.log("err",e)}this.win=null}}openConnectUI(e){let t=new o({sessionToken:this.connectSessionToken,...e});return t.open(),t}convertCredentialsToConfig(e){let t={};if("type"in e&&"username"in e&&"password"in e&&"SIGNATURE"===e.type)return{params:{type:e.type,username:e.username,password:e.password}};if("username"in e&&(t.username=e.username||""),"password"in e&&(t.password=e.password||""),"apiKey"in e&&(t.apiKey=e.apiKey||""),"privateKey"in e||"type"in e&&"JWT"===e.type){let{privateKey:t,...i}=e,s={...i};return t&&"object"==typeof t&&"id"in t&&"secret"in t&&(s.privateKey=t),{params:e}}if("privateKeyId"in e&&"issuerId"in e&&"privateKey"in e){let t={params:{privateKeyId:e.privateKeyId,issuerId:e.issuerId,privateKey:e.privateKey}};return"scope"in e&&("string"==typeof e.scope||Array.isArray(e.scope))&&(t.params.scope=e.scope),t}if("client_id"in e&&"client_secret"in e)return{params:{client_id:e.client_id,client_secret:e.client_secret,client_certificate:e.client_certificate,client_private_key:e.client_private_key}};if("token_id"in e&&"token_secret"in e){let t={token_id:e.token_id,token_secret:e.token_secret};return"oauth_client_id_override"in e&&(t.oauth_client_id_override=e.oauth_client_id_override),"oauth_client_secret_override"in e&&(t.oauth_client_secret_override=e.oauth_client_secret_override),{params:t}}return"username"in e&&"password"in e&&"organization_id"in e&&"dev_key"in e?{params:{username:e.username,password:e.password,organization_id:e.organization_id,dev_key:e.dev_key}}:"type"in e&&"TWO_STEP"===e.type?{params:{...e}}:{params:t}}async triggerAuth({authUrl:e,credentials:t}){let i=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},...t?{body:JSON.stringify(t)}:{}});if(!i.ok){let e=await i.json();throw new a(e.error.message,e.error.code)}return i.json()}async customAuth(e,t,i,s,n){let{params:o}=i;if(!o)throw new a("You must specify credentials.","missing_credentials");return"type"in o&&"TWO_STEP"===o.type?await this.triggerAuth({authUrl:this.hostBaseUrl+`/auth/two-step/${e}${this.toQueryString(t,s)}`,credentials:o}):"type"in o&&"SIGNATURE"===o.type&&"username"in o&&"password"in o?await this.triggerAuth({authUrl:this.hostBaseUrl+`/auth/signature/${e}${this.toQueryString(t,s)}`,credentials:o}):"username"in o&&"password"in o&&"organization_id"in o&&"dev_key"in o?await this.triggerAuth({authUrl:this.hostBaseUrl+`/auth/bill/${e}${this.toQueryString(t,s)}`,credentials:o}):"apiKey"in o?await this.triggerAuth({authUrl:this.hostBaseUrl+`/api-auth/api-key/${e}${this.toQueryString(t,s)}`,credentials:o}):"username"in o||"password"in o?await this.triggerAuth({authUrl:this.hostBaseUrl+`/api-auth/basic/${e}${this.toQueryString(t,s)}`,credentials:o}):"privateKey"in o||"type"in o&&"JWT"===o.type?await this.triggerAuth({authUrl:this.hostBaseUrl+`/auth/jwt/${e}${this.toQueryString(t,s)}`,credentials:o}):"privateKeyId"in o&&"issuerId"in o&&"privateKey"in o?await this.triggerAuth({authUrl:this.hostBaseUrl+`/app-store-auth/${e}${this.toQueryString(t,s)}`,credentials:o}):"token_id"in o&&"token_secret"in o?await this.triggerAuth({authUrl:this.hostBaseUrl+`/auth/tba/${e}${this.toQueryString(t,s)}`,credentials:o}):"client_id"in o&&"client_secret"in o?await this.triggerAuth({authUrl:this.hostBaseUrl+`/oauth2/auth/${e}${this.toQueryString(t,s)}`,credentials:o}):"outbound"===n?await this.triggerAuth({authUrl:this.hostBaseUrl+`/auth/oauth-outbound/${e}${this.toQueryString(t,s)}`}):Promise.reject(Error("Something went wrong with the authorization"))}toQueryString(e,t){let i=[];if(e&&i.push(`connection_id=${e}`),this.publicKey&&i.push(`public_key=${this.publicKey}`),this.connectSessionToken&&i.push(`connect_session_token=${this.connectSessionToken}`),t){for(let e in t.params){let s=t.params[e];"string"==typeof s&&i.push(`params[${encodeURIComponent(e)}]=${encodeURIComponent(s)}`)}if(t.hmac&&i.push(`hmac=${t.hmac}`),t.user_scope&&i.push(`user_scope=${t.user_scope.join(",")}`),t.credentials){let e=t.credentials;"oauth_client_id_override"in e&&i.push(`credentials[oauth_client_id_override]=${encodeURIComponent(e.oauth_client_id_override)}`),"oauth_client_secret_override"in e&&i.push(`credentials[oauth_client_secret_override]=${encodeURIComponent(e.oauth_client_secret_override)}`),"token_id"in e&&i.push(`token_id=${encodeURIComponent(e.token_id)}`),"token_secret"in e&&i.push(`token_secret=${encodeURIComponent(e.token_secret)}`)}for(let e in t.authorization_params){let s=t.authorization_params[e];"string"==typeof s?i.push(`authorization_params[${e}]=${s}`):void 0===s&&i.push(`authorization_params[${e}]=undefined`)}}return 0===i.length?"":"?"+i.join("&")}ensureCredentials(){if(!this.publicKey&&!this.connectSessionToken)throw new a("You must specify a public key OR a connect session token (cf. documentation).","missing_auth_token")}}}}]);