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
@@ -0,0 +1,63 @@
1
+ function errorText(error) {
2
+ if (error instanceof Error)
3
+ return error.message;
4
+ if (typeof error === 'string')
5
+ return error;
6
+ try {
7
+ return JSON.stringify(error);
8
+ }
9
+ catch {
10
+ return String(error);
11
+ }
12
+ }
13
+ /** `God.startProcessId` rejects these states before executeApp and therefore
14
+ * cannot have killed or restarted a live generation. The final jlist remains
15
+ * authoritative about whether the fleet is available. */
16
+ export function isNonMutatingPm2StartRefusal(error) {
17
+ return /(?:\bid unknown\b|process already online|process already started|process with pid \d+ already exists)/i
18
+ .test(errorText(error));
19
+ }
20
+ function launchRpc(client) {
21
+ return new Promise((resolve, reject) => {
22
+ client.launchRPC(error => error ? reject(error) : resolve());
23
+ });
24
+ }
25
+ function closeRpc(client) {
26
+ return new Promise(resolve => client.close(() => resolve()));
27
+ }
28
+ function startExactProcessId(client, processId) {
29
+ return new Promise(resolve => {
30
+ client.executeRemote('startProcessId', processId, error => {
31
+ if (!error || isNonMutatingPm2StartRefusal(error)) {
32
+ resolve(null);
33
+ return;
34
+ }
35
+ resolve(`pm_id ${processId}: ${errorText(error)}`);
36
+ });
37
+ });
38
+ }
39
+ /** Connect once and concurrently issue PM2's conditional startProcessId RPC
40
+ * for distinct exact registry identities. The caller must hold Botmux's shared
41
+ * fleet-operation lock: PM2 checks a row before an async fork and is not itself
42
+ * a CAS across two clients. Unlike `pm2 start <name|id>`, this never routes
43
+ * through restartProcessId or intentionally interrupts a live successor. */
44
+ export async function startExactPm2ProcessIds(processIds, client) {
45
+ const uniqueIds = [...new Set(processIds)];
46
+ if (uniqueIds.length !== processIds.length
47
+ || uniqueIds.some(id => !Number.isInteger(id) || id < 0)) {
48
+ throw new Error('exact PM2 compensation requires unique non-negative pm_id values');
49
+ }
50
+ if (uniqueIds.length === 0)
51
+ return;
52
+ await launchRpc(client);
53
+ try {
54
+ const failures = (await Promise.all(uniqueIds.map(id => startExactProcessId(client, id)))).filter((failure) => !!failure);
55
+ if (failures.length > 0) {
56
+ throw new Error(`conditional PM2 start failed (${failures.join('; ')})`);
57
+ }
58
+ }
59
+ finally {
60
+ await closeRpc(client);
61
+ }
62
+ }
63
+ //# sourceMappingURL=pm2-exact-start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-exact-start.js","sourceRoot":"","sources":["../../src/cli/pm2-exact-start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Node's process.kill is PID-addressed and PM2's `kill` RPC is PM2_HOME/socket
3
+ * addressed; neither binds a signal to a PID+birth generation. Therefore a
4
+ * live God cannot be safely replaced automatically. This admission check must
5
+ * run before any fleet or breadcrumb mutation.
6
+ */
7
+ export declare function assertIncludePm2RestartAdmission(pids: readonly number[]): void;
8
+ //# sourceMappingURL=pm2-god-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-god-admission.d.ts","sourceRoot":"","sources":["../../src/cli/pm2-god-admission.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAoB9E"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Node's process.kill is PID-addressed and PM2's `kill` RPC is PM2_HOME/socket
3
+ * addressed; neither binds a signal to a PID+birth generation. Therefore a
4
+ * live God cannot be safely replaced automatically. This admission check must
5
+ * run before any fleet or breadcrumb mutation.
6
+ */
7
+ export function assertIncludePm2RestartAdmission(pids) {
8
+ const canonical = [...new Set(pids)]
9
+ .filter(pid => Number.isSafeInteger(pid) && pid > 1)
10
+ .sort((a, b) => a - b);
11
+ if (canonical.length !== pids.length) {
12
+ throw new Error('[restart --include-pm2] PM2 God scan returned invalid/duplicate PIDs');
13
+ }
14
+ if (canonical.length === 0)
15
+ return;
16
+ if (canonical.length > 1) {
17
+ throw new Error(`[restart --include-pm2] multiple PM2 God daemons are visible `
18
+ + `(pids: ${canonical.join(', ')}); no process or breadcrumb was changed`);
19
+ }
20
+ throw new Error(`[restart --include-pm2] refusing before fleet mutation: live PM2 God pid ${canonical[0]} `
21
+ + 'cannot be signalled with generation-bound authority on this platform; '
22
+ + 'this option does not signal or restart an existing God; '
23
+ + 'no process or breadcrumb was changed');
24
+ }
25
+ //# sourceMappingURL=pm2-god-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-god-admission.js","sourceRoot":"","sources":["../../src/cli/pm2-god-admission.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,IAAuB;IACtE,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;SACjC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;SACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACnC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,+DAA+D;cAC7D,UAAU,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAC1E,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CACb,4EAA4E,SAAS,CAAC,CAAC,CAAC,GAAG;UACzF,wEAAwE;UACxE,0DAA0D;UAC1D,sCAAsC,CACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare function parsePm2Integer(value: unknown, options?: {
2
+ nonNegative?: boolean;
3
+ }): number | undefined;
4
+ /** PM2 RPC addresses the canonical top-level pm_id. A nested pm2_env.pm_id can
5
+ * be a stale serialized copy and must never resurrect an absent/null identity. */
6
+ export declare function parseCanonicalPm2Id(app: unknown): number | undefined;
7
+ /** Forgiving parser for read-only/status surfaces. */
8
+ export declare function parsePm2JlistOutput(output: string): any[];
9
+ /** Shutdown authority must never interpret `{}`, `null`, or malformed output
10
+ * as an empty fleet: doing so would allow a later name-based PM2 mutation to
11
+ * bypass graceful shutdown of live daemons. */
12
+ export declare function parsePm2JlistOutputStrict(output: string): any[];
13
+ //# sourceMappingURL=pm2-jlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-jlist.d.ts","sourceRoot":"","sources":["../../src/cli/pm2-jlist.ts"],"names":[],"mappings":"AAKA,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,MAAM,GAAG,SAAS,CAQpB;AAED;kFACkF;AAClF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGpE;AA+ED,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAGzD;AAED;;+CAE+C;AAC/C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAW/D"}
@@ -0,0 +1,108 @@
1
+ export function parsePm2Integer(value, options = {}) {
2
+ if (value === null || value === undefined)
3
+ return undefined;
4
+ if (typeof value === 'string' && !/^-?\d+$/.test(value.trim()))
5
+ return undefined;
6
+ if (typeof value !== 'number' && typeof value !== 'string')
7
+ return undefined;
8
+ const parsed = Number(value);
9
+ if (!Number.isSafeInteger(parsed))
10
+ return undefined;
11
+ if (options.nonNegative && parsed < 0)
12
+ return undefined;
13
+ return parsed;
14
+ }
15
+ /** PM2 RPC addresses the canonical top-level pm_id. A nested pm2_env.pm_id can
16
+ * be a stale serialized copy and must never resurrect an absent/null identity. */
17
+ export function parseCanonicalPm2Id(app) {
18
+ if (!app || typeof app !== 'object' || Array.isArray(app))
19
+ return undefined;
20
+ return parsePm2Integer(app.pm_id, { nonNegative: true });
21
+ }
22
+ function parseProjection(output) {
23
+ try {
24
+ const parsed = JSON.parse(output);
25
+ return Array.isArray(parsed)
26
+ ? { kind: 'array', value: parsed }
27
+ : { kind: 'non-array' };
28
+ }
29
+ catch {
30
+ // PM2 can prefix stdout with informational `[PM2]` lines. Search backward
31
+ // for the final valid JSON array without accepting arbitrary JSON values.
32
+ for (let start = output.lastIndexOf('['); start >= 0; start = start === 0 ? -1 : output.lastIndexOf('[', start - 1)) {
33
+ try {
34
+ const parsed = JSON.parse(output.slice(start).trim());
35
+ if (Array.isArray(parsed))
36
+ return { kind: 'array', value: parsed };
37
+ }
38
+ catch { /* try an earlier '[' */ }
39
+ }
40
+ return { kind: 'malformed' };
41
+ }
42
+ }
43
+ function isPlainRecord(value) {
44
+ return !!value && typeof value === 'object' && !Array.isArray(value);
45
+ }
46
+ /** Validate the parts of a PM2 registry row that every mutating caller relies
47
+ * on. A syntactically valid JSON array is not authority when one of its rows
48
+ * would later be silently coerced to name="undefined", pid=0, or an absent
49
+ * canonical pm_id. */
50
+ function assertSemanticPm2Rows(rows) {
51
+ const ids = new Map();
52
+ const positivePids = new Map();
53
+ for (let index = 0; index < rows.length; index++) {
54
+ const row = rows[index];
55
+ if (!isPlainRecord(row)) {
56
+ throw new Error(`pm2 jlist row ${index} is not an object`);
57
+ }
58
+ const name = row.name;
59
+ if (typeof name !== 'string' || !name.trim()) {
60
+ throw new Error(`pm2 jlist row ${index} has no non-empty name`);
61
+ }
62
+ const pmId = parseCanonicalPm2Id(row);
63
+ if (pmId === undefined) {
64
+ throw new Error(`pm2 jlist row ${index} (${name}) has no canonical non-negative pm_id`);
65
+ }
66
+ const priorName = ids.get(pmId);
67
+ if (priorName !== undefined) {
68
+ throw new Error(`pm2 jlist has duplicate canonical pm_id ${pmId} across ${priorName} and ${name}`);
69
+ }
70
+ ids.set(pmId, name);
71
+ const pid = parsePm2Integer(row.pid, { nonNegative: true });
72
+ if (pid === undefined) {
73
+ throw new Error(`pm2 jlist row ${index} (${name}) has no non-negative pid`);
74
+ }
75
+ if (pid > 1) {
76
+ const priorPidName = positivePids.get(pid);
77
+ if (priorPidName !== undefined) {
78
+ throw new Error(`pm2 jlist has duplicate positive pid ${pid} across ${priorPidName} and ${name}`);
79
+ }
80
+ positivePids.set(pid, name);
81
+ }
82
+ const env = row.pm2_env;
83
+ if (!isPlainRecord(env)
84
+ || typeof env.status !== 'string'
85
+ || !env.status.trim()) {
86
+ throw new Error(`pm2 jlist row ${index} (${name}) has no semantic pm2_env.status`);
87
+ }
88
+ }
89
+ }
90
+ /** Forgiving parser for read-only/status surfaces. */
91
+ export function parsePm2JlistOutput(output) {
92
+ const parsed = parseProjection(output);
93
+ return parsed.kind === 'array' ? parsed.value : [];
94
+ }
95
+ /** Shutdown authority must never interpret `{}`, `null`, or malformed output
96
+ * as an empty fleet: doing so would allow a later name-based PM2 mutation to
97
+ * bypass graceful shutdown of live daemons. */
98
+ export function parsePm2JlistOutputStrict(output) {
99
+ const parsed = parseProjection(output);
100
+ if (parsed.kind === 'array') {
101
+ assertSemanticPm2Rows(parsed.value);
102
+ return parsed.value;
103
+ }
104
+ throw new Error(parsed.kind === 'non-array'
105
+ ? 'pm2 jlist returned non-array JSON'
106
+ : 'pm2 jlist returned malformed output');
107
+ }
108
+ //# sourceMappingURL=pm2-jlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-jlist.js","sourceRoot":"","sources":["../../src/cli/pm2-jlist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface Pm2ExecutableProbeRuntime {
2
+ readlink(path: string): string;
3
+ exists(path: string): boolean;
4
+ }
5
+ /** Fail closed when a live Linux PM2 God is executing a deleted Node binary.
6
+ * Failure to inspect /proc remains non-authoritative and is skipped, but a
7
+ * successful read is evaluated outside that catch so the safety refusal can
8
+ * never be swallowed as an inspection error. */
9
+ export declare function assertLinuxPm2GodExecutableUsable(pm2Pid: number, runtime?: Pm2ExecutableProbeRuntime): void;
10
+ //# sourceMappingURL=pm2-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-preflight.d.ts","sourceRoot":"","sources":["../../src/cli/pm2-preflight.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED;;;gDAGgD;AAChD,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,yBAGR,GACA,IAAI,CAWN"}
@@ -0,0 +1,23 @@
1
+ import { existsSync, readlinkSync } from 'node:fs';
2
+ /** Fail closed when a live Linux PM2 God is executing a deleted Node binary.
3
+ * Failure to inspect /proc remains non-authoritative and is skipped, but a
4
+ * successful read is evaluated outside that catch so the safety refusal can
5
+ * never be swallowed as an inspection error. */
6
+ export function assertLinuxPm2GodExecutableUsable(pm2Pid, runtime = {
7
+ readlink: path => readlinkSync(path),
8
+ exists: path => existsSync(path),
9
+ }) {
10
+ let executable;
11
+ try {
12
+ executable = runtime.readlink(`/proc/${pm2Pid}/exe`);
13
+ }
14
+ catch {
15
+ return;
16
+ }
17
+ const cleanPath = executable.replace(/ \(deleted\)$/, '');
18
+ if (!executable.endsWith(' (deleted)') && runtime.exists(cleanPath))
19
+ return;
20
+ throw new Error(`pm2 god daemon (pid ${pm2Pid}) 使用的 Node 二进制已失效: ${cleanPath}; `
21
+ + '为避免强杀未完成 Riff 交接的 daemon,拒绝自动清理,请先人工核对进程归属');
22
+ }
23
+ //# sourceMappingURL=pm2-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-preflight.js","sourceRoot":"","sources":["../../src/cli/pm2-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOnD;;;gDAGgD;AAChD,MAAM,UAAU,iCAAiC,CAC/C,MAAc,EACd,UAAqC;IACnC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;IACpC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;CACjC;IAED,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,MAAM,MAAM,CAAC,CAAC;IAAC,CAAC;IAC7D,MAAM,CAAC;QAAC,OAAO;IAAC,CAAC;IAEjB,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO;IAC5E,MAAM,IAAI,KAAK,CACb,uBAAuB,MAAM,sBAAsB,SAAS,IAAI;UAC9D,4CAA4C,CAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface Pm2ShutdownCapabilityTarget {
2
+ name: string;
3
+ pid: number;
4
+ }
5
+ export interface AttestedPm2DaemonShutdownTarget extends Pm2ShutdownCapabilityTarget {
6
+ larkAppId: string;
7
+ ipcPort: number;
8
+ bootInstanceId: string;
9
+ processStartIdentity: string;
10
+ }
11
+ export interface Pm2ShutdownCapabilityRuntime {
12
+ now(): number;
13
+ exists(path: string): boolean;
14
+ readdir(path: string): string[];
15
+ read(path: string): string;
16
+ mtime(path: string): number;
17
+ isAlive(pid: number): boolean;
18
+ readStartIdentity(pid: number): string | undefined;
19
+ }
20
+ /**
21
+ * Require every still-live target daemon PID to own one fresh, daemon-written
22
+ * descriptor advertising the exact safe shutdown protocol. This is a rollout
23
+ * boundary, not a package-version guess: installing a new CLI does not upgrade
24
+ * an already-running old daemon in memory.
25
+ */
26
+ export declare function assertPm2DaemonShutdownCapabilitiesIn(operation: string, targets: readonly Pm2ShutdownCapabilityTarget[], registryDir: string, runtime?: Pm2ShutdownCapabilityRuntime): AttestedPm2DaemonShutdownTarget[];
27
+ //# sourceMappingURL=pm2-shutdown-capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-shutdown-capability.d.ts","sourceRoot":"","sources":["../../src/cli/pm2-shutdown-capability.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,+BAAgC,SAAQ,2BAA2B;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,IAAI,MAAM,CAAC;IACd,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACpD;AA6BD;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,2BAA2B,EAAE,EAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,4BAA6C,GACrD,+BAA+B,EAAE,CA4InC"}
@@ -0,0 +1,161 @@
1
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { SUPERVISOR_SHUTDOWN_PROTOCOL } from '../core/supervisor-shutdown-protocol.js';
4
+ import { readSupervisorProcessStartIdentity } from '../core/process-start-identity.js';
5
+ const FRESH_MS = 90_000;
6
+ const defaultRuntime = {
7
+ now: () => Date.now(),
8
+ exists: path => existsSync(path),
9
+ readdir: path => readdirSync(path),
10
+ read: path => readFileSync(path, 'utf8'),
11
+ mtime: path => statSync(path).mtimeMs,
12
+ isAlive: pid => { try {
13
+ process.kill(pid, 0);
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ } },
19
+ readStartIdentity: pid => {
20
+ // Lazy import is unnecessary here: this pure helper has no daemon state.
21
+ // The concrete function is injected below to keep tests deterministic.
22
+ return readSupervisorProcessStartIdentity(pid);
23
+ },
24
+ };
25
+ function failure(operation, detail) {
26
+ return new Error(`[${operation}] refusing to signal daemon generation(s): ${detail}. `
27
+ + `The live daemon may predate shutdown protocol ${SUPERVISOR_SHUTDOWN_PROTOCOL}; `
28
+ + 'normal stop/restart intentionally fails closed on this first-upgrade boundary. '
29
+ + 'After confirming every Session/Riff workload is idle, run '
30
+ + '`botmux restart --bootstrap-shutdown-protocol --yes` for the operator-approved one-time bootstrap; '
31
+ + 'automatic update must not be reported as applied until the new handler-ready fleet is verified');
32
+ }
33
+ /**
34
+ * Require every still-live target daemon PID to own one fresh, daemon-written
35
+ * descriptor advertising the exact safe shutdown protocol. This is a rollout
36
+ * boundary, not a package-version guess: installing a new CLI does not upgrade
37
+ * an already-running old daemon in memory.
38
+ */
39
+ export function assertPm2DaemonShutdownCapabilitiesIn(operation, targets, registryDir, runtime = defaultRuntime) {
40
+ const invalid = targets.filter(target => !target.name.trim() || !Number.isSafeInteger(target.pid) || target.pid <= 1);
41
+ if (invalid.length > 0) {
42
+ throw failure(operation, 'shutdown target has no canonical name/live PID');
43
+ }
44
+ const duplicatePids = [...new Set(targets.map(target => target.pid))]
45
+ .filter(pid => targets.filter(target => target.pid === pid).length > 1);
46
+ if (duplicatePids.length > 0) {
47
+ throw failure(operation, `multiple shutdown targets share PID(s) ${duplicatePids.join(', ')}`);
48
+ }
49
+ // A generation that exited before attestation needs no signal. Any successor
50
+ // is discovered from a fresh PM2 projection and must attest independently.
51
+ const liveTargets = targets.filter(target => runtime.isAlive(target.pid));
52
+ if (liveTargets.length === 0)
53
+ return [];
54
+ if (!runtime.exists(registryDir)) {
55
+ throw failure(operation, 'daemon descriptor registry is missing');
56
+ }
57
+ let names;
58
+ try {
59
+ names = runtime.readdir(registryDir);
60
+ }
61
+ catch (error) {
62
+ throw failure(operation, `daemon descriptor registry is unreadable (${error instanceof Error ? error.message : String(error)})`);
63
+ }
64
+ const now = runtime.now();
65
+ const targetPids = new Set(liveTargets.map(target => target.pid));
66
+ const descriptors = new Map();
67
+ for (const name of names) {
68
+ if (!name.endsWith('.json'))
69
+ continue;
70
+ const path = join(registryDir, name);
71
+ let mtimeMs;
72
+ try {
73
+ mtimeMs = runtime.mtime(path);
74
+ }
75
+ catch (error) {
76
+ if (error.code === 'ENOENT')
77
+ continue;
78
+ throw failure(operation, `cannot inspect daemon descriptor ${name} (${error instanceof Error ? error.message : String(error)})`);
79
+ }
80
+ const mtimeFresh = now - mtimeMs <= FRESH_MS;
81
+ let value;
82
+ try {
83
+ value = JSON.parse(runtime.read(path));
84
+ }
85
+ catch (error) {
86
+ if (!mtimeFresh)
87
+ continue;
88
+ throw failure(operation, `fresh daemon descriptor ${name} is unreadable or malformed `
89
+ + `(${error instanceof Error ? error.message : String(error)})`);
90
+ }
91
+ const record = value && typeof value === 'object' && !Array.isArray(value)
92
+ ? value
93
+ : undefined;
94
+ const heartbeat = record?.lastHeartbeat;
95
+ const heartbeatFresh = typeof heartbeat === 'number'
96
+ && Number.isFinite(heartbeat)
97
+ && now - heartbeat <= FRESH_MS;
98
+ if (!mtimeFresh && !heartbeatFresh)
99
+ continue;
100
+ const pid = record?.pid;
101
+ if (!Number.isSafeInteger(pid) || pid <= 1) {
102
+ throw failure(operation, `fresh daemon descriptor ${name} has no canonical PID`);
103
+ }
104
+ if (!targetPids.has(pid))
105
+ continue;
106
+ if (!heartbeatFresh) {
107
+ throw failure(operation, `daemon descriptor ${name} has no fresh semantic heartbeat`);
108
+ }
109
+ if (!runtime.isAlive(pid))
110
+ continue;
111
+ if (descriptors.has(pid)) {
112
+ throw failure(operation, `multiple fresh descriptors claim live PID ${pid}`);
113
+ }
114
+ descriptors.set(pid, record);
115
+ }
116
+ const authorized = [];
117
+ for (const target of liveTargets) {
118
+ const descriptor = descriptors.get(target.pid);
119
+ if (!descriptor) {
120
+ // Re-check process birth: a generation that exited during the registry
121
+ // scan needs no signal, but a same-PID successor must not inherit a stale
122
+ // capability.
123
+ if (!runtime.readStartIdentity(target.pid) && !runtime.isAlive(target.pid))
124
+ continue;
125
+ throw failure(operation, `${target.name}/${target.pid} has no matching fresh daemon descriptor`);
126
+ }
127
+ if (descriptor.supervisorShutdownProtocol !== SUPERVISOR_SHUTDOWN_PROTOCOL) {
128
+ throw failure(operation, `${target.name}/${target.pid} does not attest ${SUPERVISOR_SHUTDOWN_PROTOCOL}`);
129
+ }
130
+ const larkAppId = descriptor.larkAppId;
131
+ const ipcPort = descriptor.ipcPort;
132
+ const bootInstanceId = descriptor.bootInstanceId;
133
+ if (typeof larkAppId !== 'string' || !larkAppId.trim()
134
+ || !Number.isSafeInteger(ipcPort) || ipcPort < 1 || ipcPort > 65_535
135
+ || typeof bootInstanceId !== 'string' || !bootInstanceId) {
136
+ throw failure(operation, `${target.name}/${target.pid} descriptor has no canonical app/port/boot identity`);
137
+ }
138
+ const describedStart = descriptor.processStartIdentity;
139
+ if (typeof describedStart !== 'string' || !describedStart) {
140
+ throw failure(operation, `${target.name}/${target.pid} descriptor has no process-start identity`);
141
+ }
142
+ const currentStart = runtime.readStartIdentity(target.pid);
143
+ if (!currentStart) {
144
+ if (!runtime.isAlive(target.pid))
145
+ continue;
146
+ throw failure(operation, `cannot revalidate process-start identity for ${target.name}/${target.pid}`);
147
+ }
148
+ if (currentStart !== describedStart) {
149
+ throw failure(operation, `${target.name}/${target.pid} process-start identity does not match its descriptor`);
150
+ }
151
+ authorized.push({
152
+ ...target,
153
+ larkAppId: larkAppId.trim(),
154
+ ipcPort: ipcPort,
155
+ bootInstanceId,
156
+ processStartIdentity: describedStart,
157
+ });
158
+ }
159
+ return authorized;
160
+ }
161
+ //# sourceMappingURL=pm2-shutdown-capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-shutdown-capability.js","sourceRoot":"","sources":["../../src/cli/pm2-shutdown-capability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { FleetProcessEntry } from './fleet-shutdown.js';
2
+ /** Preserve PM2's raw stop_exit_codes elements for exact policy validation.
3
+ * PM2 applies parseInt to string elements at exit time, so lossy numeric
4
+ * projection would hide restart-suppressing extras such as "0foo". */
5
+ export declare function normalizeRawPm2StopExitCodes(value: unknown): unknown[];
6
+ /** The in-memory shutdown capability is insufficient when PM2 still owns an
7
+ * old registry policy. In particular `stop_exit_codes:[0]` suppresses restart
8
+ * after PM2 normalizes SIGKILL/OOM to exit_code 0. Require the exact daemon
9
+ * policy that makes only shutdown()'s reserved sentinel terminal. */
10
+ export declare function assertDaemonPm2GracefulExitPolicy(operation: string, entries: FleetProcessEntry[]): void;
11
+ /** Require one exact, online, OS-live registry row for every configured core
12
+ * process and no stale/foreign core rows. This is the postcondition for every
13
+ * public fleet start surface. */
14
+ export declare function assertConfiguredPm2FleetOnline(operation: string, entries: FleetProcessEntry[], configuredNames: string[], isAlive: (pid: number) => boolean): void;
15
+ /** PM2 `online` is published before a daemon's shutdown endpoint/handler-ready
16
+ * capability. A public start is complete only after both authorities agree. */
17
+ export declare function assertConfiguredPm2FleetReady<TEntry extends FleetProcessEntry>(operation: string, entries: TEntry[], configuredNames: string[], isAlive: (pid: number) => boolean, assertDaemonCapabilities: (entries: TEntry[]) => void): void;
18
+ /** Capability scanners used by shutdown may legitimately omit a target that
19
+ * exited during their read. Start verification may not: require an exact
20
+ * attested PID set and recheck OS liveness after the capability scan. */
21
+ export declare function assertExactAttestedDaemonSet(operation: string, daemonEntries: FleetProcessEntry[], attestedPids: readonly number[], isAlive: (pid: number) => boolean): void;
22
+ export type StartBotFleetAdmission = {
23
+ state: 'already-online';
24
+ } | {
25
+ state: 'start-eligible';
26
+ } | {
27
+ state: 'fleet-down';
28
+ };
29
+ /** `start-bot` is safe only for the append-one-bot case: either the entire
30
+ * configured fleet is already online, or exactly the requested bot row is
31
+ * absent while every other configured bot and the dashboard are online. */
32
+ export declare function classifyStartBotFleetAdmission(operation: string, entries: FleetProcessEntry[], configuredNames: string[], targetName: string, isAlive: (pid: number) => boolean): StartBotFleetAdmission;
33
+ export interface Pm2StartTransactionRuntime<TProjection> {
34
+ start(timeoutMs: number): void;
35
+ /** Must obtain a new projection and validate the complete expected state. */
36
+ verifyFresh(timeoutMs: number): TProjection;
37
+ /** Must independently re-read authority before compensating partial launch. */
38
+ rollback(): void;
39
+ }
40
+ /** Run one bounded PM2 launch and make the fresh fleet projection—not the CLI
41
+ * exit code—the success authority. Any incomplete/unverified launch is
42
+ * compensated before the error escapes. */
43
+ export declare function runBoundedPm2StartTransaction<TProjection>(operation: string, startTimeoutMs: number, verifyTimeoutMs: number, runtime: Pm2StartTransactionRuntime<TProjection>): TProjection;
44
+ export interface LatePm2StartRollbackRuntime {
45
+ now(): number;
46
+ sleep(ms: number): void;
47
+ /** Re-read authority and compensate anything currently published. Return
48
+ * true only when this observation exactly matches the pre-start state. */
49
+ reconcileOnce(): boolean;
50
+ }
51
+ /** A killed/timed-out PM2 client does not cancel work already queued in God.
52
+ * Therefore an empty first rollback projection is not success: require one
53
+ * continuous restored window, resetting it whenever a late row appears. */
54
+ export declare function reconcileLatePm2StartPublication(operation: string, settleMs: number, timeoutMs: number, runtime: LatePm2StartRollbackRuntime): void;
55
+ //# sourceMappingURL=pm2-start-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-start-transaction.d.ts","sourceRoot":"","sources":["../../src/cli/pm2-start-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D;;sEAEsE;AACtE,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAEtE;AAuED;;;qEAGqE;AACrE,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAAE,GAC3B,IAAI,CAmBN;AAED;;iCAEiC;AACjC,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,eAAe,EAAE,MAAM,EAAE,EACzB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAChC,IAAI,CAeN;AAED;+EAC+E;AAC/E,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,iBAAiB,EAC5E,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,eAAe,EAAE,MAAM,EAAE,EACzB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EACjC,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,GACpD,IAAI,CAGN;AAED;;yEAEyE;AACzE,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,iBAAiB,EAAE,EAClC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAChC,IAAI,CAiBN;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAC3B;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAC3B;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE5B;;2EAE2E;AAC3E,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,eAAe,EAAE,MAAM,EAAE,EACzB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAChC,sBAAsB,CAsCxB;AAED,MAAM,WAAW,0BAA0B,CAAC,WAAW;IACrD,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5C,+EAA+E;IAC/E,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED;;2CAE2C;AAC3C,wBAAgB,6BAA6B,CAAC,WAAW,EACvD,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,0BAA0B,CAAC,WAAW,CAAC,GAC/C,WAAW,CA4Bb;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,IAAI,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;8EAC0E;IAC1E,aAAa,IAAI,OAAO,CAAC;CAC1B;AAED;;2EAE2E;AAC3E,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,2BAA2B,GACnC,IAAI,CAwBN"}