@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,36 @@
1
+ // What a Claude web run is doing, read off facts the daemon already holds (#1668).
2
+ //
3
+ // A web run's local half ends at its hand-off (#1231), so its stored status is `done` from that
4
+ // moment on — which said nothing about the session still working on claude.ai, parked on a
5
+ // question, or long finished. The rail wrote "in cloud" over every such run, forever. This is the
6
+ // one place that turns the record into the word a local run's row would show, and it is node-free
7
+ // so the dashboard client, the rail and the Overview all derive the same word from the same rule.
8
+ /**
9
+ * How long after its start a run's cloud session is still assumed to be alive. The same window
10
+ * the browser bridge watches a session for (`bridge-sessions`): past it nothing could learn the
11
+ * session is parked, so "in cloud" would be a guess nobody can correct — hence "done".
12
+ */
13
+ export const CLOUD_SESSION_WINDOW_MS = 12 * 60 * 60 * 1000;
14
+ /**
15
+ * The cloud state of a web run whose local half is over, or undefined for any other run — a
16
+ * local run, or a web run still handing off, stopped or failed — whose stored status is the word.
17
+ */
18
+ export function cloudRunState(meta, now) {
19
+ if (meta.target !== 'web' || meta.status !== 'done')
20
+ return undefined;
21
+ if (meta.cloudWaiting)
22
+ return 'waiting';
23
+ if (meta.mergeOutcome === 'merged')
24
+ return 'merged';
25
+ // A recorded pull request's state is not on the record — it is read live wherever the PR badge
26
+ // shows — so the row says only that the run is over, exactly as a local run with a PR does.
27
+ if (meta.pr)
28
+ return 'done';
29
+ const started = Date.parse(meta.startedAt);
30
+ return Number.isFinite(started) && now - started <= CLOUD_SESSION_WINDOW_MS ? 'in-cloud' : 'done';
31
+ }
32
+ /** Whether the cloud side still counts as an agent at work: in its session, or waiting on a human. */
33
+ export function cloudRunActive(state) {
34
+ return state === 'waiting' || state === 'in-cloud';
35
+ }
36
+ //# sourceMappingURL=cloud-run-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-run-state.js","sourceRoot":"","sources":["../src/cloud-run-state.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,EAAE;AACF,gGAAgG;AAChG,2FAA2F;AAC3F,kGAAkG;AAClG,kGAAkG;AAClG,kGAAkG;AAElG;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAgB1D;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAmB,EAAE,GAAW;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAA;IACrE,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAA;IACvC,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IACnD,+FAA+F;IAC/F,4FAA4F;IAC5F,IAAI,IAAI,CAAC,EAAE;QAAE,OAAO,MAAM,CAAA;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,OAAO,IAAI,uBAAuB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAA;AACnG,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,CAAA;AACpD,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { type GitRunner } from '@openagt/agent-data';
2
+ import { type LinkedPr } from './dashboard/pull-requests.js';
3
+ import { type AgentMeta } from './store/index.js';
4
+ import { type ProjectPass, type ProjectsSource } from './project-pass.js';
5
+ /** How long a scratch ref is left alone before it may go: safely past any provisioning. */
6
+ export declare const SCRATCH_REF_SAFE_AGE_MS: number;
7
+ /**
8
+ * The shape of the pre-hand-off ref the cloud driver pushes: its own session id, a counter plus
9
+ * the 8-hex tag (`cloud-1-3955352b`). Anchored tightly so a user's own `cloud-…` branch that does
10
+ * not match the driver's naming is never even a candidate.
11
+ */
12
+ export declare const CLOUD_SCRATCH_REF: RegExp;
13
+ /** Minimal fs seam so the state IO is unit-testable without touching disk. */
14
+ export interface ScratchFs {
15
+ read(path: string): Promise<string>;
16
+ write(path: string, contents: string): Promise<void>;
17
+ mkdir(path: string): Promise<void>;
18
+ }
19
+ /** The first-seen state file path for a repo. */
20
+ export declare function cloudRefsStatePath(cwd: string): string;
21
+ /** Why a candidate ref was kept this sweep. Every one of these is retried on a later pass. */
22
+ export type ScratchKeptReason =
23
+ /** Not past the safe age yet — the window a provisioning session could still be reading it. */
24
+ 'young'
25
+ /** Its agent is one the daemon is still responsible for. */
26
+ | 'busy'
27
+ /** Its tip is not provably on the default branch, so it may hold work. */
28
+ | 'holds-work'
29
+ /** It has an open PR, which a deletion would close. */
30
+ | 'open-pr';
31
+ /** What {@link sweepCloudScratchRefs} did to one repo's origin. */
32
+ export interface ScratchSweepResult {
33
+ /** Refs deleted from origin (short names). */
34
+ deleted: string[];
35
+ /** Candidate refs kept, and why. Refs matching neither naming are never listed at all. */
36
+ kept: {
37
+ ref: string;
38
+ reason: ScratchKeptReason;
39
+ }[];
40
+ /** Refs the sweep decided to delete but could not; retried next sweep. */
41
+ failed: {
42
+ ref: string;
43
+ error: string;
44
+ }[];
45
+ }
46
+ /** Injectable seams so the sweep is unit-testable off disk, off the network and off the git host. */
47
+ export interface ScratchSweepDeps {
48
+ git?: GitRunner;
49
+ /** The branch's full PR history (default {@link prsForBranch}). */
50
+ prs?: (cwd: string, branch: string) => Promise<LinkedPr[]>;
51
+ fs?: ScratchFs;
52
+ /** The current time in ms (injected so tests can age refs deterministically). */
53
+ now?: () => number;
54
+ /** Override {@link SCRATCH_REF_SAFE_AGE_MS}. */
55
+ ageMs?: number;
56
+ /** Agent ids the daemon is still responsible for, whose run branches this must not touch. */
57
+ busy?: ReadonlySet<string>;
58
+ /** The project's runs, whose recorded branches are the run branches on origin (default {@link listAgents}). */
59
+ agents?: (cwd: string) => Promise<AgentMeta[]>;
60
+ }
61
+ /**
62
+ * Sweep one repo's origin for the dead refs cloud hand-offs left behind (#1547), deleting the
63
+ * ones that clear every gate. Never throws: a repo with no remote (or offline) sweeps nothing,
64
+ * and a failed deletion is reported and retried next sweep.
65
+ */
66
+ export declare function sweepCloudScratchRefs(cwd: string, deps?: ScratchSweepDeps): Promise<ScratchSweepResult>;
67
+ /** What {@link startCloudScratchSweep} needs from the daemon. */
68
+ export interface CloudScratchSweepOptions {
69
+ /** The registered projects to sweep. */
70
+ projects: ProjectsSource;
71
+ log: (message: string) => void;
72
+ /** The agents the daemon is still responsible for, whose run branches this must not touch. */
73
+ busy?: () => ReadonlySet<string>;
74
+ /** The per-project sweep (default {@link sweepCloudScratchRefs}). */
75
+ sweep?: (cwd: string) => Promise<ScratchSweepResult>;
76
+ }
77
+ /**
78
+ * Sweep every registered project's leftover cloud scratch refs (#1547), one turn per call.
79
+ *
80
+ * Deletions and failures are said out loud, kept refs are not: a candidate that is merely not old
81
+ * enough yet is the normal state of every ref this watches, and a line per tick about it would be
82
+ * noise. A ref vanishing from origin with no line explaining why would read as a bug.
83
+ */
84
+ export declare function startCloudScratchSweep(opts: CloudScratchSweepOptions): ProjectPass;
85
+ //# sourceMappingURL=cloud-scratch-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-scratch-refs.d.ts","sourceRoot":"","sources":["../src/cloud-scratch-refs.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEhF,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC1E,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG7D,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AA8B3F,2FAA2F;AAC3F,eAAO,MAAM,uBAAuB,QAAsB,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAA4B,CAAA;AAe1D,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC;AAQD,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AA4BD,8FAA8F;AAC9F,MAAM,MAAM,iBAAiB;AAC3B,+FAA+F;AAC7F,OAAO;AACT,4DAA4D;GAC1D,MAAM;AACR,0EAA0E;GACxE,YAAY;AACd,uDAAuD;GACrD,SAAS,CAAA;AAEb,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,0FAA0F;IAC1F,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,EAAE,CAAA;IAClD,0EAA0E;IAC1E,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACzC;AAED,qGAAqG;AACrG,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,SAAS,CAAA;IACf,mEAAmE;IACnE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1D,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6FAA6F;IAC7F,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1B,+GAA+G;IAC/G,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;CAC/C;AAkFD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgGjH;AAED,iEAAiE;AACjE,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,QAAQ,EAAE,cAAc,CAAA;IACxB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,8FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;IAChC,qEAAqE;IACrE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACrD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,WAAW,CAalF"}
@@ -0,0 +1,275 @@
1
+ import { join } from 'node:path';
2
+ import { DATA_BRANCH, nodeGitRunner } from '@openagt/agent-data';
3
+ import { OPENAGENT_DIR } from './openagent-dir.js';
4
+ import { prsForBranch } from './dashboard/pull-requests.js';
5
+ import { listAgents } from './store/index.js';
6
+ import { nodeFs } from './node-fs.js';
7
+ import { errorMessage } from './error-message.js';
8
+ import { startProjectPass } from './project-pass.js';
9
+ // Sweep the scratch refs a cloud hand-off leaves on origin (#1547).
10
+ //
11
+ // Every "Run on: Claude web" run pushes two refs that nothing ever consumes again: the slash-free
12
+ // `cloud-*` ref the driver pushes so the cloud session has a ref it can clone at (#1320,
13
+ // anthropics/claude-code#87235), and the run branch (`agent-…`) pushed beside it. The session does its work on its own `claude/*`
14
+ // branch and opens its PR from there, so once provisioning settles both refs are dead names on
15
+ // origin — one pair per web run, accumulating forever.
16
+ //
17
+ // The driver cannot safely delete its own ref: session creation only signals "session created",
18
+ // not "clone finished", and a ref deleted in that window strands the session (recoverable only
19
+ // with `claude --teleport`). So the daemon sweeps instead, and every deletion has to clear four
20
+ // gates:
21
+ //
22
+ // - **Old enough** (~a day) that no provisioning can still be reading it. A run branch is aged
23
+ // from its run's start, off the run's record (the records are shared across machines, so every
24
+ // machine's runs are known here); a `cloud-*` ref carries nothing, so the sweep remembers when
25
+ // it first saw one and only ages it from there — which also keeps a ref pushed by *another*
26
+ // machine safe, since each machine only deletes what it has itself watched for a day.
27
+ // - **Holds no work**: its tip is already reachable from origin's default branch. That is what
28
+ // separates a web run's empty scratch branch from a local run's branch holding unmerged commits —
29
+ // the one thing this sweep must never delete.
30
+ // - **No open PR**, so a deletion can never close one.
31
+ // - **Not a live agent's**: a run the caller names as `busy` keeps its branch. The daemon names
32
+ // none, since it runs no agent.
33
+ //
34
+ // Never throws, and conservative on every unprovable case: a ref it cannot prove dead simply
35
+ // stays, and the next sweep asks again.
36
+ /** How long a scratch ref is left alone before it may go: safely past any provisioning. */
37
+ export const SCRATCH_REF_SAFE_AGE_MS = 24 * 60 * 60 * 1000;
38
+ /**
39
+ * The shape of the pre-hand-off ref the cloud driver pushes: its own session id, a counter plus
40
+ * the 8-hex tag (`cloud-1-3955352b`). Anchored tightly so a user's own `cloud-…` branch that does
41
+ * not match the driver's naming is never even a candidate.
42
+ */
43
+ export const CLOUD_SCRATCH_REF = /^cloud-\d+-[0-9a-f]{8}$/;
44
+ /**
45
+ * Where the sweep remembers when it first saw each `cloud-*` ref, under `.openagent/`
46
+ * (gitignored, like the other per-repo bookkeeping). Needed because the ref's name carries no
47
+ * timestamp and its commit date says nothing — the driver pushes the worktree's HEAD, which is
48
+ * however old the base commit happens to be, not when the hand-off happened.
49
+ */
50
+ const CLOUD_REFS_FILE = 'cloud-refs.json';
51
+ /** A {@link ScratchFs} backed by `node:fs/promises`. See {@link nodeFs}. */
52
+ function nodeScratchFs() {
53
+ const { read, write, mkdir } = nodeFs();
54
+ return { read, write, mkdir };
55
+ }
56
+ /** The first-seen state file path for a repo. */
57
+ export function cloudRefsStatePath(cwd) {
58
+ return join(cwd, OPENAGENT_DIR, CLOUD_REFS_FILE);
59
+ }
60
+ /** Read a repo's first-seen state. Forgiving: missing/unreadable/malformed yields an empty one. */
61
+ async function readState(cwd, fs) {
62
+ try {
63
+ const parsed = JSON.parse(await fs.read(cloudRefsStatePath(cwd)));
64
+ if (parsed && typeof parsed === 'object') {
65
+ const record = parsed['firstSeen'];
66
+ if (record && typeof record === 'object') {
67
+ const firstSeen = {};
68
+ for (const [ref, at] of Object.entries(record)) {
69
+ if (typeof at === 'string')
70
+ firstSeen[ref] = at;
71
+ }
72
+ return { firstSeen };
73
+ }
74
+ }
75
+ }
76
+ catch {
77
+ // absent / unreadable / malformed -> nothing seen yet
78
+ }
79
+ return { firstSeen: {} };
80
+ }
81
+ /** Record a repo's first-seen state, creating `.openagent/` as needed. */
82
+ async function writeState(cwd, state, fs) {
83
+ await fs.mkdir(join(cwd, OPENAGENT_DIR));
84
+ await fs.write(cloudRefsStatePath(cwd), JSON.stringify(state, null, 2));
85
+ }
86
+ /**
87
+ * Parse `git ls-remote --symref origin HEAD 'refs/heads/*'`: the branch HEAD points at (the
88
+ * default branch) plus every branch with its tip. One listing answers everything the
89
+ * classification needs, in one network round-trip.
90
+ */
91
+ function parseLsRemote(listing) {
92
+ const heads = [];
93
+ let defaultBranch;
94
+ for (const line of listing.split('\n')) {
95
+ const symref = /^ref:\s+refs\/heads\/(\S+)\s+HEAD$/.exec(line);
96
+ if (symref) {
97
+ defaultBranch = symref[1];
98
+ continue;
99
+ }
100
+ const head = /^([0-9a-f]{40,64})\t+refs\/heads\/(.+)$/.exec(line);
101
+ if (head)
102
+ heads.push({ ref: head[2], sha: head[1] });
103
+ }
104
+ // A remote that answers no symref (some mirrors) still usually has a conventional default.
105
+ if (!defaultBranch)
106
+ defaultBranch = ['main', 'master'].find(name => heads.some(h => h.ref === name));
107
+ return { ...(defaultBranch !== undefined ? { defaultBranch } : {}), heads };
108
+ }
109
+ /**
110
+ * Whether `sha` is already reachable from the default branch — the proof the ref holds no work.
111
+ * Tried against the remote's own tip first (the freshest answer, when its object is local because
112
+ * this machine pushed or fetched it), then against the local `origin/<default>` tracking ref
113
+ * (stale is fine: reachable from a stale tip is reachable from a newer one). Unprovable — objects
114
+ * missing, no default branch at all — reads as "not landed", which keeps the ref.
115
+ */
116
+ async function landed(git, cwd, sha, defaultBranch, heads) {
117
+ if (defaultBranch === undefined)
118
+ return false;
119
+ const remoteTip = heads.find(h => h.ref === defaultBranch)?.sha;
120
+ for (const tip of [remoteTip, `refs/remotes/origin/${defaultBranch}`]) {
121
+ if (!tip)
122
+ continue;
123
+ const ancestor = await git(['merge-base', '--is-ancestor', sha, tip], cwd).then(() => true, () => false);
124
+ if (ancestor)
125
+ return true;
126
+ }
127
+ return false;
128
+ }
129
+ /**
130
+ * Whether `sha` is an empty commit sitting on a landed parent — the hand-off anchor's shape
131
+ * (#1601): its tree is its parent's tree, so it holds no work of its own, and the parent being
132
+ * on the default branch means everything under it landed. The commit object may not be local
133
+ * (another machine pushed the ref), so the ref is fetched first when needed; anything still
134
+ * unprovable reads as "holds work", which keeps the ref for a later sweep.
135
+ */
136
+ async function emptyTipOnLandedParent(git, cwd, ref, sha, defaultBranch, heads) {
137
+ const present = await git(['cat-file', '-e', `${sha}^{commit}`], cwd).then(() => true, () => false);
138
+ if (!present && !(await git(['fetch', 'origin', `refs/heads/${ref}`], cwd).then(() => true, () => false)))
139
+ return false;
140
+ try {
141
+ const tree = (await git(['rev-parse', `${sha}^{tree}`], cwd)).trim();
142
+ const parent = (await git(['rev-parse', `${sha}^`], cwd)).trim();
143
+ const parentTree = (await git(['rev-parse', `${sha}^^{tree}`], cwd)).trim();
144
+ if (!tree || !parent || tree !== parentTree)
145
+ return false;
146
+ return await landed(git, cwd, parent, defaultBranch, heads);
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ /**
153
+ * Sweep one repo's origin for the dead refs cloud hand-offs left behind (#1547), deleting the
154
+ * ones that clear every gate. Never throws: a repo with no remote (or offline) sweeps nothing,
155
+ * and a failed deletion is reported and retried next sweep.
156
+ */
157
+ export async function sweepCloudScratchRefs(cwd, deps = {}) {
158
+ const git = deps.git ?? nodeGitRunner();
159
+ const prs = deps.prs ?? prsForBranch;
160
+ const fs = deps.fs ?? nodeScratchFs();
161
+ const now = deps.now ? deps.now() : Date.now();
162
+ const ageMs = deps.ageMs ?? SCRATCH_REF_SAFE_AGE_MS;
163
+ const result = { deleted: [], kept: [], failed: [] };
164
+ let listing;
165
+ try {
166
+ listing = await git(['ls-remote', '--symref', 'origin', 'HEAD', 'refs/heads/*'], cwd);
167
+ }
168
+ catch {
169
+ return result; // no remote, or it cannot be reached: nothing to sweep
170
+ }
171
+ const { defaultBranch, heads } = parseLsRemote(listing);
172
+ const state = await readState(cwd, fs);
173
+ // A run branch is one a run's record names (#1774): the record says when the run started, and
174
+ // whose it is. A branch no record names is nobody's to delete.
175
+ const runs = new Map();
176
+ for (const run of await (deps.agents ?? listAgents)(cwd).catch(() => []))
177
+ if (run.branch && !runs.has(run.branch))
178
+ runs.set(run.branch, run);
179
+ // Rebuilt from what origin actually has, so entries for refs deleted (by us or anyone) fall away.
180
+ const firstSeen = {};
181
+ const candidates = [];
182
+ for (const head of heads) {
183
+ if (CLOUD_SCRATCH_REF.test(head.ref)) {
184
+ const seenAt = state.firstSeen[head.ref];
185
+ const seenMs = seenAt === undefined ? NaN : Date.parse(seenAt);
186
+ if (!Number.isFinite(seenMs)) {
187
+ // First sight (or a hand-edited timestamp): the day starts now.
188
+ firstSeen[head.ref] = new Date(now).toISOString();
189
+ result.kept.push({ ref: head.ref, reason: 'young' });
190
+ continue;
191
+ }
192
+ firstSeen[head.ref] = seenAt;
193
+ if (now - seenMs < ageMs) {
194
+ result.kept.push({ ref: head.ref, reason: 'young' });
195
+ continue;
196
+ }
197
+ candidates.push(head);
198
+ continue;
199
+ }
200
+ // The default branch and the data branch are nobody's scratch, whatever a run's record says: a
201
+ // run that recorded `main` as its branch (one that never left it) must not turn the sweep on main.
202
+ if (head.ref === defaultBranch || head.ref === DATA_BRANCH)
203
+ continue;
204
+ const run = runs.get(head.ref);
205
+ if (run) {
206
+ const startedMs = Date.parse(run.startedAt);
207
+ if (!Number.isFinite(startedMs))
208
+ continue; // a run whose age is unknowable is not ours to delete
209
+ if (deps.busy?.has(run.id)) {
210
+ result.kept.push({ ref: head.ref, reason: 'busy' });
211
+ continue;
212
+ }
213
+ if (now - startedMs < ageMs) {
214
+ result.kept.push({ ref: head.ref, reason: 'young' });
215
+ continue;
216
+ }
217
+ candidates.push(head);
218
+ }
219
+ // Every other branch — the default, `claude/*`, a branch no run's record names — is not a
220
+ // scratch ref and is never even considered.
221
+ }
222
+ for (const { ref, sha } of candidates) {
223
+ // The work gate first: it is local and free, and it is the one that must never be wrong.
224
+ // A tip the default branch never absorbs still clears it when it is a hand-off anchor
225
+ // (#1601): an empty commit whose parent landed changes nothing, and no merge ever lands
226
+ // the anchor itself — a squash merge rewrites the session's history without it.
227
+ if (!(await landed(git, cwd, sha, defaultBranch, heads)) && !(await emptyTipOnLandedParent(git, cwd, ref, sha, defaultBranch, heads))) {
228
+ result.kept.push({ ref, reason: 'holds-work' });
229
+ continue;
230
+ }
231
+ // prsForBranch resolves [] when the git host cannot answer, so a hiccup here fails toward
232
+ // deletion — acceptable only because the work gate already proved the ref holds nothing.
233
+ const history = await prs(cwd, ref).catch(() => []);
234
+ if (history.some(pr => pr.state === 'OPEN')) {
235
+ result.kept.push({ ref, reason: 'open-pr' });
236
+ continue;
237
+ }
238
+ try {
239
+ await git(['push', 'origin', '--delete', ref], cwd);
240
+ result.deleted.push(ref);
241
+ delete firstSeen[ref];
242
+ }
243
+ catch (err) {
244
+ // The first-seen entry stays, so the retry next sweep does not restart the day.
245
+ result.failed.push({ ref, error: errorMessage(err) });
246
+ }
247
+ }
248
+ if (JSON.stringify(firstSeen) !== JSON.stringify(state.firstSeen)) {
249
+ await writeState(cwd, { firstSeen }, fs).catch(() => {
250
+ // Best effort: an unwritable state file only delays deletions, never loses work.
251
+ });
252
+ }
253
+ return result;
254
+ }
255
+ /**
256
+ * Sweep every registered project's leftover cloud scratch refs (#1547), one turn per call.
257
+ *
258
+ * Deletions and failures are said out loud, kept refs are not: a candidate that is merely not old
259
+ * enough yet is the normal state of every ref this watches, and a line per tick about it would be
260
+ * noise. A ref vanishing from origin with no line explaining why would read as a bug.
261
+ */
262
+ export function startCloudScratchSweep(opts) {
263
+ const sweep = opts.sweep ?? ((cwd) => sweepCloudScratchRefs(cwd, { ...(opts.busy ? { busy: opts.busy() } : {}) }));
264
+ // No timer of its own (E4): the daemon's one clock calls `tick`.
265
+ return startProjectPass(opts.projects, async (cwd) => {
266
+ const { deleted, failed } = await sweep(cwd).catch(() => ({ deleted: [], kept: [], failed: [] }));
267
+ for (const ref of deleted) {
268
+ opts.log(`[openagent] deleted the leftover cloud hand-off ref ${ref} on origin: its session settled long ago and nothing consumes it (#1547).`);
269
+ }
270
+ for (const item of failed) {
271
+ opts.log(`[openagent] could not delete the leftover ref ${item.ref} on origin: ${item.error}`);
272
+ }
273
+ });
274
+ }
275
+ //# sourceMappingURL=cloud-scratch-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-scratch-refs.js","sourceRoot":"","sources":["../src/cloud-scratch-refs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { type GitRunner } from '@openagt/agent-data';
2
+ import { type LinkedPr } from './dashboard/pull-requests.js';
3
+ import { type HandoffResult } from './dashboard/agent-handoff.js';
4
+ import { type AgentMeta, type RunPatch } from './store/index.js';
5
+ import { type ProjectPass, type ProjectsSource } from './project-pass.js';
6
+ /** How long after its start a run is still asked about: safely past any cloud session's life. */
7
+ export declare const CLOUD_ADOPTION_WINDOW_MS: number;
8
+ /** What one adoption did, for the daemon to say out loud. */
9
+ export interface CloudAdoption {
10
+ agentId: string;
11
+ branch: string;
12
+ /** The PR now on the run's record, when one was found or opened. */
13
+ pr?: {
14
+ number: number;
15
+ url: string;
16
+ };
17
+ /** True when the PR above was opened by this pass (the armed draft), not found. */
18
+ opened?: boolean;
19
+ }
20
+ /** What {@link adoptCloudWork} did to one project. */
21
+ export interface CloudWorkResult {
22
+ adopted: CloudAdoption[];
23
+ /** Failures worth a log line; unmatched runs are not one, they are the normal waiting state. */
24
+ failed: {
25
+ agentId: string;
26
+ error: string;
27
+ }[];
28
+ }
29
+ /** Injectable seams so the pass is unit-testable off disk, off the network and off the git host. */
30
+ export interface CloudWorkDeps {
31
+ git?: GitRunner;
32
+ /** The branch's full PR history; a listing that fails must throw (default {@link prsForBranchOrThrow}). */
33
+ prs?: (cwd: string, branch: string) => Promise<LinkedPr[]>;
34
+ /** The project's run records, none older than `since` in epoch ms (default {@link listAgents}). */
35
+ agents?: (cwd: string, since: number) => Promise<AgentMeta[]>;
36
+ /** Record the adopted branch and PR on the run's card, as one commit on the data branch (default the `logs` skill's {@link patchRun}). */
37
+ patch?: (cwd: string, agentId: string, patch: RunPatch) => Promise<boolean>;
38
+ /** Open the armed draft PR for a remote-only branch (default {@link openRemoteBranchPullRequest}). */
39
+ openPr?: (cwd: string, agent: AgentMeta, branch: string) => Promise<HandoffResult>;
40
+ /** The current time in ms (injected so tests can age runs deterministically). */
41
+ now?: () => number;
42
+ }
43
+ /**
44
+ * Adopt one project's cloud work (#1601): match each waiting web run to the `claude/*` head
45
+ * descending from its hand-off anchor, and record the branch and its PR onto the run's archive —
46
+ * opening the armed draft PR when the session never did. Never throws: a repo with no remote
47
+ * (or offline) adopts nothing, and every unmatched run is retried next pass.
48
+ */
49
+ export declare function adoptCloudWork(cwd: string, deps?: CloudWorkDeps): Promise<CloudWorkResult>;
50
+ /** What {@link startCloudWorkAdoption} needs from the daemon. */
51
+ export interface CloudWorkAdoptionOptions {
52
+ /** The registered projects to pass over. */
53
+ projects: ProjectsSource;
54
+ log: (message: string) => void;
55
+ /** The per-project pass (default {@link adoptCloudWork}). */
56
+ adopt?: (cwd: string) => Promise<CloudWorkResult>;
57
+ }
58
+ /**
59
+ * Adopt every registered project's cloud work (#1601), one turn per call.
60
+ *
61
+ * Adoptions and failures are said out loud, unmatched runs are not: a session that has not
62
+ * pushed yet is the normal state of every run this watches, and a line per tick about it would
63
+ * be noise. A run's row changing branch with no line explaining why would read as a bug.
64
+ */
65
+ export declare function startCloudWorkAdoption(opts: CloudWorkAdoptionOptions): ProjectPass;
66
+ //# sourceMappingURL=cloud-work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-work.d.ts","sourceRoot":"","sources":["../src/cloud-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EAAiD,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE/G,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAuB3F,iGAAiG;AACjG,eAAO,MAAM,wBAAwB,QAAsB,CAAA;AAE3D,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,gGAAgG;IAChG,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC7C;AAED,oGAAoG;AACpG,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,SAAS,CAAA;IACf,2GAA2G;IAC3G,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1D,mGAAmG;IACnG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAC7D,0IAA0I;IAC1I,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,sGAAsG;IACtG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAClF,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAuFD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+EpG;AAED,iEAAiE;AACjE,MAAM,WAAW,wBAAwB;IACvC,4CAA4C;IAC5C,QAAQ,EAAE,cAAc,CAAA;IACxB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,WAAW,CAclF"}