@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,146 @@
1
+ import { runPackageCommand } from '@openagt/agent-data';
2
+ import { providedCommand } from '../built-in.js';
3
+ const STATUSES = ['running', 'done', 'stopped', 'failed', 'waiting'];
4
+ /** Whether a string can name a run: letters, digits, `-` and `_`, nothing a path can climb out with. */
5
+ export function isRunId(id) {
6
+ return /^[A-Za-z0-9_-]+$/.test(id);
7
+ }
8
+ /**
9
+ * A card read back: the fields of the shape, each kept only when it has the right type, plus
10
+ * `caller` as it is. `undefined` for anything that is not a card — not an object, or missing an
11
+ * id, a start or a status. Takes a card's JSON text or an already-parsed value.
12
+ */
13
+ export function parseRunCard(input) {
14
+ let raw = input;
15
+ if (typeof input === 'string') {
16
+ try {
17
+ raw = JSON.parse(input);
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
24
+ return undefined;
25
+ const r = raw;
26
+ const status = r['status'];
27
+ if (typeof r['id'] !== 'string' || !isRunId(r['id']) || typeof r['startedAt'] !== 'string' || !STATUSES.includes(status))
28
+ return undefined;
29
+ const card = { id: r['id'], startedAt: r['startedAt'], status: status };
30
+ for (const key of ['endedAt', 'intent', 'driver', 'model', 'branch', 'ticket']) {
31
+ if (typeof r[key] === 'string')
32
+ card[key] = r[key];
33
+ }
34
+ if (typeof r['cost'] === 'number')
35
+ card.cost = r['cost'];
36
+ const pr = r['pr'];
37
+ if (pr && typeof pr === 'object' && typeof pr['number'] === 'number' && typeof pr['url'] === 'string')
38
+ card.pr = { number: pr['number'], url: pr['url'] };
39
+ const caller = r['caller'];
40
+ if (caller && typeof caller === 'object' && !Array.isArray(caller))
41
+ card.caller = caller;
42
+ return card;
43
+ }
44
+ /** Diary lines read back from a provider's output: the JSON objects with a string `kind`, in order. */
45
+ function diaryLines(value) {
46
+ if (!Array.isArray(value))
47
+ return [];
48
+ return value.filter((line) => !!line && typeof line === 'object' && !Array.isArray(line) && typeof line['kind'] === 'string');
49
+ }
50
+ /**
51
+ * How many runs a list asks for: every run the project has, in practice. The command line takes a
52
+ * cap, and OpenAgent's lists (the sidebar's history, a ticket's holder, the activity feed) have
53
+ * always read the whole record.
54
+ */
55
+ const LIST_LIMIT = 10_000;
56
+ /** How long a read is reused: the dashboard polls many reads of the same list every few seconds, and each is a process. */
57
+ const CACHE_MS = 5_000;
58
+ /** The runs source over one provider command: each call one run of the command, reads cached per {@link CACHE_MS}. */
59
+ function commandRuns(root, command, now) {
60
+ let listed;
61
+ const shown = new Map();
62
+ const drop = () => {
63
+ listed = undefined;
64
+ shown.clear();
65
+ };
66
+ return {
67
+ drop,
68
+ list(opts = {}) {
69
+ // Concurrent reads share one process; a read that failed is not kept.
70
+ if (listed && !opts.fresh && now() - listed.at < CACHE_MS)
71
+ return listed.cards;
72
+ const read = { at: now(), cards: Promise.resolve([]) };
73
+ read.cards = runPackageCommand(root, command, ['--local', '--full', '--limit', String(LIST_LIMIT)]).then(result => {
74
+ if (!result.ok || !Array.isArray(result.output)) {
75
+ if (listed === read)
76
+ listed = undefined;
77
+ return [];
78
+ }
79
+ return result.output.map(parseRunCard).filter((card) => card !== undefined);
80
+ });
81
+ listed = read;
82
+ return read.cards;
83
+ },
84
+ show(id) {
85
+ if (!isRunId(id))
86
+ return Promise.resolve(undefined);
87
+ const known = shown.get(id);
88
+ if (known && now() - known.at < CACHE_MS)
89
+ return known.run;
90
+ const read = { at: now(), run: Promise.resolve(undefined) };
91
+ read.run = runPackageCommand(root, command, ['show', id, '--local', '--full']).then(result => {
92
+ const output = result.ok ? result.output : undefined;
93
+ const card = parseRunCard(output);
94
+ if (!card) {
95
+ if (shown.get(id) === read)
96
+ shown.delete(id);
97
+ return undefined;
98
+ }
99
+ return { card, diary: diaryLines(output['diary']) };
100
+ });
101
+ shown.set(id, read);
102
+ return read.run;
103
+ },
104
+ async remove(id) {
105
+ if (!isRunId(id))
106
+ return { ok: false, error: `not a run id: ${id}` };
107
+ const result = await runPackageCommand(root, command, ['delete', id]);
108
+ drop();
109
+ return result.ok ? { ok: true } : { ok: false, error: result.error };
110
+ },
111
+ async patch(id, patch) {
112
+ if (!isRunId(id))
113
+ return { ok: false, error: `not a run id: ${id}` };
114
+ const args = ['patch', id, ...(patch.branch !== undefined ? ['--branch', patch.branch] : []), ...(patch.pr ? ['--pr', String(patch.pr.number), '--pr-url', patch.pr.url] : []), ...(patch.landed ? ['--landed', patch.landed.commit, '--from', patch.landed.from] : [])];
115
+ const result = await runPackageCommand(root, command, args);
116
+ drop();
117
+ return result.ok ? { ok: true } : { ok: false, error: result.error };
118
+ },
119
+ };
120
+ }
121
+ /**
122
+ * The production {@link RunsFor}: the project's provider, looked up by its package.json, one
123
+ * source per project kept while the same command provides — so the cache holds across the many
124
+ * reads of one poll, and a project that installs, swaps or drops its provider is read the new way
125
+ * within {@link CACHE_MS}. `changed(root)` forgets that project's reads, so the next read runs the
126
+ * command again: a module's command just ran there, and may have written.
127
+ */
128
+ export function providedRuns(now = Date.now) {
129
+ const sources = new Map();
130
+ const reader = async (root) => {
131
+ let known = sources.get(root);
132
+ if (!known || now() - known.at >= CACHE_MS) {
133
+ const command = await providedCommand(root, 'runs').catch(() => undefined);
134
+ const same = known?.command && command && known.command.bin === command.bin;
135
+ known = { at: now(), ...(command ? { command, source: same ? known.source : commandRuns(root, command, now) } : {}) };
136
+ sources.set(root, known);
137
+ }
138
+ return known.source;
139
+ };
140
+ return Object.assign(reader, { changed: (root) => sources.get(root)?.source?.drop() });
141
+ }
142
+ /** OpenAgent's one reader of finished runs, shared by every caller so they share its cache. */
143
+ export const projectRuns = providedRuns();
144
+ /** A {@link RunsFor} for a project with no provider: no finished runs. */
145
+ export const noRuns = async () => undefined;
146
+ //# sourceMappingURL=runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/store/runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BranchesFor, BranchState, Checkout } from './branches.js';
2
+ /**
3
+ * A branches provider as a test would have it: the checkouts of every project held in memory,
4
+ * answering what a real provider's command would. `writes` records every publish, merge and
5
+ * remove; a remove takes the checkout out of the list, the way the command would.
6
+ */
7
+ export declare function testBranches(byProject?: Record<string, Checkout[]>, states?: BranchState[]): BranchesFor & {
8
+ writes: string[];
9
+ };
10
+ /**
11
+ * Make the real branches package the project's provider, the way a project has it: listed as a
12
+ * dependency in its package.json (kept, when one is there), and installed under `node_modules` as
13
+ * a link to this workspace's copy, whose built command is what the provider runs. The package
14
+ * lists the project's checkouts from `.branches/`, so the project must be a git repository whose
15
+ * checkouts are real worktrees.
16
+ */
17
+ export declare function linkBranchesProvider(root: string): Promise<void>;
18
+ //# sourceMappingURL=test-branches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-branches.d.ts","sourceRoot":"","sources":["../../src/store/test-branches.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAkB,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEvF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAM,EAAE,MAAM,GAAE,WAAW,EAAO,GAAG,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA8BvI;AAKD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtE"}
@@ -0,0 +1,59 @@
1
+ import { mkdir, readFile, symlink, writeFile } from 'node:fs/promises';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ /**
5
+ * A branches provider as a test would have it: the checkouts of every project held in memory,
6
+ * answering what a real provider's command would. `writes` records every publish, merge and
7
+ * remove; a remove takes the checkout out of the list, the way the command would.
8
+ */
9
+ export function testBranches(byProject = {}, states = []) {
10
+ const writes = [];
11
+ const checkouts = new Map(Object.entries(byProject).map(([root, rows]) => [root, [...rows]]));
12
+ const sourceFor = (root) => ({
13
+ async list() {
14
+ return [...(checkouts.get(root) ?? [])];
15
+ },
16
+ async show(branches) {
17
+ return branches.flatMap(branch => states.filter(state => state.branch === branch));
18
+ },
19
+ async push(branch) {
20
+ writes.push(`push ${branch}`);
21
+ return { ok: true, pushed: true };
22
+ },
23
+ async merge(branch) {
24
+ writes.push(`merge ${branch}`);
25
+ return { ok: true, into: 'main', commit: 'c'.repeat(40), from: 'b'.repeat(40), deleted: true };
26
+ },
27
+ async remove(id, opts = {}) {
28
+ writes.push(`remove ${id}${opts.discard ? ' --discard' : ''}`);
29
+ const rows = checkouts.get(root) ?? [];
30
+ if (!rows.some(row => row.id === id))
31
+ return { ok: false, error: `no checkout for agent ${id}` };
32
+ checkouts.set(root, rows.filter(row => row.id !== id));
33
+ return { ok: true };
34
+ },
35
+ });
36
+ return Object.assign(async (root) => (checkouts.has(root) ? sourceFor(root) : undefined), { writes });
37
+ }
38
+ /** The name of the package whose command is the branches provider of every project a test makes real. */
39
+ const BRANCHES_PACKAGE = '@openagt/skill-branches';
40
+ /**
41
+ * Make the real branches package the project's provider, the way a project has it: listed as a
42
+ * dependency in its package.json (kept, when one is there), and installed under `node_modules` as
43
+ * a link to this workspace's copy, whose built command is what the provider runs. The package
44
+ * lists the project's checkouts from `.branches/`, so the project must be a git repository whose
45
+ * checkouts are real worktrees.
46
+ */
47
+ export async function linkBranchesProvider(root) {
48
+ const manifestPath = join(root, 'package.json');
49
+ const manifest = JSON.parse(await readFile(manifestPath, 'utf8').catch(() => '{}'));
50
+ const devDependencies = (manifest['devDependencies'] ?? {});
51
+ await writeFile(manifestPath, JSON.stringify({ ...manifest, devDependencies: { ...devDependencies, [BRANCHES_PACKAGE]: '*' } }));
52
+ const link = join(root, 'node_modules', ...BRANCHES_PACKAGE.split('/'));
53
+ await mkdir(dirname(link), { recursive: true });
54
+ await symlink(resolve(dirname(fileURLToPath(import.meta.resolve(BRANCHES_PACKAGE))), '..'), link).catch((err) => {
55
+ if (err.code !== 'EEXIST')
56
+ throw err;
57
+ });
58
+ }
59
+ //# sourceMappingURL=test-branches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-branches.js","sourceRoot":"","sources":["../../src/store/test-branches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type AnyDiaryLine, type RunCard, type RunsFor } from './runs.js';
2
+ /** One finished run a test seeds: its card (a whole card, or just its fields) and its diary. */
3
+ export interface TestRun {
4
+ card: Partial<RunCard> & Pick<RunCard, 'id' | 'status'>;
5
+ diary?: AnyDiaryLine[];
6
+ }
7
+ /**
8
+ * A runs provider as a test would have it: the finished runs of every project held in memory,
9
+ * answering what a real provider's command would. `writes` records every remove and patch, and
10
+ * the runs change the way the command would change them.
11
+ */
12
+ export declare function testRuns(byProject?: Record<string, TestRun[]>): RunsFor & {
13
+ writes: string[];
14
+ };
15
+ //# sourceMappingURL=test-runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runs.d.ts","sourceRoot":"","sources":["../../src/store/test-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EAAmB,MAAM,WAAW,CAAA;AAExG,gGAAgG;AAChG,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAA;IACvD,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;CACvB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAM,GAAG,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BlG"}
@@ -0,0 +1,37 @@
1
+ import { parseRunCard } from './runs.js';
2
+ /**
3
+ * A runs provider as a test would have it: the finished runs of every project held in memory,
4
+ * answering what a real provider's command would. `writes` records every remove and patch, and
5
+ * the runs change the way the command would change them.
6
+ */
7
+ export function testRuns(byProject = {}) {
8
+ const writes = [];
9
+ const runs = new Map(Object.entries(byProject).map(([root, list]) => [root, list.map(run => ({ card: parseRunCard({ startedAt: '2026-07-04T00:00:00.000Z', ...run.card }), diary: run.diary ?? [] }))]));
10
+ const sourceFor = (root) => ({
11
+ async list() {
12
+ return [...(runs.get(root) ?? [])].map(run => run.card).sort((a, b) => (a.id < b.id ? 1 : a.id > b.id ? -1 : 0));
13
+ },
14
+ async show(id) {
15
+ const run = runs.get(root)?.find(r => r.card.id === id);
16
+ return run && { card: run.card, diary: run.diary };
17
+ },
18
+ async remove(id) {
19
+ writes.push(`delete ${id}`);
20
+ const list = runs.get(root) ?? [];
21
+ if (!list.some(r => r.card.id === id))
22
+ return { ok: false, error: `no run is named ${id}` };
23
+ runs.set(root, list.filter(r => r.card.id !== id));
24
+ return { ok: true };
25
+ },
26
+ async patch(id, patch) {
27
+ writes.push(`patch ${id} ${JSON.stringify(patch)}`);
28
+ const run = runs.get(root)?.find(r => r.card.id === id);
29
+ if (!run)
30
+ return { ok: false, error: `no run is named ${id}` };
31
+ run.card = { ...run.card, ...patch };
32
+ return { ok: true };
33
+ },
34
+ });
35
+ return Object.assign(async (root) => (runs.has(root) ? sourceFor(root) : undefined), { writes });
36
+ }
37
+ //# sourceMappingURL=test-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runs.js","sourceRoot":"","sources":["../../src/store/test-runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The tickets, as OpenAgent reads them (#1774). OpenAgent keeps no ticket and imports no
3
+ * tickets package: a project's tickets come from whichever of its packages declares that it
4
+ * provides them — `"openagent": { "tickets": "<command>" }` in the package's own package.json —
5
+ * and OpenAgent reads them by running that command. Swap the package for another that answers
6
+ * the same command line and prints the same shape, and nothing here changes. No package declares
7
+ * it: the project has no tickets, and the dashboard shows it none.
8
+ *
9
+ * The command line a provider answers, printing one JSON document and exiting 0:
10
+ * `<command> list --local` every open ticket, as an array of {@link Ticket}
11
+ * `--local` reads the copy on this machine, no network: OpenAgent polls.
12
+ *
13
+ * That is the whole contract. OpenAgent reads tickets for what it composes across skills: the
14
+ * onboarding step, a queued link's title. Showing them, planning them, claiming and releasing them,
15
+ * and the Overview's hot-tickets card, are the tickets package's own module, through its own command.
16
+ *
17
+ * The shape, owned here: {@link Ticket}, the row a ticket lists as.
18
+ */
19
+ /** A ticket's row, as a provider prints it. Everything but the five plain facts is optional. */
20
+ export interface Ticket {
21
+ /** The ticket's file name, its identity: `tickets/<file>` is the path a link to it carries. */
22
+ file: string;
23
+ title: string;
24
+ /** One line of what it is about; empty when the ticket says nothing beyond its title. */
25
+ summary: string;
26
+ /** `0`–`10` as written, `10` acting at once; absent when unset, and not checked here. */
27
+ priority?: string;
28
+ topics?: string[];
29
+ /** The issue it tracks in the project's tracker, and the pull request that closes it: a label and where it points. */
30
+ issue?: {
31
+ label: string;
32
+ url: string;
33
+ };
34
+ pr?: {
35
+ label: string;
36
+ url: string;
37
+ };
38
+ /** ISO 8601: the file's date. */
39
+ date: string;
40
+ /** Whether a plan sits beside it. */
41
+ planned: boolean;
42
+ /** Whether someone holds it, and who: a run's id, or a branch. */
43
+ locked?: boolean;
44
+ lockedBy?: string;
45
+ effort?: number;
46
+ uncertainty?: number;
47
+ }
48
+ /** A project's tickets: what a provider answers, read by OpenAgent. */
49
+ export interface TicketsSource {
50
+ /** Every open ticket; `[]` when none can be read. */
51
+ list(): Promise<Ticket[]>;
52
+ }
53
+ /** The tickets of the project at `root`, or `undefined` when none of its packages provides them. */
54
+ export type TicketsFor = (root: string) => Promise<TicketsSource | undefined>;
55
+ /** A {@link TicketsFor} that also forgets what it read of one project, for when a module just wrote there. */
56
+ export type TicketsReader = TicketsFor & {
57
+ changed(root: string): void;
58
+ };
59
+ /** The rows read back from a provider's output: the objects with the five plain facts, everything else as printed; anything else is no ticket. */
60
+ export declare function parseTickets(output: unknown): Ticket[];
61
+ /**
62
+ * The production {@link TicketsReader}: the project's provider, looked up by its package.json, one
63
+ * source per project kept while the same command provides — so the cache holds across the many
64
+ * reads of one poll, and a project that installs, swaps or drops its provider is read the new way
65
+ * within {@link CACHE_MS}. `changed(root)` forgets that project's read, so the next read runs the
66
+ * command again: a module's command just ran there, and may have written.
67
+ */
68
+ export declare function providedTickets(now?: () => number): TicketsReader;
69
+ /** OpenAgent's one reader of the tickets, shared by every caller so they share its cache. */
70
+ export declare const projectTickets: TicketsReader;
71
+ /** A {@link TicketsFor} for a project with no provider: no tickets. */
72
+ export declare const noTickets: TicketsFor;
73
+ //# sourceMappingURL=tickets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../src/store/tickets.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AAEH,gGAAgG;AAChG,MAAM,WAAW,MAAM;IACrB,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAA;IACf,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,sHAAsH;IACtH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,EAAE,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACnC,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAC1B;AAED,oGAAoG;AACpG,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;AAE7E,8GAA8G;AAC9G,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG;IAAE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAKxE,kJAAkJ;AAClJ,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAGtD;AAgCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,MAAiB,GAAG,aAAa,CAa3E;AAED,6FAA6F;AAC7F,eAAO,MAAM,cAAc,EAAE,aAAiC,CAAA;AAE9D,uEAAuE;AACvE,eAAO,MAAM,SAAS,EAAE,UAAkC,CAAA"}
@@ -0,0 +1,67 @@
1
+ import { runPackageCommand } from '@openagt/agent-data';
2
+ import { providedCommand } from '../built-in.js';
3
+ /** How long a read is reused: the dashboard polls several reads of every project's tickets every few seconds, and each is a process. */
4
+ const CACHE_MS = 5_000;
5
+ /** The rows read back from a provider's output: the objects with the five plain facts, everything else as printed; anything else is no ticket. */
6
+ export function parseTickets(output) {
7
+ if (!Array.isArray(output))
8
+ return [];
9
+ return output.filter(isTicket);
10
+ }
11
+ function isTicket(value) {
12
+ if (!value || typeof value !== 'object')
13
+ return false;
14
+ const row = value;
15
+ return typeof row.file === 'string' && row.file !== '' && typeof row.title === 'string' && typeof row.summary === 'string' && typeof row.date === 'string' && typeof row.planned === 'boolean';
16
+ }
17
+ /** The tickets source over one provider command: each list one run of the command, reads cached per {@link CACHE_MS}. */
18
+ function commandTickets(root, command, now) {
19
+ let listed;
20
+ return {
21
+ drop() {
22
+ listed = undefined;
23
+ },
24
+ list() {
25
+ // Concurrent reads share one process; a read that failed is not kept.
26
+ if (listed && now() - listed.at < CACHE_MS)
27
+ return listed.tickets;
28
+ const read = { at: now(), tickets: Promise.resolve([]) };
29
+ read.tickets = runPackageCommand(root, command, ['list', '--local']).then(result => {
30
+ if (!result.ok || !Array.isArray(result.output)) {
31
+ if (listed === read)
32
+ listed = undefined;
33
+ return [];
34
+ }
35
+ return parseTickets(result.output);
36
+ });
37
+ listed = read;
38
+ return read.tickets;
39
+ },
40
+ };
41
+ }
42
+ /**
43
+ * The production {@link TicketsReader}: the project's provider, looked up by its package.json, one
44
+ * source per project kept while the same command provides — so the cache holds across the many
45
+ * reads of one poll, and a project that installs, swaps or drops its provider is read the new way
46
+ * within {@link CACHE_MS}. `changed(root)` forgets that project's read, so the next read runs the
47
+ * command again: a module's command just ran there, and may have written.
48
+ */
49
+ export function providedTickets(now = Date.now) {
50
+ const sources = new Map();
51
+ const reader = async (root) => {
52
+ let known = sources.get(root);
53
+ if (!known || now() - known.at >= CACHE_MS) {
54
+ const command = await providedCommand(root, 'tickets').catch(() => undefined);
55
+ const same = known?.command && command && known.command.bin === command.bin;
56
+ known = { at: now(), ...(command ? { command, source: same ? known.source : commandTickets(root, command, now) } : {}) };
57
+ sources.set(root, known);
58
+ }
59
+ return known.source;
60
+ };
61
+ return Object.assign(reader, { changed: (root) => sources.get(root)?.source?.drop() });
62
+ }
63
+ /** OpenAgent's one reader of the tickets, shared by every caller so they share its cache. */
64
+ export const projectTickets = providedTickets();
65
+ /** A {@link TicketsFor} for a project with no provider: no tickets. */
66
+ export const noTickets = async () => undefined;
67
+ //# sourceMappingURL=tickets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../src/store/tickets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAyDhD,wIAAwI;AACxI,MAAM,QAAQ,GAAG,KAAK,CAAA;AAEtB,kJAAkJ;AAClJ,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAA;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAA;AAChM,CAAC;AAED,yHAAyH;AACzH,SAAS,cAAc,CAAC,IAAY,EAAE,OAAwB,EAAE,GAAiB;IAC/E,IAAI,MAA8D,CAAA;IAClE,OAAO;QACL,IAAI;YACF,MAAM,GAAG,SAAS,CAAA;QACpB,CAAC;QACD,IAAI;YACF,sEAAsE;YACtE,IAAI,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,QAAQ;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAA;YACjE,MAAM,IAAI,GAA+C,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;YACpG,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACjF,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChD,IAAI,MAAM,KAAK,IAAI;wBAAE,MAAM,GAAG,SAAS,CAAA;oBACvC,OAAO,EAAE,CAAA;gBACX,CAAC;gBACD,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACpC,CAAC,CAAC,CAAA;YACF,MAAM,GAAG,IAAI,CAAA;YACb,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAG,GAAiB,IAAI,CAAC,GAAG;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiG,CAAA;IACxH,MAAM,MAAM,GAAe,KAAK,EAAC,IAAI,EAAC,EAAE;QACtC,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YAC7E,MAAM,IAAI,GAAG,KAAK,EAAE,OAAO,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAA;YAC3E,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAM,CAAC,MAAO,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YAC1H,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAA;IACrB,CAAC,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;AAChG,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,MAAM,cAAc,GAAkB,eAAe,EAAE,CAAA;AAE9D,uEAAuE;AACvE,MAAM,CAAC,MAAM,SAAS,GAAe,KAAK,IAAI,EAAE,CAAC,SAAS,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { type OpenAgentEvent } from './events.js';
2
+ /** Render a {@link OpenAgentEvent} as one human-readable line (terminal surface). */
3
+ export declare function formatOpenAgentEvent(event: OpenAgentEvent): string;
4
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAO/E,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CA4ClE"}
@@ -0,0 +1,97 @@
1
+ import { pickedIds } from './events.js';
2
+ // The terminal surface for the agent's event stream: render one {@link OpenAgentEvent} as one
3
+ // human-readable line. This is the CLI's counterpart to the dashboard's read-model
4
+ // projections (run-view.ts) — a pure formatter over the same union, kept out of events.ts so
5
+ // the event contract stays a plain data module (and browser-safe for the client bundle).
6
+ /** Render a {@link OpenAgentEvent} as one human-readable line (terminal surface). */
7
+ export function formatOpenAgentEvent(event) {
8
+ switch (event.kind) {
9
+ case 'session':
10
+ return `◆ ${event.fake ? 'fake' : event.driver}${event.model ? ` (${event.model})` : ''} in ${event.workspace}${event.sessionLink ? ` — ${event.sessionLink}` : ''}`;
11
+ case 'session-update':
12
+ return ` session ${event.sessionId}${event.sessionLink ? ` — ${event.sessionLink}` : ''}`;
13
+ case 'screen':
14
+ return `◆ ${event.label}`;
15
+ case 'log':
16
+ return ` ${event.message}`;
17
+ case 'error':
18
+ return `✗ ${event.headline}${event.detail ? `\n ${event.detail.replace(/\n/g, '\n ')}` : ''}`;
19
+ case 'view':
20
+ return `▶ view: ${event.title}`;
21
+ case 'settled':
22
+ return `◆ done for now — waiting for your next message`;
23
+ case 'branch':
24
+ return ` branch: ${event.branch}`;
25
+ case 'cloud-anchor':
26
+ return ` hand-off anchor: ${event.sha.slice(0, 7)}`;
27
+ case 'pull-request':
28
+ return ` pull request: #${event.number}`;
29
+ case 'usage':
30
+ return ` spend: $${event.costUsd.toFixed(4)}`;
31
+ case 'choice': {
32
+ const mark = (o) => event.multi ? (o.default ? '[x]' : '[ ]') : o.id === event.recommended ? '●' : '○';
33
+ const opts = event.options.map(o => ` ${mark(o)} ${o.label}`).join('\n');
34
+ return `? ${event.title}\n${opts}`;
35
+ }
36
+ case 'choice-resolved':
37
+ return ` ✓ chose ${pickedIds(event.picked).join(', ') || '(none)'} (${event.by})`;
38
+ case 'driver':
39
+ return formatDriverEvent(event.event);
40
+ case 'intent':
41
+ return `▶ "${truncate(event.text)}"`;
42
+ case 'end':
43
+ if (event.ok)
44
+ return '✓ finished';
45
+ if (event.stopped)
46
+ return '■ stopped';
47
+ if (event.waiting)
48
+ return '? waiting for an answer';
49
+ return `✗ failed: ${event.detail ?? 'unknown error'}`;
50
+ }
51
+ }
52
+ function formatDriverEvent(event) {
53
+ switch (event.type) {
54
+ case 'start':
55
+ return ` › prompt: ${truncate(event.prompt, 140)}`;
56
+ // Normally consumed by telemetry before it reaches a stream (#1322); rendered anyway so a
57
+ // stray one reads as what it is rather than crashing the formatter.
58
+ case 'session':
59
+ return ` session ${event.sessionId}`;
60
+ case 'model':
61
+ return ` model ${event.model}`;
62
+ // A message being written reads as the text it has so far; a diary never holds one.
63
+ case 'partial':
64
+ case 'text':
65
+ return ` ${truncate(event.text)}`;
66
+ case 'action':
67
+ return event.detail !== undefined ? ` · ${event.label} ${truncate(event.detail, 140)}` : ` · ${event.label}`;
68
+ case 'output':
69
+ return ` ${event.failed ? '✗' : '→'} ${truncate(event.text, 140)}`;
70
+ case 'thought':
71
+ return ` 💭 ${truncate(event.text, 140)}`;
72
+ case 'result':
73
+ return ` ‹ turn complete`;
74
+ case 'rate-limit':
75
+ return ` ${formatRateLimit(event.limit)}`;
76
+ case 'error':
77
+ return ` ! agent error: ${event.message}`;
78
+ case 'notice':
79
+ return ` ~ ${event.message}`;
80
+ case 'question':
81
+ return ` ? ${truncate(event.question.title, 140)}`;
82
+ }
83
+ }
84
+ /** Quiet on the happy path: only worth a line when the quota is actually tight. */
85
+ function formatRateLimit(limit) {
86
+ const resets = new Date(limit.resetsAt).toISOString();
87
+ if (limit.status === 'rejected')
88
+ return `✗ quota exhausted (${limit.window}), resets ${resets}`;
89
+ if (limit.status === 'allowed_warning')
90
+ return `! quota running low (${limit.window}), resets ${resets}`;
91
+ return `· quota ${limit.status} (${limit.window}), resets ${resets}`;
92
+ }
93
+ function truncate(text, max = 100) {
94
+ const flat = text.replace(/\s+/g, ' ').trim();
95
+ return flat.length > max ? flat.slice(0, max - 1) + '…' : flat;
96
+ }
97
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA0C,MAAM,aAAa,CAAA;AAE/E,8FAA8F;AAC9F,mFAAmF;AACnF,6FAA6F;AAC7F,yFAAyF;AAEzF,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CAAC,KAAqB;IACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,SAAS,GAC3G,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAClD,EAAE,CAAA;QACJ,KAAK,gBAAgB;YACnB,OAAO,aAAa,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAC5F,KAAK,QAAQ;YACX,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE,CAAA;QAC3B,KAAK,KAAK;YACR,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAA;QAC7B,KAAK,OAAO;YACV,OAAO,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QACrG,KAAK,MAAM;YACT,OAAO,WAAW,KAAK,CAAC,KAAK,EAAE,CAAA;QACjC,KAAK,SAAS;YACZ,OAAO,gDAAgD,CAAA;QACzD,KAAK,QAAQ;YACX,OAAO,aAAa,KAAK,CAAC,MAAM,EAAE,CAAA;QACpC,KAAK,cAAc;YACjB,OAAO,sBAAsB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;QACtD,KAAK,cAAc;YACjB,OAAO,oBAAoB,KAAK,CAAC,MAAM,EAAE,CAAA;QAC3C,KAAK,OAAO;YACV,OAAO,aAAa,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAChD,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,CAAC,CAAe,EAAE,EAAE,CAC/B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;YACpF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC3E,OAAO,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAA;QACpC,CAAC;QACD,KAAK,iBAAiB;YACpB,OAAO,aAAa,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,EAAE,GAAG,CAAA;QACpF,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvC,KAAK,QAAQ;YACX,OAAO,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAA;QACtC,KAAK,KAAK;YACR,IAAI,KAAK,CAAC,EAAE;gBAAE,OAAO,YAAY,CAAA;YACjC,IAAI,KAAK,CAAC,OAAO;gBAAE,OAAO,WAAW,CAAA;YACrC,IAAI,KAAK,CAAC,OAAO;gBAAE,OAAO,yBAAyB,CAAA;YACnD,OAAO,aAAa,KAAK,CAAC,MAAM,IAAI,eAAe,EAAE,CAAA;IACzD,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,eAAe,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAA;QACrD,0FAA0F;QAC1F,oEAAoE;QACpE,KAAK,SAAS;YACZ,OAAO,aAAa,KAAK,CAAC,SAAS,EAAE,CAAA;QACvC,KAAK,OAAO;YACV,OAAO,WAAW,KAAK,CAAC,KAAK,EAAE,CAAA;QACjC,oFAAoF;QACpF,KAAK,SAAS,CAAC;QACf,KAAK,MAAM;YACT,OAAO,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA;QACtC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,CAAA;QACrH,KAAK,QAAQ;YACX,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAA;QACzE,KAAK,SAAS;YACZ,OAAO,UAAU,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAA;QAC9C,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAA;QAC5B,KAAK,YAAY;YACf,OAAO,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAA;QAC9C,KAAK,OAAO;YACV,OAAO,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAA;QAC5C,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,CAAC,OAAO,EAAE,CAAA;QAC/B,KAAK,UAAU;YACb,OAAO,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAA;IACvD,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,eAAe,CAAC,KAAsB;IAC7C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,sBAAsB,KAAK,CAAC,MAAM,aAAa,MAAM,EAAE,CAAA;IAC/F,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB;QAAE,OAAO,wBAAwB,KAAK,CAAC,MAAM,aAAa,MAAM,EAAE,CAAA;IACxG,OAAO,WAAW,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,aAAa,MAAM,EAAE,CAAA;AACtE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAG,GAAG,GAAG;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC7C,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAChE,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * CLI "up-to-date?" check (#312): after the bare-`openagent` version footer,
3
+ * tell the user whether a newer version is published on npm. Display only;
4
+ * auto-update is a separate, deferred concern. Same seam + node-adapter +
5
+ * forgiving-on-error convention as `project.ts` (#380).
6
+ */
7
+ /** The npm package this CLI ships as; the registry key for the version check. */
8
+ export declare const PACKAGE_NAME = "@openagt/dashboard";
9
+ /** Fetches the latest published version of `pkg`, or undefined on any failure. Injectable for tests. */
10
+ export type VersionFetcher = (pkg: string) => Promise<string | undefined>;
11
+ /**
12
+ * A {@link VersionFetcher} backed by the npm registry. GETs the packument and
13
+ * reads `dist-tags.latest`. A 2.5s AbortSignal.timeout caps it; any error /
14
+ * non-ok / offline yields undefined (the check silently degrades to "unknown").
15
+ */
16
+ export declare function nodeVersionFetcher(): VersionFetcher;
17
+ /** The result of an update check. */
18
+ export type UpdateStatus = {
19
+ kind: 'up-to-date';
20
+ current: string;
21
+ } | {
22
+ kind: 'update-available';
23
+ current: string;
24
+ latest: string;
25
+ } | {
26
+ kind: 'unknown';
27
+ current: string;
28
+ };
29
+ /**
30
+ * Compare two `major.minor.patch` versions numerically (a prerelease/build
31
+ * suffix after `-` or `+` is stripped, missing parts read as 0). Returns
32
+ * -1 / 0 / 1. No semver dependency.
33
+ */
34
+ export declare function compareVersions(a: string, b: string): number;
35
+ /**
36
+ * Check whether `current` is behind the latest published version. Uses the
37
+ * injected fetcher; a missing/failed fetch is 'unknown'. `current` >= latest is
38
+ * 'up-to-date' (so running a local build ahead of the registry never reads as
39
+ * "update available").
40
+ */
41
+ export declare function checkForUpdate(current: string, fetchLatest: VersionFetcher, pkg?: string): Promise<UpdateStatus>;
42
+ /** The one-line message to print for a status, or undefined for 'unknown' (print nothing). */
43
+ export declare function formatUpdateStatus(status: UpdateStatus): string | undefined;
44
+ //# sourceMappingURL=update-check.d.ts.map