botmux 2.111.0 → 2.112.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 (1041) hide show
  1. package/README.en.md +19 -7
  2. package/README.md +19 -7
  3. package/dist/adapters/adopt-route.d.ts.map +1 -1
  4. package/dist/adapters/adopt-route.js +2 -1
  5. package/dist/adapters/adopt-route.js.map +1 -1
  6. package/dist/adapters/backend/herdr-backend.d.ts +29 -0
  7. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  8. package/dist/adapters/backend/herdr-backend.js +167 -0
  9. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  10. package/dist/adapters/backend/riff-backend.js +2 -2
  11. package/dist/adapters/backend/sandbox.d.ts +61 -6
  12. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  13. package/dist/adapters/backend/sandbox.js +235 -43
  14. package/dist/adapters/backend/sandbox.js.map +1 -1
  15. package/dist/adapters/backend/tmux-backend.d.ts +1 -0
  16. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  17. package/dist/adapters/backend/tmux-backend.js +1 -0
  18. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  19. package/dist/adapters/cli/claude-code.d.ts +2 -0
  20. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  21. package/dist/adapters/cli/claude-code.js +7 -0
  22. package/dist/adapters/cli/claude-code.js.map +1 -1
  23. package/dist/adapters/cli/codex-app-turn.d.ts +16 -0
  24. package/dist/adapters/cli/codex-app-turn.d.ts.map +1 -1
  25. package/dist/adapters/cli/codex-app-turn.js +26 -0
  26. package/dist/adapters/cli/codex-app-turn.js.map +1 -1
  27. package/dist/adapters/cli/codex.d.ts.map +1 -1
  28. package/dist/adapters/cli/codex.js +1 -0
  29. package/dist/adapters/cli/codex.js.map +1 -1
  30. package/dist/adapters/cli/grok.d.ts +8 -6
  31. package/dist/adapters/cli/grok.d.ts.map +1 -1
  32. package/dist/adapters/cli/grok.js +14 -6
  33. package/dist/adapters/cli/grok.js.map +1 -1
  34. package/dist/adapters/cli/read-isolation.d.ts +40 -14
  35. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  36. package/dist/adapters/cli/read-isolation.js +116 -19
  37. package/dist/adapters/cli/read-isolation.js.map +1 -1
  38. package/dist/adapters/cli/runner-control-channel.d.ts +32 -0
  39. package/dist/adapters/cli/runner-control-channel.d.ts.map +1 -0
  40. package/dist/adapters/cli/runner-control-channel.js +104 -0
  41. package/dist/adapters/cli/runner-control-channel.js.map +1 -0
  42. package/dist/adapters/cli/shared-hints.d.ts +1 -1
  43. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  44. package/dist/adapters/cli/shared-hints.js +9 -0
  45. package/dist/adapters/cli/shared-hints.js.map +1 -1
  46. package/dist/adapters/cli/traex.d.ts.map +1 -1
  47. package/dist/adapters/cli/traex.js +100 -64
  48. package/dist/adapters/cli/traex.js.map +1 -1
  49. package/dist/adapters/cli/types.d.ts +13 -0
  50. package/dist/adapters/cli/types.d.ts.map +1 -1
  51. package/dist/bot-registry.d.ts +36 -27
  52. package/dist/bot-registry.d.ts.map +1 -1
  53. package/dist/bot-registry.js +354 -8
  54. package/dist/bot-registry.js.map +1 -1
  55. package/dist/cli/saved-workflow.d.ts +25 -0
  56. package/dist/cli/saved-workflow.d.ts.map +1 -0
  57. package/dist/cli/saved-workflow.js +338 -0
  58. package/dist/cli/saved-workflow.js.map +1 -0
  59. package/dist/cli/send-dispatch.d.ts +18 -3
  60. package/dist/cli/send-dispatch.d.ts.map +1 -1
  61. package/dist/cli/send-dispatch.js +22 -3
  62. package/dist/cli/send-dispatch.js.map +1 -1
  63. package/dist/cli/v3-run-cancel.d.ts +47 -0
  64. package/dist/cli/v3-run-cancel.d.ts.map +1 -0
  65. package/dist/cli/v3-run-cancel.js +96 -0
  66. package/dist/cli/v3-run-cancel.js.map +1 -0
  67. package/dist/cli/vc-agent.d.ts.map +1 -1
  68. package/dist/cli/vc-agent.js +54 -1
  69. package/dist/cli/vc-agent.js.map +1 -1
  70. package/dist/cli/workflow-migration.d.ts +39 -0
  71. package/dist/cli/workflow-migration.d.ts.map +1 -0
  72. package/dist/cli/workflow-migration.js +302 -0
  73. package/dist/cli/workflow-migration.js.map +1 -0
  74. package/dist/cli/workflow-run-archive.d.ts +29 -0
  75. package/dist/cli/workflow-run-archive.d.ts.map +1 -0
  76. package/dist/cli/workflow-run-archive.js +183 -0
  77. package/dist/cli/workflow-run-archive.js.map +1 -0
  78. package/dist/cli/workflow.d.ts +5 -10
  79. package/dist/cli/workflow.d.ts.map +1 -1
  80. package/dist/cli/workflow.js +85 -764
  81. package/dist/cli/workflow.js.map +1 -1
  82. package/dist/cli.d.ts.map +1 -1
  83. package/dist/cli.js +1018 -191
  84. package/dist/cli.js.map +1 -1
  85. package/dist/codex-app-runner.js +30 -21
  86. package/dist/codex-app-runner.js.map +1 -1
  87. package/dist/core/command-handler.d.ts.map +1 -1
  88. package/dist/core/command-handler.js +21 -9
  89. package/dist/core/command-handler.js.map +1 -1
  90. package/dist/core/current-turn-provenance.d.ts +39 -0
  91. package/dist/core/current-turn-provenance.d.ts.map +1 -0
  92. package/dist/core/current-turn-provenance.js +122 -0
  93. package/dist/core/current-turn-provenance.js.map +1 -0
  94. package/dist/core/daemon-ipc-auth.d.ts +20 -0
  95. package/dist/core/daemon-ipc-auth.d.ts.map +1 -0
  96. package/dist/core/daemon-ipc-auth.js +44 -0
  97. package/dist/core/daemon-ipc-auth.js.map +1 -0
  98. package/dist/core/daemon-ipc-session-auth.d.ts +37 -0
  99. package/dist/core/daemon-ipc-session-auth.d.ts.map +1 -0
  100. package/dist/core/daemon-ipc-session-auth.js +35 -0
  101. package/dist/core/daemon-ipc-session-auth.js.map +1 -0
  102. package/dist/core/dashboard-command/index.d.ts +0 -2
  103. package/dist/core/dashboard-command/index.d.ts.map +1 -1
  104. package/dist/core/dashboard-command/index.js +2 -2
  105. package/dist/core/dashboard-command/index.js.map +1 -1
  106. package/dist/core/dashboard-command/stub.d.ts +1 -1
  107. package/dist/core/dashboard-command/stub.d.ts.map +1 -1
  108. package/dist/core/dashboard-command/stub.js +0 -1
  109. package/dist/core/dashboard-command/stub.js.map +1 -1
  110. package/dist/core/dashboard-ipc-server.d.ts +11 -2
  111. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  112. package/dist/core/dashboard-ipc-server.js +266 -41
  113. package/dist/core/dashboard-ipc-server.js.map +1 -1
  114. package/dist/core/dashboard-secret.d.ts +3 -0
  115. package/dist/core/dashboard-secret.d.ts.map +1 -0
  116. package/dist/core/dashboard-secret.js +7 -0
  117. package/dist/core/dashboard-secret.js.map +1 -0
  118. package/dist/core/data-dir.d.ts +24 -0
  119. package/dist/core/data-dir.d.ts.map +1 -0
  120. package/dist/core/data-dir.js +48 -0
  121. package/dist/core/data-dir.js.map +1 -0
  122. package/dist/core/inflight-input-tracker.d.ts +4 -2
  123. package/dist/core/inflight-input-tracker.d.ts.map +1 -1
  124. package/dist/core/inflight-input-tracker.js +6 -5
  125. package/dist/core/inflight-input-tracker.js.map +1 -1
  126. package/dist/core/inject-queue-policy.d.ts +70 -0
  127. package/dist/core/inject-queue-policy.d.ts.map +1 -0
  128. package/dist/core/inject-queue-policy.js +30 -0
  129. package/dist/core/inject-queue-policy.js.map +1 -0
  130. package/dist/core/maintenance.d.ts +1 -1
  131. package/dist/core/maintenance.d.ts.map +1 -1
  132. package/dist/core/maintenance.js +3 -2
  133. package/dist/core/maintenance.js.map +1 -1
  134. package/dist/core/managed-origin-capability.d.ts +30 -0
  135. package/dist/core/managed-origin-capability.d.ts.map +1 -0
  136. package/dist/core/managed-origin-capability.js +88 -0
  137. package/dist/core/managed-origin-capability.js.map +1 -0
  138. package/dist/core/role-library.d.ts +15 -0
  139. package/dist/core/role-library.d.ts.map +1 -0
  140. package/dist/core/role-library.js +75 -0
  141. package/dist/core/role-library.js.map +1 -0
  142. package/dist/core/session-cwd.d.ts +14 -0
  143. package/dist/core/session-cwd.d.ts.map +1 -0
  144. package/dist/core/session-cwd.js +17 -0
  145. package/dist/core/session-cwd.js.map +1 -0
  146. package/dist/core/session-manager.d.ts +4 -1
  147. package/dist/core/session-manager.d.ts.map +1 -1
  148. package/dist/core/session-manager.js +27 -8
  149. package/dist/core/session-manager.js.map +1 -1
  150. package/dist/core/session-marker.d.ts +22 -0
  151. package/dist/core/session-marker.d.ts.map +1 -1
  152. package/dist/core/session-marker.js +185 -20
  153. package/dist/core/session-marker.js.map +1 -1
  154. package/dist/core/slash-inject.d.ts +15 -0
  155. package/dist/core/slash-inject.d.ts.map +1 -0
  156. package/dist/core/slash-inject.js +25 -0
  157. package/dist/core/slash-inject.js.map +1 -0
  158. package/dist/core/terminal-url.d.ts +1 -0
  159. package/dist/core/terminal-url.d.ts.map +1 -1
  160. package/dist/core/terminal-url.js +14 -8
  161. package/dist/core/terminal-url.js.map +1 -1
  162. package/dist/core/terminal-write-auth.d.ts +26 -0
  163. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  164. package/dist/core/terminal-write-auth.js +48 -3
  165. package/dist/core/terminal-write-auth.js.map +1 -1
  166. package/dist/core/trigger-session.d.ts +24 -1
  167. package/dist/core/trigger-session.d.ts.map +1 -1
  168. package/dist/core/trigger-session.js +106 -15
  169. package/dist/core/trigger-session.js.map +1 -1
  170. package/dist/core/types.d.ts +26 -1
  171. package/dist/core/types.d.ts.map +1 -1
  172. package/dist/core/types.js +10 -0
  173. package/dist/core/types.js.map +1 -1
  174. package/dist/core/worker-pool.d.ts +65 -2
  175. package/dist/core/worker-pool.d.ts.map +1 -1
  176. package/dist/core/worker-pool.js +459 -39
  177. package/dist/core/worker-pool.js.map +1 -1
  178. package/dist/daemon.d.ts +249 -8
  179. package/dist/daemon.d.ts.map +1 -1
  180. package/dist/daemon.js +7383 -1195
  181. package/dist/daemon.js.map +1 -1
  182. package/dist/dashboard/aggregator.d.ts +1 -1
  183. package/dist/dashboard/aggregator.d.ts.map +1 -1
  184. package/dist/dashboard/aggregator.js +2 -2
  185. package/dist/dashboard/aggregator.js.map +1 -1
  186. package/dist/dashboard/auth.d.ts +3 -8
  187. package/dist/dashboard/auth.d.ts.map +1 -1
  188. package/dist/dashboard/auth.js +63 -22
  189. package/dist/dashboard/auth.js.map +1 -1
  190. package/dist/dashboard/bot-onboarding.d.ts +5 -0
  191. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  192. package/dist/dashboard/bot-onboarding.js +37 -0
  193. package/dist/dashboard/bot-onboarding.js.map +1 -1
  194. package/dist/dashboard/connector-api.d.ts.map +1 -1
  195. package/dist/dashboard/connector-api.js +42 -2
  196. package/dist/dashboard/connector-api.js.map +1 -1
  197. package/dist/dashboard/daemon-internal-api.d.ts +0 -2
  198. package/dist/dashboard/daemon-internal-api.d.ts.map +1 -1
  199. package/dist/dashboard/daemon-internal-api.js +26 -93
  200. package/dist/dashboard/daemon-internal-api.js.map +1 -1
  201. package/dist/dashboard/daemon-internal-client.d.ts.map +1 -1
  202. package/dist/dashboard/daemon-internal-client.js +2 -3
  203. package/dist/dashboard/daemon-internal-client.js.map +1 -1
  204. package/dist/dashboard/federation-api.js +1 -1
  205. package/dist/dashboard/federation-api.js.map +1 -1
  206. package/dist/dashboard/federation-spoke-api.js +1 -1
  207. package/dist/dashboard/federation-spoke-api.js.map +1 -1
  208. package/dist/dashboard/history-senders.d.ts +3 -0
  209. package/dist/dashboard/history-senders.d.ts.map +1 -1
  210. package/dist/dashboard/history-senders.js.map +1 -1
  211. package/dist/dashboard/http.d.ts +4 -0
  212. package/dist/dashboard/http.d.ts.map +1 -0
  213. package/dist/dashboard/http.js +6 -0
  214. package/dist/dashboard/http.js.map +1 -0
  215. package/dist/dashboard/registry.d.ts +4 -0
  216. package/dist/dashboard/registry.d.ts.map +1 -1
  217. package/dist/dashboard/registry.js.map +1 -1
  218. package/dist/dashboard/trigger-api.js +1 -1
  219. package/dist/dashboard/trigger-api.js.map +1 -1
  220. package/dist/dashboard/v3-runs-api.d.ts +13 -10
  221. package/dist/dashboard/v3-runs-api.d.ts.map +1 -1
  222. package/dist/dashboard/v3-runs-api.js +121 -4
  223. package/dist/dashboard/v3-runs-api.js.map +1 -1
  224. package/dist/dashboard/vc-consumer-profiles-api.d.ts +105 -0
  225. package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -0
  226. package/dist/dashboard/vc-consumer-profiles-api.js +312 -0
  227. package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -0
  228. package/dist/dashboard/web/app.d.ts.map +1 -1
  229. package/dist/dashboard/web/app.js +7 -6
  230. package/dist/dashboard/web/app.js.map +1 -1
  231. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  232. package/dist/dashboard/web/bot-defaults-page.js +9 -14
  233. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  234. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  235. package/dist/dashboard/web/bot-onboarding.js +7 -3
  236. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  237. package/dist/dashboard/web/connectors-page.d.ts +5 -0
  238. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  239. package/dist/dashboard/web/connectors-page.js +16 -12
  240. package/dist/dashboard/web/connectors-page.js.map +1 -1
  241. package/dist/dashboard/web/create-session-entry.d.ts +4 -0
  242. package/dist/dashboard/web/create-session-entry.d.ts.map +1 -0
  243. package/dist/dashboard/web/create-session-entry.js +17 -0
  244. package/dist/dashboard/web/create-session-entry.js.map +1 -0
  245. package/dist/dashboard/web/dashboard-components.d.ts +5 -0
  246. package/dist/dashboard/web/dashboard-components.d.ts.map +1 -1
  247. package/dist/dashboard/web/dashboard-components.js +29 -4
  248. package/dist/dashboard/web/dashboard-components.js.map +1 -1
  249. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  250. package/dist/dashboard/web/dashboard-routes.js +0 -1
  251. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  252. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  253. package/dist/dashboard/web/i18n.js +192 -382
  254. package/dist/dashboard/web/i18n.js.map +1 -1
  255. package/dist/dashboard/web/preferences.d.ts +3 -0
  256. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  257. package/dist/dashboard/web/preferences.js +18 -0
  258. package/dist/dashboard/web/preferences.js.map +1 -1
  259. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  260. package/dist/dashboard/web/schedules-page.js +4 -1
  261. package/dist/dashboard/web/schedules-page.js.map +1 -1
  262. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  263. package/dist/dashboard/web/sessions-page.js +64 -18
  264. package/dist/dashboard/web/sessions-page.js.map +1 -1
  265. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  266. package/dist/dashboard/web/settings-page.js +2 -1
  267. package/dist/dashboard/web/settings-page.js.map +1 -1
  268. package/dist/dashboard/web/v3-api.d.ts +12 -2
  269. package/dist/dashboard/web/v3-api.d.ts.map +1 -1
  270. package/dist/dashboard/web/v3-api.js +34 -6
  271. package/dist/dashboard/web/v3-api.js.map +1 -1
  272. package/dist/dashboard/web/v3-components.d.ts +6 -0
  273. package/dist/dashboard/web/v3-components.d.ts.map +1 -1
  274. package/dist/dashboard/web/v3-components.js +66 -23
  275. package/dist/dashboard/web/v3-components.js.map +1 -1
  276. package/dist/dashboard/web/v3-model.js +1 -1
  277. package/dist/dashboard/web/v3-model.js.map +1 -1
  278. package/dist/dashboard/web/v3-terminal.js +2 -2
  279. package/dist/dashboard/web/v3-terminal.js.map +1 -1
  280. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +19 -0
  281. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -0
  282. package/dist/dashboard/web/vc-consumer-profiles-section.js +382 -0
  283. package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -0
  284. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  285. package/dist/dashboard/webhook-routes.js +29 -6
  286. package/dist/dashboard/webhook-routes.js.map +1 -1
  287. package/dist/dashboard-web/app.js +1 -1
  288. package/dist/dashboard-web/chunks/bot-defaults-page-RYBL4ZYE.js +4 -0
  289. package/dist/dashboard-web/chunks/{chunk-OEJIT66L.js → chunk-CMDPZOPK.js} +1 -1
  290. package/dist/dashboard-web/chunks/chunk-I35DXGM4.js +1 -0
  291. package/dist/dashboard-web/chunks/chunk-NYZHARIU.js +47 -0
  292. package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
  293. package/dist/dashboard-web/chunks/{chunk-YQFXGRSD.js → chunk-YBOHL7T7.js} +1 -1
  294. package/dist/dashboard-web/chunks/chunk-YWCPDL4S.js +1 -0
  295. package/dist/dashboard-web/chunks/connectors-page-DAMP7TTV.js +1 -0
  296. package/dist/dashboard-web/chunks/{groups-page-5AJPPJH2.js → groups-page-BPFA356N.js} +1 -1
  297. package/dist/dashboard-web/chunks/{insights-page-R3DFECX4.js → insights-page-SHOPHTWY.js} +1 -1
  298. package/dist/dashboard-web/chunks/{monitor-room-NLMKJLDY.js → monitor-room-PXPJGZCN.js} +1 -1
  299. package/dist/dashboard-web/chunks/{monitoring-page-EHSOX4GV.js → monitoring-page-4DF54M5Y.js} +1 -1
  300. package/dist/dashboard-web/chunks/{office-page-OXJKFJ4R.js → office-page-6OHU6KMZ.js} +1 -1
  301. package/dist/dashboard-web/chunks/{overview-page-GJHIVXJF.js → overview-page-IHIZ6F5M.js} +1 -1
  302. package/dist/dashboard-web/chunks/{roles-page-6ZODQISW.js → roles-page-JYTBYKEF.js} +1 -1
  303. package/dist/dashboard-web/chunks/{schedules-page-DAGMHVCH.js → schedules-page-WJ72T7KV.js} +1 -1
  304. package/dist/dashboard-web/chunks/sessions-page-QC56OIAI.js +3 -0
  305. package/dist/dashboard-web/chunks/settings-page-TCKWEXTN.js +2 -0
  306. package/dist/dashboard-web/chunks/{skills-page-J7EVUHXP.js → skills-page-RJJNIECW.js} +1 -1
  307. package/dist/dashboard-web/chunks/{team-federation-page-YM5JBIII.js → team-federation-page-ZMDX3E7K.js} +1 -1
  308. package/dist/dashboard-web/chunks/v3-page-VLLAUQ33.js +94 -0
  309. package/dist/dashboard-web/chunks/{whiteboards-page-75N2U6W4.js → whiteboards-page-NAO53CKM.js} +1 -1
  310. package/dist/dashboard-web/style.css +363 -274
  311. package/dist/dashboard.js +194 -78
  312. package/dist/dashboard.js.map +1 -1
  313. package/dist/global-config.d.ts +1 -1
  314. package/dist/i18n/en.d.ts.map +1 -1
  315. package/dist/i18n/en.js +12 -87
  316. package/dist/i18n/en.js.map +1 -1
  317. package/dist/i18n/zh.d.ts.map +1 -1
  318. package/dist/i18n/zh.js +12 -87
  319. package/dist/i18n/zh.js.map +1 -1
  320. package/dist/im/lark/brand-template.d.ts +15 -0
  321. package/dist/im/lark/brand-template.d.ts.map +1 -0
  322. package/dist/im/lark/brand-template.js +114 -0
  323. package/dist/im/lark/brand-template.js.map +1 -0
  324. package/dist/im/lark/card-handler.d.ts +6 -3
  325. package/dist/im/lark/card-handler.d.ts.map +1 -1
  326. package/dist/im/lark/card-handler.js +23 -39
  327. package/dist/im/lark/card-handler.js.map +1 -1
  328. package/dist/im/lark/client.d.ts +8 -2
  329. package/dist/im/lark/client.d.ts.map +1 -1
  330. package/dist/im/lark/client.js +33 -31
  331. package/dist/im/lark/client.js.map +1 -1
  332. package/dist/im/lark/doc-comment.d.ts +18 -0
  333. package/dist/im/lark/doc-comment.d.ts.map +1 -1
  334. package/dist/im/lark/doc-comment.js +119 -5
  335. package/dist/im/lark/doc-comment.js.map +1 -1
  336. package/dist/im/lark/event-dispatcher.d.ts +18 -2
  337. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  338. package/dist/im/lark/event-dispatcher.js +41 -19
  339. package/dist/im/lark/event-dispatcher.js.map +1 -1
  340. package/dist/im/lark/merge-forward.d.ts.map +1 -1
  341. package/dist/im/lark/merge-forward.js +7 -2
  342. package/dist/im/lark/merge-forward.js.map +1 -1
  343. package/dist/im/lark/message-parser.d.ts.map +1 -1
  344. package/dist/im/lark/message-parser.js +7 -0
  345. package/dist/im/lark/message-parser.js.map +1 -1
  346. package/dist/im/lark/overview-card.d.ts +1 -2
  347. package/dist/im/lark/overview-card.d.ts.map +1 -1
  348. package/dist/im/lark/overview-card.js +1 -48
  349. package/dist/im/lark/overview-card.js.map +1 -1
  350. package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
  351. package/dist/im/lark/v3-blocked-card-handler.js +5 -5
  352. package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
  353. package/dist/im/lark/v3-blocked-card.d.ts +1 -0
  354. package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
  355. package/dist/im/lark/v3-blocked-card.js +19 -2
  356. package/dist/im/lark/v3-blocked-card.js.map +1 -1
  357. package/dist/im/lark/v3-distillation-card-handler.d.ts +12 -0
  358. package/dist/im/lark/v3-distillation-card-handler.d.ts.map +1 -0
  359. package/dist/im/lark/v3-distillation-card-handler.js +107 -0
  360. package/dist/im/lark/v3-distillation-card-handler.js.map +1 -0
  361. package/dist/im/lark/v3-distillation-card.d.ts +42 -0
  362. package/dist/im/lark/v3-distillation-card.d.ts.map +1 -0
  363. package/dist/im/lark/v3-distillation-card.js +206 -0
  364. package/dist/im/lark/v3-distillation-card.js.map +1 -0
  365. package/dist/im/lark/v3-gate-card-handler.d.ts +1 -1
  366. package/dist/im/lark/v3-gate-card-handler.d.ts.map +1 -1
  367. package/dist/im/lark/v3-gate-card-handler.js +6 -5
  368. package/dist/im/lark/v3-gate-card-handler.js.map +1 -1
  369. package/dist/im/lark/v3-gate-card.d.ts +8 -1
  370. package/dist/im/lark/v3-gate-card.d.ts.map +1 -1
  371. package/dist/im/lark/v3-gate-card.js +38 -7
  372. package/dist/im/lark/v3-gate-card.js.map +1 -1
  373. package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +1 -1
  374. package/dist/im/lark/v3-loop-grant-card-handler.js +3 -4
  375. package/dist/im/lark/v3-loop-grant-card-handler.js.map +1 -1
  376. package/dist/im/lark/v3-loop-grant-card.js +1 -1
  377. package/dist/im/lark/v3-loop-grant-card.js.map +1 -1
  378. package/dist/im/lark/v3-progress-card-manager.d.ts +79 -0
  379. package/dist/im/lark/v3-progress-card-manager.d.ts.map +1 -0
  380. package/dist/im/lark/v3-progress-card-manager.js +444 -0
  381. package/dist/im/lark/v3-progress-card-manager.js.map +1 -0
  382. package/dist/im/lark/v3-progress-card.d.ts +26 -0
  383. package/dist/im/lark/v3-progress-card.d.ts.map +1 -0
  384. package/dist/im/lark/v3-progress-card.js +211 -0
  385. package/dist/im/lark/v3-progress-card.js.map +1 -0
  386. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +1 -1
  387. package/dist/im/lark/v3-revisit-grant-card-handler.js +3 -4
  388. package/dist/im/lark/v3-revisit-grant-card-handler.js.map +1 -1
  389. package/dist/im/lark/v3-revisit-grant-card.js +1 -1
  390. package/dist/im/lark/v3-revisit-grant-card.js.map +1 -1
  391. package/dist/im/lark/v3-run-save-card-handler.d.ts +12 -0
  392. package/dist/im/lark/v3-run-save-card-handler.d.ts.map +1 -0
  393. package/dist/im/lark/v3-run-save-card-handler.js +160 -0
  394. package/dist/im/lark/v3-run-save-card-handler.js.map +1 -0
  395. package/dist/im/lark/v3-run-save-card.d.ts +38 -0
  396. package/dist/im/lark/v3-run-save-card.d.ts.map +1 -0
  397. package/dist/im/lark/v3-run-save-card.js +125 -0
  398. package/dist/im/lark/v3-run-save-card.js.map +1 -0
  399. package/dist/im/lark/v3-saved-workflow-command.d.ts +36 -0
  400. package/dist/im/lark/v3-saved-workflow-command.d.ts.map +1 -0
  401. package/dist/im/lark/v3-saved-workflow-command.js +186 -0
  402. package/dist/im/lark/v3-saved-workflow-command.js.map +1 -0
  403. package/dist/im/lark/v3-saved-workflow-handler.d.ts +89 -0
  404. package/dist/im/lark/v3-saved-workflow-handler.d.ts.map +1 -0
  405. package/dist/im/lark/v3-saved-workflow-handler.js +212 -0
  406. package/dist/im/lark/v3-saved-workflow-handler.js.map +1 -0
  407. package/dist/im/lark/workflow-slash-command.d.ts +7 -110
  408. package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
  409. package/dist/im/lark/workflow-slash-command.js +16 -230
  410. package/dist/im/lark/workflow-slash-command.js.map +1 -1
  411. package/dist/index-daemon.js +1 -1
  412. package/dist/index-daemon.js.map +1 -1
  413. package/dist/mir-runner.js +11 -15
  414. package/dist/mir-runner.js.map +1 -1
  415. package/dist/mira-runner.js +8 -12
  416. package/dist/mira-runner.js.map +1 -1
  417. package/dist/services/bridge-turn-queue.d.ts +29 -12
  418. package/dist/services/bridge-turn-queue.d.ts.map +1 -1
  419. package/dist/services/bridge-turn-queue.js +59 -23
  420. package/dist/services/bridge-turn-queue.js.map +1 -1
  421. package/dist/services/claude-transcript.d.ts +15 -0
  422. package/dist/services/claude-transcript.d.ts.map +1 -1
  423. package/dist/services/claude-transcript.js +24 -0
  424. package/dist/services/claude-transcript.js.map +1 -1
  425. package/dist/services/codex-bridge-queue.d.ts +13 -2
  426. package/dist/services/codex-bridge-queue.d.ts.map +1 -1
  427. package/dist/services/codex-bridge-queue.js +20 -3
  428. package/dist/services/codex-bridge-queue.js.map +1 -1
  429. package/dist/services/codex-transcript.d.ts +6 -0
  430. package/dist/services/codex-transcript.d.ts.map +1 -1
  431. package/dist/services/codex-transcript.js.map +1 -1
  432. package/dist/services/grok-transcript.d.ts +3 -2
  433. package/dist/services/grok-transcript.d.ts.map +1 -1
  434. package/dist/services/grok-transcript.js +73 -22
  435. package/dist/services/grok-transcript.js.map +1 -1
  436. package/dist/services/hook-runner.d.ts.map +1 -1
  437. package/dist/services/hook-runner.js +26 -3
  438. package/dist/services/hook-runner.js.map +1 -1
  439. package/dist/services/schedule-store.d.ts +37 -0
  440. package/dist/services/schedule-store.d.ts.map +1 -1
  441. package/dist/services/schedule-store.js +259 -141
  442. package/dist/services/schedule-store.js.map +1 -1
  443. package/dist/services/send-policy.d.ts +50 -0
  444. package/dist/services/send-policy.d.ts.map +1 -1
  445. package/dist/services/send-policy.js +65 -0
  446. package/dist/services/send-policy.js.map +1 -1
  447. package/dist/services/session-lifecycle-hooks.d.ts.map +1 -1
  448. package/dist/services/session-lifecycle-hooks.js +12 -0
  449. package/dist/services/session-lifecycle-hooks.js.map +1 -1
  450. package/dist/services/traex-transcript.d.ts +11 -2
  451. package/dist/services/traex-transcript.d.ts.map +1 -1
  452. package/dist/services/traex-transcript.js +142 -8
  453. package/dist/services/traex-transcript.js.map +1 -1
  454. package/dist/services/trigger-types.d.ts +6 -1
  455. package/dist/services/trigger-types.d.ts.map +1 -1
  456. package/dist/services/trigger-types.js.map +1 -1
  457. package/dist/services/turn-terminal-deduper.d.ts +14 -0
  458. package/dist/services/turn-terminal-deduper.d.ts.map +1 -0
  459. package/dist/services/turn-terminal-deduper.js +34 -0
  460. package/dist/services/turn-terminal-deduper.js.map +1 -0
  461. package/dist/services/vc-meeting-action-gate.d.ts +246 -0
  462. package/dist/services/vc-meeting-action-gate.d.ts.map +1 -0
  463. package/dist/services/vc-meeting-action-gate.js +756 -0
  464. package/dist/services/vc-meeting-action-gate.js.map +1 -0
  465. package/dist/services/vc-meeting-action-store.d.ts +222 -0
  466. package/dist/services/vc-meeting-action-store.d.ts.map +1 -0
  467. package/dist/services/vc-meeting-action-store.js +806 -0
  468. package/dist/services/vc-meeting-action-store.js.map +1 -0
  469. package/dist/services/vc-meeting-consumer-isolation.d.ts +27 -0
  470. package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -0
  471. package/dist/services/vc-meeting-consumer-isolation.js +37 -0
  472. package/dist/services/vc-meeting-consumer-isolation.js.map +1 -0
  473. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +72 -0
  474. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -0
  475. package/dist/services/vc-meeting-consumer-profile-bootstrap.js +343 -0
  476. package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -0
  477. package/dist/services/vc-meeting-consumer-profile-store.d.ts +39 -0
  478. package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +1 -0
  479. package/dist/services/vc-meeting-consumer-profile-store.js +190 -0
  480. package/dist/services/vc-meeting-consumer-profile-store.js.map +1 -0
  481. package/dist/services/vc-meeting-daemon-auth.d.ts +29 -0
  482. package/dist/services/vc-meeting-daemon-auth.d.ts.map +1 -0
  483. package/dist/services/vc-meeting-daemon-auth.js +117 -0
  484. package/dist/services/vc-meeting-daemon-auth.js.map +1 -0
  485. package/dist/services/vc-meeting-delivery-feed.d.ts +52 -0
  486. package/dist/services/vc-meeting-delivery-feed.d.ts.map +1 -0
  487. package/dist/services/vc-meeting-delivery-feed.js +231 -0
  488. package/dist/services/vc-meeting-delivery-feed.js.map +1 -0
  489. package/dist/services/vc-meeting-delivery-hub-store.d.ts +213 -0
  490. package/dist/services/vc-meeting-delivery-hub-store.d.ts.map +1 -0
  491. package/dist/services/vc-meeting-delivery-hub-store.js +1230 -0
  492. package/dist/services/vc-meeting-delivery-hub-store.js.map +1 -0
  493. package/dist/services/vc-meeting-delivery-protocol.d.ts +159 -0
  494. package/dist/services/vc-meeting-delivery-protocol.d.ts.map +1 -0
  495. package/dist/services/vc-meeting-delivery-protocol.js +443 -0
  496. package/dist/services/vc-meeting-delivery-protocol.js.map +1 -0
  497. package/dist/services/vc-meeting-delivery-receiver.d.ts +80 -0
  498. package/dist/services/vc-meeting-delivery-receiver.d.ts.map +1 -0
  499. package/dist/services/vc-meeting-delivery-receiver.js +543 -0
  500. package/dist/services/vc-meeting-delivery-receiver.js.map +1 -0
  501. package/dist/services/vc-meeting-delivery-store.d.ts +339 -0
  502. package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -0
  503. package/dist/services/vc-meeting-delivery-store.js +1024 -0
  504. package/dist/services/vc-meeting-delivery-store.js.map +1 -0
  505. package/dist/services/vc-meeting-feed-metadata-store.d.ts +58 -0
  506. package/dist/services/vc-meeting-feed-metadata-store.d.ts.map +1 -0
  507. package/dist/services/vc-meeting-feed-metadata-store.js +356 -0
  508. package/dist/services/vc-meeting-feed-metadata-store.js.map +1 -0
  509. package/dist/services/vc-meeting-im-reply.d.ts +55 -0
  510. package/dist/services/vc-meeting-im-reply.d.ts.map +1 -0
  511. package/dist/services/vc-meeting-im-reply.js +279 -0
  512. package/dist/services/vc-meeting-im-reply.js.map +1 -0
  513. package/dist/services/vc-meeting-im-routing.d.ts +131 -0
  514. package/dist/services/vc-meeting-im-routing.d.ts.map +1 -0
  515. package/dist/services/vc-meeting-im-routing.js +449 -0
  516. package/dist/services/vc-meeting-im-routing.js.map +1 -0
  517. package/dist/services/vc-meeting-listener-message-store.d.ts +23 -0
  518. package/dist/services/vc-meeting-listener-message-store.d.ts.map +1 -0
  519. package/dist/services/vc-meeting-listener-message-store.js +142 -0
  520. package/dist/services/vc-meeting-listener-message-store.js.map +1 -0
  521. package/dist/services/vc-meeting-member-policy.d.ts +37 -0
  522. package/dist/services/vc-meeting-member-policy.d.ts.map +1 -0
  523. package/dist/services/vc-meeting-member-policy.js +102 -0
  524. package/dist/services/vc-meeting-member-policy.js.map +1 -0
  525. package/dist/services/vc-meeting-profile-instructions.d.ts +22 -0
  526. package/dist/services/vc-meeting-profile-instructions.d.ts.map +1 -0
  527. package/dist/services/vc-meeting-profile-instructions.js +64 -0
  528. package/dist/services/vc-meeting-profile-instructions.js.map +1 -0
  529. package/dist/services/vc-meeting-runtime-store.d.ts +63 -0
  530. package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
  531. package/dist/services/vc-meeting-runtime-store.js +605 -116
  532. package/dist/services/vc-meeting-runtime-store.js.map +1 -1
  533. package/dist/services/vc-meeting-send-policy.d.ts +89 -0
  534. package/dist/services/vc-meeting-send-policy.d.ts.map +1 -0
  535. package/dist/services/vc-meeting-send-policy.js +150 -0
  536. package/dist/services/vc-meeting-send-policy.js.map +1 -0
  537. package/dist/services/vc-meeting-terminal-reconciler.d.ts +93 -0
  538. package/dist/services/vc-meeting-terminal-reconciler.d.ts.map +1 -0
  539. package/dist/services/vc-meeting-terminal-reconciler.js +198 -0
  540. package/dist/services/vc-meeting-terminal-reconciler.js.map +1 -0
  541. package/dist/setup/open-platform-automation.d.ts +2 -0
  542. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  543. package/dist/setup/open-platform-automation.js +1 -0
  544. package/dist/setup/open-platform-automation.js.map +1 -1
  545. package/dist/setup/open-platform-outcome.d.ts +50 -0
  546. package/dist/setup/open-platform-outcome.d.ts.map +1 -0
  547. package/dist/setup/open-platform-outcome.js +56 -0
  548. package/dist/setup/open-platform-outcome.js.map +1 -0
  549. package/dist/setup/setup-args.d.ts +7 -2
  550. package/dist/setup/setup-args.d.ts.map +1 -1
  551. package/dist/setup/setup-args.js +21 -5
  552. package/dist/setup/setup-args.js.map +1 -1
  553. package/dist/skills/definitions.d.ts.map +1 -1
  554. package/dist/skills/definitions.js +66 -54
  555. package/dist/skills/definitions.js.map +1 -1
  556. package/dist/skills/injection-mode.d.ts +5 -4
  557. package/dist/skills/injection-mode.d.ts.map +1 -1
  558. package/dist/skills/injection-mode.js +19 -10
  559. package/dist/skills/injection-mode.js.map +1 -1
  560. package/dist/types.d.ts +187 -0
  561. package/dist/types.d.ts.map +1 -1
  562. package/dist/utils/canonical-input-hash.d.ts +5 -0
  563. package/dist/utils/canonical-input-hash.d.ts.map +1 -0
  564. package/dist/utils/canonical-input-hash.js +43 -0
  565. package/dist/utils/canonical-input-hash.js.map +1 -0
  566. package/dist/utils/canonical-json.d.ts +10 -0
  567. package/dist/utils/canonical-json.d.ts.map +1 -0
  568. package/dist/utils/canonical-json.js +23 -0
  569. package/dist/utils/canonical-json.js.map +1 -0
  570. package/dist/utils/child-env.d.ts +1 -1
  571. package/dist/utils/child-env.d.ts.map +1 -1
  572. package/dist/utils/child-env.js +8 -0
  573. package/dist/utils/child-env.js.map +1 -1
  574. package/dist/utils/daemon-discovery.d.ts +4 -0
  575. package/dist/utils/daemon-discovery.d.ts.map +1 -1
  576. package/dist/utils/daemon-discovery.js +12 -6
  577. package/dist/utils/daemon-discovery.js.map +1 -1
  578. package/dist/utils/file-lock.d.ts.map +1 -1
  579. package/dist/utils/file-lock.js +696 -102
  580. package/dist/utils/file-lock.js.map +1 -1
  581. package/dist/utils/fs-durability.d.ts +20 -0
  582. package/dist/utils/fs-durability.d.ts.map +1 -0
  583. package/dist/utils/fs-durability.js +84 -0
  584. package/dist/utils/fs-durability.js.map +1 -0
  585. package/dist/utils/global-install.d.ts +5 -2
  586. package/dist/utils/global-install.d.ts.map +1 -1
  587. package/dist/utils/global-install.js +22 -4
  588. package/dist/utils/global-install.js.map +1 -1
  589. package/dist/utils/herdr-web-history.d.ts +12 -0
  590. package/dist/utils/herdr-web-history.d.ts.map +1 -0
  591. package/dist/utils/herdr-web-history.js +74 -0
  592. package/dist/utils/herdr-web-history.js.map +1 -0
  593. package/dist/utils/herdr-web-terminal-binding.d.ts +39 -0
  594. package/dist/utils/herdr-web-terminal-binding.d.ts.map +1 -0
  595. package/dist/utils/herdr-web-terminal-binding.js +56 -0
  596. package/dist/utils/herdr-web-terminal-binding.js.map +1 -0
  597. package/dist/utils/pending-input-queue.d.ts +30 -1
  598. package/dist/utils/pending-input-queue.d.ts.map +1 -1
  599. package/dist/utils/pending-input-queue.js +45 -5
  600. package/dist/utils/pending-input-queue.js.map +1 -1
  601. package/dist/vc-agent/cards.d.ts +49 -4
  602. package/dist/vc-agent/cards.d.ts.map +1 -1
  603. package/dist/vc-agent/cards.js +460 -70
  604. package/dist/vc-agent/cards.js.map +1 -1
  605. package/dist/vc-agent/polling-source.d.ts +6 -1
  606. package/dist/vc-agent/polling-source.d.ts.map +1 -1
  607. package/dist/vc-agent/polling-source.js +17 -4
  608. package/dist/vc-agent/polling-source.js.map +1 -1
  609. package/dist/worker.js +1333 -283
  610. package/dist/worker.js.map +1 -1
  611. package/dist/workflows/definition.d.ts +28 -35
  612. package/dist/workflows/definition.d.ts.map +1 -1
  613. package/dist/workflows/definition.js +7 -24
  614. package/dist/workflows/definition.js.map +1 -1
  615. package/dist/workflows/events/payloads.d.ts +28 -28
  616. package/dist/workflows/events/replay.d.ts +5 -0
  617. package/dist/workflows/events/replay.d.ts.map +1 -1
  618. package/dist/workflows/events/replay.js +6 -1
  619. package/dist/workflows/events/replay.js.map +1 -1
  620. package/dist/workflows/events/schema.d.ts +663 -663
  621. package/dist/workflows/events/schema.d.ts.map +1 -1
  622. package/dist/workflows/events/schema.js +1 -4
  623. package/dist/workflows/events/schema.js.map +1 -1
  624. package/dist/workflows/hostExecutors/botmux-schedule.d.ts +5 -4
  625. package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -1
  626. package/dist/workflows/hostExecutors/botmux-schedule.js +80 -35
  627. package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -1
  628. package/dist/workflows/hostExecutors/feishu-im.d.ts +3 -3
  629. package/dist/workflows/hostExecutors/feishu-im.d.ts.map +1 -1
  630. package/dist/workflows/hostExecutors/feishu-im.js +3 -3
  631. package/dist/workflows/hostExecutors/feishu-im.js.map +1 -1
  632. package/dist/workflows/hostExecutors/feishu-reply.d.ts +1 -1
  633. package/dist/workflows/hostExecutors/feishu-reply.d.ts.map +1 -1
  634. package/dist/workflows/hostExecutors/feishu-reply.js +1 -1
  635. package/dist/workflows/hostExecutors/feishu-reply.js.map +1 -1
  636. package/dist/workflows/hostExecutors/feishu-send.d.ts +1 -1
  637. package/dist/workflows/hostExecutors/feishu-send.d.ts.map +1 -1
  638. package/dist/workflows/hostExecutors/feishu-send.js +1 -1
  639. package/dist/workflows/hostExecutors/feishu-send.js.map +1 -1
  640. package/dist/workflows/hostExecutors/index.d.ts +0 -1
  641. package/dist/workflows/hostExecutors/index.d.ts.map +1 -1
  642. package/dist/workflows/hostExecutors/index.js +0 -1
  643. package/dist/workflows/hostExecutors/index.js.map +1 -1
  644. package/dist/workflows/hostExecutors/registry.d.ts +1 -1
  645. package/dist/workflows/hostExecutors/registry.d.ts.map +1 -1
  646. package/dist/workflows/hostExecutors/types.d.ts +21 -29
  647. package/dist/workflows/hostExecutors/types.d.ts.map +1 -1
  648. package/dist/workflows/migration/v2-definition-paths.d.ts +3 -0
  649. package/dist/workflows/migration/v2-definition-paths.d.ts.map +1 -0
  650. package/dist/workflows/migration/v2-definition-paths.js +10 -0
  651. package/dist/workflows/migration/v2-definition-paths.js.map +1 -0
  652. package/dist/workflows/migration/v2-ledger.d.ts +138 -0
  653. package/dist/workflows/migration/v2-ledger.d.ts.map +1 -0
  654. package/dist/workflows/migration/v2-ledger.js +599 -0
  655. package/dist/workflows/migration/v2-ledger.js.map +1 -0
  656. package/dist/workflows/migration/v2-migration-service.d.ts +40 -0
  657. package/dist/workflows/migration/v2-migration-service.d.ts.map +1 -0
  658. package/dist/workflows/migration/v2-migration-service.js +454 -0
  659. package/dist/workflows/migration/v2-migration-service.js.map +1 -0
  660. package/dist/workflows/migration/v2-read-only-ids.d.ts +7 -0
  661. package/dist/workflows/migration/v2-read-only-ids.d.ts.map +1 -0
  662. package/dist/workflows/migration/v2-read-only-ids.js +9 -0
  663. package/dist/workflows/migration/v2-read-only-ids.js.map +1 -0
  664. package/dist/workflows/migration/v2-run-archive-schema.d.ts +976 -0
  665. package/dist/workflows/migration/v2-run-archive-schema.d.ts.map +1 -0
  666. package/dist/workflows/migration/v2-run-archive-schema.js +113 -0
  667. package/dist/workflows/migration/v2-run-archive-schema.js.map +1 -0
  668. package/dist/workflows/migration/v2-run-archive.d.ts +92 -0
  669. package/dist/workflows/migration/v2-run-archive.d.ts.map +1 -0
  670. package/dist/workflows/migration/v2-run-archive.js +1220 -0
  671. package/dist/workflows/migration/v2-run-archive.js.map +1 -0
  672. package/dist/workflows/migration/v2-scanner.d.ts +22 -0
  673. package/dist/workflows/migration/v2-scanner.d.ts.map +1 -0
  674. package/dist/workflows/migration/v2-scanner.js +114 -0
  675. package/dist/workflows/migration/v2-scanner.js.map +1 -0
  676. package/dist/workflows/migration/v2-to-v3.d.ts +32 -0
  677. package/dist/workflows/migration/v2-to-v3.d.ts.map +1 -0
  678. package/dist/workflows/migration/v2-to-v3.js +494 -0
  679. package/dist/workflows/migration/v2-to-v3.js.map +1 -0
  680. package/dist/workflows/ops-projection.d.ts.map +1 -1
  681. package/dist/workflows/ops-projection.js +4 -3
  682. package/dist/workflows/ops-projection.js.map +1 -1
  683. package/dist/workflows/shared/idempotency-key.d.ts +19 -0
  684. package/dist/workflows/shared/idempotency-key.d.ts.map +1 -0
  685. package/dist/workflows/shared/idempotency-key.js +23 -0
  686. package/dist/workflows/shared/idempotency-key.js.map +1 -0
  687. package/dist/workflows/{params.d.ts → shared/params.d.ts} +42 -6
  688. package/dist/workflows/shared/params.d.ts.map +1 -0
  689. package/dist/workflows/{params.js → shared/params.js} +91 -4
  690. package/dist/workflows/shared/params.js.map +1 -0
  691. package/dist/workflows/shared/provider-reconciler.d.ts +47 -0
  692. package/dist/workflows/shared/provider-reconciler.d.ts.map +1 -0
  693. package/dist/workflows/shared/provider-reconciler.js +17 -0
  694. package/dist/workflows/shared/provider-reconciler.js.map +1 -0
  695. package/dist/workflows/{spawn-policy.d.ts → shared/sandbox-policy.d.ts} +2 -2
  696. package/dist/workflows/shared/sandbox-policy.d.ts.map +1 -0
  697. package/dist/workflows/{spawn-policy.js → shared/sandbox-policy.js} +1 -1
  698. package/dist/workflows/shared/sandbox-policy.js.map +1 -0
  699. package/dist/workflows/shared/worker-process.d.ts +29 -0
  700. package/dist/workflows/shared/worker-process.d.ts.map +1 -0
  701. package/dist/workflows/shared/worker-process.js +56 -0
  702. package/dist/workflows/shared/worker-process.js.map +1 -0
  703. package/dist/workflows/v3/architect.d.ts.map +1 -1
  704. package/dist/workflows/v3/architect.js +16 -4
  705. package/dist/workflows/v3/architect.js.map +1 -1
  706. package/dist/workflows/v3/attempt-ledger.d.ts +23 -0
  707. package/dist/workflows/v3/attempt-ledger.d.ts.map +1 -0
  708. package/dist/workflows/v3/attempt-ledger.js +74 -0
  709. package/dist/workflows/v3/attempt-ledger.js.map +1 -0
  710. package/dist/workflows/v3/bot-resolve.d.ts +19 -1
  711. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -1
  712. package/dist/workflows/v3/bot-resolve.js +129 -3
  713. package/dist/workflows/v3/bot-resolve.js.map +1 -1
  714. package/dist/workflows/v3/cli-daemon-command-authority.d.ts +59 -0
  715. package/dist/workflows/v3/cli-daemon-command-authority.d.ts.map +1 -0
  716. package/dist/workflows/v3/cli-daemon-command-authority.js +175 -0
  717. package/dist/workflows/v3/cli-daemon-command-authority.js.map +1 -0
  718. package/dist/workflows/v3/cli-run.d.ts +27 -0
  719. package/dist/workflows/v3/cli-run.d.ts.map +1 -1
  720. package/dist/workflows/v3/cli-run.js +113 -29
  721. package/dist/workflows/v3/cli-run.js.map +1 -1
  722. package/dist/workflows/v3/contract.d.ts +16 -16
  723. package/dist/workflows/v3/contract.d.ts.map +1 -1
  724. package/dist/workflows/v3/contract.js +15 -11
  725. package/dist/workflows/v3/contract.js.map +1 -1
  726. package/dist/workflows/v3/daemon-ipc-auth.d.ts +113 -0
  727. package/dist/workflows/v3/daemon-ipc-auth.d.ts.map +1 -0
  728. package/dist/workflows/v3/daemon-ipc-auth.js +294 -0
  729. package/dist/workflows/v3/daemon-ipc-auth.js.map +1 -0
  730. package/dist/workflows/v3/daemon-ipc-body.d.ts +30 -0
  731. package/dist/workflows/v3/daemon-ipc-body.d.ts.map +1 -0
  732. package/dist/workflows/v3/daemon-ipc-body.js +65 -0
  733. package/dist/workflows/v3/daemon-ipc-body.js.map +1 -0
  734. package/dist/workflows/v3/daemon-ipc-client.d.ts +32 -0
  735. package/dist/workflows/v3/daemon-ipc-client.d.ts.map +1 -0
  736. package/dist/workflows/v3/daemon-ipc-client.js +74 -0
  737. package/dist/workflows/v3/daemon-ipc-client.js.map +1 -0
  738. package/dist/workflows/v3/daemon-run.d.ts +87 -2
  739. package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
  740. package/dist/workflows/v3/daemon-run.js +863 -68
  741. package/dist/workflows/v3/daemon-run.js.map +1 -1
  742. package/dist/workflows/v3/dag.d.ts +22 -8
  743. package/dist/workflows/v3/dag.d.ts.map +1 -1
  744. package/dist/workflows/v3/dag.js +214 -22
  745. package/dist/workflows/v3/dag.js.map +1 -1
  746. package/dist/workflows/v3/distillation-compiler.d.ts +36 -0
  747. package/dist/workflows/v3/distillation-compiler.d.ts.map +1 -0
  748. package/dist/workflows/v3/distillation-compiler.js +704 -0
  749. package/dist/workflows/v3/distillation-compiler.js.map +1 -0
  750. package/dist/workflows/v3/distillation-private-root.d.ts +10 -0
  751. package/dist/workflows/v3/distillation-private-root.d.ts.map +1 -0
  752. package/dist/workflows/v3/distillation-private-root.js +34 -0
  753. package/dist/workflows/v3/distillation-private-root.js.map +1 -0
  754. package/dist/workflows/v3/distillation-runner.d.ts +64 -0
  755. package/dist/workflows/v3/distillation-runner.d.ts.map +1 -0
  756. package/dist/workflows/v3/distillation-runner.js +1028 -0
  757. package/dist/workflows/v3/distillation-runner.js.map +1 -0
  758. package/dist/workflows/v3/distillation-schema.d.ts +63 -0
  759. package/dist/workflows/v3/distillation-schema.d.ts.map +1 -0
  760. package/dist/workflows/v3/distillation-schema.js +184 -0
  761. package/dist/workflows/v3/distillation-schema.js.map +1 -0
  762. package/dist/workflows/v3/distillation-service.d.ts +78 -0
  763. package/dist/workflows/v3/distillation-service.d.ts.map +1 -0
  764. package/dist/workflows/v3/distillation-service.js +416 -0
  765. package/dist/workflows/v3/distillation-service.js.map +1 -0
  766. package/dist/workflows/v3/distillation-source.d.ts +35 -0
  767. package/dist/workflows/v3/distillation-source.d.ts.map +1 -0
  768. package/dist/workflows/v3/distillation-source.js +118 -0
  769. package/dist/workflows/v3/distillation-source.js.map +1 -0
  770. package/dist/workflows/v3/distillation-store.d.ts +185 -0
  771. package/dist/workflows/v3/distillation-store.d.ts.map +1 -0
  772. package/dist/workflows/v3/distillation-store.js +1127 -0
  773. package/dist/workflows/v3/distillation-store.js.map +1 -0
  774. package/dist/workflows/v3/drive-lease.d.ts +7 -0
  775. package/dist/workflows/v3/drive-lease.d.ts.map +1 -0
  776. package/dist/workflows/v3/drive-lease.js +10 -0
  777. package/dist/workflows/v3/drive-lease.js.map +1 -0
  778. package/dist/workflows/v3/ephemeral-pool.d.ts +1 -1
  779. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
  780. package/dist/workflows/v3/ephemeral-pool.js +222 -37
  781. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  782. package/dist/workflows/v3/grill-state.d.ts +18 -3
  783. package/dist/workflows/v3/grill-state.d.ts.map +1 -1
  784. package/dist/workflows/v3/grill-state.js +22 -5
  785. package/dist/workflows/v3/grill-state.js.map +1 -1
  786. package/dist/workflows/v3/host-bindings.d.ts +40 -0
  787. package/dist/workflows/v3/host-bindings.d.ts.map +1 -0
  788. package/dist/workflows/v3/host-bindings.js +272 -0
  789. package/dist/workflows/v3/host-bindings.js.map +1 -0
  790. package/dist/workflows/v3/host-effect-ledger.d.ts +22 -0
  791. package/dist/workflows/v3/host-effect-ledger.d.ts.map +1 -0
  792. package/dist/workflows/v3/host-effect-ledger.js +110 -0
  793. package/dist/workflows/v3/host-effect-ledger.js.map +1 -0
  794. package/dist/workflows/v3/host-execution.d.ts +142 -0
  795. package/dist/workflows/v3/host-execution.d.ts.map +1 -0
  796. package/dist/workflows/v3/host-execution.js +424 -0
  797. package/dist/workflows/v3/host-execution.js.map +1 -0
  798. package/dist/workflows/v3/host.d.ts +46 -10
  799. package/dist/workflows/v3/host.d.ts.map +1 -1
  800. package/dist/workflows/v3/host.js +419 -140
  801. package/dist/workflows/v3/host.js.map +1 -1
  802. package/dist/workflows/v3/human-gate.d.ts +19 -1
  803. package/dist/workflows/v3/human-gate.d.ts.map +1 -1
  804. package/dist/workflows/v3/human-gate.js +145 -19
  805. package/dist/workflows/v3/human-gate.js.map +1 -1
  806. package/dist/workflows/v3/journal.d.ts +125 -7
  807. package/dist/workflows/v3/journal.d.ts.map +1 -1
  808. package/dist/workflows/v3/journal.js +154 -38
  809. package/dist/workflows/v3/journal.js.map +1 -1
  810. package/dist/workflows/v3/library-materialize.d.ts +88 -0
  811. package/dist/workflows/v3/library-materialize.d.ts.map +1 -0
  812. package/dist/workflows/v3/library-materialize.js +294 -0
  813. package/dist/workflows/v3/library-materialize.js.map +1 -0
  814. package/dist/workflows/v3/library-schema.d.ts +138 -0
  815. package/dist/workflows/v3/library-schema.d.ts.map +1 -0
  816. package/dist/workflows/v3/library-schema.js +573 -0
  817. package/dist/workflows/v3/library-schema.js.map +1 -0
  818. package/dist/workflows/v3/library-service.d.ts +126 -0
  819. package/dist/workflows/v3/library-service.d.ts.map +1 -0
  820. package/dist/workflows/v3/library-service.js +542 -0
  821. package/dist/workflows/v3/library-service.js.map +1 -0
  822. package/dist/workflows/v3/library-store.d.ts +124 -0
  823. package/dist/workflows/v3/library-store.d.ts.map +1 -0
  824. package/dist/workflows/v3/library-store.js +665 -0
  825. package/dist/workflows/v3/library-store.js.map +1 -0
  826. package/dist/workflows/v3/orchestrator.d.ts +9 -1
  827. package/dist/workflows/v3/orchestrator.d.ts.map +1 -1
  828. package/dist/workflows/v3/orchestrator.js +2 -1
  829. package/dist/workflows/v3/orchestrator.js.map +1 -1
  830. package/dist/workflows/v3/progress-projection.d.ts +99 -0
  831. package/dist/workflows/v3/progress-projection.d.ts.map +1 -0
  832. package/dist/workflows/v3/progress-projection.js +197 -0
  833. package/dist/workflows/v3/progress-projection.js.map +1 -0
  834. package/dist/workflows/v3/run-envelope.d.ts +1279 -0
  835. package/dist/workflows/v3/run-envelope.d.ts.map +1 -0
  836. package/dist/workflows/v3/run-envelope.js +681 -0
  837. package/dist/workflows/v3/run-envelope.js.map +1 -0
  838. package/dist/workflows/v3/runtime.d.ts +39 -7
  839. package/dist/workflows/v3/runtime.d.ts.map +1 -1
  840. package/dist/workflows/v3/runtime.js +1992 -100
  841. package/dist/workflows/v3/runtime.js.map +1 -1
  842. package/dist/workflows/v3/session-relay-client.d.ts +61 -0
  843. package/dist/workflows/v3/session-relay-client.d.ts.map +1 -0
  844. package/dist/workflows/v3/session-relay-client.js +92 -0
  845. package/dist/workflows/v3/session-relay-client.js.map +1 -0
  846. package/dist/workflows/v3/session-relay.d.ts +66 -0
  847. package/dist/workflows/v3/session-relay.d.ts.map +1 -0
  848. package/dist/workflows/v3/session-relay.js +157 -0
  849. package/dist/workflows/v3/session-relay.js.map +1 -0
  850. package/dist/workflows/v3/start-intent.d.ts +8 -0
  851. package/dist/workflows/v3/start-intent.d.ts.map +1 -0
  852. package/dist/workflows/v3/start-intent.js +34 -0
  853. package/dist/workflows/v3/start-intent.js.map +1 -0
  854. package/dist/workflows/v3/state.d.ts +11 -2
  855. package/dist/workflows/v3/state.d.ts.map +1 -1
  856. package/dist/workflows/v3/state.js +182 -10
  857. package/dist/workflows/v3/state.js.map +1 -1
  858. package/dist/workflows/v3/template-bindings.d.ts +22 -0
  859. package/dist/workflows/v3/template-bindings.d.ts.map +1 -0
  860. package/dist/workflows/v3/template-bindings.js +204 -0
  861. package/dist/workflows/v3/template-bindings.js.map +1 -0
  862. package/dist/workflows/v3/worker-fence.d.ts +158 -0
  863. package/dist/workflows/v3/worker-fence.d.ts.map +1 -0
  864. package/dist/workflows/v3/worker-fence.js +685 -0
  865. package/dist/workflows/v3/worker-fence.js.map +1 -0
  866. package/package.json +3 -2
  867. package/dist/core/dashboard-command/workflows.d.ts +0 -20
  868. package/dist/core/dashboard-command/workflows.d.ts.map +0 -1
  869. package/dist/core/dashboard-command/workflows.js +0 -45
  870. package/dist/core/dashboard-command/workflows.js.map +0 -1
  871. package/dist/dashboard/web/legacy-workflow-link.d.ts +0 -2
  872. package/dist/dashboard/web/legacy-workflow-link.d.ts.map +0 -1
  873. package/dist/dashboard/web/legacy-workflow-link.js +0 -12
  874. package/dist/dashboard/web/legacy-workflow-link.js.map +0 -1
  875. package/dist/dashboard/web/legacy-workflow-page.d.ts +0 -3
  876. package/dist/dashboard/web/legacy-workflow-page.d.ts.map +0 -1
  877. package/dist/dashboard/web/legacy-workflow-page.js +0 -717
  878. package/dist/dashboard/web/legacy-workflow-page.js.map +0 -1
  879. package/dist/dashboard/web/workflow-version-switch.d.ts +0 -8
  880. package/dist/dashboard/web/workflow-version-switch.d.ts.map +0 -1
  881. package/dist/dashboard/web/workflow-version-switch.js +0 -9
  882. package/dist/dashboard/web/workflow-version-switch.js.map +0 -1
  883. package/dist/dashboard/web/workflows.d.ts +0 -273
  884. package/dist/dashboard/web/workflows.d.ts.map +0 -1
  885. package/dist/dashboard/web/workflows.js +0 -436
  886. package/dist/dashboard/web/workflows.js.map +0 -1
  887. package/dist/dashboard/workflow-api.d.ts +0 -30
  888. package/dist/dashboard/workflow-api.d.ts.map +0 -1
  889. package/dist/dashboard/workflow-api.js +0 -397
  890. package/dist/dashboard/workflow-api.js.map +0 -1
  891. package/dist/dashboard/workflow-card-model.d.ts +0 -127
  892. package/dist/dashboard/workflow-card-model.d.ts.map +0 -1
  893. package/dist/dashboard/workflow-card-model.js +0 -186
  894. package/dist/dashboard/workflow-card-model.js.map +0 -1
  895. package/dist/dashboard/workflows-action-helpers.d.ts +0 -105
  896. package/dist/dashboard/workflows-action-helpers.d.ts.map +0 -1
  897. package/dist/dashboard/workflows-action-helpers.js +0 -196
  898. package/dist/dashboard/workflows-action-helpers.js.map +0 -1
  899. package/dist/dashboard-web/chunks/bot-defaults-page-7T7DPOV6.js +0 -4
  900. package/dist/dashboard-web/chunks/chunk-IGXYYRYJ.js +0 -1
  901. package/dist/dashboard-web/chunks/chunk-ISOD7VDX.js +0 -1
  902. package/dist/dashboard-web/chunks/chunk-PNK3HQBI.js +0 -37
  903. package/dist/dashboard-web/chunks/chunk-SRIE4MLQ.js +0 -1
  904. package/dist/dashboard-web/chunks/connectors-page-UQ4QBE45.js +0 -1
  905. package/dist/dashboard-web/chunks/legacy-workflow-page-QMC7OZXH.js +0 -2
  906. package/dist/dashboard-web/chunks/sessions-page-NNZIDHZM.js +0 -3
  907. package/dist/dashboard-web/chunks/settings-page-LJIXX5LQ.js +0 -2
  908. package/dist/dashboard-web/chunks/v3-page-YLYVHGKD.js +0 -94
  909. package/dist/dashboard-web/terminal-replay.html +0 -227
  910. package/dist/im/lark/workflow-card-handler.d.ts +0 -51
  911. package/dist/im/lark/workflow-card-handler.d.ts.map +0 -1
  912. package/dist/im/lark/workflow-card-handler.js +0 -163
  913. package/dist/im/lark/workflow-card-handler.js.map +0 -1
  914. package/dist/im/lark/workflow-cards.d.ts +0 -47
  915. package/dist/im/lark/workflow-cards.d.ts.map +0 -1
  916. package/dist/im/lark/workflow-cards.js +0 -231
  917. package/dist/im/lark/workflow-cards.js.map +0 -1
  918. package/dist/im/lark/workflow-progress-card.d.ts +0 -81
  919. package/dist/im/lark/workflow-progress-card.d.ts.map +0 -1
  920. package/dist/im/lark/workflow-progress-card.js +0 -336
  921. package/dist/im/lark/workflow-progress-card.js.map +0 -1
  922. package/dist/im/lark/workflows-card.d.ts +0 -102
  923. package/dist/im/lark/workflows-card.d.ts.map +0 -1
  924. package/dist/im/lark/workflows-card.js +0 -737
  925. package/dist/im/lark/workflows-card.js.map +0 -1
  926. package/dist/workflows/attempt-resume.d.ts +0 -119
  927. package/dist/workflows/attempt-resume.d.ts.map +0 -1
  928. package/dist/workflows/attempt-resume.js +0 -392
  929. package/dist/workflows/attempt-resume.js.map +0 -1
  930. package/dist/workflows/blob.d.ts +0 -27
  931. package/dist/workflows/blob.d.ts.map +0 -1
  932. package/dist/workflows/blob.js +0 -40
  933. package/dist/workflows/blob.js.map +0 -1
  934. package/dist/workflows/cancel-run.d.ts +0 -45
  935. package/dist/workflows/cancel-run.d.ts.map +0 -1
  936. package/dist/workflows/cancel-run.js +0 -99
  937. package/dist/workflows/cancel-run.js.map +0 -1
  938. package/dist/workflows/cancel.d.ts +0 -111
  939. package/dist/workflows/cancel.d.ts.map +0 -1
  940. package/dist/workflows/cancel.js +0 -120
  941. package/dist/workflows/cancel.js.map +0 -1
  942. package/dist/workflows/catalog.d.ts +0 -60
  943. package/dist/workflows/catalog.d.ts.map +0 -1
  944. package/dist/workflows/catalog.js +0 -119
  945. package/dist/workflows/catalog.js.map +0 -1
  946. package/dist/workflows/cold-attach.d.ts +0 -30
  947. package/dist/workflows/cold-attach.d.ts.map +0 -1
  948. package/dist/workflows/cold-attach.js +0 -40
  949. package/dist/workflows/cold-attach.js.map +0 -1
  950. package/dist/workflows/cold-scan.d.ts +0 -21
  951. package/dist/workflows/cold-scan.d.ts.map +0 -1
  952. package/dist/workflows/cold-scan.js +0 -70
  953. package/dist/workflows/cold-scan.js.map +0 -1
  954. package/dist/workflows/daemon-spawn.d.ts +0 -119
  955. package/dist/workflows/daemon-spawn.d.ts.map +0 -1
  956. package/dist/workflows/daemon-spawn.js +0 -564
  957. package/dist/workflows/daemon-spawn.js.map +0 -1
  958. package/dist/workflows/effect-input.d.ts +0 -4
  959. package/dist/workflows/effect-input.d.ts.map +0 -1
  960. package/dist/workflows/effect-input.js +0 -19
  961. package/dist/workflows/effect-input.js.map +0 -1
  962. package/dist/workflows/events/append.d.ts +0 -77
  963. package/dist/workflows/events/append.d.ts.map +0 -1
  964. package/dist/workflows/events/append.js +0 -214
  965. package/dist/workflows/events/append.js.map +0 -1
  966. package/dist/workflows/events/idempotency.d.ts +0 -77
  967. package/dist/workflows/events/idempotency.d.ts.map +0 -1
  968. package/dist/workflows/events/idempotency.js +0 -116
  969. package/dist/workflows/events/idempotency.js.map +0 -1
  970. package/dist/workflows/events/index.d.ts +0 -7
  971. package/dist/workflows/events/index.d.ts.map +0 -1
  972. package/dist/workflows/events/index.js +0 -7
  973. package/dist/workflows/events/index.js.map +0 -1
  974. package/dist/workflows/fanout.d.ts +0 -36
  975. package/dist/workflows/fanout.d.ts.map +0 -1
  976. package/dist/workflows/fanout.js +0 -115
  977. package/dist/workflows/fanout.js.map +0 -1
  978. package/dist/workflows/hostExecutors/protocol.d.ts +0 -42
  979. package/dist/workflows/hostExecutors/protocol.d.ts.map +0 -1
  980. package/dist/workflows/hostExecutors/protocol.js +0 -181
  981. package/dist/workflows/hostExecutors/protocol.js.map +0 -1
  982. package/dist/workflows/loader.d.ts +0 -30
  983. package/dist/workflows/loader.d.ts.map +0 -1
  984. package/dist/workflows/loader.js +0 -84
  985. package/dist/workflows/loader.js.map +0 -1
  986. package/dist/workflows/loop.d.ts +0 -50
  987. package/dist/workflows/loop.d.ts.map +0 -1
  988. package/dist/workflows/loop.js +0 -408
  989. package/dist/workflows/loop.js.map +0 -1
  990. package/dist/workflows/orchestrator.d.ts +0 -171
  991. package/dist/workflows/orchestrator.d.ts.map +0 -1
  992. package/dist/workflows/orchestrator.js +0 -609
  993. package/dist/workflows/orchestrator.js.map +0 -1
  994. package/dist/workflows/output-binding.d.ts +0 -77
  995. package/dist/workflows/output-binding.d.ts.map +0 -1
  996. package/dist/workflows/output-binding.js +0 -329
  997. package/dist/workflows/output-binding.js.map +0 -1
  998. package/dist/workflows/params.d.ts.map +0 -1
  999. package/dist/workflows/params.js.map +0 -1
  1000. package/dist/workflows/resume.d.ts +0 -263
  1001. package/dist/workflows/resume.d.ts.map +0 -1
  1002. package/dist/workflows/resume.js +0 -808
  1003. package/dist/workflows/resume.js.map +0 -1
  1004. package/dist/workflows/run-id.d.ts +0 -2
  1005. package/dist/workflows/run-id.d.ts.map +0 -1
  1006. package/dist/workflows/run-id.js +0 -7
  1007. package/dist/workflows/run-id.js.map +0 -1
  1008. package/dist/workflows/run-init.d.ts +0 -48
  1009. package/dist/workflows/run-init.d.ts.map +0 -1
  1010. package/dist/workflows/run-init.js +0 -100
  1011. package/dist/workflows/run-init.js.map +0 -1
  1012. package/dist/workflows/runs-dir.d.ts +0 -4
  1013. package/dist/workflows/runs-dir.d.ts.map +0 -1
  1014. package/dist/workflows/runs-dir.js +0 -15
  1015. package/dist/workflows/runs-dir.js.map +0 -1
  1016. package/dist/workflows/runtime.d.ts +0 -215
  1017. package/dist/workflows/runtime.d.ts.map +0 -1
  1018. package/dist/workflows/runtime.js +0 -630
  1019. package/dist/workflows/runtime.js.map +0 -1
  1020. package/dist/workflows/spawn-bot.d.ts +0 -165
  1021. package/dist/workflows/spawn-bot.d.ts.map +0 -1
  1022. package/dist/workflows/spawn-bot.js +0 -215
  1023. package/dist/workflows/spawn-bot.js.map +0 -1
  1024. package/dist/workflows/spawn-policy.d.ts.map +0 -1
  1025. package/dist/workflows/spawn-policy.js.map +0 -1
  1026. package/dist/workflows/system.d.ts +0 -49
  1027. package/dist/workflows/system.d.ts.map +0 -1
  1028. package/dist/workflows/system.js +0 -48
  1029. package/dist/workflows/system.js.map +0 -1
  1030. package/dist/workflows/trigger-from-envelope.d.ts +0 -13
  1031. package/dist/workflows/trigger-from-envelope.d.ts.map +0 -1
  1032. package/dist/workflows/trigger-from-envelope.js +0 -68
  1033. package/dist/workflows/trigger-from-envelope.js.map +0 -1
  1034. package/dist/workflows/trigger-run.d.ts +0 -70
  1035. package/dist/workflows/trigger-run.d.ts.map +0 -1
  1036. package/dist/workflows/trigger-run.js +0 -88
  1037. package/dist/workflows/trigger-run.js.map +0 -1
  1038. package/dist/workflows/wait.d.ts +0 -141
  1039. package/dist/workflows/wait.d.ts.map +0 -1
  1040. package/dist/workflows/wait.js +0 -203
  1041. package/dist/workflows/wait.js.map +0 -1
@@ -7,20 +7,26 @@
7
7
  * O_CREAT|O_EXCL atomic, so exactly one waiter wins.
8
8
  *
9
9
  * Stale-break: a holder that crashes mid-section leaves the lock file
10
- * behind with its dead PID. To reclaim it we use the atomic POSIX
11
- * `rename(lock, lock.stale-<random>)`: rename succeeds for exactly ONE
12
- * caller (the source has to exist), so only ONE waiter is the rightful
13
- * stale-breaker. Everyone else gets ENOENT and loops back to acquire.
14
- * This avoids the classic "two waiters both unlink, one deletes the other's
15
- * just-acquired live lock" race that read+unlink-based schemes have.
10
+ * behind with its PID + process-start identity (legacy plain PIDs remain
11
+ * readable). A crash before the payload write leaves an empty lock, reclaimed
12
+ * only after a longer grace. To reclaim either shape we create a generation-
13
+ * scoped hard-link claim. Breaker ownership is an append-only epoch lease:
14
+ * `owner-000...`, `owner-001...`, etc. A dead owner is replaced by atomically
15
+ * creating the next epoch, so a crash at any point can be resumed without
16
+ * reusing or deleting an active owner's pathname. Only the live highest epoch
17
+ * may unlink the public lock, after proving the claim, its pinned observation,
18
+ * and the public path are the same inode. This avoids both the classic delayed
19
+ * pathname-unlink race and the old fixed `.stale-claim` crash wedge.
16
20
  *
17
21
  * Not reentrant. Don't nest `withFileLock` calls on the same path within
18
22
  * the same process — the inner call would wait MAX_WAIT_MS and then time
19
23
  * out. (We could allow reentrancy via PID-equal check, but our callers
20
24
  * don't need it and the equality check would re-open the stale-break race.)
21
25
  */
22
- import { closeSync, openSync, promises as fsp, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
23
- import { randomBytes } from 'node:crypto';
26
+ import { closeSync, constants, fstatSync, linkSync, lstatSync, openSync, promises as fsp, readFileSync, readdirSync, unlinkSync, writeFileSync, } from 'node:fs';
27
+ import { createHash } from 'node:crypto';
28
+ import { basename, dirname, join } from 'node:path';
29
+ import { readLinuxBootIdentity, readProcessStartIdentity } from '../core/session-marker.js';
24
30
  import { logger } from './logger.js';
25
31
  const MAX_WAIT_MS = 5_000;
26
32
  const RETRY_BASE_MS = 25;
@@ -28,7 +34,80 @@ const RETRY_BASE_MS = 25;
28
34
  // Prevents racing on freshly-acquired locks where the holder might not have
29
35
  // finished writing its PID file yet.
30
36
  const MIN_STALE_AGE_MS = 100;
31
- async function isPidAlive(pid) {
37
+ // `open(..., 'wx')` creates the inode before the holder PID is written. A
38
+ // crash in that tiny window leaves an empty/invalid lock. Never steal a live
39
+ // writer's freshly-created file, but do reclaim an invalid holder after a more
40
+ // conservative grace period so crash recovery cannot deadlock forever.
41
+ const MIN_INVALID_HOLDER_STALE_AGE_MS = 1_000;
42
+ const STALE_CLAIM_PREFIX = '.botmux-stale-claim-';
43
+ const STALE_CLAIM_OWNER_SUFFIX = '.owner-';
44
+ const STALE_CLAIM_OWNER_WIDTH = 12;
45
+ let selfProcStartResolved = false;
46
+ let selfProcStart;
47
+ let selfBootIdResolved = false;
48
+ let selfBootId;
49
+ function currentLockHolderPayload() {
50
+ if (!selfProcStartResolved) {
51
+ selfProcStart = readProcessStartIdentity(process.pid);
52
+ selfProcStartResolved = true;
53
+ }
54
+ if (!selfBootIdResolved) {
55
+ selfBootId = readLinuxBootIdentity();
56
+ selfBootIdResolved = true;
57
+ }
58
+ return selfProcStart || selfBootId
59
+ ? JSON.stringify({
60
+ pid: process.pid,
61
+ ...(selfProcStart ? { procStart: selfProcStart } : {}),
62
+ ...(selfBootId ? { bootId: selfBootId } : {}),
63
+ })
64
+ : String(process.pid);
65
+ }
66
+ function parseLockHolder(raw) {
67
+ const text = raw.trim();
68
+ if (!text)
69
+ return undefined;
70
+ if (/^\d+$/.test(text)) {
71
+ const pid = Number(text);
72
+ return Number.isSafeInteger(pid) && pid > 1 ? { pid } : undefined;
73
+ }
74
+ try {
75
+ const value = JSON.parse(text);
76
+ if (!value || typeof value !== 'object' || Array.isArray(value))
77
+ return undefined;
78
+ const record = value;
79
+ if (!Number.isSafeInteger(record.pid) || record.pid <= 1)
80
+ return undefined;
81
+ if (record.procStart !== undefined &&
82
+ (typeof record.procStart !== 'string' || !record.procStart || record.procStart.length > 256))
83
+ return undefined;
84
+ if (record.bootId !== undefined &&
85
+ (typeof record.bootId !== 'string' || !record.bootId || record.bootId.length > 256))
86
+ return undefined;
87
+ return {
88
+ pid: record.pid,
89
+ ...(typeof record.procStart === 'string' ? { procStart: record.procStart } : {}),
90
+ ...(typeof record.bootId === 'string' ? { bootId: record.bootId } : {}),
91
+ };
92
+ }
93
+ catch {
94
+ return undefined;
95
+ }
96
+ }
97
+ async function isHolderAlive(holder) {
98
+ if (holder.bootId) {
99
+ const liveBoot = readLinuxBootIdentity();
100
+ if (liveBoot === undefined)
101
+ return true;
102
+ if (liveBoot !== holder.bootId)
103
+ return false;
104
+ }
105
+ if (holder.procStart) {
106
+ const liveStart = readProcessStartIdentity(holder.pid);
107
+ if (liveStart !== undefined)
108
+ return liveStart === holder.procStart;
109
+ }
110
+ const pid = holder.pid;
32
111
  if (!pid)
33
112
  return false;
34
113
  if (pid === process.pid)
@@ -41,7 +120,20 @@ async function isPidAlive(pid) {
41
120
  return false;
42
121
  }
43
122
  }
44
- function isPidAliveSync(pid) {
123
+ function isHolderAliveSync(holder) {
124
+ if (holder.bootId) {
125
+ const liveBoot = readLinuxBootIdentity();
126
+ if (liveBoot === undefined)
127
+ return true;
128
+ if (liveBoot !== holder.bootId)
129
+ return false;
130
+ }
131
+ if (holder.procStart) {
132
+ const liveStart = readProcessStartIdentity(holder.pid);
133
+ if (liveStart !== undefined)
134
+ return liveStart === holder.procStart;
135
+ }
136
+ const pid = holder.pid;
45
137
  if (!pid)
46
138
  return false;
47
139
  if (pid === process.pid)
@@ -57,76 +149,545 @@ function isPidAliveSync(pid) {
57
149
  function sleepSync(ms) {
58
150
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
59
151
  }
152
+ function sameInode(left, right) {
153
+ return left.dev === right.dev && left.ino === right.ino;
154
+ }
155
+ async function releaseOwnedLock(lockPath, owned) {
156
+ try {
157
+ const current = await fsp.lstat(lockPath);
158
+ if (current.isFile() && !current.isSymbolicLink() && sameInode(current, owned)) {
159
+ await fsp.unlink(lockPath);
160
+ }
161
+ }
162
+ catch (error) {
163
+ if (error.code !== 'ENOENT')
164
+ throw error;
165
+ }
166
+ }
167
+ function releaseOwnedLockSync(lockPath, owned) {
168
+ try {
169
+ const current = lstatSync(lockPath);
170
+ if (current.isFile() && !current.isSymbolicLink() && sameInode(current, owned)) {
171
+ unlinkSync(lockPath);
172
+ }
173
+ }
174
+ catch (error) {
175
+ if (error.code !== 'ENOENT')
176
+ throw error;
177
+ }
178
+ }
179
+ function staleClaimPathFor(lockPath, observed) {
180
+ // link(2) changes ctime, so the generation deliberately uses only identity
181
+ // metadata that remains stable for the inode's entire lifetime. In
182
+ // particular, size and mtime are excluded: a late holder write must not let
183
+ // two breakers elect different claims for the same inode.
184
+ // The digest keeps the sibling filename well below NAME_MAX even when the
185
+ // target filename itself is long.
186
+ const generation = createHash('sha256')
187
+ .update([
188
+ String(observed.dev),
189
+ String(observed.ino),
190
+ String(observed.birthtimeMs),
191
+ ].join('\0'))
192
+ .digest('hex')
193
+ .slice(0, 24);
194
+ return join(dirname(lockPath), `${STALE_CLAIM_PREFIX}${generation}`);
195
+ }
196
+ function staleClaimOwnerPath(claimPath, epoch) {
197
+ return `${claimPath}${STALE_CLAIM_OWNER_SUFFIX}${String(epoch).padStart(STALE_CLAIM_OWNER_WIDTH, '0')}`;
198
+ }
199
+ function parseStaleClaimOwnerEpoch(claimPath, name) {
200
+ const prefix = `${basename(claimPath)}${STALE_CLAIM_OWNER_SUFFIX}`;
201
+ if (!name.startsWith(prefix))
202
+ return undefined;
203
+ const raw = name.slice(prefix.length);
204
+ if (raw.length !== STALE_CLAIM_OWNER_WIDTH || !/^\d+$/.test(raw))
205
+ return undefined;
206
+ const epoch = Number(raw);
207
+ return Number.isSafeInteger(epoch) ? epoch : undefined;
208
+ }
209
+ async function readPinnedHolder(path) {
210
+ const handle = await fsp.open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
211
+ try {
212
+ const before = await handle.stat();
213
+ const raw = await handle.readFile('utf8');
214
+ const after = await handle.stat();
215
+ if (!before.isFile() || !sameInode(before, after) || before.size !== after.size ||
216
+ before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs) {
217
+ throw new Error('file-lock stale-claim owner changed while reading');
218
+ }
219
+ return { holder: parseLockHolder(raw), ageMs: Date.now() - after.mtimeMs, stats: after };
220
+ }
221
+ finally {
222
+ await handle.close();
223
+ }
224
+ }
225
+ function readPinnedHolderSync(path) {
226
+ const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
227
+ try {
228
+ const before = fstatSync(fd);
229
+ const raw = readFileSync(fd, 'utf8');
230
+ const after = fstatSync(fd);
231
+ if (!before.isFile() || !sameInode(before, after) || before.size !== after.size ||
232
+ before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs) {
233
+ throw new Error('file-lock stale-claim owner changed while reading');
234
+ }
235
+ return { holder: parseLockHolder(raw), ageMs: Date.now() - after.mtimeMs, stats: after };
236
+ }
237
+ finally {
238
+ closeSync(fd);
239
+ }
240
+ }
241
+ async function tryAcquireStaleClaimOwnership(claimPath, claimWasCreated, minStaleAgeMs) {
242
+ let claim;
243
+ try {
244
+ claim = await fsp.lstat(claimPath);
245
+ }
246
+ catch (error) {
247
+ if (error.code === 'ENOENT')
248
+ return undefined;
249
+ throw error;
250
+ }
251
+ if (!claim.isFile() || claim.isSymbolicLink()) {
252
+ throw new Error('file-lock stale-claim is not a regular file');
253
+ }
254
+ const ownerEpochs = (await fsp.readdir(dirname(claimPath)))
255
+ .map(name => parseStaleClaimOwnerEpoch(claimPath, name))
256
+ .filter((epoch) => epoch !== undefined)
257
+ .sort((left, right) => left - right);
258
+ let nextEpoch = 0;
259
+ const latestEpoch = ownerEpochs.at(-1);
260
+ if (latestEpoch === undefined) {
261
+ // The creator may still be between link(2) and owner publication. The
262
+ // claim inode's ctime is refreshed by link(2), unlike its old mtime.
263
+ const ownerlessAgeMs = Date.now() - claim.ctimeMs;
264
+ if (!claimWasCreated && ownerlessAgeMs < Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS)) {
265
+ return undefined;
266
+ }
267
+ }
268
+ else {
269
+ let observedOwner;
270
+ try {
271
+ observedOwner = await readPinnedHolder(staleClaimOwnerPath(claimPath, latestEpoch));
272
+ }
273
+ catch (error) {
274
+ if (error.code === 'ENOENT')
275
+ return undefined;
276
+ throw error;
277
+ }
278
+ const staleAge = observedOwner.holder
279
+ ? minStaleAgeMs
280
+ : Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS);
281
+ if (observedOwner.ageMs < staleAge ||
282
+ (observedOwner.holder && await isHolderAlive(observedOwner.holder))) {
283
+ return undefined;
284
+ }
285
+ nextEpoch = latestEpoch + 1;
286
+ if (!Number.isSafeInteger(nextEpoch) || nextEpoch >= 10 ** STALE_CLAIM_OWNER_WIDTH) {
287
+ throw new Error('file-lock stale-claim owner epoch exhausted');
288
+ }
289
+ }
290
+ const ownerPath = staleClaimOwnerPath(claimPath, nextEpoch);
291
+ let handle;
292
+ try {
293
+ handle = await fsp.open(ownerPath, 'wx');
294
+ }
295
+ catch (error) {
296
+ if (error.code === 'EEXIST' ||
297
+ error.code === 'ENOENT')
298
+ return undefined;
299
+ throw error;
300
+ }
301
+ try {
302
+ // As with the public lock, publish the identity without an async gap.
303
+ writeFileSync(handle.fd, currentLockHolderPayload());
304
+ const owner = await handle.stat();
305
+ const currentClaim = await fsp.lstat(claimPath);
306
+ if (!owner.isFile() || !sameInode(currentClaim, claim)) {
307
+ await handle.close();
308
+ try {
309
+ await releaseOwnedLock(ownerPath, owner);
310
+ }
311
+ catch { /* tolerate */ }
312
+ return undefined;
313
+ }
314
+ return { ownerPath, handle };
315
+ }
316
+ catch (error) {
317
+ try {
318
+ await handle.close();
319
+ }
320
+ catch { /* tolerate */ }
321
+ try {
322
+ await fsp.unlink(ownerPath);
323
+ }
324
+ catch { /* tolerate */ }
325
+ if (error.code === 'ENOENT')
326
+ return undefined;
327
+ throw error;
328
+ }
329
+ }
330
+ function tryAcquireStaleClaimOwnershipSync(claimPath, claimWasCreated, minStaleAgeMs) {
331
+ let claim;
332
+ try {
333
+ claim = lstatSync(claimPath);
334
+ }
335
+ catch (error) {
336
+ if (error.code === 'ENOENT')
337
+ return undefined;
338
+ throw error;
339
+ }
340
+ if (!claim.isFile() || claim.isSymbolicLink()) {
341
+ throw new Error('file-lock stale-claim is not a regular file');
342
+ }
343
+ const ownerEpochs = readdirSync(dirname(claimPath))
344
+ .map(name => parseStaleClaimOwnerEpoch(claimPath, name))
345
+ .filter((epoch) => epoch !== undefined)
346
+ .sort((left, right) => left - right);
347
+ let nextEpoch = 0;
348
+ const latestEpoch = ownerEpochs.at(-1);
349
+ if (latestEpoch === undefined) {
350
+ const ownerlessAgeMs = Date.now() - claim.ctimeMs;
351
+ if (!claimWasCreated && ownerlessAgeMs < Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS)) {
352
+ return undefined;
353
+ }
354
+ }
355
+ else {
356
+ let observedOwner;
357
+ try {
358
+ observedOwner = readPinnedHolderSync(staleClaimOwnerPath(claimPath, latestEpoch));
359
+ }
360
+ catch (error) {
361
+ if (error.code === 'ENOENT')
362
+ return undefined;
363
+ throw error;
364
+ }
365
+ const staleAge = observedOwner.holder
366
+ ? minStaleAgeMs
367
+ : Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS);
368
+ if (observedOwner.ageMs < staleAge ||
369
+ (observedOwner.holder && isHolderAliveSync(observedOwner.holder))) {
370
+ return undefined;
371
+ }
372
+ nextEpoch = latestEpoch + 1;
373
+ if (!Number.isSafeInteger(nextEpoch) || nextEpoch >= 10 ** STALE_CLAIM_OWNER_WIDTH) {
374
+ throw new Error('file-lock stale-claim owner epoch exhausted');
375
+ }
376
+ }
377
+ const ownerPath = staleClaimOwnerPath(claimPath, nextEpoch);
378
+ let fd;
379
+ try {
380
+ fd = openSync(ownerPath, 'wx');
381
+ }
382
+ catch (error) {
383
+ if (error.code === 'EEXIST' ||
384
+ error.code === 'ENOENT')
385
+ return undefined;
386
+ throw error;
387
+ }
388
+ try {
389
+ writeFileSync(fd, currentLockHolderPayload());
390
+ const owner = fstatSync(fd);
391
+ const currentClaim = lstatSync(claimPath);
392
+ if (!owner.isFile() || !sameInode(currentClaim, claim)) {
393
+ closeSync(fd);
394
+ try {
395
+ releaseOwnedLockSync(ownerPath, owner);
396
+ }
397
+ catch { /* tolerate */ }
398
+ return undefined;
399
+ }
400
+ return { ownerPath, fd };
401
+ }
402
+ catch (error) {
403
+ try {
404
+ closeSync(fd);
405
+ }
406
+ catch { /* tolerate */ }
407
+ try {
408
+ unlinkSync(ownerPath);
409
+ }
410
+ catch { /* tolerate */ }
411
+ if (error.code === 'ENOENT')
412
+ return undefined;
413
+ throw error;
414
+ }
415
+ }
416
+ async function cleanStaleClaimOwnership(claimPath, ownership) {
417
+ try {
418
+ await ownership.handle.close();
419
+ }
420
+ catch { /* tolerate */ }
421
+ try {
422
+ await fsp.unlink(ownership.ownerPath);
423
+ }
424
+ catch { /* tolerate */ }
425
+ // Older dead epochs are no longer security-relevant after the claim itself
426
+ // is gone. Clean them best-effort; a loser that was already in flight may
427
+ // leave another harmless orphan owner file behind.
428
+ try {
429
+ const names = await fsp.readdir(dirname(claimPath));
430
+ await Promise.all(names.filter(name => parseStaleClaimOwnerEpoch(claimPath, name) !== undefined).map(async (name) => {
431
+ try {
432
+ await fsp.unlink(join(dirname(claimPath), name));
433
+ }
434
+ catch { /* tolerate */ }
435
+ }));
436
+ }
437
+ catch { /* tolerate */ }
438
+ }
439
+ function cleanStaleClaimOwnershipSync(claimPath, ownership) {
440
+ try {
441
+ closeSync(ownership.fd);
442
+ }
443
+ catch { /* tolerate */ }
444
+ try {
445
+ unlinkSync(ownership.ownerPath);
446
+ }
447
+ catch { /* tolerate */ }
448
+ try {
449
+ for (const name of readdirSync(dirname(claimPath))) {
450
+ if (parseStaleClaimOwnerEpoch(claimPath, name) === undefined)
451
+ continue;
452
+ try {
453
+ unlinkSync(join(dirname(claimPath), name));
454
+ }
455
+ catch { /* tolerate */ }
456
+ }
457
+ }
458
+ catch { /* tolerate */ }
459
+ }
460
+ async function resumeStaleBreak(lockPath, claimPath, observed, claimWasCreated, minStaleAgeMs) {
461
+ const ownership = await tryAcquireStaleClaimOwnership(claimPath, claimWasCreated, minStaleAgeMs);
462
+ if (!ownership)
463
+ return false;
464
+ let claimRemoved = false;
465
+ try {
466
+ const claim = await fsp.lstat(claimPath);
467
+ if (!sameInode(claim, observed)) {
468
+ // The public stale inode may have been released and replaced after our
469
+ // observation but before link(2). In that case link(2) pinned the newer
470
+ // inode under the older generation name. Remove only that pinned claim;
471
+ // never touch the public path, which may now be a live holder.
472
+ await releaseOwnedLock(claimPath, claim);
473
+ claimRemoved = true;
474
+ return false;
475
+ }
476
+ let current;
477
+ try {
478
+ current = await readPinnedHolder(lockPath);
479
+ }
480
+ catch (error) {
481
+ if (error.code !== 'ENOENT')
482
+ throw error;
483
+ }
484
+ if (current && sameInode(current.stats, observed)) {
485
+ const staleAge = current.holder
486
+ ? minStaleAgeMs
487
+ : Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS);
488
+ const stillBreakable = current.ageMs >= staleAge &&
489
+ (!current.holder || !(await isHolderAlive(current.holder)));
490
+ if (!stillBreakable) {
491
+ // A once-empty holder may have finished publishing a live identity
492
+ // while the claim was being elected. Withdraw the claim, never steal.
493
+ await releaseOwnedLock(claimPath, claim);
494
+ claimRemoved = true;
495
+ return false;
496
+ }
497
+ await fsp.unlink(lockPath);
498
+ logger.warn(`[file-lock] broke stale lock at ${lockPath} ` +
499
+ `(${current.holder ? `dead/reused pid ${current.holder.pid}` : 'empty/invalid holder'}, age ${current.ageMs}ms)`);
500
+ }
501
+ // If the public path is absent or names a newer inode, a previous owner
502
+ // completed the destructive step and crashed before cleanup. Removing the
503
+ // generation-scoped claim is the replay operation.
504
+ await releaseOwnedLock(claimPath, claim);
505
+ claimRemoved = true;
506
+ return true;
507
+ }
508
+ finally {
509
+ // Only the elected live epoch may remove the claim. If claim cleanup
510
+ // failed, keep owner history so another process can take over after this
511
+ // process dies rather than allowing two concurrent breakers.
512
+ if (claimRemoved)
513
+ await cleanStaleClaimOwnership(claimPath, ownership);
514
+ else {
515
+ try {
516
+ await ownership.handle.close();
517
+ }
518
+ catch { /* tolerate */ }
519
+ // This owner is returning synchronously and cannot later resume an
520
+ // unlink. Withdraw its epoch so the same process does not look like a
521
+ // permanently-live crashed breaker after a transient I/O error.
522
+ try {
523
+ await fsp.unlink(ownership.ownerPath);
524
+ }
525
+ catch { /* tolerate */ }
526
+ }
527
+ }
528
+ }
529
+ function resumeStaleBreakSync(lockPath, claimPath, observed, claimWasCreated, minStaleAgeMs) {
530
+ const ownership = tryAcquireStaleClaimOwnershipSync(claimPath, claimWasCreated, minStaleAgeMs);
531
+ if (!ownership)
532
+ return false;
533
+ let claimRemoved = false;
534
+ try {
535
+ const claim = lstatSync(claimPath);
536
+ if (!sameInode(claim, observed)) {
537
+ releaseOwnedLockSync(claimPath, claim);
538
+ claimRemoved = true;
539
+ return false;
540
+ }
541
+ let current;
542
+ try {
543
+ current = readPinnedHolderSync(lockPath);
544
+ }
545
+ catch (error) {
546
+ if (error.code !== 'ENOENT')
547
+ throw error;
548
+ }
549
+ if (current && sameInode(current.stats, observed)) {
550
+ const staleAge = current.holder
551
+ ? minStaleAgeMs
552
+ : Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS);
553
+ const stillBreakable = current.ageMs >= staleAge &&
554
+ (!current.holder || !isHolderAliveSync(current.holder));
555
+ if (!stillBreakable) {
556
+ releaseOwnedLockSync(claimPath, claim);
557
+ claimRemoved = true;
558
+ return false;
559
+ }
560
+ unlinkSync(lockPath);
561
+ logger.warn(`[file-lock] broke stale lock at ${lockPath} ` +
562
+ `(${current.holder ? `dead/reused pid ${current.holder.pid}` : 'empty/invalid holder'}, age ${current.ageMs}ms)`);
563
+ }
564
+ releaseOwnedLockSync(claimPath, claim);
565
+ claimRemoved = true;
566
+ return true;
567
+ }
568
+ finally {
569
+ if (claimRemoved)
570
+ cleanStaleClaimOwnershipSync(claimPath, ownership);
571
+ else {
572
+ try {
573
+ closeSync(ownership.fd);
574
+ }
575
+ catch { /* tolerate */ }
576
+ try {
577
+ unlinkSync(ownership.ownerPath);
578
+ }
579
+ catch { /* tolerate */ }
580
+ }
581
+ }
582
+ }
60
583
  export async function withFileLock(targetPath, fn, opts = {}) {
61
584
  const maxWaitMs = opts.maxWaitMs ?? MAX_WAIT_MS;
62
585
  const minStaleAgeMs = opts.minStaleAgeMs ?? MIN_STALE_AGE_MS;
63
586
  const lockPath = targetPath + '.lock';
64
587
  const start = Date.now();
588
+ // Resolve the (potentially ps-backed on non-Linux) birth identity before
589
+ // publishing an empty O_EXCL inode. The cached payload makes open→write a
590
+ // tiny synchronous step rather than a seconds-long stale-break window.
591
+ const holderPayload = currentLockHolderPayload();
65
592
  while (true) {
593
+ let fh;
66
594
  try {
67
- const fh = await fsp.open(lockPath, 'wx');
68
- await fh.writeFile(String(process.pid));
69
- await fh.close();
595
+ fh = await fsp.open(lockPath, 'wx');
596
+ }
597
+ catch (error) {
598
+ if (error.code !== 'EEXIST')
599
+ throw error;
600
+ }
601
+ if (fh) {
602
+ let owned;
70
603
  try {
71
- return await fn();
604
+ // Synchronous fd write avoids yielding with a publicly-visible empty
605
+ // lock between O_EXCL creation and holder publication.
606
+ writeFileSync(fh.fd, holderPayload);
607
+ owned = fstatSync(fh.fd);
72
608
  }
73
- finally {
609
+ catch (writeErr) {
74
610
  try {
75
- await fsp.unlink(lockPath);
611
+ await fh.close();
76
612
  }
77
- catch { /* already gone, tolerate */ }
78
- }
79
- }
80
- catch (e) {
81
- if (e.code !== 'EEXIST')
82
- throw e;
83
- // EEXIST: someone holds the lock. Check whether it's stale (dead PID
84
- // + old enough). If so, attempt an atomic rename — POSIX guarantees
85
- // exactly one caller succeeds.
86
- let holder = 0;
87
- let lockAgeMs = Infinity;
88
- try {
89
- const [raw, stat] = await Promise.all([
90
- fsp.readFile(lockPath, 'utf-8'),
91
- fsp.stat(lockPath),
92
- ]);
93
- holder = parseInt(raw, 10) || 0;
94
- lockAgeMs = Date.now() - stat.mtimeMs;
95
- }
96
- catch (re) {
97
- if (re.code === 'ENOENT')
98
- continue; // released between EEXIST and read
99
- throw re;
100
- }
101
- const breakable = holder
102
- && lockAgeMs >= minStaleAgeMs
103
- && !(await isPidAlive(holder));
104
- if (breakable) {
105
- // Atomic rename: only ONE caller wins. The winner is responsible
106
- // for cleaning up the stale carcass; losers get ENOENT and retry
107
- // the lock acquisition on the next iteration.
108
- const stalePath = `${lockPath}.stale.${process.pid}.${randomBytes(4).toString('hex')}`;
109
- try {
110
- await fsp.rename(lockPath, stalePath);
111
- logger.warn(`[file-lock] broke stale lock at ${lockPath} (dead pid ${holder}, age ${lockAgeMs}ms)`);
613
+ catch { /* tolerate */ }
614
+ if (owned) {
112
615
  try {
113
- await fsp.unlink(stalePath);
616
+ await releaseOwnedLock(lockPath, owned);
114
617
  }
115
618
  catch { /* tolerate */ }
116
- continue;
117
619
  }
118
- catch (renameErr) {
119
- if (renameErr.code === 'ENOENT')
120
- continue; // another waiter beat us
121
- throw renameErr;
620
+ throw writeErr;
621
+ }
622
+ try {
623
+ return await fn();
624
+ }
625
+ finally {
626
+ try {
627
+ if (owned)
628
+ await releaseOwnedLock(lockPath, owned);
629
+ }
630
+ catch { /* tolerate */ }
631
+ try {
632
+ await fh.close();
122
633
  }
634
+ catch { /* tolerate */ }
635
+ }
636
+ }
637
+ // EEXIST from open: someone holds the lock. Callback exceptions never
638
+ // reach this branch, even when user code happens to use the same code.
639
+ let holder;
640
+ let lockAgeMs = Infinity;
641
+ let observed;
642
+ try {
643
+ const observedHandle = await fsp.open(lockPath, constants.O_RDONLY | constants.O_NOFOLLOW);
644
+ try {
645
+ const before = await observedHandle.stat();
646
+ const raw = await observedHandle.readFile('utf8');
647
+ const after = await observedHandle.stat();
648
+ if (!before.isFile() || !sameInode(before, after) || before.size !== after.size ||
649
+ before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs)
650
+ continue;
651
+ observed = after;
652
+ holder = parseLockHolder(raw);
653
+ lockAgeMs = Date.now() - after.mtimeMs;
654
+ }
655
+ finally {
656
+ await observedHandle.close();
657
+ }
658
+ }
659
+ catch (re) {
660
+ if (re.code === 'ENOENT')
661
+ continue; // released between EEXIST and read
662
+ throw re;
663
+ }
664
+ const staleAge = holder
665
+ ? minStaleAgeMs
666
+ : Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS);
667
+ const breakable = lockAgeMs >= staleAge &&
668
+ (!holder || !(await isHolderAlive(holder)));
669
+ if (breakable) {
670
+ const stalePath = staleClaimPathFor(lockPath, observed);
671
+ let claimWasCreated = false;
672
+ try {
673
+ await fsp.link(lockPath, stalePath);
674
+ claimWasCreated = true;
123
675
  }
124
- if (Date.now() - start > maxWaitMs) {
125
- throw new Error(`file-lock timeout waiting for ${lockPath} ` +
126
- `(held by pid ${holder || '?'}, age ${Math.round(lockAgeMs)}ms)`);
676
+ catch (claimErr) {
677
+ if (claimErr.code === 'ENOENT')
678
+ continue;
679
+ if (claimErr.code !== 'EEXIST')
680
+ throw claimErr;
127
681
  }
128
- await new Promise(r => setTimeout(r, RETRY_BASE_MS + Math.random() * RETRY_BASE_MS));
682
+ if (await resumeStaleBreak(lockPath, stalePath, observed, claimWasCreated, minStaleAgeMs)) {
683
+ continue;
684
+ }
685
+ }
686
+ if (Date.now() - start > maxWaitMs) {
687
+ throw new Error(`file-lock timeout waiting for ${lockPath} ` +
688
+ `(held by pid ${holder?.pid || '?'}, age ${Math.round(lockAgeMs)}ms)`);
129
689
  }
690
+ await new Promise(r => setTimeout(r, RETRY_BASE_MS + Math.random() * RETRY_BASE_MS));
130
691
  }
131
692
  }
132
693
  export function withFileLockSync(targetPath, fn, opts = {}) {
@@ -134,69 +695,102 @@ export function withFileLockSync(targetPath, fn, opts = {}) {
134
695
  const minStaleAgeMs = opts.minStaleAgeMs ?? MIN_STALE_AGE_MS;
135
696
  const lockPath = targetPath + '.lock';
136
697
  const start = Date.now();
698
+ const holderPayload = currentLockHolderPayload();
137
699
  while (true) {
138
700
  let fd = null;
139
701
  try {
140
702
  fd = openSync(lockPath, 'wx');
141
- writeFileSync(fd, String(process.pid));
142
- closeSync(fd);
143
- fd = null;
703
+ }
704
+ catch (error) {
705
+ if (error.code !== 'EEXIST')
706
+ throw error;
707
+ }
708
+ if (fd !== null) {
709
+ let owned;
710
+ try {
711
+ writeFileSync(fd, holderPayload);
712
+ owned = fstatSync(fd);
713
+ }
714
+ catch (writeError) {
715
+ try {
716
+ closeSync(fd);
717
+ }
718
+ catch { /* tolerate */ }
719
+ if (owned) {
720
+ try {
721
+ releaseOwnedLockSync(lockPath, owned);
722
+ }
723
+ catch { /* tolerate */ }
724
+ }
725
+ throw writeError;
726
+ }
144
727
  try {
145
728
  return fn();
146
729
  }
147
730
  finally {
148
731
  try {
149
- unlinkSync(lockPath);
732
+ if (owned)
733
+ releaseOwnedLockSync(lockPath, owned);
150
734
  }
151
- catch { /* already gone, tolerate */ }
152
- }
153
- }
154
- catch (e) {
155
- if (fd !== null) {
735
+ catch { /* tolerate */ }
156
736
  try {
157
737
  closeSync(fd);
158
738
  }
159
739
  catch { /* tolerate */ }
160
740
  }
161
- if (e.code !== 'EEXIST')
162
- throw e;
163
- let holder = 0;
164
- let lockAgeMs = Infinity;
741
+ }
742
+ let holder;
743
+ let lockAgeMs = Infinity;
744
+ let observed;
745
+ try {
746
+ const observedFd = openSync(lockPath, constants.O_RDONLY | constants.O_NOFOLLOW);
165
747
  try {
166
- holder = parseInt(readFileSync(lockPath, 'utf-8'), 10) || 0;
167
- lockAgeMs = Date.now() - statSync(lockPath).mtimeMs;
168
- }
169
- catch (re) {
170
- if (re.code === 'ENOENT')
748
+ const before = fstatSync(observedFd);
749
+ const raw = readFileSync(observedFd, 'utf-8');
750
+ const after = fstatSync(observedFd);
751
+ if (!before.isFile() || !sameInode(before, after) || before.size !== after.size ||
752
+ before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs)
171
753
  continue;
172
- throw re;
754
+ observed = after;
755
+ holder = parseLockHolder(raw);
756
+ lockAgeMs = Date.now() - after.mtimeMs;
173
757
  }
174
- const breakable = holder
175
- && lockAgeMs >= minStaleAgeMs
176
- && !isPidAliveSync(holder);
177
- if (breakable) {
178
- const stalePath = `${lockPath}.stale.${process.pid}.${randomBytes(4).toString('hex')}`;
179
- try {
180
- renameSync(lockPath, stalePath);
181
- logger.warn(`[file-lock] broke stale lock at ${lockPath} (dead pid ${holder}, age ${lockAgeMs}ms)`);
182
- try {
183
- unlinkSync(stalePath);
184
- }
185
- catch { /* tolerate */ }
758
+ finally {
759
+ closeSync(observedFd);
760
+ }
761
+ }
762
+ catch (re) {
763
+ if (re.code === 'ENOENT')
764
+ continue;
765
+ throw re;
766
+ }
767
+ const staleAge = holder
768
+ ? minStaleAgeMs
769
+ : Math.max(minStaleAgeMs, MIN_INVALID_HOLDER_STALE_AGE_MS);
770
+ const breakable = lockAgeMs >= staleAge &&
771
+ (!holder || !isHolderAliveSync(holder));
772
+ if (breakable) {
773
+ const stalePath = staleClaimPathFor(lockPath, observed);
774
+ let claimWasCreated = false;
775
+ try {
776
+ linkSync(lockPath, stalePath);
777
+ claimWasCreated = true;
778
+ }
779
+ catch (claimErr) {
780
+ if (claimErr.code === 'ENOENT')
186
781
  continue;
187
- }
188
- catch (renameErr) {
189
- if (renameErr.code === 'ENOENT')
190
- continue;
191
- throw renameErr;
192
- }
782
+ if (claimErr.code !== 'EEXIST')
783
+ throw claimErr;
193
784
  }
194
- if (Date.now() - start > maxWaitMs) {
195
- throw new Error(`file-lock timeout waiting for ${lockPath} ` +
196
- `(held by pid ${holder || '?'}, age ${Math.round(lockAgeMs)}ms)`);
785
+ if (resumeStaleBreakSync(lockPath, stalePath, observed, claimWasCreated, minStaleAgeMs)) {
786
+ continue;
197
787
  }
198
- sleepSync(RETRY_BASE_MS + Math.random() * RETRY_BASE_MS);
199
788
  }
789
+ if (Date.now() - start > maxWaitMs) {
790
+ throw new Error(`file-lock timeout waiting for ${lockPath} ` +
791
+ `(held by pid ${holder?.pid || '?'}, age ${Math.round(lockAgeMs)}ms)`);
792
+ }
793
+ sleepSync(RETRY_BASE_MS + Math.random() * RETRY_BASE_MS);
200
794
  }
201
795
  }
202
796
  //# sourceMappingURL=file-lock.js.map