flujo-ai 3.48.1 → 3.48.2

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 (505) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +58 -58
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/react-loadable-manifest.json +2 -2
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  12. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  13. package/.next/server/app/api/approvals/route.js +1 -1
  14. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  15. package/.next/server/app/api/automation-map/route.js +1 -1
  16. package/.next/server/app/api/automation-map/route.js.nft.json +1 -1
  17. package/.next/server/app/api/avatar/[voiceAction]/route.js +1 -1
  18. package/.next/server/app/api/avatar/[voiceAction]/route.js.nft.json +1 -1
  19. package/.next/server/app/api/avatar/connections/route.js +1 -1
  20. package/.next/server/app/api/avatar/connections/route.js.nft.json +1 -1
  21. package/.next/server/app/api/avatar/local-speech/route.js +1 -1
  22. package/.next/server/app/api/avatar/local-speech/route.js.nft.json +1 -1
  23. package/.next/server/app/api/avatar/remote/[voiceAction]/route.js +1 -1
  24. package/.next/server/app/api/avatar/remote/[voiceAction]/route.js.nft.json +1 -1
  25. package/.next/server/app/api/avatar/remote/availability/route.js +1 -1
  26. package/.next/server/app/api/avatar/remote/availability/route.js.nft.json +1 -1
  27. package/.next/server/app/api/avatar/voice/route.js +1 -1
  28. package/.next/server/app/api/avatar/voice/route.js.nft.json +1 -1
  29. package/.next/server/app/api/avatar/work-model/route.js +1 -1
  30. package/.next/server/app/api/avatar/work-model/route.js.nft.json +1 -1
  31. package/.next/server/app/api/avatar/world/route.js +1 -1
  32. package/.next/server/app/api/avatar/world/route.js.nft.json +1 -1
  33. package/.next/server/app/api/backup/route.js +1 -1
  34. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  35. package/.next/server/app/api/browse/route.js +1 -1
  36. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  37. package/.next/server/app/api/bugs/enhance/route.js +1 -1
  38. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  39. package/.next/server/app/api/credential-migration/route.js +1 -1
  40. package/.next/server/app/api/credential-migration/route.js.nft.json +1 -1
  41. package/.next/server/app/api/credential-transfer/restore/route.js +1 -1
  42. package/.next/server/app/api/credential-transfer/restore/route.js.nft.json +1 -1
  43. package/.next/server/app/api/credential-transfer/route.js +1 -1
  44. package/.next/server/app/api/credential-transfer/route.js.nft.json +1 -1
  45. package/.next/server/app/api/cwd/route.js +1 -1
  46. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  47. package/.next/server/app/api/encryption/secure/route.js +1 -1
  48. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  49. package/.next/server/app/api/env/route.js +1 -1
  50. package/.next/server/app/api/env/route.js.nft.json +1 -1
  51. package/.next/server/app/api/factory-observatory/route.js +1 -1
  52. package/.next/server/app/api/factory-observatory/route.js.nft.json +1 -1
  53. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js +1 -1
  54. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/[id]/route.js +1 -1
  56. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  58. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  59. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  60. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/assist/route.js +1 -1
  62. package/.next/server/app/api/flow/assist/route.js.nft.json +1 -1
  63. package/.next/server/app/api/flow/compile/route.js +1 -1
  64. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  65. package/.next/server/app/api/flow/generate/route.js +1 -1
  66. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/generate/visual/route.js +1 -1
  68. package/.next/server/app/api/flow/generate/visual/route.js.nft.json +1 -1
  69. package/.next/server/app/api/flow/generator/route.js +1 -1
  70. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  71. package/.next/server/app/api/flow/improve/route.js +1 -1
  72. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  73. package/.next/server/app/api/flow/model-agent/route.js +1 -1
  74. package/.next/server/app/api/flow/model-agent/route.js.nft.json +1 -1
  75. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  76. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  77. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  78. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  79. package/.next/server/app/api/flow/repair/route.js +1 -1
  80. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  81. package/.next/server/app/api/flow/route.js +1 -1
  82. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  83. package/.next/server/app/api/git/route.js +1 -1
  84. package/.next/server/app/api/git/route.js.nft.json +1 -1
  85. package/.next/server/app/api/harness/[id]/route.js +1 -1
  86. package/.next/server/app/api/harness/[id]/route.js.nft.json +1 -1
  87. package/.next/server/app/api/harness/profiles/route.js +1 -1
  88. package/.next/server/app/api/harness/profiles/route.js.nft.json +1 -1
  89. package/.next/server/app/api/harness/route.js +1 -1
  90. package/.next/server/app/api/harness/route.js.nft.json +1 -1
  91. package/.next/server/app/api/init/route.js +1 -1
  92. package/.next/server/app/api/init/route.js.nft.json +1 -1
  93. package/.next/server/app/api/local-models/capability/route.js +1 -1
  94. package/.next/server/app/api/local-models/capability/route.js.nft.json +1 -1
  95. package/.next/server/app/api/local-models/pull/route.js +1 -1
  96. package/.next/server/app/api/local-models/pull/route.js.nft.json +1 -1
  97. package/.next/server/app/api/local-models/suggest/route.js +1 -1
  98. package/.next/server/app/api/local-models/suggest/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/app-consent/route.js +1 -1
  100. package/.next/server/app/api/mcp/app-consent/route.js.nft.json +1 -1
  101. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  102. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  103. package/.next/server/app/api/mcp/assistant/route.js +1 -1
  104. package/.next/server/app/api/mcp/assistant/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  106. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  107. package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -1
  108. package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -1
  109. package/.next/server/app/api/mcp/flujo/automation/route.js +1 -1
  110. package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -1
  111. package/.next/server/app/api/mcp/flujo/flows/route.js +1 -1
  112. package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -1
  113. package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -1
  114. package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/flujo/resources/route.js +1 -1
  116. package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -1
  117. package/.next/server/app/api/mcp/flujo/servers/route.js +1 -1
  118. package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -1
  119. package/.next/server/app/api/mcp/flujo/skills/route.js +1 -1
  120. package/.next/server/app/api/mcp/flujo/skills/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp/flujo/state/route.js +1 -1
  122. package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -1
  123. package/.next/server/app/api/mcp/flujo/tools/route.js +1 -1
  124. package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -1
  125. package/.next/server/app/api/mcp/model-risk-assessment/route.js +1 -1
  126. package/.next/server/app/api/mcp/model-risk-assessment/route.js.nft.json +1 -1
  127. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  128. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  129. package/.next/server/app/api/mcp/security-review/route.js +1 -1
  130. package/.next/server/app/api/mcp/security-review/route.js.nft.json +1 -1
  131. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js +1 -1
  132. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js.nft.json +1 -1
  133. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  134. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  135. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  136. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  137. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  138. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  139. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  140. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  141. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  142. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  143. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js +1 -1
  144. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js.nft.json +1 -1
  145. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js +1 -1
  146. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js.nft.json +1 -1
  147. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js +1 -1
  148. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js.nft.json +1 -1
  149. package/.next/server/app/api/mcp/servers/[name]/skills/route.js +1 -1
  150. package/.next/server/app/api/mcp/servers/[name]/skills/route.js.nft.json +1 -1
  151. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  152. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  153. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js +1 -1
  154. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js.nft.json +1 -1
  155. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js +1 -1
  156. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js.nft.json +1 -1
  157. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  158. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  159. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js +1 -1
  160. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js.nft.json +1 -1
  161. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  162. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  163. package/.next/server/app/api/mcp/servers/route.js +1 -1
  164. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  165. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  166. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  167. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  168. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  169. package/.next/server/app/api/mcp-registry/route.js +1 -1
  170. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  171. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  172. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  173. package/.next/server/app/api/model/[id]/route.js +1 -1
  174. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/model/allowance/route.js +1 -1
  176. package/.next/server/app/api/model/allowance/route.js.nft.json +1 -1
  177. package/.next/server/app/api/model/provider/route.js +1 -1
  178. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  179. package/.next/server/app/api/model/route.js +1 -1
  180. package/.next/server/app/api/model/route.js.nft.json +1 -1
  181. package/.next/server/app/api/model/test/route.js +1 -1
  182. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  183. package/.next/server/app/api/network-exposure/route.js +1 -1
  184. package/.next/server/app/api/network-exposure/route.js.nft.json +1 -1
  185. package/.next/server/app/api/oauth/callback/route.js +1 -1
  186. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  187. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  188. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  189. package/.next/server/app/api/oauth/reset/route.js +1 -1
  190. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  191. package/.next/server/app/api/operations/status/route.js +1 -1
  192. package/.next/server/app/api/operations/status/route.js.nft.json +1 -1
  193. package/.next/server/app/api/original-owner/route.js +1 -1
  194. package/.next/server/app/api/original-owner/route.js.nft.json +1 -1
  195. package/.next/server/app/api/packages/build/route.js +1 -1
  196. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  197. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  198. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  199. package/.next/server/app/api/packages/install/route.js +1 -1
  200. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  201. package/.next/server/app/api/packages/install/status/route.js +1 -1
  202. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  203. package/.next/server/app/api/packages/installed/route.js +1 -1
  204. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  205. package/.next/server/app/api/packages/resolve/route.js +1 -1
  206. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  207. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  208. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  209. package/.next/server/app/api/packages/search/route.js +1 -1
  210. package/.next/server/app/api/packages/search/route.js.nft.json +1 -1
  211. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  212. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  213. package/.next/server/app/api/persona-recovery/route.js +2 -2
  214. package/.next/server/app/api/persona-recovery/route.js.nft.json +1 -1
  215. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  216. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  217. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  218. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  219. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  220. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  221. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js +1 -1
  222. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js.nft.json +1 -1
  223. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  224. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  225. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  226. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  227. package/.next/server/app/api/planned-executions/route.js +1 -1
  228. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  229. package/.next/server/app/api/reference-search/files/route.js +1 -1
  230. package/.next/server/app/api/reference-search/files/route.js.nft.json +1 -1
  231. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  232. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  233. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  234. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  235. package/.next/server/app/api/registry/auth/route.js +1 -1
  236. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  237. package/.next/server/app/api/registry/feedback/route.js +1 -1
  238. package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -1
  239. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  240. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  241. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  242. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  243. package/.next/server/app/api/registry/packages/route.js +1 -1
  244. package/.next/server/app/api/registry/packages/route.js.nft.json +1 -1
  245. package/.next/server/app/api/registry/publish/route.js +1 -1
  246. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  247. package/.next/server/app/api/registry/settings/route.js +1 -1
  248. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  249. package/.next/server/app/api/restore/route.js +1 -1
  250. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  251. package/.next/server/app/api/runs/active/route.js +1 -1
  252. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  253. package/.next/server/app/api/runtime-environment/route.js +1 -1
  254. package/.next/server/app/api/runtime-environment/route.js.nft.json +1 -1
  255. package/.next/server/app/api/setup/ai-cli/route.js +1 -1
  256. package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -1
  257. package/.next/server/app/api/snapshot/abort/route.js +1 -1
  258. package/.next/server/app/api/snapshot/abort/route.js.nft.json +1 -1
  259. package/.next/server/app/api/snapshot/begin/route.js +1 -1
  260. package/.next/server/app/api/snapshot/begin/route.js.nft.json +1 -1
  261. package/.next/server/app/api/snapshot/download/route.js +1 -1
  262. package/.next/server/app/api/snapshot/download/route.js.nft.json +1 -1
  263. package/.next/server/app/api/snapshot/finalize/route.js +1 -1
  264. package/.next/server/app/api/snapshot/finalize/route.js.nft.json +1 -1
  265. package/.next/server/app/api/snapshot/info/route.js +1 -1
  266. package/.next/server/app/api/snapshot/info/route.js.nft.json +1 -1
  267. package/.next/server/app/api/snapshot/status/route.js +1 -1
  268. package/.next/server/app/api/snapshot/status/route.js.nft.json +1 -1
  269. package/.next/server/app/api/snapshots/cleanup/route.js +1 -1
  270. package/.next/server/app/api/snapshots/cleanup/route.js.nft.json +1 -1
  271. package/.next/server/app/api/snapshots/open-folder/route.js +1 -1
  272. package/.next/server/app/api/snapshots/open-folder/route.js.nft.json +1 -1
  273. package/.next/server/app/api/snapshots/route.js +1 -1
  274. package/.next/server/app/api/snapshots/route.js.nft.json +1 -1
  275. package/.next/server/app/api/statistics/route.js +1 -1
  276. package/.next/server/app/api/statistics/route.js.nft.json +1 -1
  277. package/.next/server/app/api/storage/route.js +1 -1
  278. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  279. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  280. package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -1
  281. package/.next/server/app/api/tickets/[id]/route.js +1 -1
  282. package/.next/server/app/api/tickets/[id]/route.js.nft.json +1 -1
  283. package/.next/server/app/api/tickets/route.js +1 -1
  284. package/.next/server/app/api/tickets/route.js.nft.json +1 -1
  285. package/.next/server/app/api/transcription/route.js +1 -1
  286. package/.next/server/app/api/transcription/route.js.nft.json +1 -1
  287. package/.next/server/app/api/update/route.js +1 -1
  288. package/.next/server/app/api/update/route.js.nft.json +1 -1
  289. package/.next/server/app/api/waves/route.js +1 -1
  290. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  291. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  292. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  293. package/.next/server/app/api/workspaces/route.js +1 -1
  294. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  295. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/mcp/page.js +1 -1
  298. package/.next/server/app/mcp/page.js.nft.json +1 -1
  299. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/mcp-flows/route.js +1 -1
  301. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  302. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  303. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  304. package/.next/server/app/settings/page.js +1 -1
  305. package/.next/server/app/settings/page.js.nft.json +1 -1
  306. package/.next/server/app/v1/chat/completions/route.js +1 -1
  307. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  308. package/.next/server/app/v1/chat/conversation-chains/route.js +1 -1
  309. package/.next/server/app/v1/chat/conversation-chains/route.js.nft.json +1 -1
  310. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -1
  311. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  312. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +1 -1
  313. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  314. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js +1 -1
  315. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js.nft.json +1 -1
  316. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  317. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  318. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js +1 -1
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js.nft.json +1 -1
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  321. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  322. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -1
  323. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  324. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  325. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  326. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
  327. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  328. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js +1 -1
  329. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js.nft.json +1 -1
  330. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js +1 -1
  331. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js.nft.json +1 -1
  332. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js +1 -1
  333. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js.nft.json +1 -1
  334. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js +1 -1
  335. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js.nft.json +1 -1
  336. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -1
  337. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -1
  338. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  339. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  340. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  341. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  342. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +1 -1
  343. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -1
  344. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  345. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  346. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js +1 -1
  347. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js.nft.json +1 -1
  348. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  349. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  350. package/.next/server/app/v1/chat/events/route.js +1 -1
  351. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  352. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js +1 -1
  353. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js.nft.json +1 -1
  354. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js +1 -1
  355. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js.nft.json +1 -1
  356. package/.next/server/app/v1/meetings/[meetingId]/events/route.js +1 -1
  357. package/.next/server/app/v1/meetings/[meetingId]/events/route.js.nft.json +1 -1
  358. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js +1 -1
  359. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js.nft.json +1 -1
  360. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js +1 -1
  361. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js.nft.json +1 -1
  362. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js +1 -1
  363. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js.nft.json +1 -1
  364. package/.next/server/app/v1/meetings/[meetingId]/route.js +1 -1
  365. package/.next/server/app/v1/meetings/[meetingId]/route.js.nft.json +1 -1
  366. package/.next/server/app/v1/meetings/[meetingId]/start/route.js +1 -1
  367. package/.next/server/app/v1/meetings/[meetingId]/start/route.js.nft.json +1 -1
  368. package/.next/server/app/v1/meetings/route.js +1 -1
  369. package/.next/server/app/v1/meetings/route.js.nft.json +1 -1
  370. package/.next/server/app/v1/models/route.js +1 -1
  371. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  372. package/.next/server/app/v1/persona-drafts/[draftId]/route.js +1 -1
  373. package/.next/server/app/v1/persona-drafts/[draftId]/route.js.nft.json +1 -1
  374. package/.next/server/app/v1/persona-drafts/route.js +1 -1
  375. package/.next/server/app/v1/persona-drafts/route.js.nft.json +1 -1
  376. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js +1 -1
  377. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js.nft.json +1 -1
  378. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js +1 -1
  379. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js.nft.json +1 -1
  380. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js +1 -1
  381. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js.nft.json +1 -1
  382. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js +1 -1
  383. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js.nft.json +1 -1
  384. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js +1 -1
  385. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js.nft.json +1 -1
  386. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js +1 -1
  387. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js.nft.json +1 -1
  388. package/.next/server/app/v1/personas/[personaId]/composition/route.js +1 -1
  389. package/.next/server/app/v1/personas/[personaId]/composition/route.js.nft.json +1 -1
  390. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js +1 -1
  391. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js.nft.json +1 -1
  392. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js +1 -1
  393. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js.nft.json +1 -1
  394. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js +1 -1
  395. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js.nft.json +1 -1
  396. package/.next/server/app/v1/personas/[personaId]/export/route.js +1 -1
  397. package/.next/server/app/v1/personas/[personaId]/export/route.js.nft.json +1 -1
  398. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js +1 -1
  399. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js.nft.json +1 -1
  400. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js +1 -1
  401. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js.nft.json +1 -1
  402. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js +1 -1
  403. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js.nft.json +1 -1
  404. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js +1 -1
  405. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js.nft.json +1 -1
  406. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js +1 -1
  407. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js.nft.json +1 -1
  408. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js +1 -1
  409. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js.nft.json +1 -1
  410. package/.next/server/app/v1/personas/[personaId]/improvements/route.js +1 -1
  411. package/.next/server/app/v1/personas/[personaId]/improvements/route.js.nft.json +1 -1
  412. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js +1 -1
  413. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js.nft.json +1 -1
  414. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js +1 -1
  415. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js.nft.json +1 -1
  416. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js +1 -1
  417. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js.nft.json +1 -1
  418. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js +1 -1
  419. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js.nft.json +1 -1
  420. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js +1 -1
  421. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js.nft.json +1 -1
  422. package/.next/server/app/v1/personas/[personaId]/memories/route.js +1 -1
  423. package/.next/server/app/v1/personas/[personaId]/memories/route.js.nft.json +1 -1
  424. package/.next/server/app/v1/personas/[personaId]/route.js +1 -1
  425. package/.next/server/app/v1/personas/[personaId]/route.js.nft.json +1 -1
  426. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js +1 -1
  427. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js.nft.json +1 -1
  428. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js +1 -1
  429. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js.nft.json +1 -1
  430. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js +1 -1
  431. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js.nft.json +1 -1
  432. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js +1 -1
  433. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js.nft.json +1 -1
  434. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js +1 -1
  435. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js.nft.json +1 -1
  436. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js +1 -1
  437. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js.nft.json +1 -1
  438. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js +1 -1
  439. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js.nft.json +1 -1
  440. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js +1 -1
  441. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js.nft.json +1 -1
  442. package/.next/server/app/v1/personas/[personaId]/work-items/route.js +1 -1
  443. package/.next/server/app/v1/personas/[personaId]/work-items/route.js.nft.json +1 -1
  444. package/.next/server/app/v1/personas/readiness/route.js +1 -1
  445. package/.next/server/app/v1/personas/readiness/route.js.nft.json +1 -1
  446. package/.next/server/app/v1/personas/route.js +1 -1
  447. package/.next/server/app/v1/personas/route.js.nft.json +1 -1
  448. package/.next/server/app/v1/personas/settings-options/route.js +1 -1
  449. package/.next/server/app/v1/personas/settings-options/route.js.nft.json +1 -1
  450. package/.next/server/app/v1/personas/summary/route.js +1 -1
  451. package/.next/server/app/v1/personas/summary/route.js.nft.json +1 -1
  452. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js +1 -1
  453. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js.nft.json +1 -1
  454. package/.next/server/app/v1/roles/[roleId]/impact/route.js +1 -1
  455. package/.next/server/app/v1/roles/[roleId]/impact/route.js.nft.json +1 -1
  456. package/.next/server/app/v1/roles/[roleId]/restore/route.js +1 -1
  457. package/.next/server/app/v1/roles/[roleId]/restore/route.js.nft.json +1 -1
  458. package/.next/server/app/v1/roles/[roleId]/rollback/route.js +1 -1
  459. package/.next/server/app/v1/roles/[roleId]/rollback/route.js.nft.json +1 -1
  460. package/.next/server/app/v1/roles/[roleId]/route.js +1 -1
  461. package/.next/server/app/v1/roles/[roleId]/route.js.nft.json +1 -1
  462. package/.next/server/app/v1/roles/[roleId]/versions/route.js +1 -1
  463. package/.next/server/app/v1/roles/[roleId]/versions/route.js.nft.json +1 -1
  464. package/.next/server/app/v1/roles/route.js +1 -1
  465. package/.next/server/app/v1/roles/route.js.nft.json +1 -1
  466. package/.next/server/app/v1/tasks/[taskId]/route.js +1 -1
  467. package/.next/server/app/v1/tasks/[taskId]/route.js.nft.json +1 -1
  468. package/.next/server/app-paths-manifest.json +58 -58
  469. package/.next/server/chunks/{89291.js → 11417.js} +4 -4
  470. package/.next/server/chunks/14130.js +1 -1
  471. package/.next/server/chunks/21392.js +4 -4
  472. package/.next/server/chunks/23167.js +1 -1
  473. package/.next/server/chunks/30775.js +1 -1
  474. package/.next/server/chunks/30953.js +2 -2
  475. package/.next/server/chunks/36362.js +2 -2
  476. package/.next/server/chunks/42265.js +2 -2
  477. package/.next/server/chunks/52152.js +2 -2
  478. package/.next/server/chunks/57085.js +1 -1
  479. package/.next/server/chunks/73633.js +1 -1
  480. package/.next/server/chunks/74050.js +1 -1
  481. package/.next/server/chunks/{28644.js → 75650.js} +2 -2
  482. package/.next/server/chunks/77297.js +6 -6
  483. package/.next/server/chunks/81306.js +1 -1
  484. package/.next/server/chunks/82300.js +2 -2
  485. package/.next/server/chunks/83718.js +1 -1
  486. package/.next/server/chunks/87068.js +1 -1
  487. package/.next/server/chunks/91784.js +3 -3
  488. package/.next/server/chunks/97235.js +1 -1
  489. package/.next/server/middleware-build-manifest.js +1 -1
  490. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  491. package/.next/server/pages/500.html +1 -1
  492. package/.next/server/preview-props.json +3 -3
  493. package/.next/server/server-reference-manifest.js +1 -1
  494. package/.next/server/server-reference-manifest.json +1 -1
  495. package/.next/static/chunks/{2103-e3cdcdaf6b6e91fe.js → 2103-294c66f113cd67a5.js} +1 -1
  496. package/.next/static/chunks/{webpack-5157aab6954f4d2c.js → webpack-fdea59d2034fe7c1.js} +1 -1
  497. package/.next/trace-build +1 -1
  498. package/README.md +1 -1
  499. package/mcp-servers/bash/package.json +1 -1
  500. package/mcp-servers/browser/package.json +1 -1
  501. package/mcp-servers/filesystem/package.json +1 -1
  502. package/mcp-servers/flujo/package.json +1 -1
  503. package/package.json +5 -5
  504. /package/.next/static/{ge1_acWolH72coqTUewza → TsqR1zGslz8fIpBz6QVy_}/_buildManifest.js +0 -0
  505. /package/.next/static/{ge1_acWolH72coqTUewza → TsqR1zGslz8fIpBz6QVy_}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
- "use strict";exports.id=42265,exports.ids=[22817,24375,42265,45198,67579,89960],exports.modules={34446:(a,b,c)=>{var d=c(351353);c(596654),c(270389),c(662457),c(269674),c(535843),(0,d.h)("backend/services/enduringAgents/memoryLifecycle")},107319:(a,b,c)=>{let d;c.d(b,{HG:()=>t,Hy:()=>v,Pp:()=>y,Sw:()=>u,bk:()=>x,s1:()=>z,tl:()=>A,xC:()=>B});var e=c(629021),f=c(333873),g=c.n(f),h=c(975128),i=c(351353),j=c(581991),k=c(71392);let l=(0,i.h)("backend/services/scheduler/runHistory"),m="scheduler-terminal-publication-outbox",n="scheduler_terminal_publications";async function o(){let a=await (0,h.loadItem)(m,{version:1,pending:{}});return{version:1,pending:a?.version===1&&a.pending&&"object"==typeof a.pending?{...a.pending}:{}}}let p=a=>`planned-execution-runs/${a}`,q=new Map;function r(a,b){if(a.personaId!==b)return{record:a,changed:!1};let c={...a,personaArchived:!0};return delete c.personaId,delete c.activityId,delete c.behaviorRevisionId,{record:c,changed:!0}}async function s(){let a;if(d)return[...new Set(d)].sort();let b=g().join((0,j.getWorkspaceDataDir)(),"db","planned-execution-runs");try{a=await e.promises.readdir(b)}catch(a){if("ENOENT"===a.code)return[];throw a}let c=[];for(let b of a.sort()){if(!b.endsWith(".json")||b.includes(".tmp.")||b.includes(".corrupted.")||b.endsWith(".bak"))continue;let a=b.slice(0,-5);(0,h.ln)(a),c.push(a)}return c}async function t(a){return(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async b=>{let c={histories:0,records:0,terminalReceipts:0};for(let d of(await s())){let e=await (0,h.loadItem)(p(d),[]);if(!Array.isArray(e))throw Error(`Run history ${d} is not an array.`);let f=!1,g=e.map(b=>{let d=r(b,a);return d.changed&&(f=!0,c.records+=1),d.record});f&&(await b.assertOwned(),await (0,h.VH)(p(d),g),c.histories+=1)}let d=await o(),e=!1;for(let[b,f]of Object.entries(d.pending)){let g=r(f.record,a);g.changed&&(d.pending[b]={...f,record:g.record},e=!0,c.terminalReceipts+=1)}return e&&(await b.assertOwned(),await (0,h.VH)(m,d)),c}))()}async function u(a){try{return await (0,h.loadItem)(p(a),[])}catch(b){return l.error(`Failed to load run history for ${a}:`,b),[]}}async function v(a,b){let c=(0,j.workspaceCacheKey)(a),d=q.get(c)??Promise.resolve(),e=(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async c=>{let d=await u(a);d.push(b);let e=d.slice(-100);await c.assertOwned(),await (0,h.VH)(p(a),e)})),f=d.catch(()=>{}).then(e);q.set(c,f);try{await f}finally{q.get(c)===f&&q.delete(c)}}function w(a){return"completed"===a.status||"error"===a.status}async function x(a,b,c){let d,e=(0,j.workspaceCacheKey)(a),f=q.get(e)??Promise.resolve(),g=(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async e=>{let f=await u(a),g=f.findIndex(a=>a.runId===b.runId),i=g<0?void 0:f[g];if(i&&w(i)){d={record:i,inserted:!1,firstTerminalTransition:!1};return}let j=w(b);if(j&&c){if(c.executionId!==a||c.runId!==b.runId||c.event.runId!==b.runId||c.record.runId!==b.runId||!w(c.record)||JSON.stringify(c.record)!==JSON.stringify(b)||!c.event.deliveryId)throw Error(`Invalid terminal publication receipt for ${b.runId}.`);let d=await o(),f=d.pending[c.id];if(f&&JSON.stringify(f)!==JSON.stringify(c))throw Error(`Terminal publication receipt ${c.id} conflicts.`);f||(d.pending[c.id]=c,await e.assertOwned(),await (0,h.VH)(m,d))}g<0?f.push(b):f[g]=b,await e.assertOwned(),await (0,h.VH)(p(a),g<0?f.slice(-100):f),d={record:b,inserted:g<0,firstTerminalTransition:j}})),i=f.catch(()=>{}).then(g);q.set(e,i);try{await i}finally{q.get(e)===i&&q.delete(e)}if(!d)throw Error(`Stable run history upsert did not settle for ${b.runId}.`);return d}async function y(a){return(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async b=>{let c=await o(),d=Object.values(c.pending).sort((a,b)=>a.createdAt.localeCompare(b.createdAt)),e=0;for(let f of d){let d=await u(f.executionId);if(!d.find(a=>a.runId===f.runId&&w(a))){if(f.record.runId!==f.runId||!w(f.record)||f.event.runId!==f.runId)throw Error(`Corrupt terminal publication receipt ${f.id}.`);let a=d.findIndex(a=>a.runId===f.runId);a<0?d.push(f.record):d[a]=f.record,await b.assertOwned(),await (0,h.VH)(p(f.executionId),d.slice(-100))}await a(f.event),delete c.pending[f.id],await b.assertOwned(),await (0,h.VH)(m,c),e+=1}return e}))()}async function z(a,b,c){let d=(0,j.workspaceCacheKey)(a),e=q.get(d)??Promise.resolve(),f=null,g=(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async d=>{let e=await u(a),g=e.findIndex(a=>a.runId===b);if(g<0){f=null;return}e[g]={...e[g],...c,runId:b},f=e[g],await d.assertOwned(),await (0,h.VH)(p(a),e)})),i=e.catch(()=>{}).then(g);q.set(d,i);try{await i}finally{q.get(d)===i&&q.delete(d)}return f}async function A(a){let b=await u(a);return b.length>0?b[b.length-1]:null}async function B(a){await (0,k._T)(n,async b=>{let c=await o(),d=!1;for(let[b,e]of Object.entries(c.pending))e.executionId===a&&(delete c.pending[b],d=!0);d&&(await b.assertOwned(),await (0,h.VH)(m,c)),await b.assertOwned(),await (0,h.N2)(p(a))})}},128189:(a,b,c)=>{c.d(b,{O9:()=>e,Z9:()=>f,uq:()=>g,wv:()=>h});var d=c(150930);function e(a,b){try{let c=new d.l4(a,{timezone:b,paused:!0});return c.nextRun(),c.stop(),{valid:!0}}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Invalid cron pattern"}}}function f(a,b,c){let e=new d.l4(a,{timezone:b,paused:!0});try{return e.nextRuns(c).map(a=>a.toISOString())}finally{e.stop()}}function g(a,b,c=Date.now()){let e=new d.l4(a.cron,{timezone:a.timezone,paused:!0});try{let a=e.nextRun(new Date(b));return null!==a&&a.getTime()<=c?a:null}finally{e.stop()}}function h(a,b){let c=null,e=new d.l4(a.cron,{timezone:a.timezone,unref:!0},a=>{let d=c??a.currentRun()??new Date;return c=a.nextRun(),b(d)});return c=e.nextRun(),{dispose:()=>e.stop(),nextRun:()=>e.nextRun()?.toISOString()??null}}},152348:(a,b,c)=>{c.d(b,{Gk:()=>p,KC:()=>m,nq:()=>o,pZ:()=>n,sp:()=>l});var d=c(581991),e=c(71392),f=c(299883),g=c(663905),h=c(975128);let i="scheduler-file-watch-intents",j="scheduler_file_watch_intents";async function k(){let a=await (0,h.loadItem)(i,{version:1,pending:{}});return{version:1,pending:a?.version===1&&a.pending&&"object"==typeof a.pending?{...a.pending}:{}}}async function l(a){return(0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await k(),d=c.pending[a.id];if(d){if((0,g.dj)(d)!==(0,g.dj)(a))throw Error(`File-watch intent ${a.id} conflicts.`);return d}return c.pending[a.id]=a,await b.assertOwned(),await (0,h.VH)(i,c),a}))()}async function m(){return Object.values((await k()).pending).sort((a,b)=>a.createdAt.localeCompare(b.createdAt))}async function n(a){await (0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await k();a in c.pending&&(delete c.pending[a],await b.assertOwned(),await (0,h.VH)(i,c))}))()}async function o(a,b){await (0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async c=>{let d=await k(),e=!1;for(let[c,f]of Object.entries(d.pending))f.execution.id===a&&f.execution.generationId===b&&(delete d.pending[c],e=!0);e&&(await c.assertOwned(),await (0,h.VH)(i,d))}))()}async function p(a){return f.Qy.parse(a),(0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await k(),d=0;for(let[b,e]of Object.entries(c.pending))e.execution.personaId===a&&(delete c.pending[b],d+=1);return 0===d?0:(await b.assertOwned(),await (0,h.VH)(i,c),d)}))()}},155167:(a,b,c)=>{c.d(b,{A1:()=>k,Je:()=>i,Jl:()=>j,qq:()=>f,vV:()=>g});var d=c(455511);function e(a){return JSON.stringify(function a(b){if(Array.isArray(b))return b.map(a);if(null!==b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b)),d={};for(let[b,e]of c)d[b]=a(e);return d}return b}(a))}function f(a){return(0,d.createHash)("sha256").update(e(a)??"undefined").digest("hex")}async function g(a){let{status:b,pendingState:c,priorFailures:d,saveState:e}=a;if("completed"===b||!0===a.conditionRejected)return await e({...c,...d>0?{pendingFailures:0}:{}}),{giveUpError:null};if("skipped"===b)return{giveUpError:null};let f=d+1;return f>=3?(await e({...c,pendingFailures:0}),{giveUpError:"Detected a change but the flow failed to process it 3\xd7 — skipping it to avoid a loop"}):(await e({pendingFailures:f}),{giveUpError:null})}function h(a,b){if(!b)return a;let c=a;for(let a of b.split(".")){if(null==c||"object"!=typeof c)return;c=c[a]}return c}function i(a){let b=e(a)??"";return b.length<=8192?a:{truncated:!0,note:`Result too large to include fully (${b.length} chars); this is a preview.`,preview:b.slice(0,8192)}}function j(a,b){let c=f(a);return b.lastHash?b.lastHash===c?{fire:!1,newState:{}}:{fire:!0,summary:"Tool result changed",context:{result:i(a)},newState:{},pendingState:{lastHash:c}}:{fire:!1,newState:{lastHash:c}}}function k(a,b,c,d){let e=h(a,b);if(!Array.isArray(e))return{fire:!1,newState:{},error:`"${b||"(root)"}" did not resolve to a list in the tool result`};let g=e.map(a=>{let b=h(a,c);return{id:null==b||"object"==typeof b?`hash:${f(a)}`:String(b),item:a}}),j=d.seenIds,k=g.map(({id:a})=>a),l=(a,b)=>{let c=[...a??[]],d=new Set(c);for(let a of b)d.has(a)||(d.add(a),c.push(a));return c.slice(-1e3)};if(!j)return{fire:!1,newState:{seenIds:l(void 0,k)}};let m=new Set(j),n=g.filter(({id:a})=>!m.has(a));if(0===n.length)return{fire:!1,newState:{}};let o=n.slice(0,50);return{fire:!0,summary:1===n.length?"1 new item":`${n.length} new items`,context:{newItems:i(o.map(({item:a})=>a)),...n.length>50?{omitted:n.length-50}:{}},newState:{},pendingState:{seenIds:l(j,o.map(({id:a})=>a))}}}},166240:(a,b,c)=>{c(455511),c(596654);var d=c(351353);c(581991),c(554579),c(530775),c(407272),c(891261),c(71392),c(820669),c(662457),(0,d.h)("enduringAgents/personaRuntimeRetentionRollout")},259760:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z:()=>M});var e=c(16698),f=c(682218),g=c(960817),h=c(763509),i=c(455511),j=c(975128),k=c(164986),l=c(389395),m=c(351353),n=c(687907),o=c(121798),p=c(71392),q=c(581991),r=c(128189),s=c(335951),t=c(678819),u=c(475650),v=c(872374),w=c(514640),x=c(633069),y=c(107319),z=c(531243),A=c(745543),B=c(152348),C=c(299883),D=c(784789),E=c(966733),F=c(487361),G=c(522734),H=a([o]);o=(H.then?(await H)():H)[0];let N=(0,m.h)("backend/services/scheduler/index"),O={version:1,paused:!1,executions:[]},P="scheduler_planned_executions",Q="Persona planned execution ownership metadata is incomplete";function I(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function J(a){let b={...a};return delete b.folder,delete b.updatedAt,JSON.stringify(b,(a,b)=>b&&"object"==typeof b&&!Array.isArray(b)?Object.fromEntries(Object.entries(b).sort(([a],[b])=>a.localeCompare(b))):b)}function K(a){return!!(a&&(0,l.Vw)(a)&&!a.personaRetired&&!a.personaArchived&&(!C.Qy.safeParse(a.personaId).success||I(a,"behaviorSlotKey")&&!C.BI.safeParse(a.behaviorSlotKey).success||I(a,"personaRetired")&&!0!==a.personaRetired||I(a,"personaArchived")&&!0!==a.personaArchived))}function L(a){return Object.prototype.hasOwnProperty.call(a,"personaId")&&void 0===a.personaId&&delete a.personaId,Object.prototype.hasOwnProperty.call(a,"behaviorSlotKey")&&void 0===a.behaviorSlotKey&&delete a.behaviorSlotKey,a}class R{static{this.MAX_QUEUE_DEPTH=50}inWorkspace(a){return(0,q.runWithWorkspace)(this.workspace,a)}bindToWorkspace(a){return(...b)=>this.inWorkspace(()=>a(...b))}async start(){this.started||(this.started=!0,N.info("Starting scheduler"),await this.reconcile(),(0,F.ye)()||(await this.drainTerminalPublications(),await this.reconcileDurableFileWatchIntents(!1),await this.reconcilePersonaSchedulerProjections(!1)))}reconcile(){return this.queueReconcile()}reconcileCommitted(a){return this.queueReconcile(Object.freeze({id:a.id,configuration:J(a)}))}queueReconcile(a){let b=this.reconcileChain.catch(()=>{}).then(async()=>(await (0,g.QO)(),this.serviceResource.runInAsyncScope(()=>this.inWorkspace(()=>this.doReconcile(a)))));return this.reconcileChain=b,b}async doReconcile(a){let b=await this.loadFile();if(a){let c=b.executions.find(b=>b.id===a.id);if(!c||J(c)!==a.configuration)throw Error("Committed schedule changed before service admission")}if(this.pausedCache=b.paused,(0,F.ye)())for(let a of(this.workerRecoveryStatuses.clear(),b.executions)){let c=await this.refreshWorkerRecoveryStatus(a,b.paused);c&&this.workerRecoveryStatuses.set(a.id,c)}let c=new Map(b.executions.filter(a=>!b.paused&&a.enabled&&!a.personaRetired&&!a.personaArchived&&!K(a)&&(!(0,F.ye)()||this.workerRecoveryStatuses.get(a.id)?.eligible===!0)).map(a=>[a.id,J(a)]));for(let[a,b]of this.armed)if(c.get(a)!==this.armedConfigurations.get(a)){try{b.dispose()}catch(b){N.warn(`Failed to dispose trigger for ${a}:`,b)}this.armed.delete(a),this.armedConfigurations.delete(a)}if(b.paused)return void N.info("Scheduler is paused — nothing armed");let d=[];for(let a of b.executions)if((!(0,F.ye)()||this.workerRecoveryStatuses.get(a.id)?.eligible)&&a.enabled&&!a.personaRetired&&!a.personaArchived){if(K(a)){this.lastTriggerErrors.set(a.id,Q),N.error(`Refusing to arm Persona-controlled execution "${a.name}" (${a.id}): `+Q);continue}if(this.armed.has(a.id)){"schedule"===a.trigger.type&&d.push(this.initializeSchedule(a,Date.now()));continue}d.push(this.armExecution(a).then(()=>{this.armed.has(a.id)&&this.armedConfigurations.set(a.id,c.get(a.id))}).catch(b=>{this.armed.get(a.id)?.dispose(),this.armed.delete(a.id),this.armedConfigurations.delete(a.id);let c=b instanceof Error?b.message:String(b);this.lastTriggerErrors.set(a.id,c),N.error(`Failed to arm "${a.name}" (${a.id}):`,b)}))}await Promise.all(d),N.info(`Scheduler armed ${this.armed.size} execution(s)`)}withScheduleState(a,b){let c=(this.scheduleStateChains.get(a)??Promise.resolve()).catch(()=>void 0).then(b);return this.scheduleStateChains.set(a,c),c.finally(()=>{this.scheduleStateChains.get(a)===c&&this.scheduleStateChains.delete(a)}).catch(()=>void 0),c}initializeSchedule(a,b){return this.withScheduleState(a.id,()=>this.initializeScheduleState(a,b))}async assertCurrentSchedule(a){if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before effect")}async isCurrentSchedule(a){let b=await this.loadFile(),c=b.executions.find(b=>b.id===a.id),d=c?await (0,G.s)(c,b.paused,this.workerLocalClaims):void 0;return(!(0,F.ye)()||d?.eligible===!0)&&!b.paused&&!!c?.enabled&&!c.personaRetired&&!c.personaArchived&&J(c)===J(a)}async initializeScheduleState(a,b){let c=a.trigger;if("schedule"!==c.type)return;let d=await (0,A.QA)(a.id);if(!await this.isCurrentSchedule(a))return;let e=new Date(b).toISOString();if(!d.lastScheduledFireAt)return void await (0,A.Bw)(a.id,e,()=>this.assertCurrentSchedule(a));let f=c.catchUp?(0,r.uq)(c,d.lastScheduledFireAt,b):null;if(!f)return;let g={kind:"schedule-catchup",summary:"Schedule (missed while FLUJO was closed — ran once at startup)",context:{scheduledOccurrence:f.toISOString()},...a.personaId?{deliveryId:this.sourceDeliveryId(a,"schedule",f.toISOString())}:{}};if(a.personaId){let b=await this.admitPersonaFire(a,g);await (0,A.Bw)(a.id,e,()=>this.assertCurrentSchedule(a)),b.completion.catch(b=>N.error(`Catch-up continuation failed for ${a.id}:`,b))}else await (0,A.Bw)(a.id,e,()=>this.assertCurrentSchedule(a)),this.fireOrdinarySchedule(a,g,f.toISOString()).catch(b=>{let c=b instanceof Error?b.message:String(b);this.lastTriggerErrors.set(a.id,`Schedule catch-up failed: ${c.slice(0,1024)}`),N.error(`Catch-up fire failed for ${a.id}:`,b)})}async armExecution(a){if(!await this.isCurrentSchedule(a))return;let b=void 0!==a.aiGate?(0,l.n$)(a.trigger):a.trigger;switch(b.type){case"schedule":{let c=Date.now();this.armed.set(a.id,(0,r.wv)(b,this.bindToWorkspace(async b=>{try{let c;await d;let e={kind:"schedule",summary:"Schedule",context:{scheduledOccurrence:b.toISOString()},...a.personaId?{deliveryId:this.sourceDeliveryId(a,"schedule",b.toISOString())}:{}};await this.withScheduleState(a.id,async()=>{if(!await this.isCurrentSchedule(a))return;let d=await (0,A.QA)(a.id);!(d.lastScheduledFireAt&&Date.parse(d.lastScheduledFireAt)>=b.getTime())&&(a.personaId&&(c=(await this.admitPersonaFire(a,e)).completion),await (0,A.Bw)(a.id,b.toISOString(),()=>this.assertCurrentSchedule(a)),this.lastTriggerErrors.delete(a.id),a.personaId||(c=this.fireOrdinarySchedule(a,e,b.toISOString())))}),await c}catch(d){let c=d instanceof Error?d.message:String(d);this.lastTriggerErrors.set(a.id,`Schedule occurrence ${b.toISOString()} failed: ${c.slice(0,1024)}`),N.error(`Scheduled fire failed for ${a.id}:`,d)}})));let d=this.initializeSchedule(a,c);await d;break}case"webhook":break;case"file-watch":this.armed.set(a.id,(0,s.M)(b,this.bindToWorkspace(async({events:c,observedAt:d})=>{this.lastTriggerErrors.delete(a.id);let e={kind:"file",summary:1===c.length?`File ${"unlink"===c[0].event?"deleted":"add"===c[0].event?"added":"changed"}`:`${c.length} file changes`,context:{watchedPath:b.path,events:c},...a.personaId?{deliveryId:this.sourceDeliveryId(a,"file",JSON.stringify({observedAt:d,events:c.map(a=>({event:a.event,path:a.path.replace(/\\/g,"/")}))}))}:{}};if(a.personaId&&e.deliveryId){let b=await (0,B.sp)({schemaVersion:1,id:`file-intent-${e.deliveryId}`,execution:a,payload:e,createdAt:d});this.admitDurableFileWatchIntent(b).catch(c=>{this.lastTriggerErrors.set(a.id,c instanceof Error?c.message:String(c)),N.warn(`File-watch intent ${b.id} remains pending:`,c)});return}this.fire(a,e)}),this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b))));break;case"mcp-poll":this.inWorkspace(async()=>{let{mcpService:d}=await Promise.resolve().then(c.bind(c,671399));await d.isServerDisabled(b.serverName)&&this.lastTriggerErrors.set(a.id,`MCP server '${b.serverName}' is disabled — enable it on the MCP page or change the trigger`)}).catch(b=>N.warn(`Arm-time disabled-server check failed for ${a.id}:`,b)),this.armed.set(a.id,(0,t.q)(b,{callTool:this.bindToWorkspace(async(b,d,e)=>{let{mcpService:f}=await Promise.resolve().then(c.bind(c,671399));if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before polling");let g=await f.callTool(b,d,e);return{success:!0===g.success,data:g.data,error:"string"==typeof g.error?g.error:void 0}}),loadState:this.bindToWorkspace(()=>(0,A.QA)(a.id)),saveState:this.bindToWorkspace(async b=>{await (0,A.FP)(a.id,a=>({...a,...b}),()=>this.assertCurrentSchedule(a))}),onFire:this.bindToWorkspace(async({summary:b,context:c,deliveryId:d})=>{this.lastTriggerErrors.delete(a.id),await (0,g.QO)();let e=await this.fire(a,{kind:"mcp-poll",summary:b,context:c,...a.personaId?{deliveryId:d}:{}});return{status:e.status,conditionRejected:e.conditionRejected}}),onError:this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b)),onSuccess:this.bindToWorkspace(()=>this.lastTriggerErrors.delete(a.id)),evaluateAiGate:this.bindToWorkspace(async(b,d,e)=>{let{evaluateAiGate:f}=await c.e(85112).then(c.bind(c,785112));if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before AI gate");return f(b,d,e)})}));break;case"url-watch":this.armed.set(a.id,(0,v.t)(b,{assertCurrent:this.bindToWorkspace(async()=>{if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before URL effect")}),loadState:this.bindToWorkspace(()=>(0,A.QA)(a.id)),saveState:this.bindToWorkspace(async b=>{await (0,A.FP)(a.id,a=>({...a,...b}),()=>this.assertCurrentSchedule(a))}),onFire:this.bindToWorkspace(async({summary:b,context:c,deliveryId:d})=>{this.lastTriggerErrors.delete(a.id),await (0,g.QO)();let e=await this.fire(a,{kind:"url-watch",summary:b,context:c,...a.personaId?{deliveryId:d}:{}});return{status:e.status,conditionRejected:e.conditionRejected}}),onError:this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b)),onSuccess:this.bindToWorkspace(()=>this.lastTriggerErrors.delete(a.id))}));break;case"flow-event":this.armed.set(a.id,(0,w.R)(b,{onFire:this.bindToWorkspace(({summary:b,context:c,chainDepth:d,sourceConversationId:e,deliveryId:f})=>{this.lastTriggerErrors.delete(a.id);let g={kind:"flow-event",summary:b,context:c,chainDepth:d,parentConversationId:e,...a.personaId&&f?{deliveryId:f}:{}};if(a.personaId)return this.admitPersonaFire(a,g).then(b=>{b.completion.catch(b=>N.error(`Flow-event continuation failed for ${a.id}:`,b))});this.fire(a,g).catch(b=>N.error(`Flow-event fire failed for ${a.id}:`,b))}),onSkip:this.bindToWorkspace(b=>{let c=new Date().toISOString(),d=(0,h.A)();this.recordSchedulerSkip(a,d,b),(0,y.Hy)(a.id,{runId:d,conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:"Flow event",error:b}).catch(b=>N.warn(`Failed to record flow-event skip for ${a.id}:`,b))}),onError:this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b))}));break;default:N.warn(`Trigger type "${b.type}" is not implemented — "${a.name}" not armed`)}}async loadFile(){let a=await (0,j.loadItem)(k.Zg.PLANNED_EXECUTIONS,O);return{version:1,paused:!0===a.paused,executions:Array.isArray(a.executions)?a.executions.map(a=>({...a,...(0,l.vq)(a)})):[]}}async saveFile(a){await (0,j.VH)(k.Zg.PLANNED_EXECUTIONS,a)}executionGenerationId(a){return a.generationId??`legacy-${(0,i.createHash)("sha256").update(`${a.id}\0${a.createdAt}`).digest("hex").slice(0,40)}`}async isPaused(){return(await this.loadFile()).paused}async setPaused(a){if(await (0,p._T)(P,async b=>{let c=await this.loadFile();await b.assertOwned(),await this.saveFile({...c,paused:a})}),await this.reconcile(),a){for(let a of[...this.queued.keys()])await this.cancelQueued(a,"scheduler paused",!0);await this.cancelAllExclusiveWaiting("scheduler paused",!0)}}async list(){let a=await this.loadFile();return Promise.all(a.executions.map(async b=>{let c=await this.refreshWorkerRecoveryStatus(b,a.paused);return c&&this.workerRecoveryStatuses.set(b.id,c),{execution:b,status:this.getStatus(b),lastRun:await (0,y.tl)(b.id)}}))}async get(a){return(await this.loadFile()).executions.find(b=>b.id===a)??null}async refreshWorkerRecoveryStatus(a,b){let c=await (0,G.s)(a,b,this.workerLocalClaims);return c?.pending&&!this.workerLocalClaims.has(c.pending.runId)&&["unresolved-admission","not-opted-in","definition-changed"].includes(c.reason)&&await (0,G.Fw)(a)&&(c=await (0,G.s)(a,b,this.workerLocalClaims)),c}async setWorkerLocalRecovery(a,b){if(!(0,F.ye)()||"ready"!==(0,F.dT)().state)throw Error("Worker is not ready for local recovery enrollment");await (0,p._T)(P,async c=>{let d=(await this.loadFile()).executions.find(b=>b.id===a);if(!d)throw Error("Planned execution not found");if(b.enabled&&this.isRunning(a))throw Error("Plan has a live run; enrollment cannot replace it");await c.assertOwned(),await (0,G.a2)(d,b.enabled,b.expectedGenerationId,b.expectedDefinitionSha256)}),await this.reconcile()}async fireOrdinarySchedule(a,b,c){let d;if(!(0,F.ye)())return this.fire(a,b);let e=(0,h.A)();this.workerLocalClaims.add(e);try{d=await (0,G.Gi)(a,c,e)}catch(a){throw this.workerLocalClaims.delete(e),a}if("eligible"!==d){this.workerLocalClaims.delete(e);let c=new Date().toISOString(),f={runId:e,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:b.summary,error:`Worker schedule suppressed: ${d}`};return this.recordSchedulerSkip(a,e,f.error),this.finishFireRecord(a,b,f)}try{let c=await this.fire(a,b,e);return await (0,G.Aj)(a,c),c}finally{this.workerLocalClaims.delete(e),await this.reconcile()}}async retirePersonaByPersonaId(a){return this.inWorkspace(async()=>{C.Qy.parse(a);let b=[],c=await (0,p._T)(P,async c=>{let d=await this.loadFile(),e=0,f=d.executions.map(c=>c.personaId!==a||(b.push(c.id),c.personaRetired&&!c.enabled)?c:(e+=1,{...c,enabled:!1,personaRetired:!0}));return 0===e?0:(await c.assertOwned(),await this.saveFile({...d,executions:f}),e)}),d=await (0,z.YY)(a);if(b.length>0)for(let a of(await this.reconcile(),b))await this.cancelQueued(a,"Persona retired",!1),await this.cancelExclusiveWaiting(a,"Persona retired",!1),this.lastTriggerErrors.delete(a);let[e,f]=await Promise.all([(0,E.MF)(a),(0,B.Gk)(a)]);return{plannedExecutions:c,pendingApprovals:e,pendingProjections:d,pendingFileWatchIntents:f}})}async anonymizePersonaAttributionByPersonaId(a){C.Qy.parse(a);let b=await this.retirePersonaByPersonaId(a);return this.inWorkspace(async()=>{let c=await (0,p._T)(P,async b=>{let c=await this.loadFile(),d=0,e=c.executions.map(b=>{if(b.personaId!==a)return b;d+=1;let c={...b,enabled:!1,personaRetired:!0,personaArchived:!0};return delete c.personaId,c});return 0===d?0:(await b.assertOwned(),await this.saveFile({...c,executions:e}),d)});c>0&&await this.reconcile();let d=await (0,y.HG)(a);return{...b,plannedExecutions:c,runHistories:d.histories,runRecords:d.records,terminalReceipts:d.terminalReceipts}})}async create(a){let b=this.validateRestrictionFields(a);if(b)return{error:b};let c={...a,...(0,l.vq)(a),trigger:this.normalizeTrigger(a.trigger)},d=this.validateInput(c);if(d)return{error:d};let e=await this.validatePersonaTarget(c);if(e)return{error:e};if(void 0!==a.id&&!/^[A-Za-z0-9._:-]{1,128}$/.test(a.id))return{error:"The id must be 1-128 characters of letters, digits, dot, underscore, colon or hyphen"};if("."===a.id||".."===a.id)return{error:'The id must be a safe identifier, not "." or ".."'};let f=new Date().toISOString(),g=L({...c,folder:a.folder?.trim()||void 0,id:a.id??(0,h.A)(),generationId:(0,h.A)(),createdAt:f,updatedAt:f}),i=await (0,p._T)(P,async a=>{let b=await this.loadFile();if(b.executions.some(a=>a.id===g.id))return{conflict:!0};let c=await this.validatePersonaTarget(g);if(c)return{error:c};if(await a.assertOwned(),(0,F.ye)()){if("ready"!==(0,F.dT)().state)throw Error("Worker is not ready for local plan creation");await (0,G.o3)(g)}return await this.saveFile({...b,executions:[...b.executions,g]}),await (0,z.K7)(g.id),{}});return i.conflict?{error:`A planned execution with id "${g.id}" already exists`,conflict:!0}:i.error?{error:i.error}:(await this.reconcileCommitted(g),{execution:g})}async update(a,b){let c=await (0,p._T)(P,async c=>{let d=await this.loadFile(),e=d.executions.findIndex(b=>b.id===a);if(e<0)return{error:`No planned execution with id "${a}"`};let f=b.folder;if(Object.prototype.hasOwnProperty.call(b,"folder")&&void 0!==f&&"string"!=typeof f)return{error:"Folder must be text"};let g=this.validateRestrictionFields(b);if(g)return{error:g};let h=d.executions[e];if(h.personaRetired||h.personaArchived)return{error:"A retired Persona planned execution is read-only"};let i=L({...h,...b,...Object.prototype.hasOwnProperty.call(b,"folder")?{folder:"string"==typeof f&&f.trim()||void 0}:{},...b.trigger?{trigger:this.normalizeTrigger(b.trigger)}:{},id:a,generationId:this.executionGenerationId(h),createdAt:h.createdAt,updatedAt:new Date().toISOString(),...(0,l.vq)({...h,...b})}),j=this.validateInput(i);if(j)return{error:j};let k=await this.validatePersonaTarget(i);if(k)return{error:k};let m=[...d.executions];return m[e]=i,await c.assertOwned(),await this.saveFile({...d,executions:m}),{execution:i}});if(!c.execution)return c;let d=c.execution;return Object.keys(b).some(a=>"folder"!==a)&&(await this.reconcileCommitted(d),await this.cancelQueued(a,"execution updated",!0),await this.cancelExclusiveWaiting(a,"execution updated",!0)),{execution:d}}async delete(a){return await (0,p._T)(P,async b=>{let c=await this.loadFile(),d=c.executions.find(b=>b.id===a);return!!d&&(await b.assertOwned(),await this.saveFile({...c,executions:c.executions.filter(b=>b.id!==a)}),await (0,z.T5)(a,this.executionGenerationId(d)),await (0,B.nq)(a,this.executionGenerationId(d)),!0)})?(await this.reconcile(),this.lastTriggerErrors.delete(a),await this.cancelQueued(a,"execution deleted",!1),await this.cancelExclusiveWaiting(a,"execution deleted",!1),await (0,y.xC)(a),await (0,A.pC)(a),{success:!0}):{success:!1,error:`No planned execution with id "${a}"`}}normalizeTrigger(a){return a?.type!=="webhook"||a.token?a?.type!=="mcp-poll"||a.cron?a:{...a,cron:(0,u.X)(a.intervalMs)}:{...a,token:(0,h.A)()}}validateRestrictionFields(a){return void 0===a.startRestriction||["unrestricted","singleton","exclusive"].includes(String(a.startRestriction))?void 0!==a.superExclusive&&"boolean"!=typeof a.superExclusive?"Super-Exclusive must be true or false":void 0!==a.emergency&&"boolean"!=typeof a.emergency?"Emergency must be true or false":void 0!==a.exclusive&&"boolean"!=typeof a.exclusive?"Exclusive must be true or false":null:"Start restriction must be one of: unrestricted, singleton, exclusive"}validateInput(a){let b=(0,l.B2)(a.aiGate);if(b)return b;if(void 0!==a.personaArchived||void 0!==a.personaRetired)return"Persona retirement and archive markers are server-managed";if(!a.name?.trim())return"A name is required";if(void 0!==a.folder&&"string"!=typeof a.folder)return"Folder must be text";if(a.folder&&a.folder.trim().length>120)return"Folder must be 120 characters or fewer";if(!a.flowId)return"A flow is required";if(void 0!==a.personaId&&!C.Qy.safeParse(a.personaId).success)return"Persona id must be a safe 1-64 character identifier";if(void 0!==a.behaviorSlotKey&&!C.BI.safeParse(a.behaviorSlotKey).success)return"Behavior slot must be a safe 1-64 character slot key";if(void 0!==a.behaviorSlotKey&&void 0===a.personaId)return"A Behavior slot requires a Persona target";if("string"!=typeof a.prompt)return"A prompt is required (may be empty)";if(void 0!==a.overlapStrategy&&!["skip","queue","parallel","error"].includes(a.overlapStrategy))return"Overlap strategy must be one of: skip, queue, parallel, error";if(void 0!==a.exclusive&&"boolean"!=typeof a.exclusive)return"Exclusive must be true or false";if(void 0!==a.startRestriction&&!["unrestricted","singleton","exclusive"].includes(a.startRestriction))return"Start restriction must be one of: unrestricted, singleton, exclusive";if(void 0!==a.superExclusive&&"boolean"!=typeof a.superExclusive)return"Super-Exclusive must be true or false";if(void 0!==a.emergency&&"boolean"!=typeof a.emergency)return"Emergency must be true or false";if("singleton"===(0,l.vq)(a).startRestriction&&"parallel"===a.overlapStrategy)return"Singleton start restriction cannot use parallel overlap";if(void 0!==a.nonExclusiveBehavior&&!["queue","skip","error"].includes(a.nonExclusiveBehavior))return"When exclusive is on, other triggers must be one of: queue, skip, error";let c=a.trigger;if(!c||"object"!=typeof c)return"A trigger is required";switch(c.type){case"schedule":{let a=(0,r.O9)(c.cron,c.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"webhook":return null;case"file-watch":if(!c.path?.trim())return"A folder or file path to watch is required";if(!Array.isArray(c.events)||0===c.events.length)return"At least one file event is required";return null;case"mcp-poll":if(!c.serverName||!c.toolName)return"A server and tool are required";if(c.cron){let a=(0,r.O9)(c.cron,c.timezone);if(!a.valid)return`Invalid schedule: ${a.error}`}if(c.evaluate?.mode==="new-items"&&!c.evaluate.idField?.trim())return"An id field is required to detect new items";if((c.evaluate?.mode==="llm-gate"||c.evaluate?.mode==="flow-gate")&&!c.evaluate.condition?.trim())return"A condition is required for the AI to check";if(c.evaluate?.mode==="llm-gate"&&!c.evaluate.modelId)return"A model is required to check the condition";if(c.evaluate?.mode==="flow-gate"&&!c.evaluate.flowId)return"A flow is required to check the condition";return null;case"url-watch":{try{let a=new URL(c.url??"");if("http:"!==a.protocol&&"https:"!==a.protocol)return"The URL must start with http:// or https://"}catch{return"A valid URL is required"}let a=(0,r.O9)(c.cron,c.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"flow-event":{let a=c.source;if(1!==[a?.executionId,a?.flowId,a?.flowName,a?.topic].filter(a=>"string"==typeof a&&a.trim().length>0).length)return"Choose exactly one source: a flow, a planned execution, or a signal topic";if(!("string"==typeof a?.topic&&a.topic.trim().length>0)){if(!Array.isArray(c.on)||0===c.on.length)return"Select at least one outcome to react to (completed or error)";if(c.on.some(a=>"completed"!==a&&"error"!==a))return'Outcomes must be "completed" or "error"'}if(c.outputMatch?.regex)try{new RegExp(c.outputMatch.regex)}catch(a){return`Invalid output-match regex: ${a instanceof Error?a.message:String(a)}`}if(void 0!==c.maxChainDepth&&(!Number.isInteger(c.maxChainDepth)||c.maxChainDepth<1))return"Max chain depth must be a positive whole number";if(void 0!==c.minIntervalMs&&(!Number.isFinite(c.minIntervalMs)||c.minIntervalMs<0))return"Minimum interval must be zero or more milliseconds";return null}default:return"Unknown trigger type"}}async validatePersonaTarget(a){if(!a.personaId)return null;if(void 0!==a.id&&!C.Qy.safeParse(a.id).success)return"A Persona-targeted execution id must be a safe 1-64 character identifier";try{let{getBehaviorRevision:b,getPersona:d,getPersonaDeletionTombstone:e,listBehaviorBindings:f}=await Promise.resolve().then(c.bind(c,662457)),g=await d(a.personaId);if(!g)return`Persona "${a.personaId}" was not found`;if("ready"!==g.provisioningState||await e(a.personaId))return`Persona "${a.personaId}" is not ready to accept work`;if("disabled"===g.lifecycleState)return`Persona "${a.personaId}" is not accepting work`;let h=a.behaviorSlotKey??"primary",i=(await f(a.personaId)).find(a=>a.slotKey===h);if(!i)return`Persona "${a.personaId}" has no active Behavior for slot "${h}"`;let j=await b(i.activeRevisionId);if(!j||j.personaId!==a.personaId||j.behaviorId!==i.id||j.slotKey!==h)return`Persona "${a.personaId}" has an invalid Behavior binding for slot "${h}"`;return null}catch(a){return`Persona target validation failed: ${a instanceof Error?a.message:String(a)}`}}isRunning(a){let b=this.running.get(a);return void 0!==b&&b.size>0}addRunning(a,b,c){let d=this.running.get(a);d||(d=new Map,this.running.set(a,d)),d.set(b,c)}removeRunning(a,b){let c=this.running.get(a);c&&(c.delete(b),0===c.size&&this.running.delete(a))}earliestRunningSince(a){let b,c=this.running.get(a);if(c&&0!==c.size){for(let a of c.values())(void 0===b||a<b)&&(b=a);return b}}skippedRecord(a,b){let c=new Date().toISOString();return this.recordSchedulerSkip(a.execution,a.runId,b),{runId:a.runId,conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:a.payload.summary,error:b}}recordSchedulerFire(a,b,c,d){(0,D.z9)((0,D.k)({type:"scheduler.fire",runId:b,source:"schedule",plannedExecution:{id:a.id,name:a.name},outcome:c,...d?{conversationId:d}:{}}))}recordSchedulerSkip(a,b,c){(0,D.z9)((0,D.k)({type:"scheduler.skip",runId:b,source:"schedule",plannedExecution:{id:a.id,name:a.name},reason:(0,D.bW)(c)}))}async cancelQueued(a,b,c){let d=this.queued.get(a);if(d&&0!==d.length){for(let e of(this.queued.delete(a),d)){let d=this.skippedRecord(e,b);if(c)try{await this.persistFireRecord(e.execution,e.payload,d)}catch(b){N.warn(`Failed to record cancelled queued fire for ${a}:`,b)}e.resolve(d)}N.info(`Cancelled ${d.length} queued fire(s) for ${a}: ${b}`)}}drainQueue(a){let b=this.queued.get(a);if(!b||0===b.length||this.isRunning(a))return;let c=b.shift();0===b.length&&this.queued.delete(a),c&&(async()=>{let b=await this.get(a);if(!b||!b.enabled||this.pausedCache){let a=b?b.enabled?"scheduler paused":"execution disabled":"execution deleted";c.resolve(this.skippedRecord(c,a));return}let d=await this.fire(b,c.payload,c.runId);c.resolve(d)})().catch(b=>N.error(`Queued fire failed for ${a}:`,b))}isSchedulerIdle(){for(let a of this.running.values())if(a.size>0)return!1;return!0}isExclusiveActive(){return null!==this.exclusiveHolder||this.exclusiveWaiting.length>0}currentExclusiveBehavior(){return null!==this.exclusiveHolder?this.exclusiveHolderBehavior:this.exclusiveWaiting[0]?.execution.nonExclusiveBehavior??"queue"}exclusiveGateFor(a){return"exclusive"!==(0,l.vq)(a).startRestriction&&this.isExclusiveActive()?this.currentExclusiveBehavior():null}drainExclusive(){null===this.exclusiveHolder&&this.exclusiveWaiting.length>0&&this.isSchedulerIdle()?this.acquireNextExclusive():this.isExclusiveActive()||this.drainBlockedByExclusive()}acquireNextExclusive(){if(null!==this.exclusiveHolder||!this.isSchedulerIdle())return;let a=this.exclusiveWaiting.shift();if(!a)return;let b=a.execution.id;this.exclusiveHolder=b,this.exclusiveHolderBehavior=a.execution.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=(0,l.vq)(a.execution).superExclusive,(async()=>{let c=await this.get(b);if(!c||!c.enabled||this.pausedCache||"exclusive"!==(0,l.vq)(c).startRestriction){let d=c?c.enabled?this.pausedCache?"scheduler paused":"no longer exclusive":"execution disabled":"execution deleted";this.exclusiveHolder===b&&(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1),a.resolve(this.skippedRecord(a,d)),this.drainExclusive();return}this.exclusiveHolderBehavior=c.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=(0,l.vq)(c).superExclusive;let d=await this.fire(c,a.payload,a.runId);a.resolve(d)})().catch(c=>{this.exclusiveHolder===b&&(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1),N.error(`Exclusive acquire failed for ${b}:`,c),a.resolve(this.skippedRecord(a,"exclusive acquire failed")),this.drainExclusive()})}drainBlockedByExclusive(){if(0===this.blockedByExclusive.length)return;let a=this.blockedByExclusive;for(let b of(this.blockedByExclusive=[],a))(async()=>{let a=await this.get(b.execution.id);if(!a||!a.enabled||this.pausedCache){let c=a?a.enabled?"scheduler paused":"execution disabled":"execution deleted";b.resolve(this.skippedRecord(b,c));return}let c=await this.fire(a,b.payload,b.runId);b.resolve(c)})().catch(a=>N.error(`Deferred non-exclusive fire failed for ${b.execution.id}:`,a))}async cancelExclusiveWaiting(a,b,c){let d=[];if(this.exclusiveWaiting=this.exclusiveWaiting.filter(b=>b.execution.id!==a||(d.push(b),!1)),this.blockedByExclusive=this.blockedByExclusive.filter(b=>b.execution.id!==a||(d.push(b),!1)),0!==d.length){for(let e of d){let d=this.skippedRecord(e,b);if(c)try{await this.persistFireRecord(e.execution,e.payload,d)}catch(b){N.warn(`Failed to record cancelled exclusive fire for ${a}:`,b)}e.resolve(d)}N.info(`Cancelled ${d.length} exclusive-related fire(s) for ${a}: ${b}`)}}async cancelAllExclusiveWaiting(a,b){let c=[...this.exclusiveWaiting,...this.blockedByExclusive];if(this.exclusiveWaiting=[],this.blockedByExclusive=[],0!==c.length){for(let d of c){let c=this.skippedRecord(d,a);if(b)try{await this.persistFireRecord(d.execution,d.payload,c)}catch(a){N.warn(`Failed to record cancelled exclusive fire for ${d.execution.id}:`,a)}d.resolve(c)}N.info(`Cancelled ${c.length} exclusive-related fire(s): ${a}`)}}inspectOperations(a){return{workspace:this.workspace,started:this.started,pausedAtLastReconcile:this.pausedCache,armedTriggers:this.armed.size,runningRuns:Array.from(this.running.values()).reduce((a,b)=>a+b.size,0),overlapQueued:Array.from(this.queued.values()).reduce((a,b)=>a+b.length,0),maxOverlapDepth:Array.from(this.queued.values()).reduce((a,b)=>Math.max(a,b.length),0),exclusiveWaiting:this.exclusiveWaiting.length,blockedByExclusive:this.blockedByExclusive.length,queueCap:R.MAX_QUEUE_DEPTH,ownedWorkerRunIds:new Set(this.workerLocalClaims),statuses:a.map(a=>({id:a.id,status:this.getStatus(a)}))}}getStatus(a){let b=this.armed.get(a.id),c=!!(a.personaRetired||a.personaArchived||K(a)),d=this.workerRecoveryStatuses.get(a.id),e=(!(0,F.ye)()||d?.eligible===!0)&&!c&&(void 0!==b||a.enabled&&"webhook"===a.trigger.type&&this.started&&!this.pausedCache),f=this.earliestRunningSince(a.id),g=e?void 0:a.enabled?this.pausedCache?"paused":void 0:"disabled",h=this.exclusiveHolder??void 0,i=a.id!==this.exclusiveHolder&&"exclusive"!==(0,l.vq)(a).startRestriction&&this.isExclusiveActive();return{armed:e,...d?{workerRecovery:{...d,state:e?"armed":d.state}}:{},notArmedReason:g,nextRun:b?.nextRun?b.nextRun():void 0,lastTriggerError:this.lastTriggerErrors.get(a.id),running:void 0!==f,runningSince:f,exclusiveHolderId:h,blockedByExclusive:i}}async runNow(a){let b=await this.get(a);if(!b)return{error:`No planned execution with id "${a}"`};if(b.personaRetired||b.personaArchived)return{error:"A retired Persona planned execution cannot be run"};let c=(0,h.A)();return await (0,g.QO)(),{record:await this.fire(b,{kind:"manual",summary:"Manual run",...b.personaId?{deliveryId:`manual-${c}`}:{}},c,!0)}}async completeApprovedPersonaRun(a){return this.inWorkspace(async()=>{let b=await this.get(a.executionId),c=(await (0,y.Sw)(a.executionId)).find(b=>b.runId===a.runId);if(!c&&a.terminalPublication&&(c={runId:a.runId,executionGenerationId:a.terminalPublication.execution.generationId,conversationId:a.conversationId,firedAt:a.firedAt,status:"needs_approval",triggerSummary:a.triggerSummary,personaId:a.personaAttribution.personaId,activityId:a.personaAttribution.activityId,behaviorRevisionId:a.personaAttribution.behaviorRevisionId}),!c)return null;let d={status:a.status,finishedAt:a.finishedAt,outputText:a.outputText,usage:a.usage,error:a.error,pendingApproval:void 0};if(!a.terminalPublication)return(0,y.s1)(a.executionId,a.runId,d);let e={...b??{},...a.terminalPublication.execution,generationId:a.terminalPublication.execution.generationId??b?.generationId,personaId:a.terminalPublication.execution.personaId},f={...c,...d,runId:a.runId},g={kind:a.terminalPublication.triggerKind,summary:c.triggerSummary,chainDepth:a.terminalPublication.chainDepth,deliveryId:a.terminalPublication.deliveryId},h=await this.buildFlowRunEvent(e,f,g),i={id:h.deliveryId,executionId:e.id,runId:f.runId,event:h,record:f,createdAt:f.finishedAt??new Date().toISOString()},j=this.personaProjectionId(e,f.runId),k=await (0,z.qn)(e.id,e.generationId,j,()=>(0,y.bk)(e.id,f,i));return k?(await this.drainTerminalPublications(),await (0,z.Zg)(j),k.record):null})}sourceDeliveryId(a,b,c){return`${b}-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${b}\0${c}`).digest("hex")}`}stablePersonaDeliveryId(a,b){return a.personaId&&b.deliveryId?b.deliveryId:void 0}effectiveRunId(a,b,c){if(c)return c;let d=this.stablePersonaDeliveryId(a,b);return d?`delivery-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${d}`).digest("hex").slice(0,48)}`:(0,h.A)()}async persistFireRecord(a,b,c,d){return((0,F.ye)()&&this.workerLocalClaims.has(c.runId)&&(c={...c,executionGenerationId:this.executionGenerationId(a)},await (0,G.kp)(a,c)),this.stablePersonaDeliveryId(a,b))?(0,y.bk)(a.id,c,d):(await (0,y.Hy)(a.id,c),{record:c,inserted:!0,firstTerminalTransition:"completed"===c.status||"error"===c.status})}fire(a,b,c,d=!1){let e=this.effectiveRunId(a,b,c);return this.inWorkspace(()=>this.fireInternal(a,b,e,d)).finally(()=>this.conditionChecks.delete(e))}checkAutomationCondition(a,b,d){let e=this.conditionChecks.get(d);if(e)return e;let f=(async()=>{let e=a.aiGate,f=(0,l.B2)(e);if(f)throw Error(f);if(await this.assertCurrentSchedule(a),this.stablePersonaDeliveryId(a,b)){let b=(await (0,y.Sw)(a.id)).find(a=>a.runId===d);if(b?.conditionRejected)return{fire:!1,reason:"Previously checked delivery"};if(b?.status==="completed"||b?.status==="needs_approval")return{fire:!0,reason:"Previously admitted delivery"}}if(await (0,n.C3)())throw Error("encryption locked");let{evaluateTriggerAiGate:g,DEFAULT_MAX_CALLS_PER_DAY:h}=await c.e(85112).then(c.bind(c,785112)),i=new Date().toISOString().slice(0,10),j=e.maxCallsPerDay??h;await (0,A.FP)(a.id,a=>{let b=a.llmCallsDay===i?a.llmCallsCount??0:0;if(b>=j)throw Error(`Daily AI-check budget reached (${j}/day) — checks resume tomorrow`);return{...a,llmCallsDay:i,llmCallsCount:b+1}},()=>this.assertCurrentSchedule(a));let k=await g({kind:b.kind,occurredAt:new Date().toISOString(),automationName:a.name,..."timezone"in a.trigger?{timezone:a.trigger.timezone}:{},summary:b.summary,context:b.context},e,b.chainDepth);return await this.assertCurrentSchedule(a),k})();return this.conditionChecks.set(d,f),f}async admitPersonaFire(a,b,c){let d,e;if(!a.personaId)throw TypeError("Durable Persona admission requires a Persona target.");let f=this.effectiveRunId(a,b,c),g=new Promise((a,b)=>{d=a,e=b}),h=this.inWorkspace(()=>this.fireInternal(a,b,f,!1,{resolve:d,reject:e})).finally(()=>this.conditionChecks.delete(f));return h.catch(e),{...await g,completion:h}}admitDurableFileWatchIntent(a){let b=this.fileWatchIntentAdmissions.get(a.id);if(b)return b;let c=this.inWorkspace(async()=>{let b=await this.get(a.execution.id);if(!b||this.executionGenerationId(b)!==this.executionGenerationId(a.execution))return void await (0,B.pZ)(a.id);let c=await this.admitPersonaFire(a.execution,a.payload);await (0,B.pZ)(a.id),c.completion.catch(b=>N.error(`File-watch continuation failed for ${a.execution.id}:`,b))});return this.fileWatchIntentAdmissions.set(a.id,c),c.finally(()=>{this.fileWatchIntentAdmissions.get(a.id)===c&&this.fileWatchIntentAdmissions.delete(a.id)}).catch(()=>{}),c}async reconcileDurableFileWatchIntents(a=!0){let b=(await (0,B.KC)()).map(a=>this.admitDurableFileWatchIntent(a));if(a)await Promise.all(b);else for(let a of b)a.catch(a=>N.warn("Durable file-watch intent remains pending:",a))}personaProjectionId(a,b){return`projection-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${b}`).digest("hex").slice(0,48)}`}continuePersonaSchedulerProjection(a,b,d){let e=this.personaProjectionCompletions.get(b.id);if(e)return e;let f=this.inWorkspace(async()=>{let{getPersonaFlowDispatch:e}=await Promise.resolve().then(c.bind(c,14130)),f=d;for(;"queued"===f.state||"running"===f.state||"waiting"===f.state&&("delivery"===f.waitingReason||"interrupted"===f.waitingReason);){await new Promise(a=>setTimeout(a,50));let a=await e(f.id);if(!a)throw Error(`Persona dispatch ${f.id} disappeared.`);f=a}let g=b.payload,h=this.recordFromPersonaDispatch(a,f,{runId:b.runId,conversationId:b.conversationId,firedAt:b.firedAt,payload:g});return"waiting"===f.state&&"approval"===f.waitingReason&&(h=await this.registerPersonaPendingApproval(a,h,g)),h=await this.finishFireRecord(a,g,h,b.id),("completed"===f.state||"error"===f.state||"cancelled"===f.state)&&await (0,z.Zg)(b.id),h});return this.personaProjectionCompletions.set(b.id,f),f.finally(()=>{this.personaProjectionCompletions.get(b.id)===f&&this.personaProjectionCompletions.delete(b.id)}).catch(()=>{}),f}async reconcilePersonaSchedulerProjections(a=!0){let b=await (0,z.eP)(),d=[];for(let e of b)try{let b={...await this.get(e.execution.id)??{},...e.execution,personaId:e.execution.personaId},{submitPersonaFlowDispatch:f}=await Promise.resolve().then(c.bind(c,14130)),g=await f(e.submission,{startPump:!await (0,n.C3)()}),h=await (0,z.mn)(e.id,g.dispatch.id),i=this.continuePersonaSchedulerProjection(b,h,g.dispatch);a?d.push(i):i.catch(a=>{N.warn(`Persona scheduler projection ${e.id} remains pending:`,a)})}catch(b){if(N.warn(`Failed to reconcile Persona scheduler projection ${e.id}:`,b),a)throw b}a&&await Promise.all(d)}async firePersonaInternal(a,b,d,e,f){let g=this.stablePersonaDeliveryId(a,b),j=this.executionGenerationId(a),k=g?`conversation-${(0,i.createHash)("sha256").update(`${a.id}\0${j}\0${g}`).digest("hex").slice(0,48)}`:(0,h.A)();this.recordSchedulerFire(a,d,"fired",k);let l=!1;try{N.info(`Durably admitting "${a.name}" (${b.kind})`);let h=await (0,y.Sw)(a.id),i=h.length>0?h[h.length-1]:null,m=g?{executionName:a.name,trigger:b.kind,deliveryId:g}:{executionName:a.name,trigger:b.kind,now:e,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,lastRun:i?{at:i.firedAt,status:i.status}:null,nextPlannedRun:this.getStatus(a).nextRun??null},o=a.approvalPolicy??"auto",p=a.saveConversations||"pause"===o?"conversation":"ephemeral",q={prompt:this.composePrompt(a.prompt,b,m),mode:p,conversationId:k,runId:d,source:"schedule",plannedExecutionId:a.id,plannedExecutionName:a.name,parentRunId:b.parentConversationId,chainDepth:b.chainDepth??0,requireApproval:"auto"!==o,onApprovalRequired:o,debug:!1,userTurn:!0},r="manual"===b.kind||"schedule"===b.kind||"schedule-catchup"===b.kind,s={personaId:a.personaId,idempotencyKey:`planned:${a.id}:${j}:${b.deliveryId??d}`,kind:r?"scheduled":"triggered",source:{kind:r?"schedule":"trigger",sourceId:`${a.id}:${j}`},...a.behaviorSlotKey?{behaviorSlotKey:a.behaviorSlotKey}:{},relationKey:`planned-execution:${a.id}:${j}`,summary:`${a.name}: ${b.summary}`.slice(0,2e4),flowInput:q},t=this.personaProjectionId(a,d),u=await (0,z.A8)({schemaVersion:1,id:t,execution:{id:a.id,generationId:j,name:a.name,flowId:a.flowId,personaId:a.personaId},payload:{kind:b.kind,summary:b.summary,chainDepth:b.chainDepth,parentConversationId:b.parentConversationId,deliveryId:b.deliveryId},submission:s,runId:d,conversationId:k,firedAt:e,createdAt:e,updatedAt:e}),{submitPersonaFlowDispatch:v}=await Promise.resolve().then(c.bind(c,14130)),w=await (0,n.C3)(),x=await v(u.submission,{startPump:!w}),A=await (0,z.mn)(u.id,x.dispatch.id);return l=!0,f?.resolve({runId:d,dispatchId:x.dispatch.id}),this.continuePersonaSchedulerProjection(a,A,x.dispatch)}catch(c){if(l||f?.reject(c),N.error(`Persona admission/continuation failed for "${a.name}":`,c),f)throw c;return{runId:d,executionGenerationId:j,conversationId:k,firedAt:e,finishedAt:new Date().toISOString(),status:"skipped",triggerSummary:b.summary,error:"Persona work remains durably pending scheduler projection"}}}async fireInternal(a,b,d=(0,h.A)(),e=!1,f){let j,k=new Date().toISOString(),m=this.stablePersonaDeliveryId(a,b),p=await this.get(a.id);if((0,F.ye)()&&("schedule"===b.kind||"schedule-catchup"===b.kind)&&!this.workerLocalClaims.has(d))return this.finishFireRecord(a,b,{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Worker automatic schedule execution requires a local recovery admission"});if(a.personaRetired||a.personaArchived||p?.personaRetired||p?.personaArchived){let c=TypeError("A retired Persona planned execution cannot be fired");return f?.reject(c),{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:c.message}}if(K(a)||K(p)){let c=TypeError(Q);return f?.reject(c),{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:c.message}}let q=(0,l.Vw)(a),r=(0,l.Vw)(p);if((q||r)&&(!p||!q||!r||a.personaId!==p.personaId||(a.behaviorSlotKey??"primary")!==(p.behaviorSlotKey??"primary")||this.executionGenerationId(a)!==this.executionGenerationId(p))){let c=TypeError("Persona planned execution authority changed before firing");return f?.reject(c),{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:c.message}}if(void 0!==a.aiGate&&null!==a.aiGate&&"manual"!==b.kind){let c,e;try{c=await this.checkAutomationCondition(a,b,d),await this.assertCurrentSchedule(a)}catch(a){e=a instanceof Error?a.message.replace(/^config:\s*/,""):String(a)}if(!c?.fire){let g={runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:new Date().toISOString(),status:e&&!m?"error":"skipped",triggerSummary:b.summary,...e?{}:{conditionRejected:!0},error:e??`AI condition not met${c?.reason?`: ${c.reason}`:""}`};e?this.lastTriggerErrors.set(a.id,e):this.lastTriggerErrors.delete(a.id);let h=await this.persistFireRecord(a,b,g);return e?f?.reject(Error(e)):f?.resolve({runId:d,record:h.record}),h.record}this.lastTriggerErrors.delete(a.id)}let s=(0,l.vq)(a),t="flow-event"===b.kind,u=e||t,v=null,w=async()=>{v=(0,o.wl)(d,{force:!0});let b=await (0,o.bo)({exceptRunId:d,reason:`Automation EMERGENCY initiated by planned execution ${a.id}`});b.failures.length>0&&N.warn(`EMERGENCY cancellation for "${a.name}" settled with ${b.failures.length} failure(s)`)};if(a.personaId){u||(s.emergency?await w():s.superExclusive?v=await (0,o.vY)(d):await (0,o.ge)(d));try{return await this.firePersonaInternal(a,b,d,k,f)}finally{v?.()}}if(await (0,n.C3)()){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"encryption locked"};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.info(`Skipped fire for "${a.name}" — encryption locked`),e.record}if(!u&&s.emergency&&await w(),!u){if("exclusive"!==s.startRestriction||s.emergency){if(!s.emergency&&this.isExclusiveActive()){let c=this.currentExclusiveBehavior();if("skip"===c){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Skipped — an exclusive execution holds the scheduler lock"};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.info(`Skipped non-exclusive fire for "${a.name}" — exclusive lock held`),e.record}if("error"===c){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"error",triggerSummary:b.summary,error:"Rejected — an exclusive execution holds the scheduler lock"},e=await this.persistFireRecord(a,b,c);return N.info(`Rejected non-exclusive fire for "${a.name}" — exclusive lock held`),e.record}let e=this.blockedByExclusive.length;if(e>=R.MAX_QUEUE_DEPTH){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:`Exclusive-block queue full (cap ${R.MAX_QUEUE_DEPTH}) — fire dropped`};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.warn(`Exclusive-block queue full for "${a.name}" — dropped fire`),e.record}return N.info(`Deferred non-exclusive fire for "${a.name}" — exclusive lock held (depth ${e+1})`),this.recordSchedulerFire(a,d,"queued"),new Promise(c=>{this.blockedByExclusive.push({execution:a,payload:b,runId:d,resolve:c})})}}else if(this.exclusiveHolder!==a.id){if(null!==this.exclusiveHolder||!this.isSchedulerIdle()){let c=this.exclusiveWaiting.length;if(c>=R.MAX_QUEUE_DEPTH){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:`Exclusive wait queue full (cap ${R.MAX_QUEUE_DEPTH}) — fire dropped`};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.warn(`Exclusive wait queue full for "${a.name}" — dropped fire`),e.record}return N.info(`Exclusive "${a.name}" waiting for scheduler to idle (depth ${c+1})`),this.recordSchedulerFire(a,d,"queued"),new Promise(c=>{this.exclusiveWaiting.push({execution:a,payload:b,runId:d,resolve:c})})}this.exclusiveHolder=a.id,this.exclusiveHolderBehavior=a.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=s.superExclusive,N.info(`Exclusive "${a.name}" reserved the scheduler idle window`)}}let x=a.overlapStrategy??"skip";if(!e&&!s.emergency&&m&&this.running.get(a.id)?.has(d))return{runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Stable delivery is already in progress"};if(!e&&!s.emergency&&this.isRunning(a.id)){if("skip"===x){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Previous run still in progress"};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.info(`Skipped overlapping fire for "${a.name}"`),e.record}if("error"===x){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"error",triggerSummary:b.summary,error:"Overlapping run rejected (overlapStrategy=error)"},e=await this.persistFireRecord(a,b,c);return N.info(`Rejected overlapping fire for "${a.name}" (overlapStrategy=error)`),e.record}if("queue"===x){let c=this.queued.get(a.id)?.length??0;if(c>=R.MAX_QUEUE_DEPTH){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:`Overlap queue full (cap ${R.MAX_QUEUE_DEPTH}) — fire dropped`};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.warn(`Overlap queue full for "${a.name}" — dropped fire`),e.record}return N.info(`Queued overlapping fire for "${a.name}" (depth ${c+1})`),this.recordSchedulerFire(a,d,"queued"),new Promise(c=>{let e=this.queued.get(a.id)??[];e.push({execution:a,payload:b,runId:d,resolve:c}),this.queued.set(a.id,e)})}}u||(s.superExclusive&&!v?v=await (0,o.vY)(d):await (0,o.ge)(d)),!u&&s.superExclusive&&(this.exclusiveHolder=a.id,this.exclusiveHolderBehavior=a.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=!0,N.info(`Super-Exclusive "${a.name}" acquired the workspace start barrier`)),this.addRunning(a.id,d,k),this.exclusiveHolder!==a.id||this.exclusiveHolderPersistent||(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1,this.drainExclusive()),v&&s.emergency&&!s.superExclusive&&(v(),v=null);let z=m?`conversation-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${m}`).digest("hex").slice(0,48)}`:(0,h.A)();this.recordSchedulerFire(a,d,"fired",z);try{N.info(`Firing "${a.name}" (${b.kind})`);let e=await (0,y.Sw)(a.id),f=e.length>0?e[e.length-1]:null,h=m?{executionName:a.name,trigger:b.kind,deliveryId:m}:{executionName:a.name,trigger:b.kind,now:k,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,lastRun:f?{at:f.firedAt,status:f.status}:null,nextPlannedRun:this.getStatus(a).nextRun??null},i=a.approvalPolicy??"auto",l=a.saveConversations||"pause"===i?"conversation":"ephemeral",n={prompt:this.composePrompt(a.prompt,b,h),mode:l,conversationId:z,runId:d,source:"schedule",plannedExecutionId:a.id,plannedExecutionName:a.name,parentRunId:b.parentConversationId,chainDepth:b.chainDepth??0,requireApproval:"auto"!==i,onApprovalRequired:i,debug:!1,userTurn:!0};if(a.personaId){let{getPersonaFlowDispatch:e,submitPersonaFlowDispatch:f}=await Promise.resolve().then(c.bind(c,14130)),h="manual"===b.kind||"schedule"===b.kind||"schedule-catchup"===b.kind;if("manual"!==b.kind&&!await this.isCurrentSchedule(a))throw Error("Schedule changed before Persona dispatch");await (0,g.QO)();let i=(await f({personaId:a.personaId,idempotencyKey:`planned:${a.id}:${b.deliveryId??d}`,kind:h?"scheduled":"triggered",source:{kind:h?"schedule":"trigger",sourceId:a.id},...a.behaviorSlotKey?{behaviorSlotKey:a.behaviorSlotKey}:{},relationKey:`planned-execution:${a.id}`,summary:`${a.name}: ${b.summary}`.slice(0,2e4),flowInput:n})).dispatch;for(;"queued"===i.state||"running"===i.state||"waiting"===i.state&&("delivery"===i.waitingReason||"interrupted"===i.waitingReason);){await new Promise(a=>setTimeout(a,50));let a=await e(i.id);if(!a)throw Error(`Persona dispatch ${i.id} disappeared.`);i=a}j=this.recordFromPersonaDispatch(a,i,{runId:d,conversationId:z,firedAt:k,payload:b}),"waiting"===i.state&&"approval"===i.waitingReason&&(j=await this.registerPersonaPendingApproval(a,j,b))}else{let{runFlow:e}=await Promise.resolve().then(c.bind(c,654432));if((0,F.ye)()&&this.workerLocalClaims.has(d)){let b=await this.loadFile(),c=b.executions.find(b=>b.id===a.id);if(b.paused||!c||!c.enabled||J(c)!==J(a))throw Error("Worker schedule definition or stop controls changed before execution");await (0,G.PZ)(c,d)}if("manual"!==b.kind&&!await this.isCurrentSchedule(a))throw Error("Schedule changed before execution");await (0,g.QO)();let f=await e({flowId:a.flowId,...n});j=await this.recordFromResult(a,f,{runId:d,conversationId:z,firedAt:k,payload:b})}}catch(c){if(c instanceof g.Mr)throw c;j={runId:d,conversationId:z,firedAt:k,finishedAt:new Date().toISOString(),status:"error",triggerSummary:b.summary,error:c instanceof Error?c.message:String(c)},N.error(`Run crashed for "${a.name}":`,c)}finally{this.removeRunning(a.id,d),this.exclusiveHolder!==a.id||this.isRunning(a.id)||(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1,N.info(`Super-Exclusive "${a.name}" released the scheduler lock`)),v?.(),v=null,this.drainExclusive(),this.drainQueue(a.id)}return(0,F.ye)()&&this.workerLocalClaims.has(d)&&(j.executionGenerationId=this.executionGenerationId(a)),this.finishFireRecord(a,b,j)}async recordFromResult(a,b,c){let{runId:d,conversationId:e,firedAt:f,payload:g}=c,h=new Date().toISOString(),i="awaiting_tool_approval"===b.status,j="error"===b.status&&b.error?.details?.type==="approval_required";if(i||j){let c=(b.pendingToolCalls??[]).map(a=>({id:a.id,name:"function"===a.type?a.function.name:String(a.type)})),k={runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"needs_approval",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:j?b.error?.message??"Tool approval required":"Awaiting tool approval",pendingApproval:{tool:c[0]?.name??b.error?.details?.name,toolCallId:c[0]?.id,pendingToolCalls:c.length>0?c:void 0}};return i&&await this.registerPendingApproval(a,k,c,g),k}return{runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"completed"===b.status?"completed":"capped"===b.status?"capped":"error",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:"completed"===b.status||"capped"===b.status?void 0:b.error?.message??`Run ended with status "${b.status}"`,...b.error?.details?.code?.startsWith("static_")?{errorDetails:{type:b.error.details.type?.slice(0,200),code:b.error.details.code.slice(0,200),name:b.error.details.name?.slice(0,200),param:b.error.details.param?.slice(0,200),status:b.error.details.status}}:{}}}recordFromPersonaDispatch(a,b,c){let d=b.outcome,e="waiting"===b.state&&"approval"===b.waitingReason,f="waiting"===b.state&&"debug"===b.waitingReason,g=e||f,h="completed"===b.state&&d?.status==="completed",i="completed"===b.state&&d?.status==="capped";return{runId:d?.runId??c.runId,executionGenerationId:this.executionGenerationId(a),conversationId:d?.conversationId??c.conversationId,firedAt:c.firedAt,finishedAt:new Date().toISOString(),status:g?"needs_approval":h?"completed":i?"capped":"error",triggerSummary:c.payload.summary,outputText:this.truncateOutput(d?.outputText??""),error:g?f?"Paused in debugger":"Awaiting tool approval":h||i?void 0:"waiting"===b.state?"running"===b.waitingReason?'Run ended with status "running"':`Persona dispatch is waiting (${b.waitingReason??"unknown reason"})`:b.error?.message??`Persona dispatch ended with state "${b.state}"`,personaId:b.personaId,activityId:b.activityId,behaviorRevisionId:b.behaviorRevisionId}}async registerPersonaPendingApproval(a,b,d){let e=[];try{let{loadConversationState:a}=await Promise.resolve().then(c.bind(c,825867)),d=await a(b.conversationId);e=(d?.pendingToolCalls??[]).map(a=>({id:a.id,name:"function"===a.type?a.function.name:String(a.type)}))}catch(b){N.warn(`Failed to load Persona approval metadata for "${a.name}":`,b)}let f={...b,pendingApproval:{tool:e[0]?.name,toolCallId:e[0]?.id,pendingToolCalls:e.length>0?e:void 0}};return await this.registerPendingApproval(a,f,e,d),f}async registerPendingApproval(a,b,d,e){try{let f;try{let{flowService:b}=await Promise.resolve().then(c.bind(c,614331));f=(await b.getFlow(a.flowId))?.name??void 0}catch(b){N.debug(`Could not resolve flow name for pending approval (${a.flowId}):`,b)}let{putPendingApproval:g}=await Promise.resolve().then(c.bind(c,966733));await g({approvalId:b.conversationId,conversationId:b.conversationId,plannedExecutionId:a.id,flowId:a.flowId,flowName:f,runId:b.runId,triggerSummary:b.triggerSummary,pendingToolCalls:d,createdAt:b.firedAt,...a.personaId&&e.deliveryId?{terminalPublication:{triggerKind:e.kind,chainDepth:e.chainDepth??0,deliveryId:e.deliveryId,execution:{id:a.id,generationId:this.executionGenerationId(a),name:a.name,flowId:a.flowId,personaId:a.personaId}}}:{}})}catch(b){if(N.warn(`Failed to register pending approval for "${a.name}":`,b),a.personaId)throw b}}async finishFireRecord(a,b,c,d){let e="completed"===c.status||"error"===c.status,f=!!this.stablePersonaDeliveryId(a,b),g=e?await this.buildFlowRunEvent(a,c,b):void 0,h=f&&g?{id:g.deliveryId,executionId:a.id,runId:c.runId,event:g,record:c,createdAt:c.finishedAt??new Date().toISOString()}:void 0,i=d?await (0,z.qn)(a.id,a.generationId,d,()=>this.persistFireRecord(a,b,c,h)):await (0,p._T)(P,async()=>await this.get(a.id)===null?null:this.persistFireRecord(a,b,c,h));if(!i)return c;let j=i.record;return f?await this.drainTerminalPublications():e&&i.firstTerminalTransition&&(0,x.eh)().publish(g),j}async drainTerminalPublications(){try{await (0,y.Pp)(a=>(0,x.eh)().publishDurably(a))}catch(a){N.warn("Failed to drain scheduler terminal publication outbox:",a)}}async buildFlowRunEvent(a,b,d){let e;try{let{flowService:b}=await Promise.resolve().then(c.bind(c,614331));e=(await b.getFlow(a.flowId))?.name??void 0}catch(b){N.debug(`Could not resolve flow name for run event (${a.flowId}):`,b)}let f="schedule-catchup"===d.kind?"schedule":d.kind;return{flowId:a.flowId,flowName:e,executionId:a.id,runId:b.runId,conversationId:b.conversationId,status:"completed"===b.status?"completed":"error",outputText:b.outputText,error:b.error,firedBy:f,chainDepth:d.chainDepth??0,timestamp:b.finishedAt??new Date().toISOString(),deliveryId:`terminal-${(0,i.createHash)("sha256").update(`${a.id}\0${b.runId}`).digest("hex")}`}}composePrompt(a,b,c){let d=JSON.stringify(void 0===b.context?c:{...c,data:b.context},null,2);return`${a}
1
+ "use strict";exports.id=42265,exports.ids=[22817,24375,42265,45198,67579,89960],exports.modules={34446:(a,b,c)=>{var d=c(351353);c(596654),c(270389),c(662457),c(269674),c(758224),(0,d.h)("backend/services/enduringAgents/memoryLifecycle")},107319:(a,b,c)=>{let d;c.d(b,{HG:()=>t,Hy:()=>v,Pp:()=>y,Sw:()=>u,bk:()=>x,s1:()=>z,tl:()=>A,xC:()=>B});var e=c(629021),f=c(333873),g=c.n(f),h=c(975128),i=c(351353),j=c(581991),k=c(71392);let l=(0,i.h)("backend/services/scheduler/runHistory"),m="scheduler-terminal-publication-outbox",n="scheduler_terminal_publications";async function o(){let a=await (0,h.loadItem)(m,{version:1,pending:{}});return{version:1,pending:a?.version===1&&a.pending&&"object"==typeof a.pending?{...a.pending}:{}}}let p=a=>`planned-execution-runs/${a}`,q=new Map;function r(a,b){if(a.personaId!==b)return{record:a,changed:!1};let c={...a,personaArchived:!0};return delete c.personaId,delete c.activityId,delete c.behaviorRevisionId,{record:c,changed:!0}}async function s(){let a;if(d)return[...new Set(d)].sort();let b=g().join((0,j.getWorkspaceDataDir)(),"db","planned-execution-runs");try{a=await e.promises.readdir(b)}catch(a){if("ENOENT"===a.code)return[];throw a}let c=[];for(let b of a.sort()){if(!b.endsWith(".json")||b.includes(".tmp.")||b.includes(".corrupted.")||b.endsWith(".bak"))continue;let a=b.slice(0,-5);(0,h.ln)(a),c.push(a)}return c}async function t(a){return(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async b=>{let c={histories:0,records:0,terminalReceipts:0};for(let d of(await s())){let e=await (0,h.loadItem)(p(d),[]);if(!Array.isArray(e))throw Error(`Run history ${d} is not an array.`);let f=!1,g=e.map(b=>{let d=r(b,a);return d.changed&&(f=!0,c.records+=1),d.record});f&&(await b.assertOwned(),await (0,h.VH)(p(d),g),c.histories+=1)}let d=await o(),e=!1;for(let[b,f]of Object.entries(d.pending)){let g=r(f.record,a);g.changed&&(d.pending[b]={...f,record:g.record},e=!0,c.terminalReceipts+=1)}return e&&(await b.assertOwned(),await (0,h.VH)(m,d)),c}))()}async function u(a){try{return await (0,h.loadItem)(p(a),[])}catch(b){return l.error(`Failed to load run history for ${a}:`,b),[]}}async function v(a,b){let c=(0,j.workspaceCacheKey)(a),d=q.get(c)??Promise.resolve(),e=(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async c=>{let d=await u(a);d.push(b);let e=d.slice(-100);await c.assertOwned(),await (0,h.VH)(p(a),e)})),f=d.catch(()=>{}).then(e);q.set(c,f);try{await f}finally{q.get(c)===f&&q.delete(c)}}function w(a){return"completed"===a.status||"error"===a.status}async function x(a,b,c){let d,e=(0,j.workspaceCacheKey)(a),f=q.get(e)??Promise.resolve(),g=(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async e=>{let f=await u(a),g=f.findIndex(a=>a.runId===b.runId),i=g<0?void 0:f[g];if(i&&w(i)){d={record:i,inserted:!1,firstTerminalTransition:!1};return}let j=w(b);if(j&&c){if(c.executionId!==a||c.runId!==b.runId||c.event.runId!==b.runId||c.record.runId!==b.runId||!w(c.record)||JSON.stringify(c.record)!==JSON.stringify(b)||!c.event.deliveryId)throw Error(`Invalid terminal publication receipt for ${b.runId}.`);let d=await o(),f=d.pending[c.id];if(f&&JSON.stringify(f)!==JSON.stringify(c))throw Error(`Terminal publication receipt ${c.id} conflicts.`);f||(d.pending[c.id]=c,await e.assertOwned(),await (0,h.VH)(m,d))}g<0?f.push(b):f[g]=b,await e.assertOwned(),await (0,h.VH)(p(a),g<0?f.slice(-100):f),d={record:b,inserted:g<0,firstTerminalTransition:j}})),i=f.catch(()=>{}).then(g);q.set(e,i);try{await i}finally{q.get(e)===i&&q.delete(e)}if(!d)throw Error(`Stable run history upsert did not settle for ${b.runId}.`);return d}async function y(a){return(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async b=>{let c=await o(),d=Object.values(c.pending).sort((a,b)=>a.createdAt.localeCompare(b.createdAt)),e=0;for(let f of d){let d=await u(f.executionId);if(!d.find(a=>a.runId===f.runId&&w(a))){if(f.record.runId!==f.runId||!w(f.record)||f.event.runId!==f.runId)throw Error(`Corrupt terminal publication receipt ${f.id}.`);let a=d.findIndex(a=>a.runId===f.runId);a<0?d.push(f.record):d[a]=f.record,await b.assertOwned(),await (0,h.VH)(p(f.executionId),d.slice(-100))}await a(f.event),delete c.pending[f.id],await b.assertOwned(),await (0,h.VH)(m,c),e+=1}return e}))()}async function z(a,b,c){let d=(0,j.workspaceCacheKey)(a),e=q.get(d)??Promise.resolve(),f=null,g=(0,j.bindToCurrentWorkspace)(()=>(0,k._T)(n,async d=>{let e=await u(a),g=e.findIndex(a=>a.runId===b);if(g<0){f=null;return}e[g]={...e[g],...c,runId:b},f=e[g],await d.assertOwned(),await (0,h.VH)(p(a),e)})),i=e.catch(()=>{}).then(g);q.set(d,i);try{await i}finally{q.get(d)===i&&q.delete(d)}return f}async function A(a){let b=await u(a);return b.length>0?b[b.length-1]:null}async function B(a){await (0,k._T)(n,async b=>{let c=await o(),d=!1;for(let[b,e]of Object.entries(c.pending))e.executionId===a&&(delete c.pending[b],d=!0);d&&(await b.assertOwned(),await (0,h.VH)(m,c)),await b.assertOwned(),await (0,h.N2)(p(a))})}},128189:(a,b,c)=>{c.d(b,{O9:()=>e,Z9:()=>f,uq:()=>g,wv:()=>h});var d=c(150930);function e(a,b){try{let c=new d.l4(a,{timezone:b,paused:!0});return c.nextRun(),c.stop(),{valid:!0}}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Invalid cron pattern"}}}function f(a,b,c){let e=new d.l4(a,{timezone:b,paused:!0});try{return e.nextRuns(c).map(a=>a.toISOString())}finally{e.stop()}}function g(a,b,c=Date.now()){let e=new d.l4(a.cron,{timezone:a.timezone,paused:!0});try{let a=e.nextRun(new Date(b));return null!==a&&a.getTime()<=c?a:null}finally{e.stop()}}function h(a,b){let c=null,e=new d.l4(a.cron,{timezone:a.timezone,unref:!0},a=>{let d=c??a.currentRun()??new Date;return c=a.nextRun(),b(d)});return c=e.nextRun(),{dispose:()=>e.stop(),nextRun:()=>e.nextRun()?.toISOString()??null}}},152348:(a,b,c)=>{c.d(b,{Gk:()=>p,KC:()=>m,nq:()=>o,pZ:()=>n,sp:()=>l});var d=c(581991),e=c(71392),f=c(299883),g=c(663905),h=c(975128);let i="scheduler-file-watch-intents",j="scheduler_file_watch_intents";async function k(){let a=await (0,h.loadItem)(i,{version:1,pending:{}});return{version:1,pending:a?.version===1&&a.pending&&"object"==typeof a.pending?{...a.pending}:{}}}async function l(a){return(0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await k(),d=c.pending[a.id];if(d){if((0,g.dj)(d)!==(0,g.dj)(a))throw Error(`File-watch intent ${a.id} conflicts.`);return d}return c.pending[a.id]=a,await b.assertOwned(),await (0,h.VH)(i,c),a}))()}async function m(){return Object.values((await k()).pending).sort((a,b)=>a.createdAt.localeCompare(b.createdAt))}async function n(a){await (0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await k();a in c.pending&&(delete c.pending[a],await b.assertOwned(),await (0,h.VH)(i,c))}))()}async function o(a,b){await (0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async c=>{let d=await k(),e=!1;for(let[c,f]of Object.entries(d.pending))f.execution.id===a&&f.execution.generationId===b&&(delete d.pending[c],e=!0);e&&(await c.assertOwned(),await (0,h.VH)(i,d))}))()}async function p(a){return f.Qy.parse(a),(0,d.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await k(),d=0;for(let[b,e]of Object.entries(c.pending))e.execution.personaId===a&&(delete c.pending[b],d+=1);return 0===d?0:(await b.assertOwned(),await (0,h.VH)(i,c),d)}))()}},155167:(a,b,c)=>{c.d(b,{A1:()=>k,Je:()=>i,Jl:()=>j,qq:()=>f,vV:()=>g});var d=c(455511);function e(a){return JSON.stringify(function a(b){if(Array.isArray(b))return b.map(a);if(null!==b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b)),d={};for(let[b,e]of c)d[b]=a(e);return d}return b}(a))}function f(a){return(0,d.createHash)("sha256").update(e(a)??"undefined").digest("hex")}async function g(a){let{status:b,pendingState:c,priorFailures:d,saveState:e}=a;if("completed"===b||!0===a.conditionRejected)return await e({...c,...d>0?{pendingFailures:0}:{}}),{giveUpError:null};if("skipped"===b)return{giveUpError:null};let f=d+1;return f>=3?(await e({...c,pendingFailures:0}),{giveUpError:"Detected a change but the flow failed to process it 3\xd7 — skipping it to avoid a loop"}):(await e({pendingFailures:f}),{giveUpError:null})}function h(a,b){if(!b)return a;let c=a;for(let a of b.split(".")){if(null==c||"object"!=typeof c)return;c=c[a]}return c}function i(a){let b=e(a)??"";return b.length<=8192?a:{truncated:!0,note:`Result too large to include fully (${b.length} chars); this is a preview.`,preview:b.slice(0,8192)}}function j(a,b){let c=f(a);return b.lastHash?b.lastHash===c?{fire:!1,newState:{}}:{fire:!0,summary:"Tool result changed",context:{result:i(a)},newState:{},pendingState:{lastHash:c}}:{fire:!1,newState:{lastHash:c}}}function k(a,b,c,d){let e=h(a,b);if(!Array.isArray(e))return{fire:!1,newState:{},error:`"${b||"(root)"}" did not resolve to a list in the tool result`};let g=e.map(a=>{let b=h(a,c);return{id:null==b||"object"==typeof b?`hash:${f(a)}`:String(b),item:a}}),j=d.seenIds,k=g.map(({id:a})=>a),l=(a,b)=>{let c=[...a??[]],d=new Set(c);for(let a of b)d.has(a)||(d.add(a),c.push(a));return c.slice(-1e3)};if(!j)return{fire:!1,newState:{seenIds:l(void 0,k)}};let m=new Set(j),n=g.filter(({id:a})=>!m.has(a));if(0===n.length)return{fire:!1,newState:{}};let o=n.slice(0,50);return{fire:!0,summary:1===n.length?"1 new item":`${n.length} new items`,context:{newItems:i(o.map(({item:a})=>a)),...n.length>50?{omitted:n.length-50}:{}},newState:{},pendingState:{seenIds:l(j,o.map(({id:a})=>a))}}}},166240:(a,b,c)=>{c(455511),c(596654);var d=c(351353);c(581991),c(554579),c(530775),c(407272),c(891261),c(71392),c(820669),c(662457),(0,d.h)("enduringAgents/personaRuntimeRetentionRollout")},259760:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z:()=>M});var e=c(16698),f=c(682218),g=c(960817),h=c(763509),i=c(455511),j=c(975128),k=c(164986),l=c(389395),m=c(351353),n=c(687907),o=c(121798),p=c(71392),q=c(581991),r=c(128189),s=c(335951),t=c(678819),u=c(475650),v=c(872374),w=c(514640),x=c(633069),y=c(107319),z=c(531243),A=c(745543),B=c(152348),C=c(299883),D=c(784789),E=c(966733),F=c(487361),G=c(522734),H=a([o]);o=(H.then?(await H)():H)[0];let N=(0,m.h)("backend/services/scheduler/index"),O={version:1,paused:!1,executions:[]},P="scheduler_planned_executions",Q="Persona planned execution ownership metadata is incomplete";function I(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function J(a){let b={...a};return delete b.folder,delete b.updatedAt,JSON.stringify(b,(a,b)=>b&&"object"==typeof b&&!Array.isArray(b)?Object.fromEntries(Object.entries(b).sort(([a],[b])=>a.localeCompare(b))):b)}function K(a){return!!(a&&(0,l.Vw)(a)&&!a.personaRetired&&!a.personaArchived&&(!C.Qy.safeParse(a.personaId).success||I(a,"behaviorSlotKey")&&!C.BI.safeParse(a.behaviorSlotKey).success||I(a,"personaRetired")&&!0!==a.personaRetired||I(a,"personaArchived")&&!0!==a.personaArchived))}function L(a){return Object.prototype.hasOwnProperty.call(a,"personaId")&&void 0===a.personaId&&delete a.personaId,Object.prototype.hasOwnProperty.call(a,"behaviorSlotKey")&&void 0===a.behaviorSlotKey&&delete a.behaviorSlotKey,a}class R{static{this.MAX_QUEUE_DEPTH=50}inWorkspace(a){return(0,q.runWithWorkspace)(this.workspace,a)}bindToWorkspace(a){return(...b)=>this.inWorkspace(()=>a(...b))}async start(){this.started||(this.started=!0,N.info("Starting scheduler"),await this.reconcile(),(0,F.ye)()||(await this.drainTerminalPublications(),await this.reconcileDurableFileWatchIntents(!1),await this.reconcilePersonaSchedulerProjections(!1)))}reconcile(){return this.queueReconcile()}reconcileCommitted(a){return this.queueReconcile(Object.freeze({id:a.id,configuration:J(a)}))}queueReconcile(a){let b=this.reconcileChain.catch(()=>{}).then(async()=>(await (0,g.QO)(),this.serviceResource.runInAsyncScope(()=>this.inWorkspace(()=>this.doReconcile(a)))));return this.reconcileChain=b,b}async doReconcile(a){let b=await this.loadFile();if(a){let c=b.executions.find(b=>b.id===a.id);if(!c||J(c)!==a.configuration)throw Error("Committed schedule changed before service admission")}if(this.pausedCache=b.paused,(0,F.ye)())for(let a of(this.workerRecoveryStatuses.clear(),b.executions)){let c=await this.refreshWorkerRecoveryStatus(a,b.paused);c&&this.workerRecoveryStatuses.set(a.id,c)}let c=new Map(b.executions.filter(a=>!b.paused&&a.enabled&&!a.personaRetired&&!a.personaArchived&&!K(a)&&(!(0,F.ye)()||this.workerRecoveryStatuses.get(a.id)?.eligible===!0)).map(a=>[a.id,J(a)]));for(let[a,b]of this.armed)if(c.get(a)!==this.armedConfigurations.get(a)){try{b.dispose()}catch(b){N.warn(`Failed to dispose trigger for ${a}:`,b)}this.armed.delete(a),this.armedConfigurations.delete(a)}if(b.paused)return void N.info("Scheduler is paused — nothing armed");let d=[];for(let a of b.executions)if((!(0,F.ye)()||this.workerRecoveryStatuses.get(a.id)?.eligible)&&a.enabled&&!a.personaRetired&&!a.personaArchived){if(K(a)){this.lastTriggerErrors.set(a.id,Q),N.error(`Refusing to arm Persona-controlled execution "${a.name}" (${a.id}): `+Q);continue}if(this.armed.has(a.id)){"schedule"===a.trigger.type&&d.push(this.initializeSchedule(a,Date.now()));continue}d.push(this.armExecution(a).then(()=>{this.armed.has(a.id)&&this.armedConfigurations.set(a.id,c.get(a.id))}).catch(b=>{this.armed.get(a.id)?.dispose(),this.armed.delete(a.id),this.armedConfigurations.delete(a.id);let c=b instanceof Error?b.message:String(b);this.lastTriggerErrors.set(a.id,c),N.error(`Failed to arm "${a.name}" (${a.id}):`,b)}))}await Promise.all(d),N.info(`Scheduler armed ${this.armed.size} execution(s)`)}withScheduleState(a,b){let c=(this.scheduleStateChains.get(a)??Promise.resolve()).catch(()=>void 0).then(b);return this.scheduleStateChains.set(a,c),c.finally(()=>{this.scheduleStateChains.get(a)===c&&this.scheduleStateChains.delete(a)}).catch(()=>void 0),c}initializeSchedule(a,b){return this.withScheduleState(a.id,()=>this.initializeScheduleState(a,b))}async assertCurrentSchedule(a){if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before effect")}async isCurrentSchedule(a){let b=await this.loadFile(),c=b.executions.find(b=>b.id===a.id),d=c?await (0,G.s)(c,b.paused,this.workerLocalClaims):void 0;return(!(0,F.ye)()||d?.eligible===!0)&&!b.paused&&!!c?.enabled&&!c.personaRetired&&!c.personaArchived&&J(c)===J(a)}async initializeScheduleState(a,b){let c=a.trigger;if("schedule"!==c.type)return;let d=await (0,A.QA)(a.id);if(!await this.isCurrentSchedule(a))return;let e=new Date(b).toISOString();if(!d.lastScheduledFireAt)return void await (0,A.Bw)(a.id,e,()=>this.assertCurrentSchedule(a));let f=c.catchUp?(0,r.uq)(c,d.lastScheduledFireAt,b):null;if(!f)return;let g={kind:"schedule-catchup",summary:"Schedule (missed while FLUJO was closed — ran once at startup)",context:{scheduledOccurrence:f.toISOString()},...a.personaId?{deliveryId:this.sourceDeliveryId(a,"schedule",f.toISOString())}:{}};if(a.personaId){let b=await this.admitPersonaFire(a,g);await (0,A.Bw)(a.id,e,()=>this.assertCurrentSchedule(a)),b.completion.catch(b=>N.error(`Catch-up continuation failed for ${a.id}:`,b))}else await (0,A.Bw)(a.id,e,()=>this.assertCurrentSchedule(a)),this.fireOrdinarySchedule(a,g,f.toISOString()).catch(b=>{let c=b instanceof Error?b.message:String(b);this.lastTriggerErrors.set(a.id,`Schedule catch-up failed: ${c.slice(0,1024)}`),N.error(`Catch-up fire failed for ${a.id}:`,b)})}async armExecution(a){if(!await this.isCurrentSchedule(a))return;let b=void 0!==a.aiGate?(0,l.n$)(a.trigger):a.trigger;switch(b.type){case"schedule":{let c=Date.now();this.armed.set(a.id,(0,r.wv)(b,this.bindToWorkspace(async b=>{try{let c;await d;let e={kind:"schedule",summary:"Schedule",context:{scheduledOccurrence:b.toISOString()},...a.personaId?{deliveryId:this.sourceDeliveryId(a,"schedule",b.toISOString())}:{}};await this.withScheduleState(a.id,async()=>{if(!await this.isCurrentSchedule(a))return;let d=await (0,A.QA)(a.id);!(d.lastScheduledFireAt&&Date.parse(d.lastScheduledFireAt)>=b.getTime())&&(a.personaId&&(c=(await this.admitPersonaFire(a,e)).completion),await (0,A.Bw)(a.id,b.toISOString(),()=>this.assertCurrentSchedule(a)),this.lastTriggerErrors.delete(a.id),a.personaId||(c=this.fireOrdinarySchedule(a,e,b.toISOString())))}),await c}catch(d){let c=d instanceof Error?d.message:String(d);this.lastTriggerErrors.set(a.id,`Schedule occurrence ${b.toISOString()} failed: ${c.slice(0,1024)}`),N.error(`Scheduled fire failed for ${a.id}:`,d)}})));let d=this.initializeSchedule(a,c);await d;break}case"webhook":break;case"file-watch":this.armed.set(a.id,(0,s.M)(b,this.bindToWorkspace(async({events:c,observedAt:d})=>{this.lastTriggerErrors.delete(a.id);let e={kind:"file",summary:1===c.length?`File ${"unlink"===c[0].event?"deleted":"add"===c[0].event?"added":"changed"}`:`${c.length} file changes`,context:{watchedPath:b.path,events:c},...a.personaId?{deliveryId:this.sourceDeliveryId(a,"file",JSON.stringify({observedAt:d,events:c.map(a=>({event:a.event,path:a.path.replace(/\\/g,"/")}))}))}:{}};if(a.personaId&&e.deliveryId){let b=await (0,B.sp)({schemaVersion:1,id:`file-intent-${e.deliveryId}`,execution:a,payload:e,createdAt:d});this.admitDurableFileWatchIntent(b).catch(c=>{this.lastTriggerErrors.set(a.id,c instanceof Error?c.message:String(c)),N.warn(`File-watch intent ${b.id} remains pending:`,c)});return}this.fire(a,e)}),this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b))));break;case"mcp-poll":this.inWorkspace(async()=>{let{mcpService:d}=await Promise.resolve().then(c.bind(c,671399));await d.isServerDisabled(b.serverName)&&this.lastTriggerErrors.set(a.id,`MCP server '${b.serverName}' is disabled — enable it on the MCP page or change the trigger`)}).catch(b=>N.warn(`Arm-time disabled-server check failed for ${a.id}:`,b)),this.armed.set(a.id,(0,t.q)(b,{callTool:this.bindToWorkspace(async(b,d,e)=>{let{mcpService:f}=await Promise.resolve().then(c.bind(c,671399));if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before polling");let g=await f.callTool(b,d,e);return{success:!0===g.success,data:g.data,error:"string"==typeof g.error?g.error:void 0}}),loadState:this.bindToWorkspace(()=>(0,A.QA)(a.id)),saveState:this.bindToWorkspace(async b=>{await (0,A.FP)(a.id,a=>({...a,...b}),()=>this.assertCurrentSchedule(a))}),onFire:this.bindToWorkspace(async({summary:b,context:c,deliveryId:d})=>{this.lastTriggerErrors.delete(a.id),await (0,g.QO)();let e=await this.fire(a,{kind:"mcp-poll",summary:b,context:c,...a.personaId?{deliveryId:d}:{}});return{status:e.status,conditionRejected:e.conditionRejected}}),onError:this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b)),onSuccess:this.bindToWorkspace(()=>this.lastTriggerErrors.delete(a.id)),evaluateAiGate:this.bindToWorkspace(async(b,d,e)=>{let{evaluateAiGate:f}=await c.e(85112).then(c.bind(c,785112));if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before AI gate");return f(b,d,e)})}));break;case"url-watch":this.armed.set(a.id,(0,v.t)(b,{assertCurrent:this.bindToWorkspace(async()=>{if(!await this.isCurrentSchedule(a))throw Error("Schedule changed before URL effect")}),loadState:this.bindToWorkspace(()=>(0,A.QA)(a.id)),saveState:this.bindToWorkspace(async b=>{await (0,A.FP)(a.id,a=>({...a,...b}),()=>this.assertCurrentSchedule(a))}),onFire:this.bindToWorkspace(async({summary:b,context:c,deliveryId:d})=>{this.lastTriggerErrors.delete(a.id),await (0,g.QO)();let e=await this.fire(a,{kind:"url-watch",summary:b,context:c,...a.personaId?{deliveryId:d}:{}});return{status:e.status,conditionRejected:e.conditionRejected}}),onError:this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b)),onSuccess:this.bindToWorkspace(()=>this.lastTriggerErrors.delete(a.id))}));break;case"flow-event":this.armed.set(a.id,(0,w.R)(b,{onFire:this.bindToWorkspace(({summary:b,context:c,chainDepth:d,sourceConversationId:e,deliveryId:f})=>{this.lastTriggerErrors.delete(a.id);let g={kind:"flow-event",summary:b,context:c,chainDepth:d,parentConversationId:e,...a.personaId&&f?{deliveryId:f}:{}};if(a.personaId)return this.admitPersonaFire(a,g).then(b=>{b.completion.catch(b=>N.error(`Flow-event continuation failed for ${a.id}:`,b))});this.fire(a,g).catch(b=>N.error(`Flow-event fire failed for ${a.id}:`,b))}),onSkip:this.bindToWorkspace(b=>{let c=new Date().toISOString(),d=(0,h.A)();this.recordSchedulerSkip(a,d,b),(0,y.Hy)(a.id,{runId:d,conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:"Flow event",error:b}).catch(b=>N.warn(`Failed to record flow-event skip for ${a.id}:`,b))}),onError:this.bindToWorkspace(b=>this.lastTriggerErrors.set(a.id,b))}));break;default:N.warn(`Trigger type "${b.type}" is not implemented — "${a.name}" not armed`)}}async loadFile(){let a=await (0,j.loadItem)(k.Zg.PLANNED_EXECUTIONS,O);return{version:1,paused:!0===a.paused,executions:Array.isArray(a.executions)?a.executions.map(a=>({...a,...(0,l.vq)(a)})):[]}}async saveFile(a){await (0,j.VH)(k.Zg.PLANNED_EXECUTIONS,a)}executionGenerationId(a){return a.generationId??`legacy-${(0,i.createHash)("sha256").update(`${a.id}\0${a.createdAt}`).digest("hex").slice(0,40)}`}async isPaused(){return(await this.loadFile()).paused}async setPaused(a){if(await (0,p._T)(P,async b=>{let c=await this.loadFile();await b.assertOwned(),await this.saveFile({...c,paused:a})}),await this.reconcile(),a){for(let a of[...this.queued.keys()])await this.cancelQueued(a,"scheduler paused",!0);await this.cancelAllExclusiveWaiting("scheduler paused",!0)}}async list(){let a=await this.loadFile();return Promise.all(a.executions.map(async b=>{let c=await this.refreshWorkerRecoveryStatus(b,a.paused);return c&&this.workerRecoveryStatuses.set(b.id,c),{execution:b,status:this.getStatus(b),lastRun:await (0,y.tl)(b.id)}}))}async get(a){return(await this.loadFile()).executions.find(b=>b.id===a)??null}async refreshWorkerRecoveryStatus(a,b){let c=await (0,G.s)(a,b,this.workerLocalClaims);return c?.pending&&!this.workerLocalClaims.has(c.pending.runId)&&["unresolved-admission","not-opted-in","definition-changed"].includes(c.reason)&&await (0,G.Fw)(a)&&(c=await (0,G.s)(a,b,this.workerLocalClaims)),c}async setWorkerLocalRecovery(a,b){if(!(0,F.ye)()||"ready"!==(0,F.dT)().state)throw Error("Worker is not ready for local recovery enrollment");await (0,p._T)(P,async c=>{let d=(await this.loadFile()).executions.find(b=>b.id===a);if(!d)throw Error("Planned execution not found");if(b.enabled&&this.isRunning(a))throw Error("Plan has a live run; enrollment cannot replace it");await c.assertOwned(),await (0,G.a2)(d,b.enabled,b.expectedGenerationId,b.expectedDefinitionSha256)}),await this.reconcile()}async fireOrdinarySchedule(a,b,c){let d;if(!(0,F.ye)())return this.fire(a,b);let e=(0,h.A)();this.workerLocalClaims.add(e);try{d=await (0,G.Gi)(a,c,e)}catch(a){throw this.workerLocalClaims.delete(e),a}if("eligible"!==d){this.workerLocalClaims.delete(e);let c=new Date().toISOString(),f={runId:e,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:b.summary,error:`Worker schedule suppressed: ${d}`};return this.recordSchedulerSkip(a,e,f.error),this.finishFireRecord(a,b,f)}try{let c=await this.fire(a,b,e);return await (0,G.Aj)(a,c),c}finally{this.workerLocalClaims.delete(e),await this.reconcile()}}async retirePersonaByPersonaId(a){return this.inWorkspace(async()=>{C.Qy.parse(a);let b=[],c=await (0,p._T)(P,async c=>{let d=await this.loadFile(),e=0,f=d.executions.map(c=>c.personaId!==a||(b.push(c.id),c.personaRetired&&!c.enabled)?c:(e+=1,{...c,enabled:!1,personaRetired:!0}));return 0===e?0:(await c.assertOwned(),await this.saveFile({...d,executions:f}),e)}),d=await (0,z.YY)(a);if(b.length>0)for(let a of(await this.reconcile(),b))await this.cancelQueued(a,"Persona retired",!1),await this.cancelExclusiveWaiting(a,"Persona retired",!1),this.lastTriggerErrors.delete(a);let[e,f]=await Promise.all([(0,E.MF)(a),(0,B.Gk)(a)]);return{plannedExecutions:c,pendingApprovals:e,pendingProjections:d,pendingFileWatchIntents:f}})}async anonymizePersonaAttributionByPersonaId(a){C.Qy.parse(a);let b=await this.retirePersonaByPersonaId(a);return this.inWorkspace(async()=>{let c=await (0,p._T)(P,async b=>{let c=await this.loadFile(),d=0,e=c.executions.map(b=>{if(b.personaId!==a)return b;d+=1;let c={...b,enabled:!1,personaRetired:!0,personaArchived:!0};return delete c.personaId,c});return 0===d?0:(await b.assertOwned(),await this.saveFile({...c,executions:e}),d)});c>0&&await this.reconcile();let d=await (0,y.HG)(a);return{...b,plannedExecutions:c,runHistories:d.histories,runRecords:d.records,terminalReceipts:d.terminalReceipts}})}async create(a){let b=this.validateRestrictionFields(a);if(b)return{error:b};let c={...a,...(0,l.vq)(a),trigger:this.normalizeTrigger(a.trigger)},d=this.validateInput(c);if(d)return{error:d};let e=await this.validatePersonaTarget(c);if(e)return{error:e};if(void 0!==a.id&&!/^[A-Za-z0-9._:-]{1,128}$/.test(a.id))return{error:"The id must be 1-128 characters of letters, digits, dot, underscore, colon or hyphen"};if("."===a.id||".."===a.id)return{error:'The id must be a safe identifier, not "." or ".."'};let f=new Date().toISOString(),g=L({...c,folder:a.folder?.trim()||void 0,id:a.id??(0,h.A)(),generationId:(0,h.A)(),createdAt:f,updatedAt:f}),i=await (0,p._T)(P,async a=>{let b=await this.loadFile();if(b.executions.some(a=>a.id===g.id))return{conflict:!0};let c=await this.validatePersonaTarget(g);if(c)return{error:c};if(await a.assertOwned(),(0,F.ye)()){if("ready"!==(0,F.dT)().state)throw Error("Worker is not ready for local plan creation");await (0,G.o3)(g)}return await this.saveFile({...b,executions:[...b.executions,g]}),await (0,z.K7)(g.id),{}});return i.conflict?{error:`A planned execution with id "${g.id}" already exists`,conflict:!0}:i.error?{error:i.error}:(await this.reconcileCommitted(g),{execution:g})}async update(a,b){let c=await (0,p._T)(P,async c=>{let d=await this.loadFile(),e=d.executions.findIndex(b=>b.id===a);if(e<0)return{error:`No planned execution with id "${a}"`};let f=b.folder;if(Object.prototype.hasOwnProperty.call(b,"folder")&&void 0!==f&&"string"!=typeof f)return{error:"Folder must be text"};let g=this.validateRestrictionFields(b);if(g)return{error:g};let h=d.executions[e];if(h.personaRetired||h.personaArchived)return{error:"A retired Persona planned execution is read-only"};let i=L({...h,...b,...Object.prototype.hasOwnProperty.call(b,"folder")?{folder:"string"==typeof f&&f.trim()||void 0}:{},...b.trigger?{trigger:this.normalizeTrigger(b.trigger)}:{},id:a,generationId:this.executionGenerationId(h),createdAt:h.createdAt,updatedAt:new Date().toISOString(),...(0,l.vq)({...h,...b})}),j=this.validateInput(i);if(j)return{error:j};let k=await this.validatePersonaTarget(i);if(k)return{error:k};let m=[...d.executions];return m[e]=i,await c.assertOwned(),await this.saveFile({...d,executions:m}),{execution:i}});if(!c.execution)return c;let d=c.execution;return Object.keys(b).some(a=>"folder"!==a)&&(await this.reconcileCommitted(d),await this.cancelQueued(a,"execution updated",!0),await this.cancelExclusiveWaiting(a,"execution updated",!0)),{execution:d}}async delete(a){return await (0,p._T)(P,async b=>{let c=await this.loadFile(),d=c.executions.find(b=>b.id===a);return!!d&&(await b.assertOwned(),await this.saveFile({...c,executions:c.executions.filter(b=>b.id!==a)}),await (0,z.T5)(a,this.executionGenerationId(d)),await (0,B.nq)(a,this.executionGenerationId(d)),!0)})?(await this.reconcile(),this.lastTriggerErrors.delete(a),await this.cancelQueued(a,"execution deleted",!1),await this.cancelExclusiveWaiting(a,"execution deleted",!1),await (0,y.xC)(a),await (0,A.pC)(a),{success:!0}):{success:!1,error:`No planned execution with id "${a}"`}}normalizeTrigger(a){return a?.type!=="webhook"||a.token?a?.type!=="mcp-poll"||a.cron?a:{...a,cron:(0,u.X)(a.intervalMs)}:{...a,token:(0,h.A)()}}validateRestrictionFields(a){return void 0===a.startRestriction||["unrestricted","singleton","exclusive"].includes(String(a.startRestriction))?void 0!==a.superExclusive&&"boolean"!=typeof a.superExclusive?"Super-Exclusive must be true or false":void 0!==a.emergency&&"boolean"!=typeof a.emergency?"Emergency must be true or false":void 0!==a.exclusive&&"boolean"!=typeof a.exclusive?"Exclusive must be true or false":null:"Start restriction must be one of: unrestricted, singleton, exclusive"}validateInput(a){let b=(0,l.B2)(a.aiGate);if(b)return b;if(void 0!==a.personaArchived||void 0!==a.personaRetired)return"Persona retirement and archive markers are server-managed";if(!a.name?.trim())return"A name is required";if(void 0!==a.folder&&"string"!=typeof a.folder)return"Folder must be text";if(a.folder&&a.folder.trim().length>120)return"Folder must be 120 characters or fewer";if(!a.flowId)return"A flow is required";if(void 0!==a.personaId&&!C.Qy.safeParse(a.personaId).success)return"Persona id must be a safe 1-64 character identifier";if(void 0!==a.behaviorSlotKey&&!C.BI.safeParse(a.behaviorSlotKey).success)return"Behavior slot must be a safe 1-64 character slot key";if(void 0!==a.behaviorSlotKey&&void 0===a.personaId)return"A Behavior slot requires a Persona target";if("string"!=typeof a.prompt)return"A prompt is required (may be empty)";if(void 0!==a.overlapStrategy&&!["skip","queue","parallel","error"].includes(a.overlapStrategy))return"Overlap strategy must be one of: skip, queue, parallel, error";if(void 0!==a.exclusive&&"boolean"!=typeof a.exclusive)return"Exclusive must be true or false";if(void 0!==a.startRestriction&&!["unrestricted","singleton","exclusive"].includes(a.startRestriction))return"Start restriction must be one of: unrestricted, singleton, exclusive";if(void 0!==a.superExclusive&&"boolean"!=typeof a.superExclusive)return"Super-Exclusive must be true or false";if(void 0!==a.emergency&&"boolean"!=typeof a.emergency)return"Emergency must be true or false";if("singleton"===(0,l.vq)(a).startRestriction&&"parallel"===a.overlapStrategy)return"Singleton start restriction cannot use parallel overlap";if(void 0!==a.nonExclusiveBehavior&&!["queue","skip","error"].includes(a.nonExclusiveBehavior))return"When exclusive is on, other triggers must be one of: queue, skip, error";let c=a.trigger;if(!c||"object"!=typeof c)return"A trigger is required";switch(c.type){case"schedule":{let a=(0,r.O9)(c.cron,c.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"webhook":return null;case"file-watch":if(!c.path?.trim())return"A folder or file path to watch is required";if(!Array.isArray(c.events)||0===c.events.length)return"At least one file event is required";return null;case"mcp-poll":if(!c.serverName||!c.toolName)return"A server and tool are required";if(c.cron){let a=(0,r.O9)(c.cron,c.timezone);if(!a.valid)return`Invalid schedule: ${a.error}`}if(c.evaluate?.mode==="new-items"&&!c.evaluate.idField?.trim())return"An id field is required to detect new items";if((c.evaluate?.mode==="llm-gate"||c.evaluate?.mode==="flow-gate")&&!c.evaluate.condition?.trim())return"A condition is required for the AI to check";if(c.evaluate?.mode==="llm-gate"&&!c.evaluate.modelId)return"A model is required to check the condition";if(c.evaluate?.mode==="flow-gate"&&!c.evaluate.flowId)return"A flow is required to check the condition";return null;case"url-watch":{try{let a=new URL(c.url??"");if("http:"!==a.protocol&&"https:"!==a.protocol)return"The URL must start with http:// or https://"}catch{return"A valid URL is required"}let a=(0,r.O9)(c.cron,c.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"flow-event":{let a=c.source;if(1!==[a?.executionId,a?.flowId,a?.flowName,a?.topic].filter(a=>"string"==typeof a&&a.trim().length>0).length)return"Choose exactly one source: a flow, a planned execution, or a signal topic";if(!("string"==typeof a?.topic&&a.topic.trim().length>0)){if(!Array.isArray(c.on)||0===c.on.length)return"Select at least one outcome to react to (completed or error)";if(c.on.some(a=>"completed"!==a&&"error"!==a))return'Outcomes must be "completed" or "error"'}if(c.outputMatch?.regex)try{new RegExp(c.outputMatch.regex)}catch(a){return`Invalid output-match regex: ${a instanceof Error?a.message:String(a)}`}if(void 0!==c.maxChainDepth&&(!Number.isInteger(c.maxChainDepth)||c.maxChainDepth<1))return"Max chain depth must be a positive whole number";if(void 0!==c.minIntervalMs&&(!Number.isFinite(c.minIntervalMs)||c.minIntervalMs<0))return"Minimum interval must be zero or more milliseconds";return null}default:return"Unknown trigger type"}}async validatePersonaTarget(a){if(!a.personaId)return null;if(void 0!==a.id&&!C.Qy.safeParse(a.id).success)return"A Persona-targeted execution id must be a safe 1-64 character identifier";try{let{getBehaviorRevision:b,getPersona:d,getPersonaDeletionTombstone:e,listBehaviorBindings:f}=await Promise.resolve().then(c.bind(c,662457)),g=await d(a.personaId);if(!g)return`Persona "${a.personaId}" was not found`;if("ready"!==g.provisioningState||await e(a.personaId))return`Persona "${a.personaId}" is not ready to accept work`;if("disabled"===g.lifecycleState)return`Persona "${a.personaId}" is not accepting work`;let h=a.behaviorSlotKey??"primary",i=(await f(a.personaId)).find(a=>a.slotKey===h);if(!i)return`Persona "${a.personaId}" has no active Behavior for slot "${h}"`;let j=await b(i.activeRevisionId);if(!j||j.personaId!==a.personaId||j.behaviorId!==i.id||j.slotKey!==h)return`Persona "${a.personaId}" has an invalid Behavior binding for slot "${h}"`;return null}catch(a){return`Persona target validation failed: ${a instanceof Error?a.message:String(a)}`}}isRunning(a){let b=this.running.get(a);return void 0!==b&&b.size>0}addRunning(a,b,c){let d=this.running.get(a);d||(d=new Map,this.running.set(a,d)),d.set(b,c)}removeRunning(a,b){let c=this.running.get(a);c&&(c.delete(b),0===c.size&&this.running.delete(a))}earliestRunningSince(a){let b,c=this.running.get(a);if(c&&0!==c.size){for(let a of c.values())(void 0===b||a<b)&&(b=a);return b}}skippedRecord(a,b){let c=new Date().toISOString();return this.recordSchedulerSkip(a.execution,a.runId,b),{runId:a.runId,conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:a.payload.summary,error:b}}recordSchedulerFire(a,b,c,d){(0,D.z9)((0,D.k)({type:"scheduler.fire",runId:b,source:"schedule",plannedExecution:{id:a.id,name:a.name},outcome:c,...d?{conversationId:d}:{}}))}recordSchedulerSkip(a,b,c){(0,D.z9)((0,D.k)({type:"scheduler.skip",runId:b,source:"schedule",plannedExecution:{id:a.id,name:a.name},reason:(0,D.bW)(c)}))}async cancelQueued(a,b,c){let d=this.queued.get(a);if(d&&0!==d.length){for(let e of(this.queued.delete(a),d)){let d=this.skippedRecord(e,b);if(c)try{await this.persistFireRecord(e.execution,e.payload,d)}catch(b){N.warn(`Failed to record cancelled queued fire for ${a}:`,b)}e.resolve(d)}N.info(`Cancelled ${d.length} queued fire(s) for ${a}: ${b}`)}}drainQueue(a){let b=this.queued.get(a);if(!b||0===b.length||this.isRunning(a))return;let c=b.shift();0===b.length&&this.queued.delete(a),c&&(async()=>{let b=await this.get(a);if(!b||!b.enabled||this.pausedCache){let a=b?b.enabled?"scheduler paused":"execution disabled":"execution deleted";c.resolve(this.skippedRecord(c,a));return}let d=await this.fire(b,c.payload,c.runId);c.resolve(d)})().catch(b=>N.error(`Queued fire failed for ${a}:`,b))}isSchedulerIdle(){for(let a of this.running.values())if(a.size>0)return!1;return!0}isExclusiveActive(){return null!==this.exclusiveHolder||this.exclusiveWaiting.length>0}currentExclusiveBehavior(){return null!==this.exclusiveHolder?this.exclusiveHolderBehavior:this.exclusiveWaiting[0]?.execution.nonExclusiveBehavior??"queue"}exclusiveGateFor(a){return"exclusive"!==(0,l.vq)(a).startRestriction&&this.isExclusiveActive()?this.currentExclusiveBehavior():null}drainExclusive(){null===this.exclusiveHolder&&this.exclusiveWaiting.length>0&&this.isSchedulerIdle()?this.acquireNextExclusive():this.isExclusiveActive()||this.drainBlockedByExclusive()}acquireNextExclusive(){if(null!==this.exclusiveHolder||!this.isSchedulerIdle())return;let a=this.exclusiveWaiting.shift();if(!a)return;let b=a.execution.id;this.exclusiveHolder=b,this.exclusiveHolderBehavior=a.execution.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=(0,l.vq)(a.execution).superExclusive,(async()=>{let c=await this.get(b);if(!c||!c.enabled||this.pausedCache||"exclusive"!==(0,l.vq)(c).startRestriction){let d=c?c.enabled?this.pausedCache?"scheduler paused":"no longer exclusive":"execution disabled":"execution deleted";this.exclusiveHolder===b&&(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1),a.resolve(this.skippedRecord(a,d)),this.drainExclusive();return}this.exclusiveHolderBehavior=c.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=(0,l.vq)(c).superExclusive;let d=await this.fire(c,a.payload,a.runId);a.resolve(d)})().catch(c=>{this.exclusiveHolder===b&&(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1),N.error(`Exclusive acquire failed for ${b}:`,c),a.resolve(this.skippedRecord(a,"exclusive acquire failed")),this.drainExclusive()})}drainBlockedByExclusive(){if(0===this.blockedByExclusive.length)return;let a=this.blockedByExclusive;for(let b of(this.blockedByExclusive=[],a))(async()=>{let a=await this.get(b.execution.id);if(!a||!a.enabled||this.pausedCache){let c=a?a.enabled?"scheduler paused":"execution disabled":"execution deleted";b.resolve(this.skippedRecord(b,c));return}let c=await this.fire(a,b.payload,b.runId);b.resolve(c)})().catch(a=>N.error(`Deferred non-exclusive fire failed for ${b.execution.id}:`,a))}async cancelExclusiveWaiting(a,b,c){let d=[];if(this.exclusiveWaiting=this.exclusiveWaiting.filter(b=>b.execution.id!==a||(d.push(b),!1)),this.blockedByExclusive=this.blockedByExclusive.filter(b=>b.execution.id!==a||(d.push(b),!1)),0!==d.length){for(let e of d){let d=this.skippedRecord(e,b);if(c)try{await this.persistFireRecord(e.execution,e.payload,d)}catch(b){N.warn(`Failed to record cancelled exclusive fire for ${a}:`,b)}e.resolve(d)}N.info(`Cancelled ${d.length} exclusive-related fire(s) for ${a}: ${b}`)}}async cancelAllExclusiveWaiting(a,b){let c=[...this.exclusiveWaiting,...this.blockedByExclusive];if(this.exclusiveWaiting=[],this.blockedByExclusive=[],0!==c.length){for(let d of c){let c=this.skippedRecord(d,a);if(b)try{await this.persistFireRecord(d.execution,d.payload,c)}catch(a){N.warn(`Failed to record cancelled exclusive fire for ${d.execution.id}:`,a)}d.resolve(c)}N.info(`Cancelled ${c.length} exclusive-related fire(s): ${a}`)}}inspectOperations(a){return{workspace:this.workspace,started:this.started,pausedAtLastReconcile:this.pausedCache,armedTriggers:this.armed.size,runningRuns:Array.from(this.running.values()).reduce((a,b)=>a+b.size,0),overlapQueued:Array.from(this.queued.values()).reduce((a,b)=>a+b.length,0),maxOverlapDepth:Array.from(this.queued.values()).reduce((a,b)=>Math.max(a,b.length),0),exclusiveWaiting:this.exclusiveWaiting.length,blockedByExclusive:this.blockedByExclusive.length,queueCap:R.MAX_QUEUE_DEPTH,ownedWorkerRunIds:new Set(this.workerLocalClaims),statuses:a.map(a=>({id:a.id,status:this.getStatus(a)}))}}getStatus(a){let b=this.armed.get(a.id),c=!!(a.personaRetired||a.personaArchived||K(a)),d=this.workerRecoveryStatuses.get(a.id),e=(!(0,F.ye)()||d?.eligible===!0)&&!c&&(void 0!==b||a.enabled&&"webhook"===a.trigger.type&&this.started&&!this.pausedCache),f=this.earliestRunningSince(a.id),g=e?void 0:a.enabled?this.pausedCache?"paused":void 0:"disabled",h=this.exclusiveHolder??void 0,i=a.id!==this.exclusiveHolder&&"exclusive"!==(0,l.vq)(a).startRestriction&&this.isExclusiveActive();return{armed:e,...d?{workerRecovery:{...d,state:e?"armed":d.state}}:{},notArmedReason:g,nextRun:b?.nextRun?b.nextRun():void 0,lastTriggerError:this.lastTriggerErrors.get(a.id),running:void 0!==f,runningSince:f,exclusiveHolderId:h,blockedByExclusive:i}}async runNow(a){let b=await this.get(a);if(!b)return{error:`No planned execution with id "${a}"`};if(b.personaRetired||b.personaArchived)return{error:"A retired Persona planned execution cannot be run"};let c=(0,h.A)();return await (0,g.QO)(),{record:await this.fire(b,{kind:"manual",summary:"Manual run",...b.personaId?{deliveryId:`manual-${c}`}:{}},c,!0)}}async completeApprovedPersonaRun(a){return this.inWorkspace(async()=>{let b=await this.get(a.executionId),c=(await (0,y.Sw)(a.executionId)).find(b=>b.runId===a.runId);if(!c&&a.terminalPublication&&(c={runId:a.runId,executionGenerationId:a.terminalPublication.execution.generationId,conversationId:a.conversationId,firedAt:a.firedAt,status:"needs_approval",triggerSummary:a.triggerSummary,personaId:a.personaAttribution.personaId,activityId:a.personaAttribution.activityId,behaviorRevisionId:a.personaAttribution.behaviorRevisionId}),!c)return null;let d={status:a.status,finishedAt:a.finishedAt,outputText:a.outputText,usage:a.usage,error:a.error,pendingApproval:void 0};if(!a.terminalPublication)return(0,y.s1)(a.executionId,a.runId,d);let e={...b??{},...a.terminalPublication.execution,generationId:a.terminalPublication.execution.generationId??b?.generationId,personaId:a.terminalPublication.execution.personaId},f={...c,...d,runId:a.runId},g={kind:a.terminalPublication.triggerKind,summary:c.triggerSummary,chainDepth:a.terminalPublication.chainDepth,deliveryId:a.terminalPublication.deliveryId},h=await this.buildFlowRunEvent(e,f,g),i={id:h.deliveryId,executionId:e.id,runId:f.runId,event:h,record:f,createdAt:f.finishedAt??new Date().toISOString()},j=this.personaProjectionId(e,f.runId),k=await (0,z.qn)(e.id,e.generationId,j,()=>(0,y.bk)(e.id,f,i));return k?(await this.drainTerminalPublications(),await (0,z.Zg)(j),k.record):null})}sourceDeliveryId(a,b,c){return`${b}-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${b}\0${c}`).digest("hex")}`}stablePersonaDeliveryId(a,b){return a.personaId&&b.deliveryId?b.deliveryId:void 0}effectiveRunId(a,b,c){if(c)return c;let d=this.stablePersonaDeliveryId(a,b);return d?`delivery-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${d}`).digest("hex").slice(0,48)}`:(0,h.A)()}async persistFireRecord(a,b,c,d){return((0,F.ye)()&&this.workerLocalClaims.has(c.runId)&&(c={...c,executionGenerationId:this.executionGenerationId(a)},await (0,G.kp)(a,c)),this.stablePersonaDeliveryId(a,b))?(0,y.bk)(a.id,c,d):(await (0,y.Hy)(a.id,c),{record:c,inserted:!0,firstTerminalTransition:"completed"===c.status||"error"===c.status})}fire(a,b,c,d=!1){let e=this.effectiveRunId(a,b,c);return this.inWorkspace(()=>this.fireInternal(a,b,e,d)).finally(()=>this.conditionChecks.delete(e))}checkAutomationCondition(a,b,d){let e=this.conditionChecks.get(d);if(e)return e;let f=(async()=>{let e=a.aiGate,f=(0,l.B2)(e);if(f)throw Error(f);if(await this.assertCurrentSchedule(a),this.stablePersonaDeliveryId(a,b)){let b=(await (0,y.Sw)(a.id)).find(a=>a.runId===d);if(b?.conditionRejected)return{fire:!1,reason:"Previously checked delivery"};if(b?.status==="completed"||b?.status==="needs_approval")return{fire:!0,reason:"Previously admitted delivery"}}if(await (0,n.C3)())throw Error("encryption locked");let{evaluateTriggerAiGate:g,DEFAULT_MAX_CALLS_PER_DAY:h}=await c.e(85112).then(c.bind(c,785112)),i=new Date().toISOString().slice(0,10),j=e.maxCallsPerDay??h;await (0,A.FP)(a.id,a=>{let b=a.llmCallsDay===i?a.llmCallsCount??0:0;if(b>=j)throw Error(`Daily AI-check budget reached (${j}/day) — checks resume tomorrow`);return{...a,llmCallsDay:i,llmCallsCount:b+1}},()=>this.assertCurrentSchedule(a));let k=await g({kind:b.kind,occurredAt:new Date().toISOString(),automationName:a.name,..."timezone"in a.trigger?{timezone:a.trigger.timezone}:{},summary:b.summary,context:b.context},e,b.chainDepth);return await this.assertCurrentSchedule(a),k})();return this.conditionChecks.set(d,f),f}async admitPersonaFire(a,b,c){let d,e;if(!a.personaId)throw TypeError("Durable Persona admission requires a Persona target.");let f=this.effectiveRunId(a,b,c),g=new Promise((a,b)=>{d=a,e=b}),h=this.inWorkspace(()=>this.fireInternal(a,b,f,!1,{resolve:d,reject:e})).finally(()=>this.conditionChecks.delete(f));return h.catch(e),{...await g,completion:h}}admitDurableFileWatchIntent(a){let b=this.fileWatchIntentAdmissions.get(a.id);if(b)return b;let c=this.inWorkspace(async()=>{let b=await this.get(a.execution.id);if(!b||this.executionGenerationId(b)!==this.executionGenerationId(a.execution))return void await (0,B.pZ)(a.id);let c=await this.admitPersonaFire(a.execution,a.payload);await (0,B.pZ)(a.id),c.completion.catch(b=>N.error(`File-watch continuation failed for ${a.execution.id}:`,b))});return this.fileWatchIntentAdmissions.set(a.id,c),c.finally(()=>{this.fileWatchIntentAdmissions.get(a.id)===c&&this.fileWatchIntentAdmissions.delete(a.id)}).catch(()=>{}),c}async reconcileDurableFileWatchIntents(a=!0){let b=(await (0,B.KC)()).map(a=>this.admitDurableFileWatchIntent(a));if(a)await Promise.all(b);else for(let a of b)a.catch(a=>N.warn("Durable file-watch intent remains pending:",a))}personaProjectionId(a,b){return`projection-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${b}`).digest("hex").slice(0,48)}`}continuePersonaSchedulerProjection(a,b,d){let e=this.personaProjectionCompletions.get(b.id);if(e)return e;let f=this.inWorkspace(async()=>{let{getPersonaFlowDispatch:e}=await Promise.resolve().then(c.bind(c,14130)),f=d;for(;"queued"===f.state||"running"===f.state||"waiting"===f.state&&("delivery"===f.waitingReason||"interrupted"===f.waitingReason);){await new Promise(a=>setTimeout(a,50));let a=await e(f.id);if(!a)throw Error(`Persona dispatch ${f.id} disappeared.`);f=a}let g=b.payload,h=this.recordFromPersonaDispatch(a,f,{runId:b.runId,conversationId:b.conversationId,firedAt:b.firedAt,payload:g});return"waiting"===f.state&&"approval"===f.waitingReason&&(h=await this.registerPersonaPendingApproval(a,h,g)),h=await this.finishFireRecord(a,g,h,b.id),("completed"===f.state||"error"===f.state||"cancelled"===f.state)&&await (0,z.Zg)(b.id),h});return this.personaProjectionCompletions.set(b.id,f),f.finally(()=>{this.personaProjectionCompletions.get(b.id)===f&&this.personaProjectionCompletions.delete(b.id)}).catch(()=>{}),f}async reconcilePersonaSchedulerProjections(a=!0){let b=await (0,z.eP)(),d=[];for(let e of b)try{let b={...await this.get(e.execution.id)??{},...e.execution,personaId:e.execution.personaId},{submitPersonaFlowDispatch:f}=await Promise.resolve().then(c.bind(c,14130)),g=await f(e.submission,{startPump:!await (0,n.C3)()}),h=await (0,z.mn)(e.id,g.dispatch.id),i=this.continuePersonaSchedulerProjection(b,h,g.dispatch);a?d.push(i):i.catch(a=>{N.warn(`Persona scheduler projection ${e.id} remains pending:`,a)})}catch(b){if(N.warn(`Failed to reconcile Persona scheduler projection ${e.id}:`,b),a)throw b}a&&await Promise.all(d)}async firePersonaInternal(a,b,d,e,f){let g=this.stablePersonaDeliveryId(a,b),j=this.executionGenerationId(a),k=g?`conversation-${(0,i.createHash)("sha256").update(`${a.id}\0${j}\0${g}`).digest("hex").slice(0,48)}`:(0,h.A)();this.recordSchedulerFire(a,d,"fired",k);let l=!1;try{N.info(`Durably admitting "${a.name}" (${b.kind})`);let h=await (0,y.Sw)(a.id),i=h.length>0?h[h.length-1]:null,m=g?{executionName:a.name,trigger:b.kind,deliveryId:g}:{executionName:a.name,trigger:b.kind,now:e,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,lastRun:i?{at:i.firedAt,status:i.status}:null,nextPlannedRun:this.getStatus(a).nextRun??null},o=a.approvalPolicy??"auto",p=a.saveConversations||"pause"===o?"conversation":"ephemeral",q={prompt:this.composePrompt(a.prompt,b,m),mode:p,conversationId:k,runId:d,source:"schedule",plannedExecutionId:a.id,plannedExecutionName:a.name,parentRunId:b.parentConversationId,chainDepth:b.chainDepth??0,requireApproval:"auto"!==o,onApprovalRequired:o,debug:!1,userTurn:!0},r="manual"===b.kind||"schedule"===b.kind||"schedule-catchup"===b.kind,s={personaId:a.personaId,idempotencyKey:`planned:${a.id}:${j}:${b.deliveryId??d}`,kind:r?"scheduled":"triggered",source:{kind:r?"schedule":"trigger",sourceId:`${a.id}:${j}`},...a.behaviorSlotKey?{behaviorSlotKey:a.behaviorSlotKey}:{},relationKey:`planned-execution:${a.id}:${j}`,summary:`${a.name}: ${b.summary}`.slice(0,2e4),flowInput:q},t=this.personaProjectionId(a,d),u=await (0,z.A8)({schemaVersion:1,id:t,execution:{id:a.id,generationId:j,name:a.name,flowId:a.flowId,personaId:a.personaId},payload:{kind:b.kind,summary:b.summary,chainDepth:b.chainDepth,parentConversationId:b.parentConversationId,deliveryId:b.deliveryId},submission:s,runId:d,conversationId:k,firedAt:e,createdAt:e,updatedAt:e}),{submitPersonaFlowDispatch:v}=await Promise.resolve().then(c.bind(c,14130)),w=await (0,n.C3)(),x=await v(u.submission,{startPump:!w}),A=await (0,z.mn)(u.id,x.dispatch.id);return l=!0,f?.resolve({runId:d,dispatchId:x.dispatch.id}),this.continuePersonaSchedulerProjection(a,A,x.dispatch)}catch(c){if(l||f?.reject(c),N.error(`Persona admission/continuation failed for "${a.name}":`,c),f)throw c;return{runId:d,executionGenerationId:j,conversationId:k,firedAt:e,finishedAt:new Date().toISOString(),status:"skipped",triggerSummary:b.summary,error:"Persona work remains durably pending scheduler projection"}}}async fireInternal(a,b,d=(0,h.A)(),e=!1,f){let j,k=new Date().toISOString(),m=this.stablePersonaDeliveryId(a,b),p=await this.get(a.id);if((0,F.ye)()&&("schedule"===b.kind||"schedule-catchup"===b.kind)&&!this.workerLocalClaims.has(d))return this.finishFireRecord(a,b,{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Worker automatic schedule execution requires a local recovery admission"});if(a.personaRetired||a.personaArchived||p?.personaRetired||p?.personaArchived){let c=TypeError("A retired Persona planned execution cannot be fired");return f?.reject(c),{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:c.message}}if(K(a)||K(p)){let c=TypeError(Q);return f?.reject(c),{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:c.message}}let q=(0,l.Vw)(a),r=(0,l.Vw)(p);if((q||r)&&(!p||!q||!r||a.personaId!==p.personaId||(a.behaviorSlotKey??"primary")!==(p.behaviorSlotKey??"primary")||this.executionGenerationId(a)!==this.executionGenerationId(p))){let c=TypeError("Persona planned execution authority changed before firing");return f?.reject(c),{runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:c.message}}if(void 0!==a.aiGate&&null!==a.aiGate&&"manual"!==b.kind){let c,e;try{c=await this.checkAutomationCondition(a,b,d),await this.assertCurrentSchedule(a)}catch(a){e=a instanceof Error?a.message.replace(/^config:\s*/,""):String(a)}if(!c?.fire){let g={runId:d,executionGenerationId:this.executionGenerationId(a),conversationId:"",firedAt:k,finishedAt:new Date().toISOString(),status:e&&!m?"error":"skipped",triggerSummary:b.summary,...e?{}:{conditionRejected:!0},error:e??`AI condition not met${c?.reason?`: ${c.reason}`:""}`};e?this.lastTriggerErrors.set(a.id,e):this.lastTriggerErrors.delete(a.id);let h=await this.persistFireRecord(a,b,g);return e?f?.reject(Error(e)):f?.resolve({runId:d,record:h.record}),h.record}this.lastTriggerErrors.delete(a.id)}let s=(0,l.vq)(a),t="flow-event"===b.kind,u=e||t,v=null,w=async()=>{v=(0,o.wl)(d,{force:!0});let b=await (0,o.bo)({exceptRunId:d,reason:`Automation EMERGENCY initiated by planned execution ${a.id}`});b.failures.length>0&&N.warn(`EMERGENCY cancellation for "${a.name}" settled with ${b.failures.length} failure(s)`)};if(a.personaId){u||(s.emergency?await w():s.superExclusive?v=await (0,o.vY)(d):await (0,o.ge)(d));try{return await this.firePersonaInternal(a,b,d,k,f)}finally{v?.()}}if(await (0,n.C3)()){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"encryption locked"};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.info(`Skipped fire for "${a.name}" — encryption locked`),e.record}if(!u&&s.emergency&&await w(),!u){if("exclusive"!==s.startRestriction||s.emergency){if(!s.emergency&&this.isExclusiveActive()){let c=this.currentExclusiveBehavior();if("skip"===c){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Skipped — an exclusive execution holds the scheduler lock"};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.info(`Skipped non-exclusive fire for "${a.name}" — exclusive lock held`),e.record}if("error"===c){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"error",triggerSummary:b.summary,error:"Rejected — an exclusive execution holds the scheduler lock"},e=await this.persistFireRecord(a,b,c);return N.info(`Rejected non-exclusive fire for "${a.name}" — exclusive lock held`),e.record}let e=this.blockedByExclusive.length;if(e>=R.MAX_QUEUE_DEPTH){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:`Exclusive-block queue full (cap ${R.MAX_QUEUE_DEPTH}) — fire dropped`};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.warn(`Exclusive-block queue full for "${a.name}" — dropped fire`),e.record}return N.info(`Deferred non-exclusive fire for "${a.name}" — exclusive lock held (depth ${e+1})`),this.recordSchedulerFire(a,d,"queued"),new Promise(c=>{this.blockedByExclusive.push({execution:a,payload:b,runId:d,resolve:c})})}}else if(this.exclusiveHolder!==a.id){if(null!==this.exclusiveHolder||!this.isSchedulerIdle()){let c=this.exclusiveWaiting.length;if(c>=R.MAX_QUEUE_DEPTH){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:`Exclusive wait queue full (cap ${R.MAX_QUEUE_DEPTH}) — fire dropped`};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.warn(`Exclusive wait queue full for "${a.name}" — dropped fire`),e.record}return N.info(`Exclusive "${a.name}" waiting for scheduler to idle (depth ${c+1})`),this.recordSchedulerFire(a,d,"queued"),new Promise(c=>{this.exclusiveWaiting.push({execution:a,payload:b,runId:d,resolve:c})})}this.exclusiveHolder=a.id,this.exclusiveHolderBehavior=a.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=s.superExclusive,N.info(`Exclusive "${a.name}" reserved the scheduler idle window`)}}let x=a.overlapStrategy??"skip";if(!e&&!s.emergency&&m&&this.running.get(a.id)?.has(d))return{runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Stable delivery is already in progress"};if(!e&&!s.emergency&&this.isRunning(a.id)){if("skip"===x){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:"Previous run still in progress"};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.info(`Skipped overlapping fire for "${a.name}"`),e.record}if("error"===x){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"error",triggerSummary:b.summary,error:"Overlapping run rejected (overlapStrategy=error)"},e=await this.persistFireRecord(a,b,c);return N.info(`Rejected overlapping fire for "${a.name}" (overlapStrategy=error)`),e.record}if("queue"===x){let c=this.queued.get(a.id)?.length??0;if(c>=R.MAX_QUEUE_DEPTH){let c={runId:d,conversationId:"",firedAt:k,finishedAt:k,status:"skipped",triggerSummary:b.summary,error:`Overlap queue full (cap ${R.MAX_QUEUE_DEPTH}) — fire dropped`};this.recordSchedulerSkip(a,d,c.error);let e=await this.persistFireRecord(a,b,c);return N.warn(`Overlap queue full for "${a.name}" — dropped fire`),e.record}return N.info(`Queued overlapping fire for "${a.name}" (depth ${c+1})`),this.recordSchedulerFire(a,d,"queued"),new Promise(c=>{let e=this.queued.get(a.id)??[];e.push({execution:a,payload:b,runId:d,resolve:c}),this.queued.set(a.id,e)})}}u||(s.superExclusive&&!v?v=await (0,o.vY)(d):await (0,o.ge)(d)),!u&&s.superExclusive&&(this.exclusiveHolder=a.id,this.exclusiveHolderBehavior=a.nonExclusiveBehavior??"queue",this.exclusiveHolderPersistent=!0,N.info(`Super-Exclusive "${a.name}" acquired the workspace start barrier`)),this.addRunning(a.id,d,k),this.exclusiveHolder!==a.id||this.exclusiveHolderPersistent||(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1,this.drainExclusive()),v&&s.emergency&&!s.superExclusive&&(v(),v=null);let z=m?`conversation-${(0,i.createHash)("sha256").update(`${a.id}\0${this.executionGenerationId(a)}\0${m}`).digest("hex").slice(0,48)}`:(0,h.A)();this.recordSchedulerFire(a,d,"fired",z);try{N.info(`Firing "${a.name}" (${b.kind})`);let e=await (0,y.Sw)(a.id),f=e.length>0?e[e.length-1]:null,h=m?{executionName:a.name,trigger:b.kind,deliveryId:m}:{executionName:a.name,trigger:b.kind,now:k,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,lastRun:f?{at:f.firedAt,status:f.status}:null,nextPlannedRun:this.getStatus(a).nextRun??null},i=a.approvalPolicy??"auto",l=a.saveConversations||"pause"===i?"conversation":"ephemeral",n={prompt:this.composePrompt(a.prompt,b,h),mode:l,conversationId:z,runId:d,source:"schedule",plannedExecutionId:a.id,plannedExecutionName:a.name,parentRunId:b.parentConversationId,chainDepth:b.chainDepth??0,requireApproval:"auto"!==i,onApprovalRequired:i,debug:!1,userTurn:!0};if(a.personaId){let{getPersonaFlowDispatch:e,submitPersonaFlowDispatch:f}=await Promise.resolve().then(c.bind(c,14130)),h="manual"===b.kind||"schedule"===b.kind||"schedule-catchup"===b.kind;if("manual"!==b.kind&&!await this.isCurrentSchedule(a))throw Error("Schedule changed before Persona dispatch");await (0,g.QO)();let i=(await f({personaId:a.personaId,idempotencyKey:`planned:${a.id}:${b.deliveryId??d}`,kind:h?"scheduled":"triggered",source:{kind:h?"schedule":"trigger",sourceId:a.id},...a.behaviorSlotKey?{behaviorSlotKey:a.behaviorSlotKey}:{},relationKey:`planned-execution:${a.id}`,summary:`${a.name}: ${b.summary}`.slice(0,2e4),flowInput:n})).dispatch;for(;"queued"===i.state||"running"===i.state||"waiting"===i.state&&("delivery"===i.waitingReason||"interrupted"===i.waitingReason);){await new Promise(a=>setTimeout(a,50));let a=await e(i.id);if(!a)throw Error(`Persona dispatch ${i.id} disappeared.`);i=a}j=this.recordFromPersonaDispatch(a,i,{runId:d,conversationId:z,firedAt:k,payload:b}),"waiting"===i.state&&"approval"===i.waitingReason&&(j=await this.registerPersonaPendingApproval(a,j,b))}else{let{runFlow:e}=await Promise.resolve().then(c.bind(c,654432));if((0,F.ye)()&&this.workerLocalClaims.has(d)){let b=await this.loadFile(),c=b.executions.find(b=>b.id===a.id);if(b.paused||!c||!c.enabled||J(c)!==J(a))throw Error("Worker schedule definition or stop controls changed before execution");await (0,G.PZ)(c,d)}if("manual"!==b.kind&&!await this.isCurrentSchedule(a))throw Error("Schedule changed before execution");await (0,g.QO)();let f=await e({flowId:a.flowId,...n});j=await this.recordFromResult(a,f,{runId:d,conversationId:z,firedAt:k,payload:b})}}catch(c){if(c instanceof g.Mr)throw c;j={runId:d,conversationId:z,firedAt:k,finishedAt:new Date().toISOString(),status:"error",triggerSummary:b.summary,error:c instanceof Error?c.message:String(c)},N.error(`Run crashed for "${a.name}":`,c)}finally{this.removeRunning(a.id,d),this.exclusiveHolder!==a.id||this.isRunning(a.id)||(this.exclusiveHolder=null,this.exclusiveHolderPersistent=!1,N.info(`Super-Exclusive "${a.name}" released the scheduler lock`)),v?.(),v=null,this.drainExclusive(),this.drainQueue(a.id)}return(0,F.ye)()&&this.workerLocalClaims.has(d)&&(j.executionGenerationId=this.executionGenerationId(a)),this.finishFireRecord(a,b,j)}async recordFromResult(a,b,c){let{runId:d,conversationId:e,firedAt:f,payload:g}=c,h=new Date().toISOString(),i="awaiting_tool_approval"===b.status,j="error"===b.status&&b.error?.details?.type==="approval_required";if(i||j){let c=(b.pendingToolCalls??[]).map(a=>({id:a.id,name:"function"===a.type?a.function.name:String(a.type)})),k={runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"needs_approval",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:j?b.error?.message??"Tool approval required":"Awaiting tool approval",pendingApproval:{tool:c[0]?.name??b.error?.details?.name,toolCallId:c[0]?.id,pendingToolCalls:c.length>0?c:void 0}};return i&&await this.registerPendingApproval(a,k,c,g),k}return{runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"completed"===b.status?"completed":"capped"===b.status?"capped":"error",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:"completed"===b.status||"capped"===b.status?void 0:b.error?.message??`Run ended with status "${b.status}"`,...b.error?.details?.code?.startsWith("static_")?{errorDetails:{type:b.error.details.type?.slice(0,200),code:b.error.details.code.slice(0,200),name:b.error.details.name?.slice(0,200),param:b.error.details.param?.slice(0,200),status:b.error.details.status}}:{}}}recordFromPersonaDispatch(a,b,c){let d=b.outcome,e="waiting"===b.state&&"approval"===b.waitingReason,f="waiting"===b.state&&"debug"===b.waitingReason,g=e||f,h="completed"===b.state&&d?.status==="completed",i="completed"===b.state&&d?.status==="capped";return{runId:d?.runId??c.runId,executionGenerationId:this.executionGenerationId(a),conversationId:d?.conversationId??c.conversationId,firedAt:c.firedAt,finishedAt:new Date().toISOString(),status:g?"needs_approval":h?"completed":i?"capped":"error",triggerSummary:c.payload.summary,outputText:this.truncateOutput(d?.outputText??""),error:g?f?"Paused in debugger":"Awaiting tool approval":h||i?void 0:"waiting"===b.state?"running"===b.waitingReason?'Run ended with status "running"':`Persona dispatch is waiting (${b.waitingReason??"unknown reason"})`:b.error?.message??`Persona dispatch ended with state "${b.state}"`,personaId:b.personaId,activityId:b.activityId,behaviorRevisionId:b.behaviorRevisionId}}async registerPersonaPendingApproval(a,b,d){let e=[];try{let{loadConversationState:a}=await Promise.resolve().then(c.bind(c,825867)),d=await a(b.conversationId);e=(d?.pendingToolCalls??[]).map(a=>({id:a.id,name:"function"===a.type?a.function.name:String(a.type)}))}catch(b){N.warn(`Failed to load Persona approval metadata for "${a.name}":`,b)}let f={...b,pendingApproval:{tool:e[0]?.name,toolCallId:e[0]?.id,pendingToolCalls:e.length>0?e:void 0}};return await this.registerPendingApproval(a,f,e,d),f}async registerPendingApproval(a,b,d,e){try{let f;try{let{flowService:b}=await Promise.resolve().then(c.bind(c,614331));f=(await b.getFlow(a.flowId))?.name??void 0}catch(b){N.debug(`Could not resolve flow name for pending approval (${a.flowId}):`,b)}let{putPendingApproval:g}=await Promise.resolve().then(c.bind(c,966733));await g({approvalId:b.conversationId,conversationId:b.conversationId,plannedExecutionId:a.id,flowId:a.flowId,flowName:f,runId:b.runId,triggerSummary:b.triggerSummary,pendingToolCalls:d,createdAt:b.firedAt,...a.personaId&&e.deliveryId?{terminalPublication:{triggerKind:e.kind,chainDepth:e.chainDepth??0,deliveryId:e.deliveryId,execution:{id:a.id,generationId:this.executionGenerationId(a),name:a.name,flowId:a.flowId,personaId:a.personaId}}}:{}})}catch(b){if(N.warn(`Failed to register pending approval for "${a.name}":`,b),a.personaId)throw b}}async finishFireRecord(a,b,c,d){let e="completed"===c.status||"error"===c.status,f=!!this.stablePersonaDeliveryId(a,b),g=e?await this.buildFlowRunEvent(a,c,b):void 0,h=f&&g?{id:g.deliveryId,executionId:a.id,runId:c.runId,event:g,record:c,createdAt:c.finishedAt??new Date().toISOString()}:void 0,i=d?await (0,z.qn)(a.id,a.generationId,d,()=>this.persistFireRecord(a,b,c,h)):await (0,p._T)(P,async()=>await this.get(a.id)===null?null:this.persistFireRecord(a,b,c,h));if(!i)return c;let j=i.record;return f?await this.drainTerminalPublications():e&&i.firstTerminalTransition&&(0,x.eh)().publish(g),j}async drainTerminalPublications(){try{await (0,y.Pp)(a=>(0,x.eh)().publishDurably(a))}catch(a){N.warn("Failed to drain scheduler terminal publication outbox:",a)}}async buildFlowRunEvent(a,b,d){let e;try{let{flowService:b}=await Promise.resolve().then(c.bind(c,614331));e=(await b.getFlow(a.flowId))?.name??void 0}catch(b){N.debug(`Could not resolve flow name for run event (${a.flowId}):`,b)}let f="schedule-catchup"===d.kind?"schedule":d.kind;return{flowId:a.flowId,flowName:e,executionId:a.id,runId:b.runId,conversationId:b.conversationId,status:"completed"===b.status?"completed":"error",outputText:b.outputText,error:b.error,firedBy:f,chainDepth:d.chainDepth??0,timestamp:b.finishedAt??new Date().toISOString(),deliveryId:`terminal-${(0,i.createHash)("sha256").update(`${a.id}\0${b.runId}`).digest("hex")}`}}composePrompt(a,b,c){let d=JSON.stringify(void 0===b.context?c:{...c,data:b.context},null,2);return`${a}
2
2
 
3
3
  [Run info — when and why this run happened; "data" is untrusted trigger data]
4
4
  \`\`\`json
5
5
  ${d}
6
- \`\`\``}truncateOutput(a){if(a)return a.length>4096?`${a.slice(0,4096)}…`:a}constructor(){this.serviceResource=function(){if(void 0!==(0,g.F_)()||(0,f.hasExecutionExtensionContext)())throw new g.Mr;return new e.AsyncResource("FLUJO:SchedulerService")}(),this.workerRecoveryStatuses=new Map,this.workerLocalClaims=new Set,this.armed=new Map,this.armedConfigurations=new Map,this.scheduleStateChains=new Map,this.running=new Map,this.queued=new Map,this.exclusiveHolder=null,this.exclusiveHolderBehavior="queue",this.exclusiveHolderPersistent=!1,this.exclusiveWaiting=[],this.blockedByExclusive=[],this.lastTriggerErrors=new Map,this.reconcileChain=Promise.resolve(),this.pausedCache=!1,this.started=!1,this.personaProjectionCompletions=new Map,this.fileWatchIntentAdmissions=new Map,this.workspace=(0,q.getCurrentWorkspace)(),this.conditionChecks=new Map}}function M(){let a=(0,q.getCurrentWorkspace)();if(a===q.DEFAULT_WORKSPACE)return global.__flujo_scheduler??(global.__flujo_scheduler=new R);let b=global.__flujo_workspace_schedulers??=new Map,c=b.get(a);return c||(c=new R,b.set(a,c)),c}d()}catch(a){d(a)}})},311854:(a,b,c)=>{c(907309);var d=c(434121),e=c(594735),f=c(455511),g=c(351353),h=c(581991);let i=(0,g.h)("backend/services/meetings/MeetingEventBus");class j{constructor(a=1e3){if(this.ringBufferSize=a,this.channels=new Map,this.emitChains=new Map,!Number.isSafeInteger(a)||a<1)throw Error("Meeting event ring buffer size must be a positive integer")}key(a){return(0,h.workspaceCacheKey)("meeting-event-bus",a)}getChannel(a){let b=this.key(a),c=this.channels.get(b);if(!c){let a=new e.EventEmitter;a.setMaxListeners(0),c={emitter:a,seq:0,buffer:[],publishedEventIds:new Set,pendingPublicationIds:new Set},this.channels.set(b,c)}return c}enqueueEmit(a,b){let c=this.key(a),d=(this.emitChains.get(c)??Promise.resolve()).catch(()=>{}).then(b);return this.emitChains.set(c,d),d.catch(()=>{}).finally(()=>{this.emitChains.get(c)===d&&this.emitChains.delete(c)}),d}publish(a,b){if(0===b.length)return;let c=this.getChannel(a);for(let a of[...b].sort((a,b)=>a.seq-b.seq))c.publishedEventIds.has(a.eventId)||(c.publishedEventIds.add(a.eventId),c.seq=Math.max(c.seq,a.seq+1),c.buffer.push(a),c.buffer.sort((a,b)=>a.seq-b.seq),c.buffer.length>this.ringBufferSize&&c.buffer.shift(),c.emitter.emit("event",a))}async publishDurableEventIds(a,b){try{let c=(await (0,d.DW)(a)).filter(a=>b.has(a.eventId));this.publish(a,c);let e=this.getChannel(a);for(let a of c)e.pendingPublicationIds.delete(a.eventId)}catch(b){i.warn(`Failed to reconcile an ambiguous meeting append for ${a}`,{error:b})}}emit(a,b){return this.enqueueEmit(a,async()=>{let c=b.eventId?b:{...b,eventId:(0,f.randomUUID)()};try{let{event:b,appended:e}=await (0,d.mt)(a,c),f=this.getChannel(a);return(e||f.pendingPublicationIds.has(b.eventId))&&(this.publish(a,[b]),f.pendingPublicationIds.delete(b.eventId)),b}catch(b){if(b instanceof d.w5){let c=this.getChannel(a);for(let a of b.eventIds)c.pendingPublicationIds.add(a);await this.publishDurableEventIds(a,new Set(b.eventIds))}throw b}})}emitBatch(a,b,c){return this.enqueueEmit(a,async()=>{let e=c.map(a=>a.eventId?a:{...a,eventId:(0,f.randomUUID)()});try{let{events:c,appendedEvents:f}=await (0,d.cO)(a,b,e),g=this.getChannel(a),h=[...f,...c.filter(a=>g.pendingPublicationIds.has(a.eventId))];for(let b of(this.publish(a,h),h))g.pendingPublicationIds.delete(b.eventId);return c}catch(b){if(b instanceof d.w5){let c=this.getChannel(a);for(let a of b.eventIds)c.pendingPublicationIds.add(a);await this.publishDurableEventIds(a,new Set(b.eventIds))}throw b}})}emitterFor(a){return(0,h.bindToCurrentWorkspace)(async b=>{try{return await this.emit(a,b)}catch(b){throw i.warn(`Failed to emit meeting event for ${a}`,{error:b}),b}})}getBufferedSince(a,b){let c=this.channels.get(this.key(a));return c?c.buffer.filter(a=>a.seq>=b):[]}currentSeq(a){return this.channels.get(this.key(a))?.seq??0}async latestSequence(a){return(0,d.IM)(a)}async replaySince(a,b){let c=this.channels.get(this.key(a));return c&&c.buffer.length>0&&b>=c.buffer[0].seq?c.buffer.filter(a=>a.seq>=b):(0,d.DW)(a,{fromSeq:b})}subscribe(a,b){let c=this.getChannel(a),d=(0,h.bindToCurrentWorkspace)(c=>{try{b(c)}catch(b){i.warn(`Meeting event listener threw for ${a}`,{error:b})}});c.emitter.on("event",d);let e=!0;return()=>{e&&(e=!1,c.emitter.off("event",d))}}clear(a){if(a){let b=this.key(a);this.channels.delete(b),this.emitChains.delete(b);return}this.channels.clear(),this.emitChains.clear()}}globalThis.__flujoMeetingEventBus??(globalThis.__flujoMeetingEventBus=new j)},335951:(a,b,c)=>{c.d(b,{M:()=>i});var d=c(333873),e=c.n(d),f=c(629021),g=c(585742);let h=(0,c(351353).h)("backend/services/scheduler/triggers/fileWatch");function i(a,b,c){let d,i=a.debounceMs??2e3,j=new Set(a.events),k=a.glob?.trim()?function(a){let b=a.replace(/\\/g,"/"),c="";for(let a=0;a<b.length;a++){let d=b[a];"*"===d?"*"===b[a+1]?"/"===b[++a+1]?(a++,c+="(?:.*/)?"):c+=".*":c+="[^/]*":"?"===d?c+="[^/]":c+=d.replace(/[.+^${}()|[\]\\]/g,"\\$&")}return RegExp(`^${c}$`)}(a.glob.trim()):null;try{d=f.realpathSync.native(a.path)}catch(d){let b=d instanceof Error?d.message:String(d);return h.warn(`Cannot watch "${a.path}": ${b}`),c(`Cannot watch "${a.path}": ${b}`),{dispose:()=>void 0}}let l=[],m=null,n=!1,o=[],p=null,q=!1,r=!1,s=null,t=!1,u=()=>{s&&clearTimeout(s),s=setTimeout(()=>{v()},i),s.unref?.()},v=async()=>{if(s=null,t||r||0===l.length)return;r=!0;let a=[...l],e=m??new Date().toISOString();n&&h.info("File-watch batch overflowed; reporting first 50 events");try{await b({events:a,observedAt:e}),l=o,m=p,n=q,o=[],p=null,q=!1}catch(b){let a=b instanceof Error?b.message:String(b);h.warn(`Failed to persist file-watch batch for ${d}: ${a}`),c(a)}finally{r=!1,!t&&l.length>0&&u()}},w=(0,g.wB)(d,{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100}});return w.on("all",(a,b)=>{if(t||"add"!==a&&"change"!==a&&"unlink"!==a||!j.has(a))return;if(k){let a=e().relative(d,b).replace(/\\/g,"/")||e().basename(b);if(!k.test(a))return}let c=r?o:l;if(c.length>=50)r?q=!0:n=!0;else{let d=new Date().toISOString();r?p??=d:m??=d,c.push({event:a,path:b})}u()}),w.on("error",a=>{let b=a instanceof Error?a.message:String(a);h.warn(`Watcher error for ${d}: ${b}`),c(b)}),{dispose:()=>{t=!0,s&&(clearTimeout(s),s=null),l=[],m=null,o=[],p=null,w.close().catch(a=>h.warn(`Failed to close watcher for ${d}:`,a))}}}},361209:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{SZR:()=>l.SZ,YUw:()=>o.YU,bCV:()=>o.bC,createPersonaGoalWorkItem:()=>k.m,createPersonaWorkItem:()=>j.vp,promoteRunTodoToWorkItem:()=>j.X_,queryPersonaWorkItems:()=>j.Go,suggestBehaviorInstructionImprovement:()=>e.LC,updatePersonaWorkItem:()=>j.C9,withPersonaDomainMutation:()=>l.g7}),c(663905);var e=c(940569),f=c(956602);c(343271),c(714741);var g=c(543073);c(530775);var h=c(673764);c(27682);var i=c(931955);c(269674),c(714750),c(34446),c(11935),c(551138);var j=c(87068),k=c(503632),l=c(535843);c(949219),c(991169);var m=c(911339),n=c(14130);c(770641),c(41878),c(811585),c(407272),c(166240),c(624380);var o=c(524231),p=c(663625),q=c(368592);c(299016),c(833380),c(771270);var r=c(803274);c(820669),c(662457),c(213731);var s=c(274050),t=a([e,f,g,h,i,j,k,m,n,o,p,q,r,s]);[e,f,g,h,i,j,k,m,n,o,p,q,r,s]=t.then?(await t)():t,d()}catch(a){d(a)}})},389395:(a,b,c)=>{function d(a){if(null==a)return null;if("object"!=typeof a||Array.isArray(a))return"Invalid AI condition";if("llm-gate"!==a.mode&&"flow-gate"!==a.mode)return"Invalid AI checker type";if("string"!=typeof a.condition||!a.condition.trim())return"A condition is required for the AI to check";let b="llm-gate"===a.mode?a.modelId:a.flowId;return"string"==typeof b&&b.trim()?void 0!==a.maxCallsPerDay&&("number"!=typeof a.maxCallsPerDay||!Number.isSafeInteger(a.maxCallsPerDay)||a.maxCallsPerDay<1)?"Maximum AI checks per day must be a positive whole number":null:"A model or flow is required to check the condition"}function e(a){return"mcp-poll"===a.type&&("llm-gate"===a.evaluate.mode||"flow-gate"===a.evaluate.mode)?{...a,evaluate:{mode:"on-change"}}:a}function f(a){let b=a.startRestriction,c="unrestricted"===b||"singleton"===b||"exclusive"===b,d=!c&&!0===a.exclusive;return{startRestriction:c?b:d?"exclusive":"unrestricted",superExclusive:!!d||!0===a.superExclusive,emergency:!0===a.emergency}}function g(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&["personaId","behaviorSlotKey","personaRetired","personaArchived"].some(b=>Object.prototype.hasOwnProperty.call(a,b))}c.d(b,{B2:()=>d,Vw:()=>g,n$:()=>e,vq:()=>f})},407272:(a,b,c)=>{c(455511)},424375:(a,b,c)=>{c.d(b,{ticketService:()=>q});var d=c(763509),e=c(351353),f=c(164986);let g=/[^\p{L}\p{N} _\-\.\/:+#]/gu;function h(a){let b="string"==typeof a?a.split(","):Array.isArray(a)?a.flatMap(a=>"string"==typeof a?a.split(","):[]):[],c=new Set,d=[];for(let a of b){let b=a.replace(g,"").replace(/\s+/g," ").trim().slice(0,40);if(!(!b||c.has(b.toLocaleLowerCase()))&&(c.add(b.toLocaleLowerCase()),d.push(b),12===d.length))break}return d}var i=c(975128),j=c(71392),k=c(492684);let l=(0,e.h)("backend/services/ticket"),m=f.Zg.TICKETS;function n(a){return(0,j._T)("ticket-mutations",a)}async function o(a){let b;if(!a)return;try{let{FlowExecutor:d}=await Promise.resolve().then(c.bind(c,756368));b=d.conversationStates.get(a)}catch(a){l.warn("Failed to inspect live conversation attribution; falling back to storage",a)}if(!(b??=await (0,i.EI)("conversations",a,null))||"object"!=typeof b)return;let d=b;if(void 0!==d.conversationId&&d.conversationId!==a)return;let e=k.Jj.safeParse(d.personaAttribution);return e.success?e.data:void 0}class p{async listTickets(a={}){let b=(await (0,i.pL)(m)).filter(a=>a&&k.b1.test(a.id)&&"string"==typeof a.message).filter(b=>!a.status||b.status===a.status).filter(b=>!a.label||b.labels.some(b=>b.toLocaleLowerCase()===a.label.toLocaleLowerCase())).filter(b=>{if(!a.search?.trim())return!0;let c=a.search.trim().toLocaleLowerCase();return[b.title,b.message,...b.labels].some(a=>a?.toLocaleLowerCase().includes(c))}).sort((a,b)=>b.createdAt-a.createdAt),c=Math.max(0,a.offset??0),d=Math.min(100,Math.max(1,a.limit??20));return{items:b.slice(c,c+d),total:b.length,hasMore:c+d<b.length}}async getTicket(a){try{return(0,i.ln)(a),await (0,i.EI)(m,a,null)}catch{return null}}async createTicket(a){let b=k.c$.safeParse(a);if(!b.success)return{success:!1,error:"Ticket message or context is invalid."};try{return await n(async a=>{if((await this.listTickets({status:"open",limit:1})).total>=2e3)return{success:!1,error:"Open ticket limit reached."};let c=Date.now(),e={id:(0,d.A)(),message:b.data.message,labels:h(b.data.labels),status:"open",createdAt:c,updatedAt:c,...b.data.title?{title:b.data.title}:{},...b.data.conversationId?{conversationId:b.data.conversationId}:{},...b.data.messageId?{messageId:b.data.messageId}:{},...b.data.flowId?{flowId:b.data.flowId}:{},...b.data.nodeId?{nodeId:b.data.nodeId}:{},...b.data.source?{source:b.data.source}:{}};return await a.assertOwned(),await (0,i.Vt)(m,e.id,e),{success:!0,ticket:e}})}catch(a){return l.error("Failed to create ticket",a),{success:!1,error:"Failed to create ticket."}}}async stampPersonaAttributionFromTrustedConversation(a,b){return!!k.b1.test(a)&&!!k.b1.test(b)&&n(async d=>{let e=await o(b);return!!e&&(0,j._T)(e.personaId,async f=>{let{getPersonaDeletionTombstone:g}=await Promise.resolve().then(c.bind(c,662457));if(await g(e.personaId))return!1;let h=await this.getTicket(a);if(!h||h.conversationId!==b)return!1;let j={...h,...e};return await f.assertOwned(),await d.assertOwned(),await (0,i.Vt)(m,a,j),!0})})}async updateTicket(a,b){if(!k.b1.test(a))return{success:!1,error:"Ticket not found."};let c=k.CR.safeParse(b);if(!c.success)return{success:!1,error:"Ticket update is invalid."};try{return await n(async b=>{let d=await this.getTicket(a);if(!d)return{success:!1,error:"Ticket not found."};let{labels:e,...f}=c.data,g={...d,...f,...void 0!==e?{labels:h(e)}:{},updatedAt:Date.now()};return(0,i.ln)(a),await b.assertOwned(),await (0,i.Vt)(m,a,g),{success:!0,ticket:g}})}catch(a){return l.error("Failed to update ticket",a),{success:!1,error:"Failed to update ticket."}}}async deleteTicket(a){try{return(0,i.ln)(a),await n(async b=>await this.getTicket(a)?(await b.assertOwned(),await (0,i.bB)(m,a),{success:!0}):{success:!1,error:"Ticket not found."})}catch{return{success:!1,error:"Ticket not found."}}}async deleteTickets(a){return n(async b=>{let c=0,d=0;for(let e of a){if(!k.b1.test(e)||!await this.getTicket(e)){d+=1;continue}await b.assertOwned(),await (0,i.bB)(m,e),c+=1}return{deleted:c,errors:d}})}async clearPersonaAttributionByPersonaId(a){if(!k.Jj.safeParse({personaId:a}).success)throw TypeError("Invalid Persona id.");return n(async b=>{let c=await (0,i.pL)(m),d=0;for(let e of c){if(!e||e.personaId!==a||!k.b1.test(e.id))continue;let c={...e};delete c.personaId,delete c.activityId,delete c.behaviorRevisionId,(0,i.ln)(e.id),await b.assertOwned(),await (0,i.Vt)(m,e.id,c),d+=1}return d})}}let q=new p},475650:(a,b,c)=>{c.d(b,{X:()=>d});function d(a){let b=Math.max(5,Math.round((a??6e4)/1e3));if(b<60)return`*/${b} * * * * *`;let c=Math.max(1,Math.round(b/60));if(c<60)return`*/${c} * * * *`;let d=Math.max(1,Math.min(23,Math.round(c/60)));return`0 */${d} * * *`}},492684:(a,b,c)=>{c.d(b,{CR:()=>i,Jj:()=>g,b1:()=>f,c$:()=>h});var d=c(700948),e=c(299883);let f=/^[A-Za-z0-9_-]{1,64}$/,g=e.zi,h=d.object({message:d.string().trim().min(1).max(4e3),labels:d.union([d.string(),d.array(d.string())]).optional(),title:d.string().trim().max(120).optional(),conversationId:d.string().regex(f).optional(),messageId:d.string().regex(f).optional(),flowId:d.string().regex(f).optional(),nodeId:d.string().max(128).optional(),source:d.enum(["agent","host"]).optional()}),i=d.object({status:d.enum(["open","done"]).optional(),labels:d.union([d.string(),d.array(d.string())]).optional(),message:d.string().trim().min(1).max(4e3).optional(),title:d.string().trim().max(120).optional()}).refine(a=>Object.keys(a).length>0,"At least one field is required.")},503632:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{m:()=>n});var e=c(977598),f=c(700948),g=c(299883),h=c(581991),i=c(535843),j=c(949219),k=c(662457),l=c(87068),m=a([l]);async function n(a,b){if(!b.executionAuthority)throw new i.TP("Goal creation requires current Activity authority.");let{idempotencyKey:c,...d}=a,m=f.string().trim().min(1).max(512).parse(c),n=g.s7.parse(d);if(!n.goal||n.parentGoalId||n.id)throw new i.TP("Create an independent Goal root with explicit success criteria.");let o=(0,j.k$)("goal",{purpose:"persona-goal-create-v1",workspaceId:(0,h.getCurrentWorkspace)(),personaId:n.personaId,callerKey:m}),p=(0,e.createHash)("sha256").update(JSON.stringify({title:n.title,description:n.description,goal:n.goal,priority:n.priority??"normal",dependencyIds:n.dependencyIds??[],nextAction:n.nextAction,deadline:n.deadline})).digest("hex"),q=async()=>{let a=await (0,i.g7)(n.personaId,b,async({activity:a})=>{if(!a)throw new i.TP("Goal access crossed Activity ownership.");return(0,k.getPersonaWorkItem)(n.personaId,o)});if(!a)return null;if(!a.goal||a.goalCreateRequestDigest!==p)throw new i.TP("Caller key already names a different Goal request.");return a},r=await q();if(r)return{created:!1,item:r};try{let a=await (0,l.vp)({...n,id:o},{...b,goalCreateRequestDigest:p});return{created:!0,item:a}}catch(b){let a=await q();if(a)return{created:!1,item:a};throw b}}l=(m.then?(await m)():m)[0],d()}catch(a){d(a)}})},514640:(a,b,c)=>{c.d(b,{R:()=>i});var d=c(455511),e=c(351353),f=c(633069);let g=(0,e.h)("backend/services/scheduler/triggers/flowEvent");function h(a){return a&&a.length>8192?`${a.slice(0,8192)}… (truncated)`:a}function i(a,b){let c=a.maxChainDepth??100,e="string"==typeof a.source.topic?a.source.topic.trim():"",i=e.length>0,j=0,k=null,l=!1;if(a.outputMatch?.regex)try{k=new RegExp(a.outputMatch.regex)}catch(c){l=!0;let a=`Invalid output-match regex: ${c instanceof Error?c.message:String(c)}`;g.warn(a),b.onError(a)}let m=b=>{if(!a.outputMatch)return!0;if(l)return!1;let c=(b??"").slice(0,16384);return(!a.outputMatch.contains||!!c.includes(a.outputMatch.contains))&&(!k||!!k.test(c))},n=async(d,e,f,h,i)=>{if(d>=c){let a=`Flow-event chain reached the depth limit (${c}); not firing again`;g.info(a),b.onSkip(a);return}let k=Date.now();if(a.minIntervalMs&&k-j<a.minIntervalMs)return void g.debug(`Flow-event cooldown active (${a.minIntervalMs}ms); ignoring event`);let l=j;j=k;try{await b.onFire({summary:e,context:f,chainDepth:d+1,sourceConversationId:h,deliveryId:i})}catch(a){throw j===k&&(j=l),a}},o=(0,f.eh)().subscribe(async c=>{try{let b;if(i){if(!(0,f.ru)(c)||c.topic!==e||!m(c.payload))return;await n(c.chainDepth,`Signal "${c.topic}"`,{topic:c.topic,payload:h(c.payload),emitterFlowId:c.emitterFlowId,flowName:c.flowName,runId:c.runId,conversationId:c.conversationId,firedBy:c.firedBy},c.conversationId,`flow-event-${(0,d.createHash)("sha256").update(JSON.stringify(c)).digest("hex")}`);return}if((0,f.ru)(c)||((b=a.source).executionId?c.executionId!==b.executionId:b.flowId?c.flowId!==b.flowId:!b.flowName||c.flowName!==b.flowName)||!c.status||!(a.on??[]).includes(c.status)||!m(c.outputText))return;let g=c.flowName??c.flowId;await n(c.chainDepth,`Flow "${g}" ${c.status}`,{flowId:c.flowId,flowName:c.flowName,executionId:c.executionId,runId:c.runId,conversationId:c.conversationId,status:c.status,firedBy:c.firedBy,outputText:h(c.outputText),error:c.error},c.conversationId,c.deliveryId?`flow-event-${(0,d.createHash)("sha256").update(c.deliveryId).digest("hex")}`:`flow-event-${(0,d.createHash)("sha256").update(`${c.executionId??c.flowId}\0${c.runId}\0${c.status}`).digest("hex")}`)}catch(c){let a=c instanceof Error?c.message:String(c);throw g.warn(`Flow-event handling failed: ${a}`),b.onError(a),c}});return{dispose:()=>o(),nextRun:()=>null}}},522734:(a,b,c)=>{c.d(b,{Aj:()=>J,Fw:()=>I,Gi:()=>E,PZ:()=>F,a2:()=>D,kp:()=>H,o3:()=>B,s:()=>C});var d=c(973024),e=c(476582),f=c(176760),g=c.n(f),h=c(977598),i=c(426808),j=c(581991),k=c(71392),l=c(640889),m=c(487361),n=c(389395);let o=/^[a-f0-9]{64}$/,p=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/,q=a=>JSON.stringify(a,(a,b)=>b&&"object"==typeof b&&!Array.isArray(b)?Object.fromEntries(Object.entries(b).sort(([a],[b])=>a.localeCompare(b))):b);function r(a){let b={...a};return delete b.folder,delete b.updatedAt,(0,h.createHash)("sha256").update(q(b)).digest("hex")}function s(){if(!(0,m.ye)())return;let a=process.env.FLUJO_WORKER_RECOVERY_ID?.trim(),b=process.env.FLUJO_WORKER_RECOVERY_EPOCH?.trim(),c=Number(b),d=process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN?.trim(),e=process.env.FLUJO_WORKER_SNAPSHOT_SHA256?.trim().toLowerCase();if(a&&p.test(a)&&b&&/^[1-9][0-9]*$/.test(b)&&Number.isSafeInteger(c)&&d&&e&&o.test(e))return{workerId:a,epoch:c,snapshotSha256:e,token:d}}function t(){let a=(0,m.dT)();return"ready"===a.state&&a.workspace===(0,j.getCurrentWorkspace)()}function u(a){let b=(0,i.ok)(),c=(0,j.getCurrentWorkspace)(),d=(0,h.createHash)("sha256").update(`${c}\0${a.id}`).digest("hex");return{root:b,file:g().join(b,".worker-local-recovery",c,`${d}.json`),key:d,workspace:c}}function v(a,b){return{...a,signature:(0,h.createHmac)("sha256",b.token).update(q(a)).digest("hex")}}function w(a){let{signature:b,...c}=a;return c}async function x(a){let b,{root:c,file:f}=u(a),h=c;for(let a of["",...g().relative(c,g().dirname(f)).split(g().sep)]){h=g().join(h,a);try{let a=await d.promises.lstat(h);if(!a.isDirectory()||a.isSymbolicLink())throw Error("Unsafe recovery control path")}catch(a){if("ENOENT"===a.code)return;throw a}}try{b=await d.promises.lstat(f,{bigint:!0})}catch(a){if("ENOENT"===a.code)return;throw a}if(!b.isFile()||b.isSymbolicLink()||b.nlink!==BigInt(1)||b.size>BigInt(8192))throw Error("Unsafe recovery control file");let i=JSON.parse((await (0,e.b)(f,{expected:b,maxBytes:8192,verifyPath:()=>(0,l.V$)(c,f)})).toString("utf8"));if(!function(a){if(!a||"object"!=typeof a||Array.isArray(a))return!1;let b=new Set(["schemaVersion","workerId","epoch","snapshotSha256","workspace","executionId","generationId","createdAt","definitionSha256","optedIn","lastOccurrenceAt","pending","terminal","signature"]);return Object.keys(a).every(a=>b.has(a))&&1===a.schemaVersion&&"string"==typeof a.workerId&&p.test(a.workerId)&&Number.isSafeInteger(a.epoch)&&a.epoch>0&&"string"==typeof a.snapshotSha256&&o.test(a.snapshotSha256)&&"string"==typeof a.workspace&&"string"==typeof a.executionId&&"string"==typeof a.generationId&&p.test(a.generationId)&&"string"==typeof a.createdAt&&Number.isFinite(Date.parse(a.createdAt))&&"boolean"==typeof a.optedIn&&"string"==typeof a.signature&&o.test(a.signature)&&(void 0===a.definitionSha256||"string"==typeof a.definitionSha256&&o.test(a.definitionSha256))&&(void 0===a.lastOccurrenceAt||"string"==typeof a.lastOccurrenceAt&&Number.isFinite(Date.parse(a.lastOccurrenceAt)))&&(void 0===a.pending||a.pending&&"object"==typeof a.pending&&2===Object.keys(a.pending).length&&"string"==typeof a.pending.runId&&p.test(a.pending.runId)&&"string"==typeof a.pending.occurrenceAt&&Number.isFinite(Date.parse(a.pending.occurrenceAt)))&&(void 0===a.terminal||a.terminal&&"object"==typeof a.terminal&&4===Object.keys(a.terminal).length&&"string"==typeof a.terminal.runId&&p.test(a.terminal.runId)&&"string"==typeof a.terminal.generationId&&p.test(a.terminal.generationId)&&["completed","error","skipped"].includes(a.terminal.status)&&"string"==typeof a.terminal.finishedAt&&Number.isFinite(Date.parse(a.terminal.finishedAt)))}(i))throw Error("Invalid recovery provenance");return i}function y(a,b,c){if(!a)return"no-local-provenance";if(a.workerId!==c.workerId||a.epoch!==c.epoch||a.snapshotSha256!==c.snapshotSha256)return"worker-authority-changed";let d=v(w(a),c).signature;return(0,h.timingSafeEqual)(Buffer.from(a.signature,"hex"),Buffer.from(d,"hex"))?a.workspace!==(0,j.getCurrentWorkspace)()||a.executionId!==b.id||a.generationId!==b.generationId||a.createdAt!==b.createdAt?"generation-changed":"eligible":"invalid-provenance"}function z(a){let b=(0,n.vq)(a);return"schedule"===a.trigger.type&&!(0,n.Vw)(a)&&!b.emergency&&!b.superExclusive&&"exclusive"!==b.startRestriction&&(!a.overlapStrategy||"skip"===a.overlapStrategy)}async function A(a,b){let c=s();if(!c||!t())throw Error("Worker local recovery is not configured or ready");let{root:d,file:e,key:f}=u(a);return(0,k._T)(`worker_recovery_${f.slice(0,40)}`,async f=>b(await x(a),c,async a=>{if(!t()||q(s())!==q(c))throw Error("Worker recovery authority changed");await f.assertOwned(),await (0,l.sA)(d,e,Buffer.from(JSON.stringify(v(a,c))),{mode:384})}))}async function B(a){if(s()&&z(a)){if(!a.generationId)throw Error("Locally created plan needs a generation");await A(a,async(b,c,d)=>{if(b?.generationId===a.generationId){if("eligible"!==y(b,a,c))throw Error("Worker recovery provenance conflict");return}if(b?.pending)throw Error("Previous plan generation has an unresolved admission");await d({schemaVersion:1,workerId:c.workerId,epoch:c.epoch,snapshotSha256:c.snapshotSha256,workspace:(0,j.getCurrentWorkspace)(),executionId:a.id,generationId:a.generationId,createdAt:a.createdAt,optedIn:!1})})}}async function C(a,b,c=new Set){let d;if(!(0,m.ye)())return;let e=r(a),f="eligible",g=s();if(t())if(a.personaRetired||a.personaArchived)f="retired";else if(z(a))if(a.enabled)if(b)f="paused";else if(g){try{d=await x(a),f=q(s())===q(g)?y(d,a,g):"worker-authority-changed"}catch{f="invalid-provenance"}"eligible"===f&&d&&(f=d.optedIn?d.definitionSha256!==e?"definition-changed":d.pending&&!c.has(d.pending.runId)?"unresolved-admission":"eligible":"not-opted-in")}else f="recovery-not-configured";else f="disabled";else f="unsupported-plan";else f="worker-not-ready";let h="eligible"===f;return{eligible:h,definitionSha256:e,reason:f,state:h?"pending-local-recovery":["invalid-provenance","worker-authority-changed","generation-changed","definition-changed","unresolved-admission"].includes(f)?"rejected":"suppressed",...d?.pending?{pending:d.pending}:{}}}async function D(a,b,c,d){if(!z(a)||a.personaRetired||a.personaArchived)throw Error("Unsupported worker recovery plan");if(c!==a.generationId||d!==r(a))throw Error("Worker recovery plan changed");await A(a,async(c,e,f)=>{if(!c||"eligible"!==y(c,a,e))throw Error("Plan has no valid local creation provenance");if(b&&c.pending)throw Error("An unresolved admission requires terminal observation");await f({...w(c),optedIn:b,definitionSha256:d})})}async function E(a,b,c){if(!Number.isFinite(Date.parse(b))||!p.test(c))throw Error("Invalid occurrence identity");return z(a)?a.enabled?Date.parse(b)<Date.parse(a.createdAt)?"already-accounted":A(a,async(d,e,f)=>{let g=y(d,a,e);if("eligible"!==g||!d)return g;if(!d.optedIn)return"not-opted-in";if(d.definitionSha256!==r(a))return"definition-changed";if(d.pending)return"unresolved-admission";if(d.lastOccurrenceAt&&Date.parse(d.lastOccurrenceAt)>=Date.parse(b))return"already-accounted";let h=w(d);return delete h.terminal,await f({...h,pending:{runId:c,occurrenceAt:b},lastOccurrenceAt:b}),"eligible"}):"disabled":"unsupported-plan"}async function F(a,b){let c=await x(a),d=s();if(!t()||!d||"eligible"!==y(c,a,d)||!c?.optedIn||c.definitionSha256!==r(a)||c.pending?.runId!==b)throw Error("Worker schedule admission was fenced before execution")}function G(a,b){if(["completed","error","skipped"].includes(b.status)&&b.executionGenerationId===a.generationId&&b.finishedAt&&Number.isFinite(Date.parse(b.finishedAt)))return{runId:b.runId,generationId:a.generationId,status:b.status,finishedAt:b.finishedAt}}async function H(a,b){let c=G(a,b);return!!c&&A(a,async(d,e,f)=>!!d&&"eligible"===y(d,a,e)&&d.pending?.runId===b.runId&&(d.terminal?q(d.terminal)===q(c):(await f({...w(d),terminal:c}),!0)))}async function I(a){return A(a,async(b,c,d)=>{if(!b||"eligible"!==y(b,a,c)||!b.pending||b.terminal?.runId!==b.pending.runId||b.terminal.generationId!==a.generationId)return!1;let e=w(b);return delete e.pending,await d(e),!0})}async function J(a,b){let c=G(a,b);if(!c)return!1;let d=await x(a);return!!d?.terminal&&q(d.terminal)===q(c)&&I(a)}},531243:(a,b,c)=>{c.d(b,{A8:()=>m,K7:()=>s,T5:()=>q,YY:()=>r,Zg:()=>p,eP:()=>o,mn:()=>n,qn:()=>t});var d=c(975128),e=c(71392),f=c(299883),g=c(581991),h=c(663905);let i="scheduler-persona-projections",j="scheduler_persona_projections";function k(a,b){return`${encodeURIComponent(a)}:${encodeURIComponent(b)}`}async function l(){let a=await (0,d.loadItem)(i,{version:1,pending:{},deletedExecutions:{},deletedProjections:{}});return{version:1,pending:a?.version===1&&a.pending&&"object"==typeof a.pending?{...a.pending}:{},deletedExecutions:a?.version===1&&a.deletedExecutions&&"object"==typeof a.deletedExecutions?{...a.deletedExecutions}:{},deletedProjections:a?.version===1&&a.deletedProjections&&"object"==typeof a.deletedProjections?{...a.deletedProjections}:{}}}async function m(a){return(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l(),e=a.execution.generationId?c.deletedExecutions[k(a.execution.id,a.execution.generationId)]:void 0;if(c.deletedExecutions[a.execution.id]||e||c.deletedProjections[a.id])throw Error(`Planned execution ${a.execution.id} was deleted.`);let f=c.pending[a.id];if(f){let{dispatchId:b,firedAt:c,createdAt:d,updatedAt:e,...g}=f,{dispatchId:i,firedAt:j,createdAt:k,updatedAt:l,...m}=a;if((0,h.dj)(g)!==(0,h.dj)(m))throw Error(`Persona scheduler projection ${a.id} conflicts.`);return f}return c.pending[a.id]=a,await b.assertOwned(),await (0,d.VH)(i,c),a}))()}async function n(a,b){return(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async c=>{let e=await l(),f=e.pending[a];if(!f)throw Error(`Persona scheduler projection ${a} disappeared.`);if(f.dispatchId&&f.dispatchId!==b)throw Error(`Persona scheduler projection ${a} changed dispatch identity.`);let g={...f,dispatchId:b,updatedAt:new Date().toISOString()};return e.pending[a]=g,await c.assertOwned(),await (0,d.VH)(i,e),g}))()}async function o(){return Object.values((await l()).pending).sort((a,b)=>a.createdAt.localeCompare(b.createdAt))}async function p(a){await (0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l();a in c.pending&&(delete c.pending[a],await b.assertOwned(),await (0,d.VH)(i,c))}))()}async function q(a,b){await (0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async c=>{let e=await l();for(let[b,c]of Object.entries(e.pending))c.execution.id===a&&(delete e.pending[b],e.deletedProjections[b]=new Date().toISOString());let f=b?k(a,b):a;e.deletedExecutions[f]=new Date().toISOString(),await c.assertOwned(),await (0,d.VH)(i,e)}))()}async function r(a){return f.Qy.parse(a),(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l(),e=0,f=new Date().toISOString();for(let[b,d]of Object.entries(c.pending)){if(d.execution.personaId!==a)continue;delete c.pending[b],c.deletedProjections[b]=f;let g=d.execution.generationId?k(d.execution.id,d.execution.generationId):d.execution.id;c.deletedExecutions[g]=f,e+=1}return 0===e?0:(await b.assertOwned(),await (0,d.VH)(i,c),e)}))()}async function s(a){await (0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l();a in c.deletedExecutions&&(delete c.deletedExecutions[a],await b.assertOwned(),await (0,d.VH)(i,c))}))()}async function t(a,b,c,d){return(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async()=>{let e=await l(),f=b?e.deletedExecutions[k(a,b)]:void 0;return e.deletedExecutions[a]||f||e.deletedProjections[c]?null:d()}))()}},551138:(a,b,c)=>{c(596654);var d=c(351353);c(581991),c(71392),c(662457),(0,d.h)("enduringAgents/leaseHistoryPruning"),Object.freeze({examined:0,deleted:0,retainedProtected:0,retainedUnverifiable:0})},624380:(a,b,c)=>{c(299883),c(535843),c(662457)},663625:(a,b,c)=>{c.a(a,async(a,b)=>{try{c(615773),c(299883),c(535843),c(949219);var d=c(368592);c(71392),c(662457);var e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},678819:(a,b,c)=>{c.d(b,{q:()=>i});var d=c(150930),e=c(475650),f=c(351353),g=c(155167);let h=(0,f.h)("backend/services/scheduler/triggers/mcpPoll");function i(a,b){let c=a.cron||(0,e.X)(a.intervalMs),f=!1,i=!1,j=0,k=0,l=async()=>{if(!i&&!f){if(k>0)return void k--;f=!0;try{let c,d=await b.callTool(a.serverName,a.toolName,a.args);if(!d.success)throw Error(d.error||"Tool call failed");j=0;let e=await b.loadState(),f=a.evaluate;if(c="on-change"===f.mode?(0,g.Jl)(d.data,e):"new-items"===f.mode?(0,g.A1)(d.data,f.itemsPath,f.idField,e):b.evaluateAiGate?await b.evaluateAiGate(d.data,f,e):{fire:!1,newState:{},error:'The "AI decides" condition is not available yet'},i)return;if(Object.keys(c.newState).length>0&&await b.saveState(c.newState),c.error)b.onError(c.error);else if(c.fire){let d={server:a.serverName,tool:a.toolName,..."object"==typeof c.context&&null!==c.context?c.context:{result:c.context}},{status:h,conditionRejected:j}=await b.onFire({summary:`Watched tool: ${c.summary??"condition met"}`,context:d,deliveryId:`mcp-poll-${(0,g.qq)({context:d,evaluateMode:f.mode,attempt:e.pendingFailures??0,pendingState:c.pendingState,gateState:c.pendingState?void 0:c.newState})}`});if(i)return;if(c.pendingState){let{giveUpError:a}=await (0,g.vV)({status:h,conditionRejected:j,pendingState:c.pendingState,priorFailures:e.pendingFailures??0,saveState:b.saveState});a&&b.onError(a)}}else b.onSuccess?.()}catch(d){j++,k=Math.min(2**(j-1),8);let c=d instanceof Error?d.message:String(d);h.warn(`Poll failed for ${a.serverName}/${a.toolName} (backing off ${k} check(s)): ${c}`),b.onError(c)}finally{f=!1}}},m=new d.l4(c,{timezone:a.timezone,unref:!0},()=>void l());return l(),{dispose:()=>{i=!0,m.stop()},nextRun:()=>m.nextRun()?.toISOString()??null}}},714750:(a,b,c)=>{var d=c(351353);c(535843),c(982389),c(269674),c(250396),c(662457),(0,d.h)("backend/services/enduringAgents/memoryBackfill")},745543:(a,b,c)=>{c.d(b,{Bw:()=>m,FP:()=>l,QA:()=>j,pC:()=>n});var d=c(975128),e=c(351353),f=c(455511),g=c(71392);let h=(0,e.h)("backend/services/scheduler/state"),i=a=>`planned-execution-state/${a}`;async function j(a){try{return await (0,d.loadItem)(i(a),{})}catch(b){return h.error(`Failed to load trigger state for ${a}:`,b),{}}}async function k(a,b,c){await (0,d.VH)(i(a),b,c)}async function l(a,b,c){let d=`scheduler_state_${(0,f.createHash)("sha256").update(a).digest("hex").slice(0,40)}`;return(0,g._T)(d,async d=>{await c?.();let e=b(await j(a));return await k(a,e,async()=>{await d.assertOwned(),await c?.()}),e})}async function m(a,b,c){let d=Date.parse(b);if(!Number.isFinite(d))throw TypeError(`Invalid scheduled occurrence timestamp ${JSON.stringify(b)}.`);let e=`scheduler_state_${(0,f.createHash)("sha256").update(a).digest("hex").slice(0,40)}`;return(0,g._T)(e,async b=>{let e=await j(a),f=e.lastScheduledFireAt?Date.parse(e.lastScheduledFireAt):-1/0;if(Number.isFinite(f)&&f>=d)return e;let g={...e,lastScheduledFireAt:new Date(d).toISOString()};return await b.assertOwned(),await k(a,g,async()=>{await b.assertOwned(),c&&await c(),await b.assertOwned()}),g})}async function n(a){await (0,d.N2)(i(a))}},770641:(a,b,c)=>{c(299883),c(581991),c(975128),c(663905),c(27682),c(949219)},803274:(a,b,c)=>{c.a(a,async(a,b)=>{try{c(455511);var d=c(351353),e=c(673764);c(771270),c(662457);var f=a([e]);e=(f.then?(await f)():f)[0],(0,d.h)("backend/services/enduringAgents/runtimeObservability"),b()}catch(a){b(a)}})},811585:(a,b,c)=>{c(949219)},833380:(a,b,c)=>{c(615773),c(299883),c(949219),c(71392),c(662457)},872374:(a,b,c)=>{c.d(b,{t:()=>h});var d=c(150930),e=c(351353),f=c(155167);let g=(0,e.h)("backend/services/scheduler/triggers/urlWatch");function h(a,b){let c=b.fetchImpl??fetch,e=!1,h=!1,i=async()=>{if(!h&&!e){e=!0;try{await b.assertCurrent?.();let d=await c(a.url,{redirect:"follow",headers:{"User-Agent":"FLUJO-url-watch"},signal:AbortSignal.timeout(3e4)});if(!d.ok)return void b.onError(`The URL answered with HTTP ${d.status}`);await b.assertCurrent?.();let e=await d.text();await b.assertCurrent?.();let g=(0,f.qq)(e),i=await b.loadState();if(await b.assertCurrent?.(),h)return;if(!i.lastHash){await b.saveState({lastHash:g}),b.onSuccess?.();return}if(i.lastHash===g)return void b.onSuccess?.();await b.assertCurrent?.();let{status:j,conditionRejected:k}=await b.onFire({summary:"Online content changed",deliveryId:`url-watch-${g}-attempt-${i.pendingFailures??0}`,context:{url:a.url,status:d.status,contentType:d.headers.get("content-type")??void 0,content:e.length>8192?`${e.slice(0,8192)}… (truncated, ${e.length} chars total)`:e}});if(h)return;await b.assertCurrent?.();let{giveUpError:l}=await (0,f.vV)({status:j,conditionRejected:k,pendingState:{lastHash:g},priorFailures:i.pendingFailures??0,saveState:b.saveState});l&&b.onError(l)}catch(d){let c=d instanceof Error&&"TimeoutError"===d.name?"The URL did not answer within 30s":d instanceof Error?d.message:String(d);g.warn(`URL check failed for ${a.url}: ${c}`),b.onError(c)}finally{e=!1}}},j=new d.l4(a.cron,{timezone:a.timezone,unref:!0},()=>void i());return i(),{dispose:()=>{h=!0,j.stop()},nextRun:()=>j.nextRun()?.toISOString()??null}}},911339:(a,b,c)=>{c.a(a,async(a,b)=>{try{c(455511),c(299883);var d=c(756368);c(466799),c(630295),c(265230),c(975128),c(581991),c(424375),c(784789),c(311854);var e=c(259760);c(614331);var f=c(673764),g=c(940569);c(663905),c(530775),c(27682),c(661605),c(949219),c(991169);var h=c(14130);c(71392),c(771270),c(413050),c(662457);var i=a([d,e,f,g,h]);[d,e,f,g,h]=i.then?(await i)():i,b()}catch(a){b(a)}})},922817:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Q:()=>k,p:()=>l});var e=c(351353),f=c(614331),g=c(951328),h=c(671399),i=c(474291),j=a([g,h]);[g,h]=j.then?(await j)():j;let m=(0,e.h)("backend/execution/flow/validateFlowForRun");async function k(a){let b,c,d,e;try{b=await g.modelService.loadModels()}catch(a){m.warn("validateFlowObjectForRun: could not load models; skipping model checks",a)}try{let a=await h.mcpService.loadServerConfigs();Array.isArray(a)&&(d=a,c=a.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}catch(a){m.warn("validateFlowObjectForRun: could not load servers; skipping server checks",a)}try{let b=new Map((Array.isArray(d)?d:[]).map(a=>[a.name,!!a.disabled])),c=new Set;for(let b of a.nodes){let a=b?.data?.type??b?.type,d=b?.data?.properties?.boundServer;"mcp"===a&&"string"==typeof d&&d&&c.add(d)}let f=await Promise.all([...c].map(async a=>{if(b.get(a))return null;let c=await h.mcpService.listServerTools(a);return c.error||!Array.isArray(c.tools)?null:[a,c.tools.map(a=>a?.name).filter(a=>"string"==typeof a)]}));for(let a of(e={},f))a&&(e[a[0]]=a[1])}catch(a){m.warn("validateFlowObjectForRun: could not gather serverTools; skipping tool checks",a),e=void 0}return(0,i.nC)(a,{models:b,servers:c,serverTools:e})}async function l(a){let b=await f.flowService.getFlow(a);return b?k(b):(m.warn(`validateFlowForRun: flow ${a} could not be loaded; skipping pre-run checks`),{issues:[],errorCount:0,warningCount:0,isRunnable:!0})}d()}catch(a){d(a)}})},966733:(a,b,c)=>{c.d(b,{MF:()=>p,putPendingApproval:()=>o});var d=c(975128),e=c(164986),f=c(351353),g=c(581991),h=c(71392),i=c(299883);let j=(0,f.h)("backend/services/scheduler/pendingApprovals"),k=e.Zg.PENDING_APPROVALS,l="scheduler_pending_approvals",m=new Map;async function n(){try{let a=await (0,d.loadItem)(k,{});return a&&"object"==typeof a?a:{}}catch(a){return j.error("Failed to load pending approvals:",a),{}}}async function o(a){let b=(0,g.getCurrentWorkspace)(),c=(0,g.bindToCurrentWorkspace)(async()=>{await (0,h._T)(l,async b=>{let c=await n(),e=c[a.approvalId];if(e&&(e.conversationId!==a.conversationId||e.plannedExecutionId!==a.plannedExecutionId||e.runId!==a.runId))throw Error(`Pending approval ${a.approvalId} conflicts with another run.`);c[a.approvalId]=a,await b.assertOwned(),await (0,d.VH)(k,c)})}),e=(m.get(b)??Promise.resolve()).catch(()=>{}).then(c);m.set(b,e);try{await e}finally{m.get(b)===e&&m.delete(b)}}async function p(a){i.Qy.parse(a);let b=(0,g.getCurrentWorkspace)(),c=0,e=(0,g.bindToCurrentWorkspace)(async()=>{await (0,h._T)(l,async b=>{let e=await n();for(let[b,d]of Object.entries(e))d.terminalPublication?.execution.personaId===a&&(delete e[b],c+=1);0!==c&&(await b.assertOwned(),await (0,d.VH)(k,e))})}),f=(m.get(b)??Promise.resolve()).catch(()=>{}).then(e);m.set(b,f);try{await f}finally{m.get(b)===f&&m.delete(b)}return c}}};
6
+ \`\`\``}truncateOutput(a){if(a)return a.length>4096?`${a.slice(0,4096)}…`:a}constructor(){this.serviceResource=function(){if(void 0!==(0,g.F_)()||(0,f.hasExecutionExtensionContext)())throw new g.Mr;return new e.AsyncResource("FLUJO:SchedulerService")}(),this.workerRecoveryStatuses=new Map,this.workerLocalClaims=new Set,this.armed=new Map,this.armedConfigurations=new Map,this.scheduleStateChains=new Map,this.running=new Map,this.queued=new Map,this.exclusiveHolder=null,this.exclusiveHolderBehavior="queue",this.exclusiveHolderPersistent=!1,this.exclusiveWaiting=[],this.blockedByExclusive=[],this.lastTriggerErrors=new Map,this.reconcileChain=Promise.resolve(),this.pausedCache=!1,this.started=!1,this.personaProjectionCompletions=new Map,this.fileWatchIntentAdmissions=new Map,this.workspace=(0,q.getCurrentWorkspace)(),this.conditionChecks=new Map}}function M(){let a=(0,q.getCurrentWorkspace)();if(a===q.DEFAULT_WORKSPACE)return global.__flujo_scheduler??(global.__flujo_scheduler=new R);let b=global.__flujo_workspace_schedulers??=new Map,c=b.get(a);return c||(c=new R,b.set(a,c)),c}d()}catch(a){d(a)}})},311854:(a,b,c)=>{c(907309);var d=c(434121),e=c(594735),f=c(455511),g=c(351353),h=c(581991);let i=(0,g.h)("backend/services/meetings/MeetingEventBus");class j{constructor(a=1e3){if(this.ringBufferSize=a,this.channels=new Map,this.emitChains=new Map,!Number.isSafeInteger(a)||a<1)throw Error("Meeting event ring buffer size must be a positive integer")}key(a){return(0,h.workspaceCacheKey)("meeting-event-bus",a)}getChannel(a){let b=this.key(a),c=this.channels.get(b);if(!c){let a=new e.EventEmitter;a.setMaxListeners(0),c={emitter:a,seq:0,buffer:[],publishedEventIds:new Set,pendingPublicationIds:new Set},this.channels.set(b,c)}return c}enqueueEmit(a,b){let c=this.key(a),d=(this.emitChains.get(c)??Promise.resolve()).catch(()=>{}).then(b);return this.emitChains.set(c,d),d.catch(()=>{}).finally(()=>{this.emitChains.get(c)===d&&this.emitChains.delete(c)}),d}publish(a,b){if(0===b.length)return;let c=this.getChannel(a);for(let a of[...b].sort((a,b)=>a.seq-b.seq))c.publishedEventIds.has(a.eventId)||(c.publishedEventIds.add(a.eventId),c.seq=Math.max(c.seq,a.seq+1),c.buffer.push(a),c.buffer.sort((a,b)=>a.seq-b.seq),c.buffer.length>this.ringBufferSize&&c.buffer.shift(),c.emitter.emit("event",a))}async publishDurableEventIds(a,b){try{let c=(await (0,d.DW)(a)).filter(a=>b.has(a.eventId));this.publish(a,c);let e=this.getChannel(a);for(let a of c)e.pendingPublicationIds.delete(a.eventId)}catch(b){i.warn(`Failed to reconcile an ambiguous meeting append for ${a}`,{error:b})}}emit(a,b){return this.enqueueEmit(a,async()=>{let c=b.eventId?b:{...b,eventId:(0,f.randomUUID)()};try{let{event:b,appended:e}=await (0,d.mt)(a,c),f=this.getChannel(a);return(e||f.pendingPublicationIds.has(b.eventId))&&(this.publish(a,[b]),f.pendingPublicationIds.delete(b.eventId)),b}catch(b){if(b instanceof d.w5){let c=this.getChannel(a);for(let a of b.eventIds)c.pendingPublicationIds.add(a);await this.publishDurableEventIds(a,new Set(b.eventIds))}throw b}})}emitBatch(a,b,c){return this.enqueueEmit(a,async()=>{let e=c.map(a=>a.eventId?a:{...a,eventId:(0,f.randomUUID)()});try{let{events:c,appendedEvents:f}=await (0,d.cO)(a,b,e),g=this.getChannel(a),h=[...f,...c.filter(a=>g.pendingPublicationIds.has(a.eventId))];for(let b of(this.publish(a,h),h))g.pendingPublicationIds.delete(b.eventId);return c}catch(b){if(b instanceof d.w5){let c=this.getChannel(a);for(let a of b.eventIds)c.pendingPublicationIds.add(a);await this.publishDurableEventIds(a,new Set(b.eventIds))}throw b}})}emitterFor(a){return(0,h.bindToCurrentWorkspace)(async b=>{try{return await this.emit(a,b)}catch(b){throw i.warn(`Failed to emit meeting event for ${a}`,{error:b}),b}})}getBufferedSince(a,b){let c=this.channels.get(this.key(a));return c?c.buffer.filter(a=>a.seq>=b):[]}currentSeq(a){return this.channels.get(this.key(a))?.seq??0}async latestSequence(a){return(0,d.IM)(a)}async replaySince(a,b){let c=this.channels.get(this.key(a));return c&&c.buffer.length>0&&b>=c.buffer[0].seq?c.buffer.filter(a=>a.seq>=b):(0,d.DW)(a,{fromSeq:b})}subscribe(a,b){let c=this.getChannel(a),d=(0,h.bindToCurrentWorkspace)(c=>{try{b(c)}catch(b){i.warn(`Meeting event listener threw for ${a}`,{error:b})}});c.emitter.on("event",d);let e=!0;return()=>{e&&(e=!1,c.emitter.off("event",d))}}clear(a){if(a){let b=this.key(a);this.channels.delete(b),this.emitChains.delete(b);return}this.channels.clear(),this.emitChains.clear()}}globalThis.__flujoMeetingEventBus??(globalThis.__flujoMeetingEventBus=new j)},335951:(a,b,c)=>{c.d(b,{M:()=>i});var d=c(333873),e=c.n(d),f=c(629021),g=c(585742);let h=(0,c(351353).h)("backend/services/scheduler/triggers/fileWatch");function i(a,b,c){let d,i=a.debounceMs??2e3,j=new Set(a.events),k=a.glob?.trim()?function(a){let b=a.replace(/\\/g,"/"),c="";for(let a=0;a<b.length;a++){let d=b[a];"*"===d?"*"===b[a+1]?"/"===b[++a+1]?(a++,c+="(?:.*/)?"):c+=".*":c+="[^/]*":"?"===d?c+="[^/]":c+=d.replace(/[.+^${}()|[\]\\]/g,"\\$&")}return RegExp(`^${c}$`)}(a.glob.trim()):null;try{d=f.realpathSync.native(a.path)}catch(d){let b=d instanceof Error?d.message:String(d);return h.warn(`Cannot watch "${a.path}": ${b}`),c(`Cannot watch "${a.path}": ${b}`),{dispose:()=>void 0}}let l=[],m=null,n=!1,o=[],p=null,q=!1,r=!1,s=null,t=!1,u=()=>{s&&clearTimeout(s),s=setTimeout(()=>{v()},i),s.unref?.()},v=async()=>{if(s=null,t||r||0===l.length)return;r=!0;let a=[...l],e=m??new Date().toISOString();n&&h.info("File-watch batch overflowed; reporting first 50 events");try{await b({events:a,observedAt:e}),l=o,m=p,n=q,o=[],p=null,q=!1}catch(b){let a=b instanceof Error?b.message:String(b);h.warn(`Failed to persist file-watch batch for ${d}: ${a}`),c(a)}finally{r=!1,!t&&l.length>0&&u()}},w=(0,g.wB)(d,{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100}});return w.on("all",(a,b)=>{if(t||"add"!==a&&"change"!==a&&"unlink"!==a||!j.has(a))return;if(k){let a=e().relative(d,b).replace(/\\/g,"/")||e().basename(b);if(!k.test(a))return}let c=r?o:l;if(c.length>=50)r?q=!0:n=!0;else{let d=new Date().toISOString();r?p??=d:m??=d,c.push({event:a,path:b})}u()}),w.on("error",a=>{let b=a instanceof Error?a.message:String(a);h.warn(`Watcher error for ${d}: ${b}`),c(b)}),{dispose:()=>{t=!0,s&&(clearTimeout(s),s=null),l=[],m=null,o=[],p=null,w.close().catch(a=>h.warn(`Failed to close watcher for ${d}:`,a))}}}},361209:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{SZR:()=>l.SZ,YUw:()=>o.YU,bCV:()=>o.bC,createPersonaGoalWorkItem:()=>k.m,createPersonaWorkItem:()=>j.vp,promoteRunTodoToWorkItem:()=>j.X_,queryPersonaWorkItems:()=>j.Go,suggestBehaviorInstructionImprovement:()=>e.LC,updatePersonaWorkItem:()=>j.C9,withPersonaDomainMutation:()=>l.g7}),c(663905);var e=c(940569),f=c(956602);c(343271),c(714741);var g=c(543073);c(530775);var h=c(673764);c(27682);var i=c(931955);c(269674),c(714750),c(34446),c(11935),c(551138);var j=c(87068),k=c(503632),l=c(758224);c(949219),c(991169);var m=c(911339),n=c(14130);c(770641),c(41878),c(811585),c(407272),c(166240),c(624380);var o=c(524231),p=c(663625),q=c(368592);c(299016),c(833380),c(771270);var r=c(803274);c(820669),c(662457),c(213731);var s=c(274050),t=a([e,f,g,h,i,j,k,m,n,o,p,q,r,s]);[e,f,g,h,i,j,k,m,n,o,p,q,r,s]=t.then?(await t)():t,d()}catch(a){d(a)}})},389395:(a,b,c)=>{function d(a){if(null==a)return null;if("object"!=typeof a||Array.isArray(a))return"Invalid AI condition";if("llm-gate"!==a.mode&&"flow-gate"!==a.mode)return"Invalid AI checker type";if("string"!=typeof a.condition||!a.condition.trim())return"A condition is required for the AI to check";let b="llm-gate"===a.mode?a.modelId:a.flowId;return"string"==typeof b&&b.trim()?void 0!==a.maxCallsPerDay&&("number"!=typeof a.maxCallsPerDay||!Number.isSafeInteger(a.maxCallsPerDay)||a.maxCallsPerDay<1)?"Maximum AI checks per day must be a positive whole number":null:"A model or flow is required to check the condition"}function e(a){return"mcp-poll"===a.type&&("llm-gate"===a.evaluate.mode||"flow-gate"===a.evaluate.mode)?{...a,evaluate:{mode:"on-change"}}:a}function f(a){let b=a.startRestriction,c="unrestricted"===b||"singleton"===b||"exclusive"===b,d=!c&&!0===a.exclusive;return{startRestriction:c?b:d?"exclusive":"unrestricted",superExclusive:!!d||!0===a.superExclusive,emergency:!0===a.emergency}}function g(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&["personaId","behaviorSlotKey","personaRetired","personaArchived"].some(b=>Object.prototype.hasOwnProperty.call(a,b))}c.d(b,{B2:()=>d,Vw:()=>g,n$:()=>e,vq:()=>f})},407272:(a,b,c)=>{c(455511)},424375:(a,b,c)=>{c.d(b,{ticketService:()=>q});var d=c(763509),e=c(351353),f=c(164986);let g=/[^\p{L}\p{N} _\-\.\/:+#]/gu;function h(a){let b="string"==typeof a?a.split(","):Array.isArray(a)?a.flatMap(a=>"string"==typeof a?a.split(","):[]):[],c=new Set,d=[];for(let a of b){let b=a.replace(g,"").replace(/\s+/g," ").trim().slice(0,40);if(!(!b||c.has(b.toLocaleLowerCase()))&&(c.add(b.toLocaleLowerCase()),d.push(b),12===d.length))break}return d}var i=c(975128),j=c(71392),k=c(492684);let l=(0,e.h)("backend/services/ticket"),m=f.Zg.TICKETS;function n(a){return(0,j._T)("ticket-mutations",a)}async function o(a){let b;if(!a)return;try{let{FlowExecutor:d}=await Promise.resolve().then(c.bind(c,756368));b=d.conversationStates.get(a)}catch(a){l.warn("Failed to inspect live conversation attribution; falling back to storage",a)}if(!(b??=await (0,i.EI)("conversations",a,null))||"object"!=typeof b)return;let d=b;if(void 0!==d.conversationId&&d.conversationId!==a)return;let e=k.Jj.safeParse(d.personaAttribution);return e.success?e.data:void 0}class p{async listTickets(a={}){let b=(await (0,i.pL)(m)).filter(a=>a&&k.b1.test(a.id)&&"string"==typeof a.message).filter(b=>!a.status||b.status===a.status).filter(b=>!a.label||b.labels.some(b=>b.toLocaleLowerCase()===a.label.toLocaleLowerCase())).filter(b=>{if(!a.search?.trim())return!0;let c=a.search.trim().toLocaleLowerCase();return[b.title,b.message,...b.labels].some(a=>a?.toLocaleLowerCase().includes(c))}).sort((a,b)=>b.createdAt-a.createdAt),c=Math.max(0,a.offset??0),d=Math.min(100,Math.max(1,a.limit??20));return{items:b.slice(c,c+d),total:b.length,hasMore:c+d<b.length}}async getTicket(a){try{return(0,i.ln)(a),await (0,i.EI)(m,a,null)}catch{return null}}async createTicket(a){let b=k.c$.safeParse(a);if(!b.success)return{success:!1,error:"Ticket message or context is invalid."};try{return await n(async a=>{if((await this.listTickets({status:"open",limit:1})).total>=2e3)return{success:!1,error:"Open ticket limit reached."};let c=Date.now(),e={id:(0,d.A)(),message:b.data.message,labels:h(b.data.labels),status:"open",createdAt:c,updatedAt:c,...b.data.title?{title:b.data.title}:{},...b.data.conversationId?{conversationId:b.data.conversationId}:{},...b.data.messageId?{messageId:b.data.messageId}:{},...b.data.flowId?{flowId:b.data.flowId}:{},...b.data.nodeId?{nodeId:b.data.nodeId}:{},...b.data.source?{source:b.data.source}:{}};return await a.assertOwned(),await (0,i.Vt)(m,e.id,e),{success:!0,ticket:e}})}catch(a){return l.error("Failed to create ticket",a),{success:!1,error:"Failed to create ticket."}}}async stampPersonaAttributionFromTrustedConversation(a,b){return!!k.b1.test(a)&&!!k.b1.test(b)&&n(async d=>{let e=await o(b);return!!e&&(0,j._T)(e.personaId,async f=>{let{getPersonaDeletionTombstone:g}=await Promise.resolve().then(c.bind(c,662457));if(await g(e.personaId))return!1;let h=await this.getTicket(a);if(!h||h.conversationId!==b)return!1;let j={...h,...e};return await f.assertOwned(),await d.assertOwned(),await (0,i.Vt)(m,a,j),!0})})}async updateTicket(a,b){if(!k.b1.test(a))return{success:!1,error:"Ticket not found."};let c=k.CR.safeParse(b);if(!c.success)return{success:!1,error:"Ticket update is invalid."};try{return await n(async b=>{let d=await this.getTicket(a);if(!d)return{success:!1,error:"Ticket not found."};let{labels:e,...f}=c.data,g={...d,...f,...void 0!==e?{labels:h(e)}:{},updatedAt:Date.now()};return(0,i.ln)(a),await b.assertOwned(),await (0,i.Vt)(m,a,g),{success:!0,ticket:g}})}catch(a){return l.error("Failed to update ticket",a),{success:!1,error:"Failed to update ticket."}}}async deleteTicket(a){try{return(0,i.ln)(a),await n(async b=>await this.getTicket(a)?(await b.assertOwned(),await (0,i.bB)(m,a),{success:!0}):{success:!1,error:"Ticket not found."})}catch{return{success:!1,error:"Ticket not found."}}}async deleteTickets(a){return n(async b=>{let c=0,d=0;for(let e of a){if(!k.b1.test(e)||!await this.getTicket(e)){d+=1;continue}await b.assertOwned(),await (0,i.bB)(m,e),c+=1}return{deleted:c,errors:d}})}async clearPersonaAttributionByPersonaId(a){if(!k.Jj.safeParse({personaId:a}).success)throw TypeError("Invalid Persona id.");return n(async b=>{let c=await (0,i.pL)(m),d=0;for(let e of c){if(!e||e.personaId!==a||!k.b1.test(e.id))continue;let c={...e};delete c.personaId,delete c.activityId,delete c.behaviorRevisionId,(0,i.ln)(e.id),await b.assertOwned(),await (0,i.Vt)(m,e.id,c),d+=1}return d})}}let q=new p},475650:(a,b,c)=>{c.d(b,{X:()=>d});function d(a){let b=Math.max(5,Math.round((a??6e4)/1e3));if(b<60)return`*/${b} * * * * *`;let c=Math.max(1,Math.round(b/60));if(c<60)return`*/${c} * * * *`;let d=Math.max(1,Math.min(23,Math.round(c/60)));return`0 */${d} * * *`}},492684:(a,b,c)=>{c.d(b,{CR:()=>i,Jj:()=>g,b1:()=>f,c$:()=>h});var d=c(700948),e=c(299883);let f=/^[A-Za-z0-9_-]{1,64}$/,g=e.zi,h=d.object({message:d.string().trim().min(1).max(4e3),labels:d.union([d.string(),d.array(d.string())]).optional(),title:d.string().trim().max(120).optional(),conversationId:d.string().regex(f).optional(),messageId:d.string().regex(f).optional(),flowId:d.string().regex(f).optional(),nodeId:d.string().max(128).optional(),source:d.enum(["agent","host"]).optional()}),i=d.object({status:d.enum(["open","done"]).optional(),labels:d.union([d.string(),d.array(d.string())]).optional(),message:d.string().trim().min(1).max(4e3).optional(),title:d.string().trim().max(120).optional()}).refine(a=>Object.keys(a).length>0,"At least one field is required.")},503632:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{m:()=>n});var e=c(977598),f=c(700948),g=c(299883),h=c(581991),i=c(758224),j=c(949219),k=c(662457),l=c(87068),m=a([l]);async function n(a,b){if(!b.executionAuthority)throw new i.TP("Goal creation requires current Activity authority.");let{idempotencyKey:c,...d}=a,m=f.string().trim().min(1).max(512).parse(c),n=g.s7.parse(d);if(!n.goal||n.parentGoalId||n.id)throw new i.TP("Create an independent Goal root with explicit success criteria.");let o=(0,j.k$)("goal",{purpose:"persona-goal-create-v1",workspaceId:(0,h.getCurrentWorkspace)(),personaId:n.personaId,callerKey:m}),p=(0,e.createHash)("sha256").update(JSON.stringify({title:n.title,description:n.description,goal:n.goal,priority:n.priority??"normal",dependencyIds:n.dependencyIds??[],nextAction:n.nextAction,deadline:n.deadline})).digest("hex"),q=async()=>{let a=await (0,i.g7)(n.personaId,b,async({activity:a})=>{if(!a)throw new i.TP("Goal access crossed Activity ownership.");return(0,k.getPersonaWorkItem)(n.personaId,o)});if(!a)return null;if(!a.goal||a.goalCreateRequestDigest!==p)throw new i.TP("Caller key already names a different Goal request.");return a},r=await q();if(r)return{created:!1,item:r};try{let a=await (0,l.vp)({...n,id:o},{...b,goalCreateRequestDigest:p});return{created:!0,item:a}}catch(b){let a=await q();if(a)return{created:!1,item:a};throw b}}l=(m.then?(await m)():m)[0],d()}catch(a){d(a)}})},514640:(a,b,c)=>{c.d(b,{R:()=>i});var d=c(455511),e=c(351353),f=c(633069);let g=(0,e.h)("backend/services/scheduler/triggers/flowEvent");function h(a){return a&&a.length>8192?`${a.slice(0,8192)}… (truncated)`:a}function i(a,b){let c=a.maxChainDepth??100,e="string"==typeof a.source.topic?a.source.topic.trim():"",i=e.length>0,j=0,k=null,l=!1;if(a.outputMatch?.regex)try{k=new RegExp(a.outputMatch.regex)}catch(c){l=!0;let a=`Invalid output-match regex: ${c instanceof Error?c.message:String(c)}`;g.warn(a),b.onError(a)}let m=b=>{if(!a.outputMatch)return!0;if(l)return!1;let c=(b??"").slice(0,16384);return(!a.outputMatch.contains||!!c.includes(a.outputMatch.contains))&&(!k||!!k.test(c))},n=async(d,e,f,h,i)=>{if(d>=c){let a=`Flow-event chain reached the depth limit (${c}); not firing again`;g.info(a),b.onSkip(a);return}let k=Date.now();if(a.minIntervalMs&&k-j<a.minIntervalMs)return void g.debug(`Flow-event cooldown active (${a.minIntervalMs}ms); ignoring event`);let l=j;j=k;try{await b.onFire({summary:e,context:f,chainDepth:d+1,sourceConversationId:h,deliveryId:i})}catch(a){throw j===k&&(j=l),a}},o=(0,f.eh)().subscribe(async c=>{try{let b;if(i){if(!(0,f.ru)(c)||c.topic!==e||!m(c.payload))return;await n(c.chainDepth,`Signal "${c.topic}"`,{topic:c.topic,payload:h(c.payload),emitterFlowId:c.emitterFlowId,flowName:c.flowName,runId:c.runId,conversationId:c.conversationId,firedBy:c.firedBy},c.conversationId,`flow-event-${(0,d.createHash)("sha256").update(JSON.stringify(c)).digest("hex")}`);return}if((0,f.ru)(c)||((b=a.source).executionId?c.executionId!==b.executionId:b.flowId?c.flowId!==b.flowId:!b.flowName||c.flowName!==b.flowName)||!c.status||!(a.on??[]).includes(c.status)||!m(c.outputText))return;let g=c.flowName??c.flowId;await n(c.chainDepth,`Flow "${g}" ${c.status}`,{flowId:c.flowId,flowName:c.flowName,executionId:c.executionId,runId:c.runId,conversationId:c.conversationId,status:c.status,firedBy:c.firedBy,outputText:h(c.outputText),error:c.error},c.conversationId,c.deliveryId?`flow-event-${(0,d.createHash)("sha256").update(c.deliveryId).digest("hex")}`:`flow-event-${(0,d.createHash)("sha256").update(`${c.executionId??c.flowId}\0${c.runId}\0${c.status}`).digest("hex")}`)}catch(c){let a=c instanceof Error?c.message:String(c);throw g.warn(`Flow-event handling failed: ${a}`),b.onError(a),c}});return{dispose:()=>o(),nextRun:()=>null}}},522734:(a,b,c)=>{c.d(b,{Aj:()=>J,Fw:()=>I,Gi:()=>E,PZ:()=>F,a2:()=>D,kp:()=>H,o3:()=>B,s:()=>C});var d=c(973024),e=c(476582),f=c(176760),g=c.n(f),h=c(977598),i=c(426808),j=c(581991),k=c(71392),l=c(640889),m=c(487361),n=c(389395);let o=/^[a-f0-9]{64}$/,p=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/,q=a=>JSON.stringify(a,(a,b)=>b&&"object"==typeof b&&!Array.isArray(b)?Object.fromEntries(Object.entries(b).sort(([a],[b])=>a.localeCompare(b))):b);function r(a){let b={...a};return delete b.folder,delete b.updatedAt,(0,h.createHash)("sha256").update(q(b)).digest("hex")}function s(){if(!(0,m.ye)())return;let a=process.env.FLUJO_WORKER_RECOVERY_ID?.trim(),b=process.env.FLUJO_WORKER_RECOVERY_EPOCH?.trim(),c=Number(b),d=process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN?.trim(),e=process.env.FLUJO_WORKER_SNAPSHOT_SHA256?.trim().toLowerCase();if(a&&p.test(a)&&b&&/^[1-9][0-9]*$/.test(b)&&Number.isSafeInteger(c)&&d&&e&&o.test(e))return{workerId:a,epoch:c,snapshotSha256:e,token:d}}function t(){let a=(0,m.dT)();return"ready"===a.state&&a.workspace===(0,j.getCurrentWorkspace)()}function u(a){let b=(0,i.ok)(),c=(0,j.getCurrentWorkspace)(),d=(0,h.createHash)("sha256").update(`${c}\0${a.id}`).digest("hex");return{root:b,file:g().join(b,".worker-local-recovery",c,`${d}.json`),key:d,workspace:c}}function v(a,b){return{...a,signature:(0,h.createHmac)("sha256",b.token).update(q(a)).digest("hex")}}function w(a){let{signature:b,...c}=a;return c}async function x(a){let b,{root:c,file:f}=u(a),h=c;for(let a of["",...g().relative(c,g().dirname(f)).split(g().sep)]){h=g().join(h,a);try{let a=await d.promises.lstat(h);if(!a.isDirectory()||a.isSymbolicLink())throw Error("Unsafe recovery control path")}catch(a){if("ENOENT"===a.code)return;throw a}}try{b=await d.promises.lstat(f,{bigint:!0})}catch(a){if("ENOENT"===a.code)return;throw a}if(!b.isFile()||b.isSymbolicLink()||b.nlink!==BigInt(1)||b.size>BigInt(8192))throw Error("Unsafe recovery control file");let i=JSON.parse((await (0,e.b)(f,{expected:b,maxBytes:8192,verifyPath:()=>(0,l.V$)(c,f)})).toString("utf8"));if(!function(a){if(!a||"object"!=typeof a||Array.isArray(a))return!1;let b=new Set(["schemaVersion","workerId","epoch","snapshotSha256","workspace","executionId","generationId","createdAt","definitionSha256","optedIn","lastOccurrenceAt","pending","terminal","signature"]);return Object.keys(a).every(a=>b.has(a))&&1===a.schemaVersion&&"string"==typeof a.workerId&&p.test(a.workerId)&&Number.isSafeInteger(a.epoch)&&a.epoch>0&&"string"==typeof a.snapshotSha256&&o.test(a.snapshotSha256)&&"string"==typeof a.workspace&&"string"==typeof a.executionId&&"string"==typeof a.generationId&&p.test(a.generationId)&&"string"==typeof a.createdAt&&Number.isFinite(Date.parse(a.createdAt))&&"boolean"==typeof a.optedIn&&"string"==typeof a.signature&&o.test(a.signature)&&(void 0===a.definitionSha256||"string"==typeof a.definitionSha256&&o.test(a.definitionSha256))&&(void 0===a.lastOccurrenceAt||"string"==typeof a.lastOccurrenceAt&&Number.isFinite(Date.parse(a.lastOccurrenceAt)))&&(void 0===a.pending||a.pending&&"object"==typeof a.pending&&2===Object.keys(a.pending).length&&"string"==typeof a.pending.runId&&p.test(a.pending.runId)&&"string"==typeof a.pending.occurrenceAt&&Number.isFinite(Date.parse(a.pending.occurrenceAt)))&&(void 0===a.terminal||a.terminal&&"object"==typeof a.terminal&&4===Object.keys(a.terminal).length&&"string"==typeof a.terminal.runId&&p.test(a.terminal.runId)&&"string"==typeof a.terminal.generationId&&p.test(a.terminal.generationId)&&["completed","error","skipped"].includes(a.terminal.status)&&"string"==typeof a.terminal.finishedAt&&Number.isFinite(Date.parse(a.terminal.finishedAt)))}(i))throw Error("Invalid recovery provenance");return i}function y(a,b,c){if(!a)return"no-local-provenance";if(a.workerId!==c.workerId||a.epoch!==c.epoch||a.snapshotSha256!==c.snapshotSha256)return"worker-authority-changed";let d=v(w(a),c).signature;return(0,h.timingSafeEqual)(Buffer.from(a.signature,"hex"),Buffer.from(d,"hex"))?a.workspace!==(0,j.getCurrentWorkspace)()||a.executionId!==b.id||a.generationId!==b.generationId||a.createdAt!==b.createdAt?"generation-changed":"eligible":"invalid-provenance"}function z(a){let b=(0,n.vq)(a);return"schedule"===a.trigger.type&&!(0,n.Vw)(a)&&!b.emergency&&!b.superExclusive&&"exclusive"!==b.startRestriction&&(!a.overlapStrategy||"skip"===a.overlapStrategy)}async function A(a,b){let c=s();if(!c||!t())throw Error("Worker local recovery is not configured or ready");let{root:d,file:e,key:f}=u(a);return(0,k._T)(`worker_recovery_${f.slice(0,40)}`,async f=>b(await x(a),c,async a=>{if(!t()||q(s())!==q(c))throw Error("Worker recovery authority changed");await f.assertOwned(),await (0,l.sA)(d,e,Buffer.from(JSON.stringify(v(a,c))),{mode:384})}))}async function B(a){if(s()&&z(a)){if(!a.generationId)throw Error("Locally created plan needs a generation");await A(a,async(b,c,d)=>{if(b?.generationId===a.generationId){if("eligible"!==y(b,a,c))throw Error("Worker recovery provenance conflict");return}if(b?.pending)throw Error("Previous plan generation has an unresolved admission");await d({schemaVersion:1,workerId:c.workerId,epoch:c.epoch,snapshotSha256:c.snapshotSha256,workspace:(0,j.getCurrentWorkspace)(),executionId:a.id,generationId:a.generationId,createdAt:a.createdAt,optedIn:!1})})}}async function C(a,b,c=new Set){let d;if(!(0,m.ye)())return;let e=r(a),f="eligible",g=s();if(t())if(a.personaRetired||a.personaArchived)f="retired";else if(z(a))if(a.enabled)if(b)f="paused";else if(g){try{d=await x(a),f=q(s())===q(g)?y(d,a,g):"worker-authority-changed"}catch{f="invalid-provenance"}"eligible"===f&&d&&(f=d.optedIn?d.definitionSha256!==e?"definition-changed":d.pending&&!c.has(d.pending.runId)?"unresolved-admission":"eligible":"not-opted-in")}else f="recovery-not-configured";else f="disabled";else f="unsupported-plan";else f="worker-not-ready";let h="eligible"===f;return{eligible:h,definitionSha256:e,reason:f,state:h?"pending-local-recovery":["invalid-provenance","worker-authority-changed","generation-changed","definition-changed","unresolved-admission"].includes(f)?"rejected":"suppressed",...d?.pending?{pending:d.pending}:{}}}async function D(a,b,c,d){if(!z(a)||a.personaRetired||a.personaArchived)throw Error("Unsupported worker recovery plan");if(c!==a.generationId||d!==r(a))throw Error("Worker recovery plan changed");await A(a,async(c,e,f)=>{if(!c||"eligible"!==y(c,a,e))throw Error("Plan has no valid local creation provenance");if(b&&c.pending)throw Error("An unresolved admission requires terminal observation");await f({...w(c),optedIn:b,definitionSha256:d})})}async function E(a,b,c){if(!Number.isFinite(Date.parse(b))||!p.test(c))throw Error("Invalid occurrence identity");return z(a)?a.enabled?Date.parse(b)<Date.parse(a.createdAt)?"already-accounted":A(a,async(d,e,f)=>{let g=y(d,a,e);if("eligible"!==g||!d)return g;if(!d.optedIn)return"not-opted-in";if(d.definitionSha256!==r(a))return"definition-changed";if(d.pending)return"unresolved-admission";if(d.lastOccurrenceAt&&Date.parse(d.lastOccurrenceAt)>=Date.parse(b))return"already-accounted";let h=w(d);return delete h.terminal,await f({...h,pending:{runId:c,occurrenceAt:b},lastOccurrenceAt:b}),"eligible"}):"disabled":"unsupported-plan"}async function F(a,b){let c=await x(a),d=s();if(!t()||!d||"eligible"!==y(c,a,d)||!c?.optedIn||c.definitionSha256!==r(a)||c.pending?.runId!==b)throw Error("Worker schedule admission was fenced before execution")}function G(a,b){if(["completed","error","skipped"].includes(b.status)&&b.executionGenerationId===a.generationId&&b.finishedAt&&Number.isFinite(Date.parse(b.finishedAt)))return{runId:b.runId,generationId:a.generationId,status:b.status,finishedAt:b.finishedAt}}async function H(a,b){let c=G(a,b);return!!c&&A(a,async(d,e,f)=>!!d&&"eligible"===y(d,a,e)&&d.pending?.runId===b.runId&&(d.terminal?q(d.terminal)===q(c):(await f({...w(d),terminal:c}),!0)))}async function I(a){return A(a,async(b,c,d)=>{if(!b||"eligible"!==y(b,a,c)||!b.pending||b.terminal?.runId!==b.pending.runId||b.terminal.generationId!==a.generationId)return!1;let e=w(b);return delete e.pending,await d(e),!0})}async function J(a,b){let c=G(a,b);if(!c)return!1;let d=await x(a);return!!d?.terminal&&q(d.terminal)===q(c)&&I(a)}},531243:(a,b,c)=>{c.d(b,{A8:()=>m,K7:()=>s,T5:()=>q,YY:()=>r,Zg:()=>p,eP:()=>o,mn:()=>n,qn:()=>t});var d=c(975128),e=c(71392),f=c(299883),g=c(581991),h=c(663905);let i="scheduler-persona-projections",j="scheduler_persona_projections";function k(a,b){return`${encodeURIComponent(a)}:${encodeURIComponent(b)}`}async function l(){let a=await (0,d.loadItem)(i,{version:1,pending:{},deletedExecutions:{},deletedProjections:{}});return{version:1,pending:a?.version===1&&a.pending&&"object"==typeof a.pending?{...a.pending}:{},deletedExecutions:a?.version===1&&a.deletedExecutions&&"object"==typeof a.deletedExecutions?{...a.deletedExecutions}:{},deletedProjections:a?.version===1&&a.deletedProjections&&"object"==typeof a.deletedProjections?{...a.deletedProjections}:{}}}async function m(a){return(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l(),e=a.execution.generationId?c.deletedExecutions[k(a.execution.id,a.execution.generationId)]:void 0;if(c.deletedExecutions[a.execution.id]||e||c.deletedProjections[a.id])throw Error(`Planned execution ${a.execution.id} was deleted.`);let f=c.pending[a.id];if(f){let{dispatchId:b,firedAt:c,createdAt:d,updatedAt:e,...g}=f,{dispatchId:i,firedAt:j,createdAt:k,updatedAt:l,...m}=a;if((0,h.dj)(g)!==(0,h.dj)(m))throw Error(`Persona scheduler projection ${a.id} conflicts.`);return f}return c.pending[a.id]=a,await b.assertOwned(),await (0,d.VH)(i,c),a}))()}async function n(a,b){return(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async c=>{let e=await l(),f=e.pending[a];if(!f)throw Error(`Persona scheduler projection ${a} disappeared.`);if(f.dispatchId&&f.dispatchId!==b)throw Error(`Persona scheduler projection ${a} changed dispatch identity.`);let g={...f,dispatchId:b,updatedAt:new Date().toISOString()};return e.pending[a]=g,await c.assertOwned(),await (0,d.VH)(i,e),g}))()}async function o(){return Object.values((await l()).pending).sort((a,b)=>a.createdAt.localeCompare(b.createdAt))}async function p(a){await (0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l();a in c.pending&&(delete c.pending[a],await b.assertOwned(),await (0,d.VH)(i,c))}))()}async function q(a,b){await (0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async c=>{let e=await l();for(let[b,c]of Object.entries(e.pending))c.execution.id===a&&(delete e.pending[b],e.deletedProjections[b]=new Date().toISOString());let f=b?k(a,b):a;e.deletedExecutions[f]=new Date().toISOString(),await c.assertOwned(),await (0,d.VH)(i,e)}))()}async function r(a){return f.Qy.parse(a),(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l(),e=0,f=new Date().toISOString();for(let[b,d]of Object.entries(c.pending)){if(d.execution.personaId!==a)continue;delete c.pending[b],c.deletedProjections[b]=f;let g=d.execution.generationId?k(d.execution.id,d.execution.generationId):d.execution.id;c.deletedExecutions[g]=f,e+=1}return 0===e?0:(await b.assertOwned(),await (0,d.VH)(i,c),e)}))()}async function s(a){await (0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async b=>{let c=await l();a in c.deletedExecutions&&(delete c.deletedExecutions[a],await b.assertOwned(),await (0,d.VH)(i,c))}))()}async function t(a,b,c,d){return(0,g.bindToCurrentWorkspace)(()=>(0,e._T)(j,async()=>{let e=await l(),f=b?e.deletedExecutions[k(a,b)]:void 0;return e.deletedExecutions[a]||f||e.deletedProjections[c]?null:d()}))()}},551138:(a,b,c)=>{c(596654);var d=c(351353);c(581991),c(71392),c(662457),(0,d.h)("enduringAgents/leaseHistoryPruning"),Object.freeze({examined:0,deleted:0,retainedProtected:0,retainedUnverifiable:0})},624380:(a,b,c)=>{c(299883),c(758224),c(662457)},663625:(a,b,c)=>{c.a(a,async(a,b)=>{try{c(615773),c(299883),c(758224),c(949219);var d=c(368592);c(71392),c(662457);var e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},678819:(a,b,c)=>{c.d(b,{q:()=>i});var d=c(150930),e=c(475650),f=c(351353),g=c(155167);let h=(0,f.h)("backend/services/scheduler/triggers/mcpPoll");function i(a,b){let c=a.cron||(0,e.X)(a.intervalMs),f=!1,i=!1,j=0,k=0,l=async()=>{if(!i&&!f){if(k>0)return void k--;f=!0;try{let c,d=await b.callTool(a.serverName,a.toolName,a.args);if(!d.success)throw Error(d.error||"Tool call failed");j=0;let e=await b.loadState(),f=a.evaluate;if(c="on-change"===f.mode?(0,g.Jl)(d.data,e):"new-items"===f.mode?(0,g.A1)(d.data,f.itemsPath,f.idField,e):b.evaluateAiGate?await b.evaluateAiGate(d.data,f,e):{fire:!1,newState:{},error:'The "AI decides" condition is not available yet'},i)return;if(Object.keys(c.newState).length>0&&await b.saveState(c.newState),c.error)b.onError(c.error);else if(c.fire){let d={server:a.serverName,tool:a.toolName,..."object"==typeof c.context&&null!==c.context?c.context:{result:c.context}},{status:h,conditionRejected:j}=await b.onFire({summary:`Watched tool: ${c.summary??"condition met"}`,context:d,deliveryId:`mcp-poll-${(0,g.qq)({context:d,evaluateMode:f.mode,attempt:e.pendingFailures??0,pendingState:c.pendingState,gateState:c.pendingState?void 0:c.newState})}`});if(i)return;if(c.pendingState){let{giveUpError:a}=await (0,g.vV)({status:h,conditionRejected:j,pendingState:c.pendingState,priorFailures:e.pendingFailures??0,saveState:b.saveState});a&&b.onError(a)}}else b.onSuccess?.()}catch(d){j++,k=Math.min(2**(j-1),8);let c=d instanceof Error?d.message:String(d);h.warn(`Poll failed for ${a.serverName}/${a.toolName} (backing off ${k} check(s)): ${c}`),b.onError(c)}finally{f=!1}}},m=new d.l4(c,{timezone:a.timezone,unref:!0},()=>void l());return l(),{dispose:()=>{i=!0,m.stop()},nextRun:()=>m.nextRun()?.toISOString()??null}}},714750:(a,b,c)=>{var d=c(351353);c(758224),c(982389),c(269674),c(250396),c(662457),(0,d.h)("backend/services/enduringAgents/memoryBackfill")},745543:(a,b,c)=>{c.d(b,{Bw:()=>m,FP:()=>l,QA:()=>j,pC:()=>n});var d=c(975128),e=c(351353),f=c(455511),g=c(71392);let h=(0,e.h)("backend/services/scheduler/state"),i=a=>`planned-execution-state/${a}`;async function j(a){try{return await (0,d.loadItem)(i(a),{})}catch(b){return h.error(`Failed to load trigger state for ${a}:`,b),{}}}async function k(a,b,c){await (0,d.VH)(i(a),b,c)}async function l(a,b,c){let d=`scheduler_state_${(0,f.createHash)("sha256").update(a).digest("hex").slice(0,40)}`;return(0,g._T)(d,async d=>{await c?.();let e=b(await j(a));return await k(a,e,async()=>{await d.assertOwned(),await c?.()}),e})}async function m(a,b,c){let d=Date.parse(b);if(!Number.isFinite(d))throw TypeError(`Invalid scheduled occurrence timestamp ${JSON.stringify(b)}.`);let e=`scheduler_state_${(0,f.createHash)("sha256").update(a).digest("hex").slice(0,40)}`;return(0,g._T)(e,async b=>{let e=await j(a),f=e.lastScheduledFireAt?Date.parse(e.lastScheduledFireAt):-1/0;if(Number.isFinite(f)&&f>=d)return e;let g={...e,lastScheduledFireAt:new Date(d).toISOString()};return await b.assertOwned(),await k(a,g,async()=>{await b.assertOwned(),c&&await c(),await b.assertOwned()}),g})}async function n(a){await (0,d.N2)(i(a))}},770641:(a,b,c)=>{c(299883),c(581991),c(975128),c(663905),c(27682),c(949219)},803274:(a,b,c)=>{c.a(a,async(a,b)=>{try{c(455511);var d=c(351353),e=c(673764);c(771270),c(662457);var f=a([e]);e=(f.then?(await f)():f)[0],(0,d.h)("backend/services/enduringAgents/runtimeObservability"),b()}catch(a){b(a)}})},811585:(a,b,c)=>{c(949219)},833380:(a,b,c)=>{c(615773),c(299883),c(949219),c(71392),c(662457)},872374:(a,b,c)=>{c.d(b,{t:()=>h});var d=c(150930),e=c(351353),f=c(155167);let g=(0,e.h)("backend/services/scheduler/triggers/urlWatch");function h(a,b){let c=b.fetchImpl??fetch,e=!1,h=!1,i=async()=>{if(!h&&!e){e=!0;try{await b.assertCurrent?.();let d=await c(a.url,{redirect:"follow",headers:{"User-Agent":"FLUJO-url-watch"},signal:AbortSignal.timeout(3e4)});if(!d.ok)return void b.onError(`The URL answered with HTTP ${d.status}`);await b.assertCurrent?.();let e=await d.text();await b.assertCurrent?.();let g=(0,f.qq)(e),i=await b.loadState();if(await b.assertCurrent?.(),h)return;if(!i.lastHash){await b.saveState({lastHash:g}),b.onSuccess?.();return}if(i.lastHash===g)return void b.onSuccess?.();await b.assertCurrent?.();let{status:j,conditionRejected:k}=await b.onFire({summary:"Online content changed",deliveryId:`url-watch-${g}-attempt-${i.pendingFailures??0}`,context:{url:a.url,status:d.status,contentType:d.headers.get("content-type")??void 0,content:e.length>8192?`${e.slice(0,8192)}… (truncated, ${e.length} chars total)`:e}});if(h)return;await b.assertCurrent?.();let{giveUpError:l}=await (0,f.vV)({status:j,conditionRejected:k,pendingState:{lastHash:g},priorFailures:i.pendingFailures??0,saveState:b.saveState});l&&b.onError(l)}catch(d){let c=d instanceof Error&&"TimeoutError"===d.name?"The URL did not answer within 30s":d instanceof Error?d.message:String(d);g.warn(`URL check failed for ${a.url}: ${c}`),b.onError(c)}finally{e=!1}}},j=new d.l4(a.cron,{timezone:a.timezone,unref:!0},()=>void i());return i(),{dispose:()=>{h=!0,j.stop()},nextRun:()=>j.nextRun()?.toISOString()??null}}},911339:(a,b,c)=>{c.a(a,async(a,b)=>{try{c(455511),c(299883);var d=c(756368);c(466799),c(630295),c(265230),c(975128),c(581991),c(424375),c(784789),c(311854);var e=c(259760);c(614331);var f=c(673764),g=c(940569);c(663905),c(530775),c(27682),c(661605),c(949219),c(991169);var h=c(14130);c(71392),c(771270),c(413050),c(662457);var i=a([d,e,f,g,h]);[d,e,f,g,h]=i.then?(await i)():i,b()}catch(a){b(a)}})},922817:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Q:()=>k,p:()=>l});var e=c(351353),f=c(614331),g=c(951328),h=c(671399),i=c(474291),j=a([g,h]);[g,h]=j.then?(await j)():j;let m=(0,e.h)("backend/execution/flow/validateFlowForRun");async function k(a){let b,c,d,e;try{b=await g.modelService.loadModels()}catch(a){m.warn("validateFlowObjectForRun: could not load models; skipping model checks",a)}try{let a=await h.mcpService.loadServerConfigs();Array.isArray(a)&&(d=a,c=a.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}catch(a){m.warn("validateFlowObjectForRun: could not load servers; skipping server checks",a)}try{let b=new Map((Array.isArray(d)?d:[]).map(a=>[a.name,!!a.disabled])),c=new Set;for(let b of a.nodes){let a=b?.data?.type??b?.type,d=b?.data?.properties?.boundServer;"mcp"===a&&"string"==typeof d&&d&&c.add(d)}let f=await Promise.all([...c].map(async a=>{if(b.get(a))return null;let c=await h.mcpService.listServerTools(a);return c.error||!Array.isArray(c.tools)?null:[a,c.tools.map(a=>a?.name).filter(a=>"string"==typeof a)]}));for(let a of(e={},f))a&&(e[a[0]]=a[1])}catch(a){m.warn("validateFlowObjectForRun: could not gather serverTools; skipping tool checks",a),e=void 0}return(0,i.nC)(a,{models:b,servers:c,serverTools:e})}async function l(a){let b=await f.flowService.getFlow(a);return b?k(b):(m.warn(`validateFlowForRun: flow ${a} could not be loaded; skipping pre-run checks`),{issues:[],errorCount:0,warningCount:0,isRunnable:!0})}d()}catch(a){d(a)}})},966733:(a,b,c)=>{c.d(b,{MF:()=>p,putPendingApproval:()=>o});var d=c(975128),e=c(164986),f=c(351353),g=c(581991),h=c(71392),i=c(299883);let j=(0,f.h)("backend/services/scheduler/pendingApprovals"),k=e.Zg.PENDING_APPROVALS,l="scheduler_pending_approvals",m=new Map;async function n(){try{let a=await (0,d.loadItem)(k,{});return a&&"object"==typeof a?a:{}}catch(a){return j.error("Failed to load pending approvals:",a),{}}}async function o(a){let b=(0,g.getCurrentWorkspace)(),c=(0,g.bindToCurrentWorkspace)(async()=>{await (0,h._T)(l,async b=>{let c=await n(),e=c[a.approvalId];if(e&&(e.conversationId!==a.conversationId||e.plannedExecutionId!==a.plannedExecutionId||e.runId!==a.runId))throw Error(`Pending approval ${a.approvalId} conflicts with another run.`);c[a.approvalId]=a,await b.assertOwned(),await (0,d.VH)(k,c)})}),e=(m.get(b)??Promise.resolve()).catch(()=>{}).then(c);m.set(b,e);try{await e}finally{m.get(b)===e&&m.delete(b)}}async function p(a){i.Qy.parse(a);let b=(0,g.getCurrentWorkspace)(),c=0,e=(0,g.bindToCurrentWorkspace)(async()=>{await (0,h._T)(l,async b=>{let e=await n();for(let[b,d]of Object.entries(e))d.terminalPublication?.execution.personaId===a&&(delete e[b],c+=1);0!==c&&(await b.assertOwned(),await (0,d.VH)(k,e))})}),f=(m.get(b)??Promise.resolve()).catch(()=>{}).then(e);m.set(b,f);try{await f}finally{m.get(b)===f&&m.delete(b)}return c}}};