@openagt/dashboard 0.0.0-stage → 0.9.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 (610) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -2
  3. package/dist/agent-id.d.ts +13 -0
  4. package/dist/agent-id.d.ts.map +1 -0
  5. package/dist/agent-id.js +20 -0
  6. package/dist/agent-id.js.map +1 -0
  7. package/dist/agent-locks.d.ts +3 -0
  8. package/dist/agent-locks.d.ts.map +1 -0
  9. package/dist/agent-locks.js +40 -0
  10. package/dist/agent-locks.js.map +1 -0
  11. package/dist/agent-view.d.ts +39 -0
  12. package/dist/agent-view.d.ts.map +1 -0
  13. package/dist/agent-view.js +45 -0
  14. package/dist/agent-view.js.map +1 -0
  15. package/dist/bin.d.ts +3 -0
  16. package/dist/bin.d.ts.map +1 -0
  17. package/dist/bin.js +11 -0
  18. package/dist/bin.js.map +1 -0
  19. package/dist/branch-name.d.ts +8 -0
  20. package/dist/branch-name.d.ts.map +1 -0
  21. package/dist/branch-name.js +20 -0
  22. package/dist/branch-name.js.map +1 -0
  23. package/dist/bridge-browser.d.ts +217 -0
  24. package/dist/bridge-browser.d.ts.map +1 -0
  25. package/dist/bridge-browser.js +520 -0
  26. package/dist/bridge-browser.js.map +1 -0
  27. package/dist/browser-stream.d.ts +20 -0
  28. package/dist/browser-stream.d.ts.map +1 -0
  29. package/dist/browser-stream.js +51 -0
  30. package/dist/browser-stream.js.map +1 -0
  31. package/dist/browser.d.ts +16 -0
  32. package/dist/browser.d.ts.map +1 -0
  33. package/dist/browser.js +38 -0
  34. package/dist/browser.js.map +1 -0
  35. package/dist/built-in.d.ts +38 -0
  36. package/dist/built-in.d.ts.map +1 -0
  37. package/dist/built-in.js +119 -0
  38. package/dist/built-in.js.map +1 -0
  39. package/dist/chrome-extension/background.js +532 -0
  40. package/dist/chrome-extension/content.js +1475 -0
  41. package/dist/chrome-extension/driver-plan.js +41 -0
  42. package/dist/chrome-extension/fingerprint.js +43 -0
  43. package/dist/chrome-extension/manifest.json +31 -0
  44. package/dist/chrome-extension/options.html +48 -0
  45. package/dist/chrome-extension/options.js +122 -0
  46. package/dist/cli.d.ts +43 -0
  47. package/dist/cli.d.ts.map +1 -0
  48. package/dist/cli.js +186 -0
  49. package/dist/cli.js.map +1 -0
  50. package/dist/client.d.ts +16 -0
  51. package/dist/client.d.ts.map +1 -0
  52. package/dist/client.js +30 -0
  53. package/dist/client.js.map +1 -0
  54. package/dist/cloud-run-state.d.ts +27 -0
  55. package/dist/cloud-run-state.d.ts.map +1 -0
  56. package/dist/cloud-run-state.js +36 -0
  57. package/dist/cloud-run-state.js.map +1 -0
  58. package/dist/cloud-scratch-refs.d.ts +85 -0
  59. package/dist/cloud-scratch-refs.d.ts.map +1 -0
  60. package/dist/cloud-scratch-refs.js +275 -0
  61. package/dist/cloud-scratch-refs.js.map +1 -0
  62. package/dist/cloud-work.d.ts +66 -0
  63. package/dist/cloud-work.d.ts.map +1 -0
  64. package/dist/cloud-work.js +204 -0
  65. package/dist/cloud-work.js.map +1 -0
  66. package/dist/daemon-runtime.d.ts +42 -0
  67. package/dist/daemon-runtime.d.ts.map +1 -0
  68. package/dist/daemon-runtime.js +183 -0
  69. package/dist/daemon-runtime.js.map +1 -0
  70. package/dist/daemon-services.d.ts +37 -0
  71. package/dist/daemon-services.d.ts.map +1 -0
  72. package/dist/daemon-services.js +126 -0
  73. package/dist/daemon-services.js.map +1 -0
  74. package/dist/daemon-tick.d.ts +68 -0
  75. package/dist/daemon-tick.d.ts.map +1 -0
  76. package/dist/daemon-tick.js +97 -0
  77. package/dist/daemon-tick.js.map +1 -0
  78. package/dist/daemon.d.ts +65 -0
  79. package/dist/daemon.d.ts.map +1 -0
  80. package/dist/daemon.js +202 -0
  81. package/dist/daemon.js.map +1 -0
  82. package/dist/dashboard/activity.d.ts +41 -0
  83. package/dist/dashboard/activity.d.ts.map +1 -0
  84. package/dist/dashboard/activity.js +56 -0
  85. package/dist/dashboard/activity.js.map +1 -0
  86. package/dist/dashboard/agent-handoff.d.ts +244 -0
  87. package/dist/dashboard/agent-handoff.d.ts.map +1 -0
  88. package/dist/dashboard/agent-handoff.js +310 -0
  89. package/dist/dashboard/agent-handoff.js.map +1 -0
  90. package/dist/dashboard/bridge-endpoints.d.ts +158 -0
  91. package/dist/dashboard/bridge-endpoints.d.ts.map +1 -0
  92. package/dist/dashboard/bridge-endpoints.js +382 -0
  93. package/dist/dashboard/bridge-endpoints.js.map +1 -0
  94. package/dist/dashboard/bridge-question.d.ts +33 -0
  95. package/dist/dashboard/bridge-question.d.ts.map +1 -0
  96. package/dist/dashboard/bridge-question.js +20 -0
  97. package/dist/dashboard/bridge-question.js.map +1 -0
  98. package/dist/dashboard/bridge-sessions.d.ts +25 -0
  99. package/dist/dashboard/bridge-sessions.d.ts.map +1 -0
  100. package/dist/dashboard/bridge-sessions.js +46 -0
  101. package/dist/dashboard/bridge-sessions.js.map +1 -0
  102. package/dist/dashboard/bridge-starts.d.ts +61 -0
  103. package/dist/dashboard/bridge-starts.d.ts.map +1 -0
  104. package/dist/dashboard/bridge-starts.js +94 -0
  105. package/dist/dashboard/bridge-starts.js.map +1 -0
  106. package/dist/dashboard/bridge-store.d.ts +179 -0
  107. package/dist/dashboard/bridge-store.d.ts.map +1 -0
  108. package/dist/dashboard/bridge-store.js +262 -0
  109. package/dist/dashboard/bridge-store.js.map +1 -0
  110. package/dist/dashboard/bundle.d.ts +12 -0
  111. package/dist/dashboard/bundle.d.ts.map +1 -0
  112. package/dist/dashboard/bundle.js +22 -0
  113. package/dist/dashboard/bundle.js.map +1 -0
  114. package/dist/dashboard/cache.d.ts +47 -0
  115. package/dist/dashboard/cache.d.ts.map +1 -0
  116. package/dist/dashboard/cache.js +87 -0
  117. package/dist/dashboard/cache.js.map +1 -0
  118. package/dist/dashboard/content-type.d.ts +3 -0
  119. package/dist/dashboard/content-type.d.ts.map +1 -0
  120. package/dist/dashboard/content-type.js +31 -0
  121. package/dist/dashboard/content-type.js.map +1 -0
  122. package/dist/dashboard/dashboard.d.ts +38 -0
  123. package/dist/dashboard/dashboard.d.ts.map +1 -0
  124. package/dist/dashboard/dashboard.js +42 -0
  125. package/dist/dashboard/dashboard.js.map +1 -0
  126. package/dist/dashboard/docs.d.ts +39 -0
  127. package/dist/dashboard/docs.d.ts.map +1 -0
  128. package/dist/dashboard/docs.js +59 -0
  129. package/dist/dashboard/docs.js.map +1 -0
  130. package/dist/dashboard/git-status.d.ts +44 -0
  131. package/dist/dashboard/git-status.d.ts.map +1 -0
  132. package/dist/dashboard/git-status.js +37 -0
  133. package/dist/dashboard/git-status.js.map +1 -0
  134. package/dist/dashboard/http.d.ts +29 -0
  135. package/dist/dashboard/http.d.ts.map +1 -0
  136. package/dist/dashboard/http.js +74 -0
  137. package/dist/dashboard/http.js.map +1 -0
  138. package/dist/dashboard/index.d.ts +24 -0
  139. package/dist/dashboard/index.d.ts.map +1 -0
  140. package/dist/dashboard/index.js +23 -0
  141. package/dist/dashboard/index.js.map +1 -0
  142. package/dist/dashboard/interventions.d.ts +67 -0
  143. package/dist/dashboard/interventions.d.ts.map +1 -0
  144. package/dist/dashboard/interventions.js +169 -0
  145. package/dist/dashboard/interventions.js.map +1 -0
  146. package/dist/dashboard/keyed-watcher.d.ts +29 -0
  147. package/dist/dashboard/keyed-watcher.d.ts.map +1 -0
  148. package/dist/dashboard/keyed-watcher.js +42 -0
  149. package/dist/dashboard/keyed-watcher.js.map +1 -0
  150. package/dist/dashboard/keys.d.ts +31 -0
  151. package/dist/dashboard/keys.d.ts.map +1 -0
  152. package/dist/dashboard/keys.js +37 -0
  153. package/dist/dashboard/keys.js.map +1 -0
  154. package/dist/dashboard/models.d.ts +25 -0
  155. package/dist/dashboard/models.d.ts.map +1 -0
  156. package/dist/dashboard/models.js +30 -0
  157. package/dist/dashboard/models.js.map +1 -0
  158. package/dist/dashboard/module-host.d.ts +44 -0
  159. package/dist/dashboard/module-host.d.ts.map +1 -0
  160. package/dist/dashboard/module-host.js +91 -0
  161. package/dist/dashboard/module-host.js.map +1 -0
  162. package/dist/dashboard/module-serve.d.ts +15 -0
  163. package/dist/dashboard/module-serve.d.ts.map +1 -0
  164. package/dist/dashboard/module-serve.js +45 -0
  165. package/dist/dashboard/module-serve.js.map +1 -0
  166. package/dist/dashboard/open-in-app.d.ts +43 -0
  167. package/dist/dashboard/open-in-app.d.ts.map +1 -0
  168. package/dist/dashboard/open-in-app.js +98 -0
  169. package/dist/dashboard/open-in-app.js.map +1 -0
  170. package/dist/dashboard/open-questions.d.ts +45 -0
  171. package/dist/dashboard/open-questions.d.ts.map +1 -0
  172. package/dist/dashboard/open-questions.js +62 -0
  173. package/dist/dashboard/open-questions.js.map +1 -0
  174. package/dist/dashboard/overview.d.ts +78 -0
  175. package/dist/dashboard/overview.d.ts.map +1 -0
  176. package/dist/dashboard/overview.js +87 -0
  177. package/dist/dashboard/overview.js.map +1 -0
  178. package/dist/dashboard/projects.d.ts +101 -0
  179. package/dist/dashboard/projects.d.ts.map +1 -0
  180. package/dist/dashboard/projects.js +63 -0
  181. package/dist/dashboard/projects.js.map +1 -0
  182. package/dist/dashboard/pull-requests.d.ts +127 -0
  183. package/dist/dashboard/pull-requests.d.ts.map +1 -0
  184. package/dist/dashboard/pull-requests.js +137 -0
  185. package/dist/dashboard/pull-requests.js.map +1 -0
  186. package/dist/dashboard/queue.d.ts +17 -0
  187. package/dist/dashboard/queue.d.ts.map +1 -0
  188. package/dist/dashboard/queue.js +19 -0
  189. package/dist/dashboard/queue.js.map +1 -0
  190. package/dist/dashboard/quota.d.ts +53 -0
  191. package/dist/dashboard/quota.d.ts.map +1 -0
  192. package/dist/dashboard/quota.js +42 -0
  193. package/dist/dashboard/quota.js.map +1 -0
  194. package/dist/dashboard/relay-endpoints.d.ts +32 -0
  195. package/dist/dashboard/relay-endpoints.d.ts.map +1 -0
  196. package/dist/dashboard/relay-endpoints.js +115 -0
  197. package/dist/dashboard/relay-endpoints.js.map +1 -0
  198. package/dist/dashboard/remote-run.d.ts +95 -0
  199. package/dist/dashboard/remote-run.d.ts.map +1 -0
  200. package/dist/dashboard/remote-run.js +235 -0
  201. package/dist/dashboard/remote-run.js.map +1 -0
  202. package/dist/dashboard/rpc-serve.d.ts +106 -0
  203. package/dist/dashboard/rpc-serve.d.ts.map +1 -0
  204. package/dist/dashboard/rpc-serve.js +180 -0
  205. package/dist/dashboard/rpc-serve.js.map +1 -0
  206. package/dist/dashboard/run-inbox.d.ts +31 -0
  207. package/dist/dashboard/run-inbox.d.ts.map +1 -0
  208. package/dist/dashboard/run-inbox.js +51 -0
  209. package/dist/dashboard/run-inbox.js.map +1 -0
  210. package/dist/dashboard/server.d.ts +105 -0
  211. package/dist/dashboard/server.d.ts.map +1 -0
  212. package/dist/dashboard/server.js +231 -0
  213. package/dist/dashboard/server.js.map +1 -0
  214. package/dist/dashboard/static.d.ts +9 -0
  215. package/dist/dashboard/static.d.ts.map +1 -0
  216. package/dist/dashboard/static.js +54 -0
  217. package/dist/dashboard/static.js.map +1 -0
  218. package/dist/dashboard/types.d.ts +135 -0
  219. package/dist/dashboard/types.d.ts.map +1 -0
  220. package/dist/dashboard/types.js +2 -0
  221. package/dist/dashboard/types.js.map +1 -0
  222. package/dist/dashboard/web-start-endpoints.d.ts +32 -0
  223. package/dist/dashboard/web-start-endpoints.d.ts.map +1 -0
  224. package/dist/dashboard/web-start-endpoints.js +75 -0
  225. package/dist/dashboard/web-start-endpoints.js.map +1 -0
  226. package/dist/dashboard-bundle/assets/client-CbBRB9m4.js +9 -0
  227. package/dist/dashboard-bundle/assets/jsx-runtime-By8HlURe.js +1 -0
  228. package/dist/dashboard-bundle/assets/main-B98UOA3_.js +140 -0
  229. package/dist/dashboard-bundle/assets/main-ByRjbCiA.css +2 -0
  230. package/dist/dashboard-bundle/assets/module-v213KWfH.js +21 -0
  231. package/dist/dashboard-bundle/assets/react-CZI7_Jkm.js +1 -0
  232. package/dist/dashboard-bundle/assets/react-dom-cJyBB_A4.js +1 -0
  233. package/dist/dashboard-bundle/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  234. package/dist/dashboard-bundle/host/module.js +1 -0
  235. package/dist/dashboard-bundle/host/react-dom-client.js +1 -0
  236. package/dist/dashboard-bundle/host/react-dom.js +1 -0
  237. package/dist/dashboard-bundle/host/react-jsx-runtime.js +1 -0
  238. package/dist/dashboard-bundle/host/react.js +1 -0
  239. package/dist/dashboard-bundle/index.html +42 -0
  240. package/dist/dashboard-bundle/logo-animated.svg +34 -0
  241. package/dist/dashboard-bundle/logo.svg +16 -0
  242. package/dist/dashboard-rpc/context.d.ts +56 -0
  243. package/dist/dashboard-rpc/context.d.ts.map +1 -0
  244. package/dist/dashboard-rpc/context.js +106 -0
  245. package/dist/dashboard-rpc/context.js.map +1 -0
  246. package/dist/dashboard-rpc/control.d.ts +124 -0
  247. package/dist/dashboard-rpc/control.d.ts.map +1 -0
  248. package/dist/dashboard-rpc/control.js +284 -0
  249. package/dist/dashboard-rpc/control.js.map +1 -0
  250. package/dist/dashboard-rpc/devices.d.ts +9 -0
  251. package/dist/dashboard-rpc/devices.d.ts.map +1 -0
  252. package/dist/dashboard-rpc/devices.js +12 -0
  253. package/dist/dashboard-rpc/devices.js.map +1 -0
  254. package/dist/dashboard-rpc/events-tail.d.ts +68 -0
  255. package/dist/dashboard-rpc/events-tail.d.ts.map +1 -0
  256. package/dist/dashboard-rpc/events-tail.js +257 -0
  257. package/dist/dashboard-rpc/events-tail.js.map +1 -0
  258. package/dist/dashboard-rpc/events.d.ts +39 -0
  259. package/dist/dashboard-rpc/events.d.ts.map +1 -0
  260. package/dist/dashboard-rpc/events.js +47 -0
  261. package/dist/dashboard-rpc/events.js.map +1 -0
  262. package/dist/dashboard-rpc/index.d.ts +29 -0
  263. package/dist/dashboard-rpc/index.d.ts.map +1 -0
  264. package/dist/dashboard-rpc/index.js +40 -0
  265. package/dist/dashboard-rpc/index.js.map +1 -0
  266. package/dist/dashboard-rpc/models.d.ts +4 -0
  267. package/dist/dashboard-rpc/models.d.ts.map +1 -0
  268. package/dist/dashboard-rpc/models.js +8 -0
  269. package/dist/dashboard-rpc/models.js.map +1 -0
  270. package/dist/dashboard-rpc/modules.d.ts +45 -0
  271. package/dist/dashboard-rpc/modules.d.ts.map +1 -0
  272. package/dist/dashboard-rpc/modules.js +79 -0
  273. package/dist/dashboard-rpc/modules.js.map +1 -0
  274. package/dist/dashboard-rpc/preferences.d.ts +41 -0
  275. package/dist/dashboard-rpc/preferences.d.ts.map +1 -0
  276. package/dist/dashboard-rpc/preferences.js +65 -0
  277. package/dist/dashboard-rpc/preferences.js.map +1 -0
  278. package/dist/dashboard-rpc/projects.d.ts +85 -0
  279. package/dist/dashboard-rpc/projects.d.ts.map +1 -0
  280. package/dist/dashboard-rpc/projects.js +129 -0
  281. package/dist/dashboard-rpc/projects.js.map +1 -0
  282. package/dist/dashboard-rpc/quota.d.ts +4 -0
  283. package/dist/dashboard-rpc/quota.d.ts.map +1 -0
  284. package/dist/dashboard-rpc/quota.js +15 -0
  285. package/dist/dashboard-rpc/quota.js.map +1 -0
  286. package/dist/dashboard-rpc/reads.d.ts +185 -0
  287. package/dist/dashboard-rpc/reads.d.ts.map +1 -0
  288. package/dist/dashboard-rpc/reads.js +370 -0
  289. package/dist/dashboard-rpc/reads.js.map +1 -0
  290. package/dist/dashboard-rpc/relay-agent.d.ts +9 -0
  291. package/dist/dashboard-rpc/relay-agent.d.ts.map +1 -0
  292. package/dist/dashboard-rpc/relay-agent.js +21 -0
  293. package/dist/dashboard-rpc/relay-agent.js.map +1 -0
  294. package/dist/dashboard-rpc/relay-dispatch.d.ts +9 -0
  295. package/dist/dashboard-rpc/relay-dispatch.d.ts.map +1 -0
  296. package/dist/dashboard-rpc/relay-dispatch.js +24 -0
  297. package/dist/dashboard-rpc/relay-dispatch.js.map +1 -0
  298. package/dist/dashboard-rpc/stream-forward.d.ts +17 -0
  299. package/dist/dashboard-rpc/stream-forward.d.ts.map +1 -0
  300. package/dist/dashboard-rpc/stream-forward.js +38 -0
  301. package/dist/dashboard-rpc/stream-forward.js.map +1 -0
  302. package/dist/dashboard-rpc/test-context.d.ts +23 -0
  303. package/dist/dashboard-rpc/test-context.d.ts.map +1 -0
  304. package/dist/dashboard-rpc/test-context.js +43 -0
  305. package/dist/dashboard-rpc/test-context.js.map +1 -0
  306. package/dist/driver-names.d.ts +22 -0
  307. package/dist/driver-names.d.ts.map +1 -0
  308. package/dist/driver-names.js +29 -0
  309. package/dist/driver-names.js.map +1 -0
  310. package/dist/error-message.d.ts +8 -0
  311. package/dist/error-message.d.ts.map +1 -0
  312. package/dist/error-message.js +10 -0
  313. package/dist/error-message.js.map +1 -0
  314. package/dist/event-stream.d.ts +33 -0
  315. package/dist/event-stream.d.ts.map +1 -0
  316. package/dist/event-stream.js +104 -0
  317. package/dist/event-stream.js.map +1 -0
  318. package/dist/events.d.ts +236 -0
  319. package/dist/events.d.ts.map +1 -0
  320. package/dist/events.js +5 -0
  321. package/dist/events.js.map +1 -0
  322. package/dist/format-bytes.d.ts +3 -0
  323. package/dist/format-bytes.d.ts.map +1 -0
  324. package/dist/format-bytes.js +18 -0
  325. package/dist/format-bytes.js.map +1 -0
  326. package/dist/has-remote.d.ts +8 -0
  327. package/dist/has-remote.d.ts.map +1 -0
  328. package/dist/has-remote.js +10 -0
  329. package/dist/has-remote.js.map +1 -0
  330. package/dist/index.d.ts +42 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +16 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/install.d.ts +31 -0
  335. package/dist/install.d.ts.map +1 -0
  336. package/dist/install.js +54 -0
  337. package/dist/install.js.map +1 -0
  338. package/dist/jsonl-tail.d.ts +59 -0
  339. package/dist/jsonl-tail.d.ts.map +1 -0
  340. package/dist/jsonl-tail.js +152 -0
  341. package/dist/jsonl-tail.js.map +1 -0
  342. package/dist/loopback-host.d.ts +20 -0
  343. package/dist/loopback-host.d.ts.map +1 -0
  344. package/dist/loopback-host.js +31 -0
  345. package/dist/loopback-host.js.map +1 -0
  346. package/dist/module-server.d.ts +56 -0
  347. package/dist/module-types/dashboard/components/DiffStat.d.ts +6 -0
  348. package/dist/module-types/dashboard/components/DriverModelMenu.d.ts +23 -0
  349. package/dist/module-types/dashboard/components/LinkActions.d.ts +26 -0
  350. package/dist/module-types/dashboard/components/Markdown.d.ts +4 -0
  351. package/dist/module-types/dashboard/components/SettingsRows.d.ts +37 -0
  352. package/dist/module-types/dashboard/components/StartAgentButton.d.ts +39 -0
  353. package/dist/module-types/dashboard/components/ui/badge.d.ts +2 -0
  354. package/dist/module-types/dashboard/components/ui/button.d.ts +10 -0
  355. package/dist/module-types/dashboard/components/ui/card.d.ts +5 -0
  356. package/dist/module-types/dashboard/components/ui/checkbox.d.ts +7 -0
  357. package/dist/module-types/dashboard/components/ui/dropdown-menu.d.ts +16 -0
  358. package/dist/module-types/dashboard/components/ui/input.d.ts +2 -0
  359. package/dist/module-types/dashboard/components/ui/option-label.d.ts +4 -0
  360. package/dist/module-types/dashboard/components/ui/popover.d.ts +8 -0
  361. package/dist/module-types/dashboard/components/ui/scroll-area.d.ts +10 -0
  362. package/dist/module-types/dashboard/components/ui/separator.d.ts +3 -0
  363. package/dist/module-types/dashboard/components/ui/skeleton.d.ts +2 -0
  364. package/dist/module-types/dashboard/components/ui/slider.d.ts +9 -0
  365. package/dist/module-types/dashboard/components/ui/tooltip.d.ts +11 -0
  366. package/dist/module-types/dashboard/lib/agent-settings.d.ts +2 -0
  367. package/dist/module-types/dashboard/lib/draft-handoff.d.ts +15 -0
  368. package/dist/module-types/dashboard/lib/format-date.d.ts +51 -0
  369. package/dist/module-types/dashboard/lib/host-services.d.ts +12 -0
  370. package/dist/module-types/dashboard/lib/models.d.ts +24 -0
  371. package/dist/module-types/dashboard/lib/route.d.ts +38 -0
  372. package/dist/module-types/dashboard/lib/rpc.d.ts +31 -0
  373. package/dist/module-types/dashboard/lib/use-action.d.ts +25 -0
  374. package/dist/module-types/dashboard/lib/use-async.d.ts +45 -0
  375. package/dist/module-types/dashboard/lib/use-modules.d.ts +79 -0
  376. package/dist/module-types/dashboard/lib/utils.d.ts +3 -0
  377. package/dist/module-types/dashboard/module/index.d.ts +335 -0
  378. package/dist/module-types/dashboard/rpc/models.d.ts +2 -0
  379. package/dist/module-types/dashboard/rpc/modules.d.ts +5 -0
  380. package/dist/module-types/src/agent-id.d.ts +12 -0
  381. package/dist/module-types/src/agent-locks.d.ts +2 -0
  382. package/dist/module-types/src/agent-view.d.ts +38 -0
  383. package/dist/module-types/src/bridge-browser.d.ts +216 -0
  384. package/dist/module-types/src/browser-stream.d.ts +19 -0
  385. package/dist/module-types/src/browser.d.ts +15 -0
  386. package/dist/module-types/src/built-in.d.ts +37 -0
  387. package/dist/module-types/src/client.d.ts +15 -0
  388. package/dist/module-types/src/cloud-run-state.d.ts +26 -0
  389. package/dist/module-types/src/dashboard/activity.d.ts +40 -0
  390. package/dist/module-types/src/dashboard/agent-handoff.d.ts +243 -0
  391. package/dist/module-types/src/dashboard/bridge-endpoints.d.ts +157 -0
  392. package/dist/module-types/src/dashboard/bridge-question.d.ts +32 -0
  393. package/dist/module-types/src/dashboard/bridge-store.d.ts +178 -0
  394. package/dist/module-types/src/dashboard/cache.d.ts +46 -0
  395. package/dist/module-types/src/dashboard/content-type.d.ts +2 -0
  396. package/dist/module-types/src/dashboard/dashboard.d.ts +37 -0
  397. package/dist/module-types/src/dashboard/docs.d.ts +38 -0
  398. package/dist/module-types/src/dashboard/git-status.d.ts +43 -0
  399. package/dist/module-types/src/dashboard/http.d.ts +28 -0
  400. package/dist/module-types/src/dashboard/interventions.d.ts +66 -0
  401. package/dist/module-types/src/dashboard/keyed-watcher.d.ts +28 -0
  402. package/dist/module-types/src/dashboard/keys.d.ts +30 -0
  403. package/dist/module-types/src/dashboard/models.d.ts +24 -0
  404. package/dist/module-types/src/dashboard/module-host.d.ts +43 -0
  405. package/dist/module-types/src/dashboard/module-serve.d.ts +14 -0
  406. package/dist/module-types/src/dashboard/open-in-app.d.ts +42 -0
  407. package/dist/module-types/src/dashboard/open-questions.d.ts +44 -0
  408. package/dist/module-types/src/dashboard/overview.d.ts +77 -0
  409. package/dist/module-types/src/dashboard/projects.d.ts +100 -0
  410. package/dist/module-types/src/dashboard/pull-requests.d.ts +126 -0
  411. package/dist/module-types/src/dashboard/queue.d.ts +16 -0
  412. package/dist/module-types/src/dashboard/quota.d.ts +52 -0
  413. package/dist/module-types/src/dashboard/remote-run.d.ts +94 -0
  414. package/dist/module-types/src/dashboard/rpc-serve.d.ts +105 -0
  415. package/dist/module-types/src/dashboard/run-inbox.d.ts +30 -0
  416. package/dist/module-types/src/dashboard/types.d.ts +134 -0
  417. package/dist/module-types/src/dashboard-rpc/context.d.ts +55 -0
  418. package/dist/module-types/src/dashboard-rpc/control.d.ts +123 -0
  419. package/dist/module-types/src/dashboard-rpc/devices.d.ts +8 -0
  420. package/dist/module-types/src/dashboard-rpc/events-tail.d.ts +67 -0
  421. package/dist/module-types/src/dashboard-rpc/events.d.ts +38 -0
  422. package/dist/module-types/src/dashboard-rpc/index.d.ts +28 -0
  423. package/dist/module-types/src/dashboard-rpc/models.d.ts +3 -0
  424. package/dist/module-types/src/dashboard-rpc/modules.d.ts +44 -0
  425. package/dist/module-types/src/dashboard-rpc/preferences.d.ts +40 -0
  426. package/dist/module-types/src/dashboard-rpc/projects.d.ts +84 -0
  427. package/dist/module-types/src/dashboard-rpc/quota.d.ts +3 -0
  428. package/dist/module-types/src/dashboard-rpc/reads.d.ts +184 -0
  429. package/dist/module-types/src/dashboard-rpc/relay-agent.d.ts +8 -0
  430. package/dist/module-types/src/dashboard-rpc/stream-forward.d.ts +16 -0
  431. package/dist/module-types/src/driver-names.d.ts +21 -0
  432. package/dist/module-types/src/error-message.d.ts +7 -0
  433. package/dist/module-types/src/event-stream.d.ts +32 -0
  434. package/dist/module-types/src/events.d.ts +235 -0
  435. package/dist/module-types/src/format-bytes.d.ts +2 -0
  436. package/dist/module-types/src/has-remote.d.ts +7 -0
  437. package/dist/module-types/src/index.d.ts +41 -0
  438. package/dist/module-types/src/jsonl-tail.d.ts +58 -0
  439. package/dist/module-types/src/loopback-host.d.ts +19 -0
  440. package/dist/module-types/src/node-fs.d.ts +32 -0
  441. package/dist/module-types/src/open-choices.d.ts +14 -0
  442. package/dist/module-types/src/openagent-dir.d.ts +10 -0
  443. package/dist/module-types/src/openagent-gitignore.d.ts +11 -0
  444. package/dist/module-types/src/pick-directory.d.ts +29 -0
  445. package/dist/module-types/src/preference-defaults.d.ts +42 -0
  446. package/dist/module-types/src/project-commands.d.ts +23 -0
  447. package/dist/module-types/src/project-errors.d.ts +59 -0
  448. package/dist/module-types/src/project-hooks.d.ts +129 -0
  449. package/dist/module-types/src/project-modules.d.ts +49 -0
  450. package/dist/module-types/src/project-presets.d.ts +29 -0
  451. package/dist/module-types/src/project.d.ts +28 -0
  452. package/dist/module-types/src/publish-levels.d.ts +32 -0
  453. package/dist/module-types/src/quota-boundary.d.ts +64 -0
  454. package/dist/module-types/src/quota-poller.d.ts +82 -0
  455. package/dist/module-types/src/registry.d.ts +226 -0
  456. package/dist/module-types/src/store/agent-checkout.d.ts +53 -0
  457. package/dist/module-types/src/store/agent-store.d.ts +266 -0
  458. package/dist/module-types/src/store/branches.d.ts +163 -0
  459. package/dist/module-types/src/store/git-host.d.ts +113 -0
  460. package/dist/module-types/src/store/index.d.ts +9 -0
  461. package/dist/module-types/src/store/provided.d.ts +16 -0
  462. package/dist/module-types/src/store/queue.d.ts +45 -0
  463. package/dist/module-types/src/store/repository.d.ts +32 -0
  464. package/dist/module-types/src/store/run-record.d.ts +21 -0
  465. package/dist/module-types/src/store/runs.d.ts +107 -0
  466. package/dist/module-types/src/store/tickets.d.ts +72 -0
  467. package/dist/module-types/src/terminal.d.ts +3 -0
  468. package/dist/module-types/src/worktrees.d.ts +89 -0
  469. package/dist/module.css +50 -0
  470. package/dist/node-fs.d.ts +33 -0
  471. package/dist/node-fs.d.ts.map +1 -0
  472. package/dist/node-fs.js +57 -0
  473. package/dist/node-fs.js.map +1 -0
  474. package/dist/open-choices.d.ts +15 -0
  475. package/dist/open-choices.d.ts.map +1 -0
  476. package/dist/open-choices.js +31 -0
  477. package/dist/open-choices.js.map +1 -0
  478. package/dist/openagent-dir.d.ts +11 -0
  479. package/dist/openagent-dir.d.ts.map +1 -0
  480. package/dist/openagent-dir.js +11 -0
  481. package/dist/openagent-dir.js.map +1 -0
  482. package/dist/openagent-gitignore.d.ts +12 -0
  483. package/dist/openagent-gitignore.d.ts.map +1 -0
  484. package/dist/openagent-gitignore.js +19 -0
  485. package/dist/openagent-gitignore.js.map +1 -0
  486. package/dist/pick-directory.d.ts +30 -0
  487. package/dist/pick-directory.d.ts.map +1 -0
  488. package/dist/pick-directory.js +102 -0
  489. package/dist/pick-directory.js.map +1 -0
  490. package/dist/preference-defaults.d.ts +43 -0
  491. package/dist/preference-defaults.d.ts.map +1 -0
  492. package/dist/preference-defaults.js +34 -0
  493. package/dist/preference-defaults.js.map +1 -0
  494. package/dist/project-commands.d.ts +24 -0
  495. package/dist/project-commands.d.ts.map +1 -0
  496. package/dist/project-commands.js +57 -0
  497. package/dist/project-commands.js.map +1 -0
  498. package/dist/project-errors.d.ts +60 -0
  499. package/dist/project-errors.d.ts.map +1 -0
  500. package/dist/project-errors.js +51 -0
  501. package/dist/project-errors.js.map +1 -0
  502. package/dist/project-hooks.d.ts +130 -0
  503. package/dist/project-hooks.d.ts.map +1 -0
  504. package/dist/project-hooks.js +232 -0
  505. package/dist/project-hooks.js.map +1 -0
  506. package/dist/project-modules.d.ts +50 -0
  507. package/dist/project-modules.d.ts.map +1 -0
  508. package/dist/project-modules.js +110 -0
  509. package/dist/project-modules.js.map +1 -0
  510. package/dist/project-pass.d.ts +32 -0
  511. package/dist/project-pass.d.ts.map +1 -0
  512. package/dist/project-pass.js +45 -0
  513. package/dist/project-pass.js.map +1 -0
  514. package/dist/project-presets.d.ts +30 -0
  515. package/dist/project-presets.d.ts.map +1 -0
  516. package/dist/project-presets.js +74 -0
  517. package/dist/project-presets.js.map +1 -0
  518. package/dist/project.d.ts +29 -0
  519. package/dist/project.d.ts.map +1 -0
  520. package/dist/project.js +41 -0
  521. package/dist/project.js.map +1 -0
  522. package/dist/publish-levels.d.ts +33 -0
  523. package/dist/publish-levels.d.ts.map +1 -0
  524. package/dist/publish-levels.js +53 -0
  525. package/dist/publish-levels.js.map +1 -0
  526. package/dist/quota-boundary.d.ts +65 -0
  527. package/dist/quota-boundary.d.ts.map +1 -0
  528. package/dist/quota-boundary.js +135 -0
  529. package/dist/quota-boundary.js.map +1 -0
  530. package/dist/quota-poller.d.ts +83 -0
  531. package/dist/quota-poller.d.ts.map +1 -0
  532. package/dist/quota-poller.js +118 -0
  533. package/dist/quota-poller.js.map +1 -0
  534. package/dist/registry.d.ts +227 -0
  535. package/dist/registry.d.ts.map +1 -0
  536. package/dist/registry.js +364 -0
  537. package/dist/registry.js.map +1 -0
  538. package/dist/remove-files.d.ts +24 -0
  539. package/dist/remove-files.d.ts.map +1 -0
  540. package/dist/remove-files.js +98 -0
  541. package/dist/remove-files.js.map +1 -0
  542. package/dist/request-path.d.ts +10 -0
  543. package/dist/request-path.d.ts.map +1 -0
  544. package/dist/request-path.js +16 -0
  545. package/dist/request-path.js.map +1 -0
  546. package/dist/store/agent-checkout.d.ts +54 -0
  547. package/dist/store/agent-checkout.d.ts.map +1 -0
  548. package/dist/store/agent-checkout.js +61 -0
  549. package/dist/store/agent-checkout.js.map +1 -0
  550. package/dist/store/agent-store.d.ts +267 -0
  551. package/dist/store/agent-store.d.ts.map +1 -0
  552. package/dist/store/agent-store.js +190 -0
  553. package/dist/store/agent-store.js.map +1 -0
  554. package/dist/store/branches.d.ts +164 -0
  555. package/dist/store/branches.d.ts.map +1 -0
  556. package/dist/store/branches.js +187 -0
  557. package/dist/store/branches.js.map +1 -0
  558. package/dist/store/git-host.d.ts +114 -0
  559. package/dist/store/git-host.d.ts.map +1 -0
  560. package/dist/store/git-host.js +103 -0
  561. package/dist/store/git-host.js.map +1 -0
  562. package/dist/store/index.d.ts +10 -0
  563. package/dist/store/index.d.ts.map +1 -0
  564. package/dist/store/index.js +10 -0
  565. package/dist/store/index.js.map +1 -0
  566. package/dist/store/provided.d.ts +17 -0
  567. package/dist/store/provided.d.ts.map +1 -0
  568. package/dist/store/provided.js +37 -0
  569. package/dist/store/provided.js.map +1 -0
  570. package/dist/store/queue.d.ts +46 -0
  571. package/dist/store/queue.d.ts.map +1 -0
  572. package/dist/store/queue.js +61 -0
  573. package/dist/store/queue.js.map +1 -0
  574. package/dist/store/repository.d.ts +33 -0
  575. package/dist/store/repository.d.ts.map +1 -0
  576. package/dist/store/repository.js +25 -0
  577. package/dist/store/repository.js.map +1 -0
  578. package/dist/store/run-record.d.ts +22 -0
  579. package/dist/store/run-record.d.ts.map +1 -0
  580. package/dist/store/run-record.js +108 -0
  581. package/dist/store/run-record.js.map +1 -0
  582. package/dist/store/runs.d.ts +108 -0
  583. package/dist/store/runs.d.ts.map +1 -0
  584. package/dist/store/runs.js +146 -0
  585. package/dist/store/runs.js.map +1 -0
  586. package/dist/store/test-branches.d.ts +18 -0
  587. package/dist/store/test-branches.d.ts.map +1 -0
  588. package/dist/store/test-branches.js +59 -0
  589. package/dist/store/test-branches.js.map +1 -0
  590. package/dist/store/test-runs.d.ts +15 -0
  591. package/dist/store/test-runs.d.ts.map +1 -0
  592. package/dist/store/test-runs.js +37 -0
  593. package/dist/store/test-runs.js.map +1 -0
  594. package/dist/store/tickets.d.ts +73 -0
  595. package/dist/store/tickets.d.ts.map +1 -0
  596. package/dist/store/tickets.js +67 -0
  597. package/dist/store/tickets.js.map +1 -0
  598. package/dist/terminal.d.ts +4 -0
  599. package/dist/terminal.d.ts.map +1 -0
  600. package/dist/terminal.js +97 -0
  601. package/dist/terminal.js.map +1 -0
  602. package/dist/update-check.d.ts +44 -0
  603. package/dist/update-check.d.ts.map +1 -0
  604. package/dist/update-check.js +71 -0
  605. package/dist/update-check.js.map +1 -0
  606. package/dist/worktrees.d.ts +90 -0
  607. package/dist/worktrees.d.ts.map +1 -0
  608. package/dist/worktrees.js +123 -0
  609. package/dist/worktrees.js.map +1 -0
  610. package/package.json +103 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-handoff.js","sourceRoot":"","sources":["../../src/dashboard/agent-handoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { BridgeQuestion } from './bridge-question.js';
3
+ export type { BridgeOption, BridgeQuestion } from './bridge-question.js';
4
+ /**
5
+ * The browser bridge (#1237): the one endpoint an extension running in the user's own Claude
6
+ * session posts to, so a question a cloud agent is parked on becomes visible in the dashboard.
7
+ *
8
+ * **Why this route carries its own token, unlike every other one.** The #1051 guard in
9
+ * `startDashboard` only exists on a non-loopback bind, and what protects a loopback daemon is
10
+ * the same-origin check on `/_rpc`: a page on another origin is refused outright. This
11
+ * route is the first that is *meant* to be reached from another origin, so neither of those
12
+ * protects it, and it demands `Authorization: Bearer <daemonToken>` unconditionally instead.
13
+ *
14
+ * **No CORS headers, on purpose.** An extension's service worker holding `host_permissions`
15
+ * fetches without a preflight, so the bridge does not need `Access-Control-Allow-Origin` and
16
+ * must not have it: a wildcard here would let any page the user visits post to their daemon.
17
+ * The cost is that the extension has to post from its background worker rather than from the
18
+ * content script, which is a line in the extension and a much better trade.
19
+ *
20
+ * **What it accepts is deliberately tiny.** One shape, fully validated, with no path, command,
21
+ * prompt or free text anywhere in it. The worst a stolen token buys is a bogus question card in
22
+ * someone's dashboard, which is the point: this is attached to a daemon that spawns processes.
23
+ */
24
+ export declare const BRIDGE_PREFIX = "/_bridge";
25
+ /**
26
+ * The extension version this daemon speaks (#1519). The extension states its own version on
27
+ * every call, in this header, and a daemon expecting another refuses outright: a version-skewed
28
+ * extension does not fail loudly, it half-works — missed messages, silently ignored fields —
29
+ * which reads as an OpenAgent bug and burns a debugging session. The extension's manifest must
30
+ * carry the same number; a test keeps the two in lockstep.
31
+ */
32
+ export declare const EXPECTED_EXTENSION_VERSION = "0.13.0";
33
+ /** The header the extension states its version in. Lowercase, as node presents all headers. */
34
+ export declare const EXTENSION_VERSION_HEADER = "x-oa-extension-version";
35
+ /**
36
+ * One thing a cloud session did, as scraped from its page (#1237).
37
+ *
38
+ * `seq` is the message's position in the transcript, assigned by the extension, and it is what
39
+ * makes this idempotent: the page is re-read on every DOM change, so the same message arrives
40
+ * many times and the daemon keeps one copy per position rather than a growing pile of repeats.
41
+ */
42
+ export interface BridgeEvent {
43
+ sessionId: string;
44
+ seq: number;
45
+ role: 'agent' | 'user';
46
+ text: string;
47
+ receivedAt: string;
48
+ }
49
+ /** What the page half of the bridge reports about itself, for diagnosis. */
50
+ export interface BridgeHello {
51
+ version: string;
52
+ sessionId?: string | undefined;
53
+ note: string;
54
+ at: string;
55
+ }
56
+ /** A cloud session the extension's Driver tab should be serving (#1237, #1332). */
57
+ export interface BridgeSession {
58
+ id: string;
59
+ url: string;
60
+ /**
61
+ * Whether the dashboard holds an answer for it waiting to be typed. Such a session is visited
62
+ * whatever the session list says about it.
63
+ */
64
+ answerQueued: boolean;
65
+ }
66
+ /**
67
+ * What claude.ai's own session list says a session is doing, as the Driver tab reads it (#1332).
68
+ *
69
+ * The list's status icon carries a text label, and these are its words: `awaiting` ("Awaiting
70
+ * input": the session stopped to ask its user), `unread` ("Unread response": it finished a turn
71
+ * nobody has read), `idle`, `running`, `landed` (the label is the session's pull request and
72
+ * its state), `missing` (the list does not show the session at all) and `unknown` — a label
73
+ * the extension does not know, carried verbatim so it can be named rather than guessed at.
74
+ */
75
+ export type BridgeListStatus = 'awaiting' | 'unread' | 'idle' | 'running' | 'landed' | 'missing' | 'unknown';
76
+ /** One session's list status, stamped when the daemon took it. */
77
+ export interface BridgeSessionStatus {
78
+ sessionId: string;
79
+ status: BridgeListStatus;
80
+ /** The list's own label, kept only for `unknown`. */
81
+ label?: string | undefined;
82
+ at: string;
83
+ }
84
+ /**
85
+ * A session the daemon wants the extension to create on claude.ai (#1328).
86
+ *
87
+ * The one shape that travels *out* of the bridge carrying free text, and that direction is what
88
+ * keeps the "deliberately tiny input" rule intact: the daemon writes it, the extension reads it,
89
+ * and what comes back is only an id, a boolean and a session id.
90
+ */
91
+ export interface BridgeStart {
92
+ id: string;
93
+ /** `owner/name`, as the repo picker lists it. */
94
+ repo: string;
95
+ branch: string;
96
+ prompt: string;
97
+ /** The model to pick in claude.ai's model menu before sending (#1697); absent leaves the page's own. */
98
+ model?: string;
99
+ }
100
+ /** What the daemon wires behind the bridge. Absent when the feature is off, which 404s it. */
101
+ export interface BridgeHandlers {
102
+ /** The shared secret every bridge call must present. */
103
+ token: string;
104
+ /**
105
+ * The extension version to insist on (#1519). When set, every route past the token demands a
106
+ * matching {@link EXTENSION_VERSION_HEADER} and answers 426 otherwise — no degraded mode,
107
+ * ping included, so the only path forward from a stale extension is updating it.
108
+ */
109
+ expectedExtensionVersion?: string;
110
+ /** What version the caller claimed and whether it was turned away, for the dashboard. */
111
+ extensionVersion?: (got: string, blocked: boolean) => void;
112
+ record: (question: BridgeQuestion) => void;
113
+ /** Record what the session said, keyed by its position in the transcript. */
114
+ recordEvent?: (event: BridgeEvent) => void;
115
+ /** Note that something reached the bridge, including when it was refused. */
116
+ contact?: (route: string, status: number) => void;
117
+ /** What the injected page script reports about itself. */
118
+ hello?: (hello: BridgeHello) => void;
119
+ /**
120
+ * The cloud sessions worth watching, newest first. The extension cannot know an agent started:
121
+ * it only sees pages the user is already on, so without this the bridge works only when
122
+ * somebody happens to be looking at claude.ai. This is how a tab gets opened for them.
123
+ */
124
+ sessions?: () => Promise<BridgeSession[]>;
125
+ /**
126
+ * What the Driver tab read off claude.ai's session list for the watched sessions (#1332): the
127
+ * read-back a web run's own record cannot give, since the run ends at its hand-off.
128
+ */
129
+ statuses?: (statuses: BridgeSessionStatus[]) => void;
130
+ /**
131
+ * The answer queued in the dashboard for that session, waiting to be delivered (#1237): `text`
132
+ * is exactly what the extension types into the composer, composed by the daemon from labels the
133
+ * session itself offered (#1554).
134
+ */
135
+ answer?: (sessionId: string) => {
136
+ id: string;
137
+ text: string;
138
+ } | undefined;
139
+ /** The extension's word on what a delivery attempt did. */
140
+ answered?: (sessionId: string, id: string, ok: boolean, note?: string) => void;
141
+ /**
142
+ * The next session the daemon wants created, claimed for whoever is asking (#1328). Claiming is
143
+ * the callee's job: two tabs polling must not both be handed the same request, because a
144
+ * duplicate here is a duplicate cloud session on the user's account.
145
+ */
146
+ start?: () => BridgeStart | undefined;
147
+ /** The extension's word on what a creation attempt did (#1328). */
148
+ started?: (id: string, ok: boolean, sessionId?: string, note?: string) => void;
149
+ now?: () => Date;
150
+ }
151
+ /** Route a `/_bridge/*` request. A daemon with the bridge off 404s every route. */
152
+ export declare function handleBridgeRequest(req: IncomingMessage, res: ServerResponse, pathname: string, handlers: BridgeHandlers | undefined): Promise<void>;
153
+ /**
154
+ * `Authorization: Bearer <token>`, compared in constant time. Rejects before the body is read,
155
+ * so an unauthenticated caller cannot make the daemon buffer anything.
156
+ */
157
+ export declare function bearerAuthorized(req: IncomingMessage, token: string): boolean;
158
+ //# sourceMappingURL=bridge-endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-endpoints.d.ts","sourceRoot":"","sources":["../../src/dashboard/bridge-endpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,382 @@
1
+ import { timingSafeEqual } from 'node:crypto';
2
+ import { end, readPost, requireGet, sendJson } from './http.js';
3
+ /**
4
+ * The browser bridge (#1237): the one endpoint an extension running in the user's own Claude
5
+ * session posts to, so a question a cloud agent is parked on becomes visible in the dashboard.
6
+ *
7
+ * **Why this route carries its own token, unlike every other one.** The #1051 guard in
8
+ * `startDashboard` only exists on a non-loopback bind, and what protects a loopback daemon is
9
+ * the same-origin check on `/_rpc`: a page on another origin is refused outright. This
10
+ * route is the first that is *meant* to be reached from another origin, so neither of those
11
+ * protects it, and it demands `Authorization: Bearer <daemonToken>` unconditionally instead.
12
+ *
13
+ * **No CORS headers, on purpose.** An extension's service worker holding `host_permissions`
14
+ * fetches without a preflight, so the bridge does not need `Access-Control-Allow-Origin` and
15
+ * must not have it: a wildcard here would let any page the user visits post to their daemon.
16
+ * The cost is that the extension has to post from its background worker rather than from the
17
+ * content script, which is a line in the extension and a much better trade.
18
+ *
19
+ * **What it accepts is deliberately tiny.** One shape, fully validated, with no path, command,
20
+ * prompt or free text anywhere in it. The worst a stolen token buys is a bogus question card in
21
+ * someone's dashboard, which is the point: this is attached to a daemon that spawns processes.
22
+ */
23
+ export const BRIDGE_PREFIX = '/_bridge';
24
+ /**
25
+ * The extension version this daemon speaks (#1519). The extension states its own version on
26
+ * every call, in this header, and a daemon expecting another refuses outright: a version-skewed
27
+ * extension does not fail loudly, it half-works — missed messages, silently ignored fields —
28
+ * which reads as an OpenAgent bug and burns a debugging session. The extension's manifest must
29
+ * carry the same number; a test keeps the two in lockstep.
30
+ */
31
+ export const EXPECTED_EXTENSION_VERSION = '0.13.0';
32
+ /** The header the extension states its version in. Lowercase, as node presents all headers. */
33
+ export const EXTENSION_VERSION_HEADER = 'x-oa-extension-version';
34
+ const MAX_BODY = 64 * 1024;
35
+ const SESSION_ID = /^session_[A-Za-z0-9]{1,128}$/;
36
+ const MAX_TITLE = 500;
37
+ const MAX_LABEL = 300;
38
+ const MAX_DETAIL = 500;
39
+ const MAX_OPTIONS = 20;
40
+ const MAX_EVENTS_BODY = 512 * 1024;
41
+ const MAX_EVENT_BATCH = 50;
42
+ const MAX_EVENT_TEXT = 8000;
43
+ const MAX_SEQ = 10_000;
44
+ const LIST_STATUSES = new Set(['awaiting', 'unread', 'idle', 'running', 'landed', 'missing', 'unknown']);
45
+ const MAX_STATUSES = 500;
46
+ const MAX_STATUS_LABEL = 80;
47
+ /** Route a `/_bridge/*` request. A daemon with the bridge off 404s every route. */
48
+ export async function handleBridgeRequest(req, res, pathname, handlers) {
49
+ if (!handlers)
50
+ return end(res, 404, 'bridge not enabled');
51
+ seen(handlers, pathname, res);
52
+ if (!bearerAuthorized(req, handlers.token))
53
+ return end(res, 401, 'unauthorized');
54
+ // The version gate (#1519), behind the token so an unauthenticated caller learns nothing.
55
+ if (handlers.expectedExtensionVersion !== undefined) {
56
+ const raw = req.headers[EXTENSION_VERSION_HEADER];
57
+ const got = (typeof raw === 'string' && raw ? raw : 'unknown').slice(0, 32);
58
+ const blocked = got !== handlers.expectedExtensionVersion;
59
+ handlers.extensionVersion?.(got, blocked);
60
+ if (blocked) {
61
+ return end(res, 426, `extension v${got} does not match the v${handlers.expectedExtensionVersion} this daemon expects: update the extension (pull the repo, then reload it at chrome://extensions) and retry`);
62
+ }
63
+ }
64
+ if (pathname === `${BRIDGE_PREFIX}/ping`) {
65
+ if (!requireGet(req, res))
66
+ return;
67
+ return end(res, 200, 'ok');
68
+ }
69
+ if (pathname === `${BRIDGE_PREFIX}/question`)
70
+ return handleQuestion(req, res, handlers);
71
+ if (pathname === `${BRIDGE_PREFIX}/sessions`)
72
+ return handleAgents(req, res, handlers);
73
+ if (pathname === `${BRIDGE_PREFIX}/events`)
74
+ return handleEvents(req, res, handlers);
75
+ if (pathname === `${BRIDGE_PREFIX}/hello`)
76
+ return handleHello(req, res, handlers);
77
+ if (pathname === `${BRIDGE_PREFIX}/statuses`)
78
+ return handleStatuses(req, res, handlers);
79
+ if (pathname === `${BRIDGE_PREFIX}/answer`)
80
+ return handleAnswer(req, res, handlers);
81
+ if (pathname === `${BRIDGE_PREFIX}/answered`)
82
+ return handleAnswered(req, res, handlers);
83
+ if (pathname === `${BRIDGE_PREFIX}/start`)
84
+ return handleStart(req, res, handlers);
85
+ if (pathname === `${BRIDGE_PREFIX}/started`)
86
+ return handleStarted(req, res, handlers);
87
+ end(res, 404, 'not found');
88
+ }
89
+ /**
90
+ * `Authorization: Bearer <token>`, compared in constant time. Rejects before the body is read,
91
+ * so an unauthenticated caller cannot make the daemon buffer anything.
92
+ */
93
+ export function bearerAuthorized(req, token) {
94
+ const header = req.headers.authorization;
95
+ if (typeof header !== 'string' || !header.startsWith('Bearer '))
96
+ return false;
97
+ const given = Buffer.from(header.slice('Bearer '.length));
98
+ const expected = Buffer.from(token);
99
+ // timingSafeEqual throws on a length mismatch, which would itself leak the length.
100
+ if (given.length !== expected.length)
101
+ return false;
102
+ return timingSafeEqual(given, expected);
103
+ }
104
+ /** When the daemon says it is; injectable so a test can pin the timestamps it records. */
105
+ function now(handlers) {
106
+ return (handlers.now ?? (() => new Date()))();
107
+ }
108
+ /** `POST /_bridge/question`: validate hard, record, answer 204. */
109
+ async function handleQuestion(req, res, handlers) {
110
+ const body = await readPost(req, res, MAX_BODY);
111
+ if (body === undefined)
112
+ return;
113
+ const question = validate(body, now(handlers));
114
+ if (typeof question === 'string')
115
+ return end(res, 400, question);
116
+ handlers.record(question);
117
+ end(res, 204, '');
118
+ }
119
+ /**
120
+ * The session a posted body names, or the reason it names none. Both bodies the extension posts
121
+ * are addressed to one cloud session and are refused the same way when they are not — one rule,
122
+ * one message, so a caller cannot learn a different thing from each route.
123
+ */
124
+ function bodySessionId(body) {
125
+ if (typeof body !== 'object' || body === null)
126
+ return 'body must be an object';
127
+ const raw = body;
128
+ const sessionId = raw.sessionId;
129
+ if (typeof sessionId !== 'string' || !SESSION_ID.test(sessionId))
130
+ return 'sessionId must look like session_<id>';
131
+ return { sessionId, raw };
132
+ }
133
+ /**
134
+ * Every field checked, with a reason on rejection. Unknown keys are dropped rather than
135
+ * refused, so a newer extension posting an extra field still works against an older daemon.
136
+ */
137
+ function validate(body, now) {
138
+ const named = bodySessionId(body);
139
+ if (typeof named === 'string')
140
+ return named;
141
+ const { sessionId, raw } = named;
142
+ const title = raw.title;
143
+ if (typeof title !== 'string' || !title.trim() || title.length > MAX_TITLE)
144
+ return `title must be a string of 1 to ${MAX_TITLE} characters`;
145
+ if (!Array.isArray(raw.options) || raw.options.length === 0)
146
+ return 'options must be a non-empty array';
147
+ if (raw.options.length > MAX_OPTIONS)
148
+ return `options must hold at most ${MAX_OPTIONS} entries`;
149
+ const options = [];
150
+ for (const entry of raw.options) {
151
+ if (typeof entry !== 'object' || entry === null)
152
+ return 'each option must be an object';
153
+ const { label, detail, default: preset, stop } = entry;
154
+ if (typeof label !== 'string' || !label.trim() || label.length > MAX_LABEL)
155
+ return `each option needs a label of 1 to ${MAX_LABEL} characters`;
156
+ if (detail !== undefined && (typeof detail !== 'string' || detail.length > MAX_DETAIL))
157
+ return `an option detail must be a string of at most ${MAX_DETAIL} characters`;
158
+ if (preset !== undefined && typeof preset !== 'boolean')
159
+ return 'an option default must be a boolean';
160
+ if (stop !== undefined && typeof stop !== 'boolean')
161
+ return 'an option stop must be a boolean';
162
+ options.push({
163
+ label,
164
+ ...(typeof detail === 'string' && detail ? { detail } : {}),
165
+ ...(preset === true ? { default: true } : {}),
166
+ ...(stop === true ? { stop: true } : {}),
167
+ });
168
+ }
169
+ if (new Set(options.map(o => o.label)).size !== options.length)
170
+ return 'option labels must be distinct';
171
+ const multi = raw.multi;
172
+ if (multi !== undefined && typeof multi !== 'boolean')
173
+ return 'multi must be a boolean';
174
+ const recommended = raw.recommended;
175
+ if (recommended !== undefined && (typeof recommended !== 'string' || recommended.length > MAX_LABEL)) {
176
+ return 'recommended must be a string naming one of the option labels';
177
+ }
178
+ // A recommendation that names no option would render a default the user cannot see.
179
+ if (typeof recommended === 'string' && recommended && !options.some(o => o.label === recommended)) {
180
+ return 'recommended must match one of the option labels';
181
+ }
182
+ return {
183
+ sessionId,
184
+ title,
185
+ options,
186
+ ...(typeof recommended === 'string' && recommended ? { recommended } : {}),
187
+ ...(multi === true ? { multi: true } : {}),
188
+ receivedAt: now.toISOString(),
189
+ };
190
+ }
191
+ /**
192
+ * `POST /_bridge/hello`: what the page half of the bridge is doing.
193
+ *
194
+ * Diagnosis kept needing a screenshot of a panel, which meant every wrong guess cost a round
195
+ * trip through a person. This lets the extension say for itself which version is injected and
196
+ * what its last scrape found, so the daemon can be asked instead.
197
+ */
198
+ async function handleHello(req, res, handlers) {
199
+ const body = await readPost(req, res, MAX_BODY);
200
+ if (body === undefined)
201
+ return;
202
+ const raw = (typeof body === 'object' && body !== null ? body : {});
203
+ handlers.hello?.({
204
+ version: typeof raw.version === 'string' ? raw.version.slice(0, 32) : 'unknown',
205
+ sessionId: typeof raw.sessionId === 'string' && SESSION_ID.test(raw.sessionId) ? raw.sessionId : undefined,
206
+ note: typeof raw.note === 'string' ? raw.note.slice(0, 300) : '',
207
+ at: now(handlers).toISOString(),
208
+ });
209
+ end(res, 204, '');
210
+ }
211
+ /** `POST /_bridge/events`: record a batch of transcript entries. */
212
+ async function handleEvents(req, res, handlers) {
213
+ // The method is checked here rather than left to `readPost`, so that a wrong method is refused
214
+ // ahead of the un-wired 404: a GET on a daemon with events off is still a wrong method.
215
+ if (req.method !== 'POST')
216
+ return end(res, 405, 'method not allowed', { allow: 'POST' });
217
+ if (!handlers.recordEvent)
218
+ return end(res, 404, 'events not enabled');
219
+ const body = await readPost(req, res, MAX_EVENTS_BODY);
220
+ if (body === undefined)
221
+ return;
222
+ const events = validateEvents(body, now(handlers));
223
+ if (typeof events === 'string')
224
+ return end(res, 400, events);
225
+ for (const event of events)
226
+ handlers.recordEvent(event);
227
+ end(res, 204, '');
228
+ }
229
+ /**
230
+ * A batch, validated entry by entry. Rejects the whole batch on a bad entry rather than taking
231
+ * the good ones: a partial accept would leave gaps in the sequence the reader cannot distinguish
232
+ * from a message that has not arrived yet.
233
+ */
234
+ function validateEvents(body, now) {
235
+ const named = bodySessionId(body);
236
+ if (typeof named === 'string')
237
+ return named;
238
+ const { sessionId, raw } = named;
239
+ if (!Array.isArray(raw.events) || raw.events.length === 0)
240
+ return 'events must be a non-empty array';
241
+ if (raw.events.length > MAX_EVENT_BATCH)
242
+ return `events must hold at most ${MAX_EVENT_BATCH} entries`;
243
+ const out = [];
244
+ for (const entry of raw.events) {
245
+ if (typeof entry !== 'object' || entry === null)
246
+ return 'each event must be an object';
247
+ const { seq, role, text } = entry;
248
+ if (typeof seq !== 'number' || !Number.isInteger(seq) || seq < 0 || seq > MAX_SEQ)
249
+ return 'each event needs an integer seq';
250
+ if (role !== 'agent' && role !== 'user')
251
+ return 'each event needs a role of agent or user';
252
+ if (typeof text !== 'string' || !text.trim())
253
+ return 'each event needs text';
254
+ out.push({ sessionId, seq, role, text: text.slice(0, MAX_EVENT_TEXT), receivedAt: now.toISOString() });
255
+ }
256
+ return out;
257
+ }
258
+ /** `POST /_bridge/statuses`: what claude.ai's session list says about each watched session (#1332). */
259
+ async function handleStatuses(req, res, handlers) {
260
+ const body = await readPost(req, res, MAX_BODY);
261
+ if (body === undefined)
262
+ return;
263
+ const statuses = validateStatuses(body, now(handlers));
264
+ if (typeof statuses === 'string')
265
+ return end(res, 400, statuses);
266
+ handlers.statuses?.(statuses);
267
+ end(res, 204, '');
268
+ }
269
+ /** A batch of list statuses, validated entry by entry; one bad entry refuses the batch. */
270
+ function validateStatuses(body, now) {
271
+ if (typeof body !== 'object' || body === null)
272
+ return 'body must be an object';
273
+ const raw = body.statuses;
274
+ if (!Array.isArray(raw) || raw.length === 0)
275
+ return 'statuses must be a non-empty array';
276
+ if (raw.length > MAX_STATUSES)
277
+ return `statuses must hold at most ${MAX_STATUSES} entries`;
278
+ const out = [];
279
+ for (const entry of raw) {
280
+ if (typeof entry !== 'object' || entry === null)
281
+ return 'each status must be an object';
282
+ const { sessionId, status, label } = entry;
283
+ if (typeof sessionId !== 'string' || !SESSION_ID.test(sessionId))
284
+ return 'each status needs a sessionId that looks like session_<id>';
285
+ if (typeof status !== 'string' || !LIST_STATUSES.has(status))
286
+ return `each status must be one of ${[...LIST_STATUSES].join(', ')}`;
287
+ if (label !== undefined && typeof label !== 'string')
288
+ return 'label must be a string';
289
+ out.push({
290
+ sessionId,
291
+ status: status,
292
+ ...(typeof label === 'string' && label ? { label: label.slice(0, MAX_STATUS_LABEL) } : {}),
293
+ at: now.toISOString(),
294
+ });
295
+ }
296
+ return out;
297
+ }
298
+ /**
299
+ * `GET /_bridge/answer?sessionId=...`: the answer the dashboard queued for that session (#1237).
300
+ *
301
+ * Always 200 with `{answer: ...}`, null when there is nothing to deliver, so the extension can
302
+ * poll it blindly. Degrades to null on a daemon that wired no answer source, same as `sessions`.
303
+ */
304
+ async function handleAnswer(req, res, handlers) {
305
+ if (!requireGet(req, res))
306
+ return;
307
+ const sessionId = new URL(req.url ?? '', 'http://bridge.invalid').searchParams.get('sessionId');
308
+ if (typeof sessionId !== 'string' || !SESSION_ID.test(sessionId))
309
+ return end(res, 400, 'sessionId must look like session_<id>');
310
+ sendJson(res, { answer: handlers.answer?.(sessionId) ?? null });
311
+ }
312
+ /** `POST /_bridge/answered`: what the extension's delivery attempt did. */
313
+ async function handleAnswered(req, res, handlers) {
314
+ const body = await readPost(req, res, MAX_BODY);
315
+ if (body === undefined)
316
+ return;
317
+ if (typeof body !== 'object' || body === null)
318
+ return end(res, 400, 'body must be an object');
319
+ const { sessionId, id, ok, note } = body;
320
+ if (typeof sessionId !== 'string' || !SESSION_ID.test(sessionId))
321
+ return end(res, 400, 'sessionId must look like session_<id>');
322
+ if (typeof id !== 'string' || !id || id.length > 64)
323
+ return end(res, 400, 'id must be the answer id');
324
+ if (typeof ok !== 'boolean')
325
+ return end(res, 400, 'ok must be a boolean');
326
+ if (note !== undefined && typeof note !== 'string')
327
+ return end(res, 400, 'note must be a string');
328
+ handlers.answered?.(sessionId, id, ok, typeof note === 'string' ? note.slice(0, 300) : undefined);
329
+ end(res, 204, '');
330
+ }
331
+ /**
332
+ * `GET /_bridge/start`: the next session the daemon wants created, claimed by this call (#1328).
333
+ *
334
+ * Always 200 with `{start: ...}`, null when there is nothing to do, so the extension polls it
335
+ * blindly alongside `/answer`; null too on a daemon that wired no queue. A GET that mutates, and
336
+ * the mutation is the point: handing the same request to two polling tabs would create two cloud
337
+ * sessions, so taking it off the queue has to happen in the same step as reading it.
338
+ */
339
+ async function handleStart(req, res, handlers) {
340
+ if (!requireGet(req, res))
341
+ return;
342
+ sendJson(res, { start: handlers.start?.() ?? null });
343
+ }
344
+ /** `POST /_bridge/started`: what the extension's creation attempt did (#1328). */
345
+ async function handleStarted(req, res, handlers) {
346
+ const body = await readPost(req, res, MAX_BODY);
347
+ if (body === undefined)
348
+ return;
349
+ if (typeof body !== 'object' || body === null)
350
+ return end(res, 400, 'body must be an object');
351
+ const { id, ok, sessionId, note } = body;
352
+ if (typeof id !== 'string' || !id || id.length > 64)
353
+ return end(res, 400, 'id must be the start request id');
354
+ if (typeof ok !== 'boolean')
355
+ return end(res, 400, 'ok must be a boolean');
356
+ if (sessionId !== undefined && (typeof sessionId !== 'string' || !SESSION_ID.test(sessionId))) {
357
+ return end(res, 400, 'sessionId must look like session_<id>');
358
+ }
359
+ if (note !== undefined && typeof note !== 'string')
360
+ return end(res, 400, 'note must be a string');
361
+ // A failure's note is the only diagnosis the run gets, so it may carry the page's controls.
362
+ handlers.started?.(id, ok, typeof sessionId === 'string' ? sessionId : undefined, typeof note === 'string' ? note.slice(0, 1500) : undefined);
363
+ end(res, 204, '');
364
+ }
365
+ /**
366
+ * `GET /_bridge/sessions`: the cloud sessions the extension's Driver tab should be serving.
367
+ *
368
+ * Answers an empty list rather than a 404 when the daemon wired no lister, so an extension
369
+ * polling an older daemon degrades to doing nothing instead of reporting a fault.
370
+ */
371
+ async function handleAgents(req, res, handlers) {
372
+ if (!requireGet(req, res))
373
+ return;
374
+ sendJson(res, { sessions: handlers.sessions ? await handlers.sessions().catch(() => []) : [] });
375
+ }
376
+ /** Wrap a route so its outcome is recorded whatever it was. */
377
+ function seen(handlers, pathname, res) {
378
+ if (!handlers.contact)
379
+ return;
380
+ res.once('finish', () => handlers.contact?.(pathname, res.statusCode));
381
+ }
382
+ //# sourceMappingURL=bridge-endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-endpoints.js","sourceRoot":"","sources":["../../src/dashboard/bridge-endpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ChoiceRequest } from '../events.js';
2
+ /** One answer a bridged question offers: the same fields an `await-choices` option carries. */
3
+ export interface BridgeOption {
4
+ label: string;
5
+ detail?: string;
6
+ /** Starts checked, on a `multi` question. */
7
+ default?: boolean;
8
+ /** Picking it hands the session back to the user instead of continuing it (#358). */
9
+ stop?: boolean;
10
+ }
11
+ /**
12
+ * A question a cloud session is parked on, as reported by the bridge. The shape of the session's
13
+ * own `await-choices` block (#1554), keyed by label rather than id: the page shows labels, and a
14
+ * label is what the extension can type back.
15
+ */
16
+ export interface BridgeQuestion {
17
+ /** The cloud session that asked, which joins back to an agent through `AgentMeta.sessionId`. */
18
+ sessionId: string;
19
+ title: string;
20
+ options: BridgeOption[];
21
+ recommended?: string;
22
+ /** Several answers at once (#332): the pick is a subset of labels rather than one. */
23
+ multi?: boolean;
24
+ /** When the daemon accepted it. Set by the daemon, never by the caller. */
25
+ receivedAt: string;
26
+ }
27
+ /**
28
+ * A bridged question as the gate panel renders it (#1554): the same `ChoiceRequest` a local
29
+ * agent's `choice` event carries, with the labels standing in for ids — a claude.ai page has no
30
+ * ids, and the label is what can be typed back into it.
31
+ */
32
+ export declare function bridgeChoiceRequest(question: BridgeQuestion): ChoiceRequest;
33
+ //# sourceMappingURL=bridge-question.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-question.d.ts","sourceRoot":"","sources":["../../src/dashboard/bridge-question.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAOjD,+FAA+F;AAC/F,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAa3E"}