botmux 3.10.0 → 3.11.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 (539) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/herdr-backend.d.ts +4 -3
  3. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/herdr-backend.js +11 -8
  5. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  6. package/dist/adapters/backend/pty-backend.d.ts +1 -1
  7. package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
  8. package/dist/adapters/backend/pty-backend.js +4 -1
  9. package/dist/adapters/backend/pty-backend.js.map +1 -1
  10. package/dist/adapters/backend/riff-backend.d.ts +29 -5
  11. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/riff-backend.js +302 -31
  13. package/dist/adapters/backend/riff-backend.js.map +1 -1
  14. package/dist/adapters/backend/sandbox.d.ts +6 -0
  15. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  16. package/dist/adapters/backend/sandbox.js +7 -0
  17. package/dist/adapters/backend/sandbox.js.map +1 -1
  18. package/dist/adapters/backend/tmux-backend.d.ts +1 -1
  19. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  20. package/dist/adapters/backend/tmux-backend.js +4 -1
  21. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  22. package/dist/adapters/backend/tmux-pipe-backend.d.ts +1 -1
  23. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  24. package/dist/adapters/backend/tmux-pipe-backend.js +1 -1
  25. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  26. package/dist/adapters/backend/types.d.ts +37 -3
  27. package/dist/adapters/backend/types.d.ts.map +1 -1
  28. package/dist/adapters/backend/types.js.map +1 -1
  29. package/dist/adapters/backend/zellij-backend.d.ts +3 -3
  30. package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
  31. package/dist/adapters/backend/zellij-backend.js +9 -3
  32. package/dist/adapters/backend/zellij-backend.js.map +1 -1
  33. package/dist/adapters/backend/zellij-observe-backend.d.ts +3 -3
  34. package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
  35. package/dist/adapters/backend/zellij-observe-backend.js +12 -7
  36. package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
  37. package/dist/adapters/cli/codex-app.d.ts.map +1 -1
  38. package/dist/adapters/cli/codex-app.js +11 -2
  39. package/dist/adapters/cli/codex-app.js.map +1 -1
  40. package/dist/adapters/cli/read-isolation.d.ts +35 -2
  41. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  42. package/dist/adapters/cli/read-isolation.js +88 -7
  43. package/dist/adapters/cli/read-isolation.js.map +1 -1
  44. package/dist/adapters/cli/runner-input.d.ts +15 -14
  45. package/dist/adapters/cli/runner-input.d.ts.map +1 -1
  46. package/dist/adapters/cli/runner-input.js +64 -26
  47. package/dist/adapters/cli/runner-input.js.map +1 -1
  48. package/dist/adapters/cli/types.d.ts +20 -5
  49. package/dist/adapters/cli/types.d.ts.map +1 -1
  50. package/dist/bot-registry.d.ts +24 -0
  51. package/dist/bot-registry.d.ts.map +1 -1
  52. package/dist/bot-registry.js +110 -5
  53. package/dist/bot-registry.js.map +1 -1
  54. package/dist/cli/fleet-shutdown.d.ts +47 -0
  55. package/dist/cli/fleet-shutdown.d.ts.map +1 -0
  56. package/dist/cli/fleet-shutdown.js +387 -0
  57. package/dist/cli/fleet-shutdown.js.map +1 -0
  58. package/dist/cli/pm2-descriptor-guard.d.ts +19 -0
  59. package/dist/cli/pm2-descriptor-guard.d.ts.map +1 -0
  60. package/dist/cli/pm2-descriptor-guard.js +122 -0
  61. package/dist/cli/pm2-descriptor-guard.js.map +1 -0
  62. package/dist/cli/pm2-exact-start.d.ts +16 -0
  63. package/dist/cli/pm2-exact-start.d.ts.map +1 -0
  64. package/dist/cli/pm2-exact-start.js +63 -0
  65. package/dist/cli/pm2-exact-start.js.map +1 -0
  66. package/dist/cli/pm2-god-admission.d.ts +8 -0
  67. package/dist/cli/pm2-god-admission.d.ts.map +1 -0
  68. package/dist/cli/pm2-god-admission.js +25 -0
  69. package/dist/cli/pm2-god-admission.js.map +1 -0
  70. package/dist/cli/pm2-jlist.d.ts +13 -0
  71. package/dist/cli/pm2-jlist.d.ts.map +1 -0
  72. package/dist/cli/pm2-jlist.js +108 -0
  73. package/dist/cli/pm2-jlist.js.map +1 -0
  74. package/dist/cli/pm2-preflight.d.ts +10 -0
  75. package/dist/cli/pm2-preflight.d.ts.map +1 -0
  76. package/dist/cli/pm2-preflight.js +23 -0
  77. package/dist/cli/pm2-preflight.js.map +1 -0
  78. package/dist/cli/pm2-shutdown-capability.d.ts +27 -0
  79. package/dist/cli/pm2-shutdown-capability.d.ts.map +1 -0
  80. package/dist/cli/pm2-shutdown-capability.js +161 -0
  81. package/dist/cli/pm2-shutdown-capability.js.map +1 -0
  82. package/dist/cli/pm2-start-transaction.d.ts +55 -0
  83. package/dist/cli/pm2-start-transaction.d.ts.map +1 -0
  84. package/dist/cli/pm2-start-transaction.js +220 -0
  85. package/dist/cli/pm2-start-transaction.js.map +1 -0
  86. package/dist/cli/send-dispatch.d.ts +12 -0
  87. package/dist/cli/send-dispatch.d.ts.map +1 -1
  88. package/dist/cli/send-dispatch.js +31 -4
  89. package/dist/cli/send-dispatch.js.map +1 -1
  90. package/dist/cli/session-list-liveness.d.ts +1 -0
  91. package/dist/cli/session-list-liveness.d.ts.map +1 -1
  92. package/dist/cli/session-list-liveness.js +6 -0
  93. package/dist/cli/session-list-liveness.js.map +1 -1
  94. package/dist/cli/session-picker-layout.d.ts +26 -0
  95. package/dist/cli/session-picker-layout.d.ts.map +1 -0
  96. package/dist/cli/session-picker-layout.js +123 -0
  97. package/dist/cli/session-picker-layout.js.map +1 -0
  98. package/dist/cli/session-picker-viewport.d.ts +49 -0
  99. package/dist/cli/session-picker-viewport.d.ts.map +1 -0
  100. package/dist/cli/session-picker-viewport.js +46 -0
  101. package/dist/cli/session-picker-viewport.js.map +1 -0
  102. package/dist/cli/supervisor-shutdown-client.d.ts +31 -0
  103. package/dist/cli/supervisor-shutdown-client.d.ts.map +1 -0
  104. package/dist/cli/supervisor-shutdown-client.js +146 -0
  105. package/dist/cli/supervisor-shutdown-client.js.map +1 -0
  106. package/dist/cli/terminal-width.d.ts +48 -0
  107. package/dist/cli/terminal-width.d.ts.map +1 -0
  108. package/dist/cli/terminal-width.js +119 -0
  109. package/dist/cli/terminal-width.js.map +1 -0
  110. package/dist/cli/vc-agent.d.ts.map +1 -1
  111. package/dist/cli/vc-agent.js +1 -1
  112. package/dist/cli/vc-agent.js.map +1 -1
  113. package/dist/cli.d.ts.map +1 -1
  114. package/dist/cli.js +2269 -716
  115. package/dist/cli.js.map +1 -1
  116. package/dist/codex-app-runner.js +1630 -125
  117. package/dist/codex-app-runner.js.map +1 -1
  118. package/dist/core/ask-api.d.ts +8 -1
  119. package/dist/core/ask-api.d.ts.map +1 -1
  120. package/dist/core/ask-api.js +18 -0
  121. package/dist/core/ask-api.js.map +1 -1
  122. package/dist/core/ask-broker.d.ts +20 -0
  123. package/dist/core/ask-broker.d.ts.map +1 -1
  124. package/dist/core/ask-broker.js +467 -47
  125. package/dist/core/ask-broker.js.map +1 -1
  126. package/dist/core/ask-persist-store.d.ts +126 -0
  127. package/dist/core/ask-persist-store.d.ts.map +1 -0
  128. package/dist/core/ask-persist-store.js +188 -0
  129. package/dist/core/ask-persist-store.js.map +1 -0
  130. package/dist/core/ask-types.d.ts +80 -0
  131. package/dist/core/ask-types.d.ts.map +1 -1
  132. package/dist/core/ask-types.js +62 -0
  133. package/dist/core/ask-types.js.map +1 -1
  134. package/dist/core/cli-session-id-publisher.d.ts +20 -0
  135. package/dist/core/cli-session-id-publisher.d.ts.map +1 -0
  136. package/dist/core/cli-session-id-publisher.js +21 -0
  137. package/dist/core/cli-session-id-publisher.js.map +1 -0
  138. package/dist/core/command-handler.d.ts.map +1 -1
  139. package/dist/core/command-handler.js +427 -255
  140. package/dist/core/command-handler.js.map +1 -1
  141. package/dist/core/cost-calculator.d.ts +13 -0
  142. package/dist/core/cost-calculator.d.ts.map +1 -1
  143. package/dist/core/cost-calculator.js +385 -26
  144. package/dist/core/cost-calculator.js.map +1 -1
  145. package/dist/core/dashboard-ipc-server.d.ts +9 -0
  146. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  147. package/dist/core/dashboard-ipc-server.js +842 -288
  148. package/dist/core/dashboard-ipc-server.js.map +1 -1
  149. package/dist/core/explicit-session-backing-cleanup.d.ts +49 -0
  150. package/dist/core/explicit-session-backing-cleanup.d.ts.map +1 -0
  151. package/dist/core/explicit-session-backing-cleanup.js +76 -0
  152. package/dist/core/explicit-session-backing-cleanup.js.map +1 -0
  153. package/dist/core/idle-worker-sweeper.d.ts +20 -0
  154. package/dist/core/idle-worker-sweeper.d.ts.map +1 -1
  155. package/dist/core/idle-worker-sweeper.js +18 -0
  156. package/dist/core/idle-worker-sweeper.js.map +1 -1
  157. package/dist/core/inflight-input-tracker.d.ts +10 -0
  158. package/dist/core/inflight-input-tracker.d.ts.map +1 -1
  159. package/dist/core/inflight-input-tracker.js +7 -0
  160. package/dist/core/inflight-input-tracker.js.map +1 -1
  161. package/dist/core/managed-origin-attestation.d.ts +51 -0
  162. package/dist/core/managed-origin-attestation.d.ts.map +1 -0
  163. package/dist/core/managed-origin-attestation.js +208 -0
  164. package/dist/core/managed-origin-attestation.js.map +1 -0
  165. package/dist/core/managed-origin-capability.d.ts +62 -3
  166. package/dist/core/managed-origin-capability.d.ts.map +1 -1
  167. package/dist/core/managed-origin-capability.js +419 -9
  168. package/dist/core/managed-origin-capability.js.map +1 -1
  169. package/dist/core/pending-repo-journal.d.ts +6 -0
  170. package/dist/core/pending-repo-journal.d.ts.map +1 -0
  171. package/dist/core/pending-repo-journal.js +85 -0
  172. package/dist/core/pending-repo-journal.js.map +1 -0
  173. package/dist/core/persistent-backend.d.ts +6 -1
  174. package/dist/core/persistent-backend.d.ts.map +1 -1
  175. package/dist/core/persistent-backend.js +12 -6
  176. package/dist/core/persistent-backend.js.map +1 -1
  177. package/dist/core/process-start-identity.d.ts +3 -0
  178. package/dist/core/process-start-identity.d.ts.map +1 -0
  179. package/dist/core/process-start-identity.js +62 -0
  180. package/dist/core/process-start-identity.js.map +1 -0
  181. package/dist/core/raw-command-writer.d.ts +34 -0
  182. package/dist/core/raw-command-writer.d.ts.map +1 -0
  183. package/dist/core/raw-command-writer.js +48 -0
  184. package/dist/core/raw-command-writer.js.map +1 -0
  185. package/dist/core/reply-target.d.ts +85 -22
  186. package/dist/core/reply-target.d.ts.map +1 -1
  187. package/dist/core/reply-target.js +267 -32
  188. package/dist/core/reply-target.js.map +1 -1
  189. package/dist/core/resource-monitor/runtime.d.ts.map +1 -1
  190. package/dist/core/resource-monitor/runtime.js +4 -1
  191. package/dist/core/resource-monitor/runtime.js.map +1 -1
  192. package/dist/core/restart-report.d.ts +6 -1
  193. package/dist/core/restart-report.d.ts.map +1 -1
  194. package/dist/core/restart-report.js +22 -4
  195. package/dist/core/restart-report.js.map +1 -1
  196. package/dist/core/riff-shutdown-detach.d.ts +164 -0
  197. package/dist/core/riff-shutdown-detach.d.ts.map +1 -0
  198. package/dist/core/riff-shutdown-detach.js +787 -0
  199. package/dist/core/riff-shutdown-detach.js.map +1 -0
  200. package/dist/core/riff-worker-shutdown-readiness.d.ts +17 -0
  201. package/dist/core/riff-worker-shutdown-readiness.d.ts.map +1 -0
  202. package/dist/core/riff-worker-shutdown-readiness.js +21 -0
  203. package/dist/core/riff-worker-shutdown-readiness.js.map +1 -0
  204. package/dist/core/session-manager.d.ts +6 -6
  205. package/dist/core/session-manager.d.ts.map +1 -1
  206. package/dist/core/session-manager.js +1227 -594
  207. package/dist/core/session-manager.js.map +1 -1
  208. package/dist/core/session-marker.d.ts +1 -1
  209. package/dist/core/session-marker.d.ts.map +1 -1
  210. package/dist/core/session-marker.js +2 -2
  211. package/dist/core/session-marker.js.map +1 -1
  212. package/dist/core/session-mutation-guard.d.ts +17 -0
  213. package/dist/core/session-mutation-guard.d.ts.map +1 -0
  214. package/dist/core/session-mutation-guard.js +33 -0
  215. package/dist/core/session-mutation-guard.js.map +1 -0
  216. package/dist/core/shutdown-budgets.d.ts +27 -0
  217. package/dist/core/shutdown-budgets.d.ts.map +1 -0
  218. package/dist/core/shutdown-budgets.js +47 -0
  219. package/dist/core/shutdown-budgets.js.map +1 -0
  220. package/dist/core/supervisor-shutdown-ipc.d.ts +10 -0
  221. package/dist/core/supervisor-shutdown-ipc.d.ts.map +1 -0
  222. package/dist/core/supervisor-shutdown-ipc.js +10 -0
  223. package/dist/core/supervisor-shutdown-ipc.js.map +1 -0
  224. package/dist/core/supervisor-shutdown-protocol.d.ts +16 -0
  225. package/dist/core/supervisor-shutdown-protocol.d.ts.map +1 -0
  226. package/dist/core/supervisor-shutdown-protocol.js +16 -0
  227. package/dist/core/supervisor-shutdown-protocol.js.map +1 -0
  228. package/dist/core/trigger-final-suppression.d.ts +4 -0
  229. package/dist/core/trigger-final-suppression.d.ts.map +1 -1
  230. package/dist/core/trigger-final-suppression.js +6 -11
  231. package/dist/core/trigger-final-suppression.js.map +1 -1
  232. package/dist/core/trigger-session.d.ts +70 -0
  233. package/dist/core/trigger-session.d.ts.map +1 -1
  234. package/dist/core/trigger-session.js +923 -145
  235. package/dist/core/trigger-session.js.map +1 -1
  236. package/dist/core/types.d.ts +94 -1
  237. package/dist/core/types.d.ts.map +1 -1
  238. package/dist/core/types.js +9 -0
  239. package/dist/core/types.js.map +1 -1
  240. package/dist/core/worker-pool.d.ts +194 -13
  241. package/dist/core/worker-pool.d.ts.map +1 -1
  242. package/dist/core/worker-pool.js +2597 -547
  243. package/dist/core/worker-pool.js.map +1 -1
  244. package/dist/daemon.d.ts +76 -2
  245. package/dist/daemon.d.ts.map +1 -1
  246. package/dist/daemon.js +2255 -773
  247. package/dist/daemon.js.map +1 -1
  248. package/dist/dashboard/bot-payload.d.ts +20 -0
  249. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  250. package/dist/dashboard/bot-payload.js +24 -0
  251. package/dist/dashboard/bot-payload.js.map +1 -1
  252. package/dist/dashboard/feed-groups.d.ts +17 -0
  253. package/dist/dashboard/feed-groups.d.ts.map +1 -0
  254. package/dist/dashboard/feed-groups.js +75 -0
  255. package/dist/dashboard/feed-groups.js.map +1 -0
  256. package/dist/dashboard/session-card-model.d.ts +1 -1
  257. package/dist/dashboard/session-card-model.d.ts.map +1 -1
  258. package/dist/dashboard/session-card-model.js +8 -5
  259. package/dist/dashboard/session-card-model.js.map +1 -1
  260. package/dist/dashboard/web/bot-defaults-page.d.ts +4 -0
  261. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  262. package/dist/dashboard/web/bot-defaults-page.js +139 -46
  263. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  264. package/dist/dashboard/web/bot-defaults.d.ts +4 -0
  265. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  266. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  267. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  268. package/dist/dashboard/web/connectors-page.js +40 -3
  269. package/dist/dashboard/web/connectors-page.js.map +1 -1
  270. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  271. package/dist/dashboard/web/groups-page.js +95 -2
  272. package/dist/dashboard/web/groups-page.js.map +1 -1
  273. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  274. package/dist/dashboard/web/i18n.js +86 -40
  275. package/dist/dashboard/web/i18n.js.map +1 -1
  276. package/dist/dashboard/web/kanban-model.js +1 -1
  277. package/dist/dashboard/web/kanban-model.js.map +1 -1
  278. package/dist/dashboard/web/overview-page.d.ts.map +1 -1
  279. package/dist/dashboard/web/overview-page.js +3 -2
  280. package/dist/dashboard/web/overview-page.js.map +1 -1
  281. package/dist/dashboard/web/overview.d.ts +3 -0
  282. package/dist/dashboard/web/overview.d.ts.map +1 -1
  283. package/dist/dashboard/web/overview.js +2 -0
  284. package/dist/dashboard/web/overview.js.map +1 -1
  285. package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
  286. package/dist/dashboard/web/sessions-kanban.js +2 -0
  287. package/dist/dashboard/web/sessions-kanban.js.map +1 -1
  288. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  289. package/dist/dashboard/web/sessions-page.js +103 -2
  290. package/dist/dashboard/web/sessions-page.js.map +1 -1
  291. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  292. package/dist/dashboard/web/sessions.js +3 -2
  293. package/dist/dashboard/web/sessions.js.map +1 -1
  294. package/dist/dashboard/web/ui.d.ts +8 -0
  295. package/dist/dashboard/web/ui.d.ts.map +1 -1
  296. package/dist/dashboard/web/ui.js +15 -0
  297. package/dist/dashboard/web/ui.js.map +1 -1
  298. package/dist/dashboard-web/app.js +1 -1
  299. package/dist/dashboard-web/chunks/bot-defaults-page-GED4FEMS.js +10 -0
  300. package/dist/dashboard-web/chunks/chunk-6J5LS5AU.js +51 -0
  301. package/dist/dashboard-web/chunks/{chunk-ZU3UUKAR.js → chunk-HK7NIBJG.js} +1 -1
  302. package/dist/dashboard-web/chunks/{chunk-3UE7S77S.js → chunk-KRHWZEXU.js} +1 -1
  303. package/dist/dashboard-web/chunks/chunk-VBXJOJFH.js +1 -0
  304. package/dist/dashboard-web/chunks/connectors-page-EELM66G3.js +1 -0
  305. package/dist/dashboard-web/chunks/groups-page-WKUV6E42.js +8 -0
  306. package/dist/dashboard-web/chunks/{insights-page-T2ZX2RWL.js → insights-page-54UBPPOC.js} +1 -1
  307. package/dist/dashboard-web/chunks/{monitor-room-YNVBAGR6.js → monitor-room-PORHVKRH.js} +1 -1
  308. package/dist/dashboard-web/chunks/{monitoring-page-LHM55YWN.js → monitoring-page-XGA7AXNL.js} +1 -1
  309. package/dist/dashboard-web/chunks/{office-page-ATXVP7PW.js → office-page-AO3AFG45.js} +1 -1
  310. package/dist/dashboard-web/chunks/overview-page-F5BUTYR6.js +1 -0
  311. package/dist/dashboard-web/chunks/{roles-page-56VWM6CD.js → roles-page-M5GIASJU.js} +1 -1
  312. package/dist/dashboard-web/chunks/{schedules-page-S5K6U4EO.js → schedules-page-O232WQRR.js} +1 -1
  313. package/dist/dashboard-web/chunks/sessions-page-YFRPSTIL.js +6 -0
  314. package/dist/dashboard-web/chunks/{settings-page-QUZDQARR.js → settings-page-OJAZLZQT.js} +1 -1
  315. package/dist/dashboard-web/chunks/{skills-page-IFY7AEND.js → skills-page-EFZQPWV4.js} +1 -1
  316. package/dist/dashboard-web/chunks/{team-federation-page-C7FJQPFZ.js → team-federation-page-ZJVAP7HW.js} +1 -1
  317. package/dist/dashboard-web/chunks/{v3-page-2LMF3WWR.js → v3-page-GYWTRGO2.js} +1 -1
  318. package/dist/dashboard-web/chunks/{whiteboards-page-3XC6QRMY.js → whiteboards-page-MSDAG6P7.js} +1 -1
  319. package/dist/dashboard-web/style.css +255 -0
  320. package/dist/dashboard.js +172 -7
  321. package/dist/dashboard.js.map +1 -1
  322. package/dist/desktop/renderer/app.js +21 -0
  323. package/dist/desktop/renderer/app.js.map +1 -1
  324. package/dist/i18n/en.d.ts.map +1 -1
  325. package/dist/i18n/en.js +35 -9
  326. package/dist/i18n/en.js.map +1 -1
  327. package/dist/i18n/zh.d.ts.map +1 -1
  328. package/dist/i18n/zh.js +35 -9
  329. package/dist/i18n/zh.js.map +1 -1
  330. package/dist/im/lark/ask-card.d.ts +23 -0
  331. package/dist/im/lark/ask-card.d.ts.map +1 -1
  332. package/dist/im/lark/ask-card.js +94 -4
  333. package/dist/im/lark/ask-card.js.map +1 -1
  334. package/dist/im/lark/card-builder.d.ts +6 -1
  335. package/dist/im/lark/card-builder.d.ts.map +1 -1
  336. package/dist/im/lark/card-builder.js +112 -15
  337. package/dist/im/lark/card-builder.js.map +1 -1
  338. package/dist/im/lark/card-handler.d.ts +1 -1
  339. package/dist/im/lark/card-handler.d.ts.map +1 -1
  340. package/dist/im/lark/card-handler.js +496 -310
  341. package/dist/im/lark/card-handler.js.map +1 -1
  342. package/dist/im/lark/client.d.ts +7 -0
  343. package/dist/im/lark/client.d.ts.map +1 -1
  344. package/dist/im/lark/client.js +39 -26
  345. package/dist/im/lark/client.js.map +1 -1
  346. package/dist/im/lark/doc-comment.d.ts +7 -4
  347. package/dist/im/lark/doc-comment.d.ts.map +1 -1
  348. package/dist/im/lark/doc-comment.js +19 -6
  349. package/dist/im/lark/doc-comment.js.map +1 -1
  350. package/dist/im/lark/event-dispatcher.d.ts +16 -0
  351. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  352. package/dist/im/lark/event-dispatcher.js +88 -23
  353. package/dist/im/lark/event-dispatcher.js.map +1 -1
  354. package/dist/im/lark/forward-followup-content.d.ts.map +1 -1
  355. package/dist/im/lark/forward-followup-content.js +9 -1
  356. package/dist/im/lark/forward-followup-content.js.map +1 -1
  357. package/dist/im/lark/grant-command.d.ts.map +1 -1
  358. package/dist/im/lark/grant-command.js +7 -4
  359. package/dist/im/lark/grant-command.js.map +1 -1
  360. package/dist/im/lark/md-card.d.ts +11 -0
  361. package/dist/im/lark/md-card.d.ts.map +1 -1
  362. package/dist/im/lark/md-card.js +46 -0
  363. package/dist/im/lark/md-card.js.map +1 -1
  364. package/dist/im/lark/message-parser.d.ts +23 -2
  365. package/dist/im/lark/message-parser.d.ts.map +1 -1
  366. package/dist/im/lark/message-parser.js +58 -3
  367. package/dist/im/lark/message-parser.js.map +1 -1
  368. package/dist/im/lark/overview-card.d.ts.map +1 -1
  369. package/dist/im/lark/overview-card.js +2 -1
  370. package/dist/im/lark/overview-card.js.map +1 -1
  371. package/dist/services/async-trigger-state.d.ts +6 -1
  372. package/dist/services/async-trigger-state.d.ts.map +1 -1
  373. package/dist/services/async-trigger-state.js +21 -0
  374. package/dist/services/async-trigger-state.js.map +1 -1
  375. package/dist/services/async-trigger-store.d.ts +23 -1
  376. package/dist/services/async-trigger-store.d.ts.map +1 -1
  377. package/dist/services/async-trigger-store.js +96 -13
  378. package/dist/services/async-trigger-store.js.map +1 -1
  379. package/dist/services/bridge-fallback-gate.d.ts +40 -0
  380. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  381. package/dist/services/bridge-fallback-gate.js +124 -24
  382. package/dist/services/bridge-fallback-gate.js.map +1 -1
  383. package/dist/services/codex-app-runner-protocol.d.ts +8 -0
  384. package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
  385. package/dist/services/codex-app-runner-protocol.js +9 -2
  386. package/dist/services/codex-app-runner-protocol.js.map +1 -1
  387. package/dist/services/codex-bridge-queue.d.ts +1 -0
  388. package/dist/services/codex-bridge-queue.d.ts.map +1 -1
  389. package/dist/services/codex-bridge-queue.js +1 -0
  390. package/dist/services/codex-bridge-queue.js.map +1 -1
  391. package/dist/services/codex-service-tier.d.ts +2 -0
  392. package/dist/services/codex-service-tier.d.ts.map +1 -1
  393. package/dist/services/codex-service-tier.js +1 -0
  394. package/dist/services/codex-service-tier.js.map +1 -1
  395. package/dist/services/codex-transcript.d.ts +27 -0
  396. package/dist/services/codex-transcript.d.ts.map +1 -1
  397. package/dist/services/codex-transcript.js +340 -2
  398. package/dist/services/codex-transcript.js.map +1 -1
  399. package/dist/services/grant-policy.d.ts +3 -0
  400. package/dist/services/grant-policy.d.ts.map +1 -1
  401. package/dist/services/grant-policy.js +5 -0
  402. package/dist/services/grant-policy.js.map +1 -1
  403. package/dist/services/grant-prefs-store.d.ts +6 -3
  404. package/dist/services/grant-prefs-store.d.ts.map +1 -1
  405. package/dist/services/grant-prefs-store.js +42 -12
  406. package/dist/services/grant-prefs-store.js.map +1 -1
  407. package/dist/services/hook-runner.d.ts +20 -1
  408. package/dist/services/hook-runner.d.ts.map +1 -1
  409. package/dist/services/hook-runner.js +17 -13
  410. package/dist/services/hook-runner.js.map +1 -1
  411. package/dist/services/idempotency-store.d.ts +134 -0
  412. package/dist/services/idempotency-store.d.ts.map +1 -0
  413. package/dist/services/idempotency-store.js +299 -0
  414. package/dist/services/idempotency-store.js.map +1 -0
  415. package/dist/services/jsonl-cursor.d.ts +7 -3
  416. package/dist/services/jsonl-cursor.d.ts.map +1 -1
  417. package/dist/services/jsonl-cursor.js +55 -31
  418. package/dist/services/jsonl-cursor.js.map +1 -1
  419. package/dist/services/open-platform-rename.d.ts.map +1 -1
  420. package/dist/services/open-platform-rename.js +1 -108
  421. package/dist/services/open-platform-rename.js.map +1 -1
  422. package/dist/services/restart-intent-store.d.ts +22 -2
  423. package/dist/services/restart-intent-store.d.ts.map +1 -1
  424. package/dist/services/restart-intent-store.js +160 -18
  425. package/dist/services/restart-intent-store.js.map +1 -1
  426. package/dist/services/sandbox-store.d.ts +22 -0
  427. package/dist/services/sandbox-store.d.ts.map +1 -1
  428. package/dist/services/sandbox-store.js +37 -8
  429. package/dist/services/sandbox-store.js.map +1 -1
  430. package/dist/services/send-policy.d.ts +41 -33
  431. package/dist/services/send-policy.d.ts.map +1 -1
  432. package/dist/services/send-policy.js +39 -40
  433. package/dist/services/send-policy.js.map +1 -1
  434. package/dist/services/session-store.d.ts +66 -0
  435. package/dist/services/session-store.d.ts.map +1 -1
  436. package/dist/services/session-store.js +403 -67
  437. package/dist/services/session-store.js.map +1 -1
  438. package/dist/services/submit-notification.d.ts +3 -0
  439. package/dist/services/submit-notification.d.ts.map +1 -0
  440. package/dist/services/submit-notification.js +15 -0
  441. package/dist/services/submit-notification.js.map +1 -0
  442. package/dist/services/traex-transcript.d.ts +25 -2
  443. package/dist/services/traex-transcript.d.ts.map +1 -1
  444. package/dist/services/traex-transcript.js +133 -1
  445. package/dist/services/traex-transcript.js.map +1 -1
  446. package/dist/services/trigger-types.d.ts +13 -1
  447. package/dist/services/trigger-types.d.ts.map +1 -1
  448. package/dist/services/trigger-types.js +39 -0
  449. package/dist/services/trigger-types.js.map +1 -1
  450. package/dist/services/voice/index.d.ts +3 -2
  451. package/dist/services/voice/index.d.ts.map +1 -1
  452. package/dist/services/voice/index.js +5 -5
  453. package/dist/services/voice/index.js.map +1 -1
  454. package/dist/services/voice/openai.d.ts +2 -1
  455. package/dist/services/voice/openai.d.ts.map +1 -1
  456. package/dist/services/voice/openai.js +2 -1
  457. package/dist/services/voice/openai.js.map +1 -1
  458. package/dist/services/voice/sami.d.ts +5 -2
  459. package/dist/services/voice/sami.d.ts.map +1 -1
  460. package/dist/services/voice/sami.js +19 -4
  461. package/dist/services/voice/sami.js.map +1 -1
  462. package/dist/setup/bots-store.d.ts.map +1 -1
  463. package/dist/setup/bots-store.js +10 -4
  464. package/dist/setup/bots-store.js.map +1 -1
  465. package/dist/setup/lark-scopes.json +2 -0
  466. package/dist/setup/open-platform-automation.d.ts +9 -1
  467. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  468. package/dist/setup/open-platform-automation.js +44 -15
  469. package/dist/setup/open-platform-automation.js.map +1 -1
  470. package/dist/setup/open-platform-visibility.d.ts +42 -0
  471. package/dist/setup/open-platform-visibility.d.ts.map +1 -0
  472. package/dist/setup/open-platform-visibility.js +133 -0
  473. package/dist/setup/open-platform-visibility.js.map +1 -0
  474. package/dist/setup/verify-permissions.d.ts.map +1 -1
  475. package/dist/setup/verify-permissions.js +6 -0
  476. package/dist/setup/verify-permissions.js.map +1 -1
  477. package/dist/skills/definitions.js +2 -2
  478. package/dist/types.d.ts +290 -13
  479. package/dist/types.d.ts.map +1 -1
  480. package/dist/utils/bot-routing.d.ts +1 -0
  481. package/dist/utils/bot-routing.d.ts.map +1 -1
  482. package/dist/utils/bot-routing.js +1 -1
  483. package/dist/utils/bot-routing.js.map +1 -1
  484. package/dist/utils/child-env.d.ts +1 -1
  485. package/dist/utils/child-env.d.ts.map +1 -1
  486. package/dist/utils/child-env.js +9 -0
  487. package/dist/utils/child-env.js.map +1 -1
  488. package/dist/utils/codex-app-control.d.ts +438 -0
  489. package/dist/utils/codex-app-control.d.ts.map +1 -0
  490. package/dist/utils/codex-app-control.js +2336 -0
  491. package/dist/utils/codex-app-control.js.map +1 -0
  492. package/dist/utils/codex-app-dispatch-ledger.d.ts +78 -0
  493. package/dist/utils/codex-app-dispatch-ledger.d.ts.map +1 -0
  494. package/dist/utils/codex-app-dispatch-ledger.js +149 -0
  495. package/dist/utils/codex-app-dispatch-ledger.js.map +1 -0
  496. package/dist/utils/codex-app-turn-dispatch.d.ts +77 -0
  497. package/dist/utils/codex-app-turn-dispatch.d.ts.map +1 -0
  498. package/dist/utils/codex-app-turn-dispatch.js +141 -0
  499. package/dist/utils/codex-app-turn-dispatch.js.map +1 -0
  500. package/dist/utils/codex-app-turn-liveness.d.ts +125 -0
  501. package/dist/utils/codex-app-turn-liveness.d.ts.map +1 -0
  502. package/dist/utils/codex-app-turn-liveness.js +301 -0
  503. package/dist/utils/codex-app-turn-liveness.js.map +1 -0
  504. package/dist/utils/idle-detector.d.ts +12 -0
  505. package/dist/utils/idle-detector.d.ts.map +1 -1
  506. package/dist/utils/idle-detector.js +19 -0
  507. package/dist/utils/idle-detector.js.map +1 -1
  508. package/dist/utils/input-gate.d.ts +87 -0
  509. package/dist/utils/input-gate.d.ts.map +1 -1
  510. package/dist/utils/input-gate.js +86 -0
  511. package/dist/utils/input-gate.js.map +1 -1
  512. package/dist/utils/lark-upload.d.ts.map +1 -1
  513. package/dist/utils/lark-upload.js +52 -1
  514. package/dist/utils/lark-upload.js.map +1 -1
  515. package/dist/utils/pending-input-queue.d.ts +15 -0
  516. package/dist/utils/pending-input-queue.d.ts.map +1 -1
  517. package/dist/utils/pending-input-queue.js +5 -1
  518. package/dist/utils/pending-input-queue.js.map +1 -1
  519. package/dist/utils/user-token.d.ts.map +1 -1
  520. package/dist/utils/user-token.js +53 -2
  521. package/dist/utils/user-token.js.map +1 -1
  522. package/dist/worker-ipc-preload.d.ts +12 -0
  523. package/dist/worker-ipc-preload.d.ts.map +1 -0
  524. package/dist/worker-ipc-preload.js +44 -0
  525. package/dist/worker-ipc-preload.js.map +1 -0
  526. package/dist/worker.js +2604 -325
  527. package/dist/worker.js.map +1 -1
  528. package/dist/workflows/v3/session-relay-client.d.ts +1 -0
  529. package/dist/workflows/v3/session-relay-client.d.ts.map +1 -1
  530. package/dist/workflows/v3/session-relay-client.js +12 -3
  531. package/dist/workflows/v3/session-relay-client.js.map +1 -1
  532. package/package.json +1 -1
  533. package/dist/dashboard-web/chunks/bot-defaults-page-LTVOUDIS.js +0 -10
  534. package/dist/dashboard-web/chunks/chunk-DCS35UMD.js +0 -1
  535. package/dist/dashboard-web/chunks/chunk-MFQPCVHY.js +0 -51
  536. package/dist/dashboard-web/chunks/connectors-page-5KWDIMKC.js +0 -1
  537. package/dist/dashboard-web/chunks/groups-page-FHOKYXMW.js +0 -8
  538. package/dist/dashboard-web/chunks/overview-page-QYI3KBDD.js +0 -1
  539. package/dist/dashboard-web/chunks/sessions-page-WBP4N7D2.js +0 -6
@@ -1,9 +1,14 @@
1
1
  export declare const RELAY_ORIGIN_CAPABILITY_BASENAME = ".botmux-origin-capability.json";
2
+ export declare const MANAGED_ORIGIN_ISOLATION_MARKER_BASENAME = ".botmux-read-isolated-v1";
3
+ export declare const MANAGED_ORIGIN_ISOLATION_SENTINEL_BASENAME = ".botmux-read-isolation-sentinel-v1";
2
4
  export interface ManagedOriginCapabilityClaim {
3
5
  sessionId: string;
6
+ channelId?: string;
4
7
  capability: string;
5
8
  turnId?: string;
6
9
  dispatchAttempt?: number;
10
+ /** Current daemon port, host-written on every capability rotation. */
11
+ ipcPort?: number;
7
12
  }
8
13
  /**
9
14
  * Per-session path used by macOS read-isolated CLIs to read only their own
@@ -12,7 +17,56 @@ export interface ManagedOriginCapabilityClaim {
12
17
  * The parent is denied wholesale by the Seatbelt profile; only this exact file
13
18
  * is carved back in for the owning session.
14
19
  */
15
- export declare function managedOriginCapabilityPath(dataDir: string, sessionId: string): string;
20
+ export declare function managedOriginCapabilityPath(dataDir: string, sessionId: string, channelId: string): string;
21
+ /** Host-written, child-read-only proof directory for live daemon attestation. */
22
+ export declare function managedOriginAttestationDirectory(dataDir: string, sessionId: string, channelId: string): string;
23
+ export declare function managedOriginAttestationProofPath(dataDir: string, sessionId: string, channelId: string, nonce: string): string;
24
+ export declare function managedOriginIsolationMarkerPath(dataDir: string, sessionId: string, channelId: string): string;
25
+ export declare function managedOriginIsolationSentinelPath(homeDir: string): string;
26
+ export declare function ensureManagedOriginIsolationSentinel(homeDir: string): string;
27
+ /** Fixed-OS-home locator whose basename is covered by the legacy
28
+ * `.dashboard-secret(?:\.|$)` read/write deny. New profiles carve only the
29
+ * exact current-session leaf back in for reads while the final write deny
30
+ * remains in force. This gives cmdSend a data-root binding independent of
31
+ * mutable HOME/SESSION_DATA_DIR. */
32
+ export declare function managedOriginRootLocatorPath(osUserHomeDir: string, sessionId: string): string;
33
+ export interface ManagedOriginRootLocator {
34
+ sessionId: string;
35
+ dataDir: string;
36
+ }
37
+ /** Probe placed inside the locator-selected data root's legacy-denied
38
+ * `read-isolation/` namespace, but outside every current exact carve-out. The
39
+ * exact directory location matters: a forged sibling dataDir must not inherit
40
+ * a parent-level dashboard-secret deny and masquerade as the real root. */
41
+ export declare function managedOriginDataRootProbePath(dataDir: string, sessionId: string): string;
42
+ export declare function ensureManagedOriginDataRootProbe(dataDir: string, sessionId: string): string;
43
+ export declare function managedOriginDataRootProbeAccess(dataDir: string, sessionId: string): 'host_accessible' | 'sandbox_denied' | 'missing_or_unsafe';
44
+ export declare function ensureManagedOriginRootLocator(osUserHomeDir: string, sessionId: string, dataDir: string): string;
45
+ export declare function readManagedOriginRootLocator(osUserHomeDir: string, sessionId: string): ManagedOriginRootLocator | null;
46
+ /** Kernel-observable macOS isolation classifier. The Seatbelt profile denies
47
+ * this fixed, host-readable sentinel independent of env/argv/session ids. */
48
+ export declare function managedOriginIsolationSentinelAccess(homeDir: string): 'host_accessible' | 'sandbox_denied' | 'missing_or_unsafe';
49
+ /** Kernel probe backed by an inode that legacy read-isolation profiles already
50
+ * denied: the dashboard HMAC secret. Only metadata is inspected; secret bytes
51
+ * are never read or returned. This closes the upgrade race where a stale
52
+ * pre-sentinel sandbox could replace a newly introduced probe path. */
53
+ export declare function managedOriginLegacyIsolationProbeAccess(osUserHomeDir: string): 'host_accessible' | 'sandbox_denied' | 'missing_or_unsafe';
54
+ /** Strict bounded reader for host-owned authority metadata. It never follows a
55
+ * leaf symlink and opens FIFOs/devices nonblocking before rejecting them by
56
+ * inode type, ownership, link count, mode, and size. */
57
+ export declare function readManagedOriginAuthorityFile(filePath: string, maxBytes?: number): string | null;
58
+ /** A durable, host-owned hint that this session was launched read-isolated.
59
+ * It is deliberately separate from the rotating capability so missing,
60
+ * corrupt, or revoked authority cannot silently downgrade `botmux send` to
61
+ * the ordinary direct path. The marker is only a fail-closed classification
62
+ * hint; the live daemon challenge remains the sole send authority. */
63
+ export declare function hasManagedOriginIsolationMarker(dataDir: string, sessionId: string, channelId: string): boolean;
64
+ /** Prepare the proof directory before Seatbelt canonicalizes its read carve. */
65
+ export declare function ensureManagedOriginAttestationDirectory(dataDir: string, sessionId: string, channelId: string): string;
66
+ /** Bounded owner-startup cleanup. Never call this from the unauthenticated
67
+ * request path: a prefilled legacy directory must not turn every challenge
68
+ * into an unbounded synchronous daemon scan. */
69
+ export declare function sweepManagedOriginAttestationProofs(dataDir: string, sessionId: string, channelId: string, maxEntries?: number): void;
16
70
  /**
17
71
  * Atomically replace a capability file without following an attacker-planted
18
72
  * destination symlink. The generic atomic writer intentionally follows
@@ -20,18 +74,23 @@ export declare function managedOriginCapabilityPath(dataDir: string, sessionId:
20
74
  * contract so an isolated child cannot redirect the worker's next rotation.
21
75
  */
22
76
  export declare function replaceManagedOriginCapabilityFile(filePath: string, body: string): void;
77
+ /** Prepare a stable capability pathname without ever overwriting a successor
78
+ * generation's regular file. Unsafe leaf types are removed by directory-entry
79
+ * unlink (no follow); a regular leaf is left untouched for the daemon-owned
80
+ * current-worker publication path. */
81
+ export declare function ensureManagedOriginCapabilityLeafSafe(filePath: string): void;
23
82
  /**
24
83
  * Read the current origin claim from the per-session sandbox relay (Linux) or
25
84
  * the exact Seatbelt carve-out (macOS). A file is only transport: the daemon
26
85
  * still compares the token with its live worker registry, so stale files and
27
86
  * forged tuple fields never confer authority.
28
87
  */
29
- export declare function readManagedOriginCapability(dataDir: string, sessionId: string | undefined, relayDir?: string): ManagedOriginCapabilityClaim | null;
88
+ export declare function readManagedOriginCapability(dataDir: string, sessionId: string | undefined, relayDir?: string, channelId?: string): ManagedOriginCapabilityClaim | null;
30
89
  /**
31
90
  * Verify that the child-visible capability transport contains the exact token
32
91
  * currently authorized by the worker. Existence alone is insufficient: a
33
92
  * writable relay can contain a stale token, malformed JSON, or even a directory
34
93
  * at the reserved path after a prior sandbox generation.
35
94
  */
36
- export declare function hasMatchingManagedOriginCapability(dataDir: string, sessionId: string | undefined, expectedCapability: string | undefined, relayDir?: string): boolean;
95
+ export declare function hasMatchingManagedOriginCapability(dataDir: string, sessionId: string | undefined, expectedCapability: string | undefined, relayDir?: string, channelId?: string): boolean;
37
96
  //# sourceMappingURL=managed-origin-capability.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"managed-origin-capability.d.ts","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gCAAgC,mCAAmC,CAAC;AAEjF,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAiBvF;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,CAAC,EAAE,MAAM,GAChB,4BAA4B,GAAG,IAAI,CAwCrC;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAIT"}
1
+ {"version":3,"file":"managed-origin-capability.d.ts","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,23 @@
1
1
  import { createHash, randomBytes } from 'node:crypto';
2
- import { lstatSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
3
- import { dirname, join } from 'node:path';
2
+ import { chmodSync, closeSync, constants as fsConstants, fstatSync, lstatSync, mkdirSync, openSync, opendirSync, readSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync, } from 'node:fs';
3
+ import { basename, dirname, join } from 'node:path';
4
4
  export const RELAY_ORIGIN_CAPABILITY_BASENAME = '.botmux-origin-capability.json';
5
+ export const MANAGED_ORIGIN_ISOLATION_MARKER_BASENAME = '.botmux-read-isolated-v1';
6
+ export const MANAGED_ORIGIN_ISOLATION_SENTINEL_BASENAME = '.botmux-read-isolation-sentinel-v1';
7
+ const MANAGED_ORIGIN_STALE_PROOF_MS = 60_000;
8
+ function assertManagedOriginChannelId(channelId) {
9
+ if (!/^[a-f0-9]{64}$/.test(channelId)) {
10
+ throw new Error('invalid managed origin channel id');
11
+ }
12
+ return channelId;
13
+ }
14
+ function managedOriginChannelDigest(sessionId, channelId) {
15
+ return createHash('sha256')
16
+ .update(sessionId)
17
+ .update('\0')
18
+ .update(assertManagedOriginChannelId(channelId))
19
+ .digest('hex');
20
+ }
5
21
  /**
6
22
  * Per-session path used by macOS read-isolated CLIs to read only their own
7
23
  * rotating daemon-IPC capability. Hashing keeps an untrusted session id out of
@@ -9,10 +25,369 @@ export const RELAY_ORIGIN_CAPABILITY_BASENAME = '.botmux-origin-capability.json'
9
25
  * The parent is denied wholesale by the Seatbelt profile; only this exact file
10
26
  * is carved back in for the owning session.
11
27
  */
12
- export function managedOriginCapabilityPath(dataDir, sessionId) {
13
- const digest = createHash('sha256').update(sessionId).digest('hex');
28
+ export function managedOriginCapabilityPath(dataDir, sessionId, channelId) {
29
+ const digest = managedOriginChannelDigest(sessionId, channelId);
14
30
  return join(dataDir, 'read-isolation', `origin-${digest}.json`);
15
31
  }
32
+ /** Host-written, child-read-only proof directory for live daemon attestation. */
33
+ export function managedOriginAttestationDirectory(dataDir, sessionId, channelId) {
34
+ const digest = managedOriginChannelDigest(sessionId, channelId);
35
+ return join(dataDir, 'read-isolation', `attest-${digest}`);
36
+ }
37
+ export function managedOriginAttestationProofPath(dataDir, sessionId, channelId, nonce) {
38
+ if (!/^[a-f0-9]{64}$/.test(nonce))
39
+ throw new Error('invalid managed origin attestation nonce');
40
+ return join(managedOriginAttestationDirectory(dataDir, sessionId, channelId), `${nonce}.json`);
41
+ }
42
+ export function managedOriginIsolationMarkerPath(dataDir, sessionId, channelId) {
43
+ return join(managedOriginAttestationDirectory(dataDir, sessionId, channelId), MANAGED_ORIGIN_ISOLATION_MARKER_BASENAME);
44
+ }
45
+ export function managedOriginIsolationSentinelPath(homeDir) {
46
+ return join(homeDir, MANAGED_ORIGIN_ISOLATION_SENTINEL_BASENAME);
47
+ }
48
+ export function ensureManagedOriginIsolationSentinel(homeDir) {
49
+ const path = managedOriginIsolationSentinelPath(homeDir);
50
+ replaceManagedOriginCapabilityFile(path, JSON.stringify({
51
+ domain: 'botmux.read-isolation-sentinel.v1',
52
+ }));
53
+ chmodSync(path, 0o600);
54
+ return path;
55
+ }
56
+ /** Fixed-OS-home locator whose basename is covered by the legacy
57
+ * `.dashboard-secret(?:\.|$)` read/write deny. New profiles carve only the
58
+ * exact current-session leaf back in for reads while the final write deny
59
+ * remains in force. This gives cmdSend a data-root binding independent of
60
+ * mutable HOME/SESSION_DATA_DIR. */
61
+ export function managedOriginRootLocatorPath(osUserHomeDir, sessionId) {
62
+ const digest = createHash('sha256').update(sessionId).digest('hex');
63
+ return join(osUserHomeDir, '.botmux', `.dashboard-secret.origin-root-${digest}.json`);
64
+ }
65
+ /** Probe placed inside the locator-selected data root's legacy-denied
66
+ * `read-isolation/` namespace, but outside every current exact carve-out. The
67
+ * exact directory location matters: a forged sibling dataDir must not inherit
68
+ * a parent-level dashboard-secret deny and masquerade as the real root. */
69
+ export function managedOriginDataRootProbePath(dataDir, sessionId) {
70
+ if (!dataDir.startsWith('/'))
71
+ throw new Error('managed origin data root must be absolute');
72
+ const digest = createHash('sha256')
73
+ .update(sessionId)
74
+ .update('\0')
75
+ .update(dataDir)
76
+ .digest('hex');
77
+ return join(dataDir, 'read-isolation', `.origin-root-probe-${digest}.json`);
78
+ }
79
+ export function ensureManagedOriginDataRootProbe(dataDir, sessionId) {
80
+ const canonicalDataDir = realpathSync(dataDir);
81
+ const path = managedOriginDataRootProbePath(canonicalDataDir, sessionId);
82
+ replaceManagedOriginCapabilityFile(path, JSON.stringify({
83
+ domain: 'botmux.managed-origin-root-probe.v1',
84
+ sessionId,
85
+ dataDir: canonicalDataDir,
86
+ }));
87
+ chmodSync(path, 0o600);
88
+ return path;
89
+ }
90
+ export function managedOriginDataRootProbeAccess(dataDir, sessionId) {
91
+ const path = managedOriginDataRootProbePath(dataDir, sessionId);
92
+ let fd;
93
+ try {
94
+ fd = openSync(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
95
+ const stat = fstatSync(fd);
96
+ const expectedUid = process.getuid?.();
97
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size <= 0 || stat.size > 8 * 1024
98
+ || (stat.mode & 0o777) !== 0o600
99
+ || (expectedUid !== undefined && stat.uid !== expectedUid))
100
+ return 'missing_or_unsafe';
101
+ const body = Buffer.alloc(stat.size);
102
+ let offset = 0;
103
+ while (offset < body.length) {
104
+ const read = readSync(fd, body, offset, body.length - offset, null);
105
+ if (read <= 0)
106
+ return 'missing_or_unsafe';
107
+ offset += read;
108
+ }
109
+ const parsed = JSON.parse(body.toString('utf8'));
110
+ return parsed.domain === 'botmux.managed-origin-root-probe.v1'
111
+ && parsed.sessionId === sessionId
112
+ && parsed.dataDir === dataDir
113
+ ? 'host_accessible'
114
+ : 'missing_or_unsafe';
115
+ }
116
+ catch (err) {
117
+ // macOS Seatbelt returns EPERM for the profile deny. Do not accept EACCES:
118
+ // a confined child can manufacture that with chmod(000) in a forged root.
119
+ return err?.code === 'EPERM' ? 'sandbox_denied' : 'missing_or_unsafe';
120
+ }
121
+ finally {
122
+ if (fd !== undefined) {
123
+ try {
124
+ closeSync(fd);
125
+ }
126
+ catch { /* best effort */ }
127
+ }
128
+ }
129
+ }
130
+ export function ensureManagedOriginRootLocator(osUserHomeDir, sessionId, dataDir) {
131
+ if (!dataDir.startsWith('/'))
132
+ throw new Error('managed origin data root must be absolute');
133
+ const canonicalDataDir = realpathSync(dataDir);
134
+ const lexicalPath = managedOriginRootLocatorPath(osUserHomeDir, sessionId);
135
+ const lexicalParent = dirname(lexicalPath);
136
+ mkdirSync(lexicalParent, { recursive: true, mode: 0o700 });
137
+ // Existing installations may symlink ~/.botmux. Resolve the trusted host
138
+ // parent once, validate the target directory, and write the leaf there; the
139
+ // CLI's lexical fixed-home path resolves to the same inode under Seatbelt.
140
+ const parent = realpathSync(lexicalParent);
141
+ const path = join(parent, basename(lexicalPath));
142
+ const stat = lstatSync(parent);
143
+ const expectedUid = process.getuid?.();
144
+ if (!stat.isDirectory()
145
+ || (expectedUid !== undefined && stat.uid !== expectedUid)) {
146
+ throw new Error(`managed origin locator parent is unsafe: ${parent}`);
147
+ }
148
+ replaceManagedOriginCapabilityFile(path, JSON.stringify({
149
+ domain: 'botmux.managed-origin-root.v1',
150
+ sessionId,
151
+ dataDir: canonicalDataDir,
152
+ }));
153
+ chmodSync(path, 0o600);
154
+ return path;
155
+ }
156
+ export function readManagedOriginRootLocator(osUserHomeDir, sessionId) {
157
+ const body = readManagedOriginAuthorityFile(managedOriginRootLocatorPath(osUserHomeDir, sessionId), 8 * 1024);
158
+ if (!body)
159
+ return null;
160
+ try {
161
+ const parsed = JSON.parse(body);
162
+ if (parsed.domain !== 'botmux.managed-origin-root.v1'
163
+ || parsed.sessionId !== sessionId
164
+ || typeof parsed.dataDir !== 'string'
165
+ || !parsed.dataDir.startsWith('/')
166
+ || parsed.dataDir.length > 4096
167
+ || parsed.dataDir.includes('\0'))
168
+ return null;
169
+ return { sessionId, dataDir: parsed.dataDir };
170
+ }
171
+ catch {
172
+ return null;
173
+ }
174
+ }
175
+ /** Kernel-observable macOS isolation classifier. The Seatbelt profile denies
176
+ * this fixed, host-readable sentinel independent of env/argv/session ids. */
177
+ export function managedOriginIsolationSentinelAccess(homeDir) {
178
+ const path = managedOriginIsolationSentinelPath(homeDir);
179
+ let fd;
180
+ try {
181
+ fd = openSync(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
182
+ const stat = fstatSync(fd);
183
+ const expectedUid = process.getuid?.();
184
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size <= 0 || stat.size > 1024
185
+ || (stat.mode & 0o777) !== 0o600
186
+ || (expectedUid !== undefined && stat.uid !== expectedUid))
187
+ return 'missing_or_unsafe';
188
+ const body = Buffer.alloc(stat.size);
189
+ let offset = 0;
190
+ while (offset < body.length) {
191
+ const read = readSync(fd, body, offset, body.length - offset, null);
192
+ if (read <= 0)
193
+ return 'missing_or_unsafe';
194
+ offset += read;
195
+ }
196
+ try {
197
+ const value = JSON.parse(body.toString('utf8'));
198
+ return value.domain === 'botmux.read-isolation-sentinel.v1'
199
+ ? 'host_accessible'
200
+ : 'missing_or_unsafe';
201
+ }
202
+ catch {
203
+ return 'missing_or_unsafe';
204
+ }
205
+ }
206
+ catch (err) {
207
+ return err?.code === 'EACCES' || err?.code === 'EPERM'
208
+ ? 'sandbox_denied'
209
+ : 'missing_or_unsafe';
210
+ }
211
+ finally {
212
+ if (fd !== undefined) {
213
+ try {
214
+ closeSync(fd);
215
+ }
216
+ catch { /* best effort */ }
217
+ }
218
+ }
219
+ }
220
+ /** Kernel probe backed by an inode that legacy read-isolation profiles already
221
+ * denied: the dashboard HMAC secret. Only metadata is inspected; secret bytes
222
+ * are never read or returned. This closes the upgrade race where a stale
223
+ * pre-sentinel sandbox could replace a newly introduced probe path. */
224
+ export function managedOriginLegacyIsolationProbeAccess(osUserHomeDir) {
225
+ const path = join(osUserHomeDir, '.botmux', '.dashboard-secret');
226
+ let fd;
227
+ try {
228
+ fd = openSync(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
229
+ const stat = fstatSync(fd);
230
+ const expectedUid = process.getuid?.();
231
+ return stat.isFile() && stat.nlink === 1
232
+ && (expectedUid === undefined || stat.uid === expectedUid)
233
+ ? 'host_accessible'
234
+ : 'missing_or_unsafe';
235
+ }
236
+ catch (err) {
237
+ return err?.code === 'EACCES' || err?.code === 'EPERM'
238
+ ? 'sandbox_denied'
239
+ : 'missing_or_unsafe';
240
+ }
241
+ finally {
242
+ if (fd !== undefined) {
243
+ try {
244
+ closeSync(fd);
245
+ }
246
+ catch { /* best effort */ }
247
+ }
248
+ }
249
+ }
250
+ /** Strict bounded reader for host-owned authority metadata. It never follows a
251
+ * leaf symlink and opens FIFOs/devices nonblocking before rejecting them by
252
+ * inode type, ownership, link count, mode, and size. */
253
+ export function readManagedOriginAuthorityFile(filePath, maxBytes = 8 * 1024) {
254
+ let fd;
255
+ try {
256
+ fd = openSync(filePath, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | fsConstants.O_NONBLOCK);
257
+ const stat = fstatSync(fd);
258
+ const expectedUid = process.getuid?.();
259
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size <= 0 || stat.size > maxBytes
260
+ || (stat.mode & 0o777) !== 0o600
261
+ || (expectedUid !== undefined && stat.uid !== expectedUid))
262
+ return null;
263
+ const body = Buffer.alloc(stat.size);
264
+ let offset = 0;
265
+ while (offset < body.length) {
266
+ const read = readSync(fd, body, offset, body.length - offset, null);
267
+ if (read <= 0)
268
+ return null;
269
+ offset += read;
270
+ }
271
+ return body.toString('utf8');
272
+ }
273
+ catch {
274
+ return null;
275
+ }
276
+ finally {
277
+ if (fd !== undefined) {
278
+ try {
279
+ closeSync(fd);
280
+ }
281
+ catch { /* best effort */ }
282
+ }
283
+ }
284
+ }
285
+ /** A durable, host-owned hint that this session was launched read-isolated.
286
+ * It is deliberately separate from the rotating capability so missing,
287
+ * corrupt, or revoked authority cannot silently downgrade `botmux send` to
288
+ * the ordinary direct path. The marker is only a fail-closed classification
289
+ * hint; the live daemon challenge remains the sole send authority. */
290
+ export function hasManagedOriginIsolationMarker(dataDir, sessionId, channelId) {
291
+ const body = readManagedOriginAuthorityFile(managedOriginIsolationMarkerPath(dataDir, sessionId, channelId), 1024);
292
+ if (!body)
293
+ return false;
294
+ try {
295
+ const parsed = JSON.parse(body);
296
+ return parsed.domain === 'botmux.read-isolation-origin.v1'
297
+ && parsed.sessionId === sessionId
298
+ && parsed.channelId === channelId;
299
+ }
300
+ catch {
301
+ return false;
302
+ }
303
+ }
304
+ /** Prepare the proof directory before Seatbelt canonicalizes its read carve. */
305
+ export function ensureManagedOriginAttestationDirectory(dataDir, sessionId, channelId) {
306
+ const proofDir = managedOriginAttestationDirectory(dataDir, sessionId, channelId);
307
+ const parent = dirname(proofDir);
308
+ mkdirSync(parent, { recursive: true, mode: 0o700 });
309
+ const expectedUid = process.getuid?.();
310
+ const parentStat = lstatSync(parent);
311
+ if (!parentStat.isDirectory() || parentStat.isSymbolicLink()) {
312
+ throw new Error(`managed origin attestation parent is not a real directory: ${parent}`);
313
+ }
314
+ if (expectedUid !== undefined && parentStat.uid !== expectedUid) {
315
+ throw new Error(`managed origin attestation parent has the wrong owner: ${parent}`);
316
+ }
317
+ chmodSync(parent, 0o700);
318
+ try {
319
+ const existing = lstatSync(proofDir);
320
+ if (existing.isSymbolicLink() || !existing.isDirectory()) {
321
+ rmSync(proofDir, { recursive: true, force: true });
322
+ }
323
+ else if (expectedUid !== undefined && existing.uid !== expectedUid) {
324
+ throw new Error(`managed origin attestation directory has the wrong owner: ${proofDir}`);
325
+ }
326
+ }
327
+ catch (err) {
328
+ if (err?.code !== 'ENOENT')
329
+ throw err;
330
+ }
331
+ mkdirSync(proofDir, { recursive: true, mode: 0o700 });
332
+ chmodSync(proofDir, 0o700);
333
+ const finalStat = lstatSync(proofDir);
334
+ if (!finalStat.isDirectory() || finalStat.isSymbolicLink()
335
+ || (expectedUid !== undefined && finalStat.uid !== expectedUid)
336
+ || (finalStat.mode & 0o777) !== 0o700) {
337
+ throw new Error(`managed origin attestation directory is unsafe: ${proofDir}`);
338
+ }
339
+ const markerPath = managedOriginIsolationMarkerPath(dataDir, sessionId, channelId);
340
+ const markerBody = JSON.stringify({
341
+ domain: 'botmux.read-isolation-origin.v1',
342
+ sessionId,
343
+ channelId,
344
+ });
345
+ if (!hasManagedOriginIsolationMarker(dataDir, sessionId, channelId)) {
346
+ replaceManagedOriginCapabilityFile(markerPath, markerBody);
347
+ chmodSync(markerPath, 0o600);
348
+ }
349
+ return proofDir;
350
+ }
351
+ /** Bounded owner-startup cleanup. Never call this from the unauthenticated
352
+ * request path: a prefilled legacy directory must not turn every challenge
353
+ * into an unbounded synchronous daemon scan. */
354
+ export function sweepManagedOriginAttestationProofs(dataDir, sessionId, channelId, maxEntries = 512) {
355
+ const proofDir = ensureManagedOriginAttestationDirectory(dataDir, sessionId, channelId);
356
+ const expectedUid = process.getuid?.();
357
+ const now = Date.now();
358
+ const dir = opendirSync(proofDir);
359
+ let seen = 0;
360
+ try {
361
+ for (;;) {
362
+ const entry = dir.readSync();
363
+ if (!entry)
364
+ break;
365
+ if (++seen > maxEntries) {
366
+ throw new Error(`managed origin attestation directory exceeds ${maxEntries} entries`);
367
+ }
368
+ if (!/^[a-f0-9]{64}\.json$/.test(entry.name))
369
+ continue;
370
+ const candidate = join(proofDir, entry.name);
371
+ try {
372
+ const stat = lstatSync(candidate);
373
+ if (stat.isDirectory())
374
+ continue;
375
+ if (stat.isSymbolicLink() || !stat.isFile()
376
+ || (expectedUid !== undefined && stat.uid !== expectedUid)
377
+ || now - stat.mtimeMs > MANAGED_ORIGIN_STALE_PROOF_MS) {
378
+ unlinkSync(candidate);
379
+ }
380
+ }
381
+ catch { /* raced cleanup or inaccessible leaf: fail closed per nonce */ }
382
+ }
383
+ }
384
+ finally {
385
+ try {
386
+ dir.closeSync();
387
+ }
388
+ catch { /* best effort */ }
389
+ }
390
+ }
16
391
  /**
17
392
  * Atomically replace a capability file without following an attacker-planted
18
393
  * destination symlink. The generic atomic writer intentionally follows
@@ -41,23 +416,51 @@ export function replaceManagedOriginCapabilityFile(filePath, body) {
41
416
  throw error;
42
417
  }
43
418
  }
419
+ /** Prepare a stable capability pathname without ever overwriting a successor
420
+ * generation's regular file. Unsafe leaf types are removed by directory-entry
421
+ * unlink (no follow); a regular leaf is left untouched for the daemon-owned
422
+ * current-worker publication path. */
423
+ export function ensureManagedOriginCapabilityLeafSafe(filePath) {
424
+ const parent = dirname(filePath);
425
+ mkdirSync(parent, { recursive: true, mode: 0o700 });
426
+ const parentStat = lstatSync(parent);
427
+ if (!parentStat.isDirectory() || parentStat.isSymbolicLink()) {
428
+ throw new Error(`managed origin capability parent is not a real directory: ${parent}`);
429
+ }
430
+ try {
431
+ const leaf = lstatSync(filePath);
432
+ if (leaf.isSymbolicLink() || !leaf.isFile())
433
+ unlinkSync(filePath);
434
+ }
435
+ catch (err) {
436
+ if (err?.code !== 'ENOENT')
437
+ throw err;
438
+ }
439
+ }
44
440
  /**
45
441
  * Read the current origin claim from the per-session sandbox relay (Linux) or
46
442
  * the exact Seatbelt carve-out (macOS). A file is only transport: the daemon
47
443
  * still compares the token with its live worker registry, so stale files and
48
444
  * forged tuple fields never confer authority.
49
445
  */
50
- export function readManagedOriginCapability(dataDir, sessionId, relayDir) {
446
+ export function readManagedOriginCapability(dataDir, sessionId, relayDir, channelId) {
51
447
  if (!sessionId)
52
448
  return null;
53
449
  const relay = !!relayDir;
450
+ if (!relay && !channelId)
451
+ return null;
54
452
  const path = relay
55
453
  ? join(relayDir, RELAY_ORIGIN_CAPABILITY_BASENAME)
56
- : managedOriginCapabilityPath(dataDir, sessionId);
454
+ : managedOriginCapabilityPath(dataDir, sessionId, channelId);
57
455
  try {
58
- const parsed = JSON.parse(readFileSync(path, 'utf8'));
456
+ const body = readManagedOriginAuthorityFile(path, 8 * 1024);
457
+ if (!body)
458
+ return null;
459
+ const parsed = JSON.parse(body);
59
460
  if (!relay && parsed.sessionId !== sessionId)
60
461
  return null;
462
+ if (!relay && parsed.channelId !== channelId)
463
+ return null;
61
464
  const capability = typeof parsed.capability === 'string'
62
465
  ? parsed.capability
63
466
  : parsed.token;
@@ -74,11 +477,18 @@ export function readManagedOriginCapability(dataDir, sessionId, relayDir) {
74
477
  && parsed.dispatchAttempt > 0
75
478
  ? parsed.dispatchAttempt
76
479
  : undefined;
480
+ const ipcPort = typeof parsed.ipcPort === 'number'
481
+ && Number.isSafeInteger(parsed.ipcPort)
482
+ && parsed.ipcPort > 0 && parsed.ipcPort <= 65_535
483
+ ? parsed.ipcPort
484
+ : undefined;
77
485
  return {
78
486
  sessionId,
487
+ ...(!relay && channelId ? { channelId } : {}),
79
488
  capability,
80
489
  ...(turnId ? { turnId } : {}),
81
490
  ...(dispatchAttempt !== undefined ? { dispatchAttempt } : {}),
491
+ ...(ipcPort !== undefined ? { ipcPort } : {}),
82
492
  };
83
493
  }
84
494
  catch {
@@ -91,10 +501,10 @@ export function readManagedOriginCapability(dataDir, sessionId, relayDir) {
91
501
  * writable relay can contain a stale token, malformed JSON, or even a directory
92
502
  * at the reserved path after a prior sandbox generation.
93
503
  */
94
- export function hasMatchingManagedOriginCapability(dataDir, sessionId, expectedCapability, relayDir) {
504
+ export function hasMatchingManagedOriginCapability(dataDir, sessionId, expectedCapability, relayDir, channelId) {
95
505
  if (!expectedCapability)
96
506
  return false;
97
- return readManagedOriginCapability(dataDir, sessionId, relayDir)?.capability
507
+ return readManagedOriginCapability(dataDir, sessionId, relayDir, channelId)?.capability
98
508
  === expectedCapability;
99
509
  }
100
510
  //# sourceMappingURL=managed-origin-capability.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"managed-origin-capability.js","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-origin-capability.js","sourceRoot":"","sources":["../../src/core/managed-origin-capability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DaemonSession } from './types.js';
2
+ import type { PendingRepoSetup } from '../types.js';
3
+ export declare function stagePendingRepoSetup(ds: DaemonSession, args: Pick<PendingRepoSetup, 'mode'> & Partial<Pick<PendingRepoSetup, 'baseDir' | 'turnId'>>): void;
4
+ export declare function persistPendingRepoCardMessageId(ds: DaemonSession, messageId: string): void;
5
+ export declare function restorePendingRepoRuntime(ds: DaemonSession): boolean;
6
+ //# sourceMappingURL=pending-repo-journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-repo-journal.d.ts","sourceRoot":"","sources":["../../src/core/pending-repo-journal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC,GAC3F,IAAI,CA+CN;AAED,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAW1F;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAkBpE"}