@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":"interventions.js","sourceRoot":"","sources":["../../src/dashboard/interventions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Tracks which items have been announced, so only new ones notify. Identity is the caller's
3
+ * (`keyOf`), since what makes two items "the same" is a property of what is being watched.
4
+ * Testable without timers.
5
+ *
6
+ * The baseline is kept per project (`scopeOf`), not once for the whole poll (#1623). A poll that
7
+ * reached three projects out of four knows what already existed on those three and knows nothing
8
+ * about the fourth, and announcing is a per-project decision anyway. Held globally, one project
9
+ * that can never be read — a registered repo with no remote is an ordinary case — would either
10
+ * silence every project's notifications or hand the whole set a baseline it had not earned.
11
+ */
12
+ export declare class SeenTracker<T> {
13
+ private readonly keyOf;
14
+ private readonly scopeOf;
15
+ private readonly seen;
16
+ private readonly warmedUp;
17
+ constructor(keyOf: (item: T) => string, scopeOf: (item: T) => string);
18
+ /**
19
+ * Fold a poll's items into the baseline and return the ones worth announcing: the items not seen
20
+ * before, from projects this watcher has a real baseline for. `whole` names the projects the poll
21
+ * read completely, and only those earn a baseline — so whatever already existed at start-up is
22
+ * never announced, and a project that could not be read stays quiet until it can be.
23
+ *
24
+ * Items keep being folded in either way: a partial read can only under-report, never invent, so
25
+ * anything it did see is still something the user should not later hear about as new.
26
+ */
27
+ observe(items: T[], whole: Iterable<string>): T[];
28
+ }
29
+ //# sourceMappingURL=keyed-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-watcher.d.ts","sourceRoot":"","sources":["../../src/dashboard/keyed-watcher.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,qBAAa,WAAW,CAAC,CAAC;IAKtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAE7C,YACmB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC3C;IAEJ;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAOhD;CACF"}
@@ -0,0 +1,42 @@
1
+ // The baseline half of the browser's notifications (#627): what a feed already held versus what
2
+ // is new. One engine, two feeds: the "needs you" queue and the "New activity" feed. They differ
3
+ // only in how an item is identified, so that is a parameter rather than a second copy.
4
+ /**
5
+ * Tracks which items have been announced, so only new ones notify. Identity is the caller's
6
+ * (`keyOf`), since what makes two items "the same" is a property of what is being watched.
7
+ * Testable without timers.
8
+ *
9
+ * The baseline is kept per project (`scopeOf`), not once for the whole poll (#1623). A poll that
10
+ * reached three projects out of four knows what already existed on those three and knows nothing
11
+ * about the fourth, and announcing is a per-project decision anyway. Held globally, one project
12
+ * that can never be read — a registered repo with no remote is an ordinary case — would either
13
+ * silence every project's notifications or hand the whole set a baseline it had not earned.
14
+ */
15
+ export class SeenTracker {
16
+ keyOf;
17
+ scopeOf;
18
+ seen = new Set();
19
+ warmedUp = new Set();
20
+ constructor(keyOf, scopeOf) {
21
+ this.keyOf = keyOf;
22
+ this.scopeOf = scopeOf;
23
+ }
24
+ /**
25
+ * Fold a poll's items into the baseline and return the ones worth announcing: the items not seen
26
+ * before, from projects this watcher has a real baseline for. `whole` names the projects the poll
27
+ * read completely, and only those earn a baseline — so whatever already existed at start-up is
28
+ * never announced, and a project that could not be read stays quiet until it can be.
29
+ *
30
+ * Items keep being folded in either way: a partial read can only under-report, never invent, so
31
+ * anything it did see is still something the user should not later hear about as new.
32
+ */
33
+ observe(items, whole) {
34
+ const fresh = items.filter(item => this.warmedUp.has(this.scopeOf(item)) && !this.seen.has(this.keyOf(item)));
35
+ for (const item of items)
36
+ this.seen.add(this.keyOf(item));
37
+ for (const project of whole)
38
+ this.warmedUp.add(project);
39
+ return fresh;
40
+ }
41
+ }
42
+ //# sourceMappingURL=keyed-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-watcher.js","sourceRoot":"","sources":["../../src/dashboard/keyed-watcher.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,gGAAgG;AAChG,uFAAuF;AAEvF;;;;;;;;;;GAUG;AACH,MAAM,OAAO,WAAW;IAKH,KAAK;IACL,OAAO;IALT,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IACxB,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAE7C,YACmB,KAA0B,EAC1B,OAA4B;qBAD5B,KAAK;uBACL,OAAO;IACvB,CAAC;IAEJ;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAU,EAAE,KAAuB;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CACxB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAClF,CAAA;QACD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,KAAK,MAAM,OAAO,IAAI,KAAK;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
@@ -0,0 +1,31 @@
1
+ import type { Activity } from './activity.js';
2
+ import type { Intervention } from './interventions.js';
3
+ /**
4
+ * The stable identity of a watched item, which the browser notifications dedupe on.
5
+ *
6
+ * A leaf module on purpose: `activity.ts` and `interventions.ts` build their items by reading the
7
+ * store, so they import `node:*` and cannot be reached from the browser bundle. These functions
8
+ * are pure and depend on nothing but the item, so they live here and are re-exported from
9
+ * `client.ts` — which is what lets the dashboard share them instead of keeping a copy that could
10
+ * drift from the item types.
11
+ *
12
+ * The type imports are erased at compile time, so they add no edge to the graph `client.test.ts`
13
+ * walks.
14
+ */
15
+ /**
16
+ * The stable identity of an intervention. A PR is its url (survives title edits and re-sorts);
17
+ * the other two have no url and are keyed on the project plus the thing waiting — the agent and
18
+ * the gate it is parked on, or the agent whose branch is unpushed.
19
+ *
20
+ * The agent is part of the awaiting key because a gate id is only unique within its own agent:
21
+ * every agent's first gate is `await-choices`. Two agents running in one project (#736) and both
22
+ * parked would otherwise share one identity, and the dedupe would announce only one of them.
23
+ */
24
+ export declare function interventionKey(item: Intervention): string;
25
+ /**
26
+ * The stable identity of an activity item: its kind + project + run. The kind is part of the key
27
+ * so an agent's `started` and `finished` are two separate announcements (one when it kicks off, one
28
+ * when it lands), each firing exactly once.
29
+ */
30
+ export declare function activityKey(item: Activity): string;
31
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/dashboard/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;;;;;;;;GAWG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAElD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The stable identity of a watched item, which the browser notifications dedupe on.
3
+ *
4
+ * A leaf module on purpose: `activity.ts` and `interventions.ts` build their items by reading the
5
+ * store, so they import `node:*` and cannot be reached from the browser bundle. These functions
6
+ * are pure and depend on nothing but the item, so they live here and are re-exported from
7
+ * `client.ts` — which is what lets the dashboard share them instead of keeping a copy that could
8
+ * drift from the item types.
9
+ *
10
+ * The type imports are erased at compile time, so they add no edge to the graph `client.test.ts`
11
+ * walks.
12
+ */
13
+ /**
14
+ * The stable identity of an intervention. A PR is its url (survives title edits and re-sorts);
15
+ * the other two have no url and are keyed on the project plus the thing waiting — the agent and
16
+ * the gate it is parked on, or the agent whose branch is unpushed.
17
+ *
18
+ * The agent is part of the awaiting key because a gate id is only unique within its own agent:
19
+ * every agent's first gate is `await-choices`. Two agents running in one project (#736) and both
20
+ * parked would otherwise share one identity, and the dedupe would announce only one of them.
21
+ */
22
+ export function interventionKey(item) {
23
+ if (item.kind === 'awaiting')
24
+ return `awaiting:${item.projectId}:${item.agentId ?? ''}:${item.awaitId ?? ''}`;
25
+ if (item.kind === 'unpushed')
26
+ return `unpushed:${item.projectId}:${item.agentId ?? ''}`;
27
+ return item.url ?? '';
28
+ }
29
+ /**
30
+ * The stable identity of an activity item: its kind + project + run. The kind is part of the key
31
+ * so an agent's `started` and `finished` are two separate announcements (one when it kicks off, one
32
+ * when it lands), each firing exactly once.
33
+ */
34
+ export function activityKey(item) {
35
+ return `${item.kind}:${item.projectId}:${item.agentId}`;
36
+ }
37
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/dashboard/keys.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,YAAY,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;IAC7G,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,YAAY,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;IACvF,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,CAAA;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;AACzD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { Driver, DriverModel } from '@openagt/agent-driver';
2
+ import { type DriverName } from '../driver-names.js';
3
+ /** What one coding agent offers: its models, or why it could not say. */
4
+ export type DriverModels = {
5
+ models: DriverModel[];
6
+ } | {
7
+ models: [];
8
+ error: string;
9
+ };
10
+ /** The models of every coding agent a person can pick, by driver. */
11
+ export type ModelsView = Record<DriverName, DriverModels>;
12
+ /** Where the dashboard reads which models each coding agent offers. */
13
+ export interface ModelsSource {
14
+ read(): Promise<ModelsView>;
15
+ }
16
+ /**
17
+ * Ask each coding agent for its models, once: the first read asks, every later read answers from
18
+ * what it said, for the daemon's life. The list changes only with a new CLI version or a new
19
+ * login, and each question starts a CLI, so a menu opened again never waits on one. An agent that
20
+ * could not say is asked again at the next read, so a CLI installed or logged in since is found.
21
+ */
22
+ export declare function cachedModelsSource(drivers: Record<DriverName, Pick<Driver, 'listModels'>>): ModelsSource;
23
+ /** The daemon's own source: the coding agents on this machine, asked as the person's own login. */
24
+ export declare function defaultModelsSource(): ModelsSource;
25
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/dashboard/models.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE7D,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpF,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;AAEzD,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,GAAG,YAAY,CAkBxG;AAED,mGAAmG;AACnG,wBAAgB,mBAAmB,IAAI,YAAY,CAElD"}
@@ -0,0 +1,30 @@
1
+ import { ClaudeCodeDriver } from '@openagt/agent-driver-claude';
2
+ import { CodexDriver } from '@openagt/agent-driver-codex';
3
+ import { DRIVERS } from '../driver-names.js';
4
+ /**
5
+ * Ask each coding agent for its models, once: the first read asks, every later read answers from
6
+ * what it said, for the daemon's life. The list changes only with a new CLI version or a new
7
+ * login, and each question starts a CLI, so a menu opened again never waits on one. An agent that
8
+ * could not say is asked again at the next read, so a CLI installed or logged in since is found.
9
+ */
10
+ export function cachedModelsSource(drivers) {
11
+ const asked = new Map();
12
+ const ask = (name) => {
13
+ let answer = asked.get(name);
14
+ if (!answer) {
15
+ const listModels = drivers[name].listModels;
16
+ answer = listModels ? listModels.call(drivers[name]) : Promise.reject(new Error('this agent cannot list its models'));
17
+ asked.set(name, answer);
18
+ answer.catch(() => asked.delete(name));
19
+ }
20
+ return answer.then(models => ({ models }), (err) => ({ models: [], error: err instanceof Error ? err.message : String(err) }));
21
+ };
22
+ return {
23
+ read: async () => Object.fromEntries(await Promise.all(DRIVERS.map(async (name) => [name, await ask(name)]))),
24
+ };
25
+ }
26
+ /** The daemon's own source: the coding agents on this machine, asked as the person's own login. */
27
+ export function defaultModelsSource() {
28
+ return cachedModelsSource({ 'claude-code': new ClaudeCodeDriver(), codex: new CodexDriver() });
29
+ }
30
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/dashboard/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,OAAO,EAAE,OAAO,EAAmB,MAAM,oBAAoB,CAAA;AAa7D;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAuD;IACxF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsC,CAAA;IAC3D,MAAM,GAAG,GAAG,CAAC,IAAgB,EAAyB,EAAE;QACtD,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAA;YAC3C,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAA;YACrH,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YACvB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EACtB,CAAC,GAAY,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAC5F,CAAA;IACH,CAAC,CAAA;IACD,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,CAAU,CAAC,CAAC,CAAe;KACnI,CAAA;AACH,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,mBAAmB;IACjC,OAAO,kBAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,EAAE,EAAE,CAAC,CAAA;AAChG,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { type BranchesFor } from '../store/index.js';
2
+ import { type LinkedPr } from './pull-requests.js';
3
+ import type { Cached } from './cache.js';
4
+ import type { ModuleServerHost } from '../module-server.js';
5
+ /** What {@link serverHost} reads through; each defaults to the production reader. */
6
+ export interface ServerHostDeps {
7
+ branches?: BranchesFor;
8
+ agent?: (root: string, agentId: string) => Promise<{
9
+ id: string;
10
+ status?: string;
11
+ host?: string;
12
+ branch?: string;
13
+ pr?: {
14
+ number: number;
15
+ };
16
+ base?: string;
17
+ baseCommit?: string;
18
+ landed?: string;
19
+ } | undefined>;
20
+ /** This machine's name, against a run's `host`. */
21
+ host?: string;
22
+ prs?: (root: string, branch: string) => Promise<Cached<LinkedPr[]>>;
23
+ }
24
+ /** The host a read of the project at `root` is given. */
25
+ export declare function serverHost(root: string, deps?: ServerHostDeps): ModuleServerHost;
26
+ /** How large the input of one read may be, as JSON: what a page asks with, never a payload. */
27
+ export declare const MAX_READ_INPUT: number;
28
+ /** How long one read may take before it answers an error instead. */
29
+ export declare const READ_TIMEOUT_MS = 20000;
30
+ /** What a read answered: its JSON, or why there is none. */
31
+ export type ModuleReadResult = {
32
+ ok: true;
33
+ output: unknown;
34
+ } | {
35
+ ok: false;
36
+ error: string;
37
+ };
38
+ /**
39
+ * Call read `name` of the server part at `file` with `host` and `input`. Refused: a part that did
40
+ * not load, a read it does not have, an input that is not an object or is too large. A read that
41
+ * throws or runs past {@link READ_TIMEOUT_MS} answers an error; nothing a read does stops the daemon.
42
+ */
43
+ export declare function callModuleRead(file: string, name: string, host: ModuleServerHost, input: unknown, timeoutMs?: number): Promise<ModuleReadResult>;
44
+ //# sourceMappingURL=module-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-host.d.ts","sourceRoot":"","sources":["../../src/dashboard/module-host.ts"],"names":[],"mappings":"AACA,OAAO,EAAqD,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEvG,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAA0D,gBAAgB,EAAY,MAAM,qBAAqB,CAAA;AAM7H,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;IAC7M,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;CACpE;AAED,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,gBAAgB,CAkCpF;AAoBD,+FAA+F;AAC/F,eAAO,MAAM,cAAc,QAAY,CAAA;AACvC,qEAAqE;AACrE,eAAO,MAAM,eAAe,QAAS,CAAA;AAErC,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3F;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,SAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsB/J"}
@@ -0,0 +1,91 @@
1
+ import { pathToFileURL } from 'node:url';
2
+ import { findAgent, findCheckout, isRunId, projectBranches } from '../store/index.js';
3
+ import { agentBranchFor, leftNothing } from './agent-handoff.js';
4
+ import { cachedPrsForBranch } from './pull-requests.js';
5
+ /** The host a read of the project at `root` is given. */
6
+ export function serverHost(root, deps = {}) {
7
+ return {
8
+ root,
9
+ async run(agentId) {
10
+ if (typeof agentId !== 'string' || !isRunId(agentId))
11
+ return undefined;
12
+ const checkout = await findCheckout(root, agentId, deps.branches ?? projectBranches);
13
+ const agent = await (deps.agent ?? findAgent)(root, agentId).catch(() => undefined);
14
+ if (!checkout && !agent)
15
+ return undefined;
16
+ const branch = agent && agentBranchFor(agent);
17
+ return {
18
+ ...(checkout ? { checkout: checkout.path } : {}),
19
+ ...(agent
20
+ ? {
21
+ record: {
22
+ ...(agent.status !== undefined ? { status: agent.status } : {}),
23
+ ...(agent.host !== undefined ? { host: agent.host } : {}),
24
+ ...(branch !== undefined ? { branch } : {}),
25
+ ...(agent.pr ? { pr: { number: agent.pr.number } } : {}),
26
+ ...(agent.base !== undefined ? { base: agent.base } : {}),
27
+ ...(agent.baseCommit !== undefined ? { baseCommit: agent.baseCommit } : {}),
28
+ ...(agent.landed !== undefined ? { landed: agent.landed } : {}),
29
+ },
30
+ }
31
+ : {}),
32
+ changedNothing: agent ? leftNothing(agent, deps.host) : false,
33
+ };
34
+ },
35
+ async mergeCommit(branch, number) {
36
+ const read = await (deps.prs ?? cachedPrsForBranch)(root, branch).catch(() => ({ value: undefined, pending: false }));
37
+ if (read.pending && read.value === undefined)
38
+ return { pending: true };
39
+ const pr = read.value?.find(pr => pr.number === number);
40
+ return pr?.mergeCommit ? { pending: false, commit: pr.mergeCommit, ...(pr.headRefOid ? { head: pr.headRefOid } : {}) } : { pending: false };
41
+ },
42
+ };
43
+ }
44
+ /** Each server part, imported once per daemon, by its file. */
45
+ const imported = new Map();
46
+ function load(file) {
47
+ let loading = imported.get(file);
48
+ if (!loading) {
49
+ loading = import(pathToFileURL(file).href).then((module) => {
50
+ const server = module.default;
51
+ return server && typeof server === 'object' && server.reads && typeof server.reads === 'object' ? server : undefined;
52
+ }, () => undefined);
53
+ imported.set(file, loading);
54
+ }
55
+ return loading;
56
+ }
57
+ /** How large the input of one read may be, as JSON: what a page asks with, never a payload. */
58
+ export const MAX_READ_INPUT = 16 * 1024;
59
+ /** How long one read may take before it answers an error instead. */
60
+ export const READ_TIMEOUT_MS = 20_000;
61
+ /**
62
+ * Call read `name` of the server part at `file` with `host` and `input`. Refused: a part that did
63
+ * not load, a read it does not have, an input that is not an object or is too large. A read that
64
+ * throws or runs past {@link READ_TIMEOUT_MS} answers an error; nothing a read does stops the daemon.
65
+ */
66
+ export async function callModuleRead(file, name, host, input, timeoutMs = READ_TIMEOUT_MS) {
67
+ if (!input || typeof input !== 'object' || Array.isArray(input))
68
+ return { ok: false, error: 'a read takes an object' };
69
+ if (JSON.stringify(input).length > MAX_READ_INPUT)
70
+ return { ok: false, error: 'the read input is too large' };
71
+ const server = await load(file);
72
+ if (!server)
73
+ return { ok: false, error: 'the module’s server part did not load' };
74
+ const read = Object.hasOwn(server.reads, name) ? server.reads[name] : undefined;
75
+ if (typeof read !== 'function')
76
+ return { ok: false, error: `the module has no read ${name}` };
77
+ let timer;
78
+ const timeout = new Promise(resolve => {
79
+ timer = setTimeout(() => resolve({ ok: false, error: `the read ${name} took too long` }), timeoutMs);
80
+ });
81
+ try {
82
+ return await Promise.race([
83
+ read(host, input).then((output) => ({ ok: true, output: output ?? null }), (error) => ({ ok: false, error: error instanceof Error ? error.message : String(error) })),
84
+ timeout,
85
+ ]);
86
+ }
87
+ finally {
88
+ clearTimeout(timer);
89
+ }
90
+ }
91
+ //# sourceMappingURL=module-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-host.js","sourceRoot":"","sources":["../../src/dashboard/module-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import { type ProjectsProvider } from './projects.js';
3
+ import { type ProjectModule } from '../project-modules.js';
4
+ /** Where module files are served: `/_modules/<project id>/<package>/<file>`, each segment encoded. */
5
+ export declare const MODULES_PREFIX = "/_modules";
6
+ /** The URL a module's browser part is served at from one project. */
7
+ export declare function moduleUrl(projectId: string, module: Pick<ProjectModule, 'package' | 'entry'>): string;
8
+ /**
9
+ * Serve one module file (#1774): the project must be registered, the package must be a module of
10
+ * that project, and the file must sit inside the module's browser part's own directory. Anything else is a
11
+ * 404, never a fallback: a module URL is asked for by the dashboard's loader, not typed by a person.
12
+ * Served as `no-cache`, since a module is rebuilt in place under the same name.
13
+ */
14
+ export declare function serveModuleFile(req: IncomingMessage, res: ServerResponse, pathname: string, projects?: ProjectsProvider): Promise<void>;
15
+ //# sourceMappingURL=module-serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-serve.d.ts","sourceRoot":"","sources":["../../src/dashboard/module-serve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEzF,sGAAsG;AACtG,eAAO,MAAM,cAAc,cAAc,CAAA;AAEzC,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,MAAM,CAGrG;AAUD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,gBAA4C,GACrD,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -0,0 +1,45 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { contentTypeFor } from './content-type.js';
3
+ import { defaultProjectsProvider } from './projects.js';
4
+ import { findProjectModule, moduleFile } from '../project-modules.js';
5
+ /** Where module files are served: `/_modules/<project id>/<package>/<file>`, each segment encoded. */
6
+ export const MODULES_PREFIX = '/_modules';
7
+ /** The URL a module's browser part is served at from one project. */
8
+ export function moduleUrl(projectId, module) {
9
+ const file = module.entry.split('/').map(encodeURIComponent).join('/');
10
+ return `${MODULES_PREFIX}/${encodeURIComponent(projectId)}/${encodeURIComponent(module.package)}/${file}`;
11
+ }
12
+ function decode(segment) {
13
+ try {
14
+ return decodeURIComponent(segment);
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ }
20
+ /**
21
+ * Serve one module file (#1774): the project must be registered, the package must be a module of
22
+ * that project, and the file must sit inside the module's browser part's own directory. Anything else is a
23
+ * 404, never a fallback: a module URL is asked for by the dashboard's loader, not typed by a person.
24
+ * Served as `no-cache`, since a module is rebuilt in place under the same name.
25
+ */
26
+ export async function serveModuleFile(req, res, pathname, projects = defaultProjectsProvider()) {
27
+ const notFound = () => void res.writeHead(404, { 'content-type': 'text/plain' }).end('no such module file');
28
+ if (req.method !== 'GET' && req.method !== 'HEAD')
29
+ return void res.writeHead(405, { allow: 'GET, HEAD' }).end();
30
+ const [projectSegment, packageSegment, ...rest] = pathname.slice(MODULES_PREFIX.length + 1).split('/');
31
+ const projectId = projectSegment !== undefined ? decode(projectSegment) : undefined;
32
+ const pkg = packageSegment !== undefined ? decode(packageSegment) : undefined;
33
+ const rel = rest.map(decode);
34
+ if (!projectId || !pkg || rel.length === 0 || rel.some(part => part === undefined))
35
+ return notFound();
36
+ const root = await projects.resolvePath(projectId);
37
+ const module = root ? await findProjectModule(root, pkg).catch(() => undefined) : undefined;
38
+ const file = module ? await moduleFile(module, rel.join('/')) : undefined;
39
+ const body = file ? await readFile(file).catch(() => undefined) : undefined;
40
+ if (!file || body === undefined)
41
+ return notFound();
42
+ res.writeHead(200, { 'content-type': contentTypeFor(file), 'cache-control': 'no-cache' });
43
+ res.end(req.method === 'HEAD' ? undefined : body);
44
+ }
45
+ //# sourceMappingURL=module-serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-serve.js","sourceRoot":"","sources":["../../src/dashboard/module-serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /** Which app to open the project in. */
2
+ export type OpenTarget = 'files' | 'editor';
3
+ /** A known editor: its launcher CLI plus a human label for the picker (#727). */
4
+ export interface EditorInfo {
5
+ bin: string;
6
+ label: string;
7
+ }
8
+ /**
9
+ * The editors the picker can offer (#727), probed by their CLI launcher on PATH. Order is the
10
+ * display order. `$OPENAGENT_EDITOR` and a hand-typed value stay valid beyond this list; this is
11
+ * only what auto-detection looks for.
12
+ */
13
+ export declare const KNOWN_EDITORS: EditorInfo[];
14
+ /** Whether an editor launcher is installed (on PATH). A seam so detection is unit-testable. */
15
+ export type EditorProbe = (bin: string) => Promise<boolean>;
16
+ /** The installed subset of {@link KNOWN_EDITORS}, in display order (#727). */
17
+ export declare function detectEditors(probe?: EditorProbe): Promise<EditorInfo[]>;
18
+ /** The outcome of an open attempt. */
19
+ export type OpenResult = {
20
+ ok: true;
21
+ } | {
22
+ ok: false;
23
+ error: string;
24
+ };
25
+ /** Spawns a command, resolving once it launches (not on exit) and rejecting if it can't start. */
26
+ export type SpawnRunner = (command: string, args: string[]) => Promise<void>;
27
+ /** The OS command that reveals a path in the file manager. */
28
+ export declare function fileManagerCommand(path: string, os?: NodeJS.Platform): {
29
+ command: string;
30
+ args: string[];
31
+ };
32
+ /** The command to open a path in an editor: `$OPENAGENT_EDITOR` when set, else the VS Code CLI. */
33
+ export declare function editorCommand(path: string, editor?: string | undefined): {
34
+ command: string;
35
+ args: string[];
36
+ };
37
+ /**
38
+ * Open the project at `cwd` in the file manager or an editor. Failures are values, never throws.
39
+ * `editor` (#727) is the stored preference; when unset {@link editorCommand} falls back to
40
+ * `$OPENAGENT_EDITOR`, then `code`.
41
+ */
42
+ export declare function openInApp(cwd: string, target: OpenTarget, agent?: SpawnRunner, editor?: string): Promise<OpenResult>;
43
+ //# sourceMappingURL=open-in-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-in-app.d.ts","sourceRoot":"","sources":["../../src/dashboard/open-in-app.ts"],"names":[],"mappings":"AAQA,wCAAwC;AACxC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE3C,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,UAAU,EAYrC,CAAA;AAED,+FAA+F;AAC/F,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AA0B3D,8EAA8E;AAC9E,wBAAsB,aAAa,CAAC,KAAK,GAAE,WAA+B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGjG;AAED,sCAAsC;AACtC,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpE,kGAAkG;AAClG,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAqB5E,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAM,CAAC,QAAqB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAItH;AAED,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,qBAA+B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAGtH;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,EAClB,KAAK,GAAE,WAA+B,EACtC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAWrB"}
@@ -0,0 +1,98 @@
1
+ import { platform } from 'node:os';
2
+ import { delimiter, join } from 'node:path';
3
+ /**
4
+ * The editors the picker can offer (#727), probed by their CLI launcher on PATH. Order is the
5
+ * display order. `$OPENAGENT_EDITOR` and a hand-typed value stay valid beyond this list; this is
6
+ * only what auto-detection looks for.
7
+ */
8
+ export const KNOWN_EDITORS = [
9
+ { bin: 'code', label: 'VS Code' },
10
+ { bin: 'code-insiders', label: 'VS Code Insiders' },
11
+ { bin: 'cursor', label: 'Cursor' },
12
+ { bin: 'windsurf', label: 'Windsurf' },
13
+ { bin: 'zed', label: 'Zed' },
14
+ { bin: 'subl', label: 'Sublime Text' },
15
+ { bin: 'webstorm', label: 'WebStorm' },
16
+ { bin: 'idea', label: 'IntelliJ IDEA' },
17
+ { bin: 'nvim', label: 'Neovim' },
18
+ { bin: 'vim', label: 'Vim' },
19
+ { bin: 'emacs', label: 'Emacs' },
20
+ ];
21
+ /**
22
+ * An {@link EditorProbe} that looks each launcher up on the real PATH: an executable match in any
23
+ * PATH dir (trying PATHEXT suffixes on Windows). Pure lookup, nothing is spawned.
24
+ */
25
+ function nodeEditorProbe(env = process.env, os = platform()) {
26
+ const dirs = (env.PATH ?? '').split(delimiter).filter(Boolean);
27
+ const exts = os === 'win32' ? (env.PATHEXT ?? '.EXE;.CMD;.BAT;.COM').split(';').filter(Boolean) : [''];
28
+ return async (bin) => {
29
+ const { access, constants } = await import('node:fs/promises');
30
+ const flag = os === 'win32' ? constants.F_OK : constants.X_OK;
31
+ for (const dir of dirs) {
32
+ for (const ext of exts) {
33
+ try {
34
+ await access(join(dir, bin + ext), flag);
35
+ return true;
36
+ }
37
+ catch {
38
+ // not here; keep looking
39
+ }
40
+ }
41
+ }
42
+ return false;
43
+ };
44
+ }
45
+ /** The installed subset of {@link KNOWN_EDITORS}, in display order (#727). */
46
+ export async function detectEditors(probe = nodeEditorProbe()) {
47
+ const hits = await Promise.all(KNOWN_EDITORS.map(async (e) => ((await probe(e.bin)) ? e : null)));
48
+ return hits.filter((e) => e !== null);
49
+ }
50
+ /**
51
+ * A {@link SpawnRunner} backed by `spawn`, detached. Resolves on the `spawn` event so a
52
+ * long-lived editor (or `explorer`, which exits non-zero even on success) does not block or
53
+ * error; rejects on the `error` event (e.g. ENOENT when the command is not on PATH).
54
+ */
55
+ function nodeSpawnRunner() {
56
+ return (command, args) => new Promise((resolve, reject) => {
57
+ void import('node:child_process').then(({ spawn }) => {
58
+ const child = spawn(command, args, { stdio: 'ignore', detached: true });
59
+ child.on('error', reject);
60
+ child.on('spawn', () => {
61
+ child.unref();
62
+ resolve();
63
+ });
64
+ });
65
+ });
66
+ }
67
+ /** The OS command that reveals a path in the file manager. */
68
+ export function fileManagerCommand(path, os = platform()) {
69
+ if (os === 'darwin')
70
+ return { command: 'open', args: [path] };
71
+ if (os === 'win32')
72
+ return { command: 'explorer', args: [path] };
73
+ return { command: 'xdg-open', args: [path] };
74
+ }
75
+ /** The command to open a path in an editor: `$OPENAGENT_EDITOR` when set, else the VS Code CLI. */
76
+ export function editorCommand(path, editor = process.env.OPENAGENT_EDITOR) {
77
+ const bin = editor && editor.trim() ? editor.trim() : 'code';
78
+ return { command: bin, args: [path] };
79
+ }
80
+ /**
81
+ * Open the project at `cwd` in the file manager or an editor. Failures are values, never throws.
82
+ * `editor` (#727) is the stored preference; when unset {@link editorCommand} falls back to
83
+ * `$OPENAGENT_EDITOR`, then `code`.
84
+ */
85
+ export async function openInApp(cwd, target, agent = nodeSpawnRunner(), editor) {
86
+ const { command, args } = target === 'editor' ? editorCommand(cwd, editor) : fileManagerCommand(cwd);
87
+ try {
88
+ await agent(command, args);
89
+ return { ok: true };
90
+ }
91
+ catch (err) {
92
+ if (err?.code === 'ENOENT') {
93
+ return { ok: false, error: `"${command}" was not found on PATH` };
94
+ }
95
+ return { ok: false, error: err instanceof Error ? err.message : 'failed to open' };
96
+ }
97
+ }
98
+ //# sourceMappingURL=open-in-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-in-app.js","sourceRoot":"","sources":["../../src/dashboard/open-in-app.ts"],"names":[],"mappings":"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"}