flujo-ai 3.47.0 → 3.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +54 -54
  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 +54 -54
  469. package/.next/server/chunks/15662.js +3 -3
  470. package/.next/server/chunks/21619.js +1 -1
  471. package/.next/server/chunks/28398.js +2 -2
  472. package/.next/server/chunks/{32834.js → 29288.js} +3 -3
  473. package/.next/server/chunks/{38479.js → 32821.js} +2 -2
  474. package/.next/server/chunks/37388.js +2 -2
  475. package/.next/server/chunks/66087.js +2 -2
  476. package/.next/server/chunks/81306.js +1 -1
  477. package/.next/server/chunks/83718.js +1 -1
  478. package/.next/server/chunks/97235.js +1 -1
  479. package/.next/server/middleware-build-manifest.js +1 -1
  480. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  481. package/.next/server/pages/500.html +1 -1
  482. package/.next/server/preview-props.json +3 -3
  483. package/.next/server/server-reference-manifest.js +1 -1
  484. package/.next/server/server-reference-manifest.json +1 -1
  485. package/.next/static/chunks/{2103-a6bdf01e6f03c029.js → 2103-08e9b68a6ad6d1d1.js} +1 -1
  486. package/.next/static/chunks/{webpack-de65dd56b3485e8f.js → webpack-4bf9759a328c70e2.js} +1 -1
  487. package/.next/trace-build +1 -1
  488. package/README.md +1 -1
  489. package/mcp-servers/bash/package.json +1 -1
  490. package/mcp-servers/browser/package.json +1 -1
  491. package/mcp-servers/filesystem/package.json +1 -1
  492. package/mcp-servers/flujo/package.json +1 -1
  493. package/package.json +5 -5
  494. /package/.next/static/{YlJGyODWwQegJOdnlMS3b → QzMf94E1c_E9j47ZDfH3f}/_buildManifest.js +0 -0
  495. /package/.next/static/{YlJGyODWwQegJOdnlMS3b → QzMf94E1c_E9j47ZDfH3f}/_ssgManifest.js +0 -0
@@ -25,7 +25,7 @@ ${a0}
25
25
 
26
26
  ${b}`:[...X,{type:"text",text:b}],k=c,f=structuredClone(a),a9="",bc=!1,ao=!1,co.info("Restarting Codex SDK turn with mid-run steering message(s)",{conversationId:Y,count:a.length});continue}if(an||!b||aH.length>0)break;if(!a.harnessTextOnly&&!(0,d.VU)()&&!x&&!ah&&!U&&!ao&&!am.signal.aborted&&(!((e=b)instanceof Error)||"AbortError"!==e.name)&&(e instanceof Error?e.message:String(e??"")).includes("Connection closed mid-response. The response above may be incomplete.")){ao=!0,ak=ac,f=[{role:"user",content:ac}],co.warn("Codex connection closed mid-response; continuing the same thread once");continue}q=b.message;break}if(q&&0===aH.length&&!an)throw Error(`Codex run failed: ${q}`)}catch(b){if((0,J.Vj)(b),i&&((0,cn.jF)(i.key),ac?.(void 0)),!a.harnessTextOnly&&!(0,d.VU)()&&!x&&!ah&&j&&!S?.aborted&&0===aH.length&&!an&&0===aq.length)return co.warn("Codex SDK thread resume failed; retrying on a fresh thread",{conversationId:Y,nodeId:$,model:G.name,errorClass:b instanceof Error?b.name:typeof b}),this.createCompletion({...a,codexSession:void 0});if(0===aH.length&&!an)throw b}finally{let a;S?.removeEventListener("abort",ap);try{await x?.close()}catch(b){a=b}await n?.close().catch(()=>void 0);try{if(!x&&r&&bd&&!ai){let a=await cm(r,bd);a&&a.timestamp>=F&&(bg=a.contextUsage,o=a.totalUsage),!a3&&o&&s&&(o=b8(o,s.totalUsage))}a3&&j&&(o=bd===j?b9(o,s?.totalUsage):void 0,ba=void 0===o),k&&!a&&await a2.promises.rm(k,{recursive:!0,force:!0}).catch(()=>void 0)}finally{try{await y?.()}finally{let b=async()=>{await z?.().catch(()=>co.warn("Failed to remove Codex model catalog snapshot")),await A?.().catch(()=>co.warn("Failed to release Codex CLI lease"))};if(a){co.warn("Codex runtime resources retained pending confirmed owned process closure");let a=x?.whenClosed();a&&a.then(async()=>{k&&await a2.promises.rm(k,{recursive:!0,force:!0}).catch(()=>void 0),await b()}).catch(()=>co.warn("Codex owned process closure remains unconfirmed"))}else await b()}}if(a)throw a}if(U&&await (0,p.assertExecutionExtensionCurrent)(U,{conversationId:Y,runId:Z}),aH.length>0&&(B=aH.map(a=>({id:a.id??`call_${(0,l.A)()}`,type:"function",function:{name:a.name,arguments:JSON.stringify(a.args)}}))),B?aA({role:"assistant",content:null,tool_calls:B}):bb||an||aA({role:"assistant",content:a9||""}),i){if(bc&&bf&&!q&&!S?.aborted&&!an&&0===aH.length&&bd){let a=(0,cn.t7)([...I,...aq]),b=I.length+aq.length,c=x?.completedTurnId?.(),d=(0,cn.UL)(w).filter(a=>!v||a.seenMessageCount<=v.checkpoint.seenMessageCount),e=c&&u?[...d,{turnId:c,historyHash:a,seenMessageCount:b,totalUsage:u}].slice(-32):void 0,f=(0,cn.R6)(i.key,{adapter:i.configuration.adapter,provider:i.configuration.provider,threadId:bd,...u?{totalUsage:u}:{},...e?{checkpoints:e}:{},...x?.nativeSessionId?.()?{nativeSessionId:x.nativeSessionId()}:{},...v?{forkedFrom:{threadId:v.session.threadId,turnId:v.checkpoint.turnId}}:w?.forkedFrom?{forkedFrom:w.forkedFrom}:{},configurationHash:i.prefixHash,prefixHash:i.prefixHash,seenMessageCount:b,historyHash:a});ac?.(f)}else(0,cn.jF)(i.key),ac?.(void 0);co.debug("Codex SDK thread usage",{conversationId:Y,nodeId:$,sessionResume:!!aa,resumedThisTurn:!!j,capturedThread:!!bd,completedTurn:bc,inputMessages:I.length,transcriptMessages:aq.length,watermark:I.length+aq.length,endedByHandoff:aH.length>0,endedByCaller:an})}let bh=(f=o,C=f?.input_tokens??0,{promptTokens:C,completionTokens:D=f?.output_tokens??0,totalTokens:C+D,...f?.reasoning_output_tokens!=null?{reasoningTokens:f.reasoning_output_tokens}:{},...f?.cached_input_tokens!=null?{cacheReadTokens:f.cached_input_tokens}:{},...f?.cache_write_input_tokens!=null?{cacheWriteTokens:f.cache_write_input_tokens}:{}});return{completion:{id:`codex_${(0,l.A)()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:G.name,choices:[{index:0,finish_reason:B?"tool_calls":"stop",logprobs:null,message:{role:"assistant",content:a9||null,refusal:null,...B?{tool_calls:B}:{}}}],...!ba&&!be?{usage:{prompt_tokens:bh.promptTokens,completion_tokens:bh.completionTokens,total_tokens:bh.totalTokens,...null!=bh.reasoningTokens?{completion_tokens_details:{reasoning_tokens:bh.reasoningTokens}}:{},...null!=bh.cacheReadTokens||null!=bh.cacheWriteTokens?{prompt_tokens_details:{cached_tokens:bh.cacheReadTokens??0,cache_write_tokens:bh.cacheWriteTokens??0}}:{}}}:{}},transcript:aq,contextUsage:bg,...ah?{nativeSdkTerminal:bc&&!am.signal.aborted&&!S?.aborted&&!q}:{}}}}var cs=c(545479),ct=c(359332),cu=c(229126);let cv=(0,h.h)("backend/services/model/adapters/antigravityCliAdapter");function cw(a){return a.replace(/[^a-zA-Z0-9_-]/g,"_")}function cx(a){return a.startsWith("handoff_to_")||"handoff"===a}class cy{async createCompletion(a){let b,c,d,e,f,g,h,i;if((0,p.assertOwnerCredentialAdapterRoute)(a.model,"antigravity-cli"),a.executionExtensionContext)throw new p.ExecutionExtensionError("execution_model_adapter_forbidden");let{model:k,apiKey:n,messages:o,tools:q,toolNameMap:r,localToolExecutors:s,shouldEndAgenticTurn:t,requestToolApproval:u,onTranscriptMessage:v,onModelDelta:w,onToolProgress:x,signal:y,beforeToolDispatch:z,authorizePersonaCoreMcp:A,afterToolDispatch:B,commitDurableMutation:C,conversationId:D,runId:E,nodeId:F,runResourceMarkers:G}=a,H=(0,aV.Jm)(o,G),I=o.flatMap(a=>"user"===a.role?(0,m.IB)(a.content):[]);if(H.images.length||I.length||o.some(a=>(0,m.pt)(a.content).length>0))throw Error("Antigravity CLI connections currently support text input only. Use a native Gemini connection for image, document, audio, or video attachments.");let K=new AbortController,L=Number.isFinite(a.maxTurns)&&(a.maxTurns??0)>0?Math.floor(a.maxTurns):br.mP,M=Date.now()+cs.X3,N=new AbortController,O=AbortSignal.any([K.signal,N.signal,AbortSignal.timeout(cs.X3)]),P=a=>new Promise((b,c)=>{if(O.aborted)return void c((0,ct.L5)());let d=()=>{c((0,ct.L5)())};O.addEventListener("abort",d,{once:!0}),Promise.resolve().then(()=>{if(O.aborted)throw(0,ct.L5)();return a()}).then(b,c).finally(()=>O.removeEventListener("abort",d))}),Q=0,R=new Set,S=!1,T=()=>({content:[{type:"text",text:"This agentic turn has ended; no further tools may run."}],isError:!0}),U=()=>{K.abort(),b?.abort()};y?.aborted?K.abort():y?.addEventListener("abort",U,{once:!0});let V=[],W=new Set,X=new Map,Y=Date.now(),Z=0,$=`${Y}_${(0,l.A)()}`,_=a=>`stream_antigravity_cli_${$}_${a}`,aa=(a,b=`m_${(0,l.A)()}`)=>{let c={...a,id:b,timestamp:Y+Z++};V.push(c),v?.(c)},ab=a=>{V.push(a),v?.(a)},ac=(a,b)=>{X.delete(a.id),W.add(a.id),aa({role:"assistant",content:"",tool_calls:[{id:a.id,type:"function",function:{name:a.name,arguments:a.argsJson}}]},b)},ad=async a=>{W.add(a.id);let b=_(`toolcall_${a.id}`);if(X.set(a.id,{call:a,messageId:b}),await P(()=>bT({messageId:b,callId:a.id,name:a.name,argsJson:a.argsJson,onModelDelta:w?a=>{O.aborted||w(a)}:void 0})),O.aborted)throw(0,ct.L5)();ac(a,b)},ae=a=>{W.has(a.id)&&(aa({role:"tool",tool_call_id:a.id,content:a.resultContent,...a.ui?{ui:a.ui}:{}}),W.delete(a.id))},af=[],ag=!1,ah=!1,ai=async(a,b,c,d)=>{if(!u||await P(()=>u({id:a,name:b,args:c}))&&!K.signal.aborted&&!t?.())return null;let e="tool denied",f=await d?.(e);return ae({id:a,resultContent:e,...f?{ui:f}:{}}),{content:[{type:"text",text:e}],isError:!0}},aj=new Set((q??[]).filter(a=>cx(a.function.name)||s?.[a.function.name]).map(a=>a.function.name)),ak=(q??[]).filter(a=>"function"===a.type).map(a=>{let b=a.function.name,c=cx(b),d=r?.[b],e=s?.[b];if(!c&&!d&&!e)return null;let f=a.function.parameters,g=a.function.description??"";if(c){let a=!!f?.properties?.task;return{name:b,description:g,inputSchema:f,handler:async c=>{if(K.signal.aborted||t?.())return T();if(u&&!await P(()=>u({id:`call_${(0,l.A)()}`,name:b,args:c??{}})))return{content:[{type:"text",text:"tool denied"}],isError:!0};await al();let d=Date.now();return af.length>=32?{content:[{type:"text",text:"Maximum parallel handoffs reached."}],isError:!0}:(af.push({name:b,args:c??{}}),E&&(0,bt.z9)((0,bt.k)({type:"tool.invocation",runId:E,node:F?{id:F}:void 0,tool:{id:b,name:b,kind:"handoff"},outcome:"completed",durationMs:Math.max(0,Date.now()-d)})),cv.debug("Antigravity CLI requested handoff",{tool:b,callIndex:af.length,spawnable:a}),a)?{content:[{type:"text",text:"Worker spawned for this task. Call this tool again right now to spawn another parallel worker (one call per task). When you stop calling it, all spawned workers run concurrently and their merged results come back."}]}:(ah=!0,ag=!0,{content:[{type:"text",text:"Handing off."}]})}}}if(e)return{name:b,description:g,inputSchema:f,handler:async a=>{let c;if(K.signal.aborted||t?.())return T();let d=`call_${(0,l.A)()}`,f=JSON.stringify(a??{});await ad({id:d,name:b,argsJson:f});let g=await ai(d,b,a??{});if(g)return g;await al(),cv.debug("Antigravity CLI local tool call",{tool:b});let h=Date.now(),i=!1;try{if(c=JSON.stringify(await P(()=>e(a??{},{signal:O})))??"null",O.aborted)throw(0,ct.L5)();B&&await P(B)}catch(a){if(a?.code==="flow_execution_authority_lost"||a?.name==="AbortError")throw a;c=`Error: ${a instanceof Error?a.message:String(a)}`,i=!0}return ae({id:d,resultContent:c}),E&&(0,bt.z9)((0,bt.k)({type:"tool.invocation",runId:E,node:F?{id:F}:void 0,tool:{id:b,name:b,kind:"synthetic"},outcome:i?"error":"completed",durationMs:Math.max(0,Date.now()-h),errorClass:i?(0,bt.Ys)({type:"tool"}):void 0})),i?{content:[{type:"text",text:c}],isError:!0}:{content:[{type:"text",text:c}]}}};let{server:h,tool:i,timeout:j,nodeId:k,annotations:m,uiResourceUri:n,presetArgs:o,context:p}=d,q=function(a,b,c){let d=`${cw(a)}__${cw(b)}`;d.length>110&&(d=d.slice(0,110));let e=d,f=2;for(;c.has(e);){let a=`_${f++}`;e=d.slice(0,110-a.length)+a}return c.add(e),e}(h,i,aj);return{name:q,description:g,inputSchema:f,...m?{annotations:m}:{},handler:async a=>{let b,c;if(K.signal.aborted||t?.())return T();let d=`call_${(0,l.A)()}`,e=JSON.stringify(a??{});await ad({id:d,name:q,argsJson:e});let f=await (0,bs.sz)(a??{},o,p),g=await ai(d,q,a??{},async b=>{let c=await (0,aP.JG)(h,i,n,void 0,a??{});return c?{...c,cancelledReason:b,isError:!0}:void 0});if(g)return g;await al(),A&&await P(()=>A(h,k)),cv.debug("Antigravity CLI tool call",{server:h,tool:i,exposedAs:q});let m=Date.now(),r=await P(()=>az.mcpService.callTool(h,i,f,j??aQ.aI,x?a=>x({toolCallId:d,name:q,progress:a.progress,total:a.total,message:a.message}):void 0,k,O,"model",(0,aL.S)({runId:E,conversationId:D}),D?{conversationId:D}:void 0));if(O.aborted)throw(0,ct.L5)();if(B&&await P(B),E){let a=!!(K.signal.aborted||(0,aP.AP)(r));(0,bt.z9)((0,bt.k)({type:"tool.invocation",runId:E,node:{id:k??F??"unknown"},tool:{id:i,name:i,kind:"mcp"},provider:{id:h},outcome:a?"cancelled":r.success?"completed":"error",durationMs:Math.max(0,Date.now()-m),errorClass:r.success?void 0:(0,bt.Ys)(a?{type:"cancelled"}:r.error)}))}if(r.success){b=r.data;let{mediaItems:a,textResult:e}=(0,aO.UR)(b);if(c=JSON.stringify(e),D){let e=async()=>{try{let a=await (0,aM.jR)();return await (0,aN.S)({conversationId:D,toolCallId:d,server:h,toolName:i,nodeId:k,content:c,settings:a})}catch(a){return(0,J.Vj)(a),cv.warn("boundToolResult failed on Antigravity CLI path; keeping full result",a),null}},f=C?await C(e):await e();f?.spilled&&(c=f.content,b={...b,content:[...a,{type:"text",text:f.content}]},delete b.structuredContent)}}else b={content:[{type:"text",text:c=`Error: ${r.error??"Unknown error"}`}],isError:!0};let s=await (0,aP.JG)(h,i,n,r.data,a??{}),u=(0,aP.AP)(r),v=s?{...s,...!r.success?{isError:!0}:{},...u?{cancelledReason:u}:{}}:void 0;return ae({id:d,resultContent:c,...v?{ui:v}:{}}),b}}}).filter(a=>null!==a),al=async()=>{if(O.aborted)throw(0,ct.L5)();if(t?.())throw Error("This agentic turn has ended.");if(z&&await P(z),O.aborted)throw(0,ct.L5)();if(t?.())throw Error("This agentic turn has ended.")},am=0,an=async()=>{if(am&&!O.aborted)try{await P(()=>new Promise(a=>{d=a}))}catch(a){if(a?.name!=="AbortError")throw a}},ao=ak.map(a=>({...a,handler:async e=>{if(as(),ag||O.aborted||t?.())return T();if(af.length&&!cx(a.name))return ag=!0,b?.abort(),T();am++;try{if(++Q>L)throw c=Error("Antigravity CLI exceeded the FLUJO tool dispatch budget."),K.abort(),b?.abort(),c;var f=await a.handler(e);if(f.structuredContent||f.content[0]?.type!=="text")return f;try{let a=JSON.parse(f.content[0].text);if(null!==a&&"object"==typeof a&&!Array.isArray(a))return f;return{...f,structuredContent:{result:a}}}catch{return f}}catch(a){try{(0,J.Vj)(a)}catch(a){c=a,K.abort(),b?.abort()}throw at(a instanceof Error&&"AbortError"===a.name?"tool cancelled":"tool failed"),a}finally{--am||(d?.(),d=void 0);let a=t?.()??!1;(ag&&!ah||a)&&(S=a||0===af.length,b?.abort())}}})),ap="",aq=_(`text_${(0,l.A)()}`),ar="",as=()=>{ap&&(ar=ap,e=aq,aa({role:"assistant",content:ap},aq),ap="",aq=_(`text_${(0,l.A)()}`))},at=a=>{for(let b of W){let c=X.get(b);c&&ac(c.call,c.messageId),ae({id:b,resultContent:a})}},au=aT(a),av=!1,aw=aU({source:au,canDeliver:()=>av&&!am&&!f&&!K.signal.aborted&&!ag&&!af.length,deliver:async a=>{(await a.beforeSend(),am||K.signal.aborted||ag||af.length)?a.requeue():(f=a,b?.abort())},onError:a=>{c=a,b?.abort()}}),ax=(0,cu.e)({input_tokens:0,output_tokens:0,cache_read_tokens:0,thinking_tokens:0}),ay=!0,aA=[],aB=[...o];try{if(K.signal.aborted)throw(0,ct.L5)();if(t?.()&&(S=!0),!S){ao.length&&(i=await (0,bH.t)(ao)),h=await (0,cs.Wu)({model:k.name,apiKey:n,maxTurns:L,...i?{bridge:{url:i.url,tools:ao.map(a=>a.name),definitions:ao.map(({name:a,description:b,inputSchema:c})=>({name:a,description:b,inputSchema:c}))}}:{}});let d=L;for(;!S&&!ag&&!af.length;){let e,i;if(K.signal.aborted)throw(0,ct.L5)();if(c)throw c;if(d--<=0)throw Error("Antigravity CLI exceeded the steering turn limit.");b=new AbortController;let l=(0,aV.Jm)(aB,G),m=(0,ct.O1)([l.systemPrompt?`<system_instructions>
27
27
  ${l.systemPrompt}
28
- </system_instructions>`:"",l.text].filter(Boolean).join("\n\n")),n=!1,o=!1,p=!1,q=Q,r=V.length;try{if(await (0,j.C)(a,{adapter:"antigravity-cli",operation:"agy --input-format stream-json --output-format stream-json",request:{model:k.name,prompt:m,toolDispatchBudget:L,stepBudget:8*L+16,tools:ao.map(({name:a,description:b,inputSchema:c})=>({name:a,description:b,inputSchema:c}))},wireMessages:[...aB]},()=>(0,ct.qN)({runtime:h,model:k.name,prompt:m,signal:b.signal,timeoutMs:M-Date.now(),onStarted:async()=>{av=!0,await g?.acknowledge(),g=void 0},onEvent:a=>{if(c)throw c;if(t?.()){S=!0,b?.abort();return}if("init"===a.event){if(i||"flujo"!==a.init.agent||"request-review"!==a.init.permission_mode)throw Error("Antigravity CLI returned an unexpected invocation configuration.");i=a.conversation_id}else if("step_update"===a.event){let c=a.step_update;if(c.conversation_id!==i)throw Error("Antigravity CLI changed conversation identity.");if(R.add(`${i}:${c.step_index}`),R.size>8*L+16)throw Error("Antigravity CLI exceeded the FLUJO execution step budget.");if("error_message"===c.step_type&&(n=!0),"tool"===c.step_type){if(!["call_mcp_tool","list_resources","read_resource","manage_task"].includes(c.tool_name??""))throw Error("Antigravity CLI attempted an unbound native tool.");if("manage_task"!==c.tool_name){let a=c.tool_info?.parameters;if(a?.ServerName!=="flujo"||"call_mcp_tool"===c.tool_name&&!ao.some(b=>b.name===a.ToolName))throw Error("Antigravity CLI attempted an unbound MCP tool.")}o&&(as(),o=!1)}if("agent_response"!==c.step_type)return;if(af.length&&!ah){ag=!0,b?.abort();return}if(e)throw Error("Antigravity CLI emitted text after its final result.");let d=c.text_delta??"";p||=!!d.trim(),ap+=d,o||=!!d,d&&w?.({messageId:aq,contentDelta:d})}else if("result"===a.event){if(e)throw Error("Antigravity CLI emitted duplicate final results.");if(a.result.conversation_id!==i)throw Error("Antigravity CLI changed conversation identity.");if(e=a.result,p||=!!e.response.trim(),!ap&&e.response)ap=e.response,w?.({messageId:aq,contentDelta:e.response});else if(e.response&&e.response!==ap){if(!e.response.startsWith(ap))throw Error("Antigravity CLI final text disagreed with its stream.");let a=e.response.slice(ap.length);ap+=a,a&&w?.({messageId:aq,contentDelta:a})}aA.push(Object.fromEntries(Object.entries(a.result.usage??{}).filter(([a,b])=>["total_tokens","input_tokens","output_tokens","thinking_tokens","cache_read_tokens"].includes(a)&&"number"==typeof b&&Number.isSafeInteger(b)&&b>=0)));let b=(0,cu.e)(a.result.usage);if(!b){ay=!1;return}ax.prompt_tokens+=b.prompt_tokens,ax.completion_tokens+=b.completion_tokens,ax.total_tokens+=b.total_tokens,ax.prompt_tokens_details.cached_tokens+=b.prompt_tokens_details?.cached_tokens??0,b.completion_tokens_details?.reasoning_tokens===void 0?delete ax.completion_tokens_details:ax.completion_tokens_details&&(ax.completion_tokens_details.reasoning_tokens+=b.completion_tokens_details.reasoning_tokens),Number.isSafeInteger(ax.total_tokens)||(ay=!1),"SUCCESS"!==a.result.status&&(n=!0)}}})),am&&e)throw Error("Antigravity CLI ended before pending FLUJO tools completed.");if(!e||"SUCCESS"!==e.status||n)throw Error(`Antigravity CLI failed to complete a valid response. Check model access and your Google account login or Gemini API key.${(0,ct.Qv)(e?.error??"")}`);if(!p&&Q===q&&!af.length&&!S)throw Error("Antigravity CLI failed to complete a valid response: no assistant output or tool dispatch was returned.")}catch(a){if(f||N.abort(),e||(ay=!1),c)throw c;if(K.signal.aborted)throw(0,ct.L5)();if(ah&&!S||!f&&!ag&&!af.length&&!S)throw a}finally{av=!1,await an(),as(),at("tool cancelled")}if(!f)break;for(let a of(g=f,f=void 0,aB.push(...V.slice(r)),g.messages))ab(a),aB.push(a);await g.beforeSend()}}}finally{N.abort(),await aw.stop(),y?.removeEventListener("abort",U),b?.abort(),await an(),g?.requeue(),f?.requeue(),as(),at("tool cancelled");try{await i?.close()}finally{await h?.cleanup()}}if(c)throw c;if(K.signal.aborted)throw(0,ct.L5)();let aC=af.length?af.map(a=>({id:`call_${(0,l.A)()}`,type:"function",function:{name:a.name,arguments:JSON.stringify(a.args)}})):void 0;return aC&&aa({role:"assistant",content:null,tool_calls:aC}),{completion:{id:`antigravity_cli_${(0,l.A)()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:k.name,choices:[{index:0,finish_reason:aC?"tool_calls":"stop",logprobs:null,message:{role:"assistant",content:ar||null,refusal:null,...aC?{tool_calls:aC}:{}}}],...ay&&aA.length?{usage:ax}:{},...aA.length?{flujo_antigravity_usage:{reported:aA,complete:ay}}:{}},transcript:V,liveMessageId:e,contextUsage:null}}}var cz=c(963376);let cA=(0,h.h)("backend/services/model/adapters/openrouterMediaAdapter");function cB(a,b){let c=(a?.trim()||"https://openrouter.ai/api/v1").replace(/\/+$/,"");return new URL(`${c}/${b}`)}function cC(a){for(let b=a.length-1;b>=0;b--){let c=a[b];if("user"!==c.role)continue;let d=(0,m.Xz)(c.content).trim();if(d)return d}throw Error("OpenRouter media generation requires a non-empty user prompt.")}function cD(a){for(let b=a.length-1;b>=0;b--){let c=a[b];if("user"!==c.role)continue;let d=(0,m.dl)(c.content);if(d.length>0)return d[d.length-1].url}}function cE(a,b,c,d){return{contextUsage:null,media:c,completion:{id:b,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a,choices:[{index:0,finish_reason:"stop",logprobs:null,message:{role:"assistant",content:null,refusal:null}}],...d?{usage:d}:{}}}}function cF(a){if("string"==typeof a)return a;if(a&&"object"==typeof a){if("string"==typeof a.message)return a.message;let b=a.error&&"object"==typeof a.error?a.error:void 0;if("string"==typeof b?.message)return b.message}try{return JSON.stringify(a)??String(a)}catch{return String(a)}}let cG=/no (endpoint|allowed providers)|not found|unknown route/i;async function cH(a,b,c){let d=a.statusText||`HTTP ${a.status}`;try{let b=await a.json();d=cF(b.error??b)||d}catch{try{d=(await a.text()).trim()||d}catch{}}return 404===a.status||cG.test(d)?Error(`OpenRouter has no dedicated /${c} route for "${b.name}". This model is served by /chat/completions — remove "image"/"video" from its output modalities or re-sync the model from the OpenRouter catalogue (Models → Fetch models). (provider detail: ${d})`):Error(`OpenRouter media API returned ${a.status}: ${d}`)}async function cI(a,b,c){let d=Date.now();try{let e=await fetch(a,{...b,signal:c.signal});return c.onProviderAttempt?.({attempt:1,durationMs:Math.max(0,Date.now()-d),outcome:"completed",result:{status:e.status}}),e}catch(a){throw c.onProviderAttempt?.({attempt:1,durationMs:Math.max(0,Date.now()-d),outcome:c.signal?.aborted?"cancelled":"error",error:a}),a}}function cJ(a){return{Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json",...(0,i.lj)("openrouter")??{}}}async function cK(a){let b=cB(a.model.baseUrl,"images"),c=cC(a.messages),d=cD(a.messages),e={model:a.model.name,prompt:c,...d?{input_references:[{type:"image_url",image_url:{url:d}}]}:{}},f=await (0,j.C)(a,{adapter:"openrouter-media",operation:"POST /images",request:e},()=>cI(b,{method:"POST",headers:cJ(a),body:JSON.stringify(e)},a));if(!f.ok)throw await cH(f,a.model,"images");let g=await f.json();if(g.error)throw Error(`OpenRouter image generation failed: ${cF(g.error)}`);let h=(g.data??[]).flatMap(a=>{let b=a.media_type??a.mime_type??"image/png";return a.b64_json?[{type:"image",data:a.b64_json,mimeType:b}]:a.url?[{type:"image",url:a.url,mimeType:b}]:[]});if(0===h.length)throw Error("OpenRouter image generation completed without an image.");return cE(a.model.name,`openrouter-image-${(0,l.A)()}`,h,g.usage)}async function cL(a,b,c){let d,e=function(a,b){if(!a.id)throw Error("OpenRouter video job completed without a job id.");return new URL(`videos/${encodeURIComponent(a.id)}/content?index=0`,`${b.origin}/api/v1/`)}(a,b),f=a.unsigned_urls?.[0]?new URL(a.unsigned_urls[0],b):e;if(!["http:","https:"].includes(f.protocol))throw Error("OpenRouter returned an unsupported video download URL.");for(let a of f.href===e.href?[f]:[f,e])try{var g;let e=await cI(a,{headers:(g=c.apiKey,a.origin===b.origin?{Authorization:`Bearer ${g}`}:void 0)},c);if(!e.ok){d=await cH(e,c.model,"videos");continue}let f=Buffer.from(await e.arrayBuffer());if(0===f.length){d=Error("OpenRouter returned an empty video file.");continue}let h=e.headers.get("content-type")?.split(";")[0].trim()||"video/mp4";return{type:"video",data:f.toString("base64"),mimeType:h}}catch(a){d=a}throw d instanceof Error?d:Error("Failed to download the generated OpenRouter video.")}async function cM(a){let b=cB(a.model.baseUrl,"videos"),c=cC(a.messages),d=cD(a.messages),e={model:a.model.name,prompt:c,...d?{frame_images:[{type:"image_url",image_url:{url:d},frame_type:"first_frame"}]}:{}},f=await (0,j.C)(a,{adapter:"openrouter-media",operation:"POST /videos",request:e},()=>cI(b,{method:"POST",headers:cJ(a),body:JSON.stringify(e)},a));if(!f.ok)throw await cH(f,a.model,"videos");let g=await f.json();if(g.error&&"completed"!==g.status)throw Error(`OpenRouter video generation failed: ${cF(g.error)}`);let h=function(a,b){let c=a.id?new URL(`videos/${encodeURIComponent(a.id)}`,`${b.origin}/api/v1/`):void 0,d=a.polling_url?new URL(a.polling_url,b):c;if(!d||d.origin!==b.origin)throw Error("OpenRouter returned an invalid cross-origin video polling URL.");return d}(g,b);for(;!["completed","failed","cancelled","expired"].includes(g.status??"pending");){let b=await cI(h,{headers:cJ(a)},a);if(!b.ok)throw await cH(b,a.model,"videos");["completed","failed","cancelled","expired"].includes((g=await b.json()).status??"pending")||await function(a){return a?.aborted?Promise.reject(new DOMException("Aborted","AbortError")):new Promise((b,c)=>{let d=()=>{clearTimeout(e),a?.removeEventListener("abort",d),c(new DOMException("Aborted","AbortError"))},e=setTimeout(()=>{a?.removeEventListener("abort",d),b()},5e3);a?.addEventListener("abort",d,{once:!0})})}(a.signal)}if("completed"!==g.status)throw Error(`OpenRouter video generation ${g.status??"failed"}: ${cF(g.error??"Unknown provider error")}`);let i=await cL(g,b,a);return cE(a.model.name,g.generation_id??g.id??`openrouter-video-${(0,l.A)()}`,[i])}class cN{async createCompletion(a){await (0,p.assertExecutionExtensionConcreteAdapter)(a.executionExtensionContext,a.model,"openrouter-media");let b=(0,cz.P)(a.model);if("videos"===b.kind)return cM(a);if("images"===b.kind)return cK(a);throw Error(`OpenRouter media adapter selected for a model without a dedicated media route (${b.reason}).`)}async createStreamCompletion(a){await (0,p.assertExecutionExtensionConcreteAdapter)(a.executionExtensionContext,a.model,"openrouter-media");let b=`stream_${(0,l.A)()}`,c="videos"===(0,cz.P)(a.model).kind;return a.onModelDelta?.({messageId:b,contentDelta:c?"Generating video…":"Generating image…"}),cA.debug("Started OpenRouter dedicated media generation",{model:a.model.name,output:c?"video":"image"}),{...await this.createCompletion(a),liveMessageId:b}}}var cO=c(521200),cP=c(792802);function cQ(a){let b=a.createCompletion.bind(a);if(a.createCompletion=a=>{if(a.readOnlyAssessment)throw Error("This adapter does not support read-only assessment.");return b(a)},a.createStreamCompletion){let b=a.createStreamCompletion.bind(a);a.createStreamCompletion=a=>{if(a.readOnlyAssessment)throw Error("This adapter does not support read-only assessment.");return b(a)}}return a}function cR(a,b){return(0,d.bn)(function(a,b){let c=(0,cP.N)(a);if((0,p.assertOwnerCredentialAdapterRoute)(a,c),b&&c!==b)throw new p.ExecutionExtensionError("execution_single_attempt_adapter_unsupported");switch(c){case"fallback-policy":return cQ(new cO.EK(cR));case"openrouter-media":return cQ(new cN);case"azure":return new U;case"openai-responses":return new G.Sk;case"openrouter-agent":return cQ(new T);case"anthropic":return new ad;case"gemini":return new at;case"claude-cli":return cQ(new bC);case"codex-cli":return cQ(new cr);case"antigravity-cli":return cQ(new cy);default:return new F}}(a,b))}function cS(a){if(a.fallbackPolicy)return{adapterId:"fallback-policy",endpoint:"ordered model adapters",reason:"Routes through saved models in priority order."};let b=(0,cz.P)(a);if(b.useMediaRoute)return{adapterId:"openrouter-media",endpoint:"videos"===b.kind?"/videos":"/images",reason:b.reason};switch((0,e.resolveModelAdapter)(a.provider,a.adapter)){case"azure":return{adapterId:"azure",endpoint:"/openai/deployments/{deployment}/chat/completions",reason:b.reason};case"openai-responses":return{adapterId:"openai-responses",endpoint:"/responses",reason:b.reason};case"openrouter-agent":return{adapterId:"openrouter-agent",endpoint:"/responses (Agent SDK)",reason:b.reason};case"anthropic":return{adapterId:"anthropic",endpoint:"native SDK",reason:b.reason};case"gemini":return{adapterId:"gemini",endpoint:"native SDK",reason:b.reason};case"claude-cli":return{adapterId:"claude-cli",endpoint:"local CLI",reason:b.reason};case"codex-cli":return{adapterId:"codex-cli",endpoint:"local CLI",reason:b.reason};case"antigravity-cli":return{adapterId:"antigravity-cli",endpoint:"local CLI",reason:b.reason};default:return{adapterId:"openai",endpoint:"/chat/completions",reason:b.reason}}}},219010:(a,b,c)=>{"use strict";let d;c.d(b,{QB:()=>S,eY:()=>W,$t:()=>U});var e=c(455511),f=c(629021),g=c(333873),h=c.n(g),i=c(328354),j=c(74075),k=c(332199),l=c(257975),m=c(12303);function n(a,b,c){if(!a||"object"!=typeof a||Array.isArray(a)||"archiveVersion,conversationId,dispatchId,outcome,version"!==Object.keys(a).sort().join(",")||1!==a.version||2!==a.archiveVersion||a.conversationId!==b||a.dispatchId!==c||!["completed","error","cancelled"].includes(String(a.outcome)))throw Error("Invalid model-turn outcome record");return a}var o=c(700404),p=c(189663),q=c(492093),r=c(680739),s=c(584297);c(377824);let t=Object.freeze({concurrentReads:4,compressedSnapshotBytes:0x2000000,decodedSnapshotBytes:0x4000000,mediaBytes:0x2000000,jsonAllocationBytes:0x8000000,jsonHeapHeadroomBytes:0x4000000});class u extends Error{constructor(a,b){super(b),this.code=a,this.name="ModelTurnArchiveReadError",this.status="MODEL_TURN_ARCHIVE_READ_BUSY"===a?429:413}}let v=globalThis,w=v.__flujoModelTurnArchiveReads??={active:0,rejected:0};w.allocated??=0;let x=v.__flujoModelTurnArchiveAllocationScope??=new s.AsyncLocalStorage;async function y(a,b){if(b?.throwIfAborted(),w.active>=t.concurrentReads)throw w.rejected=Math.min(Number.MAX_SAFE_INTEGER,w.rejected+1),new u("MODEL_TURN_ARCHIVE_READ_BUSY","Model-turn archive inspection is busy. Retry after another archive read finishes.");w.active+=1;let c={bytes:0};try{let d=await x.run(c,a);return b?.throwIfAborted(),d}finally{w.allocated-=c.bytes,c.bytes=0,w.active-=1}}var z=c(927910),A=c(277725);let B=a=>32===a||9===a||10===a||13===a,C=a=>a>=48&&a<=57,D=()=>new u("MODEL_TURN_ARCHIVE_READ_LIMIT","Legacy model-turn outcome exceeds archive limits. The persisted archive is unchanged.");class E extends z.Transform{constructor(a,b){super({highWaterMark:65536}),this.identity=b,this.utf8=new i.TextDecoder("utf-8",{fatal:!0}),this.frames=[],this.metadata=new Map,this.stringKey=!1,this.escape=!1,this.unicode=0,this.numberState="",this.literal="",this.literalOffset=0,this.started=!1,this.ended=!1,this.entrySeen=!1,this.decodedBytes=0,this.replacement=void 0===a?void 0:Buffer.from(JSON.stringify(a))}invalid(){throw SyntaxError("Invalid legacy model-turn JSON.")}appendMetadata(a){this.metadataBytes&&(this.metadataBytes.length>=2048&&this.invalid(),this.metadataBytes.push(a))}_transform(a,b,c){try{if(this.decodedBytes+=a.length,this.decodedBytes>t.decodedSnapshotBytes)throw D();this.utf8.decode(a,{stream:!0});let b=0,d=c=>{void 0===this.suppressedAt&&c>b&&this.push(a.subarray(b,c)),b=c},e=a=>{let c=this.frames.at(-1);c&&"value"===c.state||this.invalid(),this.metadataKey&&(this.metadataBytes||this.invalid(),this.metadata.set(this.metadataKey,JSON.parse(Buffer.from(this.metadataBytes).toString("utf8"))),this.metadataKey=void 0,this.metadataBytes=void 0),c.state="comma",this.suppressedAt===this.frames.length&&(this.push(this.replacement),this.suppressedAt=void 0,b=a)},f=a=>{let b=this.frames.at(-1);this.identity&&b?.key&&(b.root&&"version"===b.key||b.entry&&["id","conversationId","archiveVersion","outcome"].includes(b.key))&&(this.metadataKey=b.root?"version":b.key,this.metadataBytes=[]),this.replacement&&b?.entry&&"outcome"===b.key&&(d(a),this.suppressedAt=this.frames.length,b.outcome=!0)};for(let b=0;b<a.length;b++){let c=a[b];if(this.metadataBytes&&"number"!==this.lex&&this.appendMetadata(c),"string"===this.lex){if(this.keyBytes&&(this.keyBytes.length<512?this.keyBytes.push(c):this.keyBytes=void 0),this.unicode)c>=48&&c<=57||c>=65&&c<=70||c>=97&&c<=102||this.invalid(),this.unicode--;else if(this.escape)this.escape=!1,117===c?this.unicode=4:[34,92,47,98,102,110,114,116].includes(c)||this.invalid();else if(92===c)this.escape=!0;else if(34===c){if(this.lex=void 0,this.stringKey){let a=this.frames.at(-1);a.key=this.keyBytes?JSON.parse(Buffer.from(this.keyBytes).toString("utf8")):void 0,a.fields++,a.state="colon"}else e(b+1);this.keyBytes=void 0}else c<32&&this.invalid();continue}if("literal"===this.lex){c!==this.literal.charCodeAt(this.literalOffset++)&&this.invalid(),this.literalOffset===this.literal.length&&(this.lex=void 0,e(b+1));continue}if("number"===this.lex){let a=this.numberState;if(("sign"===a||"integer"===a)&&C(c)){this.appendMetadata(c),this.numberState="sign"===a&&48===c?"zero":"integer";continue}if(("integer"===a||"zero"===a)&&46===c){this.appendMetadata(c),this.numberState="dot";continue}if(("dot"===a||"fraction"===a)&&C(c)){this.appendMetadata(c),this.numberState="fraction";continue}if(["integer","zero","fraction"].includes(a)&&(101===c||69===c)){this.appendMetadata(c),this.numberState="exponent";continue}if("exponent"===a&&(43===c||45===c)){this.appendMetadata(c),this.numberState="exponentSign";continue}if(["exponent","exponentSign","exponentDigits"].includes(a)&&C(c)){this.appendMetadata(c),this.numberState="exponentDigits";continue}["integer","zero","fraction","exponentDigits"].includes(a)||this.invalid(),this.lex=void 0,e(b)}if(B(c))continue;if(this.ended&&this.invalid(),!this.started){123!==c&&this.invalid(),this.started=!0,this.frames.push({object:!0,root:!0,entry:!1,state:"keyEnd",fields:0,outcome:!1});continue}let g=this.frames.at(-1);if(("keyEnd"===g.state||"key"===g.state)&&34===c){this.lex="string",this.stringKey=!0,this.keyBytes=[34];continue}if("colon"===g.state&&58===c){g.state="value";continue}let h=g.object?125:93;if(c===h&&["keyEnd","valueEnd","comma"].includes(g.state)){this.replacement&&g.entry&&!g.outcome&&(d(b),this.push(Buffer.concat([Buffer.from(`${g.fields?",":""}"outcome":`),this.replacement]))),this.frames.pop(),this.frames.length?e(b+1):this.ended=!0;continue}if("comma"===g.state&&44===c){g.state=g.object?"key":"value",g.key=void 0;continue}if(["value","valueEnd"].includes(g.state)||this.invalid(),g.state="value",f(b),this.appendMetadata(c),123===c||91===c){this.metadataKey&&this.invalid();let a=g.root&&"entry"===g.key;if(a&&123!==c&&this.invalid(),a&&(this.entrySeen=!0),a&&this.identity)for(let a of["id","conversationId","archiveVersion","outcome"])this.metadata.delete(a);if(this.frames.length>=65536)throw D();this.frames.push({object:123===c,root:!1,entry:a,state:123===c?"keyEnd":"valueEnd",fields:0,outcome:!1})}else g.root&&"entry"===g.key&&this.invalid(),34===c?(this.lex="string",this.stringKey=!1):45===c||C(c)?(this.lex="number",this.numberState=45===c?"sign":48===c?"zero":"integer"):116===c||102===c||110===c?(this.lex="literal",this.literal=116===c?"true":102===c?"false":"null",this.literalOffset=1):this.invalid()}d(a.length),c()}catch(a){c(a)}}_flush(a){try{if(this.utf8.decode(),(!this.ended||!this.entrySeen||this.lex||this.frames.length||void 0!==this.suppressedAt)&&this.invalid(),this.identity&&(this.metadata.get("version")!==this.identity.version||this.metadata.get("archiveVersion")!==this.identity.version||this.metadata.get("id")!==this.identity.dispatchId||this.metadata.get("conversationId")!==this.identity.conversationId||!["running","completed","error","cancelled"].includes(String(this.metadata.get("outcome")))||2===this.identity.version&&"running"!==this.metadata.get("outcome")))throw Error("Invalid model-turn snapshot identity.");a()}catch(b){a(b)}}}async function F(a,b){let c=await f.promises.open(a,f.constants.O_RDONLY|f.constants.O_NONBLOCK),d=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`,g=!1;try{let e=await c.stat();if(!e.isFile())throw Error("Model-turn archive is not a regular file.");if(!Number.isSafeInteger(e.size)||e.size<0||e.size>t.compressedSnapshotBytes)throw D();let h=async function*(){let a=0;for(;a<=e.size;){let b=Buffer.alloc(Math.min(65536,e.size+1-a)),{bytesRead:d}=await c.read(b,0,b.length,a);if(!d)break;if((a+=d)>e.size)throw Error("Model-turn archive changed during inspection. Retry the read.");yield b.subarray(0,d)}if(a!==e.size)throw Error("Model-turn archive changed during inspection. Retry the read.")},i=a=>{let b=0;return new z.Transform({highWaterMark:65536,transform(c,d,e){e((b+=c.length)>a?D():void 0,c)}})};await (0,q.qy)(),await (0,A.pipeline)(z.Readable.from(h()),(0,j.createGunzip)({chunkSize:65536}),new E(b),i(t.decodedSnapshotBytes),(0,j.createGzip)({chunkSize:65536}),i(t.compressedSnapshotBytes),(0,f.createWriteStream)(d,{flags:"wx",highWaterMark:65536})),await c.close(),g=!0,await (0,q.qy)(),await f.promises.rename(d,a)}finally{g||await c.close(),await f.promises.rm(d,{force:!0}).catch(()=>void 0)}}z.Transform;let G=(0,i.promisify)(j.gzip),H=(0,i.promisify)(j.gunzip),I=/^[A-Za-z0-9_-]+$/,J=a=>d??h().join((0,p.getWorkspaceDataDir)(a),"db","model-turns");function K(a,b){if(!I.test(a))throw Error(`Unsafe ${b}`)}function L(a,b){return K(a,"conversation id"),h().join(J(b),a)}function M(a,b,c=2,d){return K(b,"dispatch id"),h().join(L(a,d),`${b}${2===c?".v2":""}.json.gz`)}function N(a,b,c){return K(b,"dispatch id"),h().join(L(a,c),`${b}.outcome.json`)}function O(a){if(!a)return;for(let b of["mimeType","mime_type","media_type"]){let c=Object.getOwnPropertyDescriptor(a,b)?.value;if("string"==typeof c&&c.includes("/"))return c}let b=Object.getOwnPropertyDescriptor(a,"format")?.value;if("string"==typeof b){let a=b.toLowerCase();if(["wav","mp3","flac","m4a","aac","ogg"].includes(a))return`audio/${"mp3"===a?"mpeg":a}`}}async function P(a,b,c,d,f,g){let h=(0,e.createHash)("sha256").update(d).digest("hex"),i=(0,e.randomUUID)();return a.writes.set(h,d),a.media.push({id:i,parameterPath:b,kind:(0,o.X)(c),mimeType:c,byteLength:d.byteLength,sha256:h,encoding:f,...g?{filename:g}:{}}),{__flujoArchivedMedia:{id:i,mimeType:c,byteLength:d.byteLength,sha256:h,encoding:f}}}async function Q(a,b,c,d,e="",f=new WeakSet){if(null==a||"number"==typeof a||"boolean"==typeof a)return a;if("string"==typeof a){let f=function(a){let b=/^data:([^;,]+)?(?:;[^,]*)?;base64,([A-Za-z0-9+/=\r\n]+)$/i.exec(a);if(b)try{return{mimeType:b[1]||"application/octet-stream",data:Buffer.from(b[2].replace(/\s/g,""),"base64")}}catch{return}}(a);if(f)return P(c,b,f.mimeType,f.data,"data-url");if(function(a,b){if(!b||!["data","file_data"].includes(a))return!1;let c=Object.getOwnPropertyDescriptor(b,"type")?.value;return"base64"===c||"input_audio"===c||"inline_data"===c||"inlineData"===c||!!O(b)}(e,d))try{let e=Buffer.from(a.replace(/\s/g,""),"base64");if(e.byteLength>0){let a=d?Object.getOwnPropertyDescriptor(d,"filename")?.value:void 0;return P(c,b,O(d)??"application/octet-stream",e,"base64","string"==typeof a?a:void 0)}}catch{}if(!/^https?:\/\//i.test(a))return a;try{let b=new URL(a);for(let a of(b.username&&(b.username="[redacted]"),b.password&&(b.password="[redacted]"),[...b.searchParams.keys()]))/(token|key|signature|credential|auth|secret|password)/i.test(a)&&b.searchParams.set(a,"[redacted]");return b.toString()}catch{return a}}if("bigint"==typeof a)return a.toString();if("function"==typeof a)return"[function omitted]";if("object"!=typeof a)return String(a);if((0,k.JE)(a))return(0,m.AM)(a,!0),a;if(l.types.isProxy(a))throw new m.Yt("MODEL_TURN_ARCHIVE_MEMORY_LIMIT");if(f.has(a))return"[circular]";f.add(a);try{if((0,m.Sr)(a))try{let g=(0,k.xv)(a,(0,m.$K)());if((0,m.AM)(g,!0),(0,k.JE)(g))return g;return await Q(g,b,c,d,e,f)}catch(a){if(a instanceof m.Yt)throw a;return"[schema could not be serialized]"}if(Array.isArray(a)){let d=[];for(let e=0;e<a.length;e++){let g=Object.getOwnPropertyDescriptor(a,String(e));if(g&&!("value"in g))throw new m.Yt("MODEL_TURN_ARCHIVE_MEMORY_LIMIT");d.push(await Q(g?.value,`${b}[${e}]`,c,void 0,String(e),f))}return d}if(!(0,m.Ev)(a))return"[object omitted]";let g={};for(let d in a){let e=Object.getOwnPropertyDescriptor(a,d);if(!e)continue;let i=(0,m.aG)(d);if(void 0!==i){g[d]=i;continue}if(!("value"in e))throw new m.Yt("MODEL_TURN_ARCHIVE_MEMORY_LIMIT");let j=e.value;if("path"===d&&Object.getOwnPropertyDescriptor(a,"type")?.value==="local_image"&&"string"==typeof j)try{g[d]=await P(c,`${b}.${d}`,{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".wav":"audio/wav",".mp3":"audio/mpeg",".m4a":"audio/mp4",".mp4":"video/mp4",".webm":"video/webm",".pdf":"application/pdf"}[h().extname(j).toLowerCase()]??"application/octet-stream",await (0,m.i6)(j),"file",h().basename(j));continue}catch(a){if(a instanceof m.Yt)throw a}g[d]=await Q(j,`${b}.${d}`,c,a,d,f)}return g}finally{f.delete(a)}}async function R(a,b,c=!1){await f.promises.mkdir(h().dirname(a),{recursive:!0});let d=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`;try{let e,g=await f.promises.open(d,"wx",c?384:438);try{await g.writeFile(b),c&&await g.sync()}catch(a){throw e=a,a}finally{await (0,m.o$)(g,e)}await f.promises.rename(d,a)}catch(a){throw a instanceof m.Yt&&"MODEL_TURN_ARCHIVE_WRITE_CLEANUP"===a.code||await f.promises.rm(d,{force:!0}).catch(()=>void 0),a}if(c)try{let b=await f.promises.open(h().dirname(a),"r");try{await b.sync()}finally{await (0,m.o$)(b)}}catch(a){if(a instanceof m.Yt)throw a}}function S(a,b){let c=a.id||a.durableContext?.executionAuthority||a.durableContext?.executionExtensionContext||a.durableContext?.personaAttribution?void 0:a.writeAdmission,d={canonicalMessages:a.canonicalMessages,genericWire:a.genericWire,sdkRequest:a.sdkRequest,modelInput:a.modelInput,visualCompaction:a.visualCompaction};return(0,m.Xy)(d,()=>(0,q.NU)(()=>(0,r.Gi)(a.durableContext??{},()=>(c?.signal?.throwIfAborted(),(0,m.AM)(d),T(b?b():a)))),a.schemaProjectionPolicy??"legacy-unbounded",c)}async function T(a){let b=a.id??(0,e.randomUUID)();if(K(b,"dispatch id"),a.id)try{throw await f.promises.access(M(a.conversationId,b)),Error("Native dispatch archive already exists; query the original invocation.")}catch(a){if("ENOENT"!==a.code)throw a}let c={conversationId:a.conversationId,media:[],writes:new Map},[d,g,i]=await (0,m.Cy)([Q(a.canonicalMessages,"canonicalMessages",c),Q(a.genericWire,"genericWire",c),Q(a.sdkRequest,"sdkRequest",c)]),j={id:b,conversationId:a.conversationId,runId:a.runId,node:{nodeId:a.nodeId,nodeName:a.nodeName},modelId:a.modelId,modelName:a.modelName,adapter:a.adapter,operation:a.operation,timestamp:Date.now(),outcome:"running",attempt:a.attempt,inputMode:a.modelInput?.inputMode,canonicalMessageCount:a.canonicalMessages.length,wireMessageCount:a.genericWire.length,mediaCount:c.media.length,archiveVersion:2},k={version:2,entry:j,canonicalMessages:d,genericWire:g,sdkRequest:i,media:c.media,provenance:a.modelInput?.provenance,counts:a.modelInput?.counts,visualCompaction:a.visualCompaction,contextCompaction:a.modelInput?.contextCompaction};(0,m.AM)(k,!0),await (0,m.Cy)([...c.writes.entries()].map(async([b,c])=>{let d=function(a,b){if(!/^[a-f0-9]{64}$/.test(b))throw Error("Unsafe media hash");return h().join(L(a),"media",b)}(a.conversationId,b);try{await f.promises.access(d)}catch{await R(d,c,!!a.id)}}));let l=await G(Buffer.from(JSON.stringify(k),"utf8"));return await R(M(a.conversationId,b),l,!!a.id),j}function U(a,b,c,d={}){return(0,q.NU)(()=>(0,r.Gi)(d,()=>V(a,b,c)))}async function V(a,b,c){let d=!0;try{await f.promises.access(M(a,b))}catch(a){if("ENOENT"!==a.code)throw a;d=!1}if(d){let d=n({version:1,archiveVersion:2,conversationId:a,dispatchId:b,outcome:c},a,b),e=Buffer.from(JSON.stringify(d),"utf8");if(e.length>1024)throw Error("Model-turn outcome exceeds byte limit");await R(N(a,b),e);return}let e=M(a,b,1);await y(()=>F(e,c))}async function W(a,b,c,d){return y(async()=>{let e;for(let b of(d?.throwIfAborted(),[J(c),L(a,c)])){let a=await f.promises.lstat(b);if(!a.isDirectory()||a.isSymbolicLink())throw Error("Native model-turn archive directory is unsafe.")}let g=2;try{e=await X(M(a,b,2,c),8388608,d)}catch(f){if("ENOENT"!==f.code)throw f;g=1,e=await X(M(a,b,1,c),8388608,d)}let h=JSON.parse((await H(e,{maxOutputLength:0x2000000})).toString("utf8"));if(d?.throwIfAborted(),h.version!==g||h.entry?.archiveVersion!==g||h.entry.id!==b||h.entry.conversationId!==a||!["running","completed","error","cancelled"].includes(h.entry.outcome)||2===g&&"running"!==h.entry.outcome)throw Error("Invalid native model-turn snapshot");if(2===g){let e;try{e=await X(N(a,b,c),1024,d)}catch(a){if("ENOENT"!==a.code)throw a}e&&(h.entry.outcome=n(JSON.parse(e.toString("utf8")),a,b).outcome)}return h},d)}async function X(a,b,c){c?.throwIfAborted();let d=await f.promises.open(a,f.constants.O_RDONLY|(f.constants.O_NOFOLLOW||0)|(f.constants.O_NONBLOCK||0));try{let e=await d.stat({bigint:!0}),g=await f.promises.lstat(a,{bigint:!0});if(!e.isFile()||e.nlink!==BigInt(1)||e.size<BigInt(1)||e.size>BigInt(b)||!g.isFile()||g.isSymbolicLink()||g.nlink!==BigInt(1)||g.dev!==e.dev||g.ino!==e.ino||g.size!==e.size)throw Error("Native model-turn archive changed.");let h=Buffer.alloc(Number(e.size)+1),i=0;for(;i<h.length;){c?.throwIfAborted();let a=await d.read(h,i,h.length-i,i);if(!a.bytesRead)break;i+=a.bytesRead}if(BigInt(i)!==e.size)throw Error("Native model-turn archive changed.");let j=await d.stat({bigint:!0}),k=await f.promises.lstat(a,{bigint:!0});if(!j.isFile()||j.nlink!==BigInt(1)||j.size!==e.size||j.mtimeNs!==e.mtimeNs||j.ctimeNs!==e.ctimeNs||!k.isFile()||k.isSymbolicLink()||k.nlink!==BigInt(1)||k.dev!==e.dev||k.ino!==e.ino||k.size!==e.size||k.mtimeNs!==e.mtimeNs||k.ctimeNs!==e.ctimeNs)throw Error("Native model-turn archive changed.");return c?.throwIfAborted(),h.subarray(0,i)}finally{await d.close()}}},224037:(a,b,c)=>{"use strict";c.d(b,{GN:()=>l,Rs:()=>j,Tt:()=>k,eS:()=>n,hO:()=>i,nB:()=>h,yg:()=>m});var d=c(43521),e=c(122134),f=c(137106);let g=(0,d.h)("backend/services/model/encryption");async function h(a){g.debug("setEncryptionKey: Entering method"),g.warn("setEncryptionKey: This function is deprecated. Use initializeDefaultEncryption or initializeEncryption from secure.ts instead.");try{return{success:await (0,f.hO)()}}catch(a){return g.warn("setEncryptionKey: Failed to set encryption key:",a),{success:!1,error:a instanceof Error?a.message:"Failed to set encryption key"}}}async function i(){g.debug("initializeDefaultEncryption: Entering method");try{let a=await (0,f.hO)();return a?g.info("initializeDefaultEncryption: Default encryption initialized successfully"):g.error("initializeDefaultEncryption: Failed to initialize default encryption"),a}catch(a){return g.error("initializeDefaultEncryption: Failed to initialize default encryption:",a),!1}}async function j(a){g.debug("encryptApiKey: Entering method");try{if(!a||""===a.trim())return g.warn("encryptApiKey: Empty API key provided"),"";if(!await m()&&(g.warn("encryptApiKey: Encryption is not configured, initializing default encryption"),!await i()))throw Error("Could not initialize credential encryption");let b=await (0,f.pF)(a);if(!b)throw Error("Could not encrypt credential");return`encrypted:${b}`}catch(a){throw g.error("encryptApiKey: Credential was not saved because encryption failed"),Error("Credential encryption failed. Unlock this workspace and retry; the previous credential has been retained.",{cause:a})}}async function k(a){g.debug("decryptApiKey: Entering method");try{if(a&&a.startsWith("${global:"))return(await (0,e.resolveGlobalVars)({key:a})).key;if(a&&a.startsWith("encrypted_failed:"))return a.substring(17);let b=a?.startsWith("encrypted:")?a.substring(10):a;return await (0,f.Do)(b)}catch(a){return g.warn("decryptApiKey: Failed to decrypt API key:",a),null}}async function l(a){g.debug("resolveAndDecryptApiKey: Entering method");try{return await (0,e.G)(a)}catch(a){return g.warn("resolveAndDecryptApiKey: Failed to resolve or decrypt API key:",a),null}}async function m(){g.debug("isEncryptionConfigured: Entering method");try{return await (0,f.Gz)()}catch(a){return g.warn("isEncryptionConfigured: Failed to check encryption status:",a),!1}}async function n(){g.debug("isUserEncryptionEnabled: Entering method");try{return await (0,f.eS)()}catch(a){return g.warn("isUserEncryptionEnabled: Failed to check user encryption status:",a),!1}}},225088:(a,b,c)=>{"use strict";c.d(b,{iY:()=>g,p0:()=>f,p7:()=>e});let d=new WeakSet;function e(a){if(!a||"object"!=typeof a||!a.root||"function"!=typeof a.publish||"function"!=typeof a.acknowledgeSdkOutcome||"function"!=typeof a.acknowledgeLive||"function"!=typeof a.acknowledgeTerminalReady)throw Error("Native invocation session hook is incomplete.");let b=Object.freeze({...a});return d.add(b),b}function f(a){if(!a||"object"!=typeof a||!d.has(a))throw Error("Native invocation session hook must be an in-process capability.")}function g(a,b,c){let d;if(Buffer.byteLength(JSON.stringify(a),"utf8")>16384)throw Error("Native session descriptor exceeds the host ledger envelope bound.");let e=function a(b){if(b&&"object"==typeof b&&!Object.isFrozen(b)){for(let c of Object.values(b))a(c);Object.freeze(b)}return b}(structuredClone(a)),f=new Set,g=0,h="prepared",i=!1,j=new Promise(a=>{d=a}),k=(a,b)=>{"sdk-outcome"!==a&&(h=a);let c=Object.freeze({invocationId:e.receipt.invocationId,sequence:++g,kind:a,...b?{outcome:b}:{}});for(let a of f)try{a(c)}catch{}};return{session:Object.freeze({descriptor:e,signal:b,phase:()=>h,cancel:()=>{i||c()},subscribe:a=>(f.add(a),()=>{f.delete(a)}),waitTerminal:()=>j}),emit:k,settle:a=>{i||(i=!0,k(a.state),d(a),f.clear())}}}},225335:(a,b,c)=>{"use strict";c.d(b,{F7:()=>g,lx:()=>i,mR:()=>h});var d=c(189663);let e=globalThis,f=e.__flujoElicitationContexts??(e.__flujoElicitationContexts=new Map);function g(a,b){f.set((0,d.workspaceCacheKey)(a),b)}function h(a){f.delete((0,d.workspaceCacheKey)(a))}function i(a){return f.get((0,d.workspaceCacheKey)(a))}},229126:(a,b,c)=>{"use strict";c.d(b,{P:()=>d,e:()=>f});class d{constructor(a,b=4194304){this.onEvent=a,this.maxRecordBytes=b,this.pending=""}push(a){let b;for(this.pending+=a;(b=this.pending.indexOf("\n"))>=0;)this.record(this.pending.slice(0,b)),this.pending=this.pending.slice(b+1);if(Buffer.byteLength(this.pending)>this.maxRecordBytes)throw Error("Antigravity CLI output record exceeded its limit.")}finish(){this.pending.trim()&&this.record(this.pending),this.pending=""}record(a){let b;if(a.trim()){if(Buffer.byteLength(a)>this.maxRecordBytes)throw Error("Antigravity CLI output record exceeded its limit.");try{b=JSON.parse(a)}catch{throw Error("Antigravity CLI returned malformed stream JSON.")}if(!b||"object"!=typeof b)throw Error("Antigravity CLI returned an unsupported stream event.");if("init"===b.event){if("string"!=typeof b.conversation_id||!b.init||!Array.isArray(b.init.tools)||!b.init.tools.every(a=>"string"==typeof a)||"string"!=typeof b.init.cwd||"string"!=typeof b.init.permission_mode)throw Error("Antigravity CLI returned an invalid init event.")}else if("step_update"===b.event){let a=b.step_update;if(!a||"string"!=typeof a.conversation_id||!Number.isSafeInteger(a.step_index)||a.step_index<0||"string"!=typeof a.state||"string"!=typeof a.step_type||void 0!==a.text_delta&&"string"!=typeof a.text_delta)throw Error("Antigravity CLI returned an invalid step event.")}else if("result"===b.event){let a=b.result;if(!a||"string"!=typeof a.conversation_id||"string"!=typeof a.response||!["SUCCESS","ERROR","CANCELED","INTERRUPTED","INVALID","WAITING","RUNNING"].includes(a.status))throw Error("Antigravity CLI returned an invalid result event.")}else throw Error("Antigravity CLI returned an unsupported stream event.");this.onEvent(b)}}}function e(a){return"number"==typeof a&&Number.isFinite(a)&&a>=0?Math.floor(a):0}function f(a){if(!a||!Number.isSafeInteger(a.input_tokens)||a.input_tokens<0||!Number.isSafeInteger(a.output_tokens)||a.output_tokens<0||!Number.isSafeInteger(a.cache_read_tokens)||a.cache_read_tokens<0)return;let b=e(a?.cache_read_tokens),c=e(a?.input_tokens)+b,d=e(a?.output_tokens);if(Number.isSafeInteger(c)&&Number.isSafeInteger(c+d))return{prompt_tokens:c,completion_tokens:d,total_tokens:c+d,prompt_tokens_details:{cached_tokens:b},...Number.isSafeInteger(a.thinking_tokens)&&a.thinking_tokens>=0?{completion_tokens_details:{reasoning_tokens:Math.min(d,a.thinking_tokens)}}:{}}}},230076:(a,b,c)=>{"use strict";let d;c.d(b,{M3:()=>B,or:()=>A});var e=c(629021),f=c(333873),g=c.n(f),h=c(43521),i=c(403409),j=c(189663),k=c(304927),l=c(320108);let m={enabled:!0,maxValueBytes:65536,maxKeysPerScope:512,maxScopeBytes:8388608},n=(0,h.h)("backend/services/kvStore"),o=/^[A-Za-z0-9_-]{1,64}$/;function p(a){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe kv scope id: ${JSON.stringify(a)}`)}function q(a){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe kv key name: ${JSON.stringify(a)}`)}let r=a=>g().join(d??g().join((0,j.getWorkspaceDataDir)(),"db","kv-store"),a),s=a=>g().join(r(a),"index.json"),t=new Map;async function u(a){let b,c=(0,j.workspaceCacheKey)("kv-settings"),d=t.get(c);if(!a?.fresh&&d&&Date.now()-d.at<3e4)return d.value;try{let a=await (0,k.loadItem)(l.Zg.KV_STORE_SETTINGS,m);b={...m,...a}}catch(a){n.warn("Failed to load kv-store settings; using defaults",a),b=m}return t.set(c,{value:b,at:Date.now()}),b}let v=global.__flujo_kv_store??(global.__flujo_kv_store=new Map),w=a=>(0,j.workspaceCacheKey)("kv",a);async function x(a){let b=(0,i.VU)();if(b){let c=b.kvBoards??={};return c[a]??=await (0,i.bQ)(`kv:${a}`,()=>y(a)),c[a]}return y(a)}async function y(a){let b=v.get(w(a));if(b)return b;let c=[];try{let b=await e.promises.readFile(s(a),"utf-8");if(b.trim().length>0){let a=JSON.parse(b);Array.isArray(a)&&(c=a)}}catch(b){"ENOENT"!==b.code&&n.error(`Failed to read kv index for scope ${a}; treating as empty`,b)}return v.set(w(a),c),c}async function z(a,b){return(0,k.l_)(`kv-store/${a}`,async()=>{let c=await x(a),{next:d,result:f}=b(c),g=(0,i.VU)();return g?(g.kvBoards??={})[a]=d:d!==c&&(v.set(w(a),d),await e.promises.mkdir(r(a),{recursive:!0}),await (0,k.Zf)(s(a),JSON.stringify(d,null,2))),f})}async function A(a,b,c,d){p(a),q(b);let e=await u({fresh:!0});if(!e.enabled)return{skipped:"disabled"};let f="string"==typeof c?c:String(c??""),g=Buffer.byteLength(f,"utf8");return g>e.maxValueBytes?(n.warn(`kv write skipped (size ${g} > cap ${e.maxValueBytes})`,{scope:a,name:b}),{skipped:"size-cap"}):z(a,c=>{let h=c.find(a=>a.name===b);if(!h&&c.length>=e.maxKeysPerScope)return n.warn(`kv write skipped (keys ${c.length} >= cap ${e.maxKeysPerScope})`,{scope:a,name:b}),{next:c,result:{skipped:"keys-cap"}};let i=c.reduce((a,b)=>a+(b===h?0:b.size),0);if(i+g>e.maxScopeBytes)return n.warn(`kv write skipped (scope budget ${i}+${g} > ${e.maxScopeBytes})`,{scope:a,name:b}),{next:c,result:{skipped:"scope-cap"}};let j=Date.now(),k={scope:a,name:b,value:f,size:g,createdAt:h?.createdAt??j,updatedAt:j,expiresAt:d?.expiresAt},l=h?c.map(a=>a===h?k:a):[...c,k];return n.debug(`Set kv ${a}/${b}`,{size:g}),{next:l,result:k}})}async function B(a,b){var c;p(a),q(b);let d=(await x(a)).find(a=>a.name===b);if(d&&(c=Date.now(),"number"!=typeof d.expiresAt||d.expiresAt>c))return d.value}},238861:(a,b,c)=>{"use strict";c.d(b,{AO:()=>q,DK:()=>r,Mi:()=>s,QF:()=>y,Yl:()=>x,d4:()=>v,hH:()=>o,hj:()=>A,hm:()=>z,x1:()=>w});var d=c(962239),e=c(928776),f=c(43521),g=c(189663);let h=(0,f.h)("backend/services/mcp/externalAuthorization");({...e.XC});let i=global.__mcp_external_authorization_status??(global.__mcp_external_authorization_status=new Map),j=global.__mcp_external_authorization_sessions??(global.__mcp_external_authorization_sessions=new Map),k=global.__mcp_stdio_oauth_clients??(global.__mcp_stdio_oauth_clients=new WeakMap);function l(a){return(0,g.workspaceCacheKey)(a)}function m(a,b){return`${a}\0${b}`}function n(a){return m((0,g.getCurrentWorkspace)(),a)}function o(a,b,c){if(k.has(a))return;let e=(0,d._V)({mcpClient:a,installElicitationHandler:!1,...c?{mrtrController:c}:{},onUrlElicitation:(0,g.bindToCurrentWorkspace)(async a=>await x(b,{mode:a.mode,url:a.target.href,message:a.message})??{action:"cancel"})});k.set(a,e),a.__flujoStdioOAuth=!0}function p(a){let b=k.get(a);if(!b)throw Error("This MCP client did not negotiate mcp-stdio-oauth.");return b}function q(a){if(!a)return!1;let b=!0===a.__flujoStdioOAuth,c=k.get(a);return b&&!!c?.isSupported()}async function r(a,b,c={}){if(!q(a))return{supported:!1,authorizations:[]};let d=l(b),e=i.get(d);if(!c.force&&e&&Date.now()-e.timestamp<2e3)return e.value;let f=(await p(a).getStatus({timeout:8e3})).authorizations.map(a=>({id:a.id,...a.provider?{provider:a.provider}:{},label:a.label,state:a.state,blocksUnattendedUse:a.blocksUnattendedUse,...a.message?{message:a.message}:{}})),g={supported:!0,authorizations:f,blockingAuthorization:f.find(a=>a.blocksUnattendedUse&&"ready"!==a.state)};return i.set(d,{value:g,timestamp:Date.now()}),g}function s(a){i.delete(l(a))}function t(a){let b=(0,g.getCurrentWorkspace)();return Array.from(j.values()).filter(c=>c.workspace===b&&c.serverName===a).sort((a,b)=>b.createdAt-a.createdAt)[0]}function u(a){a.timer&&clearTimeout(a.timer),j.delete(m(a.workspace,a.sessionId))}function v(a,b){let c=b?j.get(n(b)):t(a);if(!c||c.serverName!==a)return!1;if(c.resolveElicitation){let a=c.resolveElicitation;c.resolveElicitation=void 0,c.elicitationResponded=!0,a({action:"cancel"})}else c.elicitationResponded,c.abortController.abort();return c.rejectPrompt(Error("Authorization was cancelled.")),!0}function w(a,b){let c=j.get(n(b));if(!c||c.serverName!==a||!c.prompt||!c.resolveElicitation)return!1;let d=c.resolveElicitation;return c.resolveElicitation=void 0,c.elicitationResponded=!0,d({action:"decline"}),s(a),!0}async function x(a,b){if("url"!==b.mode)return;let c=t(a);if("string"!=typeof b.url||0===b.url.length)return c&&(c.rejectPrompt(Error("The MCP server supplied a malformed authorization URL.")),c.abortController.abort()),{action:"cancel"};if(!c)return h.warn(`Rejected unsolicited URL elicitation from ${a}`),{action:"cancel"};if(c.abortController.signal.aborted)return h.warn(`Rejected URL elicitation from cancelled start on ${a}`),{action:"cancel"};if(c.resolveElicitation||c.elicitationResponded)return h.warn(`Rejected duplicate URL elicitation from ${a}`),{action:"cancel"};try{!function(a,b,c){if(a.prompt)return a.prompt;let e=(0,d.Z)(b),f={sessionId:a.sessionId,authorizationId:a.authorizationId,url:e.href,origin:e.origin,hasPunycode:e.hasPunycode,...c?{message:c}:{}};a.prompt=f,a.resolvePrompt(f)}(c,b.url,b.message)}catch(a){return c.rejectPrompt(a instanceof Error?a:Error(String(a))),c.abortController.abort(),{action:"cancel"}}return new Promise(a=>{c.resolveElicitation=a})}async function y(a,b,c,d={}){let e,f,h;if(d.signal?.throwIfAborted(),!q(a))throw Error("This MCP server did not negotiate external authorization support.");let i=(await r(a,b,{force:!0})).authorizations.find(a=>a.id===c);if(!i)throw Error("The OAuth authorization is no longer available. Refresh and try again.");if("ready"===i.state)return{sessionId:crypto.randomUUID(),authorizationId:c,url:"",origin:"",hasPunycode:!1,alreadyReady:!0};let k=t(b);if(k&&(v(b,k.sessionId),j.has(m(k.workspace,k.sessionId))))throw Error("The previous authorization request is still closing. Try again in a moment.");d.signal?.throwIfAborted();let l=new Promise((a,b)=>{e=a,f=b}),n={workspace:(0,g.getCurrentWorkspace)(),sessionId:crypto.randomUUID(),serverName:b,authorizationId:c,createdAt:Date.now(),resolvePrompt:e,rejectPrompt:f,promptPromise:l,abortController:new AbortController};n.timer=setTimeout((0,g.bindToCurrentWorkspace)(()=>{let a=n.resolveElicitation;n.resolveElicitation=void 0,n.elicitationResponded=!0,a?.({action:"cancel"}),n.abortController.abort(),n.rejectPrompt(Error("Authorization request timed out."))}),3e5),j.set(m(n.workspace,n.sessionId),n);let o=(0,g.bindToCurrentWorkspace)(()=>{v(b,n.sessionId)});d.signal?.addEventListener("abort",o,{once:!0});let w=(0,g.bindToCurrentWorkspace)(async d=>{if(s(b),"ready"===d.state){n.resolvePrompt({sessionId:n.sessionId,authorizationId:c,url:"",origin:"",hasPunycode:!1,alreadyReady:!0}),u(n);return}let e=(await r(a,b,{force:!0})).authorizations.find(a=>a.id===c);if(e?.state==="ready"){n.resolvePrompt({sessionId:n.sessionId,authorizationId:c,url:"",origin:"",hasPunycode:!1,alreadyReady:!0}),u(n);return}n.rejectPrompt(Error("The MCP server completed OAuth start without URL elicitation or ready status.")),u(n)}),x=(0,g.bindToCurrentWorkspace)(a=>{n.rejectPrompt(a instanceof Error?a:Error(String(a)))}),z=(0,g.bindToCurrentWorkspace)(()=>u(n));p(a).start(c,{timeout:3e5,signal:n.abortController.signal}).then(w).catch(x).finally(z);try{return await Promise.race([l,new Promise((a,b)=>{h=setTimeout(()=>b(Error("The MCP server did not present an authorization URL in time.")),3e4)})])}catch(a){throw v(b,n.sessionId),a}finally{h&&clearTimeout(h),d.signal?.removeEventListener("abort",o)}}function z(a,b){let c=j.get(n(b));if(!c||c.serverName!==a||!c.prompt)throw Error("The authorization request is no longer active. Start it again.");if(!c.resolveElicitation||c.elicitationResponded)throw Error("The authorization request is no longer awaiting consent. Start it again.");let d=c.resolveElicitation;return c.resolveElicitation=void 0,c.elicitationResponded=!0,d({action:"accept"}),s(a),c.prompt}function A(a){s(a);let b=(0,g.getCurrentWorkspace)();for(let c of Array.from(j.values()))c.workspace===b&&c.serverName===a&&(c.resolveElicitation?.({action:"cancel"}),c.abortController.abort(),c.rejectPrompt(Error("Authorization was cancelled because the MCP connection closed.")),u(c))}},239727:()=>{},242745:(a,b,c)=>{"use strict";c.d(b,{Cb:()=>K,M6:()=>J,dN:()=>T,mi:()=>U});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598),h=c(173635),i=c(403409),j=c(189663),k=c(492093),l=c(779504),m=c(849366),n=c(920823),o=c(210027),p=c(225088),q=c(386413),r=c(264416),s=c(803917),t=c(122489),u=c(575189),v=c(343276),w=c(591102),x=c(252937),y=c(896305),z=c(558736);let A=globalThis,B=A.__flujoNativeOriginalAuthorities??=new WeakMap,C=a=>{throw Error(`Native Original authority or reservation is held.${a?` Reason: ${a}.`:""}`)},D=a=>"number"==typeof a&&Number.isSafeInteger(a)&&a>0?a:void 0,E=a=>({id:a?.id,name:a?.name,adapter:a?.adapter,provider:a?.provider,maxTurns:a?.maxTurns,temperature:a?.temperature,reasoningEffort:a?.reasoningEffort,fallbackPolicy:a?.fallbackPolicy}),F=globalThis,G=F.__flujoNativeOriginalHosts??=new WeakSet,H=F.__flujoNativeOriginalReaders??=new WeakMap,I=F.__flujoNativeOriginalHostContexts??=new WeakMap;function J(a,b){if(K(a),I.get(a)!==b)return C()}function K(a){if(!a||"object"!=typeof a||!G.has(a))return C()}let L=a=>"persona"===a.kind?[a.personaId,a.goalId]:["worker",a.workerId,a.goalId],M=a=>"persona"===a.kind?{version:1,goalId:a.goalId,personaId:a.personaId}:{version:2,kind:"worker",goalId:a.goalId,workerId:a.workerId},N=a=>f().join((0,j.getWorkspaceDataDir)(a.workspace),"db","native-session-origins","persona"===a.kind?"host-ledger":"worker-host-ledger",`${(0,n.e$)(L(a))}.json`),O=a=>"win32"===process.platform||(a.mode&BigInt(63))===BigInt(0)&&a.uid===BigInt(process.getuid());async function P(a){let b=(0,j.getWorkspaceDataDir)(a.workspace);for(let c of[b,f().join(b,"db"),f().dirname(f().dirname(N(a))),f().dirname(N(a))]){let a=await d.promises.lstat(c);if(!a.isDirectory()||a.isSymbolicLink())return C();let b=await d.promises.realpath(c),e=a=>"win32"===process.platform?f().resolve(a).toLowerCase():f().resolve(a);if(e(b)!==e(c))return C()}}async function Q(a){let b,c=N(a);try{b=await (0,y.$)(c,262144,{privateOwner:!0})}catch(b){if("ENOENT"===b.code)return{...M(a),reservations:[]};throw b}await P(a);let d=JSON.parse(b.toString("utf8"));return Object.entries(M(a)).some(([a,b])=>d[a]!==b)||!Array.isArray(d.reservations)||d.reservations.length>256||d.reservations.some(a=>!a.invocationId||!a.acceptanceDigest||!["accepted","registered","exited","released"].includes(a.state))?C():d}async function R(a,b){if("win32"===process.platform)return b();let c=await d.promises.open(a,d.constants.O_RDONLY|d.constants.O_DIRECTORY|d.constants.O_NOFOLLOW);try{let a=await c.stat({bigint:!0});if(!a.isDirectory()||!O(a))return C();return await b(c)}finally{await c.close()}}async function S(a,b,c){return(0,k.NU)(()=>(0,l.withWorkspaceRuntimeLock)(`native-original-${(0,n.e$)(L(a)).slice(0,32)}`,async e=>{let h=f().dirname(N(a));for(let a of[f().dirname(h),h]){await d.promises.mkdir(a,{recursive:!1,mode:448}).catch(a=>{if("EEXIST"!==a.code)throw a});let b=await d.promises.lstat(a,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||!O(b))return C()}return R(h,async i=>{await P(a);let k=i?await i.stat({bigint:!0}):await d.promises.lstat(h,{bigint:!0}),l=await d.promises.lstat(h,{bigint:!0});if(!l.isDirectory()||l.isSymbolicLink()||l.dev!==k.dev||l.ino!==k.ino)return C();let m=await d.promises.lstat(N(a),{bigint:!0}).catch(a=>{if("ENOENT"!==a.code)throw a}),n=await Q(a),o=await b(n),p=Buffer.from(JSON.stringify(n));if(p.length>262144)return C();await e.assertOwned();let q=`${N(a)}.${(0,g.randomUUID)()}.tmp`,r=await d.promises.open(q,"wx",384),s=!1;try{await r.writeFile(p),await r.sync();let b=await r.stat({bigint:!0});await P(a);let f=await d.promises.lstat(h,{bigint:!0});if(f.dev!==k.dev||f.ino!==k.ino)return C();let g=await d.promises.lstat(N(a),{bigint:!0}).catch(a=>{if("ENOENT"!==a.code)throw a});if(!!m!=!!g||m&&g&&(m.dev!==g.dev||m.ino!==g.ino||m.mtimeNs!==g.mtimeNs||m.ctimeNs!==g.ctimeNs))return C();let j=await d.promises.lstat(q,{bigint:!0});if(!j.isFile()||j.isSymbolicLink()||j.nlink!==BigInt(1)||j.dev!==b.dev||j.ino!==b.ino||j.size!==BigInt(p.length)||!O(j))return C();await c.assertCurrent(),await e.assertOwned();let l=(0,d.lstatSync)(h,{bigint:!0});if(!l.isDirectory()||l.isSymbolicLink()||l.dev!==k.dev||l.ino!==k.ino||!O(l))return C();if(i){let a=(0,d.fstatSync)(i.fd,{bigint:!0});if(!a.isDirectory()||a.dev!==k.dev||a.ino!==k.ino)return C()}return c.assertActive(),await d.promises.rename(q,N(a)),s=!0,await i?.sync(),o}finally{s||function(a,b,c,e){try{let g=(0,j.getWorkspaceDataDir)(a.workspace),h=f().dirname(b),i=a=>"win32"===process.platform?f().resolve(a).toLowerCase():f().resolve(a);for(let a of[g,f().join(g,"db"),f().dirname(h),h]){let b=(0,d.lstatSync)(a);if(!b.isDirectory()||b.isSymbolicLink()||i((0,d.realpathSync)(a))!==i(a))return}let k=(0,d.lstatSync)(h,{bigint:!0});if(k.dev!==e.dev||k.ino!==e.ino)return;let l=(0,d.fstatSync)(c,{bigint:!0}),m=(0,d.lstatSync)(b,{bigint:!0});if(!l.isFile()||!m.isFile()||m.isSymbolicLink()||l.nlink!==BigInt(1)||m.nlink!==BigInt(1)||!O(l)||!O(m)||m.dev!==l.dev||m.ino!==l.ino)return;(0,d.unlinkSync)(b)}catch{}}(a,q,r.fd,k),await r.close()}})}),a.workspace)}async function T(a,b){if(!b.taskId)return;if((0,(await Promise.all([c.e(54045),c.e(87019),c.e(95260),c.e(55328),c.e(19123),c.e(99662)]).then(c.bind(c,719123))).assertPersonaFlowExecutionAuthority)(a),!a.commitWhileCurrent)return C();let d=await (0,m.getPersonaWorkItem)(b.personaId,b.taskId);(d?.goal||d?.parentGoalId)&&await a.commitWhileCurrent(async()=>{let c=await (0,m.getPersonaWorkItem)(b.personaId,b.taskId);if(!c?.goal&&!c?.parentGoalId)return;let d=c.goal?c:await (0,m.getPersonaWorkItem)(b.personaId,c.parentGoalId);if(!d?.goal||"active"!==d.goal.state||d.goal.pendingDispatchId!==b.dispatchId||d.goal.pendingTaskId!==c.id||c.revokedGoalDispatchId===b.dispatchId)return C();let e=structuredClone(b.flow),f={...b,kind:"persona",workspace:(0,j.getCurrentWorkspace)(),goalId:d.id,round:d.goal.rounds,flow:e,planDigest:(0,n.e$)([b.revisionId,e]),authority:a};if((await Q(f)).reservations.some(a=>"released"!==a.state))return C();B.set(a,f)})}async function U(a){if(!(0,i.VU)())return a.context&&(0,z.executionExtensionSupportsNativeWorkerRoot)(a.context)?W({context:a.context,conversationId:a.conversationId,runId:a.runId,nodeId:a.nodeId,modelId:a.modelId,flowId:a.flowId,flowSnapshot:a.flowSnapshot}):V(a)}async function V(a){let b=a.authority&&B.get(a.authority);return b&&"persona"!==b.kind?C():X(a)}async function W(a){if(!(0,z.executionExtensionSupportsNativeWorkerRoot)(a.context))return;let{modelService:b}=await Promise.resolve().then(c.bind(c,482040)),d=await b.getModel(a.modelId);if(d?.adapter!=="codex-cli")return;if(!a.conversationId||!a.runId||!a.nodeId)return C();let{FlowExecutor:e}=await Promise.resolve().then(c.bind(c,965458)),f=e.conversationStates.get(a.conversationId);if(!f?.flowSnapshot||f.executionExtensionContext!==a.context||f.logicalRunId!==a.runId||f.personaAttribution&&!(0,z.executionExtensionSharesPersonaAuthority)(a.context,f.executionAuthority)||![0,1].includes(f.runDepth??0))return C();let g=structuredClone(f.flowSnapshot);if(Buffer.byteLength(JSON.stringify(g))>1048576)return C();let h=g.nodes.find(b=>b.id===a.nodeId&&"process"===b.data.type);if(!h||h.data.properties?.boundModel!==a.modelId)return C();let i={conversationId:a.conversationId,runId:a.runId,workspace:(0,j.getCurrentWorkspace)(),flowId:g.id,flowDigest:(0,n.e$)(g),modelId:a.modelId,modelDigest:(0,n.e$)(E(d))},k=1===f.runDepth?await (0,z.executionExtensionNativeWorkerDescendant)(a.context,i):void 0,l=k?.root??await (0,z.executionExtensionNativeWorkerRoot)(a.context,i);if(!l||d?.adapter!=="codex-cli"||d.ApiKey?.trim()||d.fallbackPolicy)return C();let m=(0,z.executionExtensionSignal)(a.context);if(!m)return C();let o=(0,n.e$)(l),p=k?e.conversationStates.get(l.rootConversationId):void 0;if(k&&(!p?.flowSnapshot||!p.executionExtensionContext||!(0,z.isExecutionChildContext)(a.context,p.executionExtensionContext)||f.parentRunId!==p.conversationId||f.subflowLane?.parentNodeId!==k.parentNodeId||p.logicalRunId!==l.logicalRunId||(0,n.e$)(p.flowSnapshot)!==l.flowDigest))return C();let q=async()=>{if(m.throwIfAborted(),(0,j.getCurrentWorkspace)()!==i.workspace||e.conversationStates.get(i.conversationId)!==f||f.executionExtensionContext!==a.context||f.logicalRunId!==i.runId||f.isCancelled||(0,n.e$)(f.flowSnapshot)!==i.flowDigest||(0,n.e$)(E(await b.getModel(a.modelId)))!==i.modelDigest)return C();let c=k?await (0,z.executionExtensionNativeWorkerDescendant)(a.context,i):void 0;if(k&&(0,n.e$)(c)!==(0,n.e$)(k))return C();let d=c?.root??await (0,z.executionExtensionNativeWorkerRoot)(a.context,i);if(!d||(0,n.e$)(d)!==o)return C();m.throwIfAborted()},r=Object.freeze({signal:m,assertCurrent:q,commitWhileCurrent:b=>(0,z.commitExecutionExtensionMutation)(a.context,async()=>(await q(),b()))}),s={kind:"worker",workerId:l.workerId,targetDigest:l.targetDigest,context:a.context,workspace:l.workspace,dispatchId:l.fleetRunId,goalId:l.goalId,round:1,revisionId:l.flowDigest,leaseEpoch:l.leaseEpoch,conversationId:i.conversationId,runId:i.runId,flow:g,planDigest:(0,n.e$)([l.flowDigest,g]),authority:r,...k?{descendant:{...k,rootFlowId:p.flowId}}:{}};return await r.commitWhileCurrent(async()=>{if((await Q(s)).reservations.some(a=>"released"!==a.state))return C();B.set(r,s)}),X({...a,authority:r})}async function X(a){let b,d,e,f=a.authority&&B.get(a.authority);if(!f&&!a.personaAttribution)return;let{modelService:g}=await Promise.resolve().then(c.bind(c,482040)),i=await g.getModel(a.modelId);if(!f){if(i?.adapter!=="claude-cli"&&i?.adapter!=="codex-cli")return;let b=a.personaAttribution;if(!b.activityId)return C();let c=await (0,m.getPersonaActivity)(b.personaId,b.activityId);if(!c)return C();if("assignment"!==c.source.kind||!c.source.sourceId)return;let d=await (0,m.getPersonaWorkItem)(b.personaId,c.source.sourceId);return!d||d.goal||d.parentGoalId?C():void 0}if(i?.adapter!=="claude-cli"&&i?.adapter!=="codex-cli")return;let k=i.adapter,y=f.authority;if(f.workspace!==(0,j.getCurrentWorkspace)()||!a.conversationId||!a.runId||!y.commitWhileCurrent)return C();let A=a.conversationId,F=a.conversationId===f.conversationId&&a.runId===f.runId,J=f.flow;if(F){if(a.flowId&&a.flowId!==f.flow.id)return C()}else{if("persona"!==f.kind||!a.flowId||!f.flow.executionDependencies)return C();try{(0,x.DQ)(f.flow)}catch{return C()}let b=f.flow.executionDependencies?.flows.find(b=>b.flowId===a.flowId);if(!b)return C();J=b.flowSnapshot}let K=a=>(0,n.e$)({...a,executionDependencies:void 0}),L=K(J);if(!F&&!a.flowSnapshot||a.flowSnapshot&&K(a.flowSnapshot)!==L)return C();let M=J.nodes.find(b=>b.id===a.nodeId&&"process"===b.data.type);if(!M||M.data.properties?.boundModel!==a.modelId)return C();let N="claude-cli"===k?v.yu:v.ED;if(i.id!==a.modelId||i.fallbackPolicy)return C();let O=D(M.data.properties?.maxTurns)??D(i.maxTurns)??h.mP,P=(0,n.e$)(E(i)),R=async()=>{if(y.signal.throwIfAborted(),"worker"===f.kind)return y.assertCurrent();let a=await (0,m.getPersonaWorkItem)(f.personaId,f.goalId);if(!a?.goal||"active"!==a.goal.state||a.goal.rounds!==f.round||a.goal.pendingDispatchId!==f.dispatchId)return C();y.signal.throwIfAborted()},T=async()=>{y.signal.throwIfAborted(),await y.assertCurrent(),"persona"===f.kind&&await R(),y.signal.throwIfAborted()},U={assertCurrent:R,assertActive:()=>y.signal.throwIfAborted()};await T();let V="worker"===f.kind&&"codex-cli"===i.adapter?await (0,z.executionExtensionCodexProfile)(f.context):void 0;if(V){let{assertRestrictedCodexProfile:a}=await Promise.resolve().then(c.bind(c,364564));await a(V,i.name)}let W="worker"===f.kind&&"codex-cli"===i.adapter?await (0,u.U)(i.name,i.reasoningEffort,y.signal,T,V?{executable:V.verifiedCliPath,catalogPath:V.verifiedModelCatalogPath}:{}):void 0;W&&(0,u.g)(W),await T();let X="codex-cli"===i.adapter?v.ED:v.yu,Y=(0,n.At)(f.leaseEpoch,T),Z=(0,o.cj)({workspace:f.workspace,fleetRunId:f.dispatchId,workerId:"persona"===f.kind?f.activityId:f.workerId,goalId:f.goalId,rootConversationId:"worker"===f.kind&&f.descendant?f.descendant.root.rootConversationId:f.conversationId,rootLogicalRunId:"worker"===f.kind&&f.descendant?f.descendant.root.logicalRunId:f.runId,rootFlowId:"worker"===f.kind&&f.descendant?f.descendant.rootFlowId:f.flow.id},T),$=async a=>"worker"===f.kind?(0,q.Fo)({invocationId:a,authority:Y,root:Z,signal:y.signal}):(0,w.C8)(y,A,f.conversationId,async b=>{let c=async()=>{y.signal.throwIfAborted(),await b.assertCurrent(R)},d=(0,n.At)(f.leaseEpoch,c),e=(0,o.cj)({workspace:f.workspace,fleetRunId:f.dispatchId,workerId:f.activityId,goalId:f.goalId,rootConversationId:f.conversationId,rootLogicalRunId:f.runId,rootFlowId:f.flow.id},c),g=await (0,q.Fo)({invocationId:a,authority:d,root:e,signal:y.signal,heldRead:b});return await c(),g},()=>(0,q.Fo)({invocationId:a,authority:Y,root:Z,signal:y.signal})),_=async()=>{if(F&&!("worker"===f.kind&&f.descendant))return;if(!b)return C();let a=await $(b.descriptor.receipt.invocationId);if((0,n.e$)(a)!==(0,n.e$)(b.descriptor))return C()},aa=!1,ab=!1,ac=!1,ad=!1,ae=new Set,af=async(a,c=U)=>b?S(f,async c=>{let d=c.reservations.find(a=>a.invocationId===b.descriptor.receipt.invocationId);if(!d||d.descriptorDigest!==(0,n.e$)(b.descriptor))return C();await a(d)},c):C(),ag=(0,p.p7)({root:Z,publish:async c=>{if(b)return C();let d=c.descriptor,e=d.receipt.owner;if(e.conversationId!==a.conversationId||e.runId!==a.runId||e.nodeId!==a.nodeId||e.modelId!==a.modelId||e.leaseEpoch!==f.leaseEpoch||d.archive.adapter!==i.adapter||d.lineage.rootFlowId!==Z.rootFlowId)return C();let g="worker"===f.kind?f.descendant:void 0;if(g){let a=d.lineage.edges[0];if(1!==d.lineage.edges.length||a?.kind!=="attached-lane"||a.parentConversationId!==Z.rootConversationId||a.parentLogicalRunId!==Z.rootLogicalRunId||a.parentNodeId!==g.parentNodeId||a.childConversationId!==f.conversationId||a.childLogicalRunId!==f.runId||a.childFlowId!==f.flow.id)return C()}else if(F?0!==d.lineage.edges.length:0===d.lineage.edges.length)return C();let h=await $(d.receipt.invocationId);if((0,n.e$)(h)!==(0,n.e$)(d))return C();if("persona"===f.kind){let a=f.flow;for(let b of h.lineage.edges)a=(0,x.$7)(a,b.parentNodeId,b.childFlowId,f.workspace);if(a.id!==J.id||K(a)!==L)return C()}await y.commitWhileCurrent(async()=>{await S(f,async b=>{let c=(0,n.e$)([f.dispatchId,f.round,f.planDigest,e.conversationId,e.runId,e.nodeId,e.modelId,e.inputDigest,e.attemptOrdinal]);if(b.reservations.length>=256||b.reservations.some(a=>"released"!==a.state||a.invocationId===d.receipt.invocationId||a.acceptanceDigest===c))return C();b.reservations.push({invocationId:d.receipt.invocationId,descriptorDigest:(0,n.e$)(d),owner:structuredClone(e),lineageDigest:d.lineage.digest,acceptanceDigest:c,planDigest:(0,n.e$)([f.planDigest,L,P]),modelId:a.modelId,maxTurns:O,state:"accepted"})},U)}),b=c,y.signal.addEventListener("abort",()=>c.cancel(),{once:!0})},acknowledgeLive:async a=>{if(a!==b||!d||aa||ab)return C();await T()},acknowledgeSdkOutcome:async(a,c)=>{if(a!==b||!d||!aa||!ab)return C();await y.commitWhileCurrent(()=>af(async a=>{if("completed"===c&&a.handoff&&"confirmed"!==a.handoff.state)return C();a.sdkOutcome=c}))},acknowledgeTerminalReady:async a=>{if(a!==b||!d||!aa||!ab)return C();await T()}}),ah={terminationProtocol:X,...W?{codexProfile:W}:{},assertOutputCurrent:async()=>b&&d?(await T(),await _(),(0,n.e$)(E(await g.getModel(a.modelId)))!==P)?C():void await T():C(),prepareHandoff:async(a,c)=>{if(!b||b.descriptor.receipt.invocationId!==a||!d||aa||ab||b.descriptor.inventory.terminationProtocol!==N||ac||!c||c.length>256||ae.size>=32||ae.has(c))return C();await ah.beforeFirstPrompt(),await y.commitWhileCurrent(()=>af(async a=>{if("registered"!==a.state)return C();a.handoff={protocol:N,toolInvocationIds:[...ae,c],state:"requested"}})),ae.add(c)},requestHandoffTermination:async a=>{if(!b||b.descriptor.receipt.invocationId!==a||!d||!ae.size||aa||ab||ac)return C();await T(),y.signal.throwIfAborted(),ac=!0,d.requestStop()},confirmHandoffTermination:async(a,c)=>{if(!b||b.descriptor.receipt.invocationId!==a||!d||!ac||!aa||!ab||!ae.size||(0,n.e$)([...ae])!==(0,n.e$)(c))return C();await T(),await y.commitWhileCurrent(()=>af(async a=>{if("exited"!==a.state||!a.exit||a.handoff?.state!=="requested"||(0,n.e$)(a.handoff.toolInvocationIds)!==(0,n.e$)(c))return C();a.handoff.state="confirmed"}))},observeSdkUsage:async a=>{if(!a||"object"!=typeof a||!d||!b||a.type!==("claude-cli"===k?"result":"turn.completed"))return C();await ah.assertOutputCurrent();let c=a.usage&&"object"==typeof a.usage?a.usage:{},e=a=>"number"==typeof a&&Number.isFinite(a)&&a>=0?a:void 0,f={source:"claude-cli"===k?"claude-sdk-result":"codex-app-server-turn",..."claude-cli"===k?{numTurns:e(a.num_turns)}:{outerTurns:1},inputTokens:e(c.input_tokens),outputTokens:e(c.output_tokens),cacheReadTokens:e("claude-cli"===k?c.cache_read_input_tokens:c.cached_input_tokens),cacheCreationTokens:e(c.cache_creation_input_tokens),totalCostUsd:e(a.total_cost_usd),durationMs:e(a.duration_ms)};if(await y.commitWhileCurrent(()=>af(async a=>{if(a.sdkUsage&&(0,n.e$)(a.sdkUsage)!==(0,n.e$)(f))return C();if("codex-cli"===k){if(!ad||a.codexBudget?.admittedTurns!==1)return C();a.codexBudget.completedTurns=1}a.sdkUsage=f})),void 0!==f.numTurns&&f.numTurns>O)return C()},assertTurnBudget:async c=>{if(!b||c!==O||(0,n.e$)(E(await g.getModel(a.modelId)))!==P)return C();await T(),"codex-cli"===k&&await y.commitWhileCurrent(()=>af(async a=>{if(ad||d||"accepted"!==a.state||a.codexBudget)return C();a.codexBudget={scope:"outer-turn",admittedTurns:1,maxTurns:O},ad=!0}))},register:async a=>{if("claude-cli"===k)(0,s.Y)(a,ah);else if((0,t.Pb)(a,ah),!ad)return C();if(!b||d||!a.identity.processBirthMarkerV2)return C();d=a,a.exit.then(()=>{aa=!0}),a.close.then(()=>{ab=!0}),await y.commitWhileCurrent(()=>af(async b=>{if("accepted"!==b.state)return C();b.identity=a.identity,b.state="registered"})),await ah.beforeFirstPrompt()},beforeFirstPrompt:async()=>!d||aa||ab||!b||(0,n.e$)(E(await g.getModel(a.modelId)))!==P||(await T(),await _(),!await (0,l.a$)(d.identity)||aa||ab)?C():void await T(),waitForExit:async()=>{if(!d||!b)return C();let a=await d.exit;await d.close,aa=!0,ab=!0,await af(async b=>{if(b.exit&&(0,n.e$)(b.exit)!==(0,n.e$)(a))return C();b.exit=a,"released"!==b.state&&(b.state="exited")},{assertCurrent:async()=>{if(!b||!d||!aa||!ab)return C()},assertActive:()=>{if(!b||!d||!aa||!ab)return C()}})},releaseAfterTerminal:async()=>{if(!b||!aa||!ab)return C();let a=b;if("terminal"!==(await a.waitTerminal()).state)return C();let c=async()=>{await (0,q.xJ)({invocationId:a.descriptor.receipt.invocationId,expectedOwner:a.descriptor.receipt.owner,expectedLineageDigest:a.descriptor.lineage.digest,expectedDescriptorDigest:(0,n.e$)(a.descriptor),expectedWorkspace:f.workspace,assertReadAuthorized:async()=>{if(a!==b||!aa||!ab)return C()}})};await af(async a=>{if("completed"!==a.sdkOutcome||a.handoff&&"confirmed"!==a.handoff.state)return C();a.state="released"},{assertCurrent:c,assertActive:()=>{if(a!==b||!aa||!ab)return C()}})}},ai=a=>b&&(void 0===a||b.descriptor.receipt.invocationId===a)?b:C(),aj=async()=>{if(!d||aa||ab||y.signal.aborted||b?.signal.aborted)return!1;let a=d;if("codex-cli"===i.adapter){if(!await (0,t.RF)(a,ah))return!1}else if((0,s.Y)(a,ah),!await (0,l.a$)(a.identity))return!1;return d===a&&!aa&&!ab&&!y.signal.aborted&&!b?.signal.aborted},ak=Object.freeze({async readOrigin(a){let b=ai(a),c=await (0,q.Fo)({invocationId:a,authority:Y,root:Z,signal:y.signal});return(0,n.e$)(c)!==(0,n.e$)(b.descriptor)?C():c},async readPayload(a){let b=ai(a?.invocationId);if((0,n.e$)(a)!==(0,n.e$)(b.descriptor.payloadRef))return C();await ak.readOrigin(a.invocationId);let c=await (0,r.cN)(a,f.workspace);return await T(),c},assertPublishable:async a=>a.session!==ai(a.invocationId)||d?C():(await T(),(0,q.ch)({...a,authority:Y,root:Z})),async retainLive(a,b,c){if(a!==ai()||!c||"object"!=typeof c||Array.isArray(c)||!d)return C();let g=a.descriptor,h=`source-${(0,n.e$)([g.lineage.installationId,g.receipt.owner.leaseEpoch])}`,i={invocationId:g.receipt.invocationId,workerId:g.lineage.workerId,goalId:g.lineage.goalId,fleetRunId:g.lineage.fleetRunId,rootConversationId:g.lineage.rootConversationId,workspace:f.workspace,conversationId:g.receipt.owner.conversationId,logicalRunId:g.receipt.owner.runId,nodeId:g.receipt.owner.nodeId,generation:h};if(Object.entries(i).some(([a,c])=>b?.[a]!==c))return C();let j=(0,n.e$)(b);if(e&&(e.ownerDigest!==j||e.hostGeneration!==c)||(await ah.assertOutputCurrent(),!await aj()))return C();let k=(await Q(f)).reservations.find(a=>a.invocationId===i.invocationId);return k?.state!=="registered"||(0,n.e$)(k.identity)!==(0,n.e$)(d.identity)||k.descriptorDigest!==(0,n.e$)(g)?C():(await ah.assertOutputCurrent(),await aj())?(await ah.assertOutputCurrent(),aa||ab||y.signal.aborted||a.signal.aborted)?C():Object.freeze({handle:(e??={handle:Object.freeze({}),ownerDigest:j,hostGeneration:c,generation:h}).handle,generation:h}):C()},async probeLive(a,c,g){if(!e||a!==e.handle||g!==e.hostGeneration||(0,n.e$)(c)!==e.ownerDigest)return null;try{if(await ah.assertOutputCurrent(),!b||!d||!await aj())return null;let c=(await Q(f)).reservations.find(a=>a.invocationId===b.descriptor.receipt.invocationId);if(c?.state!=="registered"||(0,n.e$)(c.identity)!==(0,n.e$)(d.identity)||c.descriptorDigest!==(0,n.e$)(b.descriptor)||(await ah.assertOutputCurrent(),!await aj()))return null;return await ah.assertOutputCurrent(),aa||ab||y.signal.aborted||b.signal.aborted?null:a}catch{return null}},async readTerminal(a,c){let e=ai(a),g={expectedOwner:e.descriptor.receipt.owner,expectedLineageDigest:e.descriptor.lineage.digest,expectedDescriptorDigest:(0,n.e$)(e.descriptor),expectedWorkspace:f.workspace};if((0,n.e$)(c)!==(0,n.e$)(g))return C();let h=async()=>{if(!d||!aa||!ab||e!==b)return C();let c=(await Q(f)).reservations.find(b=>b.invocationId===a);if(!c||!["exited","released"].includes(c.state)||"completed"!==c.sdkOutcome||!c.exit||c.descriptorDigest!==g.expectedDescriptorDigest||(0,n.e$)(c.identity)!==(0,n.e$)(d.identity)||c.handoff&&"confirmed"!==c.handoff.state)return C()};return{...await (0,q.xJ)({invocationId:a,...g,assertReadAuthorized:h}),cancelResolved:!0}}});return G.add(ah),H.set(ah,ak),"worker"===f.kind&&I.set(ah,f.context),{broker:Y,session:ag,process:Object.freeze(ah)}}},245698:(a,b,c)=>{"use strict";c.r(b),c.d(b,{MCPService:()=>ce,mcpService:()=>cf});let d=new WeakMap;async function e(a,b){if(a.getProtocolEra?.()!=="modern")return!1;let c=d.get(a);if(c||(c=new Map,d.set(a,c)),!c.has(b)){let d=c,e=a.listen({resourceSubscriptions:[b]});d.set(b,e),e.then(a=>{a.honoredFilter.resourceSubscriptions?.includes(b)||a.close().catch(()=>{}),a.closed.then(()=>{d.get(b)===e&&d.delete(b)})},()=>{d.get(b)===e&&d.delete(b)})}return await c.get(b),!0}var f=c(403409),g=c(34762),h=c(179764),i=c(478645);function j(a){if(a instanceof i.Kq||a instanceof h.Bk)return{success:!1,error:a instanceof h.Bk?"ISOLATION_UNAVAILABLE"===a.code?"Isolation is unavailable. Restore the configured Docker runtime and image, then retry.":"Owner approval required. Review this server’s isolation settings and renew its approval, then retry.":"HOST_POLICY_INVALID"===a.code?"Owner approval required. Review this server’s command and execution settings, then retry.":"Owner approval required. This protected server has no valid approval for its current configuration. Renew its approval, then retry.",errorCode:a.code,errorType:"execution-approval",requiresApproval:!0,statusCode:409}}var k=c(919674),l=c(79748),m=c.n(l),n=c(333873),o=c.n(n),p=c(446193),q=c(653637),r=c(899631);let s="[REDACTED]";function t(a){return"string"==typeof a?a:a&&"string"==typeof a.value?a.value:""}function u(a,b){let c=new Set,d=a=>{if(!a||(0,r.uh)(a)||(0,r.T6)(a))return;c.add(a);let b=/^(?:Bearer|Basic)\s+(.+)$/i.exec(a);b&&c.add(b[1])};for(let[c,e]of Object.entries(a.env??{}))((0,q.xc)(c)||null!=e&&"object"==typeof e&&e.metadata?.isSecret)&&(d(t(e)),d(t(b.env?.[c])));if("headers"in a){let c="headers"in b?b.headers:void 0;for(let[b,e]of Object.entries(a.headers??{}))if(((0,q.Hm)(b)||/^(?:cookie|set-cookie|proxy-authorization)$/i.test(b)||null!=e&&"object"==typeof e&&e.metadata?.isSecret)&&(d(t(e)),d(t(c?.[b])),/^(?:cookie|set-cookie)$/i.test(b)))for(let a of t(c?.[b]).split(";")){let b=a.indexOf("=");b>=0&&d(a.slice(b+1).trim())}}return[...c]}function v(a){let b=new Set;for(let c of a)if(c){b.add(c);try{b.add(encodeURIComponent(c))}catch{}b.add(JSON.stringify(c).slice(1,-1))}let c=[...b].sort((a,b)=>b.length-a.length),d=(a,b,d=!1)=>{let e="",f=0;for(;f<a.length;){let g=a.length-f,h=c.some(b=>g<b.length&&b.startsWith(a.slice(f)));if(h&&!b)break;let i=c.find(b=>a.startsWith(b,f));i?(e+=s,f+=i.length):h&&b&&d?(e+=s,f=a.length):e+=a[f++]}return{output:e,pending:a.slice(f)}};return{redact:a=>d(a,!0).output,stream(){let a="";return{write(b){let c=d(a+b,!1);return a=c.pending,c.output},end(){let b=d(a,!0,!0);return a="",b.output}}}}}var w=c(43521),x=c(189663),y=c(389861),z=c(767351),A=c(558736),B=c(470589),C=c(553468),D=c(380949),E=c(7557),F=c(149925),G=c(676881),H=c(247726),I=c(977598);let J=(0,w.h)("backend/services/mcp/lifecycleCoordinator");function K(){return global.__flujo_mcp_lifecycle||(global.__flujo_mcp_lifecycle=new Map),global.__flujo_mcp_lifecycle}function L(a,b=(0,x.getCurrentWorkspace)()){return`${b}\0${a}`}function M(a){let b=(0,x.getCurrentWorkspace)(),c=L(a,b),d=K().get(c);return d||(d={key:c,workspace:b,serverName:a,runtimeId:(0,I.randomUUID)(),state:"cold",generation:0,retryAttempts:0,connectFailures:0,handshakeFailures:0,forcedKills:0,leases:0,pins:new Set,lastUsedAt:Date.now()},K().set(c,d)),d}function N(a){return K().get(L(a))}function O(){let a=(0,x.getCurrentWorkspace)();return Array.from(K().values()).filter(b=>b.workspace===a)}async function P(a,b){let c=M(a);c.teardownPromise&&await c.teardownPromise.catch(()=>void 0);let d=c.connectPromise;if(d)return J.debug(`beginConnect: reusing in-flight attempt for ${a}`),d;c.state="warm"===c.state?"warm":"starting",c.shutdownReceipt=void 0;let e=(async()=>b(c))().finally(()=>{c.connectPromise===e&&(c.connectPromise=void 0)});return c.connectPromise=e,e}function Q(a){let b=N(a);if(b&&!b.connectPromise)return b.shutdownReceipt?.generation===b.generation?b.shutdownReceipt:void 0}let R=(0,w.h)("backend/services/mcp/mcpLeasePool");function S(){let a=Number(process.env.FLUJO_MCP_IDLE_TTL_MS);return Number.isFinite(a)&&a>0?a:6e5}function T(){let a=Number(process.env.FLUJO_MCP_MAX_WARM_SERVERS);return Number.isFinite(a)&&a>0?Math.floor(a):8}function U(){let a=()=>({acquires:0,coalesced:0,connects:0,failures:0,idleClosures:0,lruEvictions:0}),b=(0,x.getCurrentWorkspace)();if(b===x.DEFAULT_WORKSPACE)return global.__flujo_mcp_pool_counters||(global.__flujo_mcp_pool_counters=a()),global.__flujo_mcp_pool_counters;let c=global.__flujo_mcp_pool_counters_by_workspace??=new Map,d=c.get(b);return d||(d=a(),c.set(b,d)),d}function V(a,b,c){let d,e=!1;return d=M(a),d.leases+=1,d.lastUsedAt=Date.now(),{serverName:a,generation:c,client:b,isStale(){let b=N(a);return!b||b.generation!==c},release(){if(!e){let b;e=!0,(b=M(a)).leases=Math.max(0,b.leases-1),b.lastUsedAt=Date.now()}}}}async function W(a,b,c=b=>a.connectServer(b)){if(U().acquires+=1,await a.isServerDisabled(b))return{success:!1,error:`Server '${b}' is disabled. Enable it on the MCP page to use it.`};let d=a.getClient(b);if(d){U().coalesced+=1;let a=M(b);return{success:!0,lease:V(b,d,a.generation)}}U().connects+=1;let e=await c(b),f=a.getClient(b);if(!e.success||!f)return U().failures+=1,{success:!1,error:e.error??`Could not establish an MCP connection to '${b}'.`};let g=M(b);return{success:!0,lease:V(b,f,g.generation)}}function X(a,b){M(a).pins.add(b)}async function Y(a){let b=S(),c=Date.now(),d=[];for(let e of O())"warm"!==e.state||e.leases>0||e.pins.size>0||c-e.lastUsedAt<b||!function(a){let b=N(a);return!!b&&(b.leases>0||b.pins.size>0)}(e.serverName)&&(R.info(`sweepIdleServers: closing ${e.serverName} after ${Math.round((c-e.lastUsedAt)/1e3)}s idle`),await a.disconnectServer(e.serverName).catch(()=>void 0),U().idleClosures+=1,d.push(e.serverName));return d}async function Z(a){let b=T(),c=[];for(;;){let d=O().filter(a=>"warm"===a.state);if(d.length<=b)break;let e=d.filter(a=>0===a.leases&&0===a.pins.size).sort((a,b)=>a.lastUsedAt-b.lastUsedAt)[0];if(!e)break;R.info(`enforceWarmCapacity: evicting idle LRU server ${e.serverName} (warm=${d.length}, limit=${b})`),await a.disconnectServer(e.serverName).catch(()=>void 0),U().lruEvictions+=1,c.push(e.serverName)}return c}var $=c(695794),_=c(160103),aa=c(401499);function ab(a){return a instanceof $.Nh||a instanceof aa.bd||a instanceof _.xe?{code:a.code,...void 0===a.data?{}:{data:a.data}}:void 0}function ac(a){return -32601===a?404:-32602===a||-32600===a?400:500}var ad=c(122134),ae=c(332137),af=c(531123),ag=c(499872),ah=c(884756),ai=c(258627),aj=c(940768),ak=c(169055),al=c(816408),am=c(637390);class an extends ah.V${constructor(){super("MCP Tasks request timed out"),this.name="TasksExtensionRequestTimeoutError"}}let ao=new WeakMap;class ap{constructor(a,b,c,d,e){this.client=a,this.transport=b,this.onLateCreation=c,this.checkAuthority=d,this.onRetired=e,this.prefix=`flujo-tasks:${(0,I.randomUUID)()}:`,this.sequence=0,this.pending=new Map,this.lateCreations=new Map,this.retired=!1,this.onmessage=(a,b)=>{if("id"in a&&!("method"in a)&&"string"==typeof a.id&&a.id.startsWith(this.prefix)){let b=this.pending.get(a.id);if(b)if("result"in a&&aw(a.result)&&(0,ak.Wi)(a.result))b.finish({kind:"result",result:a.result});else if("error"in a&&aw(a.error)&&(0,ak.Wi)(a.error)){let c=al.W7.safeParse(a.error);c.success?b.finish({kind:"error",error:c.data}):b.finish(void 0,new ah.V$("MCP Tasks response error is malformed"))}else b.finish(void 0,new ah.V$("MCP Tasks response is not bounded JSON"));else if(!this.retired&&(this.lateCreations.get(a.id)??0)>Date.now()){this.lateCreations.delete(a.id);let b="result"in a&&aw(a.result)?al._N.safeParse(a.result):void 0;b?.success&&this.onLateCreation(b.data.taskId).catch(()=>{})}return}if("method"in a&&"notifications/progress"===a.method){let b=a.params?.progressToken;if("string"==typeof b&&b.startsWith(this.prefix))return void this.pending.get(b)?.progress(a.params)}this.previousMessage?.call(this.transport,a,b)},this.onclose=()=>{this.retire(new ah.V$("MCP Tasks transport closed")),this.previousClose?.call(this.transport)},this.dispatch=async(a,b={})=>{var c,d;if(await this.checkAuthority(),this.retired||this.client.transport!==this.transport||this.transport.onmessage!==this.onmessage)return this.retire(),Promise.reject(new ah.V$("MCP Tasks connection is no longer active"));if(b.signal?.aborted)return Promise.reject(aq(b.signal));if(!ar(a)||"string"!=typeof a.method)return Promise.reject(new ah.V$("MCP Tasks request must be an object with a method"));let e=b.context?.requestTimeoutMs??6e4;if(!Number.isSafeInteger(e)||e<=0||e>0x7fffffff)return Promise.reject(RangeError("MCP Tasks request timeout must be a positive 32-bit integer"));let f=`${this.prefix}${this.sequence++}`,g=ar(c=a.params)?c:{},h={...a,jsonrpc:"2.0",id:f,params:{...g,_meta:{...ar(d=g._meta)?d:{},progressToken:f}}};return new Promise((c,d)=>{let g,i=new AbortController,j=setTimeout(()=>m(void 0,new an),e),k=()=>{clearTimeout(g),g=setTimeout(()=>m(void 0,new an),e)},l=()=>m(void 0,aq(b.signal)),m=(e,h)=>{if(this.pending.delete(f)){if(clearTimeout(g),clearTimeout(j),b.signal?.removeEventListener("abort",l),i.abort(),!e&&!this.retired&&"tools/call"===a.method){for(let[a,b]of this.lateCreations)b<=Date.now()&&this.lateCreations.delete(a);for(;this.lateCreations.size>=32;)this.lateCreations.delete(this.lateCreations.keys().next().value);this.lateCreations.set(f,Date.now()+3e4)}e?this.checkAuthority().then(()=>{if(b.signal?.aborted)throw aq(b.signal);if(this.retired||this.client.transport!==this.transport||this.transport.onmessage!==this.onmessage)throw new ah.V$("MCP Tasks connection retired before result delivery");c(e)}).catch(d):d(h)}};this.pending.set(f,{finish:m,progress:a=>{if(b.context?.resetTimeoutOnProgress&&k(),a&&"number"==typeof a.progress&&Number.isFinite(a.progress))try{b.context?.onprogress?.({progress:a.progress,..."number"==typeof a.total&&Number.isFinite(a.total)?{total:a.total}:{},..."string"==typeof a.message?{message:a.message}:{}})}catch(a){m(void 0,a)}}}),b.signal?.addEventListener("abort",l,{once:!0}),k(),this.transport.send(h,{headers:b.context?.headers,requestSignal:i.signal,onRequestStreamEnd:()=>m(void 0,new ah.V$("MCP Tasks response stream ended before a reply"))}).catch(a=>m(void 0,a))})},this.previousMessage=b.onmessage,this.previousClose=b.onclose,b.onmessage=this.onmessage,b.onclose=this.onclose}retire(a=new ah.V$("MCP Tasks session retired")){if(!this.retired){for(let b of(this.retired=!0,this.lateCreations.clear(),[...this.pending.values()]))b.finish(void 0,a);this.onRetired()}}}function aq(a){return a.reason instanceof Error?a.reason:new DOMException("The operation was aborted","AbortError")}function ar(a){return null!=a&&"object"==typeof a&&!Array.isArray(a)}function as(a){let b,c=ao.get(a);if(!c||c.retired)return;if(c.bundle)return c.bundle;if(a.getProtocolEra?.()==="modern"&&(c.negotiatedModern=!0),a.getProtocolEra?.()!=="modern"||a.getNegotiatedProtocolVersion?.()!=="2026-07-28"||!(0,am.BD)(a.getServerCapabilities?.())||!a.transport)return;let d=a.transport,e=new AbortController,f=async()=>{if(c.retired||c.identity.isAuthorityCurrent&&!await c.identity.isAuthorityCurrent())throw c.retired=!0,c.close?.().catch(()=>{}),new ah.V$("MCP Tasks connection authority is no longer current")},g=new ap(a,d,async b=>{let e=c.identity.authorizeLateTaskCancellation;e&&!c.retired&&a.transport===d&&await e(b)&&(c.retired||a.transport!==d||await c.bundle?.cancelTask(b))},f,()=>{e.abort(),c.retired=!0,c.close?.().catch(()=>{})});try{b=(0,ai.Vj)(a,c.identity.endpointId,{rawDispatch:g.dispatch,v2RequestFraming:{...c.identity,protocolVersion:"2026-07-28"}})}catch(a){throw g.retire(),a}let h=(0,aj.v)(b,{}),i=async(a,c,d)=>{try{var f=await b.dispatch({method:a,params:c},d);if("error"===f.kind)throw new _.xe(f.error);return f.result}catch(b){if(d?.signal?.aborted&&!e.signal.aborted)throw aq(d.signal);let a=function(a){let b=a;for(let a=0;a<5&&b instanceof Error;a++){if(b instanceof an)return b;b=Object.getOwnPropertyDescriptor(b,"cause")?.value}}(b);if(a)throw a;throw b}},j=(a,b)=>({...b,context:{...b?.context,headers:{...Object.fromEntries(Object.entries(b?.context?.headers??{}).filter(([a])=>"mcp-name"!==a.toLowerCase())),"Mcp-Name":a}}}),k=new Map;return c.bundle={session:h,signal:e.signal,async callTool(b,c){let d=new AbortController,g=c?.context?.requestTimeoutMs??6e4,h=setTimeout(()=>d.abort(new an),g),j=AbortSignal.any([e.signal,d.signal,...c?.signal?[c.signal]:[]]);try{var l,m;let d,e,h,n,o,p;if(await f(),k.size>=1e3)throw new ah.V$("MCP Tasks output validation capacity exceeded");let q=(await a.listTools(void 0,{signal:j,timeout:g,maxTotalTimeout:g})).tools.find(a=>a.name===b.name),r=aA(q),s={...Object.fromEntries(Object.entries(c?.context?.headers??{}).filter(([a])=>!a.toLowerCase().startsWith("mcp-param-"))),...(l=q,m=b.arguments,e={},h=new Set,n=0,o=()=>{throw new aa.bd(aa.qu.InvalidParams,"Invalid MCP parameter header declaration")},p=(a,b,c,d)=>{if((++n>1e4||d>32)&&o(),null!==a&&"object"==typeof a){if(Object.hasOwn(a,"x-mcp-header")){let d=a["x-mcp-header"];(!c||!b.length||"string"!=typeof d||!ay.test(d)||!["string","integer","boolean"].includes(String(a.type))||h.has(d.toLowerCase()))&&o(),h.add(d.toLowerCase());let f=m;for(let a of b)f=null!==f&&"object"==typeof f&&Object.hasOwn(f,a)?f[a]:void 0;if(null!=f){("string"!==a.type||"string"==typeof f)&&("boolean"!==a.type||"boolean"==typeof f)&&("integer"!==a.type||Number.isSafeInteger(f))||o();let b=String(f),c=b.length>0&&b===b.trim()&&/^[\x09\x20-\x7e]*$/.test(b)&&!(b.startsWith("=?base64?")&&b.endsWith("?="));e["Mcp-Param-"+d]=c?b:"=?base64?"+Buffer.from(b,"utf8").toString("base64")+"?="}}if(a.properties&&"object"==typeof a.properties)for(let[e,f]of Object.entries(a.properties))p(f,[...b,e],c,d+1);for(let c of az){let e=a[c];Array.isArray(e)?e.forEach(a=>p(a,b,!1,d+1)):e&&"object"==typeof e&&(["patternProperties","dependentSchemas","$defs","definitions"].includes(c)?Object.values(e).forEach(a=>p(a,b,!1,d+1)):p(e,b,!1,d+1))}}},l&&p(l.inputSchema,[],!0,0),e)},t=b;for(let e=0;e<=32;e++){j.throwIfAborted();let f=await i("tools/call",{...t},{...c,signal:j,context:{...c?.context,headers:s}}),g=al.ss.safeParse(f);if(g.success){if(32===e||!g.data.inputRequests&&g.data.requestState===d)throw new ah.V$("MCP Tasks initial input did not converge");d=g.data.inputRequests?void 0:g.data.requestState;let f=Object.fromEntries(await Promise.all(Object.entries(g.data.inputRequests??{}).map(async([b,d])=>[b,await au(a,d,j,c?.expectedConversationId)])));t={...b,...void 0===g.data.requestState?{}:{requestState:g.data.requestState},...Object.keys(f).length?{inputResponses:al.uD.parse(f)}:{}};continue}let h=al._N.safeParse(f);if(h.success)return k.set(h.data.taskId,r),h.data;let l=al.xu.parse(f);if("complete"!==l.resultType)throw new ah.V$("MCP Tasks completion is not a completed tool result");return r(l),l}throw new ah.V$("MCP Tasks initial input did not converge")}finally{clearTimeout(h)}},async getTask(a,b){let c=al.Y$.parse(await i("tasks/get",{taskId:a},j(a,b)));if(c.taskId!==a)throw new ah.V$("MCP Tasks response identity mismatch");return["failed","cancelled"].includes(c.status)&&k.delete(a),c},validateToolResult(a,b){let c=k.get(a);if(!c)return!1;try{c(b)}finally{k.delete(a)}return!0},async cancelTask(a,b){al.U$.parse(await i("tasks/cancel",{taskId:a},j(a,b)))},async updateTask(a,b,c){let d=al.uD.parse(b);al.RX.parse(await i("tasks/update",{taskId:a,inputResponses:d},j(a,c)))}},c.close=async()=>{c.retired=!0,e.abort(),g.retire(),k.clear();try{await h.close()}finally{b[Symbol.dispose]()}},b.onInvalidated(()=>{c.close?.().catch(()=>{})}),c.bundle}async function at(a){let b=ao.get(a);b&&(b.retired=!0,await b.close?.())}async function au(a,b,c,d){let e=ao.get(a);if(!e||e.retired||!e.identity.handleInputRequest)throw new ah.V$("MCP Tasks input handling is not available");if(c?.aborted)throw aq(c);if(e.identity.isAuthorityCurrent&&!await e.identity.isAuthorityCurrent())throw await at(a),new ah.V$("MCP Tasks input authority is no longer current");let f=al.d7.parse(b),g=e.identity.handleInputRequest(f,c,d),h=await av(g,c);if(c?.aborted)throw aq(c);if(e.retired||e.identity.isAuthorityCurrent&&!await e.identity.isAuthorityCurrent())throw await at(a),new ah.V$("MCP Tasks input authority changed before result delivery");return"elicitation/create"===f.method?al.Rz.parse(h):"sampling/createMessage"===f.method?al.KB.parse(h):al.q6.parse(h)}async function av(a,b){if(!b)return a;let c=()=>{},d=new Promise((a,d)=>{c=()=>d(aq(b)),b.addEventListener("abort",c,{once:!0}),b.aborted&&c()});try{return await Promise.race([a,d])}finally{b.removeEventListener("abort",c)}}function aw(a){let b=0,c=0,d=new Set,e=(a,f)=>{if(++b>1e4||f>32)return!1;if("string"==typeof a)return(c+=a.length)<=1048576;if(null===a||"boolean"==typeof a)return!0;if("number"==typeof a)return Number.isFinite(a);if("object"!=typeof a||d.has(a))return!1;d.add(a);let g=Object.keys(a);if(g.length>1e4)return!1;for(let b of g){c+=b.length;let d=Object.getOwnPropertyDescriptor(a,b);if(c>1048576||!d||!("value"in d)||!e(d.value,f+1))return!1}return d.delete(a),!0};return e(a,0)}let ax=new ag.p4,ay=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,az=new Set(["items","prefixItems","contains","additionalProperties","unevaluatedProperties","unevaluatedItems","propertyNames","patternProperties","dependentSchemas","oneOf","anyOf","allOf","not","if","then","else","$defs","definitions"]);function aA(a){let b;if(!a?.outputSchema)return()=>{};try{b=ax.getValidator(a.outputSchema)}catch{throw new aa.bd(aa.qu.InvalidParams,"MCP tool output schema is invalid")}return a=>{if(!a.isError){if(void 0===a.structuredContent)throw new aa.bd(aa.qu.InvalidRequest,"MCP tool did not return required structured content");if(!b(a.structuredContent).valid)throw new aa.bd(aa.qu.InvalidParams,"MCP tool output does not match its schema")}}}var aB=c(383594),aC=c(225335),aD=c(316646),aE=c(304927),aF=c(320108),aG=c(769760),aH=c(774858),aI=c(56140),aJ=c(140742),aK=c(769588),aL=c(170098),aM=c(928776),aN=c(971415),aO=c(660826);let aP=(0,w.h)("backend/services/mcp/betaClient");async function aQ(){try{let a=await (0,aE.loadItem)(aF.Zg.SPEECH_SETTINGS,void 0);return!!a?.experimental?.mcpBetaProtocol}catch(a){return aP.warn("Failed to read mcpBetaProtocol setting; defaulting to disabled",{err:a}),!1}}function aR(a){return!0===a.__flujoBeta}function aS(a,b){let d=(0,aK.jV)(a),e=(0,aL.fy)(a),f=!0===a.enableMcpApps,g="stdio"===a.transport&&void 0===a.isolation,h={name:`flujo-${a.name}-client`,version:"3.47.0"},i={roots:{listChanged:!0},...d?{sampling:{}}:{},...g||e?{elicitation:{...g?{url:{}}:{},...e?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[E.ET]:{}}:{},...g?{[aM.OM]:aM.XC}:{},...f?{[z.OF]:{mimeTypes:[z.cM]}}:{}}},j=new aa.Kj(h,{capabilities:i,listChanged:{tools:{autoRefresh:!1,onChanged:()=>{}},prompts:{autoRefresh:!1,onChanged:()=>{}},resources:{autoRefresh:!1,onChanged:()=>b?.()}},versionNegotiation:{mode:"stdio"===a.transport?"legacy":"auto"}}),k=(0,aJ.sG)(a,j),l=d?(0,aK.c3)(a):void 0,m=g||e?(0,aL.Cd)(a):void 0;if((0,af.zD)(j,"roots/list",k),l&&(0,af.zD)(j,"sampling/createMessage",l),m&&(0,af.zD)(j,"elicitation/create",m),j.setRequestHandler("roots/list",async(a,b)=>{b.mcpReq.signal.throwIfAborted();let c=await k();return b.mcpReq.signal.throwIfAborted(),c}),d&&j.setRequestHandler("sampling/createMessage",async(a,b)=>l(a,{signal:b.mcpReq.signal})),(g||e)&&j.setRequestHandler("elicitation/create",async(a,b)=>m(a,{signal:b.mcpReq.signal})),"stdio"!==a.transport&&void 0===a.isolation&&void 0===a.trustedHost){let b=(0,x.bindToCurrentWorkspace)(async()=>{if(!aB.Gv.ENABLE_MCP_TASKS_CLIENT)return!1;let{mcpService:b}=await Promise.resolve().then(c.bind(c,245698));return b.getClient(a.name)===j});var n={endpointId:(0,x.workspaceCacheKey)(a.name),clientInfo:h,clientCapabilities:i,authorizeLateTaskCancellation:b,isAuthorityCurrent:b,handleInputRequest:(0,x.bindToCurrentWorkspace)(async(c,d,f)=>{let g=async()=>{if(d?.throwIfAborted(),!await b())throw Error("MCP Tasks input connection is no longer current");let c=(0,aC.lx)(a.name);if(void 0!==f&&(!c||c.conversationId!==f||c.getUnattended()))throw Error("MCP Tasks input owner is no longer attended")};if(await g(),"elicitation/create"===c.method&&!e)throw Error("The requested MCP Tasks input capability is disabled");let h=await (0,af.jq)(j,c,{signal:d,assertCurrent:g,expectedConversationId:f});return await g(),al.t5.parse(h)})};if(ao.has(j))throw Error("MCP Tasks identity is already registered");if(!n.endpointId)throw TypeError("MCP Tasks endpoint identity must not be empty");ao.set(j,{identity:n})}return j.__flujoBeta=!0,j.__flujoCapKey=(0,aG.capabilityKey)(a),aP.info(`Created split-SDK MCP client for ${a.name} (version negotiation: ${"stdio"===a.transport?"legacy":"auto"})`),j}function aT(a){let b=a.requestInit&&"object"==typeof a.requestInit?a.requestInit:void 0;if(a.headers&&"object"==typeof a.headers){let c=(0,aG.flattenCustomHeaders)(a.headers);Object.keys(c).length>0&&(b={...b||{},headers:{...b?.headers||{},...c}})}return b}function aU(a,b){let c,d,e;if((0,D.SL)(a),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new h.Bk("ISOLATION_POLICY_INVALID");if("websocket"===a.transport)throw Error("The v2-beta MCP SDK has no websocket transport; use the v1 path");if("streamable"===a.transport){let b={},c=aT(a);if(c&&(b.requestInit=c),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.oauthClientId||a.oauthClientInformation){let c=(0,G.Cl)(a);b.fetch=c.oauthFetch,b.authProvider=c}let d=new aa.jS(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,aG.httpConfigKey)(a),d.__flujoKind="streamable",aP.info(`Created v2-beta streamable transport for ${a.name}`),d}if("sse"===a.transport){let b={},c=aT(a);c&&(b.requestInit=c),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit);let d=new aa.Am(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,aG.httpConfigKey)(a),d.__flujoKind="sse",aP.info(`Created v2-beta SSE transport for ${a.name}`),d}let{command:f,args:i,env:j,cwd:k,isolation:l}=(0,aG.resolveStdioLaunch)(a,b),m=(0,x.getCurrentWorkspace)(),n=()=>(0,aG.retireMcpRuntimeAuthority)(a.name,m,d,c);try{(0,aG.assertMcpRuntimeAuthorityRetired)(a.name),d=(0,g.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,aO.D9)(a.name):void 0;let h=d?(0,g.Uf)(a,d):{},m={command:f,args:i,env:{...j,...c?a.trustedHost?(0,aH.s7)(a,c.env):c.env:{},...h},cwd:k,stderr:l?"ignore":"pipe",...l?{maxBufferSize:262144}:{}};l||(Object.freeze(m.args),Object.freeze(m.env),Object.freeze(m)),e=new aD.oQ(m),l?(0,B.We)(e,a,l,n):a.trustedHost?(0,aH.Zu)(e,a,n,d):((0,aG.attachShippedWorkspaceReadiness)(e,a,k),(0,aI.uR)(e,a,a=>JSON.stringify([(0,aG.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),(0,aG.capabilityKey)(a)])))}catch(b){let a=[];try{l?.close()}catch(b){a.push(b)}try{n()}catch(b){a.push(b)}if(a.length)throw new aG.McpRuntimeAuthorityRetirementError([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}let o=e;return o.__flujoRuntimeBrokerLeaseId=c?.leaseId,o.__flujoBundledWorkload=d,o.__flujoRetireRuntimeAuthority=n,o.__flujoStdioKey=(0,aG.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),o.__flujoKind="stdio",aV.set(e,new aN.$6),aP.info(`Created v2-beta stdio transport for ${a.name}`),e}let aV=new WeakMap;function aW(a){aV.get(a)?.attach(a)}var aX=c(455511),aY=c(627432);let aZ=(0,w.h)("backend/services/mcp/remoteTaskStore"),a$=null,a_=new Map;function a0(){let a=(0,x.getCurrentWorkspace)();return a===x.DEFAULT_WORKSPACE?a$:a_.get(a)??null}function a1(a){let b=(0,x.getCurrentWorkspace)();b===x.DEFAULT_WORKSPACE?a$=a:a?a_.set(b,a):a_.delete(b)}async function a2(){let a=a0();if(a&&Date.now()-a.at<3e4)return a.value;try{let a=await (0,aE.loadItem)(aF.Zg.MCP_REMOTE_TASK_SETTINGS,aY.QV);a1({value:{...aY.QV,...a},at:Date.now()})}catch(a){aZ.warn("Failed to load MCP remote task settings; using defaults",a),a1({value:aY.QV,at:Date.now()})}return a0().value}async function a3(a){try{var b;let{mcpService:d}=await Promise.resolve().then(c.bind(c,245698)),e=await d.loadServerConfigs();return(b=Array.isArray(e)?e.find(b=>b.name===a):void 0)?function(a,b=32){return(0,aX.createHash)("sha256").update(a).digest("hex").slice(0,b)}(function a(b){if(null===b||"object"!=typeof b)return JSON.stringify(b)??"null";if(Array.isArray(b))return`[${b.map(a).join(",")}]`;let c=Object.entries(b).filter(([,a])=>void 0!==a).sort(([a],[b])=>a<b?-1:+(a>b)).map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`);return`{${c.join(",")}}`}({name:b.name,transport:b.transport,command:b.command??null,args:Array.isArray(b.args)?b.args:null,serverUrl:b.serverUrl??b.websocketUrl??null,envKeys:Object.keys(b.env??{}).sort(),headerKeys:Object.keys(b.headers??{}).sort(),oauth:!!(b.oauth??b.oauthTokens)}),32):"unknown"}catch(b){return aZ.warn(`Could not resolve server identity for ${a}`,b),"unknown"}}async function a4(a){try{let b=Date.now(),c=(0,aX.randomUUID)();(0,aE.ln)(c);let d={version:aY.F6,recordId:c,remoteTaskId:a.remoteTaskId,serverName:a.serverName,serverIdentity:a.serverIdentity,...a.generation?{generation:a.generation}:{},toolName:a.toolName,requestFingerprint:`request:${(0,aX.randomUUID)()}`,ownership:a.ownership,status:a.status,...(0,ae.A$)(a.statusMessage)?{statusMessage:(0,ae.A$)(a.statusMessage)}:{},createdAt:b,updatedAt:b,pollIntervalMs:a.pollIntervalMs,nextPollAt:b+a.pollIntervalMs,...void 0!==a.ttlMs?{ttlMs:a.ttlMs}:{},...void 0!==a.expiresAt?{expiresAt:a.expiresAt}:{},...(0,ae.gJ)(a.status)?{completedAt:b}:{}};return await (0,aE.Vt)(aY.jK,c,d),aZ.info(`Persisted remote MCP task record ${c} (server=${a.serverName}, tool=${a.toolName}, status=${a.status})`),d}catch(a){return aZ.warn("Failed to persist remote MCP task record",a),null}}async function a5(a,b){try{return(0,aE.ln)(a),await (0,aE.l_)(`mcp-remote-task:${a}`,async()=>{let c=await (0,aE.EI)(aY.jK,a,null);if(!c)return null;let d=b.status??c.status;if(b.status&&!(0,aY.el)(c.status,b.status))return aZ.debug(`Rejected illegal remote task transition ${c.status} -> ${b.status} for ${a}`),c;let e=Date.now(),f={...c,...b,version:aY.F6,recordId:c.recordId,remoteTaskId:c.remoteTaskId,serverName:c.serverName,serverIdentity:c.serverIdentity,generation:c.generation,toolName:c.toolName,requestFingerprint:c.requestFingerprint,createdAt:c.createdAt,status:d,...void 0!==b.statusMessage?{statusMessage:(0,ae.A$)(b.statusMessage)}:{},...void 0!==b.errorMessage?{errorMessage:(0,ae.A$)(b.errorMessage)}:{},updatedAt:e};return(0,ae.gJ)(f.status)&&!f.completedAt&&(f.completedAt=e),await (0,aE.Vt)(aY.jK,a,f),f})}catch(b){return aZ.warn("Failed to patch remote MCP task record",{recordId:a,error:b}),null}}let a6=globalThis,a7=a6.__flujoMcpTaskPollSlots??(a6.__flujoMcpTaskPollSlots={total:0,perServer:new Map});async function a8(a){let b=await a2(),c=(0,x.workspaceCacheKey)(a),d=a7.perServer.get(c)??0;if(a7.total>=b.maxConcurrentPolls||d>=b.maxConcurrentPollsPerServer)return;a7.total++,a7.perServer.set(c,d+1);let e=!1;return{release:()=>{if(e)return;e=!0,a7.total=Math.max(0,a7.total-1);let a=a7.perServer.get(c)??1;a<=1?a7.perServer.delete(c):a7.perServer.set(c,a-1)}}}var a9=c(731612);let ba=(0,w.h)("backend/services/mcp/tasksProtocol");function bb(){return!0===aB.Gv.ENABLE_MCP_TASKS_CLIENT}function bc(a){let b;return b=ao.get(a),b?.negotiatedModern===!0||b?.bundle!==void 0||a.getProtocolEra?.()==="modern"}let bd=new WeakMap;a9.custom(a=>!!(0,ae.nt)(a)&&!!a&&"object"==typeof a&&("resultType"in a&&"task"===a.resultType?(0,ae.cl)(a,"2026-07-28").ok:(0,ae.RL)(a)));let be=new WeakMap;async function bf(a,b){let c=be.get(a);if(c&&Date.now()-c.at<6e4)return c.byTool.get(b);try{let c=await a.listTools(),d=new Map;for(let a of c.tools??[]){let b=a.execution,c=b?.taskSupport;d.set(a.name,"optional"===c||"required"===c||"forbidden"===c?c:void 0)}return be.set(a,{at:Date.now(),byTool:d}),d.get(b)}catch(a){ba.warn(`Failed to read tool task-support declarations: ${String(a)}`);return}}async function bg(a,b){let c=function(a){let b={supported:!1,supportsToolsCall:!1,supportsCancel:!1,supportsList:!1};if(!a||!bb())return b;if(as(a))return{supported:!0,supportsToolsCall:!0,supportsCancel:!0,supportsList:!1,generation:"2026-07-28"};if(bc(a))return b;let c=bd.get(a);if(c)return c;let d=function(a){try{let b=a.getServerCapabilities?.(),c=b?.tasks;return"object"==typeof c&&null!==c?c:void 0}catch(a){ba.warn("Failed to read server capabilities for Tasks negotiation",a);return}}(a);if(!d)return bd.set(a,b),b;let e=d.requests??void 0,f=e?.tools??void 0,g="object"==typeof f?.call&&null!==f.call,h={generation:"2025-11-25",supported:g,supportsToolsCall:g,supportsCancel:"object"==typeof d.cancel&&null!==d.cancel,supportsList:"object"==typeof d.list&&null!==d.list};return bd.set(a,h),ba.debug(`Negotiated ${ae.MD} support`,h),h}(a);if(!a||!c.supportsToolsCall)return{request:!1,negotiation:c,reason:bb()?"server does not advertise tasks.requests.tools.call":"MCP Tasks client support disabled"};if("2026-07-28"===c.generation)return{request:!0,negotiation:c,reason:"modern Tasks extension negotiated"};let d=await bf(a,b);return"required"!==d&&"optional"!==d?{request:!1,negotiation:c,reason:`tool declares taskSupport=${d??"none"}`}:{request:!0,ttlMs:(await a2()).requestedTtlMs,negotiation:c,reason:`tool declares taskSupport=${d}`}}async function bh(a,b,c,d,e){return a.request({method:b,params:{taskId:c}},d,{...e?.signal?{signal:e.signal}:{},...e?.timeout?{timeout:e.timeout}:{}})}async function bi(a,b,c){let d=as(a);if(d){if(c?.generation&&"2026-07-28"!==c.generation)throw Error("MCP Tasks protocol generation mismatch");let a=(0,ae.Or)(await d.getTask(b,bl(c)));return a.ok&&a.task.taskId!==b?{ok:!1,reason:"task identity mismatch"}:a}if(bc(a)||c?.generation==="2026-07-28")throw Error("Modern MCP Tasks session is unavailable");let e=await bh(a,ae.ao.get,b,$.Sc,c),f=(0,ae.AY)(e);return f.ok?{ok:!0,task:f.task}:{ok:!1,reason:f.reason}}async function bj(a,b,c){let d=as(a);if(d){if(c?.generation&&"2026-07-28"!==c.generation)throw Error("MCP Tasks protocol generation mismatch");if(c?.terminalTask?.taskId===b&&"2026-07-28"===c.terminalTask.generation&&"completed"===c.terminalTask.status&&void 0!==c.terminalTask.result)return c.terminalTask.result;let a=await d.getTask(b,bl(c));if("completed"!==a.status)throw Error("Modern task result is not completed");return a.result}if(bc(a)||c?.generation==="2026-07-28")throw Error("Modern MCP Tasks session is unavailable");return bh(a,ae.ao.result,b,$.BZ,c)}async function bk(a,b,c=1e4,d){try{let e=as(a);if(e){if(d&&"2026-07-28"!==d)return;return await e.cancelTask(b,bl({timeout:c})),{ok:!0,acknowledged:!0}}if(bc(a)||"2026-07-28"===d)return;let f=await bh(a,ae.ao.cancel,b,$.gH,{timeout:c}),g=(0,ae.AY)(f);return g.ok?{ok:!0,task:g.task}:{ok:!1,reason:g.reason}}catch(a){ba.warn(`Best-effort tasks/cancel failed for task ${b}:`,a);return}}function bl(a){return{...a?.signal?{signal:a.signal}:{},context:{...a?.timeout?{requestTimeoutMs:a.timeout}:{},...a?.resetTimeoutOnProgress?{resetTimeoutOnProgress:!0}:{},...a?.onprogress?{onprogress:a.onprogress}:{}}}}async function bm(a,b,c,d={}){let e=as(a);if(!e||"2026-07-28"!==d.generation||!(0,ae.nt)(c)||Object.keys(c).length>32||Object.keys(c).some(a=>!a||a.length>512))throw Error("Invalid modern task input responses or unavailable session");await e.updateTask(b,al.uD.parse(c),bl(d))}var bn=c(651633),bo=c(764897);let bp=(0,w.h)("backend/services/mcp/clientTasks");function bq(a,b,c){return"completed"===a.status?{success:!0,data:c,progressToken:a.taskId}:"failed"===a.status?{success:!1,error:a.error?.message??a.statusMessage??`Task ${a.taskId} failed`,...a.error?{taskError:a.error}:{},errorType:"task-failed",progressToken:a.taskId,toolName:b}:{success:!1,error:a.statusMessage??`Tool '${b}' task ${a.taskId} was cancelled by the server.`,errorType:"cancelled",progressToken:a.taskId,toolName:b}}async function br(a){let b,{client:c,serverName:d,serverIdentity:e,toolName:f,task:g,timeoutMs:h,signal:i,onProgress:j,ownership:k,persist:l}=a,m=a.generation??g.generation??"2025-11-25",n=async()=>{if(await a.assertCurrent?.(),g.generation&&g.generation!==m)throw Error("Remote task protocol generation changed")},o=await a2(),p=Date.now(),q=c.transport,r=(0,ae.uY)(g.pollInterval,{minMs:o.minPollIntervalMs,maxMs:o.maxPollIntervalMs,defaultMs:o.defaultPollIntervalMs}),s=(0,ae.on)(g,p,o.fallbackTtlMs);bp.info(`Tool ${f} on ${d} returned task ${g.taskId} (status=${g.status}, poll=${r}ms, expiresAt=${s??"none"})`),j?.({progress:0,message:`Task ${g.taskId} created (${g.status})`});let t=await a8(d);if(!t)return bp.warn(`Refusing to poll task ${g.taskId}: poll concurrency limit reached for ${d}`),a.supportsCancel&&(await n(),await bk(c,g.taskId,1e4,m)),{success:!1,error:`Too many concurrent MCP tasks are being polled; task ${g.taskId} was not started.`,errorType:"task-poll-limit",progressToken:g.taskId,toolName:f};let u=null;if(l){try{u=await a4({remoteTaskId:g.taskId,serverName:d,serverIdentity:e,toolName:f,ownership:k,status:g.status,generation:m,statusMessage:"2026-07-28"===g.generation?void 0:g.statusMessage,pollIntervalMs:r,...void 0!==s?{expiresAt:s,ttlMs:s-p}:{}})}catch(a){bp.warn("Remote MCP task persistence failed",a)}if(!u){try{a.supportsCancel&&(await n(),await bk(c,g.taskId,1e4,m))}finally{t.release()}return{success:!1,error:"Remote MCP task could not be recorded durably.",errorType:"task-persistence-error",progressToken:g.taskId,toolName:f}}}let v=async a=>{if(!u)return;let b=await a5(u.recordId,a);b&&(u=b)},w=e=>(b||(b=(async()=>(await v({cancelRequestedAt:Date.now(),...e?{diagnostic:e}:{}}),a.supportsCancel)?q&&c.transport!==q?void 0:(await n(),bk(c,g.taskId,1e4,m)):void bp.warn(`Server ${d} does not advertise tasks.cancel; skipping cancellation of ${g.taskId}`))()),b),x=()=>{w().catch(a=>bp.warn("MCP task cancellation failed",a))};i?.addEventListener("abort",x,{once:!0});let y=new AbortController,z=Math.min(h,void 0===s?1/0:Math.max(0,s-p)),A=Number.isFinite(z)&&z<0x7fffffff?setTimeout(()=>y.abort(),z):void 0,B="2026-07-28"===g.generation?as(c)?.signal:void 0,C=AbortSignal.any([y.signal,...i?[i]:[],...B?[B]:[]]),D=new Map;try{let b;if(i?.aborted)return await w(),{success:!1,error:"Remote task caller was cancelled.",errorType:"cancelled",toolName:f};if((0,ae.gJ)(g.status))return await E(g);let e=g,l=0,t=r,u=0;for(;;){let x;if(i?.aborted)return await w(),await v({status:"cancelled"}),{success:!1,error:`Tool '${f}' task ${e.taskId} was cancelled.`,errorType:"cancelled",progressToken:e.taskId,toolName:f};if(B?.aborted||q&&c.transport!==q)return await v({diagnostic:"transport-error",lastPolledAt:Date.now()}),{success:!1,error:`The connection to '${d}' retired while task ${e.taskId} was pending.`,errorType:"task-transport-error",progressToken:e.taskId,toolName:f};let A=Date.now();if(void 0!==s&&A>=s)return await w("expired"),await v({status:"failed",diagnostic:"expired",errorMessage:"Remote MCP task expired before completing."}),{success:!1,error:`Task ${e.taskId} expired before completing.`,errorType:"task-expired",progressToken:e.taskId,toolName:f};if(A-p>=h){await w(),await v({status:"failed",errorMessage:"Caller timeout elapsed while polling the remote MCP task."});let a=Math.round(h/1e3);return{success:!1,error:`Tool execution timed out after ${a} seconds`,errorType:"timeout",timeout:a,statusCode:408,progressToken:e.taskId,toolName:f}}if("2026-07-28"===e.generation&&"input_required"===e.status&&e.inputRequests){b??=Date.now();let g=(0,aC.lx)(d);if(!k.conversationId||g?.conversationId!==k.conversationId||a.originatingInputContext&&g!==a.originatingInputContext)return await F({action:"abandon",error:`Task ${e.taskId} has no matching attended conversation.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"});let h=bt(d,e.taskId,b,o.inputRequiredTimeoutMs);if("abandon"===h.action)return await F(h);let i=as(c);try{if(!i&&!a.handleInputRequest)throw Error("The modern MCP Tasks connection is no longer active");for(let[f,h]of Object.entries(e.inputRequests)){let i=(0,I.createHash)("sha256").update(function a(b){return null===b||"object"!=typeof b?JSON.stringify(b):Array.isArray(b)?`[${b.map(a).join(",")}]`:`{${Object.entries(b).sort(([a],[b])=>a.localeCompare(b)).map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}(h)).digest("hex"),j=D.get(f);if(j&&j!==i)throw Error("MCP task reused an input key for different input");if(j)continue;if(D.size>=32)throw Error("MCP task exceeded the input exchange budget");let l=Math.max(1,o.inputRequiredTimeoutMs-(Date.now()-b)),r=new AbortController,s=setTimeout(()=>r.abort(),l),t=AbortSignal.any([C,r.signal]),u=h.params?._meta,v=al.d7.parse({...h,params:{...h.params,_meta:{...u&&"object"==typeof u&&!Array.isArray(u)?u:{},"io.modelcontextprotocol/related-task":{taskId:e.taskId}}}});try{await n();let h=a.handleInputRequest?await bs(a.handleInputRequest(v,{signal:t,assertCurrent:n}),t):await au(c,v,t,k.conversationId);if(await n(),(0,aC.lx)(d)!==g||g.getUnattended()||q&&c.transport!==q)return await F({action:"abandon",error:`Task ${e.taskId} attended input authority changed.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"});let j=Math.min(l,z-(Date.now()-p),o.inputRequiredTimeoutMs-(Date.now()-b));if(j<=0)throw Error("Task input deadline elapsed");await bm(c,e.taskId,{[f]:h},{generation:m,signal:t,timeout:Math.min(1e4,j)}),await n(),D.set(f,i)}finally{clearTimeout(s),r.abort()}}}catch(a){if(C.aborted)continue;if(Date.now()-b>=o.inputRequiredTimeoutMs)return await F({action:"abandon",error:`Task ${e.taskId} input deadline elapsed.`,errorType:"task-input-timeout",diagnostic:"input-required-unattended"});return await w("protocol-invalid"),await v({status:"failed",diagnostic:"protocol-invalid",errorMessage:"MCP Tasks input exchange failed."}),{success:!1,error:`MCP Tasks input exchange failed: ${String(a)}`,errorType:"task-protocol-invalid",progressToken:e.taskId,toolName:f}}}try{await function(a,b){return b.aborted?Promise.reject(b.reason):new Promise((c,d)=>{let e=()=>{clearTimeout(f),b.removeEventListener("abort",e),d(b.reason)},f=setTimeout(()=>{b.removeEventListener("abort",e),c()},a);b.addEventListener("abort",e,{once:!0})})}(Math.min(t,Math.max(1,z-(Date.now()-p))),C)}catch(a){if(C.aborted)continue;throw a}if(i?.aborted||y.signal.aborted)continue;try{await n(),x=await bi(c,e.taskId,{timeout:Math.max(1,Math.min(4*t+1e4,z-(Date.now()-p))),signal:C,generation:m}),l=0,t=r}catch(a){if(C.aborted)continue;if(l++,await v({diagnostic:"transport-error",lastPolledAt:Date.now()}),l>=o.maxTransientPollFailures)return await w("transport-error"),await v({status:"failed",diagnostic:"transport-error",errorMessage:"2026-07-28"===g.generation?"Remote MCP task polling failed.":`tasks/get failed ${l} times: ${String(a)}`}),{success:!1,error:`Lost contact with '${d}' while polling task ${e.taskId}.`,errorType:"task-transport-error",progressToken:e.taskId,toolName:f};t=(0,ae.uY)(2*t,{minMs:o.minPollIntervalMs,maxMs:o.maxPollIntervalMs,defaultMs:o.defaultPollIntervalMs}),bp.warn(`Transient tasks/get failure ${l}/${o.maxTransientPollFailures} for ${e.taskId}; backing off to ${t}ms`);continue}if(!x.ok)return await w("protocol-invalid"),await v({status:"failed",diagnostic:"protocol-invalid",errorMessage:`Invalid tasks/get result: ${x.reason}`}),{success:!1,error:`Server '${d}' returned an invalid task status: ${x.reason}`,errorType:"task-protocol-invalid",progressToken:e.taskId,toolName:f};if(await n(),x.task.taskId!==g.taskId||(x.task.generation??"2025-11-25")!==m)return await w("protocol-invalid"),await v({status:"failed",diagnostic:"protocol-invalid",errorMessage:"Task identity or protocol generation changed in tasks/get."}),{success:!1,error:"Remote task identity changed.",errorType:"task-protocol-invalid",toolName:f};e=x.task,u++;let G=Date.now()-p;if(await v({status:e.status,statusMessage:"2026-07-28"===e.generation?void 0:e.statusMessage,lastPolledAt:Date.now(),nextPollAt:Date.now()+t,pollCount:u,outstandingInputKeys:(0,bo.Ek)(d,e.taskId)}),j?.({progress:"completed"===e.status?100:Math.min(99,Math.round(G/1e3)),message:`Task ${e.taskId}: ${e.status}${e.statusMessage?` — ${e.statusMessage}`:""}`}),(0,ae.gJ)(e.status))return await E(e);if("input_required"===e.status){b??=Date.now();let a=bt(d,e.taskId,b,o.inputRequiredTimeoutMs);if("abandon"===a.action)return await w(a.diagnostic),await v({status:"failed",diagnostic:a.diagnostic,errorMessage:a.error}),{success:!1,error:a.error,errorType:a.errorType,progressToken:e.taskId,toolName:f}}else b=void 0}}finally{clearTimeout(A),y.abort(),i?.removeEventListener("abort",x),t.release(),(0,bo.w_)(d,g.taskId)}async function E(a){if(await n(),C.throwIfAborted(),"2026-07-28"===a.generation&&("completed"===a.status&&void 0===a.result||"failed"===a.status&&void 0===a.error))try{await n();let b=await bi(c,a.taskId,{signal:C,timeout:Math.max(1,Math.min(6e4,z-(Date.now()-p)))});if(await n(),!b.ok||b.task.taskId!==a.taskId||b.task.generation!==m||b.task.status!==a.status)throw Error("Modern terminal task details are inconsistent");a=b.task}catch{return{success:!1,error:`Task ${a.taskId} terminal details could not be retrieved from '${d}'.`,errorType:"task-result-unavailable",progressToken:a.taskId,toolName:f}}if("completed"!==a.status)return await v({...u?.status===a.status?{}:{status:a.status},statusMessage:"2026-07-28"===a.generation?void 0:a.statusMessage,..."failed"===a.status?{errorMessage:"2026-07-28"===a.generation?"Remote MCP task failed.":a.statusMessage??"Remote MCP task failed."}:{}}),bq(a,f);if("2026-07-28"===a.generation){let b=al.xu.safeParse(a.result);if(!b.success||"complete"!==b.data.resultType)return await v({status:"completed",resultRetrieved:!1,diagnostic:"protocol-invalid",errorMessage:"Remote completed task returned an invalid tools/call result."}),{success:!1,error:`Task ${a.taskId} returned an invalid completed tool result.`,errorType:"task-protocol-invalid",statusCode:502,progressToken:a.taskId,toolName:f};a={...a,result:b.data}}try{await n();let b=await bj(c,a.taskId,{timeout:Math.max(1,Math.min(6e4,z-(Date.now()-p))),signal:C,generation:m,terminalTask:a});if(await n(),C.throwIfAborted(),"2026-07-28"===a.generation&&!b)throw Error("Modern completed task omitted its result");if("2026-07-28"===a.generation){let d=as(c);if(!d?.validateToolResult?.(a.taskId,b)){let a=Math.max(1,Math.min(6e4,z-(Date.now()-p))),d=AbortSignal.any([C,AbortSignal.timeout(a)]),e=(await (0,bn.H7)(c,{signal:d,timeout:a,maxTotalTimeout:a})).tools.find(a=>a.name===f);aA(e)(b)}await n()}return await v({...u?.status==="completed"?{}:{status:"completed"},resultRetrieved:!0}),j?.({progress:100,message:`Task ${a.taskId}: completed`}),bq(a,f,b)}catch(b){if("2026-07-28"===a.generation&&void 0!==ab(b))return await v({...u?.status==="completed"?{}:{status:"completed"},resultRetrieved:!1,diagnostic:"protocol-invalid",errorMessage:"Remote completed task output does not match its tool schema."}),{success:!1,error:"Remote completed task output does not match its tool schema.",errorType:"task-protocol-invalid",statusCode:502,progressToken:a.taskId,toolName:f};return await v({...u?.status==="completed"?{}:{status:"completed"},resultRetrieved:!1,errorMessage:"2026-07-28"===a.generation?"Remote MCP task result could not be retrieved.":`tasks/result failed: ${String(b)}`}),{success:!1,error:`Task ${a.taskId} completed but its result could not be retrieved from '${d}'.`,errorType:"task-result-unavailable",progressToken:a.taskId,toolName:f}}}async function F(a){return await w(a.diagnostic),await v({status:"failed",diagnostic:a.diagnostic,errorMessage:a.error}),{success:!1,error:a.error,errorType:a.errorType,progressToken:g.taskId,toolName:f}}}async function bs(a,b){let c=()=>{},d=new Promise((a,d)=>{c=()=>d(b.reason??new DOMException("Task input cancelled","AbortError")),b.addEventListener("abort",c,{once:!0}),b.aborted&&c()});try{return await Promise.race([a,d])}finally{b.removeEventListener("abort",c)}}function bt(a,b,c,d,e=Date.now()){let f=(0,aC.lx)(a),g=(0,bo.Ly)(a,b);return f?f.getUnattended()?{action:"abandon",error:`Task ${b} on '${a}' requires input, but the run is unattended.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"}:e-c>=d?{action:"abandon",error:`Task ${b} on '${a}' was waiting for input for longer than the configured window (${Math.round(d/1e3)}s)${g?`; ${g.outstanding.size} request(s) unanswered`:""}.`,errorType:"task-input-timeout",diagnostic:"input-required-unattended"}:{action:"wait"}:{action:"abandon",error:`Task ${b} on '${a}' requires input, but no attended run is available to answer it.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"}}var bu=c(238861),bv=c(764360);let bw=(0,w.h)("backend/services/mcp/tools");async function bx(a,b,c="model",d){if(bw.debug("Entering listServerTools method"),!a)return bw.warn(`Server ${b} not connected`),{tools:[],error:"Server not connected"};try{bw.info(`Listing tools for server ${b}`);let e=(0,aH.PR)(a.transport)?{timeout:18e4}:void 0,f=void 0===d?await (0,bn.H7)(a,e):aR(a)?await a.listTools({cursor:d},e):await a.request({method:"tools/list",params:{cursor:d}},$.WT,e),g=f.tools.map(a=>({...a,description:a.description||"",inputSchema:a.inputSchema||{type:"object"}})),h=(0,z.zm)(g,c);return bw.verbose(`Processed tools for ${c} audience:`,h),{tools:h,...void 0===f.nextCursor?{}:{nextCursor:f.nextCursor}}}catch(c){if(c instanceof g.Mr)throw c;bw.warn(`Failed to list tools for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{tools:[],error:a.includes("Connection timeout")?a:`Failed to list tools: ${a}`}}}async function by(a,b,d,e,f,j,k,l="host",m,n,o,p,q){var r;let s=q?(0,aC.lx)(b):void 0;if(bw.debug("Entering callTool method"),!a)return bw.warn(`Server ${b} not found`),{success:!1,error:`Server ${b} not found`,statusCode:404};let t=void 0!==f&&f>0?Math.min(1e3*f,0x7fffffff):0x7fffffff,u=!!(0,B.Ck)(a.transport),v=!!(0,aH.PR)(a.transport),w=!1;try{let f,h,r,x,y=!!o||(0,A.isProtectedExecutionServer)(b);if(y&&await (0,A.assertExecutionToolDispatch)(o,b,l),await (0,B.HR)(a,b),y&&await p?.(),"app"===l||"model"===l){let c=await bx(a,b,"all");if(c.error)return{success:!1,error:`Could not verify MCP App access to tool '${d}' on '${b}': ${c.error}`,errorType:"tool-authorization-list",statusCode:502};let e=(0,z.F)(c.tools,b,d,l);if(!e.allowed)return bw.warn(`Rejected ${l} tool call: ${e.error}`),{success:!1,error:e.error,statusCode:e.statusCode}}if(u&&(0,B.MR)(e),v)try{(0,B.MR)(e)}catch{throw new i.Kq("HOST_POLICY_INVALID")}y||u||v||bw.debug(`Original args for tool ${d}:`,e);let C=y||u||v?e:await (0,ad.resolveGlobalVars)(e),D="object"==typeof C&&null!==C?C:{},E=y?(0,A.normalizeExecutionToolArguments)(o,d,D):(f=new Set,h=0,r=()=>{throw new $.Nh($.O4.InvalidParams,"Tool arguments must be bounded JSON data")},x=(a,b)=>{if(++h>1e4||b>32)return r();if(null===a||"string"==typeof a||"boolean"==typeof a)return a;if("number"==typeof a)return Number.isFinite(a)?a:r();if("object"!=typeof a||f.has(a))return r();f.add(a);try{if(Array.isArray(a))return Array.from({length:a.length},(c,d)=>{let e=Object.getOwnPropertyDescriptor(a,String(d));return e&&"value"in e&&void 0!==e.value?x(e.value,b+1):r()});let c=Object.getPrototypeOf(a);if(c!==Object.prototype&&null!==c)return r();return Object.fromEntries(Object.keys(a).flatMap(c=>{let d=Object.getOwnPropertyDescriptor(a,c);return d&&"value"in d?void 0===d.value?[]:[[c,x(d.value,b+1)]]:r()}))}finally{f.delete(a)}},!D||Array.isArray(D)?r():x(D,0));y||u||v||bw.debug(`Normalized args for tool ${d}:`,E),bw.debug(`Calling tool ${d} with SDK timeout ${t}ms`);let F={timeout:t,resetTimeoutOnProgress:!0,maxTotalTimeout:t,...k?{signal:k}:{},onprogress:a=>{y||(u||v||bw.debug(`Progress for tool ${d}: ${a.progress}${void 0!==a.total?`/${a.total}`:""}${a.message?` — ${a.message}`:""}`),j?.(a))}},G=y?{request:!1,reason:"private synchronous profile"}:await bg(a,d);G.request&&bw.info(`Requesting task-augmented execution of ${d} on ${b} (${G.reason})`),w=G.request&&"2026-07-28"===G.negotiation.generation;let H=y?await (0,A.executionToolRequestMeta)(o,b,d,E):void 0,I=G.request?await a3(b):void 0,J={name:d,arguments:E,...G.request&&"2026-07-28"!==G.negotiation.generation?function(a,b="2025-11-25"){return"2026-07-28"===b?{_meta:{"io.modelcontextprotocol/clientCapabilities":{extensions:{[ae.MD]:{}}}}}:{task:{..."number"==typeof a&&a>0?{ttl:a}:{}}}}(G.ttlMs):{},...H?{_meta:H}:m||n?{_meta:{flujo:{...m?{callerNodeId:m}:{},...n?{ownerScope:n}:{}}}}:{}};y&&await p?.(),await (0,B.HR)(a,b),await (0,g.QO)();let K=G.request&&"2026-07-28"===G.negotiation.generation?as(a):void 0;if(w&&!K)throw Error("Modern MCP Tasks session retired before submission");let L=K?await K.callTool(JSON.parse(JSON.stringify(J)),{...bl(F),expectedConversationId:q}):aR(a)?await a.callTool.call(a,J,F):await a.callTool(J,void 0,F);if(y)return await (0,A.assertExecutionExtensionCurrent)(o),{success:!0,data:(0,A.validateExecutionToolResult)(o,d,L)};let M=(0,ae.Qh)(L,{taskRequested:G.request,generation:G.negotiation?.generation});if("protocol-invalid"===M.kind)return bw.warn(`Server ${b} returned an invalid task result for ${d}: ${M.reason}`),{success:!1,error:`Server '${b}' returned an invalid MCP task result: ${M.reason}`,errorType:"task-protocol-invalid",statusCode:502,toolName:d};if("task"===M.kind){let e=bb(),f=e?I??await a3(b):"unnegotiated",h=async()=>{if(await (0,B.HR)(a,b),await (0,g.QO)(),e){let{mcpService:d}=await Promise.resolve().then(c.bind(c,245698));if("unknown"===f||d.getClient(b)!==a||await a3(b)!==f)throw Error("MCP task server connection identity changed")}if(s&&(0,aC.lx)(b)!==s)throw Error("MCP task originating run is no longer current")},i=await br({client:a,serverName:b,serverIdentity:f,toolName:d,args:E,task:M.task,generation:G.negotiation?.generation,assertCurrent:h,timeoutMs:t,...k?{signal:k}:{},...j?{onProgress:j}:{},ownership:{...q?{conversationId:q}:{},...m?{nodeId:m}:{},...n?{ownerScope:n}:{},source:l},...s?{originatingInputContext:s}:{},persist:e,supportsCancel:G.negotiation.supportsCancel||!G.negotiation.supported});return void 0===i.data?i:{...i,data:(0,bv.iL)(i.data,n)}}return{success:!0,data:(0,bv.iL)(L,n)}}catch(l){if(l instanceof g.Mr)throw l;if(l instanceof i.Kq)return{success:!1,error:l.code,errorType:"mcp-host-consent",statusCode:403};if(l instanceof h.Bk)return{success:!1,error:l.code,errorType:"mcp-isolation",statusCode:"ISOLATION_UNAVAILABLE"===l.code?503:403};if(v)return{success:!1,error:"TRUSTED_HOST_TOOL_FAILED",errorType:"mcp-host-consent",statusCode:502};if(u)return{success:!1,error:"ISOLATED_TOOL_FAILED",errorType:"mcp-isolation",statusCode:502};if(o||(0,A.isProtectedExecutionServer)(b))return{success:!1,error:l instanceof A.ExecutionExtensionError?l.code:"execution_tool_unavailable",statusCode:l instanceof A.ExecutionExtensionError?l.status:503,errorType:"execution-call"};if(w&&!k?.aborted&&l instanceof Error&&"ZodError"===l.name)return{success:!1,error:`Server '${b}' returned an invalid modern MCP Tasks result.`,errorType:"task-protocol-invalid",statusCode:502,toolName:d};bw.warn(`Failed to call tool ${d} on server ${b}:`,l);let c=l instanceof Error?l.message:"Unknown error",e=500;if(k?.aborted)return{success:!1,error:`Tool '${d}' call was cancelled.`,errorType:"cancelled",toolName:d};if(l instanceof an||(r=l)instanceof $.Nh&&r.code===$.O4.RequestTimeout||r instanceof aa.Fp&&r.code===aa.OH.RequestTimeout){let a=Math.round(t/1e3);return bw.warn(`Tool ${d} execution timed out after ${a} seconds`),{success:!1,error:`Tool execution timed out after ${a} seconds`,errorType:"timeout",toolName:d,timeout:a,statusCode:408}}let f=(0,bu.AO)(a)?(0,aM.W2)(l):void 0;if(f){(0,bu.Mi)(b);try{await (0,bu.DK)(a,b,{force:!0})}catch(a){bw.warn(`Failed to refresh mcp-stdio-oauth status after revocation on ${b}:`,a)}return{success:!1,error:f.message?f.message:"External account authorization is required. Open the MCP page to authenticate.",errorType:"stdio-oauth-required",statusCode:428,requiresAuthentication:!0}}if(c.includes("401")||c.includes("Unauthorized")||c.includes("invalid_token")||c.includes("token_expired"))return bw.info(`OAuth authentication error detected for tool ${d} on server ${b}`),{success:!1,error:"OAuth authentication failed or tokens have expired. Please re-authenticate the server.",statusCode:401,requiresAuthentication:!0};(c.includes("404")||c.includes("Not Found"))&&(bw.info(`404 error detected for tool ${d} on server ${b} - may indicate OAuth issues`),e=404,c="Tool endpoint not found (404). This may indicate OAuth authentication issues or the server may not be properly configured.");let j=ab(l);return j?(c=`Failed to call tool: ${c} (Code: ${j.code})`,e=ac(j.code)):c=`Failed to call tool: ${c}`,{success:!1,error:c,statusCode:e,...j?{protocolError:j}:{}}}}async function bz(a,b){let c,d,e=[],f=new Set;for(let g=0;g<1e3;g++){let g=await a(c);if(d??=g,e.push(...b(g)),void 0===g.nextCursor)return{firstPage:d,entries:e};if(f.has(g.nextCursor))throw Error("MCP catalog returned a repeated cursor");f.add(g.nextCursor),c=g.nextCursor}throw Error("MCP catalog exceeded 1000 pages")}async function bA(a,b,c){if(void 0!==b)return a.listResources({cursor:b},c);let{firstPage:d,entries:e}=await bz(b=>a.listResources(void 0===b?void 0:{cursor:b},c),a=>a.resources),{nextCursor:f,...g}=d;return{...g,resources:e}}async function bB(a,b,c){if(void 0!==b)return a.listResourceTemplates({cursor:b},c);let{firstPage:d,entries:e}=await bz(b=>a.listResourceTemplates(void 0===b?void 0:{cursor:b},c),a=>a.resourceTemplates),{nextCursor:f,...g}=d;return{...g,resourceTemplates:e}}async function bC(a,b){let{firstPage:c,entries:d}=await bz(c=>a.listPrompts(void 0===c?void 0:{cursor:c},b),a=>a.prompts),{nextCursor:e,...f}=c;return{...f,prompts:d}}let bD=(0,w.h)("backend/services/mcp/resources");async function bE(a,b,c){if(bD.debug("Entering listServerResources method"),!a)return bD.warn(`Server ${b} not connected`),{resources:[],error:"Server not connected"};try{bD.info(`Listing resources for server ${b}`);let d=await bA(a,c,(0,aH.PR)(a.transport)?{timeout:18e4}:void 0),e=d.resources||[];return bD.verbose("Processed resources:",e),{resources:e,...void 0===d.nextCursor?{}:{nextCursor:d.nextCursor}}}catch(c){if(ab(c)?.code===-32601)return bD.debug(`Server ${b} does not support resources/list`),{resources:[]};bD.warn(`Failed to list resources for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{resources:[],error:a.includes("Connection timeout")?a:`Failed to list resources: ${a}`}}}async function bF(a,b,c){if(bD.debug("Entering listServerResourceTemplates method"),!a)return bD.warn(`Server ${b} not connected`),{resourceTemplates:[],error:"Server not connected"};try{bD.info(`Listing resource templates for server ${b}`);let d=await bB(a,c,(0,aH.PR)(a.transport)?{timeout:18e4}:void 0);return{resourceTemplates:d.resourceTemplates||[],...void 0===d.nextCursor?{}:{nextCursor:d.nextCursor}}}catch(c){if(ab(c)?.code===-32601)return bD.debug(`Server ${b} does not support resources/templates/list`),{resourceTemplates:[]};bD.warn(`Failed to list resource templates for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{resourceTemplates:[],error:a.includes("Connection timeout")?a:`Failed to list resource templates: ${a}`}}}async function bG(a,b,c){if(bD.debug("Entering readResource method"),!a)return bD.warn(`Server ${b} not found`),{success:!1,error:`Server ${b} not found`,statusCode:404};try{let d=await (0,ad.resolveGlobalVars)(c);bD.info(`Reading resource ${d} from server ${b}`);let e=await a.readResource({uri:d});return{success:!0,data:e}}catch(f){bD.warn(`Failed to read resource ${c} on server ${b}:`,f);let a=f instanceof Error?f.message:"Unknown error",d=500,e=ab(f);return e?(a=`Failed to read resource: ${a} (Code: ${e.code})`,-32601===e.code?d=404:-32602===e.code&&(d=400)):a=`Failed to read resource: ${a}`,{success:!1,error:a,statusCode:e?ac(e.code):d,...e?{protocolError:e}:{}}}}let bH=(0,w.h)("backend/services/mcp/prompts");async function bI(a,b){if(bH.debug("Entering listServerPrompts method"),!a)return bH.warn(`Server ${b} not connected`),{prompts:[],error:"Server not connected"};try{return bH.info(`Listing prompts for server ${b}`),{prompts:(await bC(a)).prompts||[]}}catch(c){if(ab(c)?.code===-32601)return bH.debug(`Server ${b} does not support prompts/list`),{prompts:[]};bH.warn(`Failed to list prompts for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{prompts:[],error:a.includes("Connection timeout")?a:`Failed to list prompts: ${a}`}}}async function bJ(a,b,c,d){if(bH.debug("Entering getPrompt method"),!a)return bH.warn(`Server ${b} not found`),{success:!1,error:`Server ${b} not found`,statusCode:404};try{let e;if(d&&Object.keys(d).length>0){let a=await (0,ad.resolveGlobalVars)(d);e="object"==typeof a&&null!==a?a:void 0}bH.info(`Getting prompt ${c} from server ${b}`);let f=await a.getPrompt({name:c,arguments:e});return{success:!0,data:f}}catch(f){bH.warn(`Failed to get prompt ${c} on server ${b}:`,f);let a=f instanceof Error?f.message:"Unknown error",d=500,e=ab(f);return e?(a=`Failed to get prompt: ${a} (Code: ${e.code})`,-32601===e.code?d=404:-32602===e.code&&(d=400)):a=`Failed to get prompt: ${a}`,{success:!1,error:a,statusCode:e?ac(e.code):d,...e?{protocolError:e}:{}}}}var bK=c(257975),bL=c(476427);class bM extends Error{constructor(a){super(`MCP Skills are unavailable: ${a}`),this.name="McpSkillsUnsupportedError",this.reason=a}}function bN(a,b){if(!b||!a)return;let c=a.getServerCapabilities();return(0,E.zT)(c?.extensions?.[E.ET])}function bO(a,b){if(!b)throw new bM("disabled");if(!a)throw new bM("extension-not-negotiated");let c=bN(a,b);if(!c)throw new bM("extension-not-negotiated");return{client:a,capability:c}}async function bP(a){try{return await a()}catch(a){if(ab(a)?.code===-32601)throw new bM("method-not-found");throw a}}async function bQ(a,b,c){let d=bO(a,b);return bP(async()=>await d.client.request({method:"skills/list",params:void 0===c?{}:{cursor:c}},E.lX))}async function bR(a,b,c){let d=bO(a,b),e=(0,E.Bw)(c).normalizedUri;return bP(async()=>{let a=await d.client.request({method:"skills/get",params:{uri:e}},E.Kg);if(a.skill.uri!==e)throw Error("skills/get returned a different skill URI");return a})}async function bS(a,b,c,d){let e=bO(a,b);if(!0!==e.capability.directoryRead)throw new bM("directory-read-not-negotiated");let f=(0,E.sm)(c);return bP(async()=>await e.client.request({method:"resources/directory/read",params:{uri:f,...void 0===d?{}:{cursor:d}}},E.Pd))}async function bT(a,b,c,d){let e=bO(a,b),f=function(a,b){if("dynamic"===a.resources)throw Error("Dynamic MCP Skills cannot be integrity-verified");let c=(0,E.sm)(b),d=a.resources.find(a=>a.uri===c);if(!d)throw Error("Resource is not declared by the held MCP Skill entry");return d}(c,d),g=(await e.client.readResource({uri:f.uri})).contents;if(!Array.isArray(g)||1!==g.length)throw Error("MCP Skill resource read must return exactly one content item");let h=g[0];if(null===h||"object"!=typeof h||Array.isArray(h))throw Error("MCP Skill resource content is malformed");if(void 0!==h.uri&&(0,E.sm)(h.uri)!==f.uri)throw Error("MCP Skill resource read returned a different URI");let i=function(a){let b="string"==typeof a.text;if(b===("string"==typeof a.blob))throw Error("MCP Skill resource must contain exactly one of text or blob");return b?{bytes:Buffer.from(a.text,"utf8"),text:a.text}:{bytes:function(a){if(a.length%4!=0||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(a))throw Error("MCP Skill resource contains invalid base64");return Buffer.from(a,"base64")}(a.blob),blob:a.blob}}(h);if(i.bytes.byteLength!==f.size)throw Error("MCP Skill resource size verification failed");if(`sha256:${(0,I.createHash)("sha256").update(i.bytes).digest("hex")}`!==f.digest)throw Error("MCP Skill resource digest verification failed");return{uri:f.uri,digest:f.digest,size:f.size,..."string"==typeof h.mimeType?{mimeType:h.mimeType}:{},...i,verified:!0}}async function bU(a,b,c,d){if("dynamic"===d.resources)throw Error("Dynamic MCP Skills cannot be integrity-verified");let e=d.resources,f=Array(e.length),g=0,h=async()=>{for(;;){let c=g;if(g+=1,c>=e.length)return;f[c]=await bT(a,b,d,e[c].uri)}};await Promise.all(Array.from({length:Math.min(4,e.length)},()=>h()));let i=f.find(a=>a.uri===d.uri);if(!i||void 0===i.text)throw Error("MCP Skill SKILL.md must be textual content");return!function(a,b){let c,d=a.replace(/\r\n/g,"\n");if(!d.startsWith("---\n"))throw Error("MCP Skill SKILL.md must start with YAML frontmatter");let e=d.indexOf("\n---",4);if(e<0)throw Error("MCP Skill SKILL.md frontmatter is not terminated");let f=d.slice(4,e);try{c=(0,bL.qg)(f)}catch{throw Error("MCP Skill SKILL.md frontmatter is invalid YAML")}if(null===c||"object"!=typeof c||Array.isArray(c)||!(0,bK.isDeepStrictEqual)(c,b.frontmatter))throw Error("MCP Skill SKILL.md frontmatter does not match its advertised entry")}(i.text,d),{identity:{serverName:c,skillUri:d.uri},protocolRevision:E.v$,entry:d,manifest:i,resources:f,verification:"sha256",trust:"untrusted-external-content"}}function bV(){return global.__mcp_skill_approvals??=new Map,global.__mcp_skill_approvals}var bW=c(23052),bX=c(342518),bY=c(224037),bZ=c(47877);let b$="The server destination or transport changed. Re-enter or remove the saved secret headers before testing or saving.";function b_(a){return"streamable"===a.transport||"sse"===a.transport}function b0(a){if(b_(a)&&"string"==typeof a.serverUrl)try{let b=new URL(a.serverUrl);if("https:"!==b.protocol&&"http:"!==b.protocol||b.username||b.password)return;return b.hash="",b.href}catch{return}}function b1(a,b){if(!b||a.transport!==b.transport)return!1;let c=b0(a);return void 0!==c&&c===b0(b)}function b2(a,b){return Object.entries(a??{}).some(([a,c])=>{if(!a)return!1;let{value:d,isSecret:e}=(0,r.at)(c,a),f=b?.[a];if(!e||!(0,r.uh)(d)||void 0===f)return!1;let g=(0,r.at)(f,a).value;return!!g&&!(0,r.uh)(g)})}var b3=c(593330);function b4(a){return"stdio"===a.transport&&(0,b3.G)(a.command,a.args??[])}var b5=c(259241);let b6=(0,w.h)("backend/services/mcp/resourceNotifications"),b7=/^[A-Za-z0-9_-]{1,64}$/;function b8(a,b,c,d){let e=d?.conversationId?.trim();if("model"===c&&"create_ticket_for_human"===b&&e&&b7.test(e)&&a?.transport==="stdio"&&(0,C.AW)(a)?.packageId==="@mario.andreschak/mcp-flujo")return e}function b9(a,b){let c=(0,x.getCurrentWorkspace)();if(c===x.DEFAULT_WORKSPACE)return b;let d=global.__mcp_workspace_registries??=new Map,e=d.get(c);e||(e=new Map,d.set(c,e));let f=e.get(a);return f||(f=b instanceof Set?new Set:new Map,e.set(a,f)),f}function ca(a){return{success:!1,error:a.error,statusCode:a.statusCode,errorType:a.errorType}}void 0===global.__mcp_clients&&(global.__mcp_clients=new Map),void 0===global.__mcp_connecting&&(global.__mcp_connecting=new Set),void 0===global.__mcp_approval_failures&&(global.__mcp_approval_failures=new Map),void 0===global.__mcp_starting_up&&(global.__mcp_starting_up=!0),void 0===global.__mcp_active_transports&&(global.__mcp_active_transports=new Map),void 0===global.__mcp_client_generation&&(global.__mcp_client_generation=new Map),void 0===global.__mcp_tool_schema_hash&&(global.__mcp_tool_schema_hash=new Map);let cb=(0,w.h)("backend/services/mcp/index");function cc(a){let b=a,c=new Set;for(;b&&"object"==typeof b&&!c.has(b);){c.add(b);let a=b.__flujoInnerTransport;if(!a)break;b=a}return b}function cd(a){if("streamable"!==a.transport&&"sse"!==a.transport)return!1;let b=a.headers;return!!b&&Object.entries(b).some(([a,b])=>"authorization"===a.toLowerCase()&&(0,r.at)(b,a).value.trim().length>0)}class ce{get stderrLogs(){return b9("stderrLogs",this.stderrLogsBase)}get approvalFailures(){return b9("approvalFailures",global.__mcp_approval_failures)}get lastConnectionError(){return b9("lastConnectionError",this.lastConnectionErrorBase)}get inFlightConnects(){return b9("inFlightConnects",this.inFlightConnectsBase)}get connectionRetryTimers(){return b9("connectionRetryTimers",this.connectionRetryTimersBase)}get connectionRetryAttempts(){return b9("connectionRetryAttempts",this.connectionRetryAttemptsBase)}get resourceListVersion(){return b9("resourceListVersion",this.resourceListVersionBase)}get pendingResourceUpdates(){return b9("pendingResourceUpdates",this.pendingResourceUpdatesBase)}async clearLegacyInferredOAuthScopesForHeaderAuth(a){try{let b=await this.loadServerConfigs();if(!Array.isArray(b))return;let c=b.findIndex(b=>b.name===a);if(-1===c||"streamable"!==b[c].transport)return;let d=b[c];if(!cd(d)||d.oauthScopes?.length!==1||"read"!==d.oauthScopes[0]||d.oauthClientId||d.oauthClientSecret||d.oauthClientMetadata||d.oauthClientInformation||d.oauthTokens||d.oauthCodeVerifier||d.oauthState||d.authorizationUrl)return;b[c]={...d,oauthScopes:void 0},await (0,g.QO)();let e=await (0,F.saveConfig)(new Map(b.map(a=>[a.name,a])));e.success?cb.info(`Removed stale inferred OAuth scopes from header-authenticated server ${a}`):cb.warn(`Failed to remove stale inferred OAuth scopes from ${a}: ${e.error}`)}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;cb.warn(`Failed to clean inferred OAuth scopes for ${a}: ${b instanceof Error?b.message:String(b)}`)}}get clients(){return b9("clients",global.__mcp_clients)}get connectingServers(){return b9("connectingServers",global.__mcp_connecting)}get activeTransports(){return b9("activeTransports",global.__mcp_active_transports)}get clientGenerations(){return b9("clientGenerations",global.__mcp_client_generation)}get toolSchemaHashes(){return b9("toolSchemaHashes",global.__mcp_tool_schema_hash)}static{this.MAX_STDERR_LOG_ENTRIES=200}appendStderrLog(a,b){let c=this.stderrLogs.get(a)||[];c.push(b),c.length>ce.MAX_STDERR_LOG_ENTRIES&&c.splice(0,c.length-ce.MAX_STDERR_LOG_ENTRIES),this.stderrLogs.set(a,c)}deregisterClient(a){let b=this.clients.get(a);b&&function(a){let b=d.get(a);for(let c of(d.delete(a),b?.values()??[]))c.then(a=>a.close()).catch(()=>{});b?.clear()}(b),this.clients.delete(a),this.activeTransports.delete(a),(0,bu.hj)(a),(0,aO.HW)(a)}onResourceListChanged(a){let b=this.resourceListVersion.get(a)??0;this.resourceListVersion.set(a,b+1),cb.debug(`onResourceListChanged: server=${a} version=${b+1}`)}onResourceUpdated(a,b){let c=this.pendingResourceUpdates.get(a)??new Set;c.add(b),this.pendingResourceUpdates.set(a,c),cb.debug(`onResourceUpdated: server=${a} uri=${b}`)}getResourceListVersion(a){return this.resourceListVersion.get(a)??0}async subscribeToResource(a,b){if(!(0,f.VU)())try{let c=this.getClient(a);if(!c||await e(c,b))return;let d=c.getServerCapabilities?.();if(!d?.resources?.subscribe)return;await c.subscribeResource({uri:b}),cb.debug(`subscribeToResource: server=${a} uri=${b}`)}catch(c){if(c instanceof g.Mr)throw c;cb.debug(`subscribeToResource: ignored error for ${a}/${b}:`,c)}}clearRetryTimer(a){let b=this.connectionRetryTimers.get(a);b&&(clearTimeout(b),this.connectionRetryTimers.delete(a),cb.debug(`Cleared retry timer for server ${a}`))}scheduleConnectionRetry(a,b){this.clearRetryTimer(a);let c=this.connectionRetryAttempts.get(a)||0;if(c>=5){cb.warn(`Maximum retry attempts (5) reached for server ${a}, stopping retries`),this.connectionRetryAttempts.delete(a);return}let d=Math.min(5e3*Math.pow(2,c),3e5);cb.info(`Scheduling connection retry for server ${a} in ${d}ms (attempt ${c+1}/5)`);let e=setTimeout((0,x.bindToCurrentWorkspace)(async()=>{cb.info(`Attempting to reconnect server ${a} (attempt ${c+1}/5)`);let b=await this.getServerConfig(a);if(!b){cb.info(`Server ${a} configuration not found, stopping retry attempts`),this.connectionRetryAttempts.delete(a);return}if(b.disabled){cb.info(`Server ${a} is now disabled, stopping retry attempts`),this.connectionRetryAttempts.delete(a);return}let d=this.getClient(a);if(d)try{await d.ping({timeout:5e3}),cb.info(`Server ${a} is already connected and responsive, cancelling retry`),this.connectionRetryAttempts.delete(a);return}catch(b){cb.warn(`Server ${a} has a registered client but ping failed (${b instanceof Error?b.message:String(b)}); reconnecting from scratch`)}this.connectionRetryAttempts.set(a,c+1);try{let e=d?await this.forceReconnect(a):await this.connectServer(b);if(e.success)cb.info(`Successfully reconnected server ${a} after ${c+1} attempts`),this.connectionRetryAttempts.delete(a);else{if(cb.warn(`Failed to reconnect server ${a}: ${e.error}`),e.requiresAuthentication||e.requiresApproval){cb.info(`Server ${a} needs user action, stopping retry attempts`),this.connectionRetryAttempts.delete(a);return}this.scheduleConnectionRetry(a,b)}}catch(c){if(c instanceof g.Mr||c instanceof aG.McpRuntimeAuthorityRetirementError)throw c;if(j(c))return void this.connectionRetryAttempts.delete(a);cb.error(`Error during retry connection for server ${a}:`,c),this.scheduleConnectionRetry(a,b)}}),d);this.connectionRetryTimers.set(a,e)}isStartingUp(){let a=(0,x.getCurrentWorkspace)();return a===x.DEFAULT_WORKSPACE?!0===global.__mcp_starting_up:global.__mcp_starting_up_by_workspace?.get(a)===!0}setStartingUp(a){let b=(0,x.getCurrentWorkspace)();b===x.DEFAULT_WORKSPACE?global.__mcp_starting_up=a:(global.__mcp_starting_up_by_workspace??=new Map).set(b,a),cb.info(`Backend startup state set to: ${a?"starting":"complete"}`)}getClientGeneration(a){return this.clientGenerations.get(a)??0}setToolSchemaHash(a,b,c){this.toolSchemaHashes.set(`${a}\0${b}`,c)}getToolSchemaHash(a,b){return this.toolSchemaHashes.get(`${a}\0${b}`)}getClient(a){let b=this.clients.get(a);if(b&&(0,bX.wk)(b)){cb.warn(`getClient: client for ${a} has a closed/aborted connection — evicting it`),this.clients.delete(a);return}return cb.debug(`getClient: Looking for client: ${a}`,b?"Found":"Not found"),b}async loadServerConfigs(){cb.debug("loadServerConfigs: Entering method");try{let a=await (0,F.loadServerConfigs)();if(!Array.isArray(a))return cb.warn("loadServerConfigs: Received non-array response",a),a;return cb.debug(`loadServerConfigs: Loaded ${a.length} server configs`),a}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return cb.warn("loadServerConfigs: Failed to load server configs:",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async getServerConfig(a){let b=(0,A.executionProtectedServerConfig)(a);if(b)return b;cb.debug(`getServerConfig: Looking up config for server ${a}`);let c=await this.loadServerConfigs();if(!Array.isArray(c))return cb.warn(`getServerConfig: Failed to load configs for ${a}:`,c.error),null;let d=c.find(b=>b.name===a);return d||(cb.warn(`getServerConfig: Server ${a} not found in configs`),null)}async isServerDisabled(a){let b=await this.getServerConfig(a);return b?.disabled===!0}async connectServer(a,b){if("string"!=typeof a&&!(0,D.Mt)(a.transport))return{success:!1,error:D.ZW,statusCode:400};let c="string"==typeof a?a:a.name;try{if(b){if(await (0,A.assertExecutionExtensionCurrent)(b),c!==(0,A.executionExtensionProtectedServer)(b))throw new A.ExecutionExtensionError("execution_mcp_server_forbidden")}else if((0,A.isProtectedExecutionServer)(c))throw new A.ExecutionExtensionError("trusted_execution_context_required")}catch(a){return{success:!1,error:a instanceof A.ExecutionExtensionError?a.code:"execution_authorization_unavailable",statusCode:a instanceof A.ExecutionExtensionError?a.status:503,errorType:"execution-authorization"}}await (0,g.QO)();try{(0,aG.assertMcpRuntimeAuthorityRetired)(c)}catch(a){if(a instanceof aG.McpRuntimeAuthorityRetirementError)return{success:!1,error:"MCP_AUTHORITY_RETIREMENT_UNCERTAIN",errorType:"mcp-authority-retirement",statusCode:503};throw a}return P(c,async()=>{await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(c);let d=this.getClient(c),e=this.connectServerInternal(a,b).finally(()=>{this.inFlightConnects.delete(c)});this.inFlightConnects.set(c,e);let f=await e;if(f.success){let b=void 0!==d&&this.getClient(c)===d;!function(a,b,c=!1){let d=M(a),e=!c||0===d.generation;e&&(d.generation+=1),d.shutdownReceipt=void 0,d.state="warm",(e||void 0!==b)&&(d.configFingerprint=b),d.retryAttempts=0,d.lastError=void 0,e&&(d.warmSince=Date.now()),d.lastUsedAt=Date.now(),d.generation}(c,this.configFingerprint(a),b)}else{let a=this.activeTransports.has(c)&&!this.clients.has(c);!function(a,b,c=!1){let d=M(a);d.state="error",d.lastError=b,d.connectFailures=Math.min(d.connectFailures+1,Number.MAX_SAFE_INTEGER),c&&(d.handshakeFailures+=1),d.retryAttempts+=1}(c,f.error??"unknown connection failure",a)}return f})}configFingerprint(a){if("string"!=typeof a)return[a.transport,a.command??"",(a.args??[]).join(" "),a.url??"",a.websocketUrl??"",a.rootPath??"",a.disabled?"disabled":"enabled"].join("\0")}async assertProtectedConnectionIntent(a,b){if(await (0,A.assertExecutionExtensionCurrent)(a),b.name!==(0,A.executionExtensionProtectedServer)(a))throw new A.ExecutionExtensionError("execution_mcp_server_forbidden");let c=await this.getServerConfig(b.name);if(!c)throw new A.ExecutionExtensionError("execution_mcp_server_config_missing");(0,A.assertExecutionServerConfig)(c);let d=await (0,aG.resolveConfigHeaders)(c);if((0,A.assertExecutionServerConfig)(d),await (0,A.assertExecutionExtensionCurrent)(a),(0,aG.protectedConfigFingerprint)(d)!==(0,aG.protectedConfigFingerprint)(b))throw new A.ExecutionExtensionError("execution_mcp_server_config_changed")}async connectServerInternal(a,b){let c,d,e,f;if("string"==typeof a){cb.info(`connectServer: Looking up config for server ${a}`);let b=await this.getServerConfig(a);if(!b)return cb.warn(`connectServer: Server ${a} not found in configs`),{success:!1,error:`Server configuration for "${a}" not found. The server may have been deleted or not properly configured.`};c=b}else c=a;let i="string"==typeof a?c:await this.getServerConfig(c.name),l=i??c;if(!(0,D.Mt)(c.transport)||!(0,D.Mt)(l.transport))return{success:!1,error:D.ZW,statusCode:400};if((i??c).disabled)return cb.info(`connectServer: Server ${c.name} is disabled — refusing to create a client/transport`),this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name),{success:!1,error:`Server '${c.name}' is disabled. Enable it on the MCP page to use it.`};let m=(0,k.A)();cb.info(`connectServer: Starting connection for server ${c.name} [RequestID: ${m}]`),this.connectingServers.add(c.name);try{this.stderrLogs.set(c.name,[]),b&&await (0,A.assertExecutionExtensionCurrent)(b),c=await (0,aG.resolveConfigHeaders)(c),await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(c.name);let a=(0,A.isProtectedExecutionServer)(c.name);a&&(0,A.assertExecutionServerConfig)(c),b&&await this.assertProtectedConnectionIntent(b,c);let i=!a&&await aQ()&&"websocket"!==c.transport,j=await (0,bW.SZ)(c);b&&await this.assertProtectedConnectionIntent(b,c);let k={enableRuntimeBroker:!0,isolateRuntimeHome:j},l=this.clients.get(c.name);if(l){let{needsNewClient:d,reason:e}=(0,aG.shouldRecreateClient)(l,c,i,k),f=a&&(0,aG.clientProtectedConfigFingerprint)(l)!==(0,aG.protectedConfigFingerprint)(c);if(!d&&!f)return b&&await this.assertProtectedConnectionIntent(b,c),await (0,B.HR)(l,c.name,c),cb.info(`connectServer: Server ${c.name} is already connected`),this.lastConnectionError.delete(c.name),this.approvalFailures.delete(c.name),this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name),await this.clearLegacyInferredOAuthScopesForHeaderAuth(c.name),{success:!0};cb.info(`connectServer: Existing client for ${c.name} is stale (${f?"protected config identity changed":e}), recreating`),this.deregisterClient(c.name);try{let a=await (0,aG.safelyCloseClient)(l,c.name,c);if(a.isolation?.cleanupOutcome==="unknown")throw new h.Bk("ISOLATION_UNAVAILABLE")}catch(a){if(a instanceof aG.McpRuntimeAuthorityRetirementError||a instanceof g.Mr||a instanceof h.Bk)throw a;cb.debug(`connectServer: error closing stale client for ${c.name}: ${a instanceof Error?a.message:String(a)}`)}l=void 0}b&&await this.assertProtectedConnectionIntent(b,c),await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(c.name),l=i?aS(c,(0,x.bindToCurrentWorkspace)(()=>{this.getClient(c.name)===l&&this.onResourceListChanged(c.name)})):(0,aG.createNewClient)(c),b&&(f=l);let m=i?aU(c,k):(0,aG.createTransport)(c,k);if(d=l,e=m,"stdio"===c.transport&&(0,bu.hH)(l,c.name,i?aV.get(m):void 0),i){let a=l.setNotificationHandler?.bind(l);a&&(a("notifications/resources/list_changed",(0,x.bindToCurrentWorkspace)(()=>{this.getClient(c.name)===l&&this.onResourceListChanged(c.name)})),a("notifications/resources/updated",(0,x.bindToCurrentWorkspace)(a=>{let b=a?.params?.uri;b&&this.getClient(c.name)===l&&this.onResourceUpdated(c.name,b)})))}else!function(a,b,c,d){try{a.setNotificationHandler($.hh,a=>{b6.debug(`resourceListChanged notification received for ${b}`),c(b)})}catch(a){b6.warn(`registerResourceNotificationHandlers: failed to register list_changed for ${b}`,a)}if(d)try{a.setNotificationHandler($.cL,a=>{let c=a.params?.uri;c&&(b6.debug(`resourceUpdated notification received for ${b} uri=${c}`),d(b,c))})}catch(a){b6.warn(`registerResourceNotificationHandlers: failed to register resource_updated for ${b}`,a)}}(l,c.name,(0,x.bindToCurrentWorkspace)(a=>this.onResourceListChanged(a)),(0,x.bindToCurrentWorkspace)((a,b)=>this.onResourceUpdated(a,b)));let n=cc(m).stderr;if(n&&"function"==typeof n.on){let a=c.name;n.on("data",(0,x.bindToCurrentWorkspace)(b=>{let c=b.toString();cb.warn(`stderr: [${a}]: ${c}`),this.appendStderrLog(a,c)}))}if(m.onclose=(0,x.bindToCurrentWorkspace)(()=>{this.activeTransports.get(c.name)!==m?cb.debug(`connectServer: ignoring close event from a stale/deregistered transport for ${c.name}`):(cb.warn(`connectServer: Connection closed for server ${c.name}`),this.deregisterClient(c.name),this.getServerConfig(c.name).then(a=>{!a||a.disabled?cb.info(`Server ${c.name} is now disabled, skipping reconnection logic`):(cb.info(`Connection closed for enabled server ${c.name}, scheduling reconnection`),this.scheduleConnectionRetry(c.name,a))}).catch(a=>{cb.warn(`Error checking server config for ${c.name} during onclose:`,a)}))}),m.onerror=(0,x.bindToCurrentWorkspace)(a=>{if((0,bX.lO)(a))return void cb.debug(`connectServer: transient SSE stream disconnect for ${c.name} (self-healing, ignored): ${a instanceof Error?a.message:String(a)}`);if(this.activeTransports.get(c.name)!==m)return void cb.debug(`connectServer: ignoring error event from a stale/deregistered transport for ${c.name}`);if(cb.error(`connectServer: Transport error for server ${c.name}:`),a instanceof Error){cb.error(`Error name: ${a.name}`),cb.error(`Error message: ${a.message}`),cb.error(`Error stack: ${a.stack}`);let b=a.code;void 0!==b&&cb.error(`Error code: ${b}`),cb.error(`Error chain: ${(0,bX.jf)(a)}`)}else if(a&&"object"==typeof a){let b=Object.getPrototypeOf(a),c="string"==typeof b?.constructor?.name?b.constructor.name:"Unknown";cb.error(`Error type: ${typeof a}`),cb.error(`Error constructor: ${c}`);let d=Object.getOwnPropertyNames(a);d.length>0?(cb.error(`Error properties: ${d.join(", ")}`),d.forEach(b=>{try{let c=a[b];cb.error(` ${b}: ${"function"==typeof c?"[Function]":JSON.stringify(c)}`)}catch(a){cb.error(` ${b}: [Unable to serialize: ${a}]`)}})):cb.error("Error object has no enumerable properties");try{let b=JSON.stringify(a);cb.error(`JSON stringified error: ${b}`)}catch(a){cb.error(`Cannot JSON stringify error: ${a}`)}}else cb.error(`Error value: ${String(a)} (type: ${typeof a})`);this.appendStderrLog(c.name,`Transport error: ${(0,bX.jf)(a)}`),this.deregisterClient(c.name),this.getServerConfig(c.name).then(a=>{!a||a.disabled?cb.info(`Server ${c.name} is now disabled, skipping reconnection after transport error`):(cb.info(`Transport error for enabled server ${c.name}, scheduling reconnection`),this.scheduleConnectionRetry(c.name,a))}).catch(a=>{cb.warn(`Error checking server config for ${c.name} during onerror:`,a)})}),await (0,g.QO)(),b&&await this.assertProtectedConnectionIntent(b,c),await l.connect(m),b&&await this.assertProtectedConnectionIntent(b,c),"stdio"===c.transport&&i&&aW(m),this.clients.set(c.name,l),this.activeTransports.set(c.name,m),this.clientGenerations.set(c.name,this.getClientGeneration(c.name)+1),b&&await this.assertProtectedConnectionIntent(b,c),(0,bu.AO)(l))try{await (0,bu.DK)(l,c.name,{force:!0})}catch(a){if(a instanceof g.Mr)throw a;cb.warn(`mcp-stdio-oauth readiness probe failed for ${c.name}:`,a)}b&&await this.assertProtectedConnectionIntent(b,c),this.lastConnectionError.delete(c.name),this.approvalFailures.delete(c.name),this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name),await this.clearLegacyInferredOAuthScopesForHeaderAuth(c.name),b&&await this.assertProtectedConnectionIntent(b,c);let o=function(a){if(aR(a))try{return a.getNegotiatedProtocolVersion()}catch{return}}(l);return cb.info(`connectServer: Successfully connected to ${c.name}`+(o?` (beta SDK, negotiated MCP protocol ${o})`:"")),{success:!0}}catch(q){let a;if(q instanceof g.Mr){let a=[];if(d&&e){this.deregisterClient(c.name);try{d.transport===e?await (0,aG.safelyCloseClient)(d,c.name,c):await e.close()}catch(b){a.push(b)}let b=e.__flujoRetireRuntimeAuthority;try{b?.()}catch(b){a.push(b)}}if(a.length)throw new g.Mr(AggregateError([q,...a],"MCP denied startup cleanup failed"));throw q}if(q instanceof aG.McpRuntimeAuthorityRetirementError)return{success:!1,error:"MCP_AUTHORITY_RETIREMENT_UNCERTAIN",errorType:"mcp-authority-retirement",statusCode:503};if(b&&f){this.clients.get(c.name)===f&&this.deregisterClient(c.name);try{await (0,aG.safelyCloseClient)(f,c.name,c)}catch{}}if(q instanceof A.ExecutionExtensionError)return{success:!1,error:q.code,statusCode:q.status,errorType:"execution-authorization"};if((0,A.isProtectedExecutionServer)(c.name))return{success:!1,error:"execution_mcp_connect_failed",statusCode:503,errorType:"execution-authorization"};"stdio"===c.transport&&(0,aO.HW)(c.name);let h=j(q);if(h){this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name);let a=this.approvalFailures.get(c.name);return a?.errorCode!==h.errorCode&&cb.warn(`MCP server ${c.name}: ${h.error}`),this.approvalFailures.set(c.name,h),this.lastConnectionError.set(c.name,h.error),h}this.approvalFailures.delete(c.name),cb.error(`connectServer: Failed to connect to server ${c.name}:`,q);let i=q instanceof Error?q.message:String(q),k=(0,bX.uP)(q),m=(0,bX.Ah)(q),n=cd(l);if(m&&!n&&("streamable"===c.transport||"sse"===c.transport)){let b=c.serverUrl;b&&(a=(await (0,b5.n)(b)).oauthCapable)}if(k||a){if(cb.info(`OAuth authentication error detected for server ${c.name}: ${i}`),"streamable"===c.transport&&a){let a=c;if(!a.oauthScopes||0===a.oauthScopes.length){cb.info(`Dynamically enabling OAuth for server ${c.name} after capability confirmation`);try{let b={...a,oauthScopes:["read"]},d=await this.loadServerConfigs();if(Array.isArray(d)){let a=d.findIndex(a=>a.name===c.name);-1!==a&&(d[a]=b,await (0,F.saveConfig)(new Map(d.map(a=>[a.name,a]))),cb.info(`Updated config for ${c.name} to enable OAuth`))}}catch(a){if(a instanceof g.Mr)throw a;cb.warn(`Failed to update config for ${c.name} to enable OAuth:`,a)}}}return{success:!1,error:"OAuth authentication failed or tokens have expired. Please re-authenticate.",requiresAuthentication:!0,oauthCapable:!0}}if(m)return{success:!1,error:i,requiresAuthentication:!0,oauthCapable:a};let o=this.stderrLogs.get(c.name)||[],p=(0,bX.ox)(q,c,o);return this.lastConnectionError.set(c.name,p),{success:!1,error:p}}finally{this.connectingServers.delete(c.name)}}async testConnection(a,b,c){if(!(0,D.Mt)(a.transport))return{success:!1,error:D.ZW,statusCode:400};cb.info(`testConnection: Testing connection to ${a.name||"(unnamed)"} via ${a.transport} transport`);let d=a=>{try{b?.(a)}catch{}},e=[],f=v(u(a,a)),h=f.stream(),i=new p.StringDecoder("utf8"),k=!1,l=a=>{a&&(e.push(a),d({type:"stderr",data:a}))},m=()=>{k||(k=!0,l(h.write(i.end())),l(h.end()))},n=null,o=null;try{var q;let b,e=a,j=c?.storedName||a.name;if(("streamable"===a.transport||"sse"===a.transport)&&j){let b=await this.loadServerConfigs(),c=Array.isArray(b)?b.find(a=>a.name===j):void 0,f=c?.headers,g=a.headers;if(b2(g,f)&&!b1(a,c))return d({type:"result",success:!1,error:b$}),{success:!1,error:b$,statusCode:400};e={...a,headers:(0,r.x0)(g,f)}}let p=await (0,aG.resolveConfigHeaders)(e);await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(p.name),h=(f=v(u(e,p))).stream();let s=!(0,A.isProtectedExecutionServer)(p.name)&&await aQ()&&"websocket"!==p.transport,t={isolateRuntimeHome:await (0,bW.SZ)(p)};n=s?aS(p):(0,aG.createNewClient)(p),o=s?aU(p,t):(0,aG.createTransport)(p,t),"stdio"===p.transport&&(0,bu.hH)(n,p.name,s?(q=o,aV.get(q)):void 0);let w=cc(o).stderr;w&&"function"==typeof w.on&&w.on("data",a=>{k||l(h.write(i.write(a)))}),o.onerror=a=>{k||l(f.redact(`Transport error: ${(0,bX.jf)(a)}
28
+ </system_instructions>`:"",l.text].filter(Boolean).join("\n\n")),n=!1,o=!1,p=!1,q=Q,r=V.length;try{if(await (0,j.C)(a,{adapter:"antigravity-cli",operation:"agy --input-format stream-json --output-format stream-json",request:{model:k.name,prompt:m,toolDispatchBudget:L,stepBudget:8*L+16,tools:ao.map(({name:a,description:b,inputSchema:c})=>({name:a,description:b,inputSchema:c}))},wireMessages:[...aB]},()=>(0,ct.qN)({runtime:h,model:k.name,prompt:m,signal:b.signal,timeoutMs:M-Date.now(),onStarted:async()=>{av=!0,await g?.acknowledge(),g=void 0},onEvent:a=>{if(c)throw c;if(t?.()){S=!0,b?.abort();return}if("init"===a.event){if(i||"flujo"!==a.init.agent||"request-review"!==a.init.permission_mode)throw Error("Antigravity CLI returned an unexpected invocation configuration.");i=a.conversation_id}else if("step_update"===a.event){let c=a.step_update;if(c.conversation_id!==i)throw Error("Antigravity CLI changed conversation identity.");if(R.add(`${i}:${c.step_index}`),R.size>8*L+16)throw Error("Antigravity CLI exceeded the FLUJO execution step budget.");if("error_message"===c.step_type&&(n=!0),"tool"===c.step_type){if(!["call_mcp_tool","list_resources","read_resource","manage_task"].includes(c.tool_name??""))throw Error("Antigravity CLI attempted an unbound native tool.");if("manage_task"!==c.tool_name){let a=c.tool_info?.parameters;if(a?.ServerName!=="flujo"||"call_mcp_tool"===c.tool_name&&!ao.some(b=>b.name===a.ToolName))throw Error("Antigravity CLI attempted an unbound MCP tool.")}o&&(as(),o=!1)}if("agent_response"!==c.step_type)return;if(af.length&&!ah){ag=!0,b?.abort();return}if(e)throw Error("Antigravity CLI emitted text after its final result.");let d=c.text_delta??"";p||=!!d.trim(),ap+=d,o||=!!d,d&&w?.({messageId:aq,contentDelta:d})}else if("result"===a.event){if(e)throw Error("Antigravity CLI emitted duplicate final results.");if(a.result.conversation_id!==i)throw Error("Antigravity CLI changed conversation identity.");if(e=a.result,p||=!!e.response.trim(),!ap&&e.response)ap=e.response,w?.({messageId:aq,contentDelta:e.response});else if(e.response&&e.response!==ap){if(!e.response.startsWith(ap))throw Error("Antigravity CLI final text disagreed with its stream.");let a=e.response.slice(ap.length);ap+=a,a&&w?.({messageId:aq,contentDelta:a})}aA.push(Object.fromEntries(Object.entries(a.result.usage??{}).filter(([a,b])=>["total_tokens","input_tokens","output_tokens","thinking_tokens","cache_read_tokens"].includes(a)&&"number"==typeof b&&Number.isSafeInteger(b)&&b>=0)));let b=(0,cu.e)(a.result.usage);if(!b){ay=!1;return}ax.prompt_tokens+=b.prompt_tokens,ax.completion_tokens+=b.completion_tokens,ax.total_tokens+=b.total_tokens,ax.prompt_tokens_details.cached_tokens+=b.prompt_tokens_details?.cached_tokens??0,b.completion_tokens_details?.reasoning_tokens===void 0?delete ax.completion_tokens_details:ax.completion_tokens_details&&(ax.completion_tokens_details.reasoning_tokens+=b.completion_tokens_details.reasoning_tokens),Number.isSafeInteger(ax.total_tokens)||(ay=!1),"SUCCESS"!==a.result.status&&(n=!0)}}})),am&&e)throw Error("Antigravity CLI ended before pending FLUJO tools completed.");if(!e||"SUCCESS"!==e.status||n)throw Error(`Antigravity CLI failed to complete a valid response. Check model access and your Google account login or Gemini API key.${(0,ct.Qv)(e?.error??"")}`);if(!p&&Q===q&&!af.length&&!S)throw Error("Antigravity CLI failed to complete a valid response: no assistant output or tool dispatch was returned.")}catch(a){if(f||N.abort(),e||(ay=!1),c)throw c;if(K.signal.aborted)throw(0,ct.L5)();if(ah&&!S||!f&&!ag&&!af.length&&!S)throw a}finally{av=!1,await an(),as(),at("tool cancelled")}if(!f)break;for(let a of(g=f,f=void 0,aB.push(...V.slice(r)),g.messages))ab(a),aB.push(a);await g.beforeSend()}}}finally{N.abort(),await aw.stop(),y?.removeEventListener("abort",U),b?.abort(),await an(),g?.requeue(),f?.requeue(),as(),at("tool cancelled");try{await i?.close()}finally{await h?.cleanup()}}if(c)throw c;if(K.signal.aborted)throw(0,ct.L5)();let aC=af.length?af.map(a=>({id:`call_${(0,l.A)()}`,type:"function",function:{name:a.name,arguments:JSON.stringify(a.args)}})):void 0;return aC&&aa({role:"assistant",content:null,tool_calls:aC}),{completion:{id:`antigravity_cli_${(0,l.A)()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:k.name,choices:[{index:0,finish_reason:aC?"tool_calls":"stop",logprobs:null,message:{role:"assistant",content:ar||null,refusal:null,...aC?{tool_calls:aC}:{}}}],...ay&&aA.length?{usage:ax}:{},...aA.length?{flujo_antigravity_usage:{reported:aA,complete:ay}}:{}},transcript:V,liveMessageId:e,contextUsage:null}}}var cz=c(963376);let cA=(0,h.h)("backend/services/model/adapters/openrouterMediaAdapter");function cB(a,b){let c=(a?.trim()||"https://openrouter.ai/api/v1").replace(/\/+$/,"");return new URL(`${c}/${b}`)}function cC(a){for(let b=a.length-1;b>=0;b--){let c=a[b];if("user"!==c.role)continue;let d=(0,m.Xz)(c.content).trim();if(d)return d}throw Error("OpenRouter media generation requires a non-empty user prompt.")}function cD(a){for(let b=a.length-1;b>=0;b--){let c=a[b];if("user"!==c.role)continue;let d=(0,m.dl)(c.content);if(d.length>0)return d[d.length-1].url}}function cE(a,b,c,d){return{contextUsage:null,media:c,completion:{id:b,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a,choices:[{index:0,finish_reason:"stop",logprobs:null,message:{role:"assistant",content:null,refusal:null}}],...d?{usage:d}:{}}}}function cF(a){if("string"==typeof a)return a;if(a&&"object"==typeof a){if("string"==typeof a.message)return a.message;let b=a.error&&"object"==typeof a.error?a.error:void 0;if("string"==typeof b?.message)return b.message}try{return JSON.stringify(a)??String(a)}catch{return String(a)}}let cG=/no (endpoint|allowed providers)|not found|unknown route/i;async function cH(a,b,c){let d=a.statusText||`HTTP ${a.status}`;try{let b=await a.json();d=cF(b.error??b)||d}catch{try{d=(await a.text()).trim()||d}catch{}}return 404===a.status||cG.test(d)?Error(`OpenRouter has no dedicated /${c} route for "${b.name}". This model is served by /chat/completions — remove "image"/"video" from its output modalities or re-sync the model from the OpenRouter catalogue (Models → Fetch models). (provider detail: ${d})`):Error(`OpenRouter media API returned ${a.status}: ${d}`)}async function cI(a,b,c){let d=Date.now();try{let e=await fetch(a,{...b,signal:c.signal});return c.onProviderAttempt?.({attempt:1,durationMs:Math.max(0,Date.now()-d),outcome:"completed",result:{status:e.status}}),e}catch(a){throw c.onProviderAttempt?.({attempt:1,durationMs:Math.max(0,Date.now()-d),outcome:c.signal?.aborted?"cancelled":"error",error:a}),a}}function cJ(a){return{Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json",...(0,i.lj)("openrouter")??{}}}async function cK(a){let b=cB(a.model.baseUrl,"images"),c=cC(a.messages),d=cD(a.messages),e={model:a.model.name,prompt:c,...d?{input_references:[{type:"image_url",image_url:{url:d}}]}:{}},f=await (0,j.C)(a,{adapter:"openrouter-media",operation:"POST /images",request:e},()=>cI(b,{method:"POST",headers:cJ(a),body:JSON.stringify(e)},a));if(!f.ok)throw await cH(f,a.model,"images");let g=await f.json();if(g.error)throw Error(`OpenRouter image generation failed: ${cF(g.error)}`);let h=(g.data??[]).flatMap(a=>{let b=a.media_type??a.mime_type??"image/png";return a.b64_json?[{type:"image",data:a.b64_json,mimeType:b}]:a.url?[{type:"image",url:a.url,mimeType:b}]:[]});if(0===h.length)throw Error("OpenRouter image generation completed without an image.");return cE(a.model.name,`openrouter-image-${(0,l.A)()}`,h,g.usage)}async function cL(a,b,c){let d,e=function(a,b){if(!a.id)throw Error("OpenRouter video job completed without a job id.");return new URL(`videos/${encodeURIComponent(a.id)}/content?index=0`,`${b.origin}/api/v1/`)}(a,b),f=a.unsigned_urls?.[0]?new URL(a.unsigned_urls[0],b):e;if(!["http:","https:"].includes(f.protocol))throw Error("OpenRouter returned an unsupported video download URL.");for(let a of f.href===e.href?[f]:[f,e])try{var g;let e=await cI(a,{headers:(g=c.apiKey,a.origin===b.origin?{Authorization:`Bearer ${g}`}:void 0)},c);if(!e.ok){d=await cH(e,c.model,"videos");continue}let f=Buffer.from(await e.arrayBuffer());if(0===f.length){d=Error("OpenRouter returned an empty video file.");continue}let h=e.headers.get("content-type")?.split(";")[0].trim()||"video/mp4";return{type:"video",data:f.toString("base64"),mimeType:h}}catch(a){d=a}throw d instanceof Error?d:Error("Failed to download the generated OpenRouter video.")}async function cM(a){let b=cB(a.model.baseUrl,"videos"),c=cC(a.messages),d=cD(a.messages),e={model:a.model.name,prompt:c,...d?{frame_images:[{type:"image_url",image_url:{url:d},frame_type:"first_frame"}]}:{}},f=await (0,j.C)(a,{adapter:"openrouter-media",operation:"POST /videos",request:e},()=>cI(b,{method:"POST",headers:cJ(a),body:JSON.stringify(e)},a));if(!f.ok)throw await cH(f,a.model,"videos");let g=await f.json();if(g.error&&"completed"!==g.status)throw Error(`OpenRouter video generation failed: ${cF(g.error)}`);let h=function(a,b){let c=a.id?new URL(`videos/${encodeURIComponent(a.id)}`,`${b.origin}/api/v1/`):void 0,d=a.polling_url?new URL(a.polling_url,b):c;if(!d||d.origin!==b.origin)throw Error("OpenRouter returned an invalid cross-origin video polling URL.");return d}(g,b);for(;!["completed","failed","cancelled","expired"].includes(g.status??"pending");){let b=await cI(h,{headers:cJ(a)},a);if(!b.ok)throw await cH(b,a.model,"videos");["completed","failed","cancelled","expired"].includes((g=await b.json()).status??"pending")||await function(a){return a?.aborted?Promise.reject(new DOMException("Aborted","AbortError")):new Promise((b,c)=>{let d=()=>{clearTimeout(e),a?.removeEventListener("abort",d),c(new DOMException("Aborted","AbortError"))},e=setTimeout(()=>{a?.removeEventListener("abort",d),b()},5e3);a?.addEventListener("abort",d,{once:!0})})}(a.signal)}if("completed"!==g.status)throw Error(`OpenRouter video generation ${g.status??"failed"}: ${cF(g.error??"Unknown provider error")}`);let i=await cL(g,b,a);return cE(a.model.name,g.generation_id??g.id??`openrouter-video-${(0,l.A)()}`,[i])}class cN{async createCompletion(a){await (0,p.assertExecutionExtensionConcreteAdapter)(a.executionExtensionContext,a.model,"openrouter-media");let b=(0,cz.P)(a.model);if("videos"===b.kind)return cM(a);if("images"===b.kind)return cK(a);throw Error(`OpenRouter media adapter selected for a model without a dedicated media route (${b.reason}).`)}async createStreamCompletion(a){await (0,p.assertExecutionExtensionConcreteAdapter)(a.executionExtensionContext,a.model,"openrouter-media");let b=`stream_${(0,l.A)()}`,c="videos"===(0,cz.P)(a.model).kind;return a.onModelDelta?.({messageId:b,contentDelta:c?"Generating video…":"Generating image…"}),cA.debug("Started OpenRouter dedicated media generation",{model:a.model.name,output:c?"video":"image"}),{...await this.createCompletion(a),liveMessageId:b}}}var cO=c(521200),cP=c(792802);function cQ(a){let b=a.createCompletion.bind(a);if(a.createCompletion=a=>{if(a.readOnlyAssessment)throw Error("This adapter does not support read-only assessment.");return b(a)},a.createStreamCompletion){let b=a.createStreamCompletion.bind(a);a.createStreamCompletion=a=>{if(a.readOnlyAssessment)throw Error("This adapter does not support read-only assessment.");return b(a)}}return a}function cR(a,b){return(0,d.bn)(function(a,b){let c=(0,cP.N)(a);if((0,p.assertOwnerCredentialAdapterRoute)(a,c),b&&c!==b)throw new p.ExecutionExtensionError("execution_single_attempt_adapter_unsupported");switch(c){case"fallback-policy":return cQ(new cO.EK(cR));case"openrouter-media":return cQ(new cN);case"azure":return new U;case"openai-responses":return new G.Sk;case"openrouter-agent":return cQ(new T);case"anthropic":return new ad;case"gemini":return new at;case"claude-cli":return cQ(new bC);case"codex-cli":return cQ(new cr);case"antigravity-cli":return cQ(new cy);default:return new F}}(a,b))}function cS(a){if(a.fallbackPolicy)return{adapterId:"fallback-policy",endpoint:"ordered model adapters",reason:"Routes through saved models in priority order."};let b=(0,cz.P)(a);if(b.useMediaRoute)return{adapterId:"openrouter-media",endpoint:"videos"===b.kind?"/videos":"/images",reason:b.reason};switch((0,e.resolveModelAdapter)(a.provider,a.adapter)){case"azure":return{adapterId:"azure",endpoint:"/openai/deployments/{deployment}/chat/completions",reason:b.reason};case"openai-responses":return{adapterId:"openai-responses",endpoint:"/responses",reason:b.reason};case"openrouter-agent":return{adapterId:"openrouter-agent",endpoint:"/responses (Agent SDK)",reason:b.reason};case"anthropic":return{adapterId:"anthropic",endpoint:"native SDK",reason:b.reason};case"gemini":return{adapterId:"gemini",endpoint:"native SDK",reason:b.reason};case"claude-cli":return{adapterId:"claude-cli",endpoint:"local CLI",reason:b.reason};case"codex-cli":return{adapterId:"codex-cli",endpoint:"local CLI",reason:b.reason};case"antigravity-cli":return{adapterId:"antigravity-cli",endpoint:"local CLI",reason:b.reason};default:return{adapterId:"openai",endpoint:"/chat/completions",reason:b.reason}}}},219010:(a,b,c)=>{"use strict";let d;c.d(b,{QB:()=>S,eY:()=>W,$t:()=>U});var e=c(455511),f=c(629021),g=c(333873),h=c.n(g),i=c(328354),j=c(74075),k=c(332199),l=c(257975),m=c(12303);function n(a,b,c){if(!a||"object"!=typeof a||Array.isArray(a)||"archiveVersion,conversationId,dispatchId,outcome,version"!==Object.keys(a).sort().join(",")||1!==a.version||2!==a.archiveVersion||a.conversationId!==b||a.dispatchId!==c||!["completed","error","cancelled"].includes(String(a.outcome)))throw Error("Invalid model-turn outcome record");return a}var o=c(700404),p=c(189663),q=c(492093),r=c(680739),s=c(584297);c(377824);let t=Object.freeze({concurrentReads:4,compressedSnapshotBytes:0x2000000,decodedSnapshotBytes:0x4000000,mediaBytes:0x2000000,jsonAllocationBytes:0x8000000,jsonHeapHeadroomBytes:0x4000000});class u extends Error{constructor(a,b){super(b),this.code=a,this.name="ModelTurnArchiveReadError",this.status="MODEL_TURN_ARCHIVE_READ_BUSY"===a?429:413}}let v=globalThis,w=v.__flujoModelTurnArchiveReads??={active:0,rejected:0};w.allocated??=0;let x=v.__flujoModelTurnArchiveAllocationScope??=new s.AsyncLocalStorage;async function y(a,b){if(b?.throwIfAborted(),w.active>=t.concurrentReads)throw w.rejected=Math.min(Number.MAX_SAFE_INTEGER,w.rejected+1),new u("MODEL_TURN_ARCHIVE_READ_BUSY","Model-turn archive inspection is busy. Retry after another archive read finishes.");w.active+=1;let c={bytes:0};try{let d=await x.run(c,a);return b?.throwIfAborted(),d}finally{w.allocated-=c.bytes,c.bytes=0,w.active-=1}}var z=c(927910),A=c(277725);let B=a=>32===a||9===a||10===a||13===a,C=a=>a>=48&&a<=57,D=()=>new u("MODEL_TURN_ARCHIVE_READ_LIMIT","Legacy model-turn outcome exceeds archive limits. The persisted archive is unchanged.");class E extends z.Transform{constructor(a,b){super({highWaterMark:65536}),this.identity=b,this.utf8=new i.TextDecoder("utf-8",{fatal:!0}),this.frames=[],this.metadata=new Map,this.stringKey=!1,this.escape=!1,this.unicode=0,this.numberState="",this.literal="",this.literalOffset=0,this.started=!1,this.ended=!1,this.entrySeen=!1,this.decodedBytes=0,this.replacement=void 0===a?void 0:Buffer.from(JSON.stringify(a))}invalid(){throw SyntaxError("Invalid legacy model-turn JSON.")}appendMetadata(a){this.metadataBytes&&(this.metadataBytes.length>=2048&&this.invalid(),this.metadataBytes.push(a))}_transform(a,b,c){try{if(this.decodedBytes+=a.length,this.decodedBytes>t.decodedSnapshotBytes)throw D();this.utf8.decode(a,{stream:!0});let b=0,d=c=>{void 0===this.suppressedAt&&c>b&&this.push(a.subarray(b,c)),b=c},e=a=>{let c=this.frames.at(-1);c&&"value"===c.state||this.invalid(),this.metadataKey&&(this.metadataBytes||this.invalid(),this.metadata.set(this.metadataKey,JSON.parse(Buffer.from(this.metadataBytes).toString("utf8"))),this.metadataKey=void 0,this.metadataBytes=void 0),c.state="comma",this.suppressedAt===this.frames.length&&(this.push(this.replacement),this.suppressedAt=void 0,b=a)},f=a=>{let b=this.frames.at(-1);this.identity&&b?.key&&(b.root&&"version"===b.key||b.entry&&["id","conversationId","archiveVersion","outcome"].includes(b.key))&&(this.metadataKey=b.root?"version":b.key,this.metadataBytes=[]),this.replacement&&b?.entry&&"outcome"===b.key&&(d(a),this.suppressedAt=this.frames.length,b.outcome=!0)};for(let b=0;b<a.length;b++){let c=a[b];if(this.metadataBytes&&"number"!==this.lex&&this.appendMetadata(c),"string"===this.lex){if(this.keyBytes&&(this.keyBytes.length<512?this.keyBytes.push(c):this.keyBytes=void 0),this.unicode)c>=48&&c<=57||c>=65&&c<=70||c>=97&&c<=102||this.invalid(),this.unicode--;else if(this.escape)this.escape=!1,117===c?this.unicode=4:[34,92,47,98,102,110,114,116].includes(c)||this.invalid();else if(92===c)this.escape=!0;else if(34===c){if(this.lex=void 0,this.stringKey){let a=this.frames.at(-1);a.key=this.keyBytes?JSON.parse(Buffer.from(this.keyBytes).toString("utf8")):void 0,a.fields++,a.state="colon"}else e(b+1);this.keyBytes=void 0}else c<32&&this.invalid();continue}if("literal"===this.lex){c!==this.literal.charCodeAt(this.literalOffset++)&&this.invalid(),this.literalOffset===this.literal.length&&(this.lex=void 0,e(b+1));continue}if("number"===this.lex){let a=this.numberState;if(("sign"===a||"integer"===a)&&C(c)){this.appendMetadata(c),this.numberState="sign"===a&&48===c?"zero":"integer";continue}if(("integer"===a||"zero"===a)&&46===c){this.appendMetadata(c),this.numberState="dot";continue}if(("dot"===a||"fraction"===a)&&C(c)){this.appendMetadata(c),this.numberState="fraction";continue}if(["integer","zero","fraction"].includes(a)&&(101===c||69===c)){this.appendMetadata(c),this.numberState="exponent";continue}if("exponent"===a&&(43===c||45===c)){this.appendMetadata(c),this.numberState="exponentSign";continue}if(["exponent","exponentSign","exponentDigits"].includes(a)&&C(c)){this.appendMetadata(c),this.numberState="exponentDigits";continue}["integer","zero","fraction","exponentDigits"].includes(a)||this.invalid(),this.lex=void 0,e(b)}if(B(c))continue;if(this.ended&&this.invalid(),!this.started){123!==c&&this.invalid(),this.started=!0,this.frames.push({object:!0,root:!0,entry:!1,state:"keyEnd",fields:0,outcome:!1});continue}let g=this.frames.at(-1);if(("keyEnd"===g.state||"key"===g.state)&&34===c){this.lex="string",this.stringKey=!0,this.keyBytes=[34];continue}if("colon"===g.state&&58===c){g.state="value";continue}let h=g.object?125:93;if(c===h&&["keyEnd","valueEnd","comma"].includes(g.state)){this.replacement&&g.entry&&!g.outcome&&(d(b),this.push(Buffer.concat([Buffer.from(`${g.fields?",":""}"outcome":`),this.replacement]))),this.frames.pop(),this.frames.length?e(b+1):this.ended=!0;continue}if("comma"===g.state&&44===c){g.state=g.object?"key":"value",g.key=void 0;continue}if(["value","valueEnd"].includes(g.state)||this.invalid(),g.state="value",f(b),this.appendMetadata(c),123===c||91===c){this.metadataKey&&this.invalid();let a=g.root&&"entry"===g.key;if(a&&123!==c&&this.invalid(),a&&(this.entrySeen=!0),a&&this.identity)for(let a of["id","conversationId","archiveVersion","outcome"])this.metadata.delete(a);if(this.frames.length>=65536)throw D();this.frames.push({object:123===c,root:!1,entry:a,state:123===c?"keyEnd":"valueEnd",fields:0,outcome:!1})}else g.root&&"entry"===g.key&&this.invalid(),34===c?(this.lex="string",this.stringKey=!1):45===c||C(c)?(this.lex="number",this.numberState=45===c?"sign":48===c?"zero":"integer"):116===c||102===c||110===c?(this.lex="literal",this.literal=116===c?"true":102===c?"false":"null",this.literalOffset=1):this.invalid()}d(a.length),c()}catch(a){c(a)}}_flush(a){try{if(this.utf8.decode(),(!this.ended||!this.entrySeen||this.lex||this.frames.length||void 0!==this.suppressedAt)&&this.invalid(),this.identity&&(this.metadata.get("version")!==this.identity.version||this.metadata.get("archiveVersion")!==this.identity.version||this.metadata.get("id")!==this.identity.dispatchId||this.metadata.get("conversationId")!==this.identity.conversationId||!["running","completed","error","cancelled"].includes(String(this.metadata.get("outcome")))||2===this.identity.version&&"running"!==this.metadata.get("outcome")))throw Error("Invalid model-turn snapshot identity.");a()}catch(b){a(b)}}}async function F(a,b){let c=await f.promises.open(a,f.constants.O_RDONLY|f.constants.O_NONBLOCK),d=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`,g=!1;try{let e=await c.stat();if(!e.isFile())throw Error("Model-turn archive is not a regular file.");if(!Number.isSafeInteger(e.size)||e.size<0||e.size>t.compressedSnapshotBytes)throw D();let h=async function*(){let a=0;for(;a<=e.size;){let b=Buffer.alloc(Math.min(65536,e.size+1-a)),{bytesRead:d}=await c.read(b,0,b.length,a);if(!d)break;if((a+=d)>e.size)throw Error("Model-turn archive changed during inspection. Retry the read.");yield b.subarray(0,d)}if(a!==e.size)throw Error("Model-turn archive changed during inspection. Retry the read.")},i=a=>{let b=0;return new z.Transform({highWaterMark:65536,transform(c,d,e){e((b+=c.length)>a?D():void 0,c)}})};await (0,q.qy)(),await (0,A.pipeline)(z.Readable.from(h()),(0,j.createGunzip)({chunkSize:65536}),new E(b),i(t.decodedSnapshotBytes),(0,j.createGzip)({chunkSize:65536}),i(t.compressedSnapshotBytes),(0,f.createWriteStream)(d,{flags:"wx",highWaterMark:65536})),await c.close(),g=!0,await (0,q.qy)(),await f.promises.rename(d,a)}finally{g||await c.close(),await f.promises.rm(d,{force:!0}).catch(()=>void 0)}}z.Transform;let G=(0,i.promisify)(j.gzip),H=(0,i.promisify)(j.gunzip),I=/^[A-Za-z0-9_-]+$/,J=a=>d??h().join((0,p.getWorkspaceDataDir)(a),"db","model-turns");function K(a,b){if(!I.test(a))throw Error(`Unsafe ${b}`)}function L(a,b){return K(a,"conversation id"),h().join(J(b),a)}function M(a,b,c=2,d){return K(b,"dispatch id"),h().join(L(a,d),`${b}${2===c?".v2":""}.json.gz`)}function N(a,b,c){return K(b,"dispatch id"),h().join(L(a,c),`${b}.outcome.json`)}function O(a){if(!a)return;for(let b of["mimeType","mime_type","media_type"]){let c=Object.getOwnPropertyDescriptor(a,b)?.value;if("string"==typeof c&&c.includes("/"))return c}let b=Object.getOwnPropertyDescriptor(a,"format")?.value;if("string"==typeof b){let a=b.toLowerCase();if(["wav","mp3","flac","m4a","aac","ogg"].includes(a))return`audio/${"mp3"===a?"mpeg":a}`}}async function P(a,b,c,d,f,g){let h=(0,e.createHash)("sha256").update(d).digest("hex"),i=(0,e.randomUUID)();return a.writes.set(h,d),a.media.push({id:i,parameterPath:b,kind:(0,o.X)(c),mimeType:c,byteLength:d.byteLength,sha256:h,encoding:f,...g?{filename:g}:{}}),{__flujoArchivedMedia:{id:i,mimeType:c,byteLength:d.byteLength,sha256:h,encoding:f}}}async function Q(a,b,c,d,e="",f=new WeakSet){if(null==a||"number"==typeof a||"boolean"==typeof a)return a;if("string"==typeof a){let f=function(a){let b=/^data:([^;,]+)?(?:;[^,]*)?;base64,([A-Za-z0-9+/=\r\n]+)$/i.exec(a);if(b)try{return{mimeType:b[1]||"application/octet-stream",data:Buffer.from(b[2].replace(/\s/g,""),"base64")}}catch{return}}(a);if(f)return P(c,b,f.mimeType,f.data,"data-url");if(function(a,b){if(!b||!["data","file_data"].includes(a))return!1;let c=Object.getOwnPropertyDescriptor(b,"type")?.value;return"base64"===c||"input_audio"===c||"inline_data"===c||"inlineData"===c||!!O(b)}(e,d))try{let e=Buffer.from(a.replace(/\s/g,""),"base64");if(e.byteLength>0){let a=d?Object.getOwnPropertyDescriptor(d,"filename")?.value:void 0;return P(c,b,O(d)??"application/octet-stream",e,"base64","string"==typeof a?a:void 0)}}catch{}if(!/^https?:\/\//i.test(a))return a;try{let b=new URL(a);for(let a of(b.username&&(b.username="[redacted]"),b.password&&(b.password="[redacted]"),[...b.searchParams.keys()]))/(token|key|signature|credential|auth|secret|password)/i.test(a)&&b.searchParams.set(a,"[redacted]");return b.toString()}catch{return a}}if("bigint"==typeof a)return a.toString();if("function"==typeof a)return"[function omitted]";if("object"!=typeof a)return String(a);if((0,k.JE)(a))return(0,m.AM)(a,!0),a;if(l.types.isProxy(a))throw new m.Yt("MODEL_TURN_ARCHIVE_MEMORY_LIMIT");if(f.has(a))return"[circular]";f.add(a);try{if((0,m.Sr)(a))try{let g=(0,k.xv)(a,(0,m.$K)());if((0,m.AM)(g,!0),(0,k.JE)(g))return g;return await Q(g,b,c,d,e,f)}catch(a){if(a instanceof m.Yt)throw a;return"[schema could not be serialized]"}if(Array.isArray(a)){let d=[];for(let e=0;e<a.length;e++){let g=Object.getOwnPropertyDescriptor(a,String(e));if(g&&!("value"in g))throw new m.Yt("MODEL_TURN_ARCHIVE_MEMORY_LIMIT");d.push(await Q(g?.value,`${b}[${e}]`,c,void 0,String(e),f))}return d}if(!(0,m.Ev)(a))return"[object omitted]";let g={};for(let d in a){let e=Object.getOwnPropertyDescriptor(a,d);if(!e)continue;let i=(0,m.aG)(d);if(void 0!==i){g[d]=i;continue}if(!("value"in e))throw new m.Yt("MODEL_TURN_ARCHIVE_MEMORY_LIMIT");let j=e.value;if("path"===d&&Object.getOwnPropertyDescriptor(a,"type")?.value==="local_image"&&"string"==typeof j)try{g[d]=await P(c,`${b}.${d}`,{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".wav":"audio/wav",".mp3":"audio/mpeg",".m4a":"audio/mp4",".mp4":"video/mp4",".webm":"video/webm",".pdf":"application/pdf"}[h().extname(j).toLowerCase()]??"application/octet-stream",await (0,m.i6)(j),"file",h().basename(j));continue}catch(a){if(a instanceof m.Yt)throw a}g[d]=await Q(j,`${b}.${d}`,c,a,d,f)}return g}finally{f.delete(a)}}async function R(a,b,c=!1){await f.promises.mkdir(h().dirname(a),{recursive:!0});let d=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`;try{let e,g=await f.promises.open(d,"wx",c?384:438);try{await g.writeFile(b),c&&await g.sync()}catch(a){throw e=a,a}finally{await (0,m.o$)(g,e)}await f.promises.rename(d,a)}catch(a){throw a instanceof m.Yt&&"MODEL_TURN_ARCHIVE_WRITE_CLEANUP"===a.code||await f.promises.rm(d,{force:!0}).catch(()=>void 0),a}if(c)try{let b=await f.promises.open(h().dirname(a),"r");try{await b.sync()}finally{await (0,m.o$)(b)}}catch(a){if(a instanceof m.Yt)throw a}}function S(a,b){let c=a.id||a.durableContext?.executionAuthority||a.durableContext?.executionExtensionContext||a.durableContext?.personaAttribution?void 0:a.writeAdmission,d={canonicalMessages:a.canonicalMessages,genericWire:a.genericWire,sdkRequest:a.sdkRequest,modelInput:a.modelInput,visualCompaction:a.visualCompaction};return(0,m.Xy)(d,()=>(0,q.NU)(()=>(0,r.Gi)(a.durableContext??{},()=>(c?.signal?.throwIfAborted(),(0,m.AM)(d),T(b?b():a)))),a.schemaProjectionPolicy??"legacy-unbounded",c)}async function T(a){let b=a.id??(0,e.randomUUID)();if(K(b,"dispatch id"),a.id)try{throw await f.promises.access(M(a.conversationId,b)),Error("Native dispatch archive already exists; query the original invocation.")}catch(a){if("ENOENT"!==a.code)throw a}let c={conversationId:a.conversationId,media:[],writes:new Map},[d,g,i]=await (0,m.Cy)([Q(a.canonicalMessages,"canonicalMessages",c),Q(a.genericWire,"genericWire",c),Q(a.sdkRequest,"sdkRequest",c)]),j={id:b,conversationId:a.conversationId,runId:a.runId,node:{nodeId:a.nodeId,nodeName:a.nodeName},modelId:a.modelId,modelName:a.modelName,adapter:a.adapter,operation:a.operation,timestamp:Date.now(),outcome:"running",attempt:a.attempt,inputMode:a.modelInput?.inputMode,canonicalMessageCount:a.canonicalMessages.length,wireMessageCount:a.genericWire.length,mediaCount:c.media.length,archiveVersion:2},k={version:2,entry:j,canonicalMessages:d,genericWire:g,sdkRequest:i,media:c.media,provenance:a.modelInput?.provenance,counts:a.modelInput?.counts,visualCompaction:a.visualCompaction,contextCompaction:a.modelInput?.contextCompaction};(0,m.AM)(k,!0),await (0,m.Cy)([...c.writes.entries()].map(async([b,c])=>{let d=function(a,b){if(!/^[a-f0-9]{64}$/.test(b))throw Error("Unsafe media hash");return h().join(L(a),"media",b)}(a.conversationId,b);try{await f.promises.access(d)}catch{await R(d,c,!!a.id)}}));let l=await G(Buffer.from(JSON.stringify(k),"utf8"));return await R(M(a.conversationId,b),l,!!a.id),j}function U(a,b,c,d={}){return(0,q.NU)(()=>(0,r.Gi)(d,()=>V(a,b,c)))}async function V(a,b,c){let d=!0;try{await f.promises.access(M(a,b))}catch(a){if("ENOENT"!==a.code)throw a;d=!1}if(d){let d=n({version:1,archiveVersion:2,conversationId:a,dispatchId:b,outcome:c},a,b),e=Buffer.from(JSON.stringify(d),"utf8");if(e.length>1024)throw Error("Model-turn outcome exceeds byte limit");await R(N(a,b),e);return}let e=M(a,b,1);await y(()=>F(e,c))}async function W(a,b,c,d){return y(async()=>{let e;for(let b of(d?.throwIfAborted(),[J(c),L(a,c)])){let a=await f.promises.lstat(b);if(!a.isDirectory()||a.isSymbolicLink())throw Error("Native model-turn archive directory is unsafe.")}let g=2;try{e=await X(M(a,b,2,c),8388608,d)}catch(f){if("ENOENT"!==f.code)throw f;g=1,e=await X(M(a,b,1,c),8388608,d)}let h=JSON.parse((await H(e,{maxOutputLength:0x2000000})).toString("utf8"));if(d?.throwIfAborted(),h.version!==g||h.entry?.archiveVersion!==g||h.entry.id!==b||h.entry.conversationId!==a||!["running","completed","error","cancelled"].includes(h.entry.outcome)||2===g&&"running"!==h.entry.outcome)throw Error("Invalid native model-turn snapshot");if(2===g){let e;try{e=await X(N(a,b,c),1024,d)}catch(a){if("ENOENT"!==a.code)throw a}e&&(h.entry.outcome=n(JSON.parse(e.toString("utf8")),a,b).outcome)}return h},d)}async function X(a,b,c){c?.throwIfAborted();let d=await f.promises.open(a,f.constants.O_RDONLY|(f.constants.O_NOFOLLOW||0)|(f.constants.O_NONBLOCK||0));try{let e=await d.stat({bigint:!0}),g=await f.promises.lstat(a,{bigint:!0});if(!e.isFile()||e.nlink!==BigInt(1)||e.size<BigInt(1)||e.size>BigInt(b)||!g.isFile()||g.isSymbolicLink()||g.nlink!==BigInt(1)||g.dev!==e.dev||g.ino!==e.ino||g.size!==e.size)throw Error("Native model-turn archive changed.");let h=Buffer.alloc(Number(e.size)+1),i=0;for(;i<h.length;){c?.throwIfAborted();let a=await d.read(h,i,h.length-i,i);if(!a.bytesRead)break;i+=a.bytesRead}if(BigInt(i)!==e.size)throw Error("Native model-turn archive changed.");let j=await d.stat({bigint:!0}),k=await f.promises.lstat(a,{bigint:!0});if(!j.isFile()||j.nlink!==BigInt(1)||j.size!==e.size||j.mtimeNs!==e.mtimeNs||j.ctimeNs!==e.ctimeNs||!k.isFile()||k.isSymbolicLink()||k.nlink!==BigInt(1)||k.dev!==e.dev||k.ino!==e.ino||k.size!==e.size||k.mtimeNs!==e.mtimeNs||k.ctimeNs!==e.ctimeNs)throw Error("Native model-turn archive changed.");return c?.throwIfAborted(),h.subarray(0,i)}finally{await d.close()}}},224037:(a,b,c)=>{"use strict";c.d(b,{GN:()=>l,Rs:()=>j,Tt:()=>k,eS:()=>n,hO:()=>i,nB:()=>h,yg:()=>m});var d=c(43521),e=c(122134),f=c(137106);let g=(0,d.h)("backend/services/model/encryption");async function h(a){g.debug("setEncryptionKey: Entering method"),g.warn("setEncryptionKey: This function is deprecated. Use initializeDefaultEncryption or initializeEncryption from secure.ts instead.");try{return{success:await (0,f.hO)()}}catch(a){return g.warn("setEncryptionKey: Failed to set encryption key:",a),{success:!1,error:a instanceof Error?a.message:"Failed to set encryption key"}}}async function i(){g.debug("initializeDefaultEncryption: Entering method");try{let a=await (0,f.hO)();return a?g.info("initializeDefaultEncryption: Default encryption initialized successfully"):g.error("initializeDefaultEncryption: Failed to initialize default encryption"),a}catch(a){return g.error("initializeDefaultEncryption: Failed to initialize default encryption:",a),!1}}async function j(a){g.debug("encryptApiKey: Entering method");try{if(!a||""===a.trim())return g.warn("encryptApiKey: Empty API key provided"),"";if(!await m()&&(g.warn("encryptApiKey: Encryption is not configured, initializing default encryption"),!await i()))throw Error("Could not initialize credential encryption");let b=await (0,f.pF)(a);if(!b)throw Error("Could not encrypt credential");return`encrypted:${b}`}catch(a){throw g.error("encryptApiKey: Credential was not saved because encryption failed"),Error("Credential encryption failed. Unlock this workspace and retry; the previous credential has been retained.",{cause:a})}}async function k(a){g.debug("decryptApiKey: Entering method");try{if(a&&a.startsWith("${global:"))return(await (0,e.resolveGlobalVars)({key:a})).key;if(a&&a.startsWith("encrypted_failed:"))return a.substring(17);let b=a?.startsWith("encrypted:")?a.substring(10):a;return await (0,f.Do)(b)}catch(a){return g.warn("decryptApiKey: Failed to decrypt API key:",a),null}}async function l(a){g.debug("resolveAndDecryptApiKey: Entering method");try{return await (0,e.G)(a)}catch(a){return g.warn("resolveAndDecryptApiKey: Failed to resolve or decrypt API key:",a),null}}async function m(){g.debug("isEncryptionConfigured: Entering method");try{return await (0,f.Gz)()}catch(a){return g.warn("isEncryptionConfigured: Failed to check encryption status:",a),!1}}async function n(){g.debug("isUserEncryptionEnabled: Entering method");try{return await (0,f.eS)()}catch(a){return g.warn("isUserEncryptionEnabled: Failed to check user encryption status:",a),!1}}},225088:(a,b,c)=>{"use strict";c.d(b,{iY:()=>g,p0:()=>f,p7:()=>e});let d=new WeakSet;function e(a){if(!a||"object"!=typeof a||!a.root||"function"!=typeof a.publish||"function"!=typeof a.acknowledgeSdkOutcome||"function"!=typeof a.acknowledgeLive||"function"!=typeof a.acknowledgeTerminalReady)throw Error("Native invocation session hook is incomplete.");let b=Object.freeze({...a});return d.add(b),b}function f(a){if(!a||"object"!=typeof a||!d.has(a))throw Error("Native invocation session hook must be an in-process capability.")}function g(a,b,c){let d;if(Buffer.byteLength(JSON.stringify(a),"utf8")>16384)throw Error("Native session descriptor exceeds the host ledger envelope bound.");let e=function a(b){if(b&&"object"==typeof b&&!Object.isFrozen(b)){for(let c of Object.values(b))a(c);Object.freeze(b)}return b}(structuredClone(a)),f=new Set,g=0,h="prepared",i=!1,j=new Promise(a=>{d=a}),k=(a,b)=>{"sdk-outcome"!==a&&(h=a);let c=Object.freeze({invocationId:e.receipt.invocationId,sequence:++g,kind:a,...b?{outcome:b}:{}});for(let a of f)try{a(c)}catch{}};return{session:Object.freeze({descriptor:e,signal:b,phase:()=>h,cancel:()=>{i||c()},subscribe:a=>(f.add(a),()=>{f.delete(a)}),waitTerminal:()=>j}),emit:k,settle:a=>{i||(i=!0,k(a.state),d(a),f.clear())}}}},225335:(a,b,c)=>{"use strict";c.d(b,{F7:()=>g,lx:()=>i,mR:()=>h});var d=c(189663);let e=globalThis,f=e.__flujoElicitationContexts??(e.__flujoElicitationContexts=new Map);function g(a,b){f.set((0,d.workspaceCacheKey)(a),b)}function h(a){f.delete((0,d.workspaceCacheKey)(a))}function i(a){return f.get((0,d.workspaceCacheKey)(a))}},229126:(a,b,c)=>{"use strict";c.d(b,{P:()=>d,e:()=>f});class d{constructor(a,b=4194304){this.onEvent=a,this.maxRecordBytes=b,this.pending=""}push(a){let b;for(this.pending+=a;(b=this.pending.indexOf("\n"))>=0;)this.record(this.pending.slice(0,b)),this.pending=this.pending.slice(b+1);if(Buffer.byteLength(this.pending)>this.maxRecordBytes)throw Error("Antigravity CLI output record exceeded its limit.")}finish(){this.pending.trim()&&this.record(this.pending),this.pending=""}record(a){let b;if(a.trim()){if(Buffer.byteLength(a)>this.maxRecordBytes)throw Error("Antigravity CLI output record exceeded its limit.");try{b=JSON.parse(a)}catch{throw Error("Antigravity CLI returned malformed stream JSON.")}if(!b||"object"!=typeof b)throw Error("Antigravity CLI returned an unsupported stream event.");if("init"===b.event){if("string"!=typeof b.conversation_id||!b.init||!Array.isArray(b.init.tools)||!b.init.tools.every(a=>"string"==typeof a)||"string"!=typeof b.init.cwd||"string"!=typeof b.init.permission_mode)throw Error("Antigravity CLI returned an invalid init event.")}else if("step_update"===b.event){let a=b.step_update;if(!a||"string"!=typeof a.conversation_id||!Number.isSafeInteger(a.step_index)||a.step_index<0||"string"!=typeof a.state||"string"!=typeof a.step_type||void 0!==a.text_delta&&"string"!=typeof a.text_delta)throw Error("Antigravity CLI returned an invalid step event.")}else if("result"===b.event){let a=b.result;if(!a||"string"!=typeof a.conversation_id||"string"!=typeof a.response||!["SUCCESS","ERROR","CANCELED","INTERRUPTED","INVALID","WAITING","RUNNING"].includes(a.status))throw Error("Antigravity CLI returned an invalid result event.")}else throw Error("Antigravity CLI returned an unsupported stream event.");this.onEvent(b)}}}function e(a){return"number"==typeof a&&Number.isFinite(a)&&a>=0?Math.floor(a):0}function f(a){if(!a||!Number.isSafeInteger(a.input_tokens)||a.input_tokens<0||!Number.isSafeInteger(a.output_tokens)||a.output_tokens<0||!Number.isSafeInteger(a.cache_read_tokens)||a.cache_read_tokens<0)return;let b=e(a?.cache_read_tokens),c=e(a?.input_tokens)+b,d=e(a?.output_tokens);if(Number.isSafeInteger(c)&&Number.isSafeInteger(c+d))return{prompt_tokens:c,completion_tokens:d,total_tokens:c+d,prompt_tokens_details:{cached_tokens:b},...Number.isSafeInteger(a.thinking_tokens)&&a.thinking_tokens>=0?{completion_tokens_details:{reasoning_tokens:Math.min(d,a.thinking_tokens)}}:{}}}},230076:(a,b,c)=>{"use strict";let d;c.d(b,{M3:()=>B,or:()=>A});var e=c(629021),f=c(333873),g=c.n(f),h=c(43521),i=c(403409),j=c(189663),k=c(304927),l=c(320108);let m={enabled:!0,maxValueBytes:65536,maxKeysPerScope:512,maxScopeBytes:8388608},n=(0,h.h)("backend/services/kvStore"),o=/^[A-Za-z0-9_-]{1,64}$/;function p(a){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe kv scope id: ${JSON.stringify(a)}`)}function q(a){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe kv key name: ${JSON.stringify(a)}`)}let r=a=>g().join(d??g().join((0,j.getWorkspaceDataDir)(),"db","kv-store"),a),s=a=>g().join(r(a),"index.json"),t=new Map;async function u(a){let b,c=(0,j.workspaceCacheKey)("kv-settings"),d=t.get(c);if(!a?.fresh&&d&&Date.now()-d.at<3e4)return d.value;try{let a=await (0,k.loadItem)(l.Zg.KV_STORE_SETTINGS,m);b={...m,...a}}catch(a){n.warn("Failed to load kv-store settings; using defaults",a),b=m}return t.set(c,{value:b,at:Date.now()}),b}let v=global.__flujo_kv_store??(global.__flujo_kv_store=new Map),w=a=>(0,j.workspaceCacheKey)("kv",a);async function x(a){let b=(0,i.VU)();if(b){let c=b.kvBoards??={};return c[a]??=await (0,i.bQ)(`kv:${a}`,()=>y(a)),c[a]}return y(a)}async function y(a){let b=v.get(w(a));if(b)return b;let c=[];try{let b=await e.promises.readFile(s(a),"utf-8");if(b.trim().length>0){let a=JSON.parse(b);Array.isArray(a)&&(c=a)}}catch(b){"ENOENT"!==b.code&&n.error(`Failed to read kv index for scope ${a}; treating as empty`,b)}return v.set(w(a),c),c}async function z(a,b){return(0,k.l_)(`kv-store/${a}`,async()=>{let c=await x(a),{next:d,result:f}=b(c),g=(0,i.VU)();return g?(g.kvBoards??={})[a]=d:d!==c&&(v.set(w(a),d),await e.promises.mkdir(r(a),{recursive:!0}),await (0,k.Zf)(s(a),JSON.stringify(d,null,2))),f})}async function A(a,b,c,d){p(a),q(b);let e=await u({fresh:!0});if(!e.enabled)return{skipped:"disabled"};let f="string"==typeof c?c:String(c??""),g=Buffer.byteLength(f,"utf8");return g>e.maxValueBytes?(n.warn(`kv write skipped (size ${g} > cap ${e.maxValueBytes})`,{scope:a,name:b}),{skipped:"size-cap"}):z(a,c=>{let h=c.find(a=>a.name===b);if(!h&&c.length>=e.maxKeysPerScope)return n.warn(`kv write skipped (keys ${c.length} >= cap ${e.maxKeysPerScope})`,{scope:a,name:b}),{next:c,result:{skipped:"keys-cap"}};let i=c.reduce((a,b)=>a+(b===h?0:b.size),0);if(i+g>e.maxScopeBytes)return n.warn(`kv write skipped (scope budget ${i}+${g} > ${e.maxScopeBytes})`,{scope:a,name:b}),{next:c,result:{skipped:"scope-cap"}};let j=Date.now(),k={scope:a,name:b,value:f,size:g,createdAt:h?.createdAt??j,updatedAt:j,expiresAt:d?.expiresAt},l=h?c.map(a=>a===h?k:a):[...c,k];return n.debug(`Set kv ${a}/${b}`,{size:g}),{next:l,result:k}})}async function B(a,b){var c;p(a),q(b);let d=(await x(a)).find(a=>a.name===b);if(d&&(c=Date.now(),"number"!=typeof d.expiresAt||d.expiresAt>c))return d.value}},238861:(a,b,c)=>{"use strict";c.d(b,{AO:()=>q,DK:()=>r,Mi:()=>s,QF:()=>y,Yl:()=>x,d4:()=>v,hH:()=>o,hj:()=>A,hm:()=>z,x1:()=>w});var d=c(962239),e=c(928776),f=c(43521),g=c(189663);let h=(0,f.h)("backend/services/mcp/externalAuthorization");({...e.XC});let i=global.__mcp_external_authorization_status??(global.__mcp_external_authorization_status=new Map),j=global.__mcp_external_authorization_sessions??(global.__mcp_external_authorization_sessions=new Map),k=global.__mcp_stdio_oauth_clients??(global.__mcp_stdio_oauth_clients=new WeakMap);function l(a){return(0,g.workspaceCacheKey)(a)}function m(a,b){return`${a}\0${b}`}function n(a){return m((0,g.getCurrentWorkspace)(),a)}function o(a,b,c){if(k.has(a))return;let e=(0,d._V)({mcpClient:a,installElicitationHandler:!1,...c?{mrtrController:c}:{},onUrlElicitation:(0,g.bindToCurrentWorkspace)(async a=>await x(b,{mode:a.mode,url:a.target.href,message:a.message})??{action:"cancel"})});k.set(a,e),a.__flujoStdioOAuth=!0}function p(a){let b=k.get(a);if(!b)throw Error("This MCP client did not negotiate mcp-stdio-oauth.");return b}function q(a){if(!a)return!1;let b=!0===a.__flujoStdioOAuth,c=k.get(a);return b&&!!c?.isSupported()}async function r(a,b,c={}){if(!q(a))return{supported:!1,authorizations:[]};let d=l(b),e=i.get(d);if(!c.force&&e&&Date.now()-e.timestamp<2e3)return e.value;let f=(await p(a).getStatus({timeout:8e3})).authorizations.map(a=>({id:a.id,...a.provider?{provider:a.provider}:{},label:a.label,state:a.state,blocksUnattendedUse:a.blocksUnattendedUse,...a.message?{message:a.message}:{}})),g={supported:!0,authorizations:f,blockingAuthorization:f.find(a=>a.blocksUnattendedUse&&"ready"!==a.state)};return i.set(d,{value:g,timestamp:Date.now()}),g}function s(a){i.delete(l(a))}function t(a){let b=(0,g.getCurrentWorkspace)();return Array.from(j.values()).filter(c=>c.workspace===b&&c.serverName===a).sort((a,b)=>b.createdAt-a.createdAt)[0]}function u(a){a.timer&&clearTimeout(a.timer),j.delete(m(a.workspace,a.sessionId))}function v(a,b){let c=b?j.get(n(b)):t(a);if(!c||c.serverName!==a)return!1;if(c.resolveElicitation){let a=c.resolveElicitation;c.resolveElicitation=void 0,c.elicitationResponded=!0,a({action:"cancel"})}else c.elicitationResponded,c.abortController.abort();return c.rejectPrompt(Error("Authorization was cancelled.")),!0}function w(a,b){let c=j.get(n(b));if(!c||c.serverName!==a||!c.prompt||!c.resolveElicitation)return!1;let d=c.resolveElicitation;return c.resolveElicitation=void 0,c.elicitationResponded=!0,d({action:"decline"}),s(a),!0}async function x(a,b){if("url"!==b.mode)return;let c=t(a);if("string"!=typeof b.url||0===b.url.length)return c&&(c.rejectPrompt(Error("The MCP server supplied a malformed authorization URL.")),c.abortController.abort()),{action:"cancel"};if(!c)return h.warn(`Rejected unsolicited URL elicitation from ${a}`),{action:"cancel"};if(c.abortController.signal.aborted)return h.warn(`Rejected URL elicitation from cancelled start on ${a}`),{action:"cancel"};if(c.resolveElicitation||c.elicitationResponded)return h.warn(`Rejected duplicate URL elicitation from ${a}`),{action:"cancel"};try{!function(a,b,c){if(a.prompt)return a.prompt;let e=(0,d.Z)(b),f={sessionId:a.sessionId,authorizationId:a.authorizationId,url:e.href,origin:e.origin,hasPunycode:e.hasPunycode,...c?{message:c}:{}};a.prompt=f,a.resolvePrompt(f)}(c,b.url,b.message)}catch(a){return c.rejectPrompt(a instanceof Error?a:Error(String(a))),c.abortController.abort(),{action:"cancel"}}return new Promise(a=>{c.resolveElicitation=a})}async function y(a,b,c,d={}){let e,f,h;if(d.signal?.throwIfAborted(),!q(a))throw Error("This MCP server did not negotiate external authorization support.");let i=(await r(a,b,{force:!0})).authorizations.find(a=>a.id===c);if(!i)throw Error("The OAuth authorization is no longer available. Refresh and try again.");if("ready"===i.state)return{sessionId:crypto.randomUUID(),authorizationId:c,url:"",origin:"",hasPunycode:!1,alreadyReady:!0};let k=t(b);if(k&&(v(b,k.sessionId),j.has(m(k.workspace,k.sessionId))))throw Error("The previous authorization request is still closing. Try again in a moment.");d.signal?.throwIfAborted();let l=new Promise((a,b)=>{e=a,f=b}),n={workspace:(0,g.getCurrentWorkspace)(),sessionId:crypto.randomUUID(),serverName:b,authorizationId:c,createdAt:Date.now(),resolvePrompt:e,rejectPrompt:f,promptPromise:l,abortController:new AbortController};n.timer=setTimeout((0,g.bindToCurrentWorkspace)(()=>{let a=n.resolveElicitation;n.resolveElicitation=void 0,n.elicitationResponded=!0,a?.({action:"cancel"}),n.abortController.abort(),n.rejectPrompt(Error("Authorization request timed out."))}),3e5),j.set(m(n.workspace,n.sessionId),n);let o=(0,g.bindToCurrentWorkspace)(()=>{v(b,n.sessionId)});d.signal?.addEventListener("abort",o,{once:!0});let w=(0,g.bindToCurrentWorkspace)(async d=>{if(s(b),"ready"===d.state){n.resolvePrompt({sessionId:n.sessionId,authorizationId:c,url:"",origin:"",hasPunycode:!1,alreadyReady:!0}),u(n);return}let e=(await r(a,b,{force:!0})).authorizations.find(a=>a.id===c);if(e?.state==="ready"){n.resolvePrompt({sessionId:n.sessionId,authorizationId:c,url:"",origin:"",hasPunycode:!1,alreadyReady:!0}),u(n);return}n.rejectPrompt(Error("The MCP server completed OAuth start without URL elicitation or ready status.")),u(n)}),x=(0,g.bindToCurrentWorkspace)(a=>{n.rejectPrompt(a instanceof Error?a:Error(String(a)))}),z=(0,g.bindToCurrentWorkspace)(()=>u(n));p(a).start(c,{timeout:3e5,signal:n.abortController.signal}).then(w).catch(x).finally(z);try{return await Promise.race([l,new Promise((a,b)=>{h=setTimeout(()=>b(Error("The MCP server did not present an authorization URL in time.")),3e4)})])}catch(a){throw v(b,n.sessionId),a}finally{h&&clearTimeout(h),d.signal?.removeEventListener("abort",o)}}function z(a,b){let c=j.get(n(b));if(!c||c.serverName!==a||!c.prompt)throw Error("The authorization request is no longer active. Start it again.");if(!c.resolveElicitation||c.elicitationResponded)throw Error("The authorization request is no longer awaiting consent. Start it again.");let d=c.resolveElicitation;return c.resolveElicitation=void 0,c.elicitationResponded=!0,d({action:"accept"}),s(a),c.prompt}function A(a){s(a);let b=(0,g.getCurrentWorkspace)();for(let c of Array.from(j.values()))c.workspace===b&&c.serverName===a&&(c.resolveElicitation?.({action:"cancel"}),c.abortController.abort(),c.rejectPrompt(Error("Authorization was cancelled because the MCP connection closed.")),u(c))}},239727:()=>{},242745:(a,b,c)=>{"use strict";c.d(b,{Cb:()=>K,M6:()=>J,dN:()=>T,mi:()=>U});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598),h=c(173635),i=c(403409),j=c(189663),k=c(492093),l=c(779504),m=c(849366),n=c(920823),o=c(210027),p=c(225088),q=c(386413),r=c(264416),s=c(803917),t=c(122489),u=c(575189),v=c(343276),w=c(591102),x=c(252937),y=c(896305),z=c(558736);let A=globalThis,B=A.__flujoNativeOriginalAuthorities??=new WeakMap,C=a=>{throw Error(`Native Original authority or reservation is held.${a?` Reason: ${a}.`:""}`)},D=a=>"number"==typeof a&&Number.isSafeInteger(a)&&a>0?a:void 0,E=a=>({id:a?.id,name:a?.name,adapter:a?.adapter,provider:a?.provider,maxTurns:a?.maxTurns,temperature:a?.temperature,reasoningEffort:a?.reasoningEffort,fallbackPolicy:a?.fallbackPolicy}),F=globalThis,G=F.__flujoNativeOriginalHosts??=new WeakSet,H=F.__flujoNativeOriginalReaders??=new WeakMap,I=F.__flujoNativeOriginalHostContexts??=new WeakMap;function J(a,b){if(K(a),I.get(a)!==b)return C()}function K(a){if(!a||"object"!=typeof a||!G.has(a))return C()}let L=a=>"persona"===a.kind?[a.personaId,a.goalId]:["worker",a.workerId,a.goalId],M=a=>"persona"===a.kind?{version:1,goalId:a.goalId,personaId:a.personaId}:{version:2,kind:"worker",goalId:a.goalId,workerId:a.workerId},N=a=>f().join((0,j.getWorkspaceDataDir)(a.workspace),"db","native-session-origins","persona"===a.kind?"host-ledger":"worker-host-ledger",`${(0,n.e$)(L(a))}.json`),O=a=>"win32"===process.platform||(a.mode&BigInt(63))===BigInt(0)&&a.uid===BigInt(process.getuid());async function P(a){let b=(0,j.getWorkspaceDataDir)(a.workspace);for(let c of[b,f().join(b,"db"),f().dirname(f().dirname(N(a))),f().dirname(N(a))]){let a=await d.promises.lstat(c);if(!a.isDirectory()||a.isSymbolicLink())return C();let b=await d.promises.realpath(c),e=a=>"win32"===process.platform?f().resolve(a).toLowerCase():f().resolve(a);if(e(b)!==e(c))return C()}}async function Q(a){let b,c=N(a);try{b=await (0,y.$)(c,262144,{privateOwner:!0})}catch(b){if("ENOENT"===b.code)return{...M(a),reservations:[]};throw b}await P(a);let d=JSON.parse(b.toString("utf8"));return Object.entries(M(a)).some(([a,b])=>d[a]!==b)||!Array.isArray(d.reservations)||d.reservations.length>256||d.reservations.some(a=>!a.invocationId||!a.acceptanceDigest||!["accepted","registered","exited","released"].includes(a.state))?C():d}async function R(a,b){if("win32"===process.platform)return b();let c=await d.promises.open(a,d.constants.O_RDONLY|d.constants.O_DIRECTORY|d.constants.O_NOFOLLOW);try{let a=await c.stat({bigint:!0});if(!a.isDirectory()||!O(a))return C();return await b(c)}finally{await c.close()}}async function S(a,b,c){return(0,k.NU)(()=>(0,l.withWorkspaceRuntimeLock)(`native-original-${(0,n.e$)(L(a)).slice(0,32)}`,async e=>{let h=f().dirname(N(a));for(let a of[f().dirname(h),h]){await d.promises.mkdir(a,{recursive:!1,mode:448}).catch(a=>{if("EEXIST"!==a.code)throw a});let b=await d.promises.lstat(a,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||!O(b))return C()}return R(h,async i=>{await P(a);let k=i?await i.stat({bigint:!0}):await d.promises.lstat(h,{bigint:!0}),l=await d.promises.lstat(h,{bigint:!0});if(!l.isDirectory()||l.isSymbolicLink()||l.dev!==k.dev||l.ino!==k.ino)return C();let m=await d.promises.lstat(N(a),{bigint:!0}).catch(a=>{if("ENOENT"!==a.code)throw a}),n=await Q(a),o=await b(n),p=Buffer.from(JSON.stringify(n));if(p.length>262144)return C();await e.assertOwned();let q=`${N(a)}.${(0,g.randomUUID)()}.tmp`,r=await d.promises.open(q,"wx",384),s=!1;try{await r.writeFile(p),await r.sync();let b=await r.stat({bigint:!0});await P(a);let f=await d.promises.lstat(h,{bigint:!0});if(f.dev!==k.dev||f.ino!==k.ino)return C();let g=await d.promises.lstat(N(a),{bigint:!0}).catch(a=>{if("ENOENT"!==a.code)throw a});if(!!m!=!!g||m&&g&&(m.dev!==g.dev||m.ino!==g.ino||m.mtimeNs!==g.mtimeNs||m.ctimeNs!==g.ctimeNs))return C();let j=await d.promises.lstat(q,{bigint:!0});if(!j.isFile()||j.isSymbolicLink()||j.nlink!==BigInt(1)||j.dev!==b.dev||j.ino!==b.ino||j.size!==BigInt(p.length)||!O(j))return C();await c.assertCurrent(),await e.assertOwned();let l=(0,d.lstatSync)(h,{bigint:!0});if(!l.isDirectory()||l.isSymbolicLink()||l.dev!==k.dev||l.ino!==k.ino||!O(l))return C();if(i){let a=(0,d.fstatSync)(i.fd,{bigint:!0});if(!a.isDirectory()||a.dev!==k.dev||a.ino!==k.ino)return C()}return c.assertActive(),await d.promises.rename(q,N(a)),s=!0,await i?.sync(),o}finally{s||function(a,b,c,e){try{let g=(0,j.getWorkspaceDataDir)(a.workspace),h=f().dirname(b),i=a=>"win32"===process.platform?f().resolve(a).toLowerCase():f().resolve(a);for(let a of[g,f().join(g,"db"),f().dirname(h),h]){let b=(0,d.lstatSync)(a);if(!b.isDirectory()||b.isSymbolicLink()||i((0,d.realpathSync)(a))!==i(a))return}let k=(0,d.lstatSync)(h,{bigint:!0});if(k.dev!==e.dev||k.ino!==e.ino)return;let l=(0,d.fstatSync)(c,{bigint:!0}),m=(0,d.lstatSync)(b,{bigint:!0});if(!l.isFile()||!m.isFile()||m.isSymbolicLink()||l.nlink!==BigInt(1)||m.nlink!==BigInt(1)||!O(l)||!O(m)||m.dev!==l.dev||m.ino!==l.ino)return;(0,d.unlinkSync)(b)}catch{}}(a,q,r.fd,k),await r.close()}})}),a.workspace)}async function T(a,b){if(!b.taskId)return;if((0,(await Promise.all([c.e(54045),c.e(87019),c.e(95260),c.e(55328),c.e(19123),c.e(99662)]).then(c.bind(c,719123))).assertPersonaFlowExecutionAuthority)(a),!a.commitWhileCurrent)return C();let d=await (0,m.getPersonaWorkItem)(b.personaId,b.taskId);(d?.goal||d?.parentGoalId)&&await a.commitWhileCurrent(async()=>{let c=await (0,m.getPersonaWorkItem)(b.personaId,b.taskId);if(!c?.goal&&!c?.parentGoalId)return;let d=c.goal?c:await (0,m.getPersonaWorkItem)(b.personaId,c.parentGoalId);if(!d?.goal||"active"!==d.goal.state||d.goal.pendingDispatchId!==b.dispatchId||d.goal.pendingTaskId!==c.id||c.revokedGoalDispatchId===b.dispatchId)return C();let e=structuredClone(b.flow),f={...b,kind:"persona",workspace:(0,j.getCurrentWorkspace)(),goalId:d.id,round:d.goal.rounds,flow:e,planDigest:(0,n.e$)([b.revisionId,e]),authority:a};if((await Q(f)).reservations.some(a=>"released"!==a.state))return C();B.set(a,f)})}async function U(a){if(!(0,i.VU)())return a.context&&(0,z.executionExtensionSupportsNativeWorkerRoot)(a.context)?W({context:a.context,conversationId:a.conversationId,runId:a.runId,nodeId:a.nodeId,modelId:a.modelId,flowId:a.flowId,flowSnapshot:a.flowSnapshot}):V(a)}async function V(a){let b=a.authority&&B.get(a.authority);return b&&"persona"!==b.kind?C():X(a)}async function W(a){if(!(0,z.executionExtensionSupportsNativeWorkerRoot)(a.context))return;let{modelService:b}=await Promise.resolve().then(c.bind(c,482040)),d=await b.getModel(a.modelId);if(d?.adapter!=="codex-cli")return;if(!a.conversationId||!a.runId||!a.nodeId)return C();let{FlowExecutor:e}=await Promise.resolve().then(c.bind(c,965458)),f=e.conversationStates.get(a.conversationId);if(!f?.flowSnapshot||f.executionExtensionContext!==a.context||f.logicalRunId!==a.runId||f.personaAttribution&&!(0,z.executionExtensionSharesPersonaAuthority)(a.context,f.executionAuthority)||![0,1].includes(f.runDepth??0))return C();let g=structuredClone(f.flowSnapshot);if(Buffer.byteLength(JSON.stringify(g))>1048576)return C();let h=g.nodes.find(b=>b.id===a.nodeId&&"process"===b.data.type);if(!h||h.data.properties?.boundModel!==a.modelId)return C();let i={conversationId:a.conversationId,runId:a.runId,workspace:(0,j.getCurrentWorkspace)(),flowId:g.id,flowDigest:(0,n.e$)(g),modelId:a.modelId,modelDigest:(0,n.e$)(E(d))},k=1===f.runDepth?await (0,z.executionExtensionNativeWorkerDescendant)(a.context,i):void 0,l=k?.root??await (0,z.executionExtensionNativeWorkerRoot)(a.context,i);if(!l||d?.adapter!=="codex-cli"||d.ApiKey?.trim()||d.fallbackPolicy)return C();let m=(0,z.executionExtensionSignal)(a.context);if(!m)return C();let o=(0,n.e$)(l),p=k?e.conversationStates.get(l.rootConversationId):void 0;if(k&&(!p?.flowSnapshot||!p.executionExtensionContext||!(0,z.isExecutionChildContext)(a.context,p.executionExtensionContext)||f.parentRunId!==p.conversationId||f.subflowLane?.parentNodeId!==k.parentNodeId||p.logicalRunId!==l.logicalRunId||(0,n.e$)(p.flowSnapshot)!==l.flowDigest))return C();let q=async()=>{if(m.throwIfAborted(),(0,j.getCurrentWorkspace)()!==i.workspace||e.conversationStates.get(i.conversationId)!==f||f.executionExtensionContext!==a.context||f.logicalRunId!==i.runId||f.isCancelled||(0,n.e$)(f.flowSnapshot)!==i.flowDigest||(0,n.e$)(E(await b.getModel(a.modelId)))!==i.modelDigest)return C();let c=k?await (0,z.executionExtensionNativeWorkerDescendant)(a.context,i):void 0;if(k&&(0,n.e$)(c)!==(0,n.e$)(k))return C();let d=c?.root??await (0,z.executionExtensionNativeWorkerRoot)(a.context,i);if(!d||(0,n.e$)(d)!==o)return C();m.throwIfAborted()},r=Object.freeze({signal:m,assertCurrent:q,commitWhileCurrent:b=>(0,z.commitExecutionExtensionMutation)(a.context,async()=>(await q(),b()))}),s={kind:"worker",workerId:l.workerId,targetDigest:l.targetDigest,context:a.context,workspace:l.workspace,dispatchId:l.fleetRunId,goalId:l.goalId,round:1,revisionId:l.flowDigest,leaseEpoch:l.leaseEpoch,conversationId:i.conversationId,runId:i.runId,flow:g,planDigest:(0,n.e$)([l.flowDigest,g]),authority:r,...k?{descendant:{...k,rootFlowId:p.flowId}}:{}};return await r.commitWhileCurrent(async()=>{if((await Q(s)).reservations.some(a=>"released"!==a.state))return C();B.set(r,s)}),X({...a,authority:r})}async function X(a){let b,d,e,f=a.authority&&B.get(a.authority);if(!f&&!a.personaAttribution)return;let{modelService:g}=await Promise.resolve().then(c.bind(c,482040)),i=await g.getModel(a.modelId);if(!f){if(i?.adapter!=="claude-cli"&&i?.adapter!=="codex-cli")return;let b=a.personaAttribution;if(!b.activityId)return C();let c=await (0,m.getPersonaActivity)(b.personaId,b.activityId);if(!c)return C();if("assignment"!==c.source.kind||!c.source.sourceId)return;let d=await (0,m.getPersonaWorkItem)(b.personaId,c.source.sourceId);return!d||d.goal||d.parentGoalId?C():void 0}if(i?.adapter!=="claude-cli"&&i?.adapter!=="codex-cli")return;let k=i.adapter,y=f.authority;if(f.workspace!==(0,j.getCurrentWorkspace)()||!a.conversationId||!a.runId||!y.commitWhileCurrent)return C();let A=a.conversationId,F=a.conversationId===f.conversationId&&a.runId===f.runId,J=f.flow;if(F){if(a.flowId&&a.flowId!==f.flow.id)return C()}else{if("persona"!==f.kind||!a.flowId||!f.flow.executionDependencies)return C();try{(0,x.DQ)(f.flow)}catch{return C()}let b=f.flow.executionDependencies?.flows.find(b=>b.flowId===a.flowId);if(!b)return C();J=b.flowSnapshot}let K=a=>(0,n.e$)({...a,executionDependencies:void 0}),L=K(J);if(!F&&!a.flowSnapshot||a.flowSnapshot&&K(a.flowSnapshot)!==L)return C();let M=J.nodes.find(b=>b.id===a.nodeId&&"process"===b.data.type);if(!M||M.data.properties?.boundModel!==a.modelId)return C();let N="claude-cli"===k?v.yu:v.ED;if(i.id!==a.modelId||i.fallbackPolicy)return C();let O=D(M.data.properties?.maxTurns)??D(i.maxTurns)??h.mP,P=(0,n.e$)(E(i)),R=async()=>{if(y.signal.throwIfAborted(),"worker"===f.kind)return y.assertCurrent();let a=await (0,m.getPersonaWorkItem)(f.personaId,f.goalId);if(!a?.goal||"active"!==a.goal.state||a.goal.rounds!==f.round||a.goal.pendingDispatchId!==f.dispatchId)return C();y.signal.throwIfAborted()},T=async()=>{y.signal.throwIfAborted(),await y.assertCurrent(),"persona"===f.kind&&await R(),y.signal.throwIfAborted()},U={assertCurrent:R,assertActive:()=>y.signal.throwIfAborted()};await T();let V="worker"===f.kind&&"codex-cli"===i.adapter?await (0,z.executionExtensionCodexProfile)(f.context):void 0;if(V){let{assertRestrictedCodexProfile:a}=await Promise.resolve().then(c.bind(c,364564));await a(V,i.name)}let W="worker"===f.kind&&"codex-cli"===i.adapter?await (0,u.U)(i.name,i.reasoningEffort,y.signal,T,V?{executable:V.verifiedCliPath,catalogPath:V.verifiedModelCatalogPath}:{}):void 0;W&&(0,u.g)(W),await T();let X="codex-cli"===i.adapter?v.ED:v.yu,Y=(0,n.At)(f.leaseEpoch,T),Z=(0,o.cj)({workspace:f.workspace,fleetRunId:f.dispatchId,workerId:"persona"===f.kind?f.activityId:f.workerId,goalId:f.goalId,rootConversationId:"worker"===f.kind&&f.descendant?f.descendant.root.rootConversationId:f.conversationId,rootLogicalRunId:"worker"===f.kind&&f.descendant?f.descendant.root.logicalRunId:f.runId,rootFlowId:"worker"===f.kind&&f.descendant?f.descendant.rootFlowId:f.flow.id},T),$=async a=>"worker"===f.kind?(0,q.Fo)({invocationId:a,authority:Y,root:Z,signal:y.signal}):(0,w.C8)(y,A,f.conversationId,async b=>{let c=async()=>{y.signal.throwIfAborted(),await b.assertCurrent(R)},d=(0,n.At)(f.leaseEpoch,c),e=(0,o.cj)({workspace:f.workspace,fleetRunId:f.dispatchId,workerId:f.activityId,goalId:f.goalId,rootConversationId:f.conversationId,rootLogicalRunId:f.runId,rootFlowId:f.flow.id},c),g=await (0,q.Fo)({invocationId:a,authority:d,root:e,signal:y.signal,heldRead:b});return await c(),g},()=>(0,q.Fo)({invocationId:a,authority:Y,root:Z,signal:y.signal})),_=async()=>{if(F&&!("worker"===f.kind&&f.descendant))return;if(!b)return C();let a=await $(b.descriptor.receipt.invocationId);if((0,n.e$)(a)!==(0,n.e$)(b.descriptor))return C()},aa=!1,ab=!1,ac=!1,ad=!1,ae=new Set,af=async(a,c=U)=>b?S(f,async c=>{let d=c.reservations.find(a=>a.invocationId===b.descriptor.receipt.invocationId);if(!d||d.descriptorDigest!==(0,n.e$)(b.descriptor))return C();await a(d)},c):C(),ag=(0,p.p7)({root:Z,publish:async c=>{if(b)return C();let d=c.descriptor,e=d.receipt.owner;if(e.conversationId!==a.conversationId||e.runId!==a.runId||e.nodeId!==a.nodeId||e.modelId!==a.modelId||e.leaseEpoch!==f.leaseEpoch||d.archive.adapter!==i.adapter||d.lineage.rootFlowId!==Z.rootFlowId)return C();let g="worker"===f.kind?f.descendant:void 0;if(g){let a=d.lineage.edges[0];if(1!==d.lineage.edges.length||a?.kind!=="attached-lane"||a.parentConversationId!==Z.rootConversationId||a.parentLogicalRunId!==Z.rootLogicalRunId||a.parentNodeId!==g.parentNodeId||a.childConversationId!==f.conversationId||a.childLogicalRunId!==f.runId||a.childFlowId!==f.flow.id)return C()}else if(F?0!==d.lineage.edges.length:0===d.lineage.edges.length)return C();let h=await $(d.receipt.invocationId);if((0,n.e$)(h)!==(0,n.e$)(d))return C();if("persona"===f.kind){let a=f.flow;for(let b of h.lineage.edges)a=(0,x.$7)(a,b.parentNodeId,b.childFlowId,f.workspace);if(a.id!==J.id||K(a)!==L)return C()}await y.commitWhileCurrent(async()=>{await S(f,async b=>{let c=(0,n.e$)([f.dispatchId,f.round,f.planDigest,e.conversationId,e.runId,e.nodeId,e.modelId,e.inputDigest,e.attemptOrdinal]);if(b.reservations.length>=256||b.reservations.some(a=>"released"!==a.state||a.invocationId===d.receipt.invocationId||a.acceptanceDigest===c))return C();b.reservations.push({invocationId:d.receipt.invocationId,descriptorDigest:(0,n.e$)(d),owner:structuredClone(e),lineageDigest:d.lineage.digest,acceptanceDigest:c,planDigest:(0,n.e$)([f.planDigest,L,P]),modelId:a.modelId,maxTurns:O,state:"accepted"})},U)}),b=c,y.signal.addEventListener("abort",()=>c.cancel(),{once:!0})},acknowledgeLive:async a=>{if(a!==b||!d||aa||ab)return C();await T()},acknowledgeSdkOutcome:async(a,c)=>{if(a!==b||!d||!aa||!ab)return C();await y.commitWhileCurrent(()=>af(async a=>{if("completed"===c&&a.handoff&&"confirmed"!==a.handoff.state)return C();a.sdkOutcome=c}))},acknowledgeTerminalReady:async a=>{if(a!==b||!d||!aa||!ab)return C();await T()}}),ah={terminationProtocol:X,...W?{codexProfile:W}:{},assertOutputCurrent:async()=>b&&d?(await T(),await _(),(0,n.e$)(E(await g.getModel(a.modelId)))!==P)?C():void await T():C(),prepareHandoff:async(a,c)=>{if(!b||b.descriptor.receipt.invocationId!==a||!d||aa||ab||b.descriptor.inventory.terminationProtocol!==N||ac||!c||c.length>256||ae.size>=32||ae.has(c))return C();await ah.beforeFirstPrompt(),await y.commitWhileCurrent(()=>af(async a=>{if("registered"!==a.state)return C();a.handoff={protocol:N,toolInvocationIds:[...ae,c],state:"requested"}})),ae.add(c)},requestHandoffTermination:async a=>{if(!b||b.descriptor.receipt.invocationId!==a||!d||!ae.size||aa||ab||ac)return C();await T(),y.signal.throwIfAborted(),ac=!0,d.requestStop()},confirmHandoffTermination:async(a,c)=>{if(!b||b.descriptor.receipt.invocationId!==a||!d||!ac||!aa||!ab||!ae.size||(0,n.e$)([...ae])!==(0,n.e$)(c))return C();await T(),await y.commitWhileCurrent(()=>af(async a=>{if("exited"!==a.state||!a.exit||a.handoff?.state!=="requested"||(0,n.e$)(a.handoff.toolInvocationIds)!==(0,n.e$)(c))return C();a.handoff.state="confirmed"}))},observeSdkUsage:async a=>{if(!a||"object"!=typeof a||!d||!b||a.type!==("claude-cli"===k?"result":"turn.completed"))return C();await ah.assertOutputCurrent();let c=a.usage&&"object"==typeof a.usage?a.usage:{},e=a=>"number"==typeof a&&Number.isFinite(a)&&a>=0?a:void 0,f={source:"claude-cli"===k?"claude-sdk-result":"codex-app-server-turn",..."claude-cli"===k?{numTurns:e(a.num_turns)}:{outerTurns:1},inputTokens:e(c.input_tokens),outputTokens:e(c.output_tokens),cacheReadTokens:e("claude-cli"===k?c.cache_read_input_tokens:c.cached_input_tokens),cacheCreationTokens:e(c.cache_creation_input_tokens),totalCostUsd:e(a.total_cost_usd),durationMs:e(a.duration_ms)};if(await y.commitWhileCurrent(()=>af(async a=>{if(a.sdkUsage&&(0,n.e$)(a.sdkUsage)!==(0,n.e$)(f))return C();if("codex-cli"===k){if(!ad||a.codexBudget?.admittedTurns!==1)return C();a.codexBudget.completedTurns=1}a.sdkUsage=f})),void 0!==f.numTurns&&f.numTurns>O)return C()},assertTurnBudget:async c=>{if(!b||c!==O||(0,n.e$)(E(await g.getModel(a.modelId)))!==P)return C();await T(),"codex-cli"===k&&await y.commitWhileCurrent(()=>af(async a=>{if(ad||d||"accepted"!==a.state||a.codexBudget)return C();a.codexBudget={scope:"outer-turn",admittedTurns:1,maxTurns:O},ad=!0}))},register:async a=>{if("claude-cli"===k)(0,s.Y)(a,ah);else if((0,t.Pb)(a,ah),!ad)return C();if(!b||d||!a.identity.processBirthMarkerV2)return C();d=a,a.exit.then(()=>{aa=!0}),a.close.then(()=>{ab=!0}),await y.commitWhileCurrent(()=>af(async b=>{if("accepted"!==b.state)return C();b.identity=a.identity,b.state="registered"})),await ah.beforeFirstPrompt()},beforeFirstPrompt:async()=>!d||aa||ab||!b||(0,n.e$)(E(await g.getModel(a.modelId)))!==P||(await T(),await _(),!await (0,l.a$)(d.identity)||aa||ab)?C():void await T(),waitForExit:async()=>{if(!d||!b)return C();let a=await d.exit;await d.close,aa=!0,ab=!0,await af(async b=>{if(b.exit&&(0,n.e$)(b.exit)!==(0,n.e$)(a))return C();b.exit=a,"released"!==b.state&&(b.state="exited")},{assertCurrent:async()=>{if(!b||!d||!aa||!ab)return C()},assertActive:()=>{if(!b||!d||!aa||!ab)return C()}})},releaseAfterTerminal:async()=>{if(!b||!aa||!ab)return C();let a=b;if("terminal"!==(await a.waitTerminal()).state)return C();let c=async()=>{await (0,q.xJ)({invocationId:a.descriptor.receipt.invocationId,expectedOwner:a.descriptor.receipt.owner,expectedLineageDigest:a.descriptor.lineage.digest,expectedDescriptorDigest:(0,n.e$)(a.descriptor),expectedWorkspace:f.workspace,assertReadAuthorized:async()=>{if(a!==b||!aa||!ab)return C()}})};await af(async a=>{if("completed"!==a.sdkOutcome||a.handoff&&"confirmed"!==a.handoff.state)return C();a.state="released"},{assertCurrent:c,assertActive:()=>{if(a!==b||!aa||!ab)return C()}})}},ai=a=>b&&(void 0===a||b.descriptor.receipt.invocationId===a)?b:C(),aj=async()=>{if(!d||aa||ab||y.signal.aborted||b?.signal.aborted)return!1;let a=d;if("codex-cli"===i.adapter){if(!await (0,t.RF)(a,ah))return!1}else if((0,s.Y)(a,ah),!await (0,l.a$)(a.identity))return!1;return d===a&&!aa&&!ab&&!y.signal.aborted&&!b?.signal.aborted},ak=Object.freeze({async readOrigin(a){let b=ai(a),c=await (0,q.Fo)({invocationId:a,authority:Y,root:Z,signal:y.signal});return(0,n.e$)(c)!==(0,n.e$)(b.descriptor)?C():c},async readPayload(a){let b=ai(a?.invocationId);if((0,n.e$)(a)!==(0,n.e$)(b.descriptor.payloadRef))return C();await ak.readOrigin(a.invocationId);let c=await (0,r.cN)(a,f.workspace);return await T(),c},assertPublishable:async a=>a.session!==ai(a.invocationId)||d?C():(await T(),(0,q.ch)({...a,authority:Y,root:Z})),async retainLive(a,b,c){if(a!==ai()||!c||"object"!=typeof c||Array.isArray(c)||!d)return C();let g=a.descriptor,h=`source-${(0,n.e$)([g.lineage.installationId,g.receipt.owner.leaseEpoch])}`,i={invocationId:g.receipt.invocationId,workerId:g.lineage.workerId,goalId:g.lineage.goalId,fleetRunId:g.lineage.fleetRunId,rootConversationId:g.lineage.rootConversationId,workspace:f.workspace,conversationId:g.receipt.owner.conversationId,logicalRunId:g.receipt.owner.runId,nodeId:g.receipt.owner.nodeId,generation:h};if(Object.entries(i).some(([a,c])=>b?.[a]!==c))return C();let j=(0,n.e$)(b);if(e&&(e.ownerDigest!==j||e.hostGeneration!==c)||(await ah.assertOutputCurrent(),!await aj()))return C();let k=(await Q(f)).reservations.find(a=>a.invocationId===i.invocationId);return k?.state!=="registered"||(0,n.e$)(k.identity)!==(0,n.e$)(d.identity)||k.descriptorDigest!==(0,n.e$)(g)?C():(await ah.assertOutputCurrent(),await aj())?(await ah.assertOutputCurrent(),aa||ab||y.signal.aborted||a.signal.aborted)?C():Object.freeze({handle:(e??={handle:Object.freeze({}),ownerDigest:j,hostGeneration:c,generation:h}).handle,generation:h}):C()},async probeLive(a,c,g){if(!e||a!==e.handle||g!==e.hostGeneration||(0,n.e$)(c)!==e.ownerDigest)return null;try{if(await ah.assertOutputCurrent(),!b||!d||!await aj())return null;let c=(await Q(f)).reservations.find(a=>a.invocationId===b.descriptor.receipt.invocationId);if(c?.state!=="registered"||(0,n.e$)(c.identity)!==(0,n.e$)(d.identity)||c.descriptorDigest!==(0,n.e$)(b.descriptor)||(await ah.assertOutputCurrent(),!await aj()))return null;return await ah.assertOutputCurrent(),aa||ab||y.signal.aborted||b.signal.aborted?null:a}catch{return null}},async readTerminal(a,c){let e=ai(a),g={expectedOwner:e.descriptor.receipt.owner,expectedLineageDigest:e.descriptor.lineage.digest,expectedDescriptorDigest:(0,n.e$)(e.descriptor),expectedWorkspace:f.workspace};if((0,n.e$)(c)!==(0,n.e$)(g))return C();let h=async()=>{if(!d||!aa||!ab||e!==b)return C();let c=(await Q(f)).reservations.find(b=>b.invocationId===a);if(!c||!["exited","released"].includes(c.state)||"completed"!==c.sdkOutcome||!c.exit||c.descriptorDigest!==g.expectedDescriptorDigest||(0,n.e$)(c.identity)!==(0,n.e$)(d.identity)||c.handoff&&"confirmed"!==c.handoff.state)return C()};return{...await (0,q.xJ)({invocationId:a,...g,assertReadAuthorized:h}),cancelResolved:!0}}});return G.add(ah),H.set(ah,ak),"worker"===f.kind&&I.set(ah,f.context),{broker:Y,session:ag,process:Object.freeze(ah)}}},245698:(a,b,c)=>{"use strict";c.r(b),c.d(b,{MCPService:()=>ce,mcpService:()=>cf});let d=new WeakMap;async function e(a,b){if(a.getProtocolEra?.()!=="modern")return!1;let c=d.get(a);if(c||(c=new Map,d.set(a,c)),!c.has(b)){let d=c,e=a.listen({resourceSubscriptions:[b]});d.set(b,e),e.then(a=>{a.honoredFilter.resourceSubscriptions?.includes(b)||a.close().catch(()=>{}),a.closed.then(()=>{d.get(b)===e&&d.delete(b)})},()=>{d.get(b)===e&&d.delete(b)})}return await c.get(b),!0}var f=c(403409),g=c(34762),h=c(179764),i=c(478645);function j(a){if(a instanceof i.Kq||a instanceof h.Bk)return{success:!1,error:a instanceof h.Bk?"ISOLATION_UNAVAILABLE"===a.code?"Isolation is unavailable. Restore the configured Docker runtime and image, then retry.":"Owner approval required. Review this server’s isolation settings and renew its approval, then retry.":"HOST_POLICY_INVALID"===a.code?"Owner approval required. Review this server’s command and execution settings, then retry.":"Owner approval required. This protected server has no valid approval for its current configuration. Renew its approval, then retry.",errorCode:a.code,errorType:"execution-approval",requiresApproval:!0,statusCode:409}}var k=c(919674),l=c(79748),m=c.n(l),n=c(333873),o=c.n(n),p=c(446193),q=c(653637),r=c(899631);let s="[REDACTED]";function t(a){return"string"==typeof a?a:a&&"string"==typeof a.value?a.value:""}function u(a,b){let c=new Set,d=a=>{if(!a||(0,r.uh)(a)||(0,r.T6)(a))return;c.add(a);let b=/^(?:Bearer|Basic)\s+(.+)$/i.exec(a);b&&c.add(b[1])};for(let[c,e]of Object.entries(a.env??{}))((0,q.xc)(c)||null!=e&&"object"==typeof e&&e.metadata?.isSecret)&&(d(t(e)),d(t(b.env?.[c])));if("headers"in a){let c="headers"in b?b.headers:void 0;for(let[b,e]of Object.entries(a.headers??{}))if(((0,q.Hm)(b)||/^(?:cookie|set-cookie|proxy-authorization)$/i.test(b)||null!=e&&"object"==typeof e&&e.metadata?.isSecret)&&(d(t(e)),d(t(c?.[b])),/^(?:cookie|set-cookie)$/i.test(b)))for(let a of t(c?.[b]).split(";")){let b=a.indexOf("=");b>=0&&d(a.slice(b+1).trim())}}return[...c]}function v(a){let b=new Set;for(let c of a)if(c){b.add(c);try{b.add(encodeURIComponent(c))}catch{}b.add(JSON.stringify(c).slice(1,-1))}let c=[...b].sort((a,b)=>b.length-a.length),d=(a,b,d=!1)=>{let e="",f=0;for(;f<a.length;){let g=a.length-f,h=c.some(b=>g<b.length&&b.startsWith(a.slice(f)));if(h&&!b)break;let i=c.find(b=>a.startsWith(b,f));i?(e+=s,f+=i.length):h&&b&&d?(e+=s,f=a.length):e+=a[f++]}return{output:e,pending:a.slice(f)}};return{redact:a=>d(a,!0).output,stream(){let a="";return{write(b){let c=d(a+b,!1);return a=c.pending,c.output},end(){let b=d(a,!0,!0);return a="",b.output}}}}}var w=c(43521),x=c(189663),y=c(389861),z=c(767351),A=c(558736),B=c(470589),C=c(553468),D=c(380949),E=c(7557),F=c(149925),G=c(676881),H=c(247726),I=c(977598);let J=(0,w.h)("backend/services/mcp/lifecycleCoordinator");function K(){return global.__flujo_mcp_lifecycle||(global.__flujo_mcp_lifecycle=new Map),global.__flujo_mcp_lifecycle}function L(a,b=(0,x.getCurrentWorkspace)()){return`${b}\0${a}`}function M(a){let b=(0,x.getCurrentWorkspace)(),c=L(a,b),d=K().get(c);return d||(d={key:c,workspace:b,serverName:a,runtimeId:(0,I.randomUUID)(),state:"cold",generation:0,retryAttempts:0,connectFailures:0,handshakeFailures:0,forcedKills:0,leases:0,pins:new Set,lastUsedAt:Date.now()},K().set(c,d)),d}function N(a){return K().get(L(a))}function O(){let a=(0,x.getCurrentWorkspace)();return Array.from(K().values()).filter(b=>b.workspace===a)}async function P(a,b){let c=M(a);c.teardownPromise&&await c.teardownPromise.catch(()=>void 0);let d=c.connectPromise;if(d)return J.debug(`beginConnect: reusing in-flight attempt for ${a}`),d;c.state="warm"===c.state?"warm":"starting",c.shutdownReceipt=void 0;let e=(async()=>b(c))().finally(()=>{c.connectPromise===e&&(c.connectPromise=void 0)});return c.connectPromise=e,e}function Q(a){let b=N(a);if(b&&!b.connectPromise)return b.shutdownReceipt?.generation===b.generation?b.shutdownReceipt:void 0}let R=(0,w.h)("backend/services/mcp/mcpLeasePool");function S(){let a=Number(process.env.FLUJO_MCP_IDLE_TTL_MS);return Number.isFinite(a)&&a>0?a:6e5}function T(){let a=Number(process.env.FLUJO_MCP_MAX_WARM_SERVERS);return Number.isFinite(a)&&a>0?Math.floor(a):8}function U(){let a=()=>({acquires:0,coalesced:0,connects:0,failures:0,idleClosures:0,lruEvictions:0}),b=(0,x.getCurrentWorkspace)();if(b===x.DEFAULT_WORKSPACE)return global.__flujo_mcp_pool_counters||(global.__flujo_mcp_pool_counters=a()),global.__flujo_mcp_pool_counters;let c=global.__flujo_mcp_pool_counters_by_workspace??=new Map,d=c.get(b);return d||(d=a(),c.set(b,d)),d}function V(a,b,c){let d,e=!1;return d=M(a),d.leases+=1,d.lastUsedAt=Date.now(),{serverName:a,generation:c,client:b,isStale(){let b=N(a);return!b||b.generation!==c},release(){if(!e){let b;e=!0,(b=M(a)).leases=Math.max(0,b.leases-1),b.lastUsedAt=Date.now()}}}}async function W(a,b,c=b=>a.connectServer(b)){if(U().acquires+=1,await a.isServerDisabled(b))return{success:!1,error:`Server '${b}' is disabled. Enable it on the MCP page to use it.`};let d=a.getClient(b);if(d){U().coalesced+=1;let a=M(b);return{success:!0,lease:V(b,d,a.generation)}}U().connects+=1;let e=await c(b),f=a.getClient(b);if(!e.success||!f)return U().failures+=1,{success:!1,error:e.error??`Could not establish an MCP connection to '${b}'.`};let g=M(b);return{success:!0,lease:V(b,f,g.generation)}}function X(a,b){M(a).pins.add(b)}async function Y(a){let b=S(),c=Date.now(),d=[];for(let e of O())"warm"!==e.state||e.leases>0||e.pins.size>0||c-e.lastUsedAt<b||!function(a){let b=N(a);return!!b&&(b.leases>0||b.pins.size>0)}(e.serverName)&&(R.info(`sweepIdleServers: closing ${e.serverName} after ${Math.round((c-e.lastUsedAt)/1e3)}s idle`),await a.disconnectServer(e.serverName).catch(()=>void 0),U().idleClosures+=1,d.push(e.serverName));return d}async function Z(a){let b=T(),c=[];for(;;){let d=O().filter(a=>"warm"===a.state);if(d.length<=b)break;let e=d.filter(a=>0===a.leases&&0===a.pins.size).sort((a,b)=>a.lastUsedAt-b.lastUsedAt)[0];if(!e)break;R.info(`enforceWarmCapacity: evicting idle LRU server ${e.serverName} (warm=${d.length}, limit=${b})`),await a.disconnectServer(e.serverName).catch(()=>void 0),U().lruEvictions+=1,c.push(e.serverName)}return c}var $=c(695794),_=c(160103),aa=c(401499);function ab(a){return a instanceof $.Nh||a instanceof aa.bd||a instanceof _.xe?{code:a.code,...void 0===a.data?{}:{data:a.data}}:void 0}function ac(a){return -32601===a?404:-32602===a||-32600===a?400:500}var ad=c(122134),ae=c(332137),af=c(531123),ag=c(499872),ah=c(884756),ai=c(258627),aj=c(940768),ak=c(169055),al=c(816408),am=c(637390);class an extends ah.V${constructor(){super("MCP Tasks request timed out"),this.name="TasksExtensionRequestTimeoutError"}}let ao=new WeakMap;class ap{constructor(a,b,c,d,e){this.client=a,this.transport=b,this.onLateCreation=c,this.checkAuthority=d,this.onRetired=e,this.prefix=`flujo-tasks:${(0,I.randomUUID)()}:`,this.sequence=0,this.pending=new Map,this.lateCreations=new Map,this.retired=!1,this.onmessage=(a,b)=>{if("id"in a&&!("method"in a)&&"string"==typeof a.id&&a.id.startsWith(this.prefix)){let b=this.pending.get(a.id);if(b)if("result"in a&&aw(a.result)&&(0,ak.Wi)(a.result))b.finish({kind:"result",result:a.result});else if("error"in a&&aw(a.error)&&(0,ak.Wi)(a.error)){let c=al.W7.safeParse(a.error);c.success?b.finish({kind:"error",error:c.data}):b.finish(void 0,new ah.V$("MCP Tasks response error is malformed"))}else b.finish(void 0,new ah.V$("MCP Tasks response is not bounded JSON"));else if(!this.retired&&(this.lateCreations.get(a.id)??0)>Date.now()){this.lateCreations.delete(a.id);let b="result"in a&&aw(a.result)?al._N.safeParse(a.result):void 0;b?.success&&this.onLateCreation(b.data.taskId).catch(()=>{})}return}if("method"in a&&"notifications/progress"===a.method){let b=a.params?.progressToken;if("string"==typeof b&&b.startsWith(this.prefix))return void this.pending.get(b)?.progress(a.params)}this.previousMessage?.call(this.transport,a,b)},this.onclose=()=>{this.retire(new ah.V$("MCP Tasks transport closed")),this.previousClose?.call(this.transport)},this.dispatch=async(a,b={})=>{var c,d;if(await this.checkAuthority(),this.retired||this.client.transport!==this.transport||this.transport.onmessage!==this.onmessage)return this.retire(),Promise.reject(new ah.V$("MCP Tasks connection is no longer active"));if(b.signal?.aborted)return Promise.reject(aq(b.signal));if(!ar(a)||"string"!=typeof a.method)return Promise.reject(new ah.V$("MCP Tasks request must be an object with a method"));let e=b.context?.requestTimeoutMs??6e4;if(!Number.isSafeInteger(e)||e<=0||e>0x7fffffff)return Promise.reject(RangeError("MCP Tasks request timeout must be a positive 32-bit integer"));let f=`${this.prefix}${this.sequence++}`,g=ar(c=a.params)?c:{},h={...a,jsonrpc:"2.0",id:f,params:{...g,_meta:{...ar(d=g._meta)?d:{},progressToken:f}}};return new Promise((c,d)=>{let g,i=new AbortController,j=setTimeout(()=>m(void 0,new an),e),k=()=>{clearTimeout(g),g=setTimeout(()=>m(void 0,new an),e)},l=()=>m(void 0,aq(b.signal)),m=(e,h)=>{if(this.pending.delete(f)){if(clearTimeout(g),clearTimeout(j),b.signal?.removeEventListener("abort",l),i.abort(),!e&&!this.retired&&"tools/call"===a.method){for(let[a,b]of this.lateCreations)b<=Date.now()&&this.lateCreations.delete(a);for(;this.lateCreations.size>=32;)this.lateCreations.delete(this.lateCreations.keys().next().value);this.lateCreations.set(f,Date.now()+3e4)}e?this.checkAuthority().then(()=>{if(b.signal?.aborted)throw aq(b.signal);if(this.retired||this.client.transport!==this.transport||this.transport.onmessage!==this.onmessage)throw new ah.V$("MCP Tasks connection retired before result delivery");c(e)}).catch(d):d(h)}};this.pending.set(f,{finish:m,progress:a=>{if(b.context?.resetTimeoutOnProgress&&k(),a&&"number"==typeof a.progress&&Number.isFinite(a.progress))try{b.context?.onprogress?.({progress:a.progress,..."number"==typeof a.total&&Number.isFinite(a.total)?{total:a.total}:{},..."string"==typeof a.message?{message:a.message}:{}})}catch(a){m(void 0,a)}}}),b.signal?.addEventListener("abort",l,{once:!0}),k(),this.transport.send(h,{headers:b.context?.headers,requestSignal:i.signal,onRequestStreamEnd:()=>m(void 0,new ah.V$("MCP Tasks response stream ended before a reply"))}).catch(a=>m(void 0,a))})},this.previousMessage=b.onmessage,this.previousClose=b.onclose,b.onmessage=this.onmessage,b.onclose=this.onclose}retire(a=new ah.V$("MCP Tasks session retired")){if(!this.retired){for(let b of(this.retired=!0,this.lateCreations.clear(),[...this.pending.values()]))b.finish(void 0,a);this.onRetired()}}}function aq(a){return a.reason instanceof Error?a.reason:new DOMException("The operation was aborted","AbortError")}function ar(a){return null!=a&&"object"==typeof a&&!Array.isArray(a)}function as(a){let b,c=ao.get(a);if(!c||c.retired)return;if(c.bundle)return c.bundle;if(a.getProtocolEra?.()==="modern"&&(c.negotiatedModern=!0),a.getProtocolEra?.()!=="modern"||a.getNegotiatedProtocolVersion?.()!=="2026-07-28"||!(0,am.BD)(a.getServerCapabilities?.())||!a.transport)return;let d=a.transport,e=new AbortController,f=async()=>{if(c.retired||c.identity.isAuthorityCurrent&&!await c.identity.isAuthorityCurrent())throw c.retired=!0,c.close?.().catch(()=>{}),new ah.V$("MCP Tasks connection authority is no longer current")},g=new ap(a,d,async b=>{let e=c.identity.authorizeLateTaskCancellation;e&&!c.retired&&a.transport===d&&await e(b)&&(c.retired||a.transport!==d||await c.bundle?.cancelTask(b))},f,()=>{e.abort(),c.retired=!0,c.close?.().catch(()=>{})});try{b=(0,ai.Vj)(a,c.identity.endpointId,{rawDispatch:g.dispatch,v2RequestFraming:{...c.identity,protocolVersion:"2026-07-28"}})}catch(a){throw g.retire(),a}let h=(0,aj.v)(b,{}),i=async(a,c,d)=>{try{var f=await b.dispatch({method:a,params:c},d);if("error"===f.kind)throw new _.xe(f.error);return f.result}catch(b){if(d?.signal?.aborted&&!e.signal.aborted)throw aq(d.signal);let a=function(a){let b=a;for(let a=0;a<5&&b instanceof Error;a++){if(b instanceof an)return b;b=Object.getOwnPropertyDescriptor(b,"cause")?.value}}(b);if(a)throw a;throw b}},j=(a,b)=>({...b,context:{...b?.context,headers:{...Object.fromEntries(Object.entries(b?.context?.headers??{}).filter(([a])=>"mcp-name"!==a.toLowerCase())),"Mcp-Name":a}}}),k=new Map;return c.bundle={session:h,signal:e.signal,async callTool(b,c){let d=new AbortController,g=c?.context?.requestTimeoutMs??6e4,h=setTimeout(()=>d.abort(new an),g),j=AbortSignal.any([e.signal,d.signal,...c?.signal?[c.signal]:[]]);try{var l,m;let d,e,h,n,o,p;if(await f(),k.size>=1e3)throw new ah.V$("MCP Tasks output validation capacity exceeded");let q=(await a.listTools(void 0,{signal:j,timeout:g,maxTotalTimeout:g})).tools.find(a=>a.name===b.name),r=aA(q),s={...Object.fromEntries(Object.entries(c?.context?.headers??{}).filter(([a])=>!a.toLowerCase().startsWith("mcp-param-"))),...(l=q,m=b.arguments,e={},h=new Set,n=0,o=()=>{throw new aa.bd(aa.qu.InvalidParams,"Invalid MCP parameter header declaration")},p=(a,b,c,d)=>{if((++n>1e4||d>32)&&o(),null!==a&&"object"==typeof a){if(Object.hasOwn(a,"x-mcp-header")){let d=a["x-mcp-header"];(!c||!b.length||"string"!=typeof d||!ay.test(d)||!["string","integer","boolean"].includes(String(a.type))||h.has(d.toLowerCase()))&&o(),h.add(d.toLowerCase());let f=m;for(let a of b)f=null!==f&&"object"==typeof f&&Object.hasOwn(f,a)?f[a]:void 0;if(null!=f){("string"!==a.type||"string"==typeof f)&&("boolean"!==a.type||"boolean"==typeof f)&&("integer"!==a.type||Number.isSafeInteger(f))||o();let b=String(f),c=b.length>0&&b===b.trim()&&/^[\x09\x20-\x7e]*$/.test(b)&&!(b.startsWith("=?base64?")&&b.endsWith("?="));e["Mcp-Param-"+d]=c?b:"=?base64?"+Buffer.from(b,"utf8").toString("base64")+"?="}}if(a.properties&&"object"==typeof a.properties)for(let[e,f]of Object.entries(a.properties))p(f,[...b,e],c,d+1);for(let c of az){let e=a[c];Array.isArray(e)?e.forEach(a=>p(a,b,!1,d+1)):e&&"object"==typeof e&&(["patternProperties","dependentSchemas","$defs","definitions"].includes(c)?Object.values(e).forEach(a=>p(a,b,!1,d+1)):p(e,b,!1,d+1))}}},l&&p(l.inputSchema,[],!0,0),e)},t=b;for(let e=0;e<=32;e++){j.throwIfAborted();let f=await i("tools/call",{...t},{...c,signal:j,context:{...c?.context,headers:s}}),g=al.ss.safeParse(f);if(g.success){if(32===e||!g.data.inputRequests&&g.data.requestState===d)throw new ah.V$("MCP Tasks initial input did not converge");d=g.data.inputRequests?void 0:g.data.requestState;let f=Object.fromEntries(await Promise.all(Object.entries(g.data.inputRequests??{}).map(async([b,d])=>[b,await au(a,d,j,c?.expectedConversationId)])));t={...b,...void 0===g.data.requestState?{}:{requestState:g.data.requestState},...Object.keys(f).length?{inputResponses:al.uD.parse(f)}:{}};continue}let h=al._N.safeParse(f);if(h.success)return k.set(h.data.taskId,r),h.data;let l=al.xu.parse(f);if("complete"!==l.resultType)throw new ah.V$("MCP Tasks completion is not a completed tool result");return r(l),l}throw new ah.V$("MCP Tasks initial input did not converge")}finally{clearTimeout(h)}},async getTask(a,b){let c=al.Y$.parse(await i("tasks/get",{taskId:a},j(a,b)));if(c.taskId!==a)throw new ah.V$("MCP Tasks response identity mismatch");return["failed","cancelled"].includes(c.status)&&k.delete(a),c},validateToolResult(a,b){let c=k.get(a);if(!c)return!1;try{c(b)}finally{k.delete(a)}return!0},async cancelTask(a,b){al.U$.parse(await i("tasks/cancel",{taskId:a},j(a,b)))},async updateTask(a,b,c){let d=al.uD.parse(b);al.RX.parse(await i("tasks/update",{taskId:a,inputResponses:d},j(a,c)))}},c.close=async()=>{c.retired=!0,e.abort(),g.retire(),k.clear();try{await h.close()}finally{b[Symbol.dispose]()}},b.onInvalidated(()=>{c.close?.().catch(()=>{})}),c.bundle}async function at(a){let b=ao.get(a);b&&(b.retired=!0,await b.close?.())}async function au(a,b,c,d){let e=ao.get(a);if(!e||e.retired||!e.identity.handleInputRequest)throw new ah.V$("MCP Tasks input handling is not available");if(c?.aborted)throw aq(c);if(e.identity.isAuthorityCurrent&&!await e.identity.isAuthorityCurrent())throw await at(a),new ah.V$("MCP Tasks input authority is no longer current");let f=al.d7.parse(b),g=e.identity.handleInputRequest(f,c,d),h=await av(g,c);if(c?.aborted)throw aq(c);if(e.retired||e.identity.isAuthorityCurrent&&!await e.identity.isAuthorityCurrent())throw await at(a),new ah.V$("MCP Tasks input authority changed before result delivery");return"elicitation/create"===f.method?al.Rz.parse(h):"sampling/createMessage"===f.method?al.KB.parse(h):al.q6.parse(h)}async function av(a,b){if(!b)return a;let c=()=>{},d=new Promise((a,d)=>{c=()=>d(aq(b)),b.addEventListener("abort",c,{once:!0}),b.aborted&&c()});try{return await Promise.race([a,d])}finally{b.removeEventListener("abort",c)}}function aw(a){let b=0,c=0,d=new Set,e=(a,f)=>{if(++b>1e4||f>32)return!1;if("string"==typeof a)return(c+=a.length)<=1048576;if(null===a||"boolean"==typeof a)return!0;if("number"==typeof a)return Number.isFinite(a);if("object"!=typeof a||d.has(a))return!1;d.add(a);let g=Object.keys(a);if(g.length>1e4)return!1;for(let b of g){c+=b.length;let d=Object.getOwnPropertyDescriptor(a,b);if(c>1048576||!d||!("value"in d)||!e(d.value,f+1))return!1}return d.delete(a),!0};return e(a,0)}let ax=new ag.p4,ay=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,az=new Set(["items","prefixItems","contains","additionalProperties","unevaluatedProperties","unevaluatedItems","propertyNames","patternProperties","dependentSchemas","oneOf","anyOf","allOf","not","if","then","else","$defs","definitions"]);function aA(a){let b;if(!a?.outputSchema)return()=>{};try{b=ax.getValidator(a.outputSchema)}catch{throw new aa.bd(aa.qu.InvalidParams,"MCP tool output schema is invalid")}return a=>{if(!a.isError){if(void 0===a.structuredContent)throw new aa.bd(aa.qu.InvalidRequest,"MCP tool did not return required structured content");if(!b(a.structuredContent).valid)throw new aa.bd(aa.qu.InvalidParams,"MCP tool output does not match its schema")}}}var aB=c(383594),aC=c(225335),aD=c(316646),aE=c(304927),aF=c(320108),aG=c(769760),aH=c(774858),aI=c(56140),aJ=c(140742),aK=c(769588),aL=c(170098),aM=c(928776),aN=c(971415),aO=c(660826);let aP=(0,w.h)("backend/services/mcp/betaClient");async function aQ(){try{let a=await (0,aE.loadItem)(aF.Zg.SPEECH_SETTINGS,void 0);return!!a?.experimental?.mcpBetaProtocol}catch(a){return aP.warn("Failed to read mcpBetaProtocol setting; defaulting to disabled",{err:a}),!1}}function aR(a){return!0===a.__flujoBeta}function aS(a,b){let d=(0,aK.jV)(a),e=(0,aL.fy)(a),f=!0===a.enableMcpApps,g="stdio"===a.transport&&void 0===a.isolation,h={name:`flujo-${a.name}-client`,version:"3.48.0"},i={roots:{listChanged:!0},...d?{sampling:{}}:{},...g||e?{elicitation:{...g?{url:{}}:{},...e?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[E.ET]:{}}:{},...g?{[aM.OM]:aM.XC}:{},...f?{[z.OF]:{mimeTypes:[z.cM]}}:{}}},j=new aa.Kj(h,{capabilities:i,listChanged:{tools:{autoRefresh:!1,onChanged:()=>{}},prompts:{autoRefresh:!1,onChanged:()=>{}},resources:{autoRefresh:!1,onChanged:()=>b?.()}},versionNegotiation:{mode:"stdio"===a.transport?"legacy":"auto"}}),k=(0,aJ.sG)(a,j),l=d?(0,aK.c3)(a):void 0,m=g||e?(0,aL.Cd)(a):void 0;if((0,af.zD)(j,"roots/list",k),l&&(0,af.zD)(j,"sampling/createMessage",l),m&&(0,af.zD)(j,"elicitation/create",m),j.setRequestHandler("roots/list",async(a,b)=>{b.mcpReq.signal.throwIfAborted();let c=await k();return b.mcpReq.signal.throwIfAborted(),c}),d&&j.setRequestHandler("sampling/createMessage",async(a,b)=>l(a,{signal:b.mcpReq.signal})),(g||e)&&j.setRequestHandler("elicitation/create",async(a,b)=>m(a,{signal:b.mcpReq.signal})),"stdio"!==a.transport&&void 0===a.isolation&&void 0===a.trustedHost){let b=(0,x.bindToCurrentWorkspace)(async()=>{if(!aB.Gv.ENABLE_MCP_TASKS_CLIENT)return!1;let{mcpService:b}=await Promise.resolve().then(c.bind(c,245698));return b.getClient(a.name)===j});var n={endpointId:(0,x.workspaceCacheKey)(a.name),clientInfo:h,clientCapabilities:i,authorizeLateTaskCancellation:b,isAuthorityCurrent:b,handleInputRequest:(0,x.bindToCurrentWorkspace)(async(c,d,f)=>{let g=async()=>{if(d?.throwIfAborted(),!await b())throw Error("MCP Tasks input connection is no longer current");let c=(0,aC.lx)(a.name);if(void 0!==f&&(!c||c.conversationId!==f||c.getUnattended()))throw Error("MCP Tasks input owner is no longer attended")};if(await g(),"elicitation/create"===c.method&&!e)throw Error("The requested MCP Tasks input capability is disabled");let h=await (0,af.jq)(j,c,{signal:d,assertCurrent:g,expectedConversationId:f});return await g(),al.t5.parse(h)})};if(ao.has(j))throw Error("MCP Tasks identity is already registered");if(!n.endpointId)throw TypeError("MCP Tasks endpoint identity must not be empty");ao.set(j,{identity:n})}return j.__flujoBeta=!0,j.__flujoCapKey=(0,aG.capabilityKey)(a),aP.info(`Created split-SDK MCP client for ${a.name} (version negotiation: ${"stdio"===a.transport?"legacy":"auto"})`),j}function aT(a){let b=a.requestInit&&"object"==typeof a.requestInit?a.requestInit:void 0;if(a.headers&&"object"==typeof a.headers){let c=(0,aG.flattenCustomHeaders)(a.headers);Object.keys(c).length>0&&(b={...b||{},headers:{...b?.headers||{},...c}})}return b}function aU(a,b){let c,d,e;if((0,D.SL)(a),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new h.Bk("ISOLATION_POLICY_INVALID");if("websocket"===a.transport)throw Error("The v2-beta MCP SDK has no websocket transport; use the v1 path");if("streamable"===a.transport){let b={},c=aT(a);if(c&&(b.requestInit=c),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.oauthClientId||a.oauthClientInformation){let c=(0,G.Cl)(a);b.fetch=c.oauthFetch,b.authProvider=c}let d=new aa.jS(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,aG.httpConfigKey)(a),d.__flujoKind="streamable",aP.info(`Created v2-beta streamable transport for ${a.name}`),d}if("sse"===a.transport){let b={},c=aT(a);c&&(b.requestInit=c),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit);let d=new aa.Am(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,aG.httpConfigKey)(a),d.__flujoKind="sse",aP.info(`Created v2-beta SSE transport for ${a.name}`),d}let{command:f,args:i,env:j,cwd:k,isolation:l}=(0,aG.resolveStdioLaunch)(a,b),m=(0,x.getCurrentWorkspace)(),n=()=>(0,aG.retireMcpRuntimeAuthority)(a.name,m,d,c);try{(0,aG.assertMcpRuntimeAuthorityRetired)(a.name),d=(0,g.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,aO.D9)(a.name):void 0;let h=d?(0,g.Uf)(a,d):{},m={command:f,args:i,env:{...j,...c?a.trustedHost?(0,aH.s7)(a,c.env):c.env:{},...h},cwd:k,stderr:l?"ignore":"pipe",...l?{maxBufferSize:262144}:{}};l||(Object.freeze(m.args),Object.freeze(m.env),Object.freeze(m)),e=new aD.oQ(m),l?(0,B.We)(e,a,l,n):a.trustedHost?(0,aH.Zu)(e,a,n,d):((0,aG.attachShippedWorkspaceReadiness)(e,a,k),(0,aI.uR)(e,a,a=>JSON.stringify([(0,aG.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),(0,aG.capabilityKey)(a)])))}catch(b){let a=[];try{l?.close()}catch(b){a.push(b)}try{n()}catch(b){a.push(b)}if(a.length)throw new aG.McpRuntimeAuthorityRetirementError([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}let o=e;return o.__flujoRuntimeBrokerLeaseId=c?.leaseId,o.__flujoBundledWorkload=d,o.__flujoRetireRuntimeAuthority=n,o.__flujoStdioKey=(0,aG.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),o.__flujoKind="stdio",aV.set(e,new aN.$6),aP.info(`Created v2-beta stdio transport for ${a.name}`),e}let aV=new WeakMap;function aW(a){aV.get(a)?.attach(a)}var aX=c(455511),aY=c(627432);let aZ=(0,w.h)("backend/services/mcp/remoteTaskStore"),a$=null,a_=new Map;function a0(){let a=(0,x.getCurrentWorkspace)();return a===x.DEFAULT_WORKSPACE?a$:a_.get(a)??null}function a1(a){let b=(0,x.getCurrentWorkspace)();b===x.DEFAULT_WORKSPACE?a$=a:a?a_.set(b,a):a_.delete(b)}async function a2(){let a=a0();if(a&&Date.now()-a.at<3e4)return a.value;try{let a=await (0,aE.loadItem)(aF.Zg.MCP_REMOTE_TASK_SETTINGS,aY.QV);a1({value:{...aY.QV,...a},at:Date.now()})}catch(a){aZ.warn("Failed to load MCP remote task settings; using defaults",a),a1({value:aY.QV,at:Date.now()})}return a0().value}async function a3(a){try{var b;let{mcpService:d}=await Promise.resolve().then(c.bind(c,245698)),e=await d.loadServerConfigs();return(b=Array.isArray(e)?e.find(b=>b.name===a):void 0)?function(a,b=32){return(0,aX.createHash)("sha256").update(a).digest("hex").slice(0,b)}(function a(b){if(null===b||"object"!=typeof b)return JSON.stringify(b)??"null";if(Array.isArray(b))return`[${b.map(a).join(",")}]`;let c=Object.entries(b).filter(([,a])=>void 0!==a).sort(([a],[b])=>a<b?-1:+(a>b)).map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`);return`{${c.join(",")}}`}({name:b.name,transport:b.transport,command:b.command??null,args:Array.isArray(b.args)?b.args:null,serverUrl:b.serverUrl??b.websocketUrl??null,envKeys:Object.keys(b.env??{}).sort(),headerKeys:Object.keys(b.headers??{}).sort(),oauth:!!(b.oauth??b.oauthTokens)}),32):"unknown"}catch(b){return aZ.warn(`Could not resolve server identity for ${a}`,b),"unknown"}}async function a4(a){try{let b=Date.now(),c=(0,aX.randomUUID)();(0,aE.ln)(c);let d={version:aY.F6,recordId:c,remoteTaskId:a.remoteTaskId,serverName:a.serverName,serverIdentity:a.serverIdentity,...a.generation?{generation:a.generation}:{},toolName:a.toolName,requestFingerprint:`request:${(0,aX.randomUUID)()}`,ownership:a.ownership,status:a.status,...(0,ae.A$)(a.statusMessage)?{statusMessage:(0,ae.A$)(a.statusMessage)}:{},createdAt:b,updatedAt:b,pollIntervalMs:a.pollIntervalMs,nextPollAt:b+a.pollIntervalMs,...void 0!==a.ttlMs?{ttlMs:a.ttlMs}:{},...void 0!==a.expiresAt?{expiresAt:a.expiresAt}:{},...(0,ae.gJ)(a.status)?{completedAt:b}:{}};return await (0,aE.Vt)(aY.jK,c,d),aZ.info(`Persisted remote MCP task record ${c} (server=${a.serverName}, tool=${a.toolName}, status=${a.status})`),d}catch(a){return aZ.warn("Failed to persist remote MCP task record",a),null}}async function a5(a,b){try{return(0,aE.ln)(a),await (0,aE.l_)(`mcp-remote-task:${a}`,async()=>{let c=await (0,aE.EI)(aY.jK,a,null);if(!c)return null;let d=b.status??c.status;if(b.status&&!(0,aY.el)(c.status,b.status))return aZ.debug(`Rejected illegal remote task transition ${c.status} -> ${b.status} for ${a}`),c;let e=Date.now(),f={...c,...b,version:aY.F6,recordId:c.recordId,remoteTaskId:c.remoteTaskId,serverName:c.serverName,serverIdentity:c.serverIdentity,generation:c.generation,toolName:c.toolName,requestFingerprint:c.requestFingerprint,createdAt:c.createdAt,status:d,...void 0!==b.statusMessage?{statusMessage:(0,ae.A$)(b.statusMessage)}:{},...void 0!==b.errorMessage?{errorMessage:(0,ae.A$)(b.errorMessage)}:{},updatedAt:e};return(0,ae.gJ)(f.status)&&!f.completedAt&&(f.completedAt=e),await (0,aE.Vt)(aY.jK,a,f),f})}catch(b){return aZ.warn("Failed to patch remote MCP task record",{recordId:a,error:b}),null}}let a6=globalThis,a7=a6.__flujoMcpTaskPollSlots??(a6.__flujoMcpTaskPollSlots={total:0,perServer:new Map});async function a8(a){let b=await a2(),c=(0,x.workspaceCacheKey)(a),d=a7.perServer.get(c)??0;if(a7.total>=b.maxConcurrentPolls||d>=b.maxConcurrentPollsPerServer)return;a7.total++,a7.perServer.set(c,d+1);let e=!1;return{release:()=>{if(e)return;e=!0,a7.total=Math.max(0,a7.total-1);let a=a7.perServer.get(c)??1;a<=1?a7.perServer.delete(c):a7.perServer.set(c,a-1)}}}var a9=c(731612);let ba=(0,w.h)("backend/services/mcp/tasksProtocol");function bb(){return!0===aB.Gv.ENABLE_MCP_TASKS_CLIENT}function bc(a){let b;return b=ao.get(a),b?.negotiatedModern===!0||b?.bundle!==void 0||a.getProtocolEra?.()==="modern"}let bd=new WeakMap;a9.custom(a=>!!(0,ae.nt)(a)&&!!a&&"object"==typeof a&&("resultType"in a&&"task"===a.resultType?(0,ae.cl)(a,"2026-07-28").ok:(0,ae.RL)(a)));let be=new WeakMap;async function bf(a,b){let c=be.get(a);if(c&&Date.now()-c.at<6e4)return c.byTool.get(b);try{let c=await a.listTools(),d=new Map;for(let a of c.tools??[]){let b=a.execution,c=b?.taskSupport;d.set(a.name,"optional"===c||"required"===c||"forbidden"===c?c:void 0)}return be.set(a,{at:Date.now(),byTool:d}),d.get(b)}catch(a){ba.warn(`Failed to read tool task-support declarations: ${String(a)}`);return}}async function bg(a,b){let c=function(a){let b={supported:!1,supportsToolsCall:!1,supportsCancel:!1,supportsList:!1};if(!a||!bb())return b;if(as(a))return{supported:!0,supportsToolsCall:!0,supportsCancel:!0,supportsList:!1,generation:"2026-07-28"};if(bc(a))return b;let c=bd.get(a);if(c)return c;let d=function(a){try{let b=a.getServerCapabilities?.(),c=b?.tasks;return"object"==typeof c&&null!==c?c:void 0}catch(a){ba.warn("Failed to read server capabilities for Tasks negotiation",a);return}}(a);if(!d)return bd.set(a,b),b;let e=d.requests??void 0,f=e?.tools??void 0,g="object"==typeof f?.call&&null!==f.call,h={generation:"2025-11-25",supported:g,supportsToolsCall:g,supportsCancel:"object"==typeof d.cancel&&null!==d.cancel,supportsList:"object"==typeof d.list&&null!==d.list};return bd.set(a,h),ba.debug(`Negotiated ${ae.MD} support`,h),h}(a);if(!a||!c.supportsToolsCall)return{request:!1,negotiation:c,reason:bb()?"server does not advertise tasks.requests.tools.call":"MCP Tasks client support disabled"};if("2026-07-28"===c.generation)return{request:!0,negotiation:c,reason:"modern Tasks extension negotiated"};let d=await bf(a,b);return"required"!==d&&"optional"!==d?{request:!1,negotiation:c,reason:`tool declares taskSupport=${d??"none"}`}:{request:!0,ttlMs:(await a2()).requestedTtlMs,negotiation:c,reason:`tool declares taskSupport=${d}`}}async function bh(a,b,c,d,e){return a.request({method:b,params:{taskId:c}},d,{...e?.signal?{signal:e.signal}:{},...e?.timeout?{timeout:e.timeout}:{}})}async function bi(a,b,c){let d=as(a);if(d){if(c?.generation&&"2026-07-28"!==c.generation)throw Error("MCP Tasks protocol generation mismatch");let a=(0,ae.Or)(await d.getTask(b,bl(c)));return a.ok&&a.task.taskId!==b?{ok:!1,reason:"task identity mismatch"}:a}if(bc(a)||c?.generation==="2026-07-28")throw Error("Modern MCP Tasks session is unavailable");let e=await bh(a,ae.ao.get,b,$.Sc,c),f=(0,ae.AY)(e);return f.ok?{ok:!0,task:f.task}:{ok:!1,reason:f.reason}}async function bj(a,b,c){let d=as(a);if(d){if(c?.generation&&"2026-07-28"!==c.generation)throw Error("MCP Tasks protocol generation mismatch");if(c?.terminalTask?.taskId===b&&"2026-07-28"===c.terminalTask.generation&&"completed"===c.terminalTask.status&&void 0!==c.terminalTask.result)return c.terminalTask.result;let a=await d.getTask(b,bl(c));if("completed"!==a.status)throw Error("Modern task result is not completed");return a.result}if(bc(a)||c?.generation==="2026-07-28")throw Error("Modern MCP Tasks session is unavailable");return bh(a,ae.ao.result,b,$.BZ,c)}async function bk(a,b,c=1e4,d){try{let e=as(a);if(e){if(d&&"2026-07-28"!==d)return;return await e.cancelTask(b,bl({timeout:c})),{ok:!0,acknowledged:!0}}if(bc(a)||"2026-07-28"===d)return;let f=await bh(a,ae.ao.cancel,b,$.gH,{timeout:c}),g=(0,ae.AY)(f);return g.ok?{ok:!0,task:g.task}:{ok:!1,reason:g.reason}}catch(a){ba.warn(`Best-effort tasks/cancel failed for task ${b}:`,a);return}}function bl(a){return{...a?.signal?{signal:a.signal}:{},context:{...a?.timeout?{requestTimeoutMs:a.timeout}:{},...a?.resetTimeoutOnProgress?{resetTimeoutOnProgress:!0}:{},...a?.onprogress?{onprogress:a.onprogress}:{}}}}async function bm(a,b,c,d={}){let e=as(a);if(!e||"2026-07-28"!==d.generation||!(0,ae.nt)(c)||Object.keys(c).length>32||Object.keys(c).some(a=>!a||a.length>512))throw Error("Invalid modern task input responses or unavailable session");await e.updateTask(b,al.uD.parse(c),bl(d))}var bn=c(651633),bo=c(764897);let bp=(0,w.h)("backend/services/mcp/clientTasks");function bq(a,b,c){return"completed"===a.status?{success:!0,data:c,progressToken:a.taskId}:"failed"===a.status?{success:!1,error:a.error?.message??a.statusMessage??`Task ${a.taskId} failed`,...a.error?{taskError:a.error}:{},errorType:"task-failed",progressToken:a.taskId,toolName:b}:{success:!1,error:a.statusMessage??`Tool '${b}' task ${a.taskId} was cancelled by the server.`,errorType:"cancelled",progressToken:a.taskId,toolName:b}}async function br(a){let b,{client:c,serverName:d,serverIdentity:e,toolName:f,task:g,timeoutMs:h,signal:i,onProgress:j,ownership:k,persist:l}=a,m=a.generation??g.generation??"2025-11-25",n=async()=>{if(await a.assertCurrent?.(),g.generation&&g.generation!==m)throw Error("Remote task protocol generation changed")},o=await a2(),p=Date.now(),q=c.transport,r=(0,ae.uY)(g.pollInterval,{minMs:o.minPollIntervalMs,maxMs:o.maxPollIntervalMs,defaultMs:o.defaultPollIntervalMs}),s=(0,ae.on)(g,p,o.fallbackTtlMs);bp.info(`Tool ${f} on ${d} returned task ${g.taskId} (status=${g.status}, poll=${r}ms, expiresAt=${s??"none"})`),j?.({progress:0,message:`Task ${g.taskId} created (${g.status})`});let t=await a8(d);if(!t)return bp.warn(`Refusing to poll task ${g.taskId}: poll concurrency limit reached for ${d}`),a.supportsCancel&&(await n(),await bk(c,g.taskId,1e4,m)),{success:!1,error:`Too many concurrent MCP tasks are being polled; task ${g.taskId} was not started.`,errorType:"task-poll-limit",progressToken:g.taskId,toolName:f};let u=null;if(l){try{u=await a4({remoteTaskId:g.taskId,serverName:d,serverIdentity:e,toolName:f,ownership:k,status:g.status,generation:m,statusMessage:"2026-07-28"===g.generation?void 0:g.statusMessage,pollIntervalMs:r,...void 0!==s?{expiresAt:s,ttlMs:s-p}:{}})}catch(a){bp.warn("Remote MCP task persistence failed",a)}if(!u){try{a.supportsCancel&&(await n(),await bk(c,g.taskId,1e4,m))}finally{t.release()}return{success:!1,error:"Remote MCP task could not be recorded durably.",errorType:"task-persistence-error",progressToken:g.taskId,toolName:f}}}let v=async a=>{if(!u)return;let b=await a5(u.recordId,a);b&&(u=b)},w=e=>(b||(b=(async()=>(await v({cancelRequestedAt:Date.now(),...e?{diagnostic:e}:{}}),a.supportsCancel)?q&&c.transport!==q?void 0:(await n(),bk(c,g.taskId,1e4,m)):void bp.warn(`Server ${d} does not advertise tasks.cancel; skipping cancellation of ${g.taskId}`))()),b),x=()=>{w().catch(a=>bp.warn("MCP task cancellation failed",a))};i?.addEventListener("abort",x,{once:!0});let y=new AbortController,z=Math.min(h,void 0===s?1/0:Math.max(0,s-p)),A=Number.isFinite(z)&&z<0x7fffffff?setTimeout(()=>y.abort(),z):void 0,B="2026-07-28"===g.generation?as(c)?.signal:void 0,C=AbortSignal.any([y.signal,...i?[i]:[],...B?[B]:[]]),D=new Map;try{let b;if(i?.aborted)return await w(),{success:!1,error:"Remote task caller was cancelled.",errorType:"cancelled",toolName:f};if((0,ae.gJ)(g.status))return await E(g);let e=g,l=0,t=r,u=0;for(;;){let x;if(i?.aborted)return await w(),await v({status:"cancelled"}),{success:!1,error:`Tool '${f}' task ${e.taskId} was cancelled.`,errorType:"cancelled",progressToken:e.taskId,toolName:f};if(B?.aborted||q&&c.transport!==q)return await v({diagnostic:"transport-error",lastPolledAt:Date.now()}),{success:!1,error:`The connection to '${d}' retired while task ${e.taskId} was pending.`,errorType:"task-transport-error",progressToken:e.taskId,toolName:f};let A=Date.now();if(void 0!==s&&A>=s)return await w("expired"),await v({status:"failed",diagnostic:"expired",errorMessage:"Remote MCP task expired before completing."}),{success:!1,error:`Task ${e.taskId} expired before completing.`,errorType:"task-expired",progressToken:e.taskId,toolName:f};if(A-p>=h){await w(),await v({status:"failed",errorMessage:"Caller timeout elapsed while polling the remote MCP task."});let a=Math.round(h/1e3);return{success:!1,error:`Tool execution timed out after ${a} seconds`,errorType:"timeout",timeout:a,statusCode:408,progressToken:e.taskId,toolName:f}}if("2026-07-28"===e.generation&&"input_required"===e.status&&e.inputRequests){b??=Date.now();let g=(0,aC.lx)(d);if(!k.conversationId||g?.conversationId!==k.conversationId||a.originatingInputContext&&g!==a.originatingInputContext)return await F({action:"abandon",error:`Task ${e.taskId} has no matching attended conversation.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"});let h=bt(d,e.taskId,b,o.inputRequiredTimeoutMs);if("abandon"===h.action)return await F(h);let i=as(c);try{if(!i&&!a.handleInputRequest)throw Error("The modern MCP Tasks connection is no longer active");for(let[f,h]of Object.entries(e.inputRequests)){let i=(0,I.createHash)("sha256").update(function a(b){return null===b||"object"!=typeof b?JSON.stringify(b):Array.isArray(b)?`[${b.map(a).join(",")}]`:`{${Object.entries(b).sort(([a],[b])=>a.localeCompare(b)).map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}(h)).digest("hex"),j=D.get(f);if(j&&j!==i)throw Error("MCP task reused an input key for different input");if(j)continue;if(D.size>=32)throw Error("MCP task exceeded the input exchange budget");let l=Math.max(1,o.inputRequiredTimeoutMs-(Date.now()-b)),r=new AbortController,s=setTimeout(()=>r.abort(),l),t=AbortSignal.any([C,r.signal]),u=h.params?._meta,v=al.d7.parse({...h,params:{...h.params,_meta:{...u&&"object"==typeof u&&!Array.isArray(u)?u:{},"io.modelcontextprotocol/related-task":{taskId:e.taskId}}}});try{await n();let h=a.handleInputRequest?await bs(a.handleInputRequest(v,{signal:t,assertCurrent:n}),t):await au(c,v,t,k.conversationId);if(await n(),(0,aC.lx)(d)!==g||g.getUnattended()||q&&c.transport!==q)return await F({action:"abandon",error:`Task ${e.taskId} attended input authority changed.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"});let j=Math.min(l,z-(Date.now()-p),o.inputRequiredTimeoutMs-(Date.now()-b));if(j<=0)throw Error("Task input deadline elapsed");await bm(c,e.taskId,{[f]:h},{generation:m,signal:t,timeout:Math.min(1e4,j)}),await n(),D.set(f,i)}finally{clearTimeout(s),r.abort()}}}catch(a){if(C.aborted)continue;if(Date.now()-b>=o.inputRequiredTimeoutMs)return await F({action:"abandon",error:`Task ${e.taskId} input deadline elapsed.`,errorType:"task-input-timeout",diagnostic:"input-required-unattended"});return await w("protocol-invalid"),await v({status:"failed",diagnostic:"protocol-invalid",errorMessage:"MCP Tasks input exchange failed."}),{success:!1,error:`MCP Tasks input exchange failed: ${String(a)}`,errorType:"task-protocol-invalid",progressToken:e.taskId,toolName:f}}}try{await function(a,b){return b.aborted?Promise.reject(b.reason):new Promise((c,d)=>{let e=()=>{clearTimeout(f),b.removeEventListener("abort",e),d(b.reason)},f=setTimeout(()=>{b.removeEventListener("abort",e),c()},a);b.addEventListener("abort",e,{once:!0})})}(Math.min(t,Math.max(1,z-(Date.now()-p))),C)}catch(a){if(C.aborted)continue;throw a}if(i?.aborted||y.signal.aborted)continue;try{await n(),x=await bi(c,e.taskId,{timeout:Math.max(1,Math.min(4*t+1e4,z-(Date.now()-p))),signal:C,generation:m}),l=0,t=r}catch(a){if(C.aborted)continue;if(l++,await v({diagnostic:"transport-error",lastPolledAt:Date.now()}),l>=o.maxTransientPollFailures)return await w("transport-error"),await v({status:"failed",diagnostic:"transport-error",errorMessage:"2026-07-28"===g.generation?"Remote MCP task polling failed.":`tasks/get failed ${l} times: ${String(a)}`}),{success:!1,error:`Lost contact with '${d}' while polling task ${e.taskId}.`,errorType:"task-transport-error",progressToken:e.taskId,toolName:f};t=(0,ae.uY)(2*t,{minMs:o.minPollIntervalMs,maxMs:o.maxPollIntervalMs,defaultMs:o.defaultPollIntervalMs}),bp.warn(`Transient tasks/get failure ${l}/${o.maxTransientPollFailures} for ${e.taskId}; backing off to ${t}ms`);continue}if(!x.ok)return await w("protocol-invalid"),await v({status:"failed",diagnostic:"protocol-invalid",errorMessage:`Invalid tasks/get result: ${x.reason}`}),{success:!1,error:`Server '${d}' returned an invalid task status: ${x.reason}`,errorType:"task-protocol-invalid",progressToken:e.taskId,toolName:f};if(await n(),x.task.taskId!==g.taskId||(x.task.generation??"2025-11-25")!==m)return await w("protocol-invalid"),await v({status:"failed",diagnostic:"protocol-invalid",errorMessage:"Task identity or protocol generation changed in tasks/get."}),{success:!1,error:"Remote task identity changed.",errorType:"task-protocol-invalid",toolName:f};e=x.task,u++;let G=Date.now()-p;if(await v({status:e.status,statusMessage:"2026-07-28"===e.generation?void 0:e.statusMessage,lastPolledAt:Date.now(),nextPollAt:Date.now()+t,pollCount:u,outstandingInputKeys:(0,bo.Ek)(d,e.taskId)}),j?.({progress:"completed"===e.status?100:Math.min(99,Math.round(G/1e3)),message:`Task ${e.taskId}: ${e.status}${e.statusMessage?` — ${e.statusMessage}`:""}`}),(0,ae.gJ)(e.status))return await E(e);if("input_required"===e.status){b??=Date.now();let a=bt(d,e.taskId,b,o.inputRequiredTimeoutMs);if("abandon"===a.action)return await w(a.diagnostic),await v({status:"failed",diagnostic:a.diagnostic,errorMessage:a.error}),{success:!1,error:a.error,errorType:a.errorType,progressToken:e.taskId,toolName:f}}else b=void 0}}finally{clearTimeout(A),y.abort(),i?.removeEventListener("abort",x),t.release(),(0,bo.w_)(d,g.taskId)}async function E(a){if(await n(),C.throwIfAborted(),"2026-07-28"===a.generation&&("completed"===a.status&&void 0===a.result||"failed"===a.status&&void 0===a.error))try{await n();let b=await bi(c,a.taskId,{signal:C,timeout:Math.max(1,Math.min(6e4,z-(Date.now()-p)))});if(await n(),!b.ok||b.task.taskId!==a.taskId||b.task.generation!==m||b.task.status!==a.status)throw Error("Modern terminal task details are inconsistent");a=b.task}catch{return{success:!1,error:`Task ${a.taskId} terminal details could not be retrieved from '${d}'.`,errorType:"task-result-unavailable",progressToken:a.taskId,toolName:f}}if("completed"!==a.status)return await v({...u?.status===a.status?{}:{status:a.status},statusMessage:"2026-07-28"===a.generation?void 0:a.statusMessage,..."failed"===a.status?{errorMessage:"2026-07-28"===a.generation?"Remote MCP task failed.":a.statusMessage??"Remote MCP task failed."}:{}}),bq(a,f);if("2026-07-28"===a.generation){let b=al.xu.safeParse(a.result);if(!b.success||"complete"!==b.data.resultType)return await v({status:"completed",resultRetrieved:!1,diagnostic:"protocol-invalid",errorMessage:"Remote completed task returned an invalid tools/call result."}),{success:!1,error:`Task ${a.taskId} returned an invalid completed tool result.`,errorType:"task-protocol-invalid",statusCode:502,progressToken:a.taskId,toolName:f};a={...a,result:b.data}}try{await n();let b=await bj(c,a.taskId,{timeout:Math.max(1,Math.min(6e4,z-(Date.now()-p))),signal:C,generation:m,terminalTask:a});if(await n(),C.throwIfAborted(),"2026-07-28"===a.generation&&!b)throw Error("Modern completed task omitted its result");if("2026-07-28"===a.generation){let d=as(c);if(!d?.validateToolResult?.(a.taskId,b)){let a=Math.max(1,Math.min(6e4,z-(Date.now()-p))),d=AbortSignal.any([C,AbortSignal.timeout(a)]),e=(await (0,bn.H7)(c,{signal:d,timeout:a,maxTotalTimeout:a})).tools.find(a=>a.name===f);aA(e)(b)}await n()}return await v({...u?.status==="completed"?{}:{status:"completed"},resultRetrieved:!0}),j?.({progress:100,message:`Task ${a.taskId}: completed`}),bq(a,f,b)}catch(b){if("2026-07-28"===a.generation&&void 0!==ab(b))return await v({...u?.status==="completed"?{}:{status:"completed"},resultRetrieved:!1,diagnostic:"protocol-invalid",errorMessage:"Remote completed task output does not match its tool schema."}),{success:!1,error:"Remote completed task output does not match its tool schema.",errorType:"task-protocol-invalid",statusCode:502,progressToken:a.taskId,toolName:f};return await v({...u?.status==="completed"?{}:{status:"completed"},resultRetrieved:!1,errorMessage:"2026-07-28"===a.generation?"Remote MCP task result could not be retrieved.":`tasks/result failed: ${String(b)}`}),{success:!1,error:`Task ${a.taskId} completed but its result could not be retrieved from '${d}'.`,errorType:"task-result-unavailable",progressToken:a.taskId,toolName:f}}}async function F(a){return await w(a.diagnostic),await v({status:"failed",diagnostic:a.diagnostic,errorMessage:a.error}),{success:!1,error:a.error,errorType:a.errorType,progressToken:g.taskId,toolName:f}}}async function bs(a,b){let c=()=>{},d=new Promise((a,d)=>{c=()=>d(b.reason??new DOMException("Task input cancelled","AbortError")),b.addEventListener("abort",c,{once:!0}),b.aborted&&c()});try{return await Promise.race([a,d])}finally{b.removeEventListener("abort",c)}}function bt(a,b,c,d,e=Date.now()){let f=(0,aC.lx)(a),g=(0,bo.Ly)(a,b);return f?f.getUnattended()?{action:"abandon",error:`Task ${b} on '${a}' requires input, but the run is unattended.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"}:e-c>=d?{action:"abandon",error:`Task ${b} on '${a}' was waiting for input for longer than the configured window (${Math.round(d/1e3)}s)${g?`; ${g.outstanding.size} request(s) unanswered`:""}.`,errorType:"task-input-timeout",diagnostic:"input-required-unattended"}:{action:"wait"}:{action:"abandon",error:`Task ${b} on '${a}' requires input, but no attended run is available to answer it.`,errorType:"task-input-required-unattended",diagnostic:"input-required-unattended"}}var bu=c(238861),bv=c(764360);let bw=(0,w.h)("backend/services/mcp/tools");async function bx(a,b,c="model",d){if(bw.debug("Entering listServerTools method"),!a)return bw.warn(`Server ${b} not connected`),{tools:[],error:"Server not connected"};try{bw.info(`Listing tools for server ${b}`);let e=(0,aH.PR)(a.transport)?{timeout:18e4}:void 0,f=void 0===d?await (0,bn.H7)(a,e):aR(a)?await a.listTools({cursor:d},e):await a.request({method:"tools/list",params:{cursor:d}},$.WT,e),g=f.tools.map(a=>({...a,description:a.description||"",inputSchema:a.inputSchema||{type:"object"}})),h=(0,z.zm)(g,c);return bw.verbose(`Processed tools for ${c} audience:`,h),{tools:h,...void 0===f.nextCursor?{}:{nextCursor:f.nextCursor}}}catch(c){if(c instanceof g.Mr)throw c;bw.warn(`Failed to list tools for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{tools:[],error:a.includes("Connection timeout")?a:`Failed to list tools: ${a}`}}}async function by(a,b,d,e,f,j,k,l="host",m,n,o,p,q){var r;let s=q?(0,aC.lx)(b):void 0;if(bw.debug("Entering callTool method"),!a)return bw.warn(`Server ${b} not found`),{success:!1,error:`Server ${b} not found`,statusCode:404};let t=void 0!==f&&f>0?Math.min(1e3*f,0x7fffffff):0x7fffffff,u=!!(0,B.Ck)(a.transport),v=!!(0,aH.PR)(a.transport),w=!1;try{let f,h,r,x,y=!!o||(0,A.isProtectedExecutionServer)(b);if(y&&await (0,A.assertExecutionToolDispatch)(o,b,l),await (0,B.HR)(a,b),y&&await p?.(),"app"===l||"model"===l){let c=await bx(a,b,"all");if(c.error)return{success:!1,error:`Could not verify MCP App access to tool '${d}' on '${b}': ${c.error}`,errorType:"tool-authorization-list",statusCode:502};let e=(0,z.F)(c.tools,b,d,l);if(!e.allowed)return bw.warn(`Rejected ${l} tool call: ${e.error}`),{success:!1,error:e.error,statusCode:e.statusCode}}if(u&&(0,B.MR)(e),v)try{(0,B.MR)(e)}catch{throw new i.Kq("HOST_POLICY_INVALID")}y||u||v||bw.debug(`Original args for tool ${d}:`,e);let C=y||u||v?e:await (0,ad.resolveGlobalVars)(e),D="object"==typeof C&&null!==C?C:{},E=y?(0,A.normalizeExecutionToolArguments)(o,d,D):(f=new Set,h=0,r=()=>{throw new $.Nh($.O4.InvalidParams,"Tool arguments must be bounded JSON data")},x=(a,b)=>{if(++h>1e4||b>32)return r();if(null===a||"string"==typeof a||"boolean"==typeof a)return a;if("number"==typeof a)return Number.isFinite(a)?a:r();if("object"!=typeof a||f.has(a))return r();f.add(a);try{if(Array.isArray(a))return Array.from({length:a.length},(c,d)=>{let e=Object.getOwnPropertyDescriptor(a,String(d));return e&&"value"in e&&void 0!==e.value?x(e.value,b+1):r()});let c=Object.getPrototypeOf(a);if(c!==Object.prototype&&null!==c)return r();return Object.fromEntries(Object.keys(a).flatMap(c=>{let d=Object.getOwnPropertyDescriptor(a,c);return d&&"value"in d?void 0===d.value?[]:[[c,x(d.value,b+1)]]:r()}))}finally{f.delete(a)}},!D||Array.isArray(D)?r():x(D,0));y||u||v||bw.debug(`Normalized args for tool ${d}:`,E),bw.debug(`Calling tool ${d} with SDK timeout ${t}ms`);let F={timeout:t,resetTimeoutOnProgress:!0,maxTotalTimeout:t,...k?{signal:k}:{},onprogress:a=>{y||(u||v||bw.debug(`Progress for tool ${d}: ${a.progress}${void 0!==a.total?`/${a.total}`:""}${a.message?` — ${a.message}`:""}`),j?.(a))}},G=y?{request:!1,reason:"private synchronous profile"}:await bg(a,d);G.request&&bw.info(`Requesting task-augmented execution of ${d} on ${b} (${G.reason})`),w=G.request&&"2026-07-28"===G.negotiation.generation;let H=y?await (0,A.executionToolRequestMeta)(o,b,d,E):void 0,I=G.request?await a3(b):void 0,J={name:d,arguments:E,...G.request&&"2026-07-28"!==G.negotiation.generation?function(a,b="2025-11-25"){return"2026-07-28"===b?{_meta:{"io.modelcontextprotocol/clientCapabilities":{extensions:{[ae.MD]:{}}}}}:{task:{..."number"==typeof a&&a>0?{ttl:a}:{}}}}(G.ttlMs):{},...H?{_meta:H}:m||n?{_meta:{flujo:{...m?{callerNodeId:m}:{},...n?{ownerScope:n}:{}}}}:{}};y&&await p?.(),await (0,B.HR)(a,b),await (0,g.QO)();let K=G.request&&"2026-07-28"===G.negotiation.generation?as(a):void 0;if(w&&!K)throw Error("Modern MCP Tasks session retired before submission");let L=K?await K.callTool(JSON.parse(JSON.stringify(J)),{...bl(F),expectedConversationId:q}):aR(a)?await a.callTool.call(a,J,F):await a.callTool(J,void 0,F);if(y)return await (0,A.assertExecutionExtensionCurrent)(o),{success:!0,data:(0,A.validateExecutionToolResult)(o,d,L)};let M=(0,ae.Qh)(L,{taskRequested:G.request,generation:G.negotiation?.generation});if("protocol-invalid"===M.kind)return bw.warn(`Server ${b} returned an invalid task result for ${d}: ${M.reason}`),{success:!1,error:`Server '${b}' returned an invalid MCP task result: ${M.reason}`,errorType:"task-protocol-invalid",statusCode:502,toolName:d};if("task"===M.kind){let e=bb(),f=e?I??await a3(b):"unnegotiated",h=async()=>{if(await (0,B.HR)(a,b),await (0,g.QO)(),e){let{mcpService:d}=await Promise.resolve().then(c.bind(c,245698));if("unknown"===f||d.getClient(b)!==a||await a3(b)!==f)throw Error("MCP task server connection identity changed")}if(s&&(0,aC.lx)(b)!==s)throw Error("MCP task originating run is no longer current")},i=await br({client:a,serverName:b,serverIdentity:f,toolName:d,args:E,task:M.task,generation:G.negotiation?.generation,assertCurrent:h,timeoutMs:t,...k?{signal:k}:{},...j?{onProgress:j}:{},ownership:{...q?{conversationId:q}:{},...m?{nodeId:m}:{},...n?{ownerScope:n}:{},source:l},...s?{originatingInputContext:s}:{},persist:e,supportsCancel:G.negotiation.supportsCancel||!G.negotiation.supported});return void 0===i.data?i:{...i,data:(0,bv.iL)(i.data,n)}}return{success:!0,data:(0,bv.iL)(L,n)}}catch(l){if(l instanceof g.Mr)throw l;if(l instanceof i.Kq)return{success:!1,error:l.code,errorType:"mcp-host-consent",statusCode:403};if(l instanceof h.Bk)return{success:!1,error:l.code,errorType:"mcp-isolation",statusCode:"ISOLATION_UNAVAILABLE"===l.code?503:403};if(v)return{success:!1,error:"TRUSTED_HOST_TOOL_FAILED",errorType:"mcp-host-consent",statusCode:502};if(u)return{success:!1,error:"ISOLATED_TOOL_FAILED",errorType:"mcp-isolation",statusCode:502};if(o||(0,A.isProtectedExecutionServer)(b))return{success:!1,error:l instanceof A.ExecutionExtensionError?l.code:"execution_tool_unavailable",statusCode:l instanceof A.ExecutionExtensionError?l.status:503,errorType:"execution-call"};if(w&&!k?.aborted&&l instanceof Error&&"ZodError"===l.name)return{success:!1,error:`Server '${b}' returned an invalid modern MCP Tasks result.`,errorType:"task-protocol-invalid",statusCode:502,toolName:d};bw.warn(`Failed to call tool ${d} on server ${b}:`,l);let c=l instanceof Error?l.message:"Unknown error",e=500;if(k?.aborted)return{success:!1,error:`Tool '${d}' call was cancelled.`,errorType:"cancelled",toolName:d};if(l instanceof an||(r=l)instanceof $.Nh&&r.code===$.O4.RequestTimeout||r instanceof aa.Fp&&r.code===aa.OH.RequestTimeout){let a=Math.round(t/1e3);return bw.warn(`Tool ${d} execution timed out after ${a} seconds`),{success:!1,error:`Tool execution timed out after ${a} seconds`,errorType:"timeout",toolName:d,timeout:a,statusCode:408}}let f=(0,bu.AO)(a)?(0,aM.W2)(l):void 0;if(f){(0,bu.Mi)(b);try{await (0,bu.DK)(a,b,{force:!0})}catch(a){bw.warn(`Failed to refresh mcp-stdio-oauth status after revocation on ${b}:`,a)}return{success:!1,error:f.message?f.message:"External account authorization is required. Open the MCP page to authenticate.",errorType:"stdio-oauth-required",statusCode:428,requiresAuthentication:!0}}if(c.includes("401")||c.includes("Unauthorized")||c.includes("invalid_token")||c.includes("token_expired"))return bw.info(`OAuth authentication error detected for tool ${d} on server ${b}`),{success:!1,error:"OAuth authentication failed or tokens have expired. Please re-authenticate the server.",statusCode:401,requiresAuthentication:!0};(c.includes("404")||c.includes("Not Found"))&&(bw.info(`404 error detected for tool ${d} on server ${b} - may indicate OAuth issues`),e=404,c="Tool endpoint not found (404). This may indicate OAuth authentication issues or the server may not be properly configured.");let j=ab(l);return j?(c=`Failed to call tool: ${c} (Code: ${j.code})`,e=ac(j.code)):c=`Failed to call tool: ${c}`,{success:!1,error:c,statusCode:e,...j?{protocolError:j}:{}}}}async function bz(a,b){let c,d,e=[],f=new Set;for(let g=0;g<1e3;g++){let g=await a(c);if(d??=g,e.push(...b(g)),void 0===g.nextCursor)return{firstPage:d,entries:e};if(f.has(g.nextCursor))throw Error("MCP catalog returned a repeated cursor");f.add(g.nextCursor),c=g.nextCursor}throw Error("MCP catalog exceeded 1000 pages")}async function bA(a,b,c){if(void 0!==b)return a.listResources({cursor:b},c);let{firstPage:d,entries:e}=await bz(b=>a.listResources(void 0===b?void 0:{cursor:b},c),a=>a.resources),{nextCursor:f,...g}=d;return{...g,resources:e}}async function bB(a,b,c){if(void 0!==b)return a.listResourceTemplates({cursor:b},c);let{firstPage:d,entries:e}=await bz(b=>a.listResourceTemplates(void 0===b?void 0:{cursor:b},c),a=>a.resourceTemplates),{nextCursor:f,...g}=d;return{...g,resourceTemplates:e}}async function bC(a,b){let{firstPage:c,entries:d}=await bz(c=>a.listPrompts(void 0===c?void 0:{cursor:c},b),a=>a.prompts),{nextCursor:e,...f}=c;return{...f,prompts:d}}let bD=(0,w.h)("backend/services/mcp/resources");async function bE(a,b,c){if(bD.debug("Entering listServerResources method"),!a)return bD.warn(`Server ${b} not connected`),{resources:[],error:"Server not connected"};try{bD.info(`Listing resources for server ${b}`);let d=await bA(a,c,(0,aH.PR)(a.transport)?{timeout:18e4}:void 0),e=d.resources||[];return bD.verbose("Processed resources:",e),{resources:e,...void 0===d.nextCursor?{}:{nextCursor:d.nextCursor}}}catch(c){if(ab(c)?.code===-32601)return bD.debug(`Server ${b} does not support resources/list`),{resources:[]};bD.warn(`Failed to list resources for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{resources:[],error:a.includes("Connection timeout")?a:`Failed to list resources: ${a}`}}}async function bF(a,b,c){if(bD.debug("Entering listServerResourceTemplates method"),!a)return bD.warn(`Server ${b} not connected`),{resourceTemplates:[],error:"Server not connected"};try{bD.info(`Listing resource templates for server ${b}`);let d=await bB(a,c,(0,aH.PR)(a.transport)?{timeout:18e4}:void 0);return{resourceTemplates:d.resourceTemplates||[],...void 0===d.nextCursor?{}:{nextCursor:d.nextCursor}}}catch(c){if(ab(c)?.code===-32601)return bD.debug(`Server ${b} does not support resources/templates/list`),{resourceTemplates:[]};bD.warn(`Failed to list resource templates for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{resourceTemplates:[],error:a.includes("Connection timeout")?a:`Failed to list resource templates: ${a}`}}}async function bG(a,b,c){if(bD.debug("Entering readResource method"),!a)return bD.warn(`Server ${b} not found`),{success:!1,error:`Server ${b} not found`,statusCode:404};try{let d=await (0,ad.resolveGlobalVars)(c);bD.info(`Reading resource ${d} from server ${b}`);let e=await a.readResource({uri:d});return{success:!0,data:e}}catch(f){bD.warn(`Failed to read resource ${c} on server ${b}:`,f);let a=f instanceof Error?f.message:"Unknown error",d=500,e=ab(f);return e?(a=`Failed to read resource: ${a} (Code: ${e.code})`,-32601===e.code?d=404:-32602===e.code&&(d=400)):a=`Failed to read resource: ${a}`,{success:!1,error:a,statusCode:e?ac(e.code):d,...e?{protocolError:e}:{}}}}let bH=(0,w.h)("backend/services/mcp/prompts");async function bI(a,b){if(bH.debug("Entering listServerPrompts method"),!a)return bH.warn(`Server ${b} not connected`),{prompts:[],error:"Server not connected"};try{return bH.info(`Listing prompts for server ${b}`),{prompts:(await bC(a)).prompts||[]}}catch(c){if(ab(c)?.code===-32601)return bH.debug(`Server ${b} does not support prompts/list`),{prompts:[]};bH.warn(`Failed to list prompts for server ${b}:`,c);let a=c instanceof Error?c.message:"Unknown error";return{prompts:[],error:a.includes("Connection timeout")?a:`Failed to list prompts: ${a}`}}}async function bJ(a,b,c,d){if(bH.debug("Entering getPrompt method"),!a)return bH.warn(`Server ${b} not found`),{success:!1,error:`Server ${b} not found`,statusCode:404};try{let e;if(d&&Object.keys(d).length>0){let a=await (0,ad.resolveGlobalVars)(d);e="object"==typeof a&&null!==a?a:void 0}bH.info(`Getting prompt ${c} from server ${b}`);let f=await a.getPrompt({name:c,arguments:e});return{success:!0,data:f}}catch(f){bH.warn(`Failed to get prompt ${c} on server ${b}:`,f);let a=f instanceof Error?f.message:"Unknown error",d=500,e=ab(f);return e?(a=`Failed to get prompt: ${a} (Code: ${e.code})`,-32601===e.code?d=404:-32602===e.code&&(d=400)):a=`Failed to get prompt: ${a}`,{success:!1,error:a,statusCode:e?ac(e.code):d,...e?{protocolError:e}:{}}}}var bK=c(257975),bL=c(476427);class bM extends Error{constructor(a){super(`MCP Skills are unavailable: ${a}`),this.name="McpSkillsUnsupportedError",this.reason=a}}function bN(a,b){if(!b||!a)return;let c=a.getServerCapabilities();return(0,E.zT)(c?.extensions?.[E.ET])}function bO(a,b){if(!b)throw new bM("disabled");if(!a)throw new bM("extension-not-negotiated");let c=bN(a,b);if(!c)throw new bM("extension-not-negotiated");return{client:a,capability:c}}async function bP(a){try{return await a()}catch(a){if(ab(a)?.code===-32601)throw new bM("method-not-found");throw a}}async function bQ(a,b,c){let d=bO(a,b);return bP(async()=>await d.client.request({method:"skills/list",params:void 0===c?{}:{cursor:c}},E.lX))}async function bR(a,b,c){let d=bO(a,b),e=(0,E.Bw)(c).normalizedUri;return bP(async()=>{let a=await d.client.request({method:"skills/get",params:{uri:e}},E.Kg);if(a.skill.uri!==e)throw Error("skills/get returned a different skill URI");return a})}async function bS(a,b,c,d){let e=bO(a,b);if(!0!==e.capability.directoryRead)throw new bM("directory-read-not-negotiated");let f=(0,E.sm)(c);return bP(async()=>await e.client.request({method:"resources/directory/read",params:{uri:f,...void 0===d?{}:{cursor:d}}},E.Pd))}async function bT(a,b,c,d){let e=bO(a,b),f=function(a,b){if("dynamic"===a.resources)throw Error("Dynamic MCP Skills cannot be integrity-verified");let c=(0,E.sm)(b),d=a.resources.find(a=>a.uri===c);if(!d)throw Error("Resource is not declared by the held MCP Skill entry");return d}(c,d),g=(await e.client.readResource({uri:f.uri})).contents;if(!Array.isArray(g)||1!==g.length)throw Error("MCP Skill resource read must return exactly one content item");let h=g[0];if(null===h||"object"!=typeof h||Array.isArray(h))throw Error("MCP Skill resource content is malformed");if(void 0!==h.uri&&(0,E.sm)(h.uri)!==f.uri)throw Error("MCP Skill resource read returned a different URI");let i=function(a){let b="string"==typeof a.text;if(b===("string"==typeof a.blob))throw Error("MCP Skill resource must contain exactly one of text or blob");return b?{bytes:Buffer.from(a.text,"utf8"),text:a.text}:{bytes:function(a){if(a.length%4!=0||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(a))throw Error("MCP Skill resource contains invalid base64");return Buffer.from(a,"base64")}(a.blob),blob:a.blob}}(h);if(i.bytes.byteLength!==f.size)throw Error("MCP Skill resource size verification failed");if(`sha256:${(0,I.createHash)("sha256").update(i.bytes).digest("hex")}`!==f.digest)throw Error("MCP Skill resource digest verification failed");return{uri:f.uri,digest:f.digest,size:f.size,..."string"==typeof h.mimeType?{mimeType:h.mimeType}:{},...i,verified:!0}}async function bU(a,b,c,d){if("dynamic"===d.resources)throw Error("Dynamic MCP Skills cannot be integrity-verified");let e=d.resources,f=Array(e.length),g=0,h=async()=>{for(;;){let c=g;if(g+=1,c>=e.length)return;f[c]=await bT(a,b,d,e[c].uri)}};await Promise.all(Array.from({length:Math.min(4,e.length)},()=>h()));let i=f.find(a=>a.uri===d.uri);if(!i||void 0===i.text)throw Error("MCP Skill SKILL.md must be textual content");return!function(a,b){let c,d=a.replace(/\r\n/g,"\n");if(!d.startsWith("---\n"))throw Error("MCP Skill SKILL.md must start with YAML frontmatter");let e=d.indexOf("\n---",4);if(e<0)throw Error("MCP Skill SKILL.md frontmatter is not terminated");let f=d.slice(4,e);try{c=(0,bL.qg)(f)}catch{throw Error("MCP Skill SKILL.md frontmatter is invalid YAML")}if(null===c||"object"!=typeof c||Array.isArray(c)||!(0,bK.isDeepStrictEqual)(c,b.frontmatter))throw Error("MCP Skill SKILL.md frontmatter does not match its advertised entry")}(i.text,d),{identity:{serverName:c,skillUri:d.uri},protocolRevision:E.v$,entry:d,manifest:i,resources:f,verification:"sha256",trust:"untrusted-external-content"}}function bV(){return global.__mcp_skill_approvals??=new Map,global.__mcp_skill_approvals}var bW=c(23052),bX=c(342518),bY=c(224037),bZ=c(47877);let b$="The server destination or transport changed. Re-enter or remove the saved secret headers before testing or saving.";function b_(a){return"streamable"===a.transport||"sse"===a.transport}function b0(a){if(b_(a)&&"string"==typeof a.serverUrl)try{let b=new URL(a.serverUrl);if("https:"!==b.protocol&&"http:"!==b.protocol||b.username||b.password)return;return b.hash="",b.href}catch{return}}function b1(a,b){if(!b||a.transport!==b.transport)return!1;let c=b0(a);return void 0!==c&&c===b0(b)}function b2(a,b){return Object.entries(a??{}).some(([a,c])=>{if(!a)return!1;let{value:d,isSecret:e}=(0,r.at)(c,a),f=b?.[a];if(!e||!(0,r.uh)(d)||void 0===f)return!1;let g=(0,r.at)(f,a).value;return!!g&&!(0,r.uh)(g)})}var b3=c(593330);function b4(a){return"stdio"===a.transport&&(0,b3.G)(a.command,a.args??[])}var b5=c(259241);let b6=(0,w.h)("backend/services/mcp/resourceNotifications"),b7=/^[A-Za-z0-9_-]{1,64}$/;function b8(a,b,c,d){let e=d?.conversationId?.trim();if("model"===c&&"create_ticket_for_human"===b&&e&&b7.test(e)&&a?.transport==="stdio"&&(0,C.AW)(a)?.packageId==="@mario.andreschak/mcp-flujo")return e}function b9(a,b){let c=(0,x.getCurrentWorkspace)();if(c===x.DEFAULT_WORKSPACE)return b;let d=global.__mcp_workspace_registries??=new Map,e=d.get(c);e||(e=new Map,d.set(c,e));let f=e.get(a);return f||(f=b instanceof Set?new Set:new Map,e.set(a,f)),f}function ca(a){return{success:!1,error:a.error,statusCode:a.statusCode,errorType:a.errorType}}void 0===global.__mcp_clients&&(global.__mcp_clients=new Map),void 0===global.__mcp_connecting&&(global.__mcp_connecting=new Set),void 0===global.__mcp_approval_failures&&(global.__mcp_approval_failures=new Map),void 0===global.__mcp_starting_up&&(global.__mcp_starting_up=!0),void 0===global.__mcp_active_transports&&(global.__mcp_active_transports=new Map),void 0===global.__mcp_client_generation&&(global.__mcp_client_generation=new Map),void 0===global.__mcp_tool_schema_hash&&(global.__mcp_tool_schema_hash=new Map);let cb=(0,w.h)("backend/services/mcp/index");function cc(a){let b=a,c=new Set;for(;b&&"object"==typeof b&&!c.has(b);){c.add(b);let a=b.__flujoInnerTransport;if(!a)break;b=a}return b}function cd(a){if("streamable"!==a.transport&&"sse"!==a.transport)return!1;let b=a.headers;return!!b&&Object.entries(b).some(([a,b])=>"authorization"===a.toLowerCase()&&(0,r.at)(b,a).value.trim().length>0)}class ce{get stderrLogs(){return b9("stderrLogs",this.stderrLogsBase)}get approvalFailures(){return b9("approvalFailures",global.__mcp_approval_failures)}get lastConnectionError(){return b9("lastConnectionError",this.lastConnectionErrorBase)}get inFlightConnects(){return b9("inFlightConnects",this.inFlightConnectsBase)}get connectionRetryTimers(){return b9("connectionRetryTimers",this.connectionRetryTimersBase)}get connectionRetryAttempts(){return b9("connectionRetryAttempts",this.connectionRetryAttemptsBase)}get resourceListVersion(){return b9("resourceListVersion",this.resourceListVersionBase)}get pendingResourceUpdates(){return b9("pendingResourceUpdates",this.pendingResourceUpdatesBase)}async clearLegacyInferredOAuthScopesForHeaderAuth(a){try{let b=await this.loadServerConfigs();if(!Array.isArray(b))return;let c=b.findIndex(b=>b.name===a);if(-1===c||"streamable"!==b[c].transport)return;let d=b[c];if(!cd(d)||d.oauthScopes?.length!==1||"read"!==d.oauthScopes[0]||d.oauthClientId||d.oauthClientSecret||d.oauthClientMetadata||d.oauthClientInformation||d.oauthTokens||d.oauthCodeVerifier||d.oauthState||d.authorizationUrl)return;b[c]={...d,oauthScopes:void 0},await (0,g.QO)();let e=await (0,F.saveConfig)(new Map(b.map(a=>[a.name,a])));e.success?cb.info(`Removed stale inferred OAuth scopes from header-authenticated server ${a}`):cb.warn(`Failed to remove stale inferred OAuth scopes from ${a}: ${e.error}`)}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;cb.warn(`Failed to clean inferred OAuth scopes for ${a}: ${b instanceof Error?b.message:String(b)}`)}}get clients(){return b9("clients",global.__mcp_clients)}get connectingServers(){return b9("connectingServers",global.__mcp_connecting)}get activeTransports(){return b9("activeTransports",global.__mcp_active_transports)}get clientGenerations(){return b9("clientGenerations",global.__mcp_client_generation)}get toolSchemaHashes(){return b9("toolSchemaHashes",global.__mcp_tool_schema_hash)}static{this.MAX_STDERR_LOG_ENTRIES=200}appendStderrLog(a,b){let c=this.stderrLogs.get(a)||[];c.push(b),c.length>ce.MAX_STDERR_LOG_ENTRIES&&c.splice(0,c.length-ce.MAX_STDERR_LOG_ENTRIES),this.stderrLogs.set(a,c)}deregisterClient(a){let b=this.clients.get(a);b&&function(a){let b=d.get(a);for(let c of(d.delete(a),b?.values()??[]))c.then(a=>a.close()).catch(()=>{});b?.clear()}(b),this.clients.delete(a),this.activeTransports.delete(a),(0,bu.hj)(a),(0,aO.HW)(a)}onResourceListChanged(a){let b=this.resourceListVersion.get(a)??0;this.resourceListVersion.set(a,b+1),cb.debug(`onResourceListChanged: server=${a} version=${b+1}`)}onResourceUpdated(a,b){let c=this.pendingResourceUpdates.get(a)??new Set;c.add(b),this.pendingResourceUpdates.set(a,c),cb.debug(`onResourceUpdated: server=${a} uri=${b}`)}getResourceListVersion(a){return this.resourceListVersion.get(a)??0}async subscribeToResource(a,b){if(!(0,f.VU)())try{let c=this.getClient(a);if(!c||await e(c,b))return;let d=c.getServerCapabilities?.();if(!d?.resources?.subscribe)return;await c.subscribeResource({uri:b}),cb.debug(`subscribeToResource: server=${a} uri=${b}`)}catch(c){if(c instanceof g.Mr)throw c;cb.debug(`subscribeToResource: ignored error for ${a}/${b}:`,c)}}clearRetryTimer(a){let b=this.connectionRetryTimers.get(a);b&&(clearTimeout(b),this.connectionRetryTimers.delete(a),cb.debug(`Cleared retry timer for server ${a}`))}scheduleConnectionRetry(a,b){this.clearRetryTimer(a);let c=this.connectionRetryAttempts.get(a)||0;if(c>=5){cb.warn(`Maximum retry attempts (5) reached for server ${a}, stopping retries`),this.connectionRetryAttempts.delete(a);return}let d=Math.min(5e3*Math.pow(2,c),3e5);cb.info(`Scheduling connection retry for server ${a} in ${d}ms (attempt ${c+1}/5)`);let e=setTimeout((0,x.bindToCurrentWorkspace)(async()=>{cb.info(`Attempting to reconnect server ${a} (attempt ${c+1}/5)`);let b=await this.getServerConfig(a);if(!b){cb.info(`Server ${a} configuration not found, stopping retry attempts`),this.connectionRetryAttempts.delete(a);return}if(b.disabled){cb.info(`Server ${a} is now disabled, stopping retry attempts`),this.connectionRetryAttempts.delete(a);return}let d=this.getClient(a);if(d)try{await d.ping({timeout:5e3}),cb.info(`Server ${a} is already connected and responsive, cancelling retry`),this.connectionRetryAttempts.delete(a);return}catch(b){cb.warn(`Server ${a} has a registered client but ping failed (${b instanceof Error?b.message:String(b)}); reconnecting from scratch`)}this.connectionRetryAttempts.set(a,c+1);try{let e=d?await this.forceReconnect(a):await this.connectServer(b);if(e.success)cb.info(`Successfully reconnected server ${a} after ${c+1} attempts`),this.connectionRetryAttempts.delete(a);else{if(cb.warn(`Failed to reconnect server ${a}: ${e.error}`),e.requiresAuthentication||e.requiresApproval){cb.info(`Server ${a} needs user action, stopping retry attempts`),this.connectionRetryAttempts.delete(a);return}this.scheduleConnectionRetry(a,b)}}catch(c){if(c instanceof g.Mr||c instanceof aG.McpRuntimeAuthorityRetirementError)throw c;if(j(c))return void this.connectionRetryAttempts.delete(a);cb.error(`Error during retry connection for server ${a}:`,c),this.scheduleConnectionRetry(a,b)}}),d);this.connectionRetryTimers.set(a,e)}isStartingUp(){let a=(0,x.getCurrentWorkspace)();return a===x.DEFAULT_WORKSPACE?!0===global.__mcp_starting_up:global.__mcp_starting_up_by_workspace?.get(a)===!0}setStartingUp(a){let b=(0,x.getCurrentWorkspace)();b===x.DEFAULT_WORKSPACE?global.__mcp_starting_up=a:(global.__mcp_starting_up_by_workspace??=new Map).set(b,a),cb.info(`Backend startup state set to: ${a?"starting":"complete"}`)}getClientGeneration(a){return this.clientGenerations.get(a)??0}setToolSchemaHash(a,b,c){this.toolSchemaHashes.set(`${a}\0${b}`,c)}getToolSchemaHash(a,b){return this.toolSchemaHashes.get(`${a}\0${b}`)}getClient(a){let b=this.clients.get(a);if(b&&(0,bX.wk)(b)){cb.warn(`getClient: client for ${a} has a closed/aborted connection — evicting it`),this.clients.delete(a);return}return cb.debug(`getClient: Looking for client: ${a}`,b?"Found":"Not found"),b}async loadServerConfigs(){cb.debug("loadServerConfigs: Entering method");try{let a=await (0,F.loadServerConfigs)();if(!Array.isArray(a))return cb.warn("loadServerConfigs: Received non-array response",a),a;return cb.debug(`loadServerConfigs: Loaded ${a.length} server configs`),a}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return cb.warn("loadServerConfigs: Failed to load server configs:",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async getServerConfig(a){let b=(0,A.executionProtectedServerConfig)(a);if(b)return b;cb.debug(`getServerConfig: Looking up config for server ${a}`);let c=await this.loadServerConfigs();if(!Array.isArray(c))return cb.warn(`getServerConfig: Failed to load configs for ${a}:`,c.error),null;let d=c.find(b=>b.name===a);return d||(cb.warn(`getServerConfig: Server ${a} not found in configs`),null)}async isServerDisabled(a){let b=await this.getServerConfig(a);return b?.disabled===!0}async connectServer(a,b){if("string"!=typeof a&&!(0,D.Mt)(a.transport))return{success:!1,error:D.ZW,statusCode:400};let c="string"==typeof a?a:a.name;try{if(b){if(await (0,A.assertExecutionExtensionCurrent)(b),c!==(0,A.executionExtensionProtectedServer)(b))throw new A.ExecutionExtensionError("execution_mcp_server_forbidden")}else if((0,A.isProtectedExecutionServer)(c))throw new A.ExecutionExtensionError("trusted_execution_context_required")}catch(a){return{success:!1,error:a instanceof A.ExecutionExtensionError?a.code:"execution_authorization_unavailable",statusCode:a instanceof A.ExecutionExtensionError?a.status:503,errorType:"execution-authorization"}}await (0,g.QO)();try{(0,aG.assertMcpRuntimeAuthorityRetired)(c)}catch(a){if(a instanceof aG.McpRuntimeAuthorityRetirementError)return{success:!1,error:"MCP_AUTHORITY_RETIREMENT_UNCERTAIN",errorType:"mcp-authority-retirement",statusCode:503};throw a}return P(c,async()=>{await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(c);let d=this.getClient(c),e=this.connectServerInternal(a,b).finally(()=>{this.inFlightConnects.delete(c)});this.inFlightConnects.set(c,e);let f=await e;if(f.success){let b=void 0!==d&&this.getClient(c)===d;!function(a,b,c=!1){let d=M(a),e=!c||0===d.generation;e&&(d.generation+=1),d.shutdownReceipt=void 0,d.state="warm",(e||void 0!==b)&&(d.configFingerprint=b),d.retryAttempts=0,d.lastError=void 0,e&&(d.warmSince=Date.now()),d.lastUsedAt=Date.now(),d.generation}(c,this.configFingerprint(a),b)}else{let a=this.activeTransports.has(c)&&!this.clients.has(c);!function(a,b,c=!1){let d=M(a);d.state="error",d.lastError=b,d.connectFailures=Math.min(d.connectFailures+1,Number.MAX_SAFE_INTEGER),c&&(d.handshakeFailures+=1),d.retryAttempts+=1}(c,f.error??"unknown connection failure",a)}return f})}configFingerprint(a){if("string"!=typeof a)return[a.transport,a.command??"",(a.args??[]).join(" "),a.url??"",a.websocketUrl??"",a.rootPath??"",a.disabled?"disabled":"enabled"].join("\0")}async assertProtectedConnectionIntent(a,b){if(await (0,A.assertExecutionExtensionCurrent)(a),b.name!==(0,A.executionExtensionProtectedServer)(a))throw new A.ExecutionExtensionError("execution_mcp_server_forbidden");let c=await this.getServerConfig(b.name);if(!c)throw new A.ExecutionExtensionError("execution_mcp_server_config_missing");(0,A.assertExecutionServerConfig)(c);let d=await (0,aG.resolveConfigHeaders)(c);if((0,A.assertExecutionServerConfig)(d),await (0,A.assertExecutionExtensionCurrent)(a),(0,aG.protectedConfigFingerprint)(d)!==(0,aG.protectedConfigFingerprint)(b))throw new A.ExecutionExtensionError("execution_mcp_server_config_changed")}async connectServerInternal(a,b){let c,d,e,f;if("string"==typeof a){cb.info(`connectServer: Looking up config for server ${a}`);let b=await this.getServerConfig(a);if(!b)return cb.warn(`connectServer: Server ${a} not found in configs`),{success:!1,error:`Server configuration for "${a}" not found. The server may have been deleted or not properly configured.`};c=b}else c=a;let i="string"==typeof a?c:await this.getServerConfig(c.name),l=i??c;if(!(0,D.Mt)(c.transport)||!(0,D.Mt)(l.transport))return{success:!1,error:D.ZW,statusCode:400};if((i??c).disabled)return cb.info(`connectServer: Server ${c.name} is disabled — refusing to create a client/transport`),this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name),{success:!1,error:`Server '${c.name}' is disabled. Enable it on the MCP page to use it.`};let m=(0,k.A)();cb.info(`connectServer: Starting connection for server ${c.name} [RequestID: ${m}]`),this.connectingServers.add(c.name);try{this.stderrLogs.set(c.name,[]),b&&await (0,A.assertExecutionExtensionCurrent)(b),c=await (0,aG.resolveConfigHeaders)(c),await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(c.name);let a=(0,A.isProtectedExecutionServer)(c.name);a&&(0,A.assertExecutionServerConfig)(c),b&&await this.assertProtectedConnectionIntent(b,c);let i=!a&&await aQ()&&"websocket"!==c.transport,j=await (0,bW.SZ)(c);b&&await this.assertProtectedConnectionIntent(b,c);let k={enableRuntimeBroker:!0,isolateRuntimeHome:j},l=this.clients.get(c.name);if(l){let{needsNewClient:d,reason:e}=(0,aG.shouldRecreateClient)(l,c,i,k),f=a&&(0,aG.clientProtectedConfigFingerprint)(l)!==(0,aG.protectedConfigFingerprint)(c);if(!d&&!f)return b&&await this.assertProtectedConnectionIntent(b,c),await (0,B.HR)(l,c.name,c),cb.info(`connectServer: Server ${c.name} is already connected`),this.lastConnectionError.delete(c.name),this.approvalFailures.delete(c.name),this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name),await this.clearLegacyInferredOAuthScopesForHeaderAuth(c.name),{success:!0};cb.info(`connectServer: Existing client for ${c.name} is stale (${f?"protected config identity changed":e}), recreating`),this.deregisterClient(c.name);try{let a=await (0,aG.safelyCloseClient)(l,c.name,c);if(a.isolation?.cleanupOutcome==="unknown")throw new h.Bk("ISOLATION_UNAVAILABLE")}catch(a){if(a instanceof aG.McpRuntimeAuthorityRetirementError||a instanceof g.Mr||a instanceof h.Bk)throw a;cb.debug(`connectServer: error closing stale client for ${c.name}: ${a instanceof Error?a.message:String(a)}`)}l=void 0}b&&await this.assertProtectedConnectionIntent(b,c),await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(c.name),l=i?aS(c,(0,x.bindToCurrentWorkspace)(()=>{this.getClient(c.name)===l&&this.onResourceListChanged(c.name)})):(0,aG.createNewClient)(c),b&&(f=l);let m=i?aU(c,k):(0,aG.createTransport)(c,k);if(d=l,e=m,"stdio"===c.transport&&(0,bu.hH)(l,c.name,i?aV.get(m):void 0),i){let a=l.setNotificationHandler?.bind(l);a&&(a("notifications/resources/list_changed",(0,x.bindToCurrentWorkspace)(()=>{this.getClient(c.name)===l&&this.onResourceListChanged(c.name)})),a("notifications/resources/updated",(0,x.bindToCurrentWorkspace)(a=>{let b=a?.params?.uri;b&&this.getClient(c.name)===l&&this.onResourceUpdated(c.name,b)})))}else!function(a,b,c,d){try{a.setNotificationHandler($.hh,a=>{b6.debug(`resourceListChanged notification received for ${b}`),c(b)})}catch(a){b6.warn(`registerResourceNotificationHandlers: failed to register list_changed for ${b}`,a)}if(d)try{a.setNotificationHandler($.cL,a=>{let c=a.params?.uri;c&&(b6.debug(`resourceUpdated notification received for ${b} uri=${c}`),d(b,c))})}catch(a){b6.warn(`registerResourceNotificationHandlers: failed to register resource_updated for ${b}`,a)}}(l,c.name,(0,x.bindToCurrentWorkspace)(a=>this.onResourceListChanged(a)),(0,x.bindToCurrentWorkspace)((a,b)=>this.onResourceUpdated(a,b)));let n=cc(m).stderr;if(n&&"function"==typeof n.on){let a=c.name;n.on("data",(0,x.bindToCurrentWorkspace)(b=>{let c=b.toString();cb.warn(`stderr: [${a}]: ${c}`),this.appendStderrLog(a,c)}))}if(m.onclose=(0,x.bindToCurrentWorkspace)(()=>{this.activeTransports.get(c.name)!==m?cb.debug(`connectServer: ignoring close event from a stale/deregistered transport for ${c.name}`):(cb.warn(`connectServer: Connection closed for server ${c.name}`),this.deregisterClient(c.name),this.getServerConfig(c.name).then(a=>{!a||a.disabled?cb.info(`Server ${c.name} is now disabled, skipping reconnection logic`):(cb.info(`Connection closed for enabled server ${c.name}, scheduling reconnection`),this.scheduleConnectionRetry(c.name,a))}).catch(a=>{cb.warn(`Error checking server config for ${c.name} during onclose:`,a)}))}),m.onerror=(0,x.bindToCurrentWorkspace)(a=>{if((0,bX.lO)(a))return void cb.debug(`connectServer: transient SSE stream disconnect for ${c.name} (self-healing, ignored): ${a instanceof Error?a.message:String(a)}`);if(this.activeTransports.get(c.name)!==m)return void cb.debug(`connectServer: ignoring error event from a stale/deregistered transport for ${c.name}`);if(cb.error(`connectServer: Transport error for server ${c.name}:`),a instanceof Error){cb.error(`Error name: ${a.name}`),cb.error(`Error message: ${a.message}`),cb.error(`Error stack: ${a.stack}`);let b=a.code;void 0!==b&&cb.error(`Error code: ${b}`),cb.error(`Error chain: ${(0,bX.jf)(a)}`)}else if(a&&"object"==typeof a){let b=Object.getPrototypeOf(a),c="string"==typeof b?.constructor?.name?b.constructor.name:"Unknown";cb.error(`Error type: ${typeof a}`),cb.error(`Error constructor: ${c}`);let d=Object.getOwnPropertyNames(a);d.length>0?(cb.error(`Error properties: ${d.join(", ")}`),d.forEach(b=>{try{let c=a[b];cb.error(` ${b}: ${"function"==typeof c?"[Function]":JSON.stringify(c)}`)}catch(a){cb.error(` ${b}: [Unable to serialize: ${a}]`)}})):cb.error("Error object has no enumerable properties");try{let b=JSON.stringify(a);cb.error(`JSON stringified error: ${b}`)}catch(a){cb.error(`Cannot JSON stringify error: ${a}`)}}else cb.error(`Error value: ${String(a)} (type: ${typeof a})`);this.appendStderrLog(c.name,`Transport error: ${(0,bX.jf)(a)}`),this.deregisterClient(c.name),this.getServerConfig(c.name).then(a=>{!a||a.disabled?cb.info(`Server ${c.name} is now disabled, skipping reconnection after transport error`):(cb.info(`Transport error for enabled server ${c.name}, scheduling reconnection`),this.scheduleConnectionRetry(c.name,a))}).catch(a=>{cb.warn(`Error checking server config for ${c.name} during onerror:`,a)})}),await (0,g.QO)(),b&&await this.assertProtectedConnectionIntent(b,c),await l.connect(m),b&&await this.assertProtectedConnectionIntent(b,c),"stdio"===c.transport&&i&&aW(m),this.clients.set(c.name,l),this.activeTransports.set(c.name,m),this.clientGenerations.set(c.name,this.getClientGeneration(c.name)+1),b&&await this.assertProtectedConnectionIntent(b,c),(0,bu.AO)(l))try{await (0,bu.DK)(l,c.name,{force:!0})}catch(a){if(a instanceof g.Mr)throw a;cb.warn(`mcp-stdio-oauth readiness probe failed for ${c.name}:`,a)}b&&await this.assertProtectedConnectionIntent(b,c),this.lastConnectionError.delete(c.name),this.approvalFailures.delete(c.name),this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name),await this.clearLegacyInferredOAuthScopesForHeaderAuth(c.name),b&&await this.assertProtectedConnectionIntent(b,c);let o=function(a){if(aR(a))try{return a.getNegotiatedProtocolVersion()}catch{return}}(l);return cb.info(`connectServer: Successfully connected to ${c.name}`+(o?` (beta SDK, negotiated MCP protocol ${o})`:"")),{success:!0}}catch(q){let a;if(q instanceof g.Mr){let a=[];if(d&&e){this.deregisterClient(c.name);try{d.transport===e?await (0,aG.safelyCloseClient)(d,c.name,c):await e.close()}catch(b){a.push(b)}let b=e.__flujoRetireRuntimeAuthority;try{b?.()}catch(b){a.push(b)}}if(a.length)throw new g.Mr(AggregateError([q,...a],"MCP denied startup cleanup failed"));throw q}if(q instanceof aG.McpRuntimeAuthorityRetirementError)return{success:!1,error:"MCP_AUTHORITY_RETIREMENT_UNCERTAIN",errorType:"mcp-authority-retirement",statusCode:503};if(b&&f){this.clients.get(c.name)===f&&this.deregisterClient(c.name);try{await (0,aG.safelyCloseClient)(f,c.name,c)}catch{}}if(q instanceof A.ExecutionExtensionError)return{success:!1,error:q.code,statusCode:q.status,errorType:"execution-authorization"};if((0,A.isProtectedExecutionServer)(c.name))return{success:!1,error:"execution_mcp_connect_failed",statusCode:503,errorType:"execution-authorization"};"stdio"===c.transport&&(0,aO.HW)(c.name);let h=j(q);if(h){this.clearRetryTimer(c.name),this.connectionRetryAttempts.delete(c.name);let a=this.approvalFailures.get(c.name);return a?.errorCode!==h.errorCode&&cb.warn(`MCP server ${c.name}: ${h.error}`),this.approvalFailures.set(c.name,h),this.lastConnectionError.set(c.name,h.error),h}this.approvalFailures.delete(c.name),cb.error(`connectServer: Failed to connect to server ${c.name}:`,q);let i=q instanceof Error?q.message:String(q),k=(0,bX.uP)(q),m=(0,bX.Ah)(q),n=cd(l);if(m&&!n&&("streamable"===c.transport||"sse"===c.transport)){let b=c.serverUrl;b&&(a=(await (0,b5.n)(b)).oauthCapable)}if(k||a){if(cb.info(`OAuth authentication error detected for server ${c.name}: ${i}`),"streamable"===c.transport&&a){let a=c;if(!a.oauthScopes||0===a.oauthScopes.length){cb.info(`Dynamically enabling OAuth for server ${c.name} after capability confirmation`);try{let b={...a,oauthScopes:["read"]},d=await this.loadServerConfigs();if(Array.isArray(d)){let a=d.findIndex(a=>a.name===c.name);-1!==a&&(d[a]=b,await (0,F.saveConfig)(new Map(d.map(a=>[a.name,a]))),cb.info(`Updated config for ${c.name} to enable OAuth`))}}catch(a){if(a instanceof g.Mr)throw a;cb.warn(`Failed to update config for ${c.name} to enable OAuth:`,a)}}}return{success:!1,error:"OAuth authentication failed or tokens have expired. Please re-authenticate.",requiresAuthentication:!0,oauthCapable:!0}}if(m)return{success:!1,error:i,requiresAuthentication:!0,oauthCapable:a};let o=this.stderrLogs.get(c.name)||[],p=(0,bX.ox)(q,c,o);return this.lastConnectionError.set(c.name,p),{success:!1,error:p}}finally{this.connectingServers.delete(c.name)}}async testConnection(a,b,c){if(!(0,D.Mt)(a.transport))return{success:!1,error:D.ZW,statusCode:400};cb.info(`testConnection: Testing connection to ${a.name||"(unnamed)"} via ${a.transport} transport`);let d=a=>{try{b?.(a)}catch{}},e=[],f=v(u(a,a)),h=f.stream(),i=new p.StringDecoder("utf8"),k=!1,l=a=>{a&&(e.push(a),d({type:"stderr",data:a}))},m=()=>{k||(k=!0,l(h.write(i.end())),l(h.end()))},n=null,o=null;try{var q;let b,e=a,j=c?.storedName||a.name;if(("streamable"===a.transport||"sse"===a.transport)&&j){let b=await this.loadServerConfigs(),c=Array.isArray(b)?b.find(a=>a.name===j):void 0,f=c?.headers,g=a.headers;if(b2(g,f)&&!b1(a,c))return d({type:"result",success:!1,error:b$}),{success:!1,error:b$,statusCode:400};e={...a,headers:(0,r.x0)(g,f)}}let p=await (0,aG.resolveConfigHeaders)(e);await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(p.name),h=(f=v(u(e,p))).stream();let s=!(0,A.isProtectedExecutionServer)(p.name)&&await aQ()&&"websocket"!==p.transport,t={isolateRuntimeHome:await (0,bW.SZ)(p)};n=s?aS(p):(0,aG.createNewClient)(p),o=s?aU(p,t):(0,aG.createTransport)(p,t),"stdio"===p.transport&&(0,bu.hH)(n,p.name,s?(q=o,aV.get(q)):void 0);let w=cc(o).stderr;w&&"function"==typeof w.on&&w.on("data",a=>{k||l(h.write(i.write(a)))}),o.onerror=a=>{k||l(f.redact(`Transport error: ${(0,bX.jf)(a)}
29
29
  `))},d({type:"status",phase:"spawning",message:"Starting server / opening transport..."});let x=b4(a)?9e4:15e3,y=b4(a),z=new Promise((a,c)=>{b=setTimeout(()=>c(Error(`Connection timeout after ${x/1e3}s`+(y?" — the package may still be downloading via npx/uvx. Try running the Test again (the package is cached after the first download), or verify the command and network access.":""))),x)});d({type:"status",phase:"handshaking",message:"Performing MCP handshake..."});try{await (0,g.QO)(),await Promise.race([n.connect(o),z])}finally{b&&clearTimeout(b)}"stdio"===p.transport&&s&&aW(o),d({type:"status",phase:"listing-tools",message:"Handshake OK — listing tools..."});let B=0;try{let a=await n.listTools();B=Array.isArray(a?.tools)?a.tools.length:0}catch(b){if(b instanceof g.Mr)throw b;cb.debug(`testConnection: connected to ${a.name} but listTools failed: ${f.redact((0,bX.jf)(b))}`)}return cb.info(`testConnection: Successfully connected to ${a.name} (${B} tools)`),m(),d({type:"result",success:!0,data:{toolCount:B}}),{success:!0,data:{toolCount:B}}}catch(k){let b;if(k instanceof g.Mr||k instanceof aG.McpRuntimeAuthorityRetirementError)throw k;m();let c=j(k);if(c)return d({type:"result",success:!1,error:c.error}),c;cb.warn(`testConnection: Failed to connect to ${a.name}:`,f.redact((0,bX.jf)(k)));let h=(0,bX.Ah)(k);if(h&&("streamable"===a.transport||"sse"===a.transport)){let c=a.serverUrl;c&&(b=(await (0,b5.n)(c)).oauthCapable)}let i=(0,bX.ox)(k,a,e.length?[e.join("")]:[],f.redact);return d({type:"result",success:!1,error:i,requiresAuthentication:h,oauthCapable:b}),{success:!1,error:i,requiresAuthentication:h,oauthCapable:b}}finally{if(n)try{await (0,aG.safelyCloseClient)(n,a.name,a,{gracePeriodMs:3e3,killEscalationMs:2e3})}catch(b){if(b instanceof aG.McpRuntimeAuthorityRetirementError||b instanceof g.Mr)throw b;cb.debug(`testConnection: error closing test client for ${a.name}: ${f.redact((0,bX.jf)(b))}`)}}}setNodeRoots(a,b,c){for(let d of(0,aJ.eS)(a,b,c))this.notifyRootsChanged(d)}notifyRootsChanged(a){let b=this.getClient(a);if(!b)return void cb.debug(`notifyRootsChanged: ${a} not connected, skipping notification`);try{b.sendRootsListChanged().catch(b=>{cb.warn(`notifyRootsChanged: failed to notify ${a}:`,b)}),cb.debug(`notifyRootsChanged: sent roots/list_changed to ${a}`)}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;cb.warn(`notifyRootsChanged: failed to notify ${a}:`,b)}}notifyAllRootsChanged(){for(let a of this.clients.keys())this.notifyRootsChanged(a)}async disconnectServer(a){let b,c;cb.debug(`disconnectServer: Entering method for server ${a}`),this.clearRetryTimer(a),this.connectionRetryAttempts.delete(a);try{(0,aG.assertMcpRuntimeAuthorityRetired)(a)}catch(a){if(a instanceof aG.McpRuntimeAuthorityRetirementError)return{success:!1,error:"MCP_AUTHORITY_RETIREMENT_UNCERTAIN",errorType:"mcp-authority-retirement",statusCode:503};throw a}let d=N(a);if(d?.teardownPromise){let b=await d.teardownPromise;try{(0,aG.assertMcpRuntimeAuthorityRetired)(a)}catch(a){if(a instanceof aG.McpRuntimeAuthorityRetirementError)return{success:!1,shutdownReceipt:b,error:"MCP_AUTHORITY_RETIREMENT_UNCERTAIN",errorType:"mcp-authority-retirement",statusCode:503};throw a}return(await (0,g.QO)(),"close_failed"===b.errorClassification)?{success:!1,shutdownReceipt:b,error:"MCP_SHUTDOWN_FAILED",statusCode:503}:{success:!0,shutdownReceipt:b}}if(!this.getClient(a)&&!d?.connectPromise){let b=Q(a);return b?{success:"close_failed"!==b.errorClassification,shutdownReceipt:b,..."close_failed"===b.errorClassification?{error:"MCP_SHUTDOWN_FAILED",statusCode:503}:{}}:(cb.warn(`disconnectServer: Server ${a} not found in clients map`),this.deregisterClient(a),{success:!1,error:`Server ${a} not found`})}try{await (0,g.QO)();let d=await function(a,b,c){let d=M(a);if(d.teardownPromise)return J.debug(`beginTeardown: folding onto in-flight teardown for ${a} (${b})`),d.teardownPromise;let e=Date.now();d.state="stopping",d.teardownReason=b;let f=Promise.resolve().then(async()=>{d.connectPromise&&await d.connectPromise.catch(()=>void 0);let g=d.generation;d.state="stopping";let h={processOwnership:"unknown",exitOutcome:"unknown",forced:!1,errorClassification:"exit_unobserved"};try{let a=await c(d);a&&(h={...h,...a}).forced&&(d.forcedKills+=1)}catch(c){h.errorClassification="close_failed",J.warn(`beginTeardown: close failed for ${a} (${b}): ${c instanceof Error?c.message:String(c)}`)}finally{d.lastTeardownMs=Math.max(0,Date.now()-e),d.generation===g&&(d.state="cold",d.warmSince=void 0,d.configFingerprint=void 0),d.teardownPromise===f&&(d.teardownPromise=void 0)}let i=Object.freeze({schemaVersion:1,runtimeId:d.runtimeId,workspace:d.workspace,serverName:d.serverName,generation:g,observedAt:new Date().toISOString(),durationMs:d.lastTeardownMs,processOwnership:h.processOwnership,exitOutcome:h.exitOutcome,forced:h.forced,errorClassification:h.errorClassification,...h.isolation?.schemaVersion===1&&/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/.test(h.isolation.generation)&&["removed","absent","unknown"].includes(h.isolation.cleanupOutcome)?{isolation:Object.freeze({schemaVersion:1,generation:h.isolation.generation,cleanupOutcome:h.isolation.cleanupOutcome})}:{}});return d.generation===g&&(d.shutdownReceipt=i),i});return d.teardownPromise=f,f}(a,"disconnect",async()=>{let d;try{await (0,g.QO)()}catch(a){throw c=a,a}let e=this.getClient(a);if(this.deregisterClient(a),e){try{d=await this.getServerConfig(a)||void 0}catch(a){c=a}try{let b=await (0,aG.safelyCloseClient)(e,a,d);if(c)throw c;return b}catch(a){throw c=c&&c!==a?new g.Mr(AggregateError([c,a],"MCP teardown failed")):a,a instanceof aG.McpRuntimeAuthorityRetirementError&&(b=a),a}}});if(b)return{success:!1,shutdownReceipt:d,error:"MCP_AUTHORITY_RETIREMENT_UNCERTAIN",errorType:"mcp-authority-retirement",statusCode:503};if(c)throw c;if(await (0,g.QO)(),"close_failed"===d.errorClassification)return{success:!1,shutdownReceipt:d,error:"MCP_SHUTDOWN_FAILED",statusCode:503};return cb.info(`disconnectServer: Disconnected server ${a}`),{success:!0,shutdownReceipt:d}}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;return cb.warn(`disconnectServer: Failed to disconnect server ${a}:`,b),{success:!1,error:`Failed to disconnect server: ${b instanceof Error?b.message:"Unknown error"}`}}}getServerShutdownReceipt(a){return Q(a)}async disconnectAll(a){let b=[],c=[],d=[],e=Array.from(new Set(Array.from(this.clients.keys())));for(let f of(cb.info(`disconnectAll: tearing down ${e.length} MCP server(s) (${a})`),e)){this.clearRetryTimer(f),this.connectionRetryAttempts.delete(f);try{let a=await this.disconnectServer(f);a.shutdownReceipt&&d.push(a.shutdownReceipt),a.success?b.push(f):c.push(f)}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;cb.warn(`disconnectAll: teardown of ${f} threw: ${a instanceof Error?a.message:String(a)}`),c.push(f)}}for(let[a]of Array.from(this.connectionRetryTimers))this.clearRetryTimer(a),this.connectionRetryAttempts.delete(a);return cb.info(`disconnectAll: closed=${b.length} failed=${c.length} (${a})`),{closed:b,failed:c,shutdownReceipts:d}}getLifecycleReport(){let a;return{runtimes:function(a=!1){let b=Date.now();return(a?Array.from(K().values()):O()).map(a=>({server:a.serverName,workspace:a.workspace,state:a.state,generation:a.generation,leases:a.leases,pins:Array.from(a.pins),idleMs:Math.max(0,b-a.lastUsedAt),connectFailures:a.connectFailures,handshakeFailures:a.handshakeFailures,forcedKills:a.forcedKills,lastTeardownMs:a.lastTeardownMs,lastError:a.lastError,shutdownReceipt:a.connectPromise?void 0:a.shutdownReceipt}))}(),pool:(a=Date.now(),{...U(),idleTtlMs:S(),maxWarmServers:T(),servers:O().map(b=>({server:b.serverName,state:b.state,leases:b.leases,pins:Array.from(b.pins),idleMs:Math.max(0,a-b.lastUsedAt)}))}),liveClients:this.clients.size}}async sweepIdleMcpServers(){return[...await Y(this),...await Z(this)]}acquireServerLease(a,b){return W(this,a,b?a=>this.connectServer(a,b):void 0)}pinServer(a,b){X(a,b)}unpinServer(a,b){N(a)?.pins.delete(b)}async forceReconnect(a,b){if(await (0,g.QO)(),(0,aG.assertMcpRuntimeAuthorityRetired)(a),b){let c=this.getClient(a);if(c!==b)return c?{success:!0}:this.connectServer(a);let d=N(a);if(d&&(d.leases>0||d.pins.size>0))return{success:!1,error:`Server '${a}' is in use. Retry discovery when its current work finishes.`}}cb.info(`forceReconnect: Forcing fresh connection for server ${a}`);let c=this.clients.get(a);if(c){this.deregisterClient(a);let b=await this.getServerConfig(a);try{await (0,aG.safelyCloseClient)(c,a,b||void 0)}catch(b){if(b instanceof aG.McpRuntimeAuthorityRetirementError||b instanceof g.Mr)throw b;cb.debug(`forceReconnect: error closing stale client for ${a}: ${b instanceof Error?b.message:String(b)}`)}}return this.connectServer(a)}async listServerTools(a,b="model",c,d){let e,f="string"==typeof c?void 0:c,g="string"==typeof c?c:d;if(cb.debug(`listServerTools: Entering method for server ${a}, audience ${b}`),!f&&(0,A.isProtectedExecutionServer)(a))throw new A.ExecutionExtensionError("trusted_execution_context_required");let h=!1;if(f){if(await (0,A.assertExecutionExtensionCurrent)(f),a!==(0,A.executionExtensionProtectedServer)(f))throw new A.ExecutionExtensionError("execution_mcp_server_forbidden");let b=await this.getServerConfig(a);if(!b)throw new A.ExecutionExtensionError("execution_mcp_server_config_missing");h=!0===b.disabled;let c=await (0,aG.resolveConfigHeaders)(b);if((0,A.assertExecutionServerConfig)(c),await (0,A.assertExecutionExtensionCurrent)(f),!(e=this.getClient(a))||(0,aG.clientProtectedConfigFingerprint)(e)!==(0,aG.protectedConfigFingerprint)(c))throw new A.ExecutionExtensionError("execution_mcp_client_identity_changed")}if(f?h:await this.isServerDisabled(a)){let b=`Server '${a}' is disabled. Enable it on the MCP page to use it.`;return cb.warn(`listServerTools: ${b}`),{tools:[],error:b}}if(f&&this.getClient(a)!==e)throw new A.ExecutionExtensionError("execution_mcp_client_identity_changed");let i=e??this.getClient(a);i||cb.warn(`listServerTools: Client not found for ${a}`);let j=await bx(i,a,b,g);if(f&&(await (0,A.assertExecutionExtensionCurrent)(f),this.getClient(a)!==e))throw new A.ExecutionExtensionError("execution_mcp_client_identity_changed");if(j.error){if(f)return j;cb.warn(`listServerTools: Listing tools for ${a} failed (${j.error}); forcing reconnect and retrying once`);let c=await this.forceReconnect(a);if(!c.success)return cb.warn(`listServerTools: Reconnect for ${a} failed: ${c.error}`),{tools:[],error:c.error||j.error};i=this.clients.get(a),(j=await bx(i,a,b,g)).error?cb.warn(`listServerTools: Retry after reconnect still failed for ${a}:`,j.error):cb.info(`listServerTools: Recovered after reconnect for ${a}; listed ${j.tools.length} tools`)}else cb.info(`listServerTools: Listed ${j.tools.length} tools for ${a}`);return j}async getExternalAuthorizationStatus(a,b=!1){return(0,bu.DK)(this.getClient(a),a,{force:b})}async prepareExternalAuthorization(a,b,c={}){let d=this.getClient(a);if(!d){let b=await this.forceReconnect(a);if(!b.success)throw Error(b.error||`Could not connect to ${a}.`);d=this.getClient(a)}if(!d)throw Error(`MCP server '${a}' is not connected.`);return(0,bu.QF)(d,a,b,c)}confirmExternalAuthorization(a,b){return(0,bu.hm)(a,b)}declineExternalAuthorization(a,b){return(0,bu.x1)(a,b)}cancelExternalAuthorization(a,b){return(0,bu.d4)(a,b)}async callTool(a,b,d,e,i,j,k,l="host",m,n,o){let p=!!o||(0,A.isProtectedExecutionServer)(a);if((0,f.VU)()){let c=(0,f.qE)(`${a}::${b}`,d);try{return{success:!0,data:JSON.parse(c)}}catch{return{success:!0,data:{content:[{type:"text",text:c}]}}}}try{if(p){await (0,A.assertExecutionToolDispatch)(o,a,l);let b=await this.getServerConfig(a);if(!b)throw new A.ExecutionExtensionError("execution_server_policy_mismatch");(0,A.assertExecutionServerConfig)(await (0,aG.resolveConfigHeaders)(b))}}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return{success:!1,error:a instanceof A.ExecutionExtensionError?a.code:"execution_authorization_unavailable",statusCode:a instanceof A.ExecutionExtensionError?a.status:503,errorType:"execution-authorization"}}if(cb.debug(`callTool: Entering method for server ${a}, tool ${b}, source ${l}`),await this.isServerDisabled(a)){let b=`Server '${a}' is disabled. Enable it on the MCP page to use it.`;return cb.warn(`callTool: ${b}`),{success:!1,error:b}}let q=this.getClient(a),r=await this.acquireServerLease(a,o),s=r.lease;s?q=s.client:q||cb.warn(`callTool: Lease acquisition for ${a} failed: ${r.error}`);let t=async()=>{if(!p)return;await (0,A.assertExecutionToolDispatch)(o,a,l);let b=await this.getServerConfig(a);if(!b)throw new A.ExecutionExtensionError("execution_mcp_server_config_missing");(0,A.assertExecutionServerConfig)(b);let c=await (0,aG.resolveConfigHeaders)(b);if((0,A.assertExecutionServerConfig)(c),await (0,A.assertExecutionToolDispatch)(o,a,l),!s||!q||s.isStale()||this.getClient(a)!==q||(0,aG.clientProtectedConfigFingerprint)(q)!==(0,aG.protectedConfigFingerprint)(c))throw new A.ExecutionExtensionError("execution_mcp_client_identity_changed")};try{let f;if(await t(),q&&(0,bu.AO)(q))try{let c=await (0,bu.DK)(q,a,{force:!0});if(c.blockingAuthorization){let d=c.blockingAuthorization,e=d.message||`${d.label} authorization is required. Open the MCP page to authenticate before running this flow.`;return cb.warn(`callTool: blocked ${a}/${b}: ${e}`),{success:!1,error:e,errorType:"stdio-oauth-required",statusCode:428,requiresAuthentication:!0}}}catch(c){if(c instanceof g.Mr)throw c;let b=c instanceof Error?c.message:String(c);return cb.warn(`callTool: mcp-stdio-oauth readiness check failed for ${a}: ${b}`),{success:!1,error:`Could not verify account readiness for '${a}': ${b}`,errorType:"stdio-oauth-status",statusCode:503}}let r="model"===l&&"create_ticket_for_human"===b&&n?.conversationId?await this.getServerConfig(a):null,s=b8(r,b,l,n),u=s?(f=b8(r,b,l,n))?{...d,conversation_id:f}:d:d;await t();try{q&&await (0,B.HR)(q,a,await this.getServerConfig(a))}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return{success:!1,error:a instanceof h.Bk?a.code:"ISOLATION_UNAVAILABLE",errorType:"mcp-isolation",statusCode:a instanceof h.Bk&&"ISOLATION_UNAVAILABLE"!==a.code?403:503}}await (0,g.QO)();let v=await by(q,a,b,u,e,i,k,l,j,m,o,p?t:void 0,n?.conversationId);if(v.success&&s){let a=function(a){if(!a||"object"!=typeof a)return;let b=a.content;if(Array.isArray(b))for(let a of b){if(!a||"object"!=typeof a||"text"!==a.type)continue;let b=a.text;if("string"==typeof b)try{let a=JSON.parse(b);if(!0===a.created&&"string"==typeof a.id&&b7.test(a.id))return a.id}catch{}}}(v.data);if(a)try{let{ticketService:b}=await c.e(50439).then(c.bind(c,50439));await b.stampPersonaAttributionFromTrustedConversation(a,s)}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;cb.error(`callTool: Failed to stamp trusted ticket attribution for ${a}`,b)}}return cb.info(`callTool: Called tool ${b} on ${a}`),v}catch(a){if(p)return{success:!1,error:a instanceof A.ExecutionExtensionError?a.code:"execution_tool_unavailable",statusCode:a instanceof A.ExecutionExtensionError?a.status:503,errorType:"execution-call"};throw a}finally{s?.release()}}async callToolFromApp(a,b,c,d,e,f,g){let h=await this.checkMcpAppAccess(a);if(h)return h;let i=await this.callTool(a,b,c,d,g,void 0,e,"app",f);if("tool-authorization-list"!==i.errorType)return i;cb.warn(`callToolFromApp: visibility lookup failed for ${a}/${b}; reconnecting and retrying once before dispatch`);let j=await this.forceReconnect(a);return j.success?i=await this.callTool(a,b,c,d,g,void 0,e,"app",f):{success:!1,error:j.error||i.error,statusCode:i.statusCode}}async isMcpAppAccessEnabled(a){let b=await this.getServerConfig(a);return b?.disabled!==!0&&b?.enableMcpApps===!0}async checkMcpAppAccess(a){if(await this.isMcpAppAccessEnabled(a))return null;let b=`MCP Apps are not enabled for server '${a}'. Enable them on the MCP page before opening or using this app.`;return cb.warn(`MCP App access denied: ${b}`),{success:!1,error:b,statusCode:403}}async readResourceFromApp(a,b){let c=await this.checkMcpAppAccess(a);return c||this.readResource(a,b)}async listWithReconnect(a,b,c){if(await this.isServerDisabled(a)){let b=`Server '${a}' is disabled. Enable it on the MCP page to use it.`;return cb.warn(`listWithReconnect: ${b}`),{...c,error:b}}let d=async()=>{let d=await this.acquireServerLease(a);if(!d.lease)return{result:{...c,error:d.error||"Server not connected"}};let e=d.lease;try{let d=await b(e.client,a);if(e.isStale()||this.getClient(a)!==e.client)return{client:e.client,result:{...c,error:"MCP connection changed during discovery. Try again."}};return{client:e.client,result:d}}finally{e.release()}},{client:e,result:f}=await d();if(!f.error||!e)return f;cb.warn(`listWithReconnect: Listing for ${a} failed (${f.error}); forcing reconnect and retrying once`);let g=await this.forceReconnect(a,e);return g.success?({client:e,result:f}=await d(),f.error?cb.warn(`listWithReconnect: Retry after reconnect still failed for ${a}:`,f.error):cb.info(`listWithReconnect: Recovered after reconnect for ${a}`),f):(cb.warn(`listWithReconnect: Reconnect for ${a} failed: ${g.error}`),{...c,error:g.error||f.error})}async listServerResources(a,b){return(0,A.isProtectedExecutionServer)(a)?{resources:[],error:"execution_protocol_surface_forbidden"}:(cb.debug(`listServerResources: Entering method for server ${a}`),this.listWithReconnect(a,(a,c)=>bE(a,c,b),{resources:[]}))}async listServerResourceTemplates(a,b){return(0,A.isProtectedExecutionServer)(a)?{resourceTemplates:[],error:"execution_protocol_surface_forbidden"}:(cb.debug(`listServerResourceTemplates: Entering method for server ${a}`),this.listWithReconnect(a,(a,c)=>bF(a,c,b),{resourceTemplates:[]}))}async readResource(a,b){return(0,f.bQ)(JSON.stringify([a,b]),()=>this.readResourceUncached(a,b))}async readResourceUncached(a,b){if((0,A.isProtectedExecutionServer)(a))return{success:!1,error:"execution_protocol_surface_forbidden"};cb.debug(`readResource: Entering method for server ${a}, uri ${b}`);let c=await this.acquireServerLease(a);if(!c.lease)return{success:!1,error:c.error||"Server not connected"};try{let d=await bG(c.lease.client,a,b);return cb.info(`readResource: Read resource ${b} on ${a}`),d}finally{c.lease.release()}}async prepareMcpSkillsClient(a){if((0,A.isProtectedExecutionServer)(a))return{success:!1,error:"execution_protocol_surface_forbidden"};let b=await this.getServerConfig(a);if(!b)return{success:!1,error:`MCP server '${a}' was not found.`,statusCode:404};if(b.disabled)return{success:!1,error:`Server '${a}' is disabled. Enable it on the MCP page to use it.`,statusCode:409,errorType:"disabled"};if(!0!==b.enableMcpSkills)return{success:!1,error:`MCP Skills are disabled for server '${a}'.`,statusCode:409,errorType:"skills_disabled"};let c=await this.connectServer(a);if(!c.success)return{success:!1,error:c.error||`Failed to connect to MCP server '${a}'.`,statusCode:c.statusCode||502};let d=this.getClient(a),e=bN(d,!0);return d&&e?{success:!0,data:{client:d,capability:e}}:{success:!1,error:`Server '${a}' does not advertise ${E.ET}.`,statusCode:404,errorType:"skills_unsupported"}}async getServerProxyCapabilities(a){let b=await this.getServerConfig(a);if(!b||b.disabled||!(await this.connectServer(a)).success)return{};let c=this.getClient(a),d=bN(c,!0===b.enableMcpSkills&&!(0,A.isProtectedExecutionServer)(a)),e=c?.getServerCapabilities(),f=e?.extensions?.[z.OF];return{skillsCapability:d,appsCapability:f&&"object"==typeof f&&!Array.isArray(f)?{...f}:void 0}}async getServerSkillsCapability(a){let b=await this.prepareMcpSkillsClient(a);return b.success?b.data?.capability:void 0}async listServerSkills(a,b){let c=await this.getServerConfig(a);if(!c||c.disabled||!0!==c.enableMcpSkills)return{resultType:"complete",skills:[],serverName:a,availability:"disabled",...!c?{error:`MCP server '${a}' was not found.`}:{}};let d=await this.prepareMcpSkillsClient(a);if(!d.success||!d.data)return{resultType:"complete",skills:[],serverName:a,availability:"skills_unsupported"===d.errorType?"unsupported":"available",..."skills_unsupported"===d.errorType?{}:{error:d.error}};let e=async a=>bQ(a,!0,b);try{return{...await e(d.data.client),serverName:a,availability:"available",capability:d.data.capability}}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;if(b instanceof bM)return{resultType:"complete",skills:[],serverName:a,availability:"unsupported"};if((await this.forceReconnect(a)).success){let c=this.getClient(a);try{let b=await e(c),d=bN(c,!0);return{...b,serverName:a,availability:"available",...d?{capability:d}:{}}}catch(a){b=a}}return{resultType:"complete",skills:[],serverName:a,availability:"available",error:b instanceof Error?b.message:"Failed to list MCP Skills."}}}async getServerSkill(a,b){let c=await this.prepareMcpSkillsClient(a);if(!c.success||!c.data)return ca(c);try{return{success:!0,data:await bR(c.data.client,!0,b)}}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return{success:!1,error:a instanceof Error?a.message:"Failed to get MCP Skill.",statusCode:a instanceof bM?404:502}}}async readServerSkillDirectory(a,b,c){let d=await this.prepareMcpSkillsClient(a);if(!d.success||!d.data)return ca(d);try{return{success:!0,data:await bS(d.data.client,!0,b,c)}}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return{success:!1,error:a instanceof Error?a.message:"Failed to read MCP Skill directory.",statusCode:a instanceof bM?404:502}}}async readVerifiedSkillResource(a,b,c){let d=await this.prepareMcpSkillsClient(a);if(!d.success||!d.data)return ca(d);let e=await this.getServerSkill(a,b);if(!e.success||!e.data)return ca(e);try{return{success:!0,data:await bT(d.data.client,!0,e.data.skill,c)}}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return{success:!1,error:a instanceof Error?a.message:"Failed to verify MCP Skill resource.",statusCode:422}}}async loadVerifiedSkill(a,b,c){let d=await this.prepareMcpSkillsClient(a);if(!d.success||!d.data)return ca(d);let e=await this.getServerSkill(a,b);if(!e.success||!e.data)return ca(e);if("dynamic"===e.data.skill.resources)return{success:!1,error:"Dynamic MCP Skills cannot be integrity-verified.",statusCode:422};let f=(0,E.Bw)(e.data.skill.uri).normalizedUri,h=e.data.skill.resources.find(a=>a.uri===f);if(!h)return{success:!1,error:"MCP Skill manifest metadata is missing.",statusCode:422};if(!function(a,b=Date.now()){let c=function(a){let b=a.conversationId.trim(),c=a.serverName.trim();if(!b||b.length>512)throw Error("A valid conversation ID is required to approve an MCP Skill.");if(!c||c.length>512)throw Error("A valid MCP server name is required to approve a Skill.");return{conversationId:b,serverName:c,skillUri:(0,E.Bw)(a.skillUri).normalizedUri,manifestDigest:(0,E.cU)(a.manifestDigest)}}(a),d=(0,x.getCurrentWorkspace)(),e=JSON.stringify([d,c.conversationId,c.serverName,c.skillUri]),f=bV().get(e);if(!f)return;let g=(0,E.BC)(c.serverName,c.skillUri,c.manifestDigest),h=(0,E.BC)(f.serverName,f.skillUri,f.manifestDigest);return f.expiresAt<=b||f.workspace!==d||f.conversationId!==c.conversationId||h!==g?void bV().delete(e):f}({conversationId:c,serverName:a,skillUri:f,manifestDigest:h.digest}))return{success:!1,error:"This MCP Skill is not approved for the current conversation and manifest digest.",statusCode:403,errorType:"skills_approval_required"};try{return{success:!0,data:await bU(d.data.client,!0,a,e.data.skill)}}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return{success:!1,error:a instanceof Error?a.message:"Failed to load MCP Skill.",statusCode:422}}}async listServerPrompts(a){return(0,A.isProtectedExecutionServer)(a)?{prompts:[],error:"execution_protocol_surface_forbidden"}:(cb.debug(`listServerPrompts: Entering method for server ${a}`),this.listWithReconnect(a,bI,{prompts:[]}))}async getPrompt(a,b,c){if((0,A.isProtectedExecutionServer)(a))return{success:!1,error:"execution_protocol_surface_forbidden"};cb.debug(`getPrompt: Entering method for server ${a}, prompt ${b}`);let d=await this.acquireServerLease(a);if(!d.lease)return{success:!1,error:d.error||"Server not connected"};try{let e=await bJ(d.lease.client,a,b,c);return cb.info(`getPrompt: Got prompt ${b} on ${a}`),e}finally{d.lease.release()}}async resolveOAuthSecretForSave(a,b){return((0,r.uh)(a)&&(a=b??""),a)?a.startsWith("${global:")?a:this.encryptSecretForSave(a):""}async encryptSecretForSave(a){if(a.startsWith("encrypted_failed:"))throw Error("MCP credential encryption failed");if(a.startsWith("encrypted:")&&a.length>10)return a;let b=await (0,bY.Rs)(a);if(!b.startsWith("encrypted:")||b.length<=10)throw Error("MCP credential encryption failed");return b}async resolveEnvForSave(a,b){let c={};for(let[d,e]of Object.entries((0,bZ.ds)(a))){let a="string"==typeof e?e:e.value,f=b?.[d],g="object"==typeof f&&f.metadata.isSecret;if(!("string"==typeof e?g||(0,q.xc)(d):e.metadata.isSecret)){c[d]=e;continue}if(!((0,r.uh)(a)&&(void 0===f||(a="string"==typeof f?f:f.value,(0,r.uh)(a)))))c[d]={value:!a||(0,r.T6)(a)?a:await this.encryptSecretForSave(a),metadata:{isSecret:!0}}}return c}async resolveHeadersForSave(a,b){let c={};for(let[d,e]of Object.entries(a||{})){if(!d)continue;let{value:a}=(0,r.at)(e,d),{isSecret:f}=(0,r.at)(e,d);if(!f){""!==a&&(c[d]={value:a,metadata:{isSecret:!1}});continue}if((0,r.uh)(a)){let c=b?.[d];if(void 0===c||(a=(0,r.at)(c,d).value,(0,r.uh)(a)))continue}if(a){if((0,r.T6)(a)){c[d]={value:a,metadata:{isSecret:!0}};continue}c[d]={value:await this.encryptSecretForSave(a),metadata:{isSecret:!0}}}}return c}async ensureManagedServerRootDir(a){try{let b=(a.rootPath||"").trim();if(!b)return;let c=["streamable","sse","websocket"].includes(a.transport),d="stdio"===a.transport&&(a.source?.type==="registry"||a.source?.type==="marketplace");if(!c&&!d)return;let e=o().resolve((0,x.getWorkspaceDataDir)(),b);if(o().dirname(e)===e)return;let f="stdio"===a.transport?(0,C.AW)(a):void 0;if(f&&e===o().resolve((0,x.getWorkspaceDataDir)(),"mcp-servers",f.packageDirectory))return;if(d){let a=o().join((0,x.getWorkspaceDataDir)(),"mcp-servers"),b=o().relative(a,e);if(!b||b.startsWith("..")||o().isAbsolute(b))return}await m().mkdir(e,{recursive:!0}),cb.debug(`ensureManagedServerRootDir: ensured ${e} for ${a.name}`)}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;cb.warn(`ensureManagedServerRootDir: could not create root dir for ${a.name}:`,b)}}async updateServerConfig(a,b){if(Object.prototype.hasOwnProperty.call(b,"transport")&&!(0,D.Mt)(b.transport))return{success:!1,error:D.ZW,statusCode:400};cb.debug(`updateServerConfig: Entering method for server ${a}`);let d=await this.loadServerConfigs();if(!Array.isArray(d))return cb.warn("updateServerConfig: Failed to load configs:",d.error),d;let e=d.find(b=>b.name===a),f=!!e&&"string"==typeof b.name&&b.name!==a;if(f&&d.some(a=>a.name===b.name))return cb.warn(`updateServerConfig: Refusing to rename ${a} -> ${b.name}: name already in use`),{success:!1,error:`A server named "${b.name}" already exists`};if(!e&&b.name){cb.info(`updateServerConfig: Creating new server config for ${b.name}`);let a="streamable"===b.transport||"sse"===b.transport,c={name:b.name,...a?{transport:b.transport,serverUrl:b.serverUrl??""}:{transport:"stdio",command:"",args:[],_buildCommand:"",_installCommand:""},env:{},disabled:!1,_buildCommand:"",_installCommand:"",rootPath:""};d.push(c),e=c}else if(!e)return cb.warn(`updateServerConfig: Server ${a} not found`),{success:!1,error:`Server ${a} not found`};if(!e)return{success:!1,error:`Server ${a} not found`};let h=b.headers,i=e.headers,j=void 0===h?Object.entries(i??{}).some(([a,b])=>{if(!a)return!1;let{value:c,isSecret:d}=(0,r.at)(b,a);return d&&!!c&&!(0,r.uh)(c)}):b2(h,i),k={...e,...b};if(j&&(b_(e)||b_(k))&&!b1(k,e))return{success:!1,error:b$,statusCode:400};b={...b};try{void 0!==b.env&&(b.env=await this.resolveEnvForSave(b.env,e.env));let a=b.oauthClientSecret;if(void 0!==a){let c=e.oauthClientSecret;b.oauthClientSecret=await this.resolveOAuthSecretForSave(a,c)}void 0!==h&&(b.headers=await this.resolveHeadersForSave(h,i))}catch{return{success:!1,error:"Failed to encrypt MCP credentials; configuration was not saved"}}let l={...e};l={...e,...b};let m=JSON.stringify(e.roots??[])!==JSON.stringify(l.roots??[])||(e.rootPath??"")!==(l.rootPath??""),n=d.findIndex(b=>b.name===a);-1!==n?d[n]=l:l.name&&d.push(l),await (0,g.QO)();let o=await (0,F.saveConfig)(new Map(d.map(a=>[a.name,a])));if(!o.success)return cb.warn(`updateServerConfig: Failed to save config for ${a}:`,o.error),o;if(await this.ensureManagedServerRootDir(l),f)try{let{flowService:b}=await Promise.resolve().then(c.bind(c,81300)),d=await b.migrateMcpServerReferences(a,l.name);d.success?d.migratedReferences>0&&cb.info(`updateServerConfig: Migrated ${d.migratedReferences} MCP reference(s) across ${d.migratedFlows} flow(s)`):cb.warn("updateServerConfig: Server rename succeeded, but some flow references could not be migrated",d)}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;cb.warn("updateServerConfig: Server rename succeeded, but flow-reference migration failed",a)}if(f){if(this.clients.has(a)){let b=await this.disconnectServer(a);if(!b.success&&"mcp-authority-retirement"===b.errorType)throw new aG.McpRuntimeAuthorityRetirementError([],"MCP authority retirement remains uncertain.")}else this.clearRetryTimer(a),this.connectionRetryAttempts.delete(a);this.stderrLogs.delete(a),this.lastConnectionError.delete(a),this.approvalFailures.delete(a),await this.handleConnectionStateChange(l.name,l)}else await this.handleConnectionStateChange(a,l);return m&&this.notifyRootsChanged(l.name),cb.info(`updateServerConfig: Successfully updated config for ${a}${f?` (renamed to ${l.name})`:""}`),l}async handleConnectionStateChange(a,b){cb.debug(`handleConnectionStateChange: Entering method for server ${a}`);let c=!!this.getClient(a),d=!b.disabled;if(c&&!d){cb.info(`handleConnectionStateChange: Disconnecting disabled server ${a}`);try{let b=await this.disconnectServer(a);if(!b.success&&"mcp-authority-retirement"===b.errorType)throw new aG.McpRuntimeAuthorityRetirementError([],"MCP authority retirement remains uncertain.")}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;cb.warn(`handleConnectionStateChange: Failed to disconnect server ${a} during update:`,b)}}else!c&&d?(cb.info(`handleConnectionStateChange: Connecting previously disabled server ${a}`),await this.connectServer(b)):c&&d?(cb.info(`handleConnectionStateChange: Re-applying config to connected server ${a}`),await this.connectServer(b)):d||(cb.info(`handleConnectionStateChange: Clearing retry timers for disabled server ${a}`),this.clearRetryTimer(a),this.connectionRetryAttempts.delete(a))}async clearRetryTimersForDisabledServers(){cb.debug("clearRetryTimersForDisabledServers: Checking for disabled servers with active retry timers");try{let a=await this.loadServerConfigs();if(!Array.isArray(a))return void cb.warn("clearRetryTimersForDisabledServers: Failed to load server configs");for(let b of a.filter(a=>a.disabled))this.connectionRetryTimers.has(b.name)&&(cb.info(`clearRetryTimersForDisabledServers: Clearing retry timer for disabled server ${b.name}`),this.clearRetryTimer(b.name),this.connectionRetryAttempts.delete(b.name))}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;cb.error("clearRetryTimersForDisabledServers: Error clearing retry timers:",a)}}async deleteServerConfig(a){if(cb.debug(`deleteServerConfig: Entering method for server ${a}`),this.clients.has(a)){cb.info(`deleteServerConfig: Disconnecting server ${a} before deletion`);let b=await this.disconnectServer(a);if(!b.success&&"mcp-authority-retirement"===b.errorType)return b}let b=await this.loadServerConfigs();if(!Array.isArray(b))return cb.warn("deleteServerConfig: Failed to load configs:",b.error),b;let c=b.findIndex(b=>b.name===a);if(-1===c)return cb.warn(`deleteServerConfig: Server ${a} not found in configs`),{success:!1,error:`Server ${a} not found`};b.splice(c,1),cb.debug(`deleteServerConfig: Saving updated configs after deleting ${a}`),await (0,g.QO)();let d=await (0,F.saveConfig)(new Map(b.map(a=>[a.name,a])));return d.success?cb.info(`deleteServerConfig: Successfully deleted server ${a}`):cb.warn(`deleteServerConfig: Error saving configs after deleting ${a}:`,d.error),d}async getServerStatus(a){let b,c=await this.getServerConfig(a);if(!c)return cb.warn(`getServerStatus: Server ${a} not found`),{status:"error",message:`Server ${a} configuration not found. The server may have been deleted or not properly configured.`};if(c.disabled)return cb.debug(`getServerStatus: Server ${a} is disabled`),{status:"disconnected"};let d=!!this.getClient(a),e=this.approvalFailures.get(a);if(!d&&e)return{status:"requires_approval",message:e.error,errorCode:e.errorCode,requiresApproval:!0};if("streamable"===c.transport&&!d&&c.oauthScopes&&c.oauthScopes.length>0){let b=await (0,H.y$)(c);if(!b||!(0,G.HV)(b)||!b.access_token)return cb.info(`getServerStatus: Server ${a} requires OAuth authentication but has no valid tokens`),{status:"requires_authentication",message:"OAuth authentication required. Click the authenticate button to complete the OAuth flow."};let d=b.issued_at;if(!b.refresh_token&&b.expires_in&&d){let c=b.expires_in;if(Math.floor(Date.now()/1e3)>=d+c)return cb.info(`getServerStatus: OAuth tokens for ${a} have expired and no refresh token is available`),{status:"requires_authentication",message:"OAuth tokens have expired. Please re-authenticate."}}}let f=(this.stderrLogs.get(a)||[]).join("\n").trim(),h=this.lastConnectionError.get(a);if(d){let c=this.getClient(a);if((0,bu.AO)(c))try{if((b=await (0,bu.DK)(c,a)).blockingAuthorization){let a=b.blockingAuthorization;return{status:"requires_authentication",message:a.message||`${a.label} authorization is required before this server can be used by unattended flows.`,stderrOutput:f||void 0,stdioOAuth:b}}}catch(b){if(b instanceof g.Mr)throw b;let a=b instanceof Error?b.message:String(b);return{status:"error",message:`Connected, but the mcp-stdio-oauth readiness check failed: ${a}`,stderrOutput:f||void 0}}}if(d||this.getClient(a))return cb.info(`getServerStatus: Server ${a} is connected`),{status:"connected",stderrOutput:f||void 0,...b?{stdioOAuth:b}:{}};{let b=this.isStartingUp()&&!this.lastConnectionError.has(a);if(this.connectingServers.has(a)||b)return cb.info(`getServerStatus: Server ${a} is still connecting`),{status:"connecting",message:"Server is starting up. This may take a few moments."};if(f&&(f.includes("OAuth authentication required")||f.includes("invalid_token")))return cb.info(`getServerStatus: OAuth authentication error detected for ${a}`),{status:"requires_authentication",message:"OAuth authentication required. Please complete the OAuth flow.",stderrOutput:f};let c=f||h;return c?(cb.info(`getServerStatus: Using ${f?"stderr output":"persisted connection error"} as error message for ${a}`),{status:"error",message:c,stderrOutput:f||void 0}):(cb.info(`getServerStatus: No specific error details available for ${a}`),{status:"error",message:`Server ${a} is configured but not connected. The server process may have crashed or been terminated.`,stderrOutput:void 0})}}async startEnabledServers(){cb.info("Starting all enabled servers"),this.setStartingUp(!0);try{await this.clearRetryTimersForDisabledServers();let a=await this.loadServerConfigs();if(!Array.isArray(a))return void cb.warn("Failed to load server configs, cannot start servers");let b=a.filter(a=>!a.disabled),c=/^(1|true|yes)$/i.test(process.env.FLUJO_MCP_LAZY_START??""),d=b.filter(a=>!0===a.alwaysOn);for(let a of d)X(a.name,"always-on");let e=c?d:b;c?cb.info(`Lazy MCP start: ${b.length} enabled server(s) discovered, warming only ${d.length} always-on server(s)`):(cb.info(`Found ${e.length} enabled servers to start`),cb.debug(`${e}`)),e.forEach(a=>this.connectingServers.add(a.name));let f=Math.max(1,Number(process.env.FLUJO_MCP_BOOT_CONCURRENCY)||2);cb.info(`Connecting ${e.length} enabled servers with boot concurrency ${f}`),await (0,y.P)(e,f,async a=>{cb.info(`Starting server: ${a.name}`),await this.connectServer(a).catch(b=>{cb.error(`Failed to start server ${a.name}:`,b)})})}finally{this.setStartingUp(!1)}}async getAvailableClients(){try{let a=await this.loadServerConfigs();if(!a||"error"in a)return cb.warn("getAvailableClients: Failed to load server configs:",a?.error),[];return(await Promise.all(a.map(async a=>{try{let b=await this.getServerStatus(a.name);return{name:a.name,status:"string"==typeof b?b:b.status,connected:"string"==typeof b?"connected"===b:"connected"===b.status}}catch(b){if(b instanceof g.Mr||b instanceof aG.McpRuntimeAuthorityRetirementError)throw b;return cb.warn(`getAvailableClients: Error getting status for ${a.name}:`,b),{name:a.name,status:"error",connected:!1}}}))).map(a=>`${a.name} (${a.status})`)}catch(a){if(a instanceof g.Mr||a instanceof aG.McpRuntimeAuthorityRetirementError)throw a;return cb.error("getAvailableClients: Error getting available clients:",a),[]}}constructor(){this.stderrLogsBase=new Map,this.lastConnectionErrorBase=new Map,this.inFlightConnectsBase=new Map,this.connectionRetryTimersBase=new Map,this.connectionRetryAttemptsBase=new Map,this.resourceListVersionBase=new Map,this.pendingResourceUpdatesBase=new Map}}let cf=new ce},247726:(a,b,c)=>{"use strict";c.d(b,{Qq:()=>i,Rp:()=>p,r6:()=>h,xH:()=>q,y$:()=>o});var d=c(137106),e=c(189663),f=c(122134);let g="flujo-oauth-v1";async function h(){try{if(await (0,d.C3)())throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}catch{throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}}async function i(a,b){try{let c=function(a,b,c){try{let d=JSON.stringify({format:g,kind:a,workspace:c,value:b});if(Buffer.byteLength(d,"utf8")>262144)throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.");return m(a,JSON.parse(d).value),d}catch{throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}}(a,b,(0,e.getCurrentWorkspace)()),f=await (0,d.pF)(c);if(!f?.startsWith("v2:"))throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.");return{format:g,ciphertext:f}}catch{throw Error("OAuth credential encryption failed; previous credentials have been retained.")}}function j(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function k(a){return j(a)&&(a.format===g||Object.hasOwn(a,"format")&&Object.hasOwn(a,"ciphertext")&&2===Object.keys(a).length)}async function l(a){if(!a.startsWith("encrypted:")&&!a.startsWith("encrypted_failed:")&&!a.includes("${global:"))return a;try{let b=await (0,f.G)(a);if(!b||"********"===b||b.startsWith("encrypted:")||b.includes("${global:"))throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.");return b}catch{throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}}function m(a,b){if("verifier"===a){if("string"!=typeof b||!b)throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}else if("tokens"===a){if(!j(b)||"string"!=typeof b.access_token||!b.access_token||"string"!=typeof b.token_type||!b.token_type||void 0!==b.refresh_token&&"string"!=typeof b.refresh_token)throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}else if(!j(b)||"string"!=typeof b.client_id||!b.client_id||void 0!==b.client_secret&&"string"!=typeof b.client_secret)throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}async function n(a,b){if(await h(),!k(b))return b;try{if(!j(b)||b.format!==g||"string"!=typeof b.ciphertext||!b.ciphertext.startsWith("v2:")||2!==Object.keys(b).length||Buffer.byteLength(b.ciphertext,"utf8")>524288)throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.");let f=await (0,d.Do)(b.ciphertext);if(null===f||Buffer.byteLength(f,"utf8")>262144)throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.");var c=(0,e.getCurrentWorkspace)();try{if(Buffer.byteLength(f,"utf8")>262144)throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.");let b=JSON.parse(f);if(!j(b)||b.format!==g||b.kind!==a||b.workspace!==c||"format,kind,value,workspace"!==Object.keys(b).sort().join(","))throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.");return m(a,b.value),b.value}catch{throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}}catch{throw Error("Stored OAuth credentials are unavailable. Unlock this workspace or restore matching credentials.")}}async function o(a){if(void 0===a.oauthTokens)return;let b=await n("tokens",a.oauthTokens);m("tokens",b);let c={...b};if(!k(a.oauthTokens))for(let a of["access_token","refresh_token","id_token"])"string"==typeof c[a]&&(c[a]=await l(c[a]));return c}async function p(a){if(void 0===a.oauthClientInformation)return;let b=await n("client",a.oauthClientInformation);m("client",b);let c={...b};return k(a.oauthClientInformation)||void 0===c.client_secret||(c.client_secret=await l(c.client_secret)),c}async function q(a){let b=await n("verifier",a.oauthCodeVerifier);return m("verifier",b),k(a.oauthCodeVerifier)?b:l(b)}},259241:(a,b,c)=>{"use strict";c.d(b,{n:()=>s});var d=c(43521),e=c(71553),f=c(777030),g=c(344708),h=c(541692);let i="OAuth probe egress denied";function j(a){let b=(0,f.isIP)(a);if(4===b){let[b,c,d]=a.split(".").map(Number);return!(0===b||10===b||127===b||b>=224||100===b&&c>=64&&c<=127||169===b&&254===c||172===b&&c>=16&&c<=31||192===b&&(0===c&&(0===d||2===d)||168===c||88===c&&99===d)||198===b&&(18===c||19===c||51===c&&100===d)||203===b&&0===c&&113===d)}if(6!==b)return!1;let[c,d="0"]=new URL(`https://[${a}]/`).hostname.slice(1,-1).split(":"),e=Number.parseInt(c,16),g=Number.parseInt(d||"0",16);return e>=8192&&e<=16383&&!(8193===e&&(g<512||3512===g))&&8194!==e&&!(16383===e&&g<4096)}function k(a){if("string"!=typeof a||a.length>2048||/[\x00-\x20\x7f]/.test(a))throw Error(i);let b=new URL(a),c=b.hostname.replace(/^\[|\]$/g,"").toLowerCase();if("https:"!==b.protocol||""!==b.port&&"443"!==b.port||b.username||b.password||b.search||b.hash||c.endsWith(".")||"localhost"===c||/\.(localhost|local|internal|lan|home|invalid|test)$/.test(c)||!(0,f.isIP)(c)&&(!c.includes(".")||!/^[a-z0-9.-]+$/.test(c))||(0,f.isIP)(c)&&!j(c))throw Error(i);return b}async function l(a,b){b.throwIfAborted();let c=k(a),d=c.hostname.replace(/^\[|\]$/g,""),g=(0,f.isIP)(d);if(4===g||6===g)return{url:c,hostname:d,address:d,family:g};let h=await new Promise((a,c)=>{let f=()=>c(Error(i));b.addEventListener("abort",f,{once:!0}),(0,e.lookup)(d,{all:!0,verbatim:!0}).then(a,c).finally(()=>b.removeEventListener("abort",f))});if(b.throwIfAborted(),!h.length||h.length>32||h.some(a=>!j(a.address)||(0,f.isIP)(a.address)!==a.family))throw Error(i);let l=h[0];if(4!==l.family&&6!==l.family)throw Error(i);return{url:c,hostname:d,address:l.address,family:l.family}}async function m(a,b){return await l(a,b),a}async function n(a,b,c){try{let d=await l(a,c);return c.throwIfAborted(),await new Promise((a,e)=>{let j="challenge"===b?JSON.stringify({jsonrpc:"2.0",id:0,method:"initialize",params:{}}):void 0,k=(0,g.request)({protocol:"https:",hostname:d.address,port:443,family:d.family,servername:(0,f.isIP)(d.hostname)?"":d.hostname,checkServerIdentity:(a,b)=>(0,h.checkServerIdentity)(d.hostname,b),rejectUnauthorized:!0,agent:!1,signal:c,maxHeaderSize:16384,path:d.url.pathname,method:"challenge"===b?"POST":"GET",headers:{host:d.url.host,accept:"challenge"===b?"application/json, text/event-stream":"application/json",...j?{"content-type":"application/json","content-length":Buffer.byteLength(j)}:{}}},c=>{let d=c.statusCode??0,f=new Headers,g=c.headers["www-authenticate"];"string"==typeof g&&f.set("www-authenticate",g);let h=b=>a({ok:d>=200&&d<300,status:d,headers:f,json:async()=>JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(b))});if("challenge"===b||d<200||d>=300){h(Buffer.alloc(0)),c.destroy();return}if(c.headers["content-encoding"]&&"identity"!==c.headers["content-encoding"]){c.destroy(),e(Error(i));return}let j=0,k=[];c.on("data",a=>{(j+=a.length)>65536?(c.destroy(),e(Error(i))):k.push(a)}),c.on("end",()=>{j<=65536&&h(Buffer.concat(k))}),c.on("error",()=>e(Error(i))),c.on("aborted",()=>e(Error(i)))});k.on("error",()=>e(Error(i))),k.end(j)})}catch{throw Error(i)}}let o=(0,d.h)("utils/mcp/oauthProbe");async function p(a,b){let c,d=await n(a,"challenge",b),e=d.headers.get("www-authenticate")||"",f=/\bbearer\b/i.test(e),g=e.match(/resource_metadata\s*=\s*"([^"]+)"/i);if(g)try{c=await m(g[1],b)}catch{}return{bearer:f,reachable:!0,unauthenticated:d.ok&&!f,resourceMetadataUrl:c}}async function q(a,b){let c=await n(a,"metadata",b);if(!c.ok)return;let d=await c.json();if(!d||"object"!=typeof d||Array.isArray(d))return;let e=Array.isArray(d.authorization_servers);if(!e&&"string"!=typeof d.resource)return;if(!e)return{};let f=d.authorization_servers;if(f.length>8)return;let g=[];for(let a of f)if("string"==typeof a)try{let c=await m(a,b);g.includes(c)||g.push(c)}catch{}return{authorizationServers:g}}async function r(a,b){for(let c of a)for(let a of function(a){let b=k(a),c=b.pathname.replace(/\/$/,"");return Array.from(new Set([new URL(`/.well-known/oauth-authorization-server${c}`,b.origin).toString(),new URL(`${c}/.well-known/oauth-authorization-server`,b.origin).toString(),new URL(`${c}/.well-known/openid-configuration`,b.origin).toString()]))}(c))try{let c,d=await n(a,"metadata",b);if(!d.ok)continue;let e=await d.json();if(!e||"object"!=typeof e||Array.isArray(e))continue;let f=!0===e.client_id_metadata_document_supported;if("string"==typeof e.registration_endpoint)try{c=await m(e.registration_endpoint,b)}catch{}if(f||c)return{...f?{clientIdMetadataDocument:!0}:{},...c?{registrationEndpoint:c}:{}}}catch{}return{}}async function s(a,b={}){b.signal?.throwIfAborted();try{let c=k(a),d=b.signal?AbortSignal.any([b.signal,AbortSignal.timeout(5e3)]):AbortSignal.timeout(5e3),e=await p(c.href,d).catch(()=>(o.debug("OAuth challenge probe unavailable"),{bearer:!1,reachable:void 0,unauthenticated:!1,resourceMetadataUrl:void 0})),f=new Set;for(let a of(e.resourceMetadataUrl&&f.add(e.resourceMetadataUrl),f.add(new URL("/.well-known/oauth-protected-resource",c.origin).toString()),f)){let f=await q(a,d).catch(()=>void 0);if(!f)continue;let g=await r(f.authorizationServers??[c.origin],d),{registrationEndpoint:h}=g;return b.signal?.throwIfAborted(),o.info("OAuth capability confirmed from public metadata"),{oauthCapable:!0,resourceMetadataUrl:a,authorizationServers:f.authorizationServers,reachable:e.reachable,dynamicClientRegistration:!!h,...g}}if(b.signal?.throwIfAborted(),e.bearer)return o.info("OAuth capability inferred from a Bearer challenge"),{oauthCapable:!0,reachable:!0};return{oauthCapable:!1,...e.reachable?{reachable:!0}:{},...e.unauthenticated?{unauthenticated:!0}:{}}}catch{return b.signal?.throwIfAborted(),o.debug("OAuth capability probe unavailable"),{oauthCapable:!1}}}},264416:(a,b,c)=>{"use strict";let d;c.d(b,{cN:()=>o,zf:()=>n});var e=c(977598),f=c(973024),g=c(176760),h=c.n(g),i=c(304927),j=c(189663),k=c(896305);let l=(a,b,c)=>{if((0,i.ln)(a),!/^[0-9a-f]{64}$/.test(b))throw Error("Invalid native session payload hash.");return h().join(d??h().join((0,j.getWorkspaceDataDir)(c),"db","native-session-payloads"),a,`${b}.json`)},m=a=>(0,e.createHash)("sha256").update(a).digest("hex");async function n(a){let b=Buffer.from(JSON.stringify(a),"utf8");if(0===b.length||b.length>4194304)throw Error("Native session payload exceeds its private archive bound.");let c=m(b),d=l(a.invocationId,c);await f.promises.mkdir(h().dirname(d),{recursive:!0});let g=`${d}.${process.pid}.${(0,e.randomUUID)()}.tmp`,i=await f.promises.open(g,"wx",384);try{await i.writeFile(b),await i.sync()}finally{await i.close()}try{await f.promises.link(g,d),await f.promises.unlink(g)}catch(a){throw await f.promises.rm(g,{force:!0}).catch(()=>void 0),a}try{let a=await f.promises.open(h().dirname(d),"r");try{await a.sync()}finally{await a.close()}}catch{}return{kind:"private-native-session-payload",invocationId:a.invocationId,sha256:c,byteLength:b.length}}async function o(a,b){if("private-native-session-payload"!==a.kind||!Number.isSafeInteger(a.byteLength)||a.byteLength<1||a.byteLength>4194304)throw Error("Invalid native session payload reference.");let c=l(a.invocationId,a.sha256,b),d=await (0,k.$)(c,a.byteLength);if(d.length!==a.byteLength||m(d)!==a.sha256)throw Error("Native session payload digest changed.");let e=JSON.parse(d.toString("utf8"));if(e.invocationId!==a.invocationId)throw Error("Native session payload owner changed.");return e}},267087:(a,b,c)=>{"use strict";c.d(b,{DJ:()=>m,Lf:()=>f,PL:()=>i,Sf:()=>o,gS:()=>g,zK:()=>n});var d=c(455511),e=c(334701);function f(){return`inv_${(0,d.randomUUID)()}`}function g(a,b){if(!a)return;let c=Number.isInteger(b)&&b>0?b:1;return`${a}-a${c}`.slice(0,128)}function h(){return"u">typeof performance&&"function"==typeof performance.now?performance.now():Date.now()}function i(){let a=h();return{elapsedMs:()=>Math.max(0,Math.round(h()-a))}}function j(a){let b=a.toLowerCase().trim();return b.startsWith("image/")?"image":b.startsWith("audio/")?"audio":b.startsWith("video/")?"video":b.startsWith("multipart/")?"multipart":b.includes("json")?"json":b.startsWith("text/")?"text":0===b.length?"unknown":"binary"}function k(a,b=0){if(null==a)return"empty";if("string"==typeof a){if(0===a.length)return"empty";let b=a.slice(0,64).trimStart();return b.startsWith("data:")?j(b.slice(5).split(";")[0]??""):b.startsWith("{")||b.startsWith("[")?"json":"text"}if("number"==typeof a||"boolean"==typeof a)return"json";if(a instanceof Uint8Array||ArrayBuffer.isView(a)||a instanceof ArrayBuffer)return"binary";if(b>3)return"json";if(Array.isArray(a)){let c=new Set(a.map(a=>k(a,b+1)));return(c.delete("empty"),0===c.size)?"empty":1===c.size?[...c][0]:"multipart"}if("object"==typeof a){let c="string"==typeof a.mimeType?a.mimeType:"string"==typeof a.mediaType?a.mediaType:void 0;if(c)return j(c);if("string"==typeof a.type){let b=function(a){switch(a.toLowerCase()){case"text":case"input_text":case"output_text":return"text";case"image":case"image_url":return"image";case"audio":case"input_audio":return"audio";case"video":return"video";case"json":return"json";case"resource":case"resource_link":return"binary";default:return}}(a.type);if(b)return b}return Array.isArray(a.content)?k(a.content,b+1):"json"}return"unknown"}function l(a){try{if(null==a)return 0;if("string"==typeof a)return Buffer.byteLength(a,"utf8");if(a instanceof Uint8Array||ArrayBuffer.isView(a)||a instanceof ArrayBuffer)return a.byteLength;let b=JSON.stringify(a);return"string"==typeof b?Buffer.byteLength(b,"utf8"):void 0}catch{return}}function m(a,b){let c=l(a),d=l(b),e={...void 0!==c?{requestBytes:c}:{},...void 0!==d?{responseBytes:d}:{},..."string"==typeof a?{requestChars:a.length}:{},..."string"==typeof b?{responseChars:b.length}:{},requestCategory:k(a),responseCategory:k(b)};return Object.keys(e).length>0?e:void 0}function n(a){if(!a)return"unsupported";let b=a.cachedInputTokens,c=a.cacheWriteTokens;if(void 0===b&&void 0===c)return"unsupported";let d=b??0,e=c??0;return d>0&&e>0?"mixed":d>0?"hit":e>0?"write":"miss"}async function o(a,b){let c;if(null==b)return;try{c="string"==typeof b?b:JSON.stringify(b)??""}catch{return}if(0===c.length)return;let d=await (0,e.It)(`revision:${a}:${c}`).catch(()=>void 0);return d?`rev_${d.slice(5)}`:void 0}},275323:(a,b,c)=>{"use strict";function d(a,b,c=!1){let e=a?.prompt_tokens;if("number"!=typeof e||!Number.isFinite(e)||e<0)return null;let f=a?.completion_tokens,g="number"==typeof f&&Number.isFinite(f)&&f>=0?f:void 0;return{promptTokens:e,...void 0!==g?{completionTokens:g}:{},...!c&&void 0!==g?{totalTokens:e+g}:{},..."number"==typeof b&&Number.isFinite(b)&&b>0?{contextWindow:b,contextWindowSource:"configured"}:{}}}c.d(b,{D:()=>d})},300320:(a,b,c)=>{"use strict";c.d(b,{$:()=>g,Cu:()=>h,Jr:()=>m,Sw:()=>o,a6:()=>l,hV:()=>n});var d=c(777414),e=c(862399),f=c(611235);let g=1048576,h=a=>JSON.parse(JSON.stringify(a)),i=a=>"string"==typeof a&&/^[a-f0-9]{64}$/.test(a),j=a=>Number.isSafeInteger(a)&&a>=0,k={message:!0,reasoning:!0,compaction:!0,function_call:!0,function_call_output:!0,file_search_call:!0,web_search_call:!0,image_generation_call:!0,computer_call:!0,computer_call_output:!0,code_interpreter_call:!0,program:!0,program_output:!0,tool_search_call:!0,tool_search_output:!0,additional_tools:!0,local_shell_call:!0,local_shell_call_output:!0,shell_call:!0,shell_call_output:!0,apply_patch_call:!0,apply_patch_call_output:!0,mcp_call:!0,mcp_list_tools:!0,mcp_approval_request:!0,mcp_approval_response:!0,custom_tool_call:!0,custom_tool_call_output:!0};function l(a){if(!(!Array.isArray(a)||!a.length||a.some(a=>!a||"object"!=typeof a||"string"!=typeof a.type||!Object.hasOwn(k,a.type))))try{let b=(0,d.h)(a);return b.length?b:void 0}catch{return}}function m(a,b){try{if(!a||"object"!=typeof a||1!==a.version||a.workspace!==b.workspace||a.conversationId!==b.conversationId||a.nodeId!==b.nodeId||!i(a.owner)||void 0!==b.owner&&a.owner!==b.owner||!Array.isArray(a.records)||!a.records.length||a.records.length>64||(0,e.j)(a)>g||!i(a.recordsDigest)||(0,f.Fd)(a.records)!==a.recordsDigest)return;let c=new Set;for(let b of a.records){if(!Array.isArray(b)||2!==b.length||"string"!=typeof b[0]||!b[1]||"object"!=typeof b[1]||c.has(b[0]))return;c.add(b[0]);let a=b[1];if(!j(a.inputLength)||!j(a.outputLength)||!a.outputLength||!i(a.inputDigest)||!i(a.outputDigest)||!j(a.retainedChars)||!Array.isArray(a.items)||void 0!==a.callId&&"string"!=typeof a.callId)return;let d=a.nativeOutput??a.items;if(!l(d)||(0,e.j)(d)!==a.retainedChars||void 0!==a.nativeOutput&&!i(a.nativeInputDigest)||void 0===a.nativeOutput&&(!a.callId||a.items.some(a=>"reasoning"!==a.type)))return}return h(a)}catch{return}}function n(a,b,c){let d=Object.entries(a??{}).filter(([a])=>a!==b);c&&d.push([b,c]);let f=2,h=[];for(let a=d.length-1;a>=0;a--){let b,c=d[a];try{b=(0,e.j)(c)+1}catch{continue}h.length>=64||f+b>g||(f+=b,h.push(c))}return h.length?Object.fromEntries(h.reverse()):void 0}function o(a,b){let c;if(!(!a||"object"!=typeof a||Array.isArray(a))){for(let[d,e]of Object.entries(a).slice(-64)){let a=m(e,{...b,nodeId:d});a&&(c=n(c,d,a))}return c}}},309994:(a,b,c)=>{"use strict";c.d(b,{S:()=>h});var d=c(43521),e=c(106232),f=c(18315);let g=(0,d.h)("backend/services/runResources/boundToolResult");async function h(a){var b,c;let d,h,i,j,k,l,m,n,o,p,q,r,{conversationId:s,toolCallId:t,server:u,toolName:v,nodeId:w,content:x,settings:y}=a;if(!y.toolResultTruncationEnabled)return{content:x,spilled:!1};let z=y.toolResultMaxLines??e.gw,A=y.toolResultMaxBytes??e.QK;if(z<=0&&A<=0)return{content:x,spilled:!1};let B=Buffer.byteLength(x,"utf8"),C=0,D=!1;if(z>0){C=1;for(let a=0;a<x.length;a++)10===x.charCodeAt(a)&&C++;D=C>z}if(!(A>0&&B>A)&&!D)return{content:x,spilled:!1};try{let a=await (0,f.tm)({conversationId:s,mimeType:"text/plain",kind:"text",data:{text:x},producedBy:{source:"tool-result",payloadRole:"tool-message",nodeId:w,server:u,toolName:v,toolCallId:t}});"skipped"in a?g.warn(`Tool-result spill skipped (${a.skipped}); falling back to lossy preview`,{conversationId:s,server:u,toolName:v}):(d=a.uri,h=a.size)}catch(a){g.error("Tool-result spill failed; falling back to lossy preview",a)}return{content:(b=C,c=d,i=x.split("\n"),j=Math.max(1,Math.floor((z>0?z:i.length)/2)),k=i.slice(0,j).join("\n"),l=i.slice(-j).join("\n"),m=Math.max(1,Math.floor((A>0?A:B)/2)),o=(n=Buffer.from(k,"utf8")).byteLength<=m?k:n.subarray(0,m).toString("utf8").replace(/\ufffd+$/,""),q=(p=Buffer.from(l,"utf8")).byteLength<=m?l:p.subarray(p.byteLength-m).toString("utf8").replace(/^\ufffd+/,""),r=c?`
30
30
  …
31
31
  [tool result truncated for context — the full ${B}-byte (${b}-line) result is stored as run resource ${c}; call read_resource with this uri to read all of it]
@@ -108,7 +108,7 @@ ${c.text}
108
108
  --- end resource ${a} ---
109
109
  `;else{var m;h=`[run resource "${a}": ${i.mimeType??i.kind} (${(m=i.size)<1024?`${m} B`:m<1048576?`${Math.round(m/1024)} KB`:`${(m/1048576).toFixed(1)} MB`}) at ${i.uri} — readable via the 'flujo' MCP server]`}}else g.warn(`$\{res:${a}} entry exists but payload read failed; resolving to ''`,{uri:i.uri})}else g.warn(`$\{res:${a}} has no matching run resource; resolving to ''`,{conversationId:b})}catch(b){(0,f.Vj)(b),g.error(`Failed to resolve $\{res:${a}}; resolving to ''`,b)}l.set(a,h)}return a.replace(h,(a,b)=>l.get(b)??"")}},738608:(a,b,c)=>{"use strict";c.d(b,{ND:()=>l,PL:()=>h,bS:()=>i,dd:()=>e,p:()=>f,xB:()=>k});let d=/\{\{[^{}]+\}\}|\$\{[^{}]+\}|@\{[^{}]+\}/;function e(a){if(null==a)return;let b=String(a).trim();if(!(!b||b.length>128||d.test(b)))return b}function f(a){if(null==a||""===a)return;let b="number"==typeof a?a:Number(a);return Number.isSafeInteger(b)&&b>0?b:void 0}let g=new Map;async function h(a){let b,c=g.get(a);c||(c={tail:Promise.resolve(),claims:0},g.set(a,c));let d=c.tail;c.tail=new Promise(a=>{b=a}),c.claims+=1,await d;let e=!1;return()=>{e||(e=!0,c.claims-=1,b(),0===c.claims&&g.get(a)===c&&g.delete(a))}}function i(a,b,c,d){if(!a||!b||!c||"per-visit"===c)return;if("per-run"===c)return`${a}::${b}::`;let f=e(d);if("per-key"===c&&f)return`${a}::${b}::${encodeURIComponent(f)}`}function j(a){return(Number.isFinite(a.visits)?Math.max(0,Math.floor(a.visits)):0)+1}function k(a,b,c,d){if(!b||!a)return{conversationId:crypto.randomUUID?crypto.randomUUID():m(),resumedVisit:!1};let f=a.subflowSessions?.[b];if(f&&f.conversationId)return f.lastUsedAt=Date.now(),f.status="running",{conversationId:f.conversationId,resumedVisit:!0,sessionVisit:j(f)};let g=crypto.randomUUID?crypto.randomUUID():m();return a.subflowSessions||(a.subflowSessions={}),a.subflowSessions[b]={version:1,conversationId:g,nodeId:c,sessionKey:e(d),visits:0,lastUsedAt:Date.now(),status:"running"},{conversationId:g,resumedVisit:!1,sessionVisit:j(a.subflowSessions[b])}}function l(a,b,c){if(!b||!a)return;let d=a.subflowSessions?.[b];d&&(d.visits+=1,d.lastUsedAt=Date.now(),d.status="completed"===c?"idle":"error"===c?"failed":"idle")}function m(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"===a?b:3&b|8).toString(16)})}},762852:(a,b,c)=>{"use strict";c.d(b,{n_:()=>e});class d extends TypeError{constructor(a,b){super(`Unsupported OpenAI ${a} type "${b}"; FLUJO supports function tools only.`),this.code="unsupported_tool_type",this.name="UnsupportedOpenAIToolTypeError"}}function e(a){if(!a)return[];let b=a.find(a=>"function"!==a.type);if(b)throw new d("tool call",b.type);return a}},764360:(a,b,c)=>{"use strict";c.d(b,{AQ:()=>h,iL:()=>g});let d="io.flujo/host-owner-scope",e=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a;function f(a){return"string"==typeof a&&a.length>0&&a.length<=512&&a.trim()===a}function g(a,b){let c=e(a);if(!c)return a;let g=e(c._meta),h=f(b)?b:void 0;if(void 0===h&&!Object.hasOwn(g??{},d))return a;let i={...g};return delete i[d],void 0!==h&&(i[d]=h),{...c,_meta:i}}function h(a){if(void 0!==a)try{let b="string"==typeof a?JSON.parse(a):a,c=e(e(b)?._meta),g=c?.[d];return f(g)?g:void 0}catch{return}}},764897:(a,b,c)=>{"use strict";c.d(b,{Ek:()=>m,Ly:()=>l,_k:()=>j,w_:()=>n,y8:()=>k});var d=c(43521),e=c(189663);let f=(0,d.h)("backend/services/mcp/taskInputRegistry"),g=globalThis,h=g.__flujoMcpTaskInputRegistry??(g.__flujoMcpTaskInputRegistry=new Map);function i(a,b){return(0,e.workspaceCacheKey)(a,b)}function j(a,b,c){let d=i(a,b),e=Date.now(),g=h.get(d)??{outstanding:new Set,answered:new Set,firstRequestedAt:e,lastRequestedAt:e};g.answered.has(c)||(g.outstanding.add(c),g.lastRequestedAt=e,h.set(d,g),f.info(`Task ${b} on ${a} requested input (elicitation ${c}); outstanding=${g.outstanding.size}`))}function k(a,b,c,d){let e=i(a,b),g=h.get(e);!g||!g.outstanding.delete(c)&&g.answered.has(c)||(g.answered.add(c),h.set(e,g),f.info(`Task ${b} on ${a} input ${c} resolved with action=${d}; outstanding=${g.outstanding.size}`))}function l(a,b){return h.get(i(a,b))}function m(a,b){return[...h.get(i(a,b))?.outstanding??[]]}function n(a,b){h.delete(i(a,b))}},767351:(a,b,c)=>{"use strict";c.d(b,{F:()=>i,OF:()=>d,cM:()=>e,zm:()=>h});let d="io.modelcontextprotocol/ui",e="text/html;profile=mcp-app",f=["model","app"];function g(a,b){return(function(a){let b=a._meta;if(void 0===b)return f;if(!b||"object"!=typeof b||Array.isArray(b))return[];if(!Object.prototype.hasOwnProperty.call(b,"ui"))return f;let c=b.ui;if(!c||"object"!=typeof c||Array.isArray(c))return[];if(!Object.prototype.hasOwnProperty.call(c,"visibility"))return f;let d=c.visibility;return Array.isArray(d)&&d.every(a=>"model"===a||"app"===a)?Array.from(new Set(d)):[]})(a).includes(b)}function h(a,b){return"all"===b?a:a.filter(a=>g(a,b))}function i(a,b,c,d){let e=a.find(a=>a.name===c);return e?g(e,d)?{allowed:!0}:{allowed:!1,error:`Tool '${c}' on MCP server '${b}' is not callable by ${"app"===d?"MCP Apps":"the model"}.`,statusCode:403}:{allowed:!1,error:`Tool '${c}' was not found on MCP server '${b}'.`,statusCode:404}}},768443:(a,b,c)=>{"use strict";c.d(b,{eh:()=>i,ru:()=>g});var d=c(43521),e=c(189663);let f=(0,d.h)("backend/services/scheduler/flowRunEventBus");function g(a){return"signal"===a.kind}class h{publish(a){if(0===this.listeners.size)return;let b=g(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(f.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{let b=c(a);null!==b&&("object"==typeof b||"function"==typeof b)&&"then"in b&&"function"==typeof b.then&&Promise.resolve(b).catch(a=>{f.warn("An asynchronous flow-run event listener threw:",a)})}catch(a){f.warn("A flow-run event listener threw:",a)}}async publishDurably(a){for(let b of[...this.listeners])await b(a)}subscribe(a){let b=(0,e.bindToCurrentWorkspace)(a);return this.listeners.add(b),()=>{this.listeners.delete(b)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function i(){let a=(0,e.getCurrentWorkspace)();if(a===e.DEFAULT_WORKSPACE)return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new h),global.__flujo_flow_run_event_bus;let b=global.__flujo_flow_run_event_buses_by_workspace??(global.__flujo_flow_run_event_buses_by_workspace=new Map),c=b.get(a);return c||(c=new h,b.set(a,c)),c}},768672:(a,b,c)=>{"use strict";c.d(b,{NH:()=>r,rn:()=>q});var d=c(455511),e=c(226179),f=c(43521),g=c(304927),h=c(320108),i=c(189663);let j=(0,f.h)("backend/services/enduringAgents/memoryEmbeddingStore"),k=h.Zg.MEMORY_EMBEDDINGS;function l(){return global.__flujo_persona_embedding_cache??=new Map,global.__flujo_persona_embedding_cache}function m(a){return(0,i.workspaceCacheKey)("persona-memory-embeddings",a)}async function n(a,b){let c=await (0,g.Vx)(k,a);c?l().set(m(a),{...c,embeddings:b}):l().delete(m(a))}let o=new WeakMap;async function p(a){try{let b=await (0,g.Vx)(k,a),c=l().get(m(a));if(b&&c&&c.mtimeMs===b.mtimeMs&&c.sizeBytes===b.sizeBytes)return c.embeddings;let d=await (0,g.EI)(k,a,null),f=(d??("win32"===process.platform?[]:await (0,g.loadItem)(`${h.Zg.MEMORY_EMBEDDINGS}:${a}`,[]))).filter(a=>e.ct.safeParse(a).success);return null!==d&&await n(a,f),f}catch(b){return j.warn(`Failed to load embeddings for persona ${a}:`,b),[]}}async function q(a){return p(a)}function r(a,b,c,e,f){let g=Number.isFinite,h=Math.sqrt;if(0===e.length||!e.every(g))return new Map;let i=0;for(let a of e)i+=a*a;let j=h(i),k=new Map;for(let a of c)k.set(a.memoryId,a);let l=new Map;for(let c of b){let b=k.get(c.id);if(!b||b.personaId!==a||b.modelId!==f||b.contentDigest!==function(a){var b;let c=o.get(a);if(c?.content===a.content)return c.digest;let e=(b=a.content,(0,d.createHash)("sha256").update(b).digest("hex"));return o.set(a,{content:a.content,digest:e}),e}(c)||b.dimensions!==e.length||b.vector.length!==e.length)continue;let i=0,m=0,n=!0;for(let a=0;a<e.length;a+=1){let c=b.vector[a];if(!g(c)){n=!1;break}i+=e[a]*c,m+=c*c}if(!n)continue;let p=j*h(m),q=0===p?0:i/p;g(q)&&l.set(c.id,{available:!0,score:q<0?0:q>1?1:q})}return l}},769499:(a,b,c)=>{"use strict";c.d(b,{MN:()=>p,gP:()=>e.gP,zL:()=>o});var d=c(43521),e=c(267432),f=c(652795),g=c(81300),h=c(334701),i=c(267087),j=c(319280),k=c(680739),l=c(558736),m=c(738608);let n=(0,d.h)("backend/flow/execution/handlers/subflowToolInvocation");function o(a,b,c,d,e){return{name:a,description:`${c}
110
110
 
111
- CALLABLE SUBFLOW TOOL (not a handoff): calling this runs the "${b.label}" subflow right now and returns its result as structured JSON (success/output/error per lane) — you stay on the current step and can keep working with the answer. Saved child conversation memory applies when configured. An interrupted call has no checkpointed graph join and must be retried.`,inputSchema:{type:"object",properties:{task:{type:"string",description:d?"REQUIRED task/instruction for this subflow call. It has no default input configured.":"Task/instruction for this subflow call. Optional; omitted falls back to the subflow's configured input."},..."per-key"===e?{sessionKey:{type:"string",minLength:1,maxLength:128,description:"Stable child-conversation handle. Equal keys resume the same child; this overrides the saved key template."}}:{}},required:d?["task"]:[]}}}async function p(a,b,d){let e,{conversationId:o,emit:p}=d,q=(0,i.PL)(),r=(a,b)=>{if(!e)return;let c=e;e=void 0;try{let d=Math.max(0,q.elapsedMs()-c.waitMs);(0,h.z9)((0,h.k)({type:"subflow.invocation",runId:c.parentRunId,node:c.node,subflow:c.subflow,mode:"inline",invocationId:c.invocationId,childRunId:b?.childRunId,outcome:a,durationMs:d,waitMs:c.waitMs,phases:{subflowWait:c.waitMs,subflowExecution:d},errorClass:"error"===a?(0,h.Ys)(b?.error):void 0}))}catch{}};try{let d;if(!o)return{success:!1,error:"No active conversation to run the subflow tool call in."};let{FlowExecutor:h}=await Promise.resolve().then(c.bind(c,965458)),s=h.conversationStates.get(o);if(!s)return{success:!1,error:"Live conversation state not found for the subflow tool call."};if(s.executionExtensionContext||(0,l.isExecutionProtectedState)(s))return{success:!1,error:"execution_subflow_child_authority_required"};let t=s.subflowToolNameMap?.[a];if(!t)return{success:!1,error:`Unknown call_subflow tool "${a}" — no matching target node.`};let u=s.flowSnapshot??await g.flowService.getFlow(s.flowId),v=u?.nodes.find(a=>a.id===t),w=v?.data?.properties,x=w?.subflowId;if(!x)return{success:!1,error:"Target subflow node has no configured subflowId."};let y=(0,j.i)({personaAttribution:s.personaAttribution,parentFlowSnapshot:s.flowSnapshot,nodeId:t},x);try{d=y.flowDefinition?.name??(await g.flowService.getFlow(x))?.name}catch(a){n.warn("Could not resolve subflow display name; continuing without it",{err:a})}let z="string"==typeof b?.task?b.task.trim():"",A=(z.length>0?z:void 0)??w?.promptTemplate,B={subflowId:x,subflowName:d,...A?{input:{prompt:A}}:{},laneTitle:(0,f.oO)(A??d??"Subflow call"),callerSessionKey:(0,m.dd)(b?.sessionKey)},C=(s.runDepth??0)+1,D={nodeId:t,nodeName:v?.data?.label,nodeType:"subflow"},E={nodeId:t,nodeType:"subflow",subflowId:x,subflowName:d,nodeName:v?.data?.label,depth:C,chainDepth:s.chainDepth,parentRunId:s.conversationId,plannedExecutionId:s.plannedExecutionId,personaAttribution:s.personaAttribution,executionAuthority:(0,k.c4)(s.executionAuthority),parentFlowSnapshot:s.flowSnapshot,persistConversation:!1,sessionScope:w?.sessionScope,sessionKeyTemplate:w?.sessionKey,sessionInputMode:w?.sessionInputMode??"resume",sessionTurnCap:(0,m.p)(w?.sessionTurnCap),showSteps:!0,emit:p,lanes:[B],concurrencyLimit:1,joinSeparator:"\n\n",errorStrategy:"collect-all"},{runFlow:F}=await Promise.all([c.e(87019),c.e(22043)]).then(c.bind(c,987019)),{runSubflowLanes:G,resolveSubflowSessionKeys:H}=await Promise.resolve().then(c.bind(c,339756));"per-key"===E.sessionScope&&await H(E,s,t),E.persistConversation=!s.ephemeral&&w?.saveConversation!==!1&&(w?.sessionScope==="per-run"||w?.sessionScope==="per-key"&&!!E.lanes?.[0]?.sessionKey),s.logicalRunId&&(e={parentRunId:s.logicalRunId,node:{id:t,...v?.data?.label?{name:v.data.label}:{}},subflow:{id:x,...d?{name:d}:{}},invocationId:(0,i.Lf)(),waitMs:q.elapsedMs()});let I=await G(E,F,D,A?{prompt:A}:{prompt:""});return r(s.isCancelled?"cancelled":I.success?"completed":"error",{error:I.error,childRunId:function(a){let b=a?.lanes;if(!Array.isArray(b)||0===b.length)return;let c=b[0];for(let a of["runId","conversationId","childConversationId"]){let b=c?.[a];if("string"==typeof b&&b.length>0)return b}}(I)}),{success:I.success,data:{success:I.success,outputText:I.outputText,error:I.error,lanes:I.lanes},error:I.success?void 0:I.error}}catch(c){let b=c instanceof Error?c.message:String(c);return r("error",{error:c}),n.warn("call_subflow tool execution failed",{toolName:a,err:b}),{success:!1,error:b}}}},769588:(a,b,c)=>{"use strict";c.d(b,{LE:()=>o,PP:()=>n,c3:()=>p,jV:()=>m});var d=c(695794),e=c(43521),f=c(482040),g=c(212693),h=c(469088),i=c(241043),j=c(531123);let k=(0,e.h)("backend/services/mcp/sampling");function l(a){return a.sampling}function m(a){let b=l(a);return!!(b?.enabled&&b.modelId)}function n(a){let b=l(a);return b?.enabled?JSON.stringify({m:b.modelId,t:b.maxTokens,r:b.maxCallsPerMinute}):""}function o(a,b){let c=p(b);(0,j.zD)(a,"sampling/createMessage",c),a.setRequestHandler(d.u9,c)}function p(a){let b=[];return async(c,e={})=>{await (0,j.HM)(e);let m=l(a);if(!m?.enabled||!m.modelId)throw new d.Nh(d.O4.InvalidRequest,"Sampling is not enabled for this server");let n=m.maxCallsPerMinute??10,o=Date.now(),p=o-6e4;for(;b.length>0&&b[0]<p;)b.shift();if(b.length>=n)throw k.warn(`Sampling rate limit (${n}/min) hit for ${a.name}`),new d.Nh(d.O4.InvalidRequest,`Sampling rate limit of ${n}/min exceeded`);b.push(o);let q=await f.modelService.getModel(m.modelId);if(await (0,j.HM)(e),!q)throw new d.Nh(d.O4.InternalError,`Sampling model not found: ${m.modelId}`);if(void 0!==q.ownerCredentialBinding)throw new d.Nh(d.O4.InvalidRequest,"Owner-bound models require an authorized model-step transport.");if(q.fallbackPolicy||!(0,i.g3)(q.provider,q.adapter,q.name).maxOutputTokens)throw new d.Nh(d.O4.InvalidRequest,"Sampling requires a model that supports an output-token limit");let r=await f.modelService.resolveAndDecryptApiKey(q.ApiKey);await (0,j.HM)(e);let s=r||(q.fallbackPolicy||(0,i.supportsLocalModelAuth)((0,i.resolveModelAdapter)(q.provider,q.adapter))&&!q.ApiKey?.trim()?"":null);if(null===s)throw new d.Nh(d.O4.InternalError,"Could not resolve the sampling model API key");let t=c.params;if(!Number.isSafeInteger(t?.maxTokens)||t.maxTokens<=0)throw new d.Nh(d.O4.InvalidParams,"Sampling maxTokens must be a positive integer");let u=function(a){let b=[];for(let c of(a.systemPrompt&&b.push({role:"system",content:a.systemPrompt}),a.messages||[])){let a=c.content,d=a?.type==="text"&&"string"==typeof a.text?a.text:`[unsupported ${a?.type||"non-text"} content omitted]`;b.push({role:c.role,content:d})}return b}(t),v="number"==typeof t.temperature?t.temperature:.7;k.info(`Sampling for ${a.name} via model ${q.name} (${u.length} messages)`);let w=(0,g.getCompletionAdapter)(q),x=Math.min(...[t.maxTokens,(0,h.normalizeMaxTokens)(m.maxTokens),(0,h.normalizeMaxTokens)(q.maxTokens)].filter(a=>void 0!==a));await (0,j.HM)(e);let{completion:y}=await w.createCompletion({model:q,apiKey:s,messages:u,temperature:v,temperatureOverride:v,maxTokens:x,signal:e.signal});await (0,j.HM)(e);let z=y.choices?.[0]?.message?.content;return{role:"assistant",content:{type:"text",text:"string"==typeof z?z:""},model:q.name,stopReason:y.choices?.[0]?.finish_reason==="length"?"maxTokens":"endTurn"}}}},769760:(a,b,c)=>{"use strict";c.r(b),c.d(b,{McpRuntimeAuthorityRetirementError:()=>ac,assertMcpRuntimeAuthorityRetired:()=>af,attachShippedWorkspaceReadiness:()=>av,capabilityKey:()=>$,clientProtectedConfigFingerprint:()=>Z,createNewClient:()=>ar,createStdioTransport:()=>aw,createTransport:()=>as,flattenCustomHeaders:()=>al,getUnderlyingTransport:()=>ai,httpConfigKey:()=>aq,isolatedStdioRuntime:()=>at,protectedConfigFingerprint:()=>Y,resolveConfigHeaders:()=>ak,resolveStdioLaunch:()=>au,retireMcpRuntimeAuthority:()=>ah,safelyCloseClient:()=>ay,shouldRecreateClient:()=>ax,stdioConfigKey:()=>ap});var d=c(34762),e=c(651633),f=c(179764),g=c(774858),h=c(478645),i=c(56140),j=c(470589),k=c(558736),l=c(57971),m=c(481034),n=c(525613),o=c(635016),p=c(629021),q=c(333873),r=c(321820),s=c(977598),t=c(973024),u=c.n(t),v=c(176760),w=c.n(v);class x extends Error{constructor(){super("Isolated MCP runtime directory is unavailable or unsafe."),this.code="UNSAFE_MCP_RUNTIME_DIRECTORY",this.name="RuntimeDirectoryAdmissionError"}}function y(a,b){if(!a.isDirectory()||a.isSymbolicLink())throw new x;if("win32"!==process.platform){let c=process.geteuid?.()??process.getuid?.();if(void 0===c||a.uid!==BigInt(c)||(b?(a.mode&BigInt(511))!==BigInt(448):(a.mode&BigInt(18))!==BigInt(0)))throw new x}}class z{constructor(a){this.directories=new Map;try{this.root=w().resolve(a);let b=u().lstatSync(this.root,{bigint:!0});y(b,!1),this.directories.set(this.root,{stat:b,canonical:u().realpathSync(this.root),privateAnchor:!1}),this.verify()}catch{throw new x}}admit(a,b=!1){try{let c;this.verify();let d=w().resolve(a),e=this.directories.get(w().dirname(d));if(d===this.root||!e)throw new x;let f=this.directories.get(d);if(f){b&&!f.privateAnchor&&(y(f.stat,!0),f.privateAnchor=!0);return}try{c=u().lstatSync(d,{bigint:!0})}catch(a){if("ENOENT"!==a.code)throw a}if(!c){this.verify();try{u().mkdirSync(d,{mode:448})}catch(a){if("EEXIST"!==a.code)throw a}c=u().lstatSync(d,{bigint:!0})}y(c,b);let g=u().realpathSync(d);if(w().dirname(g)!==e.canonical)throw new x;this.directories.set(d,{stat:c,canonical:g,privateAnchor:b}),this.verify()}catch{throw new x}}verify(){try{for(let[a,b]of this.directories){let c=u().lstatSync(a,{bigint:!0});for(let a of(y(c,b.privateAnchor),["dev","ino","mode","uid","gid"]))if(c[a]!==b.stat[a])throw new x;if(u().realpathSync(a)!==b.canonical)throw new x}}catch{throw new x}}}var A=c(43521),B=c(380949),C=c(7557),D=c(676881),E=c(342518),F=c(442409),G=c(901984),H=c(593330);let I=new Set(["node","npm","npx"]);var J=c(189663),K=c(553468),L=c(34679),M=c(140742),N=c(769588),O=c(170098),P=c(122134),Q=c(899631),R=c(492335),S=c(767351),T=c(928776),U=c(660826),V=c(127915);let W=globalThis,X=W.__flujoProtectedConfigFingerprintKey??=(0,s.randomBytes)(32);function Y(a){return(0,s.createHmac)("sha256",X).update(JSON.stringify(a)).digest("hex")}function Z(a){return a.__flujoProtectedConfigFingerprint}function $(a){return[(0,N.PP)(a),(0,O.NJ)(a),!0===a.enableMcpApps?"mcp-apps:on":"mcp-apps:off",!0===a.enableMcpSkills?"mcp-skills:on":"mcp-skills:off"].join("|")}let _=Symbol.for("FLUJO:mcp-authority-retirement-errors:v1"),aa=Object.getOwnPropertyDescriptor(globalThis,_);if(aa&&(!("value"in aa)||aa.configurable||aa.writable||!(aa.value instanceof WeakSet)))throw Error("MCP retirement error provenance refused.");let ab=aa?.value??new WeakSet;aa||Object.defineProperty(globalThis,_,{value:ab,writable:!1,configurable:!1,enumerable:!1});class ac extends AggregateError{constructor(a,b,c){super(a,b,c),WeakSet.prototype.add.call(ab,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(ab,a)}}function ad(){return globalThis.__flujo_mcp_authority_retirement_quarantines??=new Map}function ae(a,b=(0,J.getCurrentWorkspace)()){return`${b}\0${a}`}function af(a){let b=ad().get(ae(a));if(b)throw b.error}function ag(a,b,c,d){let e=ad(),f=ae(a,b);d?e.set(f,{owner:c,error:d}):e.get(f)?.owner===c&&e.delete(f)}function ah(a,b,c,e){let f=[];try{c&&(0,d.p9)(c)}catch(a){f.push(a)}try{(0,U.tS)(e?.leaseId)}catch(a){f.push(a)}if(f.length){let d=new ac(f,"MCP runtime authority retirement failed.",{cause:f[0]});throw ag(a,b,c??e,d),d}ag(a,b,c??e)}function ai(a){let b=a,c=new Set;for(;b&&"object"==typeof b&&!c.has(b);){c.add(b);let a=b.__flujoInnerTransport;if(!a)break;b=a}return b}let aj=(0,A.h)("backend/services/mcp/connection");async function ak(a){let b=a;if(a.env&&"object"==typeof a.env){let c=new Map;for(let[b,d]of Object.entries(a.env)){if(!(0,R.dR)(b))continue;let a=(0,R.ff)(d);if(!a||(0,Q.uh)(a))continue;let e=await (0,P.G)(a);e&&c.set(b,e)}b={...b,env:(0,R.ln)(c)}}if("streamable"!==a.transport&&"sse"!==a.transport||!a.headers||"object"!=typeof a.headers)return b;let c=new Map;for(let[b,d]of Object.entries(a.headers)){if(!(0,R.pI)(b))continue;let a=(0,R.ff)(d);if(!a||(0,Q.uh)(a))continue;let e=await (0,P.G)(a);e&&c.set(b,e)}return{...b,headers:(0,R.ln)(c)}}function al(a){let b=new Map;for(let[c,d]of Object.entries(a)){if(!(0,R.pI)(c))continue;let a=(0,R.ff)(d);"string"==typeof a&&a.length>0&&b.set(c,a)}return(0,R.ln)(b)}function am(a){let b=new Map;if(a)for(let[c,d]of Object.entries(a)){if(!(0,R.dR)(c))continue;let a=(0,R.ff)(d);void 0!==a&&b.set(c,a)}return(0,R.ln)(b)}let an=new Set(["path","pathext","home","userprofile","homedrive","homepath","appdata","localappdata","programdata","xdg_config_home","xdg_cache_home","xdg_data_home","xdg_state_home","xdg_runtime_dir","tmp","temp","tmpdir","shell","comspec","systemroot","windir","systemdrive","programfiles","programfiles(x86)","gh_config_dir"]);function ao(a,b,c){for(let c of Object.keys(a))c.toLowerCase()===b.toLowerCase()&&delete a[c];void 0!==c&&(a[b]=c)}function ap(a,b=!1){return JSON.stringify({command:a.command,args:a.args??[],env:am(a.env),cwd:String(a.cwd??""),rootPath:a.rootPath??"",isolateRuntimeHome:b,isolation:a.isolation,trustedHost:a.trustedHost})}function aq(a){return JSON.stringify({transport:a.transport,url:a.serverUrl??"",headers:a.headers??{},requestInit:a.requestInit??{},eventSourceInit:a.eventSourceInit??{},reconnectionOptions:a.reconnectionOptions??{},sessionId:a.sessionId??"",oauthClientId:a.oauthClientId??"",oauthIssuer:a.oauthIssuer??"",oauthClientInformation:a.oauthClientInformation??{},oauthClientSecret:a.oauthClientSecret??"",oauthTokens:a.oauthTokens??{}})}function ar(a){if(aj.debug("Entering createNewClient method"),(0,k.isProtectedExecutionServer)(a.name)){(0,k.assertExecutionServerConfig)(a);let b=new e.tI({name:`flujo-${a.name}-client`,version:"3.47.0"},{capabilities:{}});return b.__flujoCapKey=$(a),Object.defineProperty(b,"__flujoProtectedConfigFingerprint",{value:Y(a),enumerable:!1}),b}let b=(0,N.jV)(a),c=(0,O.fy)(a),d=!0===a.enableMcpApps,f="stdio"===a.transport&&void 0===a.isolation,g=new e.tI({name:`flujo-${a.name}-client`,version:"3.47.0"},{capabilities:{experimental:{},roots:{listChanged:!0},...b?{sampling:{}}:{},...f||c?{elicitation:{...f?{url:{}}:{},...c?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[C.ET]:{}}:{},...f?{[T.OM]:T.XC}:{},...d?{[S.OF]:{mimeTypes:[S.cM]}}:{}}}});return(0,M.FP)(g,a),b&&(0,N.LE)(g,a),(f||c)&&(0,O.n4)(g,a),g.__flujoCapKey=$(a),g}function as(a,b){if((0,B.SL)(a),aj.debug("Entering createTransport method"),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new f.Bk("ISOLATION_POLICY_INVALID");if("streamable"===a.transport){aj.info(`Creating streamable http transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.headers&&"object"==typeof a.headers){let c=al(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},aj.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}if(a.oauthClientId||a.oauthClientInformation){aj.info(`Setting up OAuth authentication for ${a.name}`);let c=(0,D.Cl)(a);b.authProvider=c,b.fetch=c.oauthFetch,a.oauthTokens?aj.debug(`OAuth provider configured for ${a.name} with existing tokens`):aj.debug(`OAuth provider configured for ${a.name} - will initiate OAuth flow if needed`)}else aj.debug(`No OAuth configuration found for ${a.name}`);let c=new n.j(new URL(a.serverUrl),b);return c.__flujoHttpKey=aq(a),c}if("sse"===a.transport){aj.info(`Creating legacy sse transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit),a.headers&&"object"==typeof a.headers){let c=al(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},aj.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}let c=new o.A(new URL(a.serverUrl),b);return c.__flujoHttpKey=aq(a),c}return"websocket"===a.transport?(aj.info(`Creating WebSocket transport for server ${a.name} with URL ${a.websocketUrl}`),new m.I(new URL(a.websocketUrl))):aw(a,b)}function at(a){let b=(0,J.getWorkspaceDataDir)(),c=(0,s.createHash)("sha256").update(a,"utf8").digest("hex").slice(0,24),d=new z(b),e=b;for(let a of["userdata","mcp-runtime",c])e=q.join(e,a),d.admit(e,a===c);let f=e,g=q.join(f,"home"),h=q.join(f,"cwd");d.admit(g),d.admit(h);let i={appData:q.join(g,"AppData","Roaming"),localAppData:q.join(g,"AppData","Local"),config:q.join(g,".config"),cache:q.join(g,".cache"),data:q.join(g,".local","share"),state:q.join(g,".local","state"),runtime:q.join(g,".runtime"),temp:q.join(g,"tmp"),npm:q.join(g,".npm"),pip:q.join(g,".cache","pip"),uv:q.join(g,".cache","uv")};for(let a of Object.values(i)){let b=q.relative(g,a),c=g;for(let a of b.split(q.sep).filter(Boolean))c=q.join(c,a),d.admit(c)}let j={HOME:g,USERPROFILE:g,APPDATA:i.appData,LOCALAPPDATA:i.localAppData,XDG_CONFIG_HOME:i.config,XDG_CACHE_HOME:i.cache,XDG_DATA_HOME:i.data,XDG_STATE_HOME:i.state,XDG_RUNTIME_DIR:i.runtime,TMPDIR:i.temp,TMP:i.temp,TEMP:i.temp,NPM_CONFIG_CACHE:i.npm,PIP_CACHE_DIR:i.pip,UV_CACHE_DIR:i.uv,FLUJO_PARENT_DATA_DIR:(0,G.ok)(),FLUJO_DATA_DIR:b,FLUJO_WORKSPACE:(0,J.getCurrentWorkspace)()};if("win32"===process.platform){let a=q.parse(g);j.HOMEDRIVE=a.root.replace(/[\\/]$/,""),j.HOMEPATH=g.slice(a.root.length-1)}return d.verify(),{cwd:h,env:j}}function au(a,b){if("stdio"!==a.transport)throw new B.UQ;if(void 0!==a.isolation){if(void 0!==a.trustedHost)throw new f.Bk("ISOLATION_POLICY_INVALID");let b=(0,j.O0)(a,am(a.env)),{launch:c}=b;return{command:c.command,args:[...c.args],env:(0,j.H2)(c),cwd:c.cwd,isolation:b}}if((0,j.iw)(a),void 0!==a.trustedHost){let c=(0,g.FN)(a),d=(0,h.vb)(a),e=b?.isolateRuntimeHome===!0;if(e!==("isolated"===d.policy.runtimeHome))throw new h.Kq("HOST_POLICY_INVALID");if(e){let b=at(a.name);if(d.policy.packageRunner&&q.resolve(a.cwd)!==q.resolve(b.cwd))throw new h.Kq("HOST_POLICY_INVALID");for(let[a,e]of Object.entries(b.env)){if(!d.policy.environmentNames.includes(a))throw new h.Kq("HOST_POLICY_INVALID");if(d.policy.packageRunner){let b=Object.entries(c.env).find(([b])=>b.toUpperCase()===a.toUpperCase())?.[1];if(b&&b!==e)throw new h.Kq("HOST_POLICY_INVALID")}c.env[a]=e}if(d.policy.packageRunner){let a=c.args.findIndex(a=>a.startsWith("--cache="));if(a<0)throw new h.Kq("HOST_POLICY_INVALID");c.args[a]=`--cache=${b.env.NPM_CONFIG_CACHE}`}}return aj.debug("Transformed environment variable names",Object.keys(c.env)),c}let c=(0,K.AW)(a),d=!!c,e=c?.defaultName==="bash",i=a=>d?a:(0,J.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"),k=i(a.command),l=a.args?a.args.map(i):[],m=`${C.VL}/${a.name}`;aj.info(`Creating stdio transport for server ${a.name}`),aj.debug(`Original command: ${k}`),aj.debug(`Original args: ${JSON.stringify(l)}`),aj.debug(`Server directory: ${m}`);let n=!q.isAbsolute(k)&&(k.includes("/")||k.includes("\\")),o=!k.includes("/")&&!k.includes("\\");if(aj.debug(`Is relative path: ${n}`),aj.debug(`Is just filename: ${o}`),"win32"===r.platform()&&k.toLowerCase().endsWith(".bat"))if(aj.debug(`Detected .bat file on Windows: ${k}`),o){let a=q.join((0,J.getWorkspaceDataDir)(),m,k);aj.debug(`Checking if file exists at: ${a}`);let b=p.existsSync(a);aj.debug(`File exists: ${b}`),b?(aj.debug(`Using full path to .bat file: ${a}`),l=["/c",a,...l]):(aj.warn(`WARNING: .bat file not found at ${a}`),l=["/c",k,...l]),k="cmd.exe"}else aj.debug(`Using cmd.exe with path as provided: ${k}`),l=["/c",k,...l],k="cmd.exe";let s=function(a,b){if(!a||!(!a.includes("/")&&!a.includes("\\")))return a;let c=a.toLowerCase();if(!I.has(c))return a;if("node"===c)return b.execPath||a;if(!b.execPath)return a;let d=b.dirname(b.execPath);for(let a of"win32"===b.platform?[`${c}.cmd`,`${c}.exe`,c]:[c]){let c=b.joinPath(d,a);if(b.fileExists(c))return c}return a}(k,{execPath:process.execPath,platform:r.platform(),dirname:q.dirname,joinPath:q.join,fileExists:p.existsSync});s!==k&&(aj.debug(`Resolved Node toolchain command "${k}" to absolute path: ${s}`),k=s),aj.debug(`Final command: ${k}`),aj.debug(`Final args: ${JSON.stringify(l)}`);let t=e||b?.isolateRuntimeHome!==!0?void 0:at(a.name),u=i((0,H.u)({command:a.command,args:a.args,rootPath:a.rootPath,cwd:a.cwd,serverName:a.name,defaultCwd:`${C.VL}/${a.name}`,packageRunnerCwd:t?.cwd})),v=q.isAbsolute(u)?u:q.join((0,J.getWorkspaceDataDir)(),u);aj.debug(`cwd: ${v}`);let w=am(a.env),x=e?function(a){let b={...a},c=Object.entries(process.env).filter(a=>"string"==typeof a[1]);for(let[a,d]of c)ao(b,a,d);for(let a of an)c.find(([b])=>b.toLowerCase()===a)||ao(b,a,void 0);return b}(w):w;if(!d)for(let[a,b]of Object.entries(x))x[a]=i(b);t&&Object.assign(x,t.env),function(a){if("win32"!==process.platform)return;let b=(a,b)=>Object.entries(a).find(([a,c])=>a.toLowerCase()===b.toLowerCase()&&""!==(c??"").trim())?.[1],c=b(process.env,"SystemRoot")??b(process.env,"windir")??"C:\\Windows";for(let[d,e]of Object.entries({SystemRoot:c,windir:c,ComSpec:b(process.env,"ComSpec")??q.join(c,"System32","cmd.exe"),PATHEXT:b(process.env,"PATHEXT")??".COM;.EXE;.BAT;.CMD"}))if(void 0===b(a,d)){for(let b of Object.keys(a))b.toLowerCase()===d.toLowerCase()&&delete a[b];a[d]=e}}(x);let y=(0,G.ok)(),z=(0,J.getWorkspaceDataDir)();if(x.FLUJO_PARENT_DATA_DIR=y,x.FLUJO_DATA_DIR=z,x.FLUJO_WORKSPACE=(0,J.getCurrentWorkspace)(),c?.defaultName==="browser"){if(!x.PLAYWRIGHT_BROWSERS_PATH?.trim()){let a=(0,K.AI)(process.env);a&&(x.PLAYWRIGHT_BROWSERS_PATH=a)}x.FLUJO_BROWSER_PROFILE_DIR=q.join(z,"browser-profile","trusted"),x.FLUJO_BROWSER_SCREENSHOT_DIR=q.join(z,"screenshots","browser"),x.FLUJO_BROWSER_RECORD_DIR=q.join(z,"recordings","browser")}for(let a of Object.keys(x))a.toUpperCase()===V.wd&&delete x[a];aj.verbose("Transformed environment variable names",JSON.stringify(Object.keys(x)));let A=(0,V.hz)(a);return A&&(x[V.wd]=A),"1"===process.env.FLUJO_WORKER_MODE&&c?.defaultName==="flujo"&&(x.FLUJO_WORKER_MODE="1",process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN&&(x.FLUJO_SNAPSHOT_CONTROL_TOKEN=process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN)),{command:k,args:l,env:x,cwd:v}}function av(a,b,c){let d=(0,K.AW)(b),e=(0,J.getWorkspaceDataDir)();if(!d||q.resolve(c)!==q.resolve(e,"mcp-servers",d.packageDirectory))return;let f=a.start.bind(a);a.start=async()=>{await (0,L._F)(e,void 0,[d.packageDirectory]),await f()}}function aw(a,b){let c,e,f;if(aj.debug("Entering createStdioTransport method"),"stdio"!==a.transport)throw Error("Cannot create stdio transport for non-stdio config");let{command:h,args:k,env:m,cwd:n,isolation:o}=au(a,b),p=(0,J.getCurrentWorkspace)(),q=()=>ah(a.name,p,e,c);aj.info(`Creating StdioClientTransport for ${a.name} with stderr: 'pipe'`);try{af(a.name),e=(0,d.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,U.D9)(a.name):void 0;let p=e?(0,d.Uf)(a,e):{},r={command:h,args:k,env:{...m,...c?a.trustedHost?(0,g.s7)(a,c.env):c.env:{},...p},cwd:n,stderr:o?"ignore":"pipe",...o?{maxBufferSize:262144}:{}};o||(Object.freeze(r.args),Object.freeze(r.env),Object.freeze(r)),f=new l.oQ(r),o?(0,j.We)(f,a,o,q):a.trustedHost?(0,g.Zu)(f,a,q,e):(av(f,a,n),(0,i.uR)(f,a,a=>JSON.stringify([ap(a,b?.isolateRuntimeHome===!0),$(a)])))}catch(b){let a=[];try{o?.close()}catch(b){a.push(b)}try{q()}catch(b){a.push(b)}if(a.length)throw new ac([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}return c&&(f.__flujoRuntimeBrokerLeaseId=c.leaseId),f.__flujoBundledWorkload=e,f.__flujoRetireRuntimeAuthority=q,f.__flujoStdioKey=ap(a,b?.isolateRuntimeHome===!0),f.stderr?aj.info(`Stderr stream is available for ${a.name}`):aj.warn(`Stderr stream is NOT available for ${a.name}`),f}function ax(a,b,c=!1,d){if(aj.debug("Entering shouldRecreateClient method"),(0,E.wk)(a))return{needsNewClient:!0,reason:"Existing connection is closed"};if((a.__flujoCapKey??"")!==$(b))return{needsNewClient:!0,reason:"Client capabilities (sampling/elicitation/MCP Apps/Skills) changed"};let e=!0===a.__flujoBeta,f=c&&"websocket"!==b.transport;if(e!==f)return{needsNewClient:!0,reason:f?"Beta MCP protocol enabled":"Beta MCP protocol disabled"};if(e){let c=a.transport;if(!c||c.__flujoKind!==b.transport)return{needsNewClient:!0,reason:`Transport type changed to ${b.transport}`};if("stdio"===b.transport){if(c.__flujoStdioKey!==ap(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}else if(c.__flujoHttpKey!==aq(b))return{needsNewClient:!0,reason:`${b.transport} auth/connection parameters changed`};return{needsNewClient:!1}}if("websocket"===b.transport){if(!(a.transport instanceof m.I))return{needsNewClient:!0,reason:"Transport type changed to websocket"}}else if("streamable"===b.transport){if(!(a.transport instanceof n.j))return{needsNewClient:!0,reason:"Transport type changed to streamable"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"Streamable server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing streamable transport has no config key"};if(e!==aq(b))return{needsNewClient:!0,reason:"Streamable auth/connection parameters changed"}}else if("sse"===b.transport){if(!(a.transport instanceof o.A))return{needsNewClient:!0,reason:"Transport type changed to sse"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"SSE server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing sse transport has no config key"};if(e!==aq(b))return{needsNewClient:!0,reason:"SSE auth/connection parameters changed"}}else{if(!(a.transport instanceof l.oQ))return{needsNewClient:!0,reason:"Transport type changed to stdio"};if("stdio"!==b.transport)return{needsNewClient:!0,reason:"Transport type changed from stdio"};let c=a.transport.__flujoStdioKey;if(!c)return{needsNewClient:!0,reason:"Existing stdio transport has no config key"};if(c!==ap(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}return{needsNewClient:!1}}async function ay(a,b,c,e){let f,g;aj.debug("Entering safelyCloseClient method");let h=Date.now(),i=e?.gracePeriodMs??15e3,k=e?.killEscalationMs??5e3,l=!1,m=!1,n=ai(a.transport),o=(0,j.Ck)(n),p=n?._process,q=p&&"function"==typeof p.kill?"owned":c&&"stdio"!==c.transport?"external":"unknown",r="none",s=[];try{if(p&&"function"==typeof p.kill&&(l=null!==p.exitCode||null!==p.signalCode,null===p.exitCode&&null===p.signalCode)){try{p.stdin&&!p.stdin.destroyed&&(p.stdin.end(),aj.debug(`Closed stdin for graceful shutdown for ${b}`))}catch(a){aj.warn(`Error closing stdin for ${b}:`,a)}if(l=await (null!==p.exitCode||null!==p.signalCode?Promise.resolve(!0):new Promise(a=>{let b=()=>{clearTimeout(c),a(!0)},c=setTimeout(()=>{p.removeListener("exit",b),a(!1)},i);c.unref?.(),p.once("exit",b)})))aj.info(`Process exited gracefully for ${b}`);else{aj.warn(`Process did not exit within ${i}ms after stdin close; escalating to a tree kill for ${b}`);let a=await (0,F.U)(p,{graceMs:k,finalWaitMs:k});l=a.exited,m=a.forced,l?aj.warn(`Process tree for ${b} force-terminated after ${a.durationMs}ms`):aj.error(`Process tree for ${b} (pid ${a.pid??"unknown"}) did not exit after forced escalation`)}}await a.close(),aj.info(`Client closed successfully for ${b}`)}catch(a){r="close_failed",g=a,aj.warn(`Error closing client for ${b}:`,a)}finally{try{f=o?.close()}catch(a){s.push(a)}let a=n?.__flujoRetireRuntimeAuthority;if(a)try{a()}catch(a){s.push(a)}else{try{let a=n?.__flujoBundledWorkload;a&&(0,d.p9)(a)}catch(a){s.push(a)}try{(0,U.tS)(n?.__flujoRuntimeBrokerLeaseId)}catch(a){s.push(a)}}}"owned"===q&&p&&(l||=null!==p.exitCode||null!==p.signalCode),f?.outcome==="unknown"&&(l=!1);let t="external"===q?"not_applicable":l?"observed_exit":"unknown";"unknown"===t&&"none"===r&&(r="exit_unobserved");let u={exited:l,forced:m,durationMs:Date.now()-h,processOwnership:q,exitOutcome:t,errorClassification:r,...o&&f?{isolation:{schemaVersion:1,generation:o.launch.generation,cleanupOutcome:f.outcome}}:{}};if(s.length){let a=void 0===g?s:[g,...s];throw Object.assign(new ac(a,"MCP shutdown authority retirement failed.",{cause:a[0]}),{shutdownObservation:u})}return u}},774207:(a,b,c)=>{"use strict";c.d(b,{DO:()=>l,Je:()=>k,go:()=>d,oR:()=>i});let d=3,e=/(session|usage|rate|quota|message|token)[\s_-]{0,3}limit|limit reached|reached your limit|too many requests|rate[\s_-]?limited|quota exceeded|exceeded your [a-z ]{0,24}quota|resets? (at|in|on)\b/i,f=/^\d+(?:\.\d+)?$/;function g(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function h(a){return"string"==typeof a&&a.trim().length>0?a.trim():void 0}function i(a,b=Date.now()){if(null==a)return;if("number"==typeof a){if(!Number.isFinite(a)||a<0)return;return Math.round(1e3*a)}let c=h(a);if(!c)return;if(f.test(c)){let a=Number(c);if(!Number.isFinite(a)||a<0)return;return Math.round(1e3*a)}if(/^[+-]/.test(c))return;let d=Date.parse(c);if(!Number.isFinite(d))return;let e=d-b;if(!(e<0))return e}function j(a){let b=a&&"object"==typeof a?a:{},c=b.details&&"object"==typeof b.details?b.details:b.errorDetails&&"object"==typeof b.errorDetails?b.errorDetails:b,d=h(b.message)??h(c.message)??("string"==typeof a?a:"")??"";return{status:g(c.status)??g(c.statusCode),code:h(c.code)??h(c.type)??h(b.code),message:d,retryAfter:c.retryAfter,retryAfterMs:g(c.retryAfterMs)}}function k(a,b={}){let c=b.now??Date.now(),d=j(a);if(!function(a){let b=j(a);if(429===b.status)return!0;let c=`${b.code??""} ${b.message}`.toLowerCase();return!!e.test(c)||["service temporarily overloaded","temporarily overloaded","provider returned error","upstream error","bad request","rate limit","quota","too many requests","throttle","throttled"].some(a=>c.includes(a))}(a))return;let f=void 0!==d.retryAfterMs&&d.retryAfterMs>=0?d.retryAfterMs<=(b.maxDelayMs??9e5)?d.retryAfterMs:void 0:function(a,b=Date.now(),c=9e5){let d=i(a,b);if(void 0!==d&&!(d>c))return d}(d.retryAfter,c,b.maxDelayMs);if(void 0!==f)return{delayMs:f,retryAt:c+f,reason:"session_limit",status:d.status,code:d.code}}async function l(a,b={}){let{signal:c,shouldAbort:d}=b;return c?.aborted||d?.()?"aborted":a<=0?"ready":new Promise(e=>{let f,g=!1,h=a=>{g||(g=!0,clearTimeout(j),f&&clearInterval(f),c&&c.removeEventListener("abort",i),e(a))};function i(){h("aborted")}let j=setTimeout(()=>h("ready"),a);j.unref?.(),d&&(f=setInterval(()=>{d()&&h("aborted")},b.pollMs??250),f.unref?.()),c?.addEventListener("abort",i,{once:!0})})}},783125:(a,b,c)=>{"use strict";c.d(b,{$e:()=>t});var d=c(594735),e=c(977598),f=c(475560),g=c(43521),h=c(189663),i=c(257975);let j=Symbol("event snapshot byte budget exceeded");function k(a,b){if(a.length+2>b)throw j;let c=2;for(let d=0;d<a.length;d++){let e=a.charCodeAt(d);if(34===e||92===e)c+=2;else if(e<32)c+=8===e||9===e||10===e||12===e||13===e?2:6;else if(e<128)c++;else if(e<2048)c+=2;else if(e>=55296&&e<=56319){let b=a.charCodeAt(d+1);b>=56320&&b<=57343?(c+=4,d++):c+=6}else e>=56320&&e<=57343?c+=6:c+=3;if(c>b)throw j}return c}function l(a,b){if(!Number.isSafeInteger(b)||b<=0)return;let c=b,d=0,e=new WeakSet,f=a=>{if(a>c)throw j;c-=a},g=(a,b=0)=>{if(++d>1e5||b>64)throw j;if("string"==typeof a)return f(k(a,c)),a;if(null===a)return f(4),null;if("boolean"==typeof a)return f(a?4:5),a;if("number"==typeof a)return f(Number.isFinite(a)?String(a).length:4),a;if("object"!=typeof a){if("bigint"==typeof a)throw j;f(4);return}if(i.types.isProxy(a)||e.has(a))throw j;let h=Object.getPrototypeOf(a),l=Array.isArray(a);if(null!==h&&h!==(l?Array.prototype:Object.prototype)||Object.getOwnPropertyDescriptor(Object.prototype,"toJSON")||l&&Object.getOwnPropertyDescriptor(Array.prototype,"toJSON"))throw j;let m=Object.getOwnPropertyDescriptor(a,"toJSON");if(m&&(m.get||m.set||"function"==typeof m.value))throw j;f(2),e.add(a);let n=d=>{f(k(d,c)),f(2);let e=Object.getOwnPropertyDescriptor(a,d);if(e?.get||e?.set||!e&&(Object.getOwnPropertyDescriptor(Array.prototype,d)||Object.getOwnPropertyDescriptor(Object.prototype,d)))throw j;return g(e?.value,b+1)};try{if(l){let b=[];for(let c=0;c<a.length;c++)b.push(n(String(c)));return b}let b=Object.create(null);for(let c in a)Object.hasOwn(a,c)&&(b[c]=n(c));return b}finally{e.delete(a)}};try{let c=JSON.stringify(g(a));if(void 0===c)return;let d=Buffer.byteLength(c,"utf8");if(d>b)return;return{json:c,utf8Bytes:d}}catch{return}}let m=(0,g.h)("backend/execution/flow/engine/ExecutionEventBus"),n=Object.freeze({maxWorkspaceUtf8Bytes:4194304,maxProcessUtf8Bytes:0x1000000}),o=n.maxWorkspaceUtf8Bytes,p=n.maxProcessUtf8Bytes,q=Object.freeze({maxConversationUtf8Bytes:4194304,maxChannels:1024,maxWorkspaces:64});class r{chargeReplay(a,b){let c=this.replayWorkspaces.get(b.workspace);for(;c&&c.utf8Bytes+a.utf8Bytes>n.maxWorkspaceUtf8Bytes;){let a=c.entries.values().next().value;if(!a)break;this.evictReplayOwner(a)}for(;this.replayUtf8Bytes+a.utf8Bytes>n.maxProcessUtf8Bytes;){let a=this.replayEntries.values().next().value;if(!a)break;this.evictReplayOwner(a)}(c=this.replayWorkspaces.get(b.workspace))||(c={utf8Bytes:0,entries:new Map},this.replayWorkspaces.set(b.workspace,c)),c.entries.set(a,b),c.utf8Bytes+=a.utf8Bytes,this.replayEntries.set(a,b),this.replayUtf8Bytes+=a.utf8Bytes}releaseReplay(a){let b=this.replayEntries.get(a);if(!b)return;this.replayEntries.delete(a),this.replayUtf8Bytes-=a.utf8Bytes;let c=this.replayWorkspaces.get(b.workspace);c&&(c.entries.delete(a),c.utf8Bytes-=a.utf8Bytes,0===c.entries.size&&this.replayWorkspaces.delete(b.workspace))}evictReplayOwner(a){"conversation"===a.kind?this.evictConversationReplayPrefix(a.channel):this.evictGlobalReplayPrefix(a.firehose)}getFirehose(){let a=(0,h.getCurrentWorkspace)(),b=this.firehoses.get(a);if(!b){if(this.firehoses.size>=q.maxWorkspaces){let a=[...this.firehoses].find(([,a])=>0===a.emitter.listenerCount("event"));if(!a)return;for(;a[1].buffer.length;)this.evictGlobalReplayPrefix(a[1]);this.firehoses.delete(a[0])}let c=new d.EventEmitter;c.setMaxListeners(0),b={emitter:c,seq:0,buffer:[],utf8Bytes:0,epoch:(0,e.randomUUID)()},this.firehoses.set(a,b)}return b}getChannel(a){let b=(0,h.workspaceCacheKey)(a),c=this.channels.get(b);if(!c){if(this.channels.size>=q.maxChannels){let a=[...this.channels].find(([,a])=>0===a.emitter.listenerCount("event"));if(!a)return;this.removeChannel(a[0],a[1])}let a=new d.EventEmitter;a.setMaxListeners(0),c={emitter:a,seq:0,buffer:[],utf8Bytes:0},this.channels.set(b,c)}return c}evictConversationReplayPrefix(a){let b=a.buffer.shift();b&&(a.utf8Bytes-=b.utf8Bytes,this.conversationReplayUtf8Bytes-=b.utf8Bytes,this.conversationReplayEntries.delete(b),this.releaseReplay(b),0===a.buffer.length&&(a.buffer=[]))}removeChannel(a,b){for(this.cancelCleanup(a);b.buffer.length;)this.evictConversationReplayPrefix(b);this.channels.delete(a)}retainConversationReplay(a,b){let c=l(b,q.maxConversationUtf8Bytes);if(!c){for(;a.buffer.length;)this.evictConversationReplayPrefix(a);return}let d={...c,seq:b.seq};for(this.chargeReplay(d,{workspace:(0,h.getCurrentWorkspace)(),kind:"conversation",channel:a}),a.buffer.push(d),a.utf8Bytes+=d.utf8Bytes,this.conversationReplayUtf8Bytes+=d.utf8Bytes,this.conversationReplayEntries.set(d,a);a.buffer.length>1e3||a.utf8Bytes>q.maxConversationUtf8Bytes;)this.evictConversationReplayPrefix(a)}ensureConversationProjection(a){return void 0!==this.getChannel(a)}ensureGlobalProjection(){return void 0!==this.getFirehose()}cancelCleanup(a){let b=this.cleanupTimers.get(a);b&&(clearTimeout(b),this.cleanupTimers.delete(a))}scheduleCleanup(a,b,c){this.cancelCleanup(a);let d=setTimeout(()=>{if(this.cleanupTimers.get(a)!==d)return;this.cleanupTimers.delete(a);let e=this.channels.get(a);e!==b||e.seq!==c||(0!==e.seq||0!==e.buffer.length)&&e.terminalSeq!==c||e.emitter.listenerCount("event")>0||this.removeChannel(a,e)},3e5);"function"==typeof d.unref&&d.unref(),this.cleanupTimers.set(a,d)}emit(a,b){let c=this.getChannel(a),d=(0,h.workspaceCacheKey)(a),e=(0,f.allocateSeq)(a);c&&(c.seq=e+1,this.cancelCleanup(d),c.terminalSeq="run:done"===b.type?c.seq:void 0);let g={...b,conversationId:a,seq:e,timestamp:Date.now()};return c&&(this.retainConversationReplay(c,g),c.emitter.emit("event",g)),(0,f.appendFromBus)(g),this.publishGlobal(g),c&&"run:done"===g.type&&c.seq===e+1&&c.terminalSeq===e+1&&this.scheduleCleanup(d,c,e+1),g}emitterFor(a){return(0,h.bindToCurrentWorkspace)(b=>{try{this.emit(a,b)}catch(b){m.warn(`Failed to emit execution event for ${a}`,{err:b})}})}getBufferedSince(a,b){let c=this.channels.get((0,h.workspaceCacheKey)(a));return c?c.buffer.filter(a=>a.seq>=b).map(a=>JSON.parse(a.json)):[]}replayWindow(a){let b=this.channels.get((0,h.workspaceCacheKey)(a));return{firstSeq:b?.buffer[0]?.seq??b?.seq??0,nextSeq:b?.seq??0}}currentSeq(a){return this.channels.get((0,h.workspaceCacheKey)(a))?.seq??0}subscribe(a,b){let c=this.getChannel(a);if(!c)throw Error("Execution event channel capacity exhausted");let d=(0,h.workspaceCacheKey)(a);this.cancelCleanup(d),c.emitter.on("event",b);let e=!0;return()=>{!e||(e=!1,c.emitter.off("event",b),this.channels.get(d)!==c||c.emitter.listenerCount("event")>0||(c.terminalSeq===c.seq||0===c.seq&&0===c.buffer.length)&&this.scheduleCleanup(d,c,c.seq))}}evictGlobalReplayPrefix(a){let b=a.buffer.shift();b&&(a.utf8Bytes-=b.utf8Bytes,this.globalReplayUtf8Bytes-=b.utf8Bytes,this.globalReplayEntries.delete(b),this.releaseReplay(b),0===a.buffer.length&&(a.buffer=[]))}retainGlobalReplay(a,b){let c=l(b,o);if(!c){for(;a.buffer.length;)this.evictGlobalReplayPrefix(a);return}let d={...c,globalSeq:b.globalSeq};for(this.chargeReplay(d,{workspace:(0,h.getCurrentWorkspace)(),kind:"global",firehose:a}),a.buffer.push(d),a.utf8Bytes+=d.utf8Bytes,this.globalReplayUtf8Bytes+=d.utf8Bytes,this.globalReplayEntries.set(d,a);a.buffer.length>5e3||a.utf8Bytes>o;)this.evictGlobalReplayPrefix(a)}publishGlobal(a){let b=this.getFirehose();if(!b)return;let c={globalSeq:b.seq++,event:a};this.retainGlobalReplay(b,c),b.emitter.emit("event",c)}subscribeGlobal(a){let b=this.getFirehose();if(!b)throw Error("Execution firehose capacity exhausted");return b.emitter.on("event",a),()=>{b.emitter.off("event",a)}}getGlobalBufferedSince(a){return this.getFirehose()?.buffer.filter(b=>b.globalSeq>=a).map(a=>JSON.parse(a.json))??[]}getGlobalReplayPressure(){let a=this.firehoses.get((0,h.getCurrentWorkspace)()),b=0;for(let a of this.firehoses.values())a.buffer.length>0&&b++;return{workspaceUtf8Bytes:a?.utf8Bytes??0,processUtf8Bytes:this.globalReplayUtf8Bytes,cachedEvents:this.globalReplayEntries.size,cachedWorkspaces:b,maxWorkspaceUtf8Bytes:o,maxProcessUtf8Bytes:p}}currentGlobalSeq(){return this.getFirehose()?.seq??0}globalReplayWindow(){let a=this.getFirehose();return{firstSeq:a?.buffer[0]?.globalSeq??a?.seq??0,nextSeq:a?.seq??0,epoch:a?.epoch}}getConversationReplayPressure(){return{processUtf8Bytes:this.conversationReplayUtf8Bytes,cachedEvents:this.conversationReplayEntries.size,channels:this.channels.size,workspaces:this.firehoses.size,limits:{...q}}}getReplayPressure(){return{workspaceUtf8Bytes:this.replayWorkspaces.get((0,h.getCurrentWorkspace)())?.utf8Bytes??0,processUtf8Bytes:this.replayUtf8Bytes,cachedEntries:this.replayEntries.size,cachedWorkspaces:this.replayWorkspaces.size,globalUtf8Bytes:this.globalReplayUtf8Bytes,conversationUtf8Bytes:this.conversationReplayUtf8Bytes,limits:{...n}}}constructor(){this.channels=new Map,this.cleanupTimers=new Map,this.firehoses=new Map,this.globalReplayEntries=new Map,this.globalReplayUtf8Bytes=0,this.conversationReplayEntries=new Map,this.conversationReplayUtf8Bytes=0,this.replayEntries=new Map,this.replayWorkspaces=new Map,this.replayUtf8Bytes=0}}let s=globalThis,t=s.__flujoExecutionEventBus??(s.__flujoExecutionEventBus=new r)},795796:(a,b,c)=>{"use strict";c.d(b,{NN:()=>g,o4:()=>h,tr:()=>e,w6:()=>f});var d=c(173635);let e=["rate_limit","unavailable","timeout"];function f(a,b){return!!a.fallbackPolicy?.modelIds.some(a=>b.some(b=>b.id===a&&(0,d.sP)(b)))}function g(a,b){if(void 0===a.fallbackPolicy)return;if("string"!=typeof a.id||!a.id.trim())return"Policy model ID is required";let c=a.fallbackPolicy;if(!c||"object"!=typeof c||!Array.isArray(c.modelIds)||c.modelIds.length<2||c.modelIds.length>8)return"A fallback policy requires 2 to 8 models";if(!/^policy\/[a-z0-9][a-z0-9_-]{0,63}$/.test(a.name))return"Policy alias must be policy/ followed by 1–64 lowercase letters, numbers, underscores or hyphens";if(b.some(b=>b.id!==a.id&&b.name.toLowerCase()===a.name.toLowerCase()))return"Policy alias already exists";if(new Set(c.modelIds).size!==c.modelIds.length)return"Policy models must be unique";for(let d of c.modelIds){if("string"!=typeof d||d===a.id)return"A policy cannot reference itself";let c=b.find(a=>a.id===d);if(!c)return`Policy model not found: ${d}`;if(c.fallbackPolicy)return"Nested fallback policies are not supported"}return void 0!==c.triggers&&(!Array.isArray(c.triggers)||!c.triggers.length||c.triggers.some(a=>!e.includes(a))||new Set(c.triggers).size!==c.triggers.length)?"Select valid, unique fallback triggers":void 0!==c.cooldownSeconds&&(!Number.isInteger(c.cooldownSeconds)||c.cooldownSeconds<0||c.cooldownSeconds>3600)?"Cooldown must be between 0 and 3600 seconds":a.ApiKey?.trim()?"Policies use their members’ credentials; leave ApiKey empty":(0,d.sP)(a)?"Owner-bound models cannot be fallback policies":f(a,b)?"Owner-bound models cannot be fallback policy members":void 0}function h(a,b){if(!a.fallbackPolicy)return a;let c=a.fallbackPolicy.modelIds.map(a=>b.find(b=>b.id===a)).filter(a=>!!(a&&!a.fallbackPolicy)),d=c[0];if(!d)return a;let e=c.map(a=>a.contextWindow).filter(a=>"number"==typeof a&&a>0);return{...a,ApiKey:"",provider:d.provider,adapter:d.adapter,contextWindow:e.length?Math.min(...e):void 0,inputModalities:void 0,supportsTools:!!c.some(a=>!1!==a.supportsTools)&&void 0}}},800338:(a,b,c)=>{"use strict";c.d(b,{A4:()=>q,I8:()=>r});var d=c(977598),e=c(973024),f=c(176760),g=c.n(f),h=c(901984),i=c(189663),j=c(779504);let k=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,l=globalThis,m=l.__flujoDetachedInstallationIds??=new Map;async function n(a){let b=await e.promises.lstat(a);if(!b.isDirectory()||b.isSymbolicLink())throw Error("Invalid detached task installation directory.");let c=g().join(a,"identity.json"),d=await e.promises.open(c,e.constants.O_RDONLY|(e.constants.O_NOFOLLOW??0)|(e.constants.O_NONBLOCK??0));try{let[f,g,h]=await Promise.all([d.stat(),e.promises.lstat(c),e.promises.lstat(a)]);if(!f.isFile()||f.nlink>1||f.size>4096||g.isSymbolicLink()||g.dev!==f.dev||g.ino!==f.ino||!h.isDirectory()||h.isSymbolicLink()||h.dev!==b.dev||h.ino!==b.ino)throw Error("Invalid detached task installation identity.");let i=Buffer.alloc(4097),j=0;for(;j<i.length;){let{bytesRead:a}=await d.read(i,j,i.length-j,j);if(0===a)break;j+=a}if(j>4096)throw Error("Invalid detached task installation identity.");let l=JSON.parse(i.toString("utf8",0,j));if(1!==l.version||!k.test(l.id??""))throw Error("Invalid detached task installation identity.");return l.id}finally{await d.close()}}async function o(a){let b=g().join(a,".flujo-detached-identity");try{return await n(b)}catch(a){if("ENOENT"!==a.code)throw a}await e.promises.mkdir(a,{recursive:!0});let c=await e.promises.mkdtemp(g().join(a,".flujo-detached-identity-"));try{await e.promises.writeFile(g().join(c,"identity.json"),JSON.stringify({version:1,id:(0,d.randomUUID)()}),{mode:384});try{await e.promises.rename(c,b)}catch(a){if(!["EEXIST","ENOTEMPTY","EPERM"].includes(a.code??""))throw a}return await n(b)}finally{await e.promises.rm(c,{recursive:!0,force:!0})}}function p(){let a=(0,h.ok)(),b=m.get(a);return b||(b=o(a),m.set(a,b),b.catch(()=>{m.get(a)===b&&m.delete(a)})),b}async function q(){let[{recoveryOwnerId:a},b,d]=await Promise.all([Promise.resolve().then(c.bind(c,880360)),p(),(0,j.getRuntimeProcessIdentity)()]);return{installationId:b,workspace:(0,i.getCurrentWorkspace)(),recoveryOwnerId:a(),...d}}async function r(a){if(!a||a.workspace!==(0,i.getCurrentWorkspace)()||!k.test(a.installationId)||!k.test(a.recoveryOwnerId)||!k.test(a.processInstanceId)||!Number.isSafeInteger(a.pid)||a.pid<=0||void 0!==a.processBirthMarkerV2&&"string"!=typeof a.processBirthMarkerV2)return!1;let{recoveryOwnerId:b}=await Promise.resolve().then(c.bind(c,880360));return a.recoveryOwnerId!==b()&&a.installationId===await p()&&!await (0,j.isRuntimeProcessIdentityAlive)(a)}},801598:(a,b,c)=>{"use strict";c.d(b,{Y:()=>g,c:()=>h});var d=c(455511),e=c(189663),f=c(252937);function g(a){return(0,d.createHash)("sha256").update((0,f.dj)(a)).digest("hex")}function h(a,b={}){let c=b.now??Date.now(),d=(0,e.getCurrentWorkspace)();return a.map(a=>{let e={kind:a.kind,id:a.id,messageId:a.messageId??null,uri:a.uri??null,workspaceId:d};return{...a,workspaceId:d,observedAt:a.observedAt??c,producer:b.producer??a.producer??function(a){switch(a.kind){case"user_statement":return"user";case"tool_result":return"tool";case"compaction":return"summarizing-compaction";case"import":return"import";default:return a.kind}}(a),contentDigest:a.contentDigest??g(void 0===b.digestMaterial?e:{locator:e,evidence:b.digestMaterial})}})}},803917:(a,b,c)=>{"use strict";c.d(b,{J:()=>i,Y:()=>h});var d=c(731421),e=c(779504);let f=globalThis,g=f.__flujoClaudeOwnedRegistrations??=new WeakMap;function h(a,b){if(!a||"object"!=typeof a||!g.has(a)||g.get(a)!==b)throw Error("Owned Claude process registration is unavailable or mismatched.")}function i(a){let b,c,f=new Promise((a,d)=>{b=a,c=d});f.catch(()=>{});let h=!1;return{ready:f,spawnClaudeCodeProcess(f){let i;if(h)throw Error("Owned Claude process hook cannot be reused.");h=!0;try{i=(0,d.spawn)(f.command,f.args,{cwd:f.cwd,env:f.env,signal:f.signal,stdio:["pipe","pipe","pipe"],windowsHide:!0})}catch(a){throw c(a),a}i.stderr.on("data",b=>{try{a.stderr?.(String(b))}catch{}});let j=new Promise(a=>{i.once("exit",(b,c)=>a(Object.freeze({code:b,signal:c})))}),k=new Promise(a=>{i.once("close",()=>a())});return i.on("error",a=>{c(a)}),i.once("spawn",()=>{(async()=>{try{let c=Object.freeze(await (0,e.RO)(i.pid));if(null!==i.exitCode||null!==i.signalCode)throw Error("Child exited before registration.");let d=Object.freeze({identity:c,requestStop:()=>a.requestSdkStop(),exit:j,close:k});g.set(d,a.owner),await a.register(d),b(d)}catch(b){c(b);try{a.requestSdkStop()}catch{}}})()}),i}}}},817040:(a,b,c)=>{"use strict";function d(a){return(!a.adapter||"openai"===a.adapter||"openai-responses"===a.adapter)&&("openai"===a.provider||"litellm"===a.provider&&/(?:^|\/)gpt-\d+/i.test(a.name))}function e(a){if(!d(a))return!1;let b=a.name.toLowerCase().match(/(?:^|\/)gpt-(\d+)(?:\.(\d+))?/);if(!b)return!1;let c=Number(b[1]),e=Number(b[2]??0);return c>5||5===c&&e>=6}c.d(b,{Rd:()=>i,bI:()=>h,ss:()=>e});let f=new Set(["text","image_url","input_audio","file","refusal"]);function g(a){let b=a.content;if("string"==typeof b){if(0===b.length)return;return{...a,content:[{type:"text",text:b,prompt_cache_breakpoint:{mode:"explicit"}}]}}if(!Array.isArray(b))return;let c=-1;for(let a=b.length-1;a>=0;a--){let d=b[a];if(d&&f.has(String(d.type??""))){c=a;break}}if(c<0)return;let d=b.map((a,b)=>b===c?{...a,prompt_cache_breakpoint:{mode:"explicit"}}:a);return{...a,content:d}}function h(a){return a.map(a=>{let b=a.content;if(!Array.isArray(b))return a;let c=!1,d=b.map(a=>{if(!a||"object"!=typeof a||!("prompt_cache_breakpoint"in a))return a;let{prompt_cache_breakpoint:b,...d}=a;return c=!0,d});return c?{...a,content:d}:a})}function i(a,b,c){if(!c.lateNodeInstruction||!d(b))return{messages:a,explicit:!1,breakpointCount:0,movedSystemMessages:0,lateSystem:!1};let f=a.filter(a=>"system"===a.role),h=a.filter(a=>"system"!==a.role);if(0===f.length||0===h.length)return{messages:a,explicit:!1,breakpointCount:0,movedSystemMessages:0,lateSystem:!1};if(!e(b))return{messages:[...h,...f],explicit:!1,breakpointCount:0,movedSystemMessages:f.length,lateSystem:!0};let i=[];for(let a=0;a<h.length;a++)g(h[a])&&i.push(a);let j=new Set(i.slice(-4)),k=0,l=h.map((a,b)=>{if(!j.has(b))return a;let c=g(a);return c?(k++,c):a});return 0===k?{messages:[...h,...f],explicit:!1,breakpointCount:0,movedSystemMessages:f.length,lateSystem:!0}:{messages:[...l,...f],explicit:!0,breakpointCount:k,movedSystemMessages:f.length,lateSystem:!0}}},848852:(a,b,c)=>{"use strict";c.d(b,{Jm:()=>h,UR:()=>j,hc:()=>f,kA:()=>k,lr:()=>g,zJ:()=>i});var d=c(700404);let e=new Set(["image","audio","video"]);function f(a){if(a.type&&e.has(a.type))return a.type;if("resource"===a.type&&a.resource&&"string"==typeof a.resource.blob){let b="string"==typeof a.resource.mimeType?a.resource.mimeType:void 0,c=(0,d.X)(b);return"file"===c?void 0:c}}function g(a){let b=f(a),c=i(a);if(!b||!c)return;let d=h(a);return{type:b,data:c,...d?{mimeType:d}:{}}}function h(a){if("string"==typeof a.mimeType)return a.mimeType;let b=a.resource?.mimeType;return"string"==typeof b?b:void 0}function i(a){if("string"==typeof a.data)return a.data;let b=a.resource?.blob;return"string"==typeof b?b:void 0}function j(a){if(!a||!Array.isArray(a.content))return{mediaItems:[],textResult:a,hasMedia:!1};let b=[],c=[];for(let d of a.content){let a=f(d);a?(b.push(d),c.push(function(a,b){let c=h(a)??b,d=i(a)?.length,e=d?` ~${Math.round(3*d/4/1024)} KB`:"";return{type:"text",text:`[${c}${e} media item returned by this tool; delivered to the model as a native ${b} input rather than inline base64]`}}(d,a))):c.push(d)}return 0===b.length?{mediaItems:[],textResult:a,hasMedia:!1}:{mediaItems:b,textResult:{...a,content:c},hasMedia:!0}}function k(a,b,c){return{type:b,...a.mimeType?{mimeType:a.mimeType}:{},...a.name?{name:a.name}:{},resourceUri:a.uri,...c?{localPath:c}:{}}}},862399:(a,b,c)=>{"use strict";function d(a,b){let c=new Set,d=a=>{b?.(a);let c=2;for(let b=0;b<a.length;){let d=Math.min(b+16384,a.length),e=a.charCodeAt(d-1),f=a.charCodeAt(d);d<a.length&&e>=55296&&e<=56319&&f>=56320&&f<=57343&&(d-=1),c+=JSON.stringify(a.slice(b,d)).length-2,b=d}return c},e=a=>{if("string"==typeof a)return d(a);if(null===a)return 4;if("number"==typeof a||"boolean"==typeof a)return JSON.stringify(a).length;if(void 0===a||"symbol"==typeof a)return;if("function"==typeof a){if("toJSON"in a)throw TypeError("Use native JSON serialization");return}if("object"!=typeof a)throw TypeError("Use native JSON serialization");let b=Object.getPrototypeOf(a);if(!Array.isArray(a)&&b!==Object.prototype&&null!==b||"toJSON"in a)throw TypeError("Use native JSON serialization");if(c.has(a))throw TypeError("Circular JSON");c.add(a);try{if(Array.isArray(a)){let b=2;for(let c=0;c<a.length;c+=1){c&&(b+=1);let d=Object.getOwnPropertyDescriptor(a,c);if(d?.get||d?.set||!d&&c in a)throw TypeError("Use native JSON serialization");b+=e(a[c])??4}return b}let b=2,c=0;for(let f of Object.keys(a)){let g=Object.getOwnPropertyDescriptor(a,f);if(g?.get||g?.set)throw TypeError("Use native JSON serialization");let h=a[f];if(void 0===h||"symbol"==typeof h||"function"==typeof h&&!("toJSON"in h))continue;let i=d(f),j=e(h);c++&&(b+=1),b+=i+1+(j??4)}return b}finally{c.delete(a)}},f=e(a);if(void 0===f)throw TypeError("No JSON value");return f}c.d(b,{j:()=>d})},869784:(a,b,c)=>{"use strict";c.d(b,{t:()=>e});var d=c(241043);function e(a){let b=(0,d.resolveModelAdapter)(a.provider,a.adapter),c=(a.outputModalities??[]).filter(a=>"string"==typeof a).map(a=>a.trim().toLowerCase());return!a.fallbackPolicy&&["openai","openai-responses","azure","anthropic","gemini"].includes(b)&&(!c.length||c.every(a=>"text"===a))}},880360:(a,b,c)=>{"use strict";c.r(b),c.d(b,{classifyRecoveryFailure:()=>n,commitRecoveryCheckpoint:()=>r,commitRecoveryTransition:()=>v,commitToolCheckpoint:()=>t,describeToolEffects:()=>s,fingerprintRecoveryInput:()=>p,initializeRecovery:()=>o,markDanglingToolEffectsUnknown:()=>x,reconcileInterruptedRecovery:()=>w,recoveryOwnerId:()=>k,setRecoveryTransition:()=>u});var d=c(455511),e=c(475560),f=c(552195),g=c(774207);let h=globalThis,i=h.__flujoRecoveryOwnerId??=(0,d.randomUUID)(),j="A tool may have produced an external side effect before execution stopped. Automatic replay is disabled; restart the turn or confirm the effect before retrying.";function k(){return i}function l(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function m(a){return"string"==typeof a&&a.length>0?a:void 0}function n(a){let b=a&&"object"==typeof a?a:{},c=b.details&&"object"==typeof b.details?b.details:b.errorDetails&&"object"==typeof b.errorDetails?b.errorDetails:b,d=l(c.status)??l(c.statusCode),e=m(c.code)??m(c.type)??m(b.code),f=a instanceof Error?a.message:"string"==typeof a?a:"string"==typeof a?.message?a.message:"string"==typeof a?.error?a.error:"Execution failed.",h=`${e??""} ${f}`.toLowerCase(),i="unknown",j=!1;429===d||/rate.?limit|too many requests/.test(h)?(i="rate_limit",j=!0):/context.{0,12}(limit|length|window)|maximum context/.test(h)?i="context_limit":/input.{0,12}(limit|length|too large)|request.{0,12}too large/.test(h)?i="input_limit":/session.{0,12}(lost|expired|invalid)|thread.{0,12}(lost|expired|not found)/.test(h)?i="session_loss":/empty response|no response content|response was empty/.test(h)?(i="model_empty_response",j=!0):/truncated response|unexpected end|premature end/.test(h)?(i="model_truncated_response",j=!0):/tool/.test(h)?i="tool_failure":408===d||502===d||503===d||504===d||/timeout|timed out|econnreset|econnrefused|socket|network|fetch failed|connection closed/.test(h)?(i="transport_failure",j=!0):(void 0!==d||/provider|model|api/.test(h))&&(i="provider_failure",j=void 0===d||d>=500);let k=l(c.retryAfterMs)??(0,g.oR)(c.retryAfter);return{classification:j?"retryable_failure":"permanent_failure",failure:{category:i,message:f,code:e,status:d,retryable:j},retryAfterAt:void 0!==k?Date.now()+Math.max(0,k):void 0}}function o(a,b){let c=Date.now(),e=a.recovery;if(e?.runId===b)return e.classification="running",e.ownerId=i,e.ownerHeartbeatAt=c,e.updatedAt=c,e.terminalAt=void 0,e.failure=void 0,e.retryAfterAt=void 0,e.manualActionRequired=!1,e.sideEffectWarning=void 0,a.recovery=e,e;let f={version:1,runId:b,attemptId:(0,d.randomUUID)(),attempt:1,classification:"running",parentRunId:a.parentRunId,ownerId:i,ownerHeartbeatAt:c,startedAt:c,updatedAt:c};return a.recovery=f,f}function p(a,b){let c=(a.messages??[]).slice(-8).map(a=>({id:a.id,role:a.role,content:a.content,toolCalls:a.tool_calls,toolCallId:a.tool_call_id}));return(0,d.createHash)("sha256").update(JSON.stringify({flowId:a.flowId,nodeId:b,messages:c})).digest("hex")}async function q(a,b,c,d){d?(d(c),b.conversationId&&!b.ephemeral&&await (0,e.flushConversationLog)(b.conversationId)):await (0,e.appendRawForState)(b,[c]),await (0,f.persistConversationState)(a,b)}async function r(a,b,c,e){if(b.ephemeral)return;let f=b.recovery??o(b,b.logicalRunId??(0,d.randomUUID)()),g=Date.now(),h={id:(0,d.randomUUID)(),phase:c.phase,nodeId:c.nodeId,turnEntryNodeId:c.turnEntryNodeId??f.lastSafeCheckpoint?.turnEntryNodeId??c.nodeId,attempt:f.attempt,inputFingerprint:p(b,c.nodeId),safe:c.safe,effectStatus:c.effectStatus??"none",parentRunId:b.parentRunId,lane:f.lane,tools:c.tools,createdAt:g};return f.currentCheckpoint=h,h.safe&&(f.lastSafeCheckpoint=h),f.ownerId=i,f.ownerHeartbeatAt=g,f.updatedAt=g,h.safe||"unknown"!==h.effectStatus||(f.manualActionRequired=!0,f.sideEffectWarning=j),b.recovery=f,await q(a,b,{type:"recovery:checkpoint",checkpoint:h},e),h}function s(a,b){return b.map(b=>{let c=a.toolNameMap?.[b.function.name],d=c?.annotations,e=d?.readOnlyHint===!0;return{toolCallId:b.id,name:b.function.name,readOnly:e,idempotent:e||d?.idempotentHint===!0,destructive:d?.destructiveHint}})}async function t(a,b,c,d,e){let f=s(b,c);if(!f.some(a=>!a.readOnly))return;let g="completed"===d&&b.isCancelled?"unknown":d;await r(a,b,{phase:"before"===g?"tool:before":"completed"===g?"tool:after":"tool:unknown",nodeId:b.currentNodeId,safe:"completed"===g,effectStatus:"before"===g?"pending":"completed"===g?"completed":"unknown",tools:f},e)}function u(a,b,c={}){let e=a.recovery??o(a,a.logicalRunId??(0,d.randomUUID)()),f=Date.now();return e.classification=b,e.failure=c.failure,e.retryAfterAt=c.retryAfterAt,e.cancellationRequestedAt=c.cancellationRequestedAt??e.cancellationRequestedAt,e.manualActionRequired=c.manualActionRequired??e.manualActionRequired,e.sideEffectWarning=c.sideEffectWarning??e.sideEffectWarning,e.updatedAt=f,e.ownerHeartbeatAt=f,"running"!==b&&"paused"!==b&&(e.terminalAt=f),a.recovery=e,e}async function v(a,b,c,d={},e){let f=u(b,c,d);return await q(a,b,{type:"recovery:transition",recovery:{...f}},e),f}async function w(a,b){let c=b.recovery;return"running"===b.status&&!!c?.ownerId&&c.ownerId!==i&&(b.status="error",b.isCancelled=!1,b.lastResponse={success:!1,error:"Execution was interrupted before it reached a terminal boundary."},await v(a,b,"interrupted",{failure:{category:"unclean_process_interruption",message:"The process that owned this run is no longer active.",retryable:!1},manualActionRequired:!0}),!0)}function x(a,b="interrupted"){let c=a.recovery??o(a,a.logicalRunId??(0,d.randomUUID)()),e=Date.now(),f={id:(0,d.randomUUID)(),phase:"tool:unknown",nodeId:a.currentNodeId,turnEntryNodeId:c.lastSafeCheckpoint?.turnEntryNodeId,attempt:c.attempt,inputFingerprint:p(a,a.currentNodeId),safe:!1,effectStatus:"unknown",parentRunId:a.parentRunId,lane:c.lane,createdAt:e};c.currentCheckpoint=f,c.classification=b,c.failure={category:"tool_failure",message:"A dangling tool call was repaired after interruption; its external effect is unknown.",retryable:!1},c.manualActionRequired=!0,c.sideEffectWarning=j,c.updatedAt=e,c.terminalAt="interrupted"===b?e:void 0,a.recovery=c}},890810:(a,b,c)=>{"use strict";c.d(b,{Ci:()=>i,G1:()=>o,Jj:()=>m,NS:()=>n});var d=c(334701);let e=/^(authorization|api[-_]?key|x-api-key|cookie|set-cookie|proxy-authorization|www-authenticate)$/i,f=/sk-[A-Za-z0-9_-]{8,}/g,g=/bearer\s+[A-Za-z0-9._.~+/=-]{8,}/gi;function h(a){return a.replace(g,"Bearer [REDACTED]").replace(f,"[REDACTED]")}function i(a){let b;if(null==a)return;let c=function a(b,c){if(c>6)return"[REDACTED: max depth exceeded]";if("string"==typeof b)return h(b);if(Array.isArray(b))return b.map(b=>a(b,c+1));if(b&&"object"==typeof b){let d={};for(let[f,g]of Object.entries(b))d[f]=e.test(f)?"[REDACTED]":a(g,c+1);return d}return b}(a,0);try{b=JSON.stringify(c)??""}catch{return{note:"[REDACTED: unserializable provider error body]"}}if(b)return b.length>8192?{note:"[REDACTED: provider error body truncated]",truncated:b.slice(0,8192)}:c&&"object"==typeof c&&!Array.isArray(c)?c:{value:c}}function j(a){return"string"==typeof a&&a.length>0?a:void 0}function k(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function l(a,b){let c,e=a&&"object"==typeof a&&a.details&&"object"==typeof a.details?a.details:void 0;c=a instanceof Error?a.message||"An unknown error occurred.":"string"==typeof a&&a.length>0?a:a&&"object"==typeof a&&j(a.message)?a.message:null==a?"An unknown error occurred.":String(a);let f=j(e?.code)??(a&&"object"==typeof a?j(a.code):void 0),g=k(e?.status)??(a&&"object"==typeof a?k(a.status):void 0),l=j(e?.type)??(a instanceof Error?j(a.name):void 0),m=j(e?.retryAfter),n=e?.providerError!==void 0?i(e.providerError):void 0;return{message:h(c),...f?{code:f}:{},...void 0!==g?{httpStatus:g}:{},...l?{providerType:l}:{},errorClass:(0,d.Ys)(a instanceof Error?Object.assign(Error(a.message),{name:a.name,code:f,type:l}):{code:f,type:l}),...b?.nodeId?{nodeId:b.nodeId}:{},...b?.nodeName?{nodeName:b.nodeName}:{},...m?{retryAfter:m}:{},occurredAt:Date.now(),...n?{details:n}:{}}}function m(a){if(null!=a){if("string"==typeof a)return a.length>0?l(Error(a)):void 0;if("object"==typeof a&&!1===a.success){let b=j(a.error)??"An unknown error occurred.",c=a.errorDetails&&"object"==typeof a.errorDetails?a.errorDetails:void 0;return l(Object.assign(Error(b),c?{details:c}:{}))}}}function n(a,b,c,d){return a.errorEventEmitted?a.lastError:o(a,b,l(c,d),d)}function o(a,b,c,d){return a.errorEventEmitted?a.lastError??c:(a.errorEventEmitted=!0,a.lastError=c,b?.({type:"error",node:d?.nodeId?{nodeId:d.nodeId}:void 0,message:c.message,error:c}),c)}},896305:(a,b,c)=>{"use strict";c.d(b,{$:()=>i});var d=c(973024),e=c(176760),f=c.n(e);let g=(a,b)=>a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs,h=a=>"win32"===process.platform?f().resolve(a).toLowerCase():f().resolve(a);async function i(a,b,c={}){let e,j=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),k=!1;try{let i=await j.stat({bigint:!0});if(!i.isFile()||i.nlink!==BigInt(1)||i.size<BigInt(1)||i.size>BigInt(b)||c.privateOwner&&"win32"!==process.platform&&((i.mode&BigInt(63))!==BigInt(0)||i.uid!==BigInt(process.getuid())))throw Error("Native source file is unsafe.");let l=[],m=f().dirname(f().resolve(a));for(;;){let a=await d.promises.lstat(m,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||h(await d.promises.realpath(m))!==h(m))throw Error("Native source directory changed.");l.push([m,a]);let b=f().dirname(m);if(b===m)break;m=b}let n=async()=>{let b=await d.promises.lstat(a,{bigint:!0});if(b.isSymbolicLink()||!g(i,b)||!g(i,await j.stat({bigint:!0})))throw Error("Native source file changed.");for(let[a,b]of l){let c=await d.promises.lstat(a,{bigint:!0});if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==b.dev||c.ino!==b.ino||c.mode!==b.mode||c.uid!==b.uid||c.gid!==b.gid||h(await d.promises.realpath(a))!==h(a))throw Error("Native source directory changed.")}};await n(),e=Buffer.alloc(Number(i.size)+1);let o=0;for(;o<e.length;){let a=await j.read(e,o,e.length-o,o);if(!a.bytesRead)break;o+=a.bytesRead}if(BigInt(o)!==i.size)throw Error("Native source file changed.");return await n(),k=!0,e.subarray(0,o)}finally{k||e?.fill(0),await j.close()}}},899631:(a,b,c)=>{"use strict";c.d(b,{T6:()=>f,at:()=>g,uh:()=>h,x0:()=>i});var d=c(978829),e=c(653637);function f(a){return"string"==typeof a&&a.startsWith("${global:")}function g(a,b){return a&&"object"==typeof a&&"value"in a?{value:a.value??"",isSecret:!!a.metadata?.isSecret}:{value:a??"",isSecret:(0,e.Hm)(b)}}function h(a){return a===d.RJ||a===d.gF}function i(a,b){if(!a)return a;let c={};for(let[d,e]of Object.entries(a)){if(!d)continue;let{value:a,isSecret:f}=g(e,d);if(f&&h(a)){let a=b?.[d];void 0!==a&&(c[d]=a);continue}c[d]=e}return c}},907094:(a,b,c)=>{"use strict";c.d(b,{Yx:()=>q,sz:()=>s});var d=c(333873),e=c.n(d),f=c(629021),g=c(81300),h=c(482040),i=c(245698),j=c(350661),k=c(530886),l=c(122134);async function m(a){let b,c;try{let d=await f.promises.stat(a);b=d.birthtimeMs,c=d.mtimeMs}catch{}return{id:a,name:e().basename(a)||a,created:b,updated:c}}async function n(a,b,c){if("time"===a.kind){let a=new Date;return{id:a.toTimeString().slice(0,8),name:a.toTimeString().slice(0,8),created:a.getTime(),updated:a.getTime()}}if("date"===a.kind){let a=new Date,b=`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}`;return{id:b,name:b,created:a.getTime(),updated:a.getTime()}}if("folder"===a.kind||"file"===a.kind){if(a.target)return m(a.target);if("folder"===a.kind&&b.flowId){let a=await g.flowService.getFlow(b.flowId);if(a?.folder)return{id:a.folder,name:a.folder,created:a.createdAt,updated:a.updatedAt}}return{}}if("conversation"===a.kind){let c=a.target||b.conversationId;if(!c)return{};let d=await (0,j.loadConversationState)(c);return{id:c,name:d?.title,created:d?.createdAt,updated:d?.updatedAt}}if("flows"===a.kind){let c=a.target||b.flowId;if(!c)return{};let d=await g.flowService.getFlow(c);return{id:c,name:d?.name,created:d?.createdAt,updated:d?.updatedAt}}if("node"===a.kind){let c=a.target||b.nodeId;if(!c)return{};let d=b.flowId?await g.flowService.getFlow(b.flowId):null,e=d?.nodes.find(a=>a.id===c);return{id:c,name:e?.data?.label||e?.data?.properties?.name,created:e?.data?.properties?.createdAt,updated:e?.data?.properties?.updatedAt}}if("model"===a.kind){let d=a.target||b.modelId;if(!d)return{};let e=c?.id===d?c:await h.modelService.getModel(d);return{id:d,name:e?.displayName||e?.name,created:e?.createdAt,updated:e?.updatedAt}}let d=a.target||b.appId;if(!d)return{};if(a.target&&a.target.toLocaleLowerCase().startsWith("ui://"))return{id:a.target,name:function(a){let b=a.replace(/^ui:\/\//i,"").split("/").filter(Boolean).at(-1);if(!b)return a;try{return decodeURIComponent(b).replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}catch{return b.replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}}(a.target)};let e=await i.mcpService.loadServerConfigs(),f=Array.isArray(e)?e.find(a=>a.name===d):void 0;return{id:d,name:f?.name||d,created:f?.createdAt,updated:f?.updatedAt}}async function o(a,b,c){let d=(0,k.sE)(a).filter(a=>"mention"===a.kind);if(0===d.length)return a;let e=await Promise.all(d.map(async a=>{let d=(0,k.AY)(a.fullMatch);return d?{match:a,value:(await n(d,b,c))[d.field]??(d.fullMatch.startsWith("@current.")?d.fullMatch:"")}:{match:a,value:a.fullMatch}}));if(1===e.length&&0===e[0].match.index&&e[0].match.fullMatch.length===a.length)return e[0].value;let f="",g=0;for(let b of e)f+=a.slice(g,b.match.index)+String(b.value??""),g=b.match.index+b.match.fullMatch.length;return f+a.slice(g)}async function p(a,b,c){if("string"==typeof a)return o(a,b,c);if(Array.isArray(a))return Promise.all(a.map(a=>p(a,b,c)));if(a&&"object"==typeof a){let d=new Map;for(let[e,f]of Object.entries(a))d.set(e,await p(f,b,c));return Object.fromEntries(d)}return a}async function q(a,b,c){return(0,l.V)(await p(a,b,c))}async function r(a,b){if(!a||0===Object.keys(a).length)return{};let c=await p(a,b??{});return await (0,l.resolveGlobalVars)(c)}async function s(a,b,c){return{...a,...await r(b,c)}}},920823:(a,b,c)=>{"use strict";c.d(b,{At:()=>s,KZ:()=>t,NW:()=>u,e$:()=>d.nativeDigest,iy:()=>y,p0:()=>v,x9:()=>z});var d=c(48718),e=c(28430),f=c(931237),g=c(907094),h=c(174396),i=c(7557),j=c(848852),k=c(18315),l=c(309994),m=c(316763),n=c(343276),o=c(242745);let p=new WeakSet,q=new WeakMap,r=new WeakSet;function s(a,b){if(!a||"function"!=typeof b)throw Error("Native broker authority is incomplete.");let c=Object.freeze({leaseEpoch:a,assertCurrent:b});return r.add(c),c}function t(a){if(!a||"object"!=typeof a||!r.has(a))throw Error("Native broker authority must be an in-process capability.")}function u(a){if(!a||"object"!=typeof a||!p.has(a))throw Error("Native tool port must be an origin-owned in-process capability.")}async function v(a,b){u(a);let c=q.get(a);if(!c)throw Error("Native tool inventory lacks its trusted Source context.");await c(b)}let w=a=>"handoff"===a||a.startsWith("handoff_to_");function x(a){if(a&&"object"==typeof a&&!Object.isFrozen(a)){for(let b of Object.values(a))x(b);Object.freeze(a)}return a}function y(a,b,c,e){if(void 0!==e&&!(0,n.yq)(e))throw Error("Unknown native termination protocol.");let f=new Set,g=a.filter(a=>"function"===a.type).map(a=>{let d=a.function.name;if(!d||f.has(d))throw Error("Native tool inventory has duplicate or empty names.");f.add(d);let g=b?.[d];if(g&&(void 0===g.clientGeneration||!g.schemaHash))throw Error(`Native MCP tool ${d} lacks frozen client and schema identity.`);let h=!!c?.[d],i=w(d);if(i&&!(0,n.yq)(e))throw Error("Native handoff requires a confirmed SDK termination protocol and is not admitted.");if(Number(!!g)+Number(h)+Number(i)!==1)throw Error(`Native tool ${d} has no unique Worker-owned executor.`);return{name:d,description:a.function.description??"",inputSchema:a.function.parameters,annotations:g?.annotations,binding:g,kind:g?"mcp":i?"handoff":"synthetic"}});return(0,d.nativeDigest)(e?{terminationProtocol:e,tools:g}:g)}function z(a){t(a.authority);let b=a.executionExtensionContext;if(b&&(0,o.M6)(a.originalProcessHost,b),void 0!==a.terminationProtocol){if(!(0,n.yq)(a.terminationProtocol))throw Error("Unknown native termination protocol.");if((0,o.Cb)(a.originalProcessHost),a.originalProcessHost.terminationProtocol!==a.terminationProtocol)throw Error("Native termination protocol differs from its Original host.")}let r=structuredClone(a.tools.filter(a=>"function"===a.type).map(b=>({name:b.function.name,description:b.function.description??"",inputSchema:b.function.parameters,annotations:a.toolNameMap?.[b.function.name]?.annotations}))),s=structuredClone(a.toolNameMap??{}),u=Object.freeze({...a.localToolExecutors}),v=new Set,z=new Map;for(let a of r){if(!a.name||v.has(a.name))throw Error("Native tool inventory has duplicate or empty names.");if(v.add(a.name),1!==[!!s[a.name],!!u[a.name],w(a.name)].filter(Boolean).length)throw Error(`Native tool ${a.name} has no unique Worker-owned executor.`);if(s[a.name]&&(void 0===s[a.name].clientGeneration||!s[a.name].schemaHash))throw Error(`Native MCP tool ${a.name} lacks frozen client and schema identity.`);z.set(a.name,s[a.name]?"mcp":w(a.name)?"handoff":"synthetic")}let A=y(a.tools,s,u,a.terminationProtocol);if(A!==a.receipt.owner.inventoryDigest||a.authority.leaseEpoch!==a.receipt.owner.leaseEpoch)throw Error("Native tool inventory or lease differs from the durable invocation.");x(r),x(s);let B=new AbortController,C=new Map,D=!1,E=Object.freeze({invocationId:a.receipt.invocationId,inventoryDigest:A,advertised:r,cancel:()=>B.abort(),confirmHandoffTermination:async b=>{if(D||!C.size||(0,d.nativeDigest)([...C.keys()])!==(0,d.nativeDigest)(b))throw Error("Native handoff receipts are incomplete or changed.");for(let{entry:c,terminal:d}of((0,o.Cb)(a.originalProcessHost),a.signal.throwIfAborted(),await a.authority.assertCurrent(),await a.originalProcessHost.confirmHandoffTermination(a.receipt.invocationId,b),C.values()))await (0,f.nq)(c,d,{assertCurrent:a.authority.assertCurrent,signal:a.signal});a.signal.throwIfAborted(),await a.authority.assertCurrent(),D=!0},dispatch:async({toolInvocationId:c,name:d,args:p,signal:q})=>{let r;if(!v.has(d)||!p||"object"!=typeof p||Array.isArray(p))throw Error("Native tool was not in the advertised inventory.");let t=JSON.stringify(p);if(!t)throw Error("Native tool arguments must be a JSON object.");if(Buffer.byteLength(t,"utf8")>262144)throw Error("Native tool arguments exceed the broker bound.");let w=x(JSON.parse(t));if(!w||"object"!=typeof w||Array.isArray(w))throw Error("Native tool arguments must be a JSON object.");let y=(0,f.a)(d,w,A),{entry:D,fresh:E}=await (0,f.fA)(a.receipt,c,y),F=(0,m.N)(a.signal,B.signal,q);if(!E){if("terminal"===D.state&&D.result)return F.throwIfAborted(),await a.authority.assertCurrent(),F.throwIfAborted(),D.result;throw Error("Native tool effect is unresolved; the original call cannot be replayed.")}let G=async()=>{F.throwIfAborted(),await a.authority.assertCurrent(),await a.beforeToolDispatch?.(),F.throwIfAborted(),await a.authority.assertCurrent(),F.throwIfAborted()},H=z.get(d);await G();let I=await a.requestToolApproval?.({id:c,name:d,args:w});if(!1===I)r={content:[{type:"text",text:"tool denied"}],isError:!0};else if("handoff"===H){if((0,o.Cb)(a.originalProcessHost),!(0,n.yq)(a.terminationProtocol)||C.size>=32)throw Error("Native handoff termination capability is unavailable.");await G(),await (0,f.C2)(D),await a.originalProcessHost.prepareHandoff(a.receipt.invocationId,c),r={content:[{type:"text",text:"Handoff requested. Routing awaits confirmed SDK process termination."}]}}else if("synthetic"===H){await G(),await (0,f.C2)(D),await G();let b=await u[d](w);await a.authority.assertCurrent(),await a.afterToolDispatch?.(),r={content:[{type:"text",text:JSON.stringify(b)}]}}else{let c=s[d],j=await (0,g.sz)(w,c.presetArgs,c.context);await G(),await a.authorizePersonaCoreMcp?.(c.server,c.nodeId);let k=(0,e.j1)(d,c,a.service),l=!!a.service.getClient(c.server)&&a.service.getClientGeneration(c.server)===c.clientGeneration&&a.service.getToolSchemaHash(c.server,c.tool)===c.schemaHash;if(k.ok&&l){await (0,f.C2)(D),await G();let d=!!a.service.getClient(c.server)&&a.service.getClientGeneration(c.server)===c.clientGeneration&&a.service.getToolSchemaHash(c.server,c.tool)===c.schemaHash;if(F.throwIfAborted(),!d)throw Error("Native MCP identity changed at the effect boundary.");let e=await a.service.callTool(c.server,c.tool,j,c.timeout??i.aI,void 0,c.nodeId,F,"model",(0,h.S)({runId:a.receipt.owner.runId,conversationId:a.receipt.owner.conversationId}),{conversationId:a.receipt.owner.conversationId},b);if(await a.authority.assertCurrent(),await a.afterToolDispatch?.(),F.throwIfAborted(),!e.success)throw Error(`Native MCP effect is unresolved: ${e.error??"Unknown error"}`);r=e.data}else r={content:[{type:"text",text:k.ok?"Native tool identity changed after advertisement.":k.reason}],isError:!0}}let{mediaItems:J,textResult:K}=(0,j.UR)(r),L=JSON.stringify(K);if("mcp"===H){let b=await (0,k.jR)(),e=await (0,l.S)({conversationId:a.receipt.owner.conversationId,toolCallId:c,server:s[d].server,toolName:s[d].tool,nodeId:s[d].nodeId,content:L,settings:b});e.spilled&&(L=e.content,r={...r,content:[...J,{type:"text",text:L}]})}if(Buffer.byteLength(L,"utf8")>65536||Buffer.byteLength(JSON.stringify(r),"utf8")>1048576)throw Error("Native tool result exceeds the broker transport bound.");await a.authority.assertCurrent();let M={result:r,transcriptText:L,kind:H};return"handoff"===H&&!1!==I?C.set(c,{entry:D,terminal:M}):await (0,f.nq)(D,M),F.throwIfAborted(),await a.authority.assertCurrent(),F.throwIfAborted(),M}});return p.add(E),b&&q.set(E,async d=>{if(d!==b)throw Error("Native tool inventory Source context changed.");(0,o.M6)(a.originalProcessHost,d),a.signal.throwIfAborted(),B.signal.throwIfAborted(),await a.authority.assertCurrent();let{assertExecutionModelTool:e}=await Promise.resolve().then(c.bind(c,558736));for(let b of r)await e(d,b.name,s[b.name]),a.signal.throwIfAborted(),B.signal.throwIfAborted();await a.authority.assertCurrent(),a.signal.throwIfAborted(),B.signal.throwIfAborted()}),E}},931237:(a,b,c)=>{"use strict";let d;c.d(b,{C2:()=>I,FH:()=>m,HD:()=>B,Lb:()=>F,Lk:()=>E,MC:()=>A,a:()=>J,dw:()=>z,ew:()=>D,fA:()=>G,nq:()=>H});var e=c(977598),f=c(973024),g=c(896305),h=c(176760),i=c.n(h),j=c(189663),k=c(492093),l=c(779504);class m extends Error{constructor(a){super("A native invocation in this conversation is unresolved; reconcile its original ID before starting another."),this.invocationId=a,this.name="NativeInvocationHeldError"}}let n=a=>d??i().join((0,j.getWorkspaceDataDir)(a),"db","native-tool-journal"),o=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),p=(a,b)=>i().join(n(b),"scopes",`${o(a.conversationId)}.json`),q=(a,b)=>i().join(n(b),"holds",`${o(a.conversationId)}.json`),r=(a,b)=>i().join(n(b),"calls",`${a}.json`),s=(a,b)=>i().join(n(),"tools",a,`${o(b)}.json`),t=(a,b,c)=>(0,k.NU)(()=>(0,l.withWorkspaceRuntimeLock)(`native-tool-${o(a).slice(0,40)}`,async a=>(await a.assertOwned(),b(()=>a.assertOwned()))),c);async function u(a){try{return JSON.parse(await f.promises.readFile(a,"utf8"))}catch(a){if("ENOENT"===a.code)return;throw a}}async function v(a){let b;try{b=await (0,g.$)(a,65536)}catch(a){if("ENOENT"===a.code)return;throw a}return JSON.parse(b.toString("utf8"))}async function w(a,b=!1){let c;try{c=await f.promises.lstat(a)}catch(a){if(b&&"ENOENT"===a.code)return!1;throw a}if(!c.isDirectory()||c.isSymbolicLink())throw Error("Native terminal source directory is unsafe.");return!0}async function x(a){let b=i().join(n(),"calls");for(let c of(await f.promises.readdir(b).catch(a=>{if("ENOENT"===a.code)return[];throw a}))){if(!c.endsWith(".json"))continue;let d=await u(i().join(b,c));if(!d)throw Error("Native call record vanished during admission.");if(d.owner?.conversationId===a&&"terminal"!==d.state)return d}}async function y(a,b,c){await f.promises.mkdir(i().dirname(a),{recursive:!0});let d=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`,g=await f.promises.open(d,"wx",384);try{await g.writeFile(JSON.stringify(b),"utf8"),await g.sync()}finally{await g.close()}try{await c?.(),await f.promises.rename(d,a)}catch(a){throw await f.promises.rm(d,{force:!0}).catch(()=>void 0),a}try{let b=await f.promises.open(i().dirname(a),"r");try{await b.sync()}finally{await b.close()}}catch{}}async function z(a){if(Object.entries(a).some(([a,b])=>"attemptOrdinal"!==a&&("string"!=typeof b||!b.trim()))||!Number.isSafeInteger(a.attemptOrdinal)||a.attemptOrdinal<1)throw Error("Native invocation requires complete owner identity.");return t(a.conversationId,async b=>{let c=await u(q(a));if(c)throw new m(c.invocationId);let d=await u(p(a));if(d&&"terminal"!==d.state)throw new m(d.invocationId);let f=await x(a.conversationId);if(f)throw new m(f.invocationId);let g={invocationId:(0,e.randomUUID)(),owner:structuredClone(a),state:"prepared",createdAt:Date.now()};return await y(q(a),g,b),await y(p(a),g,b),await y(r(g.invocationId),g,b),g})}async function A(a,b){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(a))throw Error("Invalid native invocation identity.");let c=await u(r(a));if(!c||JSON.stringify(c.owner)!==JSON.stringify(b))throw Error("Unknown or differently owned native invocation.");if("terminal"===c.state){let d=await u(q(b));if(d?.invocationId===a)return{...c,state:"unknown",outcome:void 0}}return c}async function B(a,b,c,d){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(a))throw Error("Invalid native invocation identity.");return t(b.conversationId,async()=>{for(let a of["","calls","scopes","holds"])await w(i().join(n(c),a));let e=await v(r(a,c)),g=await v(p(b,c)),h=await v(q(b,c));if(!e||!g||e.invocationId!==a||g.invocationId!==a||JSON.stringify(e.owner)!==JSON.stringify(b)||JSON.stringify(g.owner)!==JSON.stringify(b)||h&&(h.invocationId!==a||JSON.stringify(h.owner)!==JSON.stringify(b)))throw Error("Native terminal source identity changed.");let j=i().join(n(c),"tools",a),k=await w(i().join(n(c),"tools"),!0)&&await w(j,!0)?await f.promises.readdir(j):[];if(k.length>512||k.some(a=>!/^[a-f0-9]{64}\.json$/.test(a)))throw Error("Native terminal tool receipts are incomplete.");let l=!0;for(let c of k){let d=await v(i().join(j,c));d&&d.invocationId===a&&d.conversationId===b.conversationId&&"terminal"===d.state||(l=!1)}return await d?.(e),{receipt:structuredClone(e),holdAbsent:!h&&"terminal"===e.state&&"terminal"===g.state&&JSON.stringify(g)===JSON.stringify(e),effectsResolved:l}},c)}async function C(a,b,c,d){return t(a.owner.conversationId,async e=>{let g=await A(a.invocationId,a.owner),h=await u(p(a.owner));if(h?.invocationId!==g.invocationId||"terminal"===g.state||"unknown"===g.state||"begin-may-have-been-sent"===b&&"prepared"!==g.state)throw new m(g.invocationId);if("terminal"===b){if("begin-may-have-been-sent"!==g.state)throw new m(a.invocationId);let b=i().join(n(),"tools",a.invocationId);for(let c of(await f.promises.readdir(b).catch(a=>{if("ENOENT"===a.code)return[];throw a}))){let d=await u(i().join(b,c));if(!d||"terminal"!==d.state)throw new m(a.invocationId)}d?.signal.throwIfAborted(),await d?.assertCurrent(),d?.signal.throwIfAborted()}let j={...g,state:b,...c?{outcome:c}:{}};return await y(r(j.invocationId),j,e),await y(p(j.owner),j,e),"terminal"===b&&(d?.signal.throwIfAborted(),await d?.assertCurrent(),d?.signal.throwIfAborted(),await e(),await f.promises.unlink(q(j.owner))),j})}let D=a=>C(a,"begin-may-have-been-sent");async function E(a,b,c){return C(a,"terminal",b,c)}let F=a=>C(a,"unknown");async function G(a,b,c){if(!b||!b.trim()||!c)throw Error("Native tool requires an SDK callback identity and fingerprint.");return t(a.owner.conversationId,async d=>{let e=await A(a.invocationId,a.owner),f=await u(p(a.owner));if(f?.invocationId!==a.invocationId)throw new m(a.invocationId);let g=s(a.invocationId,b),h=await u(g);if(h){if(h.conversationId!==a.owner.conversationId||h.toolInvocationId!==b||h.fingerprint!==c)throw Error("Conflicting native tool invocation identity.");if("terminal"===e.state||"prepared"===e.state)throw new m(a.invocationId);return{entry:h,fresh:!1}}if("begin-may-have-been-sent"!==e.state)throw new m(a.invocationId);let i={invocationId:a.invocationId,conversationId:a.owner.conversationId,toolInvocationId:b,fingerprint:c,state:"pending"};return await y(g,i,d),{entry:i,fresh:!0}})}async function H(a,b,c){await t(a.conversationId,async d=>{let e=await u(r(a.invocationId));if(e?.owner.conversationId!==a.conversationId)throw Error("Native tool owner changed.");let f=await u(p(e.owner));if(f?.invocationId!==a.invocationId)throw new m(a.invocationId);let g=s(a.invocationId,a.toolInvocationId),h=await u(g);if(!h||h.fingerprint!==a.fingerprint||"terminal"===h.state)throw Error("Native tool invocation is not pending.");await y(g,{...h,state:"terminal",result:b},async()=>{c?.signal.throwIfAborted(),await c?.assertCurrent(),await d(),c?.signal.throwIfAborted()})})}async function I(a){await t(a.conversationId,async b=>{let c=await u(r(a.invocationId));if(c?.owner.conversationId!==a.conversationId)throw Error("Native tool owner changed.");let d=await u(p(c.owner));if(d?.invocationId!==a.invocationId)throw new m(a.invocationId);let e=s(a.invocationId,a.toolInvocationId),f=await u(e);if(!f||f.fingerprint!==a.fingerprint||"pending"!==f.state)throw Error("Native tool invocation cannot enter the effect boundary.");await y(e,{...f,state:"effect-unknown"},b)})}function J(a,b,c){let d=a=>null===a||"object"!=typeof a?JSON.stringify(a)??"null":Array.isArray(a)?`[${a.map(d).join(",")}]`:`{${Object.entries(a).sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>`${JSON.stringify(a)}:${d(b)}`).join(",")}}`;return(0,e.createHash)("sha256").update(d([a,b,c])).digest("hex")}},947990:()=>{},948464:(a,b,c)=>{"use strict";c.d(b,{AW:()=>p,E0:()=>t,l7:()=>u,m7:()=>s});var d=c(977598),e=c(973024),f=c(848161),g=c.n(f),h=c(176760),i=c.n(h),j=c(855166),k=c(189663),l=c(82887),m=c(674359);let n="flujo-auth-source.json";class o extends Error{constructor(a,b){super(b),this.reasonCode=a,this.name="CodexAuthInspectionError"}}function p(){return process.env.CODEX_HOME?.trim()||i().join(g().homedir(),".codex")}async function q(a){let b,c=i().join(a,"config.toml"),d=!1;try{let a=await e.promises.lstat(c);if(d=!0,!a.isFile()&&!a.isSymbolicLink())throw Error();let f=await (0,l.s)(c,1048576,{allowSymbolicLink:!0});b=(0,j.qg)(new TextDecoder("utf-8",{fatal:!0}).decode(f))}catch(a){if(!d&&"ENOENT"===a.code)return;throw new o("credential-store-unreadable","Could not verify the host Codex credential store. Repair or make its config.toml readable before using its login in FLUJO.")}let f=b.cli_auth_credentials_store;if(void 0!==f&&"file"!==f)throw new o("credential-store-incompatible",'FLUJO requires file-backed Codex authentication. Configure cli_auth_credentials_store = "file" and sign in again; keyring and auto storage cannot identify the active login from auth.json.')}async function r(a,b){try{let c=b??await (0,m.wB)(a),d=JSON.parse((await (0,m.c0)(a,i().join(a,n),4096,c)).toString("utf8"));if(d?.version!==1||!["host","workspace"].includes(d.source))throw Error("Invalid FLUJO Codex authentication source.");return d}catch(a){if("ENOENT"===a.code)return;throw new o("auth-source-unreadable","Could not read FLUJO Codex authentication source.")}}async function s(a){let b,c=await (0,m.wB)(a),f=await r(a,c),g=i().join(a,"auth.json");if(f?.source==="workspace")return void await (0,m.c0)(a,g,1048576,c).catch(()=>{throw Error("The worker Codex login is missing. Sign in using its CODEX_HOME.")});let h=p();await q(h);let j=i().join(h,"auth.json");if(i().resolve(j)===i().resolve(g))return;try{b=await (0,l.s)(j,1048576)}catch(b){if("ENOENT"!==b.code)throw Error("Could not read the host Codex login.");await c(),await e.promises.rm(g,{force:!0}),await e.promises.rm(i().join(a,n),{force:!0});return}let k=(0,d.createHash)("sha256").update(b).digest("hex"),o=await (0,m.c0)(a,g,1048576,c).then(()=>!0,a=>{if("ENOENT"===a.code)return!1;throw a});f?.sourceHash===k&&o||(await (0,m.lf)(a,g,b,c),await (0,m.lf)(a,i().join(a,n),JSON.stringify({version:1,source:"host",sourceHash:k}),c))}async function t(a){let b,c,e=i().join((0,k.getWorkspaceDataDir)(a),"db","codex-runtime");try{b=await (0,m.wB)(e)}catch(a){if("ENOENT"!==a.code)throw new o("auth-source-unreadable","Could not read FLUJO Codex authentication source.")}let f=await r(e,b),g=f?.source==="workspace"?e:p();f?.source!=="workspace"&&await q(g);let h=i().join(g,"auth.json");if(f?.source==="host"&&f.sourceHash){let a=await (0,l.s)(h,1048576).catch(()=>void 0);if(a&&(0,d.createHash)("sha256").update(a).digest("hex")===f.sourceHash){let a=i().join(e,"auth.json");try{if(!b)throw Error("Managed Codex home is unavailable.");await (0,m.c0)(e,a,1048576,b),h=a}catch(a){if("ENOENT"!==a.code)throw new o("auth-source-unreadable","Could not read FLUJO Codex authentication source.")}}}try{c=h===i().join(e,"auth.json")?await (0,m.c0)(e,h,1048576,b??await (0,m.wB)(e)):await (0,l.s)(h,1048576)}catch{throw new o("login-missing","A file-backed Codex ChatGPT login is required. Sign in with Codex using file credential storage before cloning.")}if(!function(a){try{let b=JSON.parse(a.toString("utf8"));return(!b.auth_mode||"chatgpt"===b.auth_mode)&&!b.OPENAI_API_KEY&&"string"==typeof b.tokens?.access_token&&b.tokens.access_token.length>0&&"string"==typeof b.tokens?.refresh_token&&b.tokens.refresh_token.length>0}catch{return!1}}(c))throw new o("login-incompatible","The Codex authentication cache is not a transferable ChatGPT login.");return c}async function u(a){try{return await t(a),{authentication:"login-detected"}}catch(a){if(!(a instanceof o))return{authentication:"unknown",reasonCode:"inspection-unavailable"};return{authentication:"login-missing"===a.reasonCode?"needs-connection":["credential-store-incompatible","login-incompatible"].includes(a.reasonCode)?"incompatible":"unknown",reasonCode:a.reasonCode}}}},954682:(a,b,c)=>{"use strict";c.d(b,{E5:()=>g,Jp:()=>d,O:()=>f,V8:()=>h,g4:()=>e});let d="TOOL_CALL",e="FINAL_RESPONSE",f="ERROR",g="STAY_ON_NODE",h="IMPLICIT_SUBFLOW_RETURN"},956233:(a,b,c)=>{"use strict";c.d(b,{J:()=>h,RZ:()=>j,Rt:()=>i,sf:()=>g});var d=c(189663);let e=globalThis,f=e.__flujoToolApprovals??(e.__flujoToolApprovals=new Map);function g(a,b,c){let e=(0,d.workspaceCacheKey)(a),g=f.get(e);g||(g=new Map,f.set(e,g)),g.set(b.id,{toolCall:b,resolve:c})}function h(a,b,c){let e=(0,d.workspaceCacheKey)(a),g=f.get(e),h=g?.get(b);return!!g&&!!h&&(g.delete(b),0===g.size&&f.delete(e),h.resolve(c),!0)}function i(a){let b=f.get((0,d.workspaceCacheKey)(a));return b?Array.from(b.values(),a=>a.toolCall):[]}function j(a){let b=(0,d.workspaceCacheKey)(a),c=f.get(b);if(c){for(let a of c.values())a.resolve(!1);f.delete(b)}}},965458:(a,b,c)=>{"use strict";let d;c.r(b),c.d(b,{FlowExecutor:()=>b3});var e=c(43521),f=c(954682),g=c(181721),h=c.n(g),i=c(383594),j=c(455511),k=c.n(j),l=c(81300),m=c(116197);let n=(0,e.h)("execution/nodes/StartNode.ts");class o extends m.Yp{async prep(a,b){n.info("prep() started");let c=b?.properties?.promptTemplate||"";n.info("Extracted promptTemplate",{promptTemplateLength:c.length,promptTemplatePreview:c.length>100?c.substring(0,100)+"...":c});let d={nodeId:b?.id||"",nodeType:"start",systemPrompt:c};return n.info("prep() completed"),d}async execCore(a,b){n.info("execCore() started"),n.verbose("execCore() prepResult",JSON.stringify(a));let c={success:!0};return n.verbose("execCore() execResult",JSON.stringify(c)),n.info("execCore() completed"),c}async post(a,b,c,d){if(n.info("post() started"),n.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),i.Gv.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"StartNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Start Node",timestamp:new Date().toISOString()}),n.info("Added StartNode tracking information")),a.systemPrompt){let b={role:"system",content:a.systemPrompt,id:crypto.randomUUID(),timestamp:Date.now()};c.messages.some(a=>"system"===a.role)||(c.messages.push(b),n.debug("Added system message",{contentLength:"string"==typeof b.content?b.content.length:"non-string content",contentPreview:"string"==typeof b.content&&b.content.length>50?b.content.substring(0,50)+"...":b.content}))}n.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(n.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return n.info(`post() completed, returning action: ${a}`),a}return n.info("post() completed, returning default action"),"default"}_clone(){return new o}}var p=c(482040),q=c(245698),r=c(805809),s=c(122134),t=c(558736);let u=(0,e.h)("backend/utils/PromptRenderer");class v{async resolveChatMessageReferences(a,b,c){let d=(0,r.A$)(a),e=a;if(d.length>0){let f="",g=0;for(let e of d){if(f+=a.slice(g,e.index),g=e.index+e.fullMatch.length,"tool"===e.kind){f+=e.fullMatch;continue}f+=b.some(a=>{if(a.properties.boundServer!==e.server)return!1;let b=a.properties.enabledResources;return void 0===b||"all"===b||b.includes(e.name)})?await this.renderResourceBinding(e.server,e.name,c,e.fullMatch):e.fullMatch}f+=a.slice(g),e=f}return await (0,s.V)(e)}async renderPrompt(a,b,c){let d=c?.renderMode||"rendered",e=c?.includeConversationHistory||!1;u.info(`Rendering prompt for node ${b} in flow ${a}`,{renderMode:d,includeConversationHistory:e});let{prompt:f,excludeModelPrompt:g,excludeStartNodePrompt:h,excludeSystemPrompt:i}=await this.findNodePrompt(b,a,c?.flowSnapshot),j=c?.excludeModelPrompt!==void 0?c?.excludeModelPrompt:g,k=c?.excludeStartNodePrompt!==void 0?c?.excludeStartNodePrompt:h,l=c?.excludeSystemPrompt!==void 0?c?.excludeSystemPrompt:i;u.debug("Exclusion settings",{excludeModelPrompt:j,excludeStartNodePrompt:k,excludeSystemPrompt:l,fromOptions:{excludeModelPrompt:c?.excludeModelPrompt!==void 0,excludeStartNodePrompt:c?.excludeStartNodePrompt!==void 0,excludeSystemPrompt:c?.excludeSystemPrompt!==void 0}});let m="",n=null;if(!k){let b=await this.findStartNodePrompt(a,c?.flowSnapshot);b&&(u.debug("Adding start node prompt",{length:b.length}),m+=b+"\n\n")}if(!j){let d=await this.findModelPrompt(b,a,c?.flowSnapshot,c?.admittedModel);d.prompt&&(u.debug("Adding model prompt",{modelId:d.modelId,length:d.prompt.length}),m+=d.prompt+"\n\n"),n=d.functionCallingSchema,d.reasoningSchema&&(m+=`Please use the following pattern to mark your reasoning: ${d.reasoningSchema}
111
+ CALLABLE SUBFLOW TOOL (not a handoff): calling this runs the "${b.label}" subflow right now and returns its result as structured JSON (success/output/error per lane) — you stay on the current step and can keep working with the answer. Saved child conversation memory applies when configured. An interrupted call has no checkpointed graph join and must be retried.`,inputSchema:{type:"object",properties:{task:{type:"string",description:d?"REQUIRED task/instruction for this subflow call. It has no default input configured.":"Task/instruction for this subflow call. Optional; omitted falls back to the subflow's configured input."},..."per-key"===e?{sessionKey:{type:"string",minLength:1,maxLength:128,description:"Stable child-conversation handle. Equal keys resume the same child; this overrides the saved key template."}}:{}},required:d?["task"]:[]}}}async function p(a,b,d){let e,{conversationId:o,emit:p}=d,q=(0,i.PL)(),r=(a,b)=>{if(!e)return;let c=e;e=void 0;try{let d=Math.max(0,q.elapsedMs()-c.waitMs);(0,h.z9)((0,h.k)({type:"subflow.invocation",runId:c.parentRunId,node:c.node,subflow:c.subflow,mode:"inline",invocationId:c.invocationId,childRunId:b?.childRunId,outcome:a,durationMs:d,waitMs:c.waitMs,phases:{subflowWait:c.waitMs,subflowExecution:d},errorClass:"error"===a?(0,h.Ys)(b?.error):void 0}))}catch{}};try{let d;if(!o)return{success:!1,error:"No active conversation to run the subflow tool call in."};let{FlowExecutor:h}=await Promise.resolve().then(c.bind(c,965458)),s=h.conversationStates.get(o);if(!s)return{success:!1,error:"Live conversation state not found for the subflow tool call."};if(s.executionExtensionContext||(0,l.isExecutionProtectedState)(s))return{success:!1,error:"execution_subflow_child_authority_required"};let t=s.subflowToolNameMap?.[a];if(!t)return{success:!1,error:`Unknown call_subflow tool "${a}" — no matching target node.`};let u=s.flowSnapshot??await g.flowService.getFlow(s.flowId),v=u?.nodes.find(a=>a.id===t),w=v?.data?.properties,x=w?.subflowId;if(!x)return{success:!1,error:"Target subflow node has no configured subflowId."};let y=(0,j.i)({personaAttribution:s.personaAttribution,parentFlowSnapshot:s.flowSnapshot,nodeId:t},x);try{d=y.flowDefinition?.name??(await g.flowService.getFlow(x))?.name}catch(a){n.warn("Could not resolve subflow display name; continuing without it",{err:a})}let z="string"==typeof b?.task?b.task.trim():"",A=(z.length>0?z:void 0)??w?.promptTemplate,B={subflowId:x,subflowName:d,...A?{input:{prompt:A}}:{},laneTitle:(0,f.oO)(A??d??"Subflow call"),callerSessionKey:(0,m.dd)(b?.sessionKey)},C=(s.runDepth??0)+1,D={nodeId:t,nodeName:v?.data?.label,nodeType:"subflow"},E={nodeId:t,nodeType:"subflow",subflowId:x,subflowName:d,nodeName:v?.data?.label,depth:C,chainDepth:s.chainDepth,parentRunId:s.conversationId,plannedExecutionId:s.plannedExecutionId,personaAttribution:s.personaAttribution,executionAuthority:(0,k.c4)(s.executionAuthority),parentFlowSnapshot:s.flowSnapshot,persistConversation:!1,sessionScope:w?.sessionScope,sessionKeyTemplate:w?.sessionKey,sessionInputMode:w?.sessionInputMode??"resume",sessionTurnCap:(0,m.p)(w?.sessionTurnCap),showSteps:!0,emit:p,lanes:[B],concurrencyLimit:1,joinSeparator:"\n\n",errorStrategy:"collect-all"},{runFlow:F}=await Promise.all([c.e(87019),c.e(22043)]).then(c.bind(c,987019)),{runSubflowLanes:G,resolveSubflowSessionKeys:H}=await Promise.resolve().then(c.bind(c,339756));"per-key"===E.sessionScope&&await H(E,s,t),E.persistConversation=!s.ephemeral&&w?.saveConversation!==!1&&(w?.sessionScope==="per-run"||w?.sessionScope==="per-key"&&!!E.lanes?.[0]?.sessionKey),s.logicalRunId&&(e={parentRunId:s.logicalRunId,node:{id:t,...v?.data?.label?{name:v.data.label}:{}},subflow:{id:x,...d?{name:d}:{}},invocationId:(0,i.Lf)(),waitMs:q.elapsedMs()});let I=await G(E,F,D,A?{prompt:A}:{prompt:""});return r(s.isCancelled?"cancelled":I.success?"completed":"error",{error:I.error,childRunId:function(a){let b=a?.lanes;if(!Array.isArray(b)||0===b.length)return;let c=b[0];for(let a of["runId","conversationId","childConversationId"]){let b=c?.[a];if("string"==typeof b&&b.length>0)return b}}(I)}),{success:I.success,data:{success:I.success,outputText:I.outputText,error:I.error,lanes:I.lanes},error:I.success?void 0:I.error}}catch(c){let b=c instanceof Error?c.message:String(c);return r("error",{error:c}),n.warn("call_subflow tool execution failed",{toolName:a,err:b}),{success:!1,error:b}}}},769588:(a,b,c)=>{"use strict";c.d(b,{LE:()=>o,PP:()=>n,c3:()=>p,jV:()=>m});var d=c(695794),e=c(43521),f=c(482040),g=c(212693),h=c(469088),i=c(241043),j=c(531123);let k=(0,e.h)("backend/services/mcp/sampling");function l(a){return a.sampling}function m(a){let b=l(a);return!!(b?.enabled&&b.modelId)}function n(a){let b=l(a);return b?.enabled?JSON.stringify({m:b.modelId,t:b.maxTokens,r:b.maxCallsPerMinute}):""}function o(a,b){let c=p(b);(0,j.zD)(a,"sampling/createMessage",c),a.setRequestHandler(d.u9,c)}function p(a){let b=[];return async(c,e={})=>{await (0,j.HM)(e);let m=l(a);if(!m?.enabled||!m.modelId)throw new d.Nh(d.O4.InvalidRequest,"Sampling is not enabled for this server");let n=m.maxCallsPerMinute??10,o=Date.now(),p=o-6e4;for(;b.length>0&&b[0]<p;)b.shift();if(b.length>=n)throw k.warn(`Sampling rate limit (${n}/min) hit for ${a.name}`),new d.Nh(d.O4.InvalidRequest,`Sampling rate limit of ${n}/min exceeded`);b.push(o);let q=await f.modelService.getModel(m.modelId);if(await (0,j.HM)(e),!q)throw new d.Nh(d.O4.InternalError,`Sampling model not found: ${m.modelId}`);if(void 0!==q.ownerCredentialBinding)throw new d.Nh(d.O4.InvalidRequest,"Owner-bound models require an authorized model-step transport.");if(q.fallbackPolicy||!(0,i.g3)(q.provider,q.adapter,q.name).maxOutputTokens)throw new d.Nh(d.O4.InvalidRequest,"Sampling requires a model that supports an output-token limit");let r=await f.modelService.resolveAndDecryptApiKey(q.ApiKey);await (0,j.HM)(e);let s=r||(q.fallbackPolicy||(0,i.supportsLocalModelAuth)((0,i.resolveModelAdapter)(q.provider,q.adapter))&&!q.ApiKey?.trim()?"":null);if(null===s)throw new d.Nh(d.O4.InternalError,"Could not resolve the sampling model API key");let t=c.params;if(!Number.isSafeInteger(t?.maxTokens)||t.maxTokens<=0)throw new d.Nh(d.O4.InvalidParams,"Sampling maxTokens must be a positive integer");let u=function(a){let b=[];for(let c of(a.systemPrompt&&b.push({role:"system",content:a.systemPrompt}),a.messages||[])){let a=c.content,d=a?.type==="text"&&"string"==typeof a.text?a.text:`[unsupported ${a?.type||"non-text"} content omitted]`;b.push({role:c.role,content:d})}return b}(t),v="number"==typeof t.temperature?t.temperature:.7;k.info(`Sampling for ${a.name} via model ${q.name} (${u.length} messages)`);let w=(0,g.getCompletionAdapter)(q),x=Math.min(...[t.maxTokens,(0,h.normalizeMaxTokens)(m.maxTokens),(0,h.normalizeMaxTokens)(q.maxTokens)].filter(a=>void 0!==a));await (0,j.HM)(e);let{completion:y}=await w.createCompletion({model:q,apiKey:s,messages:u,temperature:v,temperatureOverride:v,maxTokens:x,signal:e.signal});await (0,j.HM)(e);let z=y.choices?.[0]?.message?.content;return{role:"assistant",content:{type:"text",text:"string"==typeof z?z:""},model:q.name,stopReason:y.choices?.[0]?.finish_reason==="length"?"maxTokens":"endTurn"}}}},769760:(a,b,c)=>{"use strict";c.r(b),c.d(b,{McpRuntimeAuthorityRetirementError:()=>ac,assertMcpRuntimeAuthorityRetired:()=>af,attachShippedWorkspaceReadiness:()=>av,capabilityKey:()=>$,clientProtectedConfigFingerprint:()=>Z,createNewClient:()=>ar,createStdioTransport:()=>aw,createTransport:()=>as,flattenCustomHeaders:()=>al,getUnderlyingTransport:()=>ai,httpConfigKey:()=>aq,isolatedStdioRuntime:()=>at,protectedConfigFingerprint:()=>Y,resolveConfigHeaders:()=>ak,resolveStdioLaunch:()=>au,retireMcpRuntimeAuthority:()=>ah,safelyCloseClient:()=>ay,shouldRecreateClient:()=>ax,stdioConfigKey:()=>ap});var d=c(34762),e=c(651633),f=c(179764),g=c(774858),h=c(478645),i=c(56140),j=c(470589),k=c(558736),l=c(57971),m=c(481034),n=c(525613),o=c(635016),p=c(629021),q=c(333873),r=c(321820),s=c(977598),t=c(973024),u=c.n(t),v=c(176760),w=c.n(v);class x extends Error{constructor(){super("Isolated MCP runtime directory is unavailable or unsafe."),this.code="UNSAFE_MCP_RUNTIME_DIRECTORY",this.name="RuntimeDirectoryAdmissionError"}}function y(a,b){if(!a.isDirectory()||a.isSymbolicLink())throw new x;if("win32"!==process.platform){let c=process.geteuid?.()??process.getuid?.();if(void 0===c||a.uid!==BigInt(c)||(b?(a.mode&BigInt(511))!==BigInt(448):(a.mode&BigInt(18))!==BigInt(0)))throw new x}}class z{constructor(a){this.directories=new Map;try{this.root=w().resolve(a);let b=u().lstatSync(this.root,{bigint:!0});y(b,!1),this.directories.set(this.root,{stat:b,canonical:u().realpathSync(this.root),privateAnchor:!1}),this.verify()}catch{throw new x}}admit(a,b=!1){try{let c;this.verify();let d=w().resolve(a),e=this.directories.get(w().dirname(d));if(d===this.root||!e)throw new x;let f=this.directories.get(d);if(f){b&&!f.privateAnchor&&(y(f.stat,!0),f.privateAnchor=!0);return}try{c=u().lstatSync(d,{bigint:!0})}catch(a){if("ENOENT"!==a.code)throw a}if(!c){this.verify();try{u().mkdirSync(d,{mode:448})}catch(a){if("EEXIST"!==a.code)throw a}c=u().lstatSync(d,{bigint:!0})}y(c,b);let g=u().realpathSync(d);if(w().dirname(g)!==e.canonical)throw new x;this.directories.set(d,{stat:c,canonical:g,privateAnchor:b}),this.verify()}catch{throw new x}}verify(){try{for(let[a,b]of this.directories){let c=u().lstatSync(a,{bigint:!0});for(let a of(y(c,b.privateAnchor),["dev","ino","mode","uid","gid"]))if(c[a]!==b.stat[a])throw new x;if(u().realpathSync(a)!==b.canonical)throw new x}}catch{throw new x}}}var A=c(43521),B=c(380949),C=c(7557),D=c(676881),E=c(342518),F=c(442409),G=c(901984),H=c(593330);let I=new Set(["node","npm","npx"]);var J=c(189663),K=c(553468),L=c(34679),M=c(140742),N=c(769588),O=c(170098),P=c(122134),Q=c(899631),R=c(492335),S=c(767351),T=c(928776),U=c(660826),V=c(127915);let W=globalThis,X=W.__flujoProtectedConfigFingerprintKey??=(0,s.randomBytes)(32);function Y(a){return(0,s.createHmac)("sha256",X).update(JSON.stringify(a)).digest("hex")}function Z(a){return a.__flujoProtectedConfigFingerprint}function $(a){return[(0,N.PP)(a),(0,O.NJ)(a),!0===a.enableMcpApps?"mcp-apps:on":"mcp-apps:off",!0===a.enableMcpSkills?"mcp-skills:on":"mcp-skills:off"].join("|")}let _=Symbol.for("FLUJO:mcp-authority-retirement-errors:v1"),aa=Object.getOwnPropertyDescriptor(globalThis,_);if(aa&&(!("value"in aa)||aa.configurable||aa.writable||!(aa.value instanceof WeakSet)))throw Error("MCP retirement error provenance refused.");let ab=aa?.value??new WeakSet;aa||Object.defineProperty(globalThis,_,{value:ab,writable:!1,configurable:!1,enumerable:!1});class ac extends AggregateError{constructor(a,b,c){super(a,b,c),WeakSet.prototype.add.call(ab,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(ab,a)}}function ad(){return globalThis.__flujo_mcp_authority_retirement_quarantines??=new Map}function ae(a,b=(0,J.getCurrentWorkspace)()){return`${b}\0${a}`}function af(a){let b=ad().get(ae(a));if(b)throw b.error}function ag(a,b,c,d){let e=ad(),f=ae(a,b);d?e.set(f,{owner:c,error:d}):e.get(f)?.owner===c&&e.delete(f)}function ah(a,b,c,e){let f=[];try{c&&(0,d.p9)(c)}catch(a){f.push(a)}try{(0,U.tS)(e?.leaseId)}catch(a){f.push(a)}if(f.length){let d=new ac(f,"MCP runtime authority retirement failed.",{cause:f[0]});throw ag(a,b,c??e,d),d}ag(a,b,c??e)}function ai(a){let b=a,c=new Set;for(;b&&"object"==typeof b&&!c.has(b);){c.add(b);let a=b.__flujoInnerTransport;if(!a)break;b=a}return b}let aj=(0,A.h)("backend/services/mcp/connection");async function ak(a){let b=a;if(a.env&&"object"==typeof a.env){let c=new Map;for(let[b,d]of Object.entries(a.env)){if(!(0,R.dR)(b))continue;let a=(0,R.ff)(d);if(!a||(0,Q.uh)(a))continue;let e=await (0,P.G)(a);e&&c.set(b,e)}b={...b,env:(0,R.ln)(c)}}if("streamable"!==a.transport&&"sse"!==a.transport||!a.headers||"object"!=typeof a.headers)return b;let c=new Map;for(let[b,d]of Object.entries(a.headers)){if(!(0,R.pI)(b))continue;let a=(0,R.ff)(d);if(!a||(0,Q.uh)(a))continue;let e=await (0,P.G)(a);e&&c.set(b,e)}return{...b,headers:(0,R.ln)(c)}}function al(a){let b=new Map;for(let[c,d]of Object.entries(a)){if(!(0,R.pI)(c))continue;let a=(0,R.ff)(d);"string"==typeof a&&a.length>0&&b.set(c,a)}return(0,R.ln)(b)}function am(a){let b=new Map;if(a)for(let[c,d]of Object.entries(a)){if(!(0,R.dR)(c))continue;let a=(0,R.ff)(d);void 0!==a&&b.set(c,a)}return(0,R.ln)(b)}let an=new Set(["path","pathext","home","userprofile","homedrive","homepath","appdata","localappdata","programdata","xdg_config_home","xdg_cache_home","xdg_data_home","xdg_state_home","xdg_runtime_dir","tmp","temp","tmpdir","shell","comspec","systemroot","windir","systemdrive","programfiles","programfiles(x86)","gh_config_dir"]);function ao(a,b,c){for(let c of Object.keys(a))c.toLowerCase()===b.toLowerCase()&&delete a[c];void 0!==c&&(a[b]=c)}function ap(a,b=!1){return JSON.stringify({command:a.command,args:a.args??[],env:am(a.env),cwd:String(a.cwd??""),rootPath:a.rootPath??"",isolateRuntimeHome:b,isolation:a.isolation,trustedHost:a.trustedHost})}function aq(a){return JSON.stringify({transport:a.transport,url:a.serverUrl??"",headers:a.headers??{},requestInit:a.requestInit??{},eventSourceInit:a.eventSourceInit??{},reconnectionOptions:a.reconnectionOptions??{},sessionId:a.sessionId??"",oauthClientId:a.oauthClientId??"",oauthIssuer:a.oauthIssuer??"",oauthClientInformation:a.oauthClientInformation??{},oauthClientSecret:a.oauthClientSecret??"",oauthTokens:a.oauthTokens??{}})}function ar(a){if(aj.debug("Entering createNewClient method"),(0,k.isProtectedExecutionServer)(a.name)){(0,k.assertExecutionServerConfig)(a);let b=new e.tI({name:`flujo-${a.name}-client`,version:"3.48.0"},{capabilities:{}});return b.__flujoCapKey=$(a),Object.defineProperty(b,"__flujoProtectedConfigFingerprint",{value:Y(a),enumerable:!1}),b}let b=(0,N.jV)(a),c=(0,O.fy)(a),d=!0===a.enableMcpApps,f="stdio"===a.transport&&void 0===a.isolation,g=new e.tI({name:`flujo-${a.name}-client`,version:"3.48.0"},{capabilities:{experimental:{},roots:{listChanged:!0},...b?{sampling:{}}:{},...f||c?{elicitation:{...f?{url:{}}:{},...c?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[C.ET]:{}}:{},...f?{[T.OM]:T.XC}:{},...d?{[S.OF]:{mimeTypes:[S.cM]}}:{}}}});return(0,M.FP)(g,a),b&&(0,N.LE)(g,a),(f||c)&&(0,O.n4)(g,a),g.__flujoCapKey=$(a),g}function as(a,b){if((0,B.SL)(a),aj.debug("Entering createTransport method"),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new f.Bk("ISOLATION_POLICY_INVALID");if("streamable"===a.transport){aj.info(`Creating streamable http transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.headers&&"object"==typeof a.headers){let c=al(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},aj.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}if(a.oauthClientId||a.oauthClientInformation){aj.info(`Setting up OAuth authentication for ${a.name}`);let c=(0,D.Cl)(a);b.authProvider=c,b.fetch=c.oauthFetch,a.oauthTokens?aj.debug(`OAuth provider configured for ${a.name} with existing tokens`):aj.debug(`OAuth provider configured for ${a.name} - will initiate OAuth flow if needed`)}else aj.debug(`No OAuth configuration found for ${a.name}`);let c=new n.j(new URL(a.serverUrl),b);return c.__flujoHttpKey=aq(a),c}if("sse"===a.transport){aj.info(`Creating legacy sse transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit),a.headers&&"object"==typeof a.headers){let c=al(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},aj.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}let c=new o.A(new URL(a.serverUrl),b);return c.__flujoHttpKey=aq(a),c}return"websocket"===a.transport?(aj.info(`Creating WebSocket transport for server ${a.name} with URL ${a.websocketUrl}`),new m.I(new URL(a.websocketUrl))):aw(a,b)}function at(a){let b=(0,J.getWorkspaceDataDir)(),c=(0,s.createHash)("sha256").update(a,"utf8").digest("hex").slice(0,24),d=new z(b),e=b;for(let a of["userdata","mcp-runtime",c])e=q.join(e,a),d.admit(e,a===c);let f=e,g=q.join(f,"home"),h=q.join(f,"cwd");d.admit(g),d.admit(h);let i={appData:q.join(g,"AppData","Roaming"),localAppData:q.join(g,"AppData","Local"),config:q.join(g,".config"),cache:q.join(g,".cache"),data:q.join(g,".local","share"),state:q.join(g,".local","state"),runtime:q.join(g,".runtime"),temp:q.join(g,"tmp"),npm:q.join(g,".npm"),pip:q.join(g,".cache","pip"),uv:q.join(g,".cache","uv")};for(let a of Object.values(i)){let b=q.relative(g,a),c=g;for(let a of b.split(q.sep).filter(Boolean))c=q.join(c,a),d.admit(c)}let j={HOME:g,USERPROFILE:g,APPDATA:i.appData,LOCALAPPDATA:i.localAppData,XDG_CONFIG_HOME:i.config,XDG_CACHE_HOME:i.cache,XDG_DATA_HOME:i.data,XDG_STATE_HOME:i.state,XDG_RUNTIME_DIR:i.runtime,TMPDIR:i.temp,TMP:i.temp,TEMP:i.temp,NPM_CONFIG_CACHE:i.npm,PIP_CACHE_DIR:i.pip,UV_CACHE_DIR:i.uv,FLUJO_PARENT_DATA_DIR:(0,G.ok)(),FLUJO_DATA_DIR:b,FLUJO_WORKSPACE:(0,J.getCurrentWorkspace)()};if("win32"===process.platform){let a=q.parse(g);j.HOMEDRIVE=a.root.replace(/[\\/]$/,""),j.HOMEPATH=g.slice(a.root.length-1)}return d.verify(),{cwd:h,env:j}}function au(a,b){if("stdio"!==a.transport)throw new B.UQ;if(void 0!==a.isolation){if(void 0!==a.trustedHost)throw new f.Bk("ISOLATION_POLICY_INVALID");let b=(0,j.O0)(a,am(a.env)),{launch:c}=b;return{command:c.command,args:[...c.args],env:(0,j.H2)(c),cwd:c.cwd,isolation:b}}if((0,j.iw)(a),void 0!==a.trustedHost){let c=(0,g.FN)(a),d=(0,h.vb)(a),e=b?.isolateRuntimeHome===!0;if(e!==("isolated"===d.policy.runtimeHome))throw new h.Kq("HOST_POLICY_INVALID");if(e){let b=at(a.name);if(d.policy.packageRunner&&q.resolve(a.cwd)!==q.resolve(b.cwd))throw new h.Kq("HOST_POLICY_INVALID");for(let[a,e]of Object.entries(b.env)){if(!d.policy.environmentNames.includes(a))throw new h.Kq("HOST_POLICY_INVALID");if(d.policy.packageRunner){let b=Object.entries(c.env).find(([b])=>b.toUpperCase()===a.toUpperCase())?.[1];if(b&&b!==e)throw new h.Kq("HOST_POLICY_INVALID")}c.env[a]=e}if(d.policy.packageRunner){let a=c.args.findIndex(a=>a.startsWith("--cache="));if(a<0)throw new h.Kq("HOST_POLICY_INVALID");c.args[a]=`--cache=${b.env.NPM_CONFIG_CACHE}`}}return aj.debug("Transformed environment variable names",Object.keys(c.env)),c}let c=(0,K.AW)(a),d=!!c,e=c?.defaultName==="bash",i=a=>d?a:(0,J.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"),k=i(a.command),l=a.args?a.args.map(i):[],m=`${C.VL}/${a.name}`;aj.info(`Creating stdio transport for server ${a.name}`),aj.debug(`Original command: ${k}`),aj.debug(`Original args: ${JSON.stringify(l)}`),aj.debug(`Server directory: ${m}`);let n=!q.isAbsolute(k)&&(k.includes("/")||k.includes("\\")),o=!k.includes("/")&&!k.includes("\\");if(aj.debug(`Is relative path: ${n}`),aj.debug(`Is just filename: ${o}`),"win32"===r.platform()&&k.toLowerCase().endsWith(".bat"))if(aj.debug(`Detected .bat file on Windows: ${k}`),o){let a=q.join((0,J.getWorkspaceDataDir)(),m,k);aj.debug(`Checking if file exists at: ${a}`);let b=p.existsSync(a);aj.debug(`File exists: ${b}`),b?(aj.debug(`Using full path to .bat file: ${a}`),l=["/c",a,...l]):(aj.warn(`WARNING: .bat file not found at ${a}`),l=["/c",k,...l]),k="cmd.exe"}else aj.debug(`Using cmd.exe with path as provided: ${k}`),l=["/c",k,...l],k="cmd.exe";let s=function(a,b){if(!a||!(!a.includes("/")&&!a.includes("\\")))return a;let c=a.toLowerCase();if(!I.has(c))return a;if("node"===c)return b.execPath||a;if(!b.execPath)return a;let d=b.dirname(b.execPath);for(let a of"win32"===b.platform?[`${c}.cmd`,`${c}.exe`,c]:[c]){let c=b.joinPath(d,a);if(b.fileExists(c))return c}return a}(k,{execPath:process.execPath,platform:r.platform(),dirname:q.dirname,joinPath:q.join,fileExists:p.existsSync});s!==k&&(aj.debug(`Resolved Node toolchain command "${k}" to absolute path: ${s}`),k=s),aj.debug(`Final command: ${k}`),aj.debug(`Final args: ${JSON.stringify(l)}`);let t=e||b?.isolateRuntimeHome!==!0?void 0:at(a.name),u=i((0,H.u)({command:a.command,args:a.args,rootPath:a.rootPath,cwd:a.cwd,serverName:a.name,defaultCwd:`${C.VL}/${a.name}`,packageRunnerCwd:t?.cwd})),v=q.isAbsolute(u)?u:q.join((0,J.getWorkspaceDataDir)(),u);aj.debug(`cwd: ${v}`);let w=am(a.env),x=e?function(a){let b={...a},c=Object.entries(process.env).filter(a=>"string"==typeof a[1]);for(let[a,d]of c)ao(b,a,d);for(let a of an)c.find(([b])=>b.toLowerCase()===a)||ao(b,a,void 0);return b}(w):w;if(!d)for(let[a,b]of Object.entries(x))x[a]=i(b);t&&Object.assign(x,t.env),function(a){if("win32"!==process.platform)return;let b=(a,b)=>Object.entries(a).find(([a,c])=>a.toLowerCase()===b.toLowerCase()&&""!==(c??"").trim())?.[1],c=b(process.env,"SystemRoot")??b(process.env,"windir")??"C:\\Windows";for(let[d,e]of Object.entries({SystemRoot:c,windir:c,ComSpec:b(process.env,"ComSpec")??q.join(c,"System32","cmd.exe"),PATHEXT:b(process.env,"PATHEXT")??".COM;.EXE;.BAT;.CMD"}))if(void 0===b(a,d)){for(let b of Object.keys(a))b.toLowerCase()===d.toLowerCase()&&delete a[b];a[d]=e}}(x);let y=(0,G.ok)(),z=(0,J.getWorkspaceDataDir)();if(x.FLUJO_PARENT_DATA_DIR=y,x.FLUJO_DATA_DIR=z,x.FLUJO_WORKSPACE=(0,J.getCurrentWorkspace)(),c?.defaultName==="browser"){if(!x.PLAYWRIGHT_BROWSERS_PATH?.trim()){let a=(0,K.AI)(process.env);a&&(x.PLAYWRIGHT_BROWSERS_PATH=a)}x.FLUJO_BROWSER_PROFILE_DIR=q.join(z,"browser-profile","trusted"),x.FLUJO_BROWSER_SCREENSHOT_DIR=q.join(z,"screenshots","browser"),x.FLUJO_BROWSER_RECORD_DIR=q.join(z,"recordings","browser")}for(let a of Object.keys(x))a.toUpperCase()===V.wd&&delete x[a];aj.verbose("Transformed environment variable names",JSON.stringify(Object.keys(x)));let A=(0,V.hz)(a);return A&&(x[V.wd]=A),"1"===process.env.FLUJO_WORKER_MODE&&c?.defaultName==="flujo"&&(x.FLUJO_WORKER_MODE="1",process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN&&(x.FLUJO_SNAPSHOT_CONTROL_TOKEN=process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN)),{command:k,args:l,env:x,cwd:v}}function av(a,b,c){let d=(0,K.AW)(b),e=(0,J.getWorkspaceDataDir)();if(!d||q.resolve(c)!==q.resolve(e,"mcp-servers",d.packageDirectory))return;let f=a.start.bind(a);a.start=async()=>{await (0,L._F)(e,void 0,[d.packageDirectory]),await f()}}function aw(a,b){let c,e,f;if(aj.debug("Entering createStdioTransport method"),"stdio"!==a.transport)throw Error("Cannot create stdio transport for non-stdio config");let{command:h,args:k,env:m,cwd:n,isolation:o}=au(a,b),p=(0,J.getCurrentWorkspace)(),q=()=>ah(a.name,p,e,c);aj.info(`Creating StdioClientTransport for ${a.name} with stderr: 'pipe'`);try{af(a.name),e=(0,d.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,U.D9)(a.name):void 0;let p=e?(0,d.Uf)(a,e):{},r={command:h,args:k,env:{...m,...c?a.trustedHost?(0,g.s7)(a,c.env):c.env:{},...p},cwd:n,stderr:o?"ignore":"pipe",...o?{maxBufferSize:262144}:{}};o||(Object.freeze(r.args),Object.freeze(r.env),Object.freeze(r)),f=new l.oQ(r),o?(0,j.We)(f,a,o,q):a.trustedHost?(0,g.Zu)(f,a,q,e):(av(f,a,n),(0,i.uR)(f,a,a=>JSON.stringify([ap(a,b?.isolateRuntimeHome===!0),$(a)])))}catch(b){let a=[];try{o?.close()}catch(b){a.push(b)}try{q()}catch(b){a.push(b)}if(a.length)throw new ac([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}return c&&(f.__flujoRuntimeBrokerLeaseId=c.leaseId),f.__flujoBundledWorkload=e,f.__flujoRetireRuntimeAuthority=q,f.__flujoStdioKey=ap(a,b?.isolateRuntimeHome===!0),f.stderr?aj.info(`Stderr stream is available for ${a.name}`):aj.warn(`Stderr stream is NOT available for ${a.name}`),f}function ax(a,b,c=!1,d){if(aj.debug("Entering shouldRecreateClient method"),(0,E.wk)(a))return{needsNewClient:!0,reason:"Existing connection is closed"};if((a.__flujoCapKey??"")!==$(b))return{needsNewClient:!0,reason:"Client capabilities (sampling/elicitation/MCP Apps/Skills) changed"};let e=!0===a.__flujoBeta,f=c&&"websocket"!==b.transport;if(e!==f)return{needsNewClient:!0,reason:f?"Beta MCP protocol enabled":"Beta MCP protocol disabled"};if(e){let c=a.transport;if(!c||c.__flujoKind!==b.transport)return{needsNewClient:!0,reason:`Transport type changed to ${b.transport}`};if("stdio"===b.transport){if(c.__flujoStdioKey!==ap(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}else if(c.__flujoHttpKey!==aq(b))return{needsNewClient:!0,reason:`${b.transport} auth/connection parameters changed`};return{needsNewClient:!1}}if("websocket"===b.transport){if(!(a.transport instanceof m.I))return{needsNewClient:!0,reason:"Transport type changed to websocket"}}else if("streamable"===b.transport){if(!(a.transport instanceof n.j))return{needsNewClient:!0,reason:"Transport type changed to streamable"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"Streamable server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing streamable transport has no config key"};if(e!==aq(b))return{needsNewClient:!0,reason:"Streamable auth/connection parameters changed"}}else if("sse"===b.transport){if(!(a.transport instanceof o.A))return{needsNewClient:!0,reason:"Transport type changed to sse"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"SSE server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing sse transport has no config key"};if(e!==aq(b))return{needsNewClient:!0,reason:"SSE auth/connection parameters changed"}}else{if(!(a.transport instanceof l.oQ))return{needsNewClient:!0,reason:"Transport type changed to stdio"};if("stdio"!==b.transport)return{needsNewClient:!0,reason:"Transport type changed from stdio"};let c=a.transport.__flujoStdioKey;if(!c)return{needsNewClient:!0,reason:"Existing stdio transport has no config key"};if(c!==ap(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}return{needsNewClient:!1}}async function ay(a,b,c,e){let f,g;aj.debug("Entering safelyCloseClient method");let h=Date.now(),i=e?.gracePeriodMs??15e3,k=e?.killEscalationMs??5e3,l=!1,m=!1,n=ai(a.transport),o=(0,j.Ck)(n),p=n?._process,q=p&&"function"==typeof p.kill?"owned":c&&"stdio"!==c.transport?"external":"unknown",r="none",s=[];try{if(p&&"function"==typeof p.kill&&(l=null!==p.exitCode||null!==p.signalCode,null===p.exitCode&&null===p.signalCode)){try{p.stdin&&!p.stdin.destroyed&&(p.stdin.end(),aj.debug(`Closed stdin for graceful shutdown for ${b}`))}catch(a){aj.warn(`Error closing stdin for ${b}:`,a)}if(l=await (null!==p.exitCode||null!==p.signalCode?Promise.resolve(!0):new Promise(a=>{let b=()=>{clearTimeout(c),a(!0)},c=setTimeout(()=>{p.removeListener("exit",b),a(!1)},i);c.unref?.(),p.once("exit",b)})))aj.info(`Process exited gracefully for ${b}`);else{aj.warn(`Process did not exit within ${i}ms after stdin close; escalating to a tree kill for ${b}`);let a=await (0,F.U)(p,{graceMs:k,finalWaitMs:k});l=a.exited,m=a.forced,l?aj.warn(`Process tree for ${b} force-terminated after ${a.durationMs}ms`):aj.error(`Process tree for ${b} (pid ${a.pid??"unknown"}) did not exit after forced escalation`)}}await a.close(),aj.info(`Client closed successfully for ${b}`)}catch(a){r="close_failed",g=a,aj.warn(`Error closing client for ${b}:`,a)}finally{try{f=o?.close()}catch(a){s.push(a)}let a=n?.__flujoRetireRuntimeAuthority;if(a)try{a()}catch(a){s.push(a)}else{try{let a=n?.__flujoBundledWorkload;a&&(0,d.p9)(a)}catch(a){s.push(a)}try{(0,U.tS)(n?.__flujoRuntimeBrokerLeaseId)}catch(a){s.push(a)}}}"owned"===q&&p&&(l||=null!==p.exitCode||null!==p.signalCode),f?.outcome==="unknown"&&(l=!1);let t="external"===q?"not_applicable":l?"observed_exit":"unknown";"unknown"===t&&"none"===r&&(r="exit_unobserved");let u={exited:l,forced:m,durationMs:Date.now()-h,processOwnership:q,exitOutcome:t,errorClassification:r,...o&&f?{isolation:{schemaVersion:1,generation:o.launch.generation,cleanupOutcome:f.outcome}}:{}};if(s.length){let a=void 0===g?s:[g,...s];throw Object.assign(new ac(a,"MCP shutdown authority retirement failed.",{cause:a[0]}),{shutdownObservation:u})}return u}},774207:(a,b,c)=>{"use strict";c.d(b,{DO:()=>l,Je:()=>k,go:()=>d,oR:()=>i});let d=3,e=/(session|usage|rate|quota|message|token)[\s_-]{0,3}limit|limit reached|reached your limit|too many requests|rate[\s_-]?limited|quota exceeded|exceeded your [a-z ]{0,24}quota|resets? (at|in|on)\b/i,f=/^\d+(?:\.\d+)?$/;function g(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function h(a){return"string"==typeof a&&a.trim().length>0?a.trim():void 0}function i(a,b=Date.now()){if(null==a)return;if("number"==typeof a){if(!Number.isFinite(a)||a<0)return;return Math.round(1e3*a)}let c=h(a);if(!c)return;if(f.test(c)){let a=Number(c);if(!Number.isFinite(a)||a<0)return;return Math.round(1e3*a)}if(/^[+-]/.test(c))return;let d=Date.parse(c);if(!Number.isFinite(d))return;let e=d-b;if(!(e<0))return e}function j(a){let b=a&&"object"==typeof a?a:{},c=b.details&&"object"==typeof b.details?b.details:b.errorDetails&&"object"==typeof b.errorDetails?b.errorDetails:b,d=h(b.message)??h(c.message)??("string"==typeof a?a:"")??"";return{status:g(c.status)??g(c.statusCode),code:h(c.code)??h(c.type)??h(b.code),message:d,retryAfter:c.retryAfter,retryAfterMs:g(c.retryAfterMs)}}function k(a,b={}){let c=b.now??Date.now(),d=j(a);if(!function(a){let b=j(a);if(429===b.status)return!0;let c=`${b.code??""} ${b.message}`.toLowerCase();return!!e.test(c)||["service temporarily overloaded","temporarily overloaded","provider returned error","upstream error","bad request","rate limit","quota","too many requests","throttle","throttled"].some(a=>c.includes(a))}(a))return;let f=void 0!==d.retryAfterMs&&d.retryAfterMs>=0?d.retryAfterMs<=(b.maxDelayMs??9e5)?d.retryAfterMs:void 0:function(a,b=Date.now(),c=9e5){let d=i(a,b);if(void 0!==d&&!(d>c))return d}(d.retryAfter,c,b.maxDelayMs);if(void 0!==f)return{delayMs:f,retryAt:c+f,reason:"session_limit",status:d.status,code:d.code}}async function l(a,b={}){let{signal:c,shouldAbort:d}=b;return c?.aborted||d?.()?"aborted":a<=0?"ready":new Promise(e=>{let f,g=!1,h=a=>{g||(g=!0,clearTimeout(j),f&&clearInterval(f),c&&c.removeEventListener("abort",i),e(a))};function i(){h("aborted")}let j=setTimeout(()=>h("ready"),a);j.unref?.(),d&&(f=setInterval(()=>{d()&&h("aborted")},b.pollMs??250),f.unref?.()),c?.addEventListener("abort",i,{once:!0})})}},783125:(a,b,c)=>{"use strict";c.d(b,{$e:()=>t});var d=c(594735),e=c(977598),f=c(475560),g=c(43521),h=c(189663),i=c(257975);let j=Symbol("event snapshot byte budget exceeded");function k(a,b){if(a.length+2>b)throw j;let c=2;for(let d=0;d<a.length;d++){let e=a.charCodeAt(d);if(34===e||92===e)c+=2;else if(e<32)c+=8===e||9===e||10===e||12===e||13===e?2:6;else if(e<128)c++;else if(e<2048)c+=2;else if(e>=55296&&e<=56319){let b=a.charCodeAt(d+1);b>=56320&&b<=57343?(c+=4,d++):c+=6}else e>=56320&&e<=57343?c+=6:c+=3;if(c>b)throw j}return c}function l(a,b){if(!Number.isSafeInteger(b)||b<=0)return;let c=b,d=0,e=new WeakSet,f=a=>{if(a>c)throw j;c-=a},g=(a,b=0)=>{if(++d>1e5||b>64)throw j;if("string"==typeof a)return f(k(a,c)),a;if(null===a)return f(4),null;if("boolean"==typeof a)return f(a?4:5),a;if("number"==typeof a)return f(Number.isFinite(a)?String(a).length:4),a;if("object"!=typeof a){if("bigint"==typeof a)throw j;f(4);return}if(i.types.isProxy(a)||e.has(a))throw j;let h=Object.getPrototypeOf(a),l=Array.isArray(a);if(null!==h&&h!==(l?Array.prototype:Object.prototype)||Object.getOwnPropertyDescriptor(Object.prototype,"toJSON")||l&&Object.getOwnPropertyDescriptor(Array.prototype,"toJSON"))throw j;let m=Object.getOwnPropertyDescriptor(a,"toJSON");if(m&&(m.get||m.set||"function"==typeof m.value))throw j;f(2),e.add(a);let n=d=>{f(k(d,c)),f(2);let e=Object.getOwnPropertyDescriptor(a,d);if(e?.get||e?.set||!e&&(Object.getOwnPropertyDescriptor(Array.prototype,d)||Object.getOwnPropertyDescriptor(Object.prototype,d)))throw j;return g(e?.value,b+1)};try{if(l){let b=[];for(let c=0;c<a.length;c++)b.push(n(String(c)));return b}let b=Object.create(null);for(let c in a)Object.hasOwn(a,c)&&(b[c]=n(c));return b}finally{e.delete(a)}};try{let c=JSON.stringify(g(a));if(void 0===c)return;let d=Buffer.byteLength(c,"utf8");if(d>b)return;return{json:c,utf8Bytes:d}}catch{return}}let m=(0,g.h)("backend/execution/flow/engine/ExecutionEventBus"),n=Object.freeze({maxWorkspaceUtf8Bytes:4194304,maxProcessUtf8Bytes:0x1000000}),o=n.maxWorkspaceUtf8Bytes,p=n.maxProcessUtf8Bytes,q=Object.freeze({maxConversationUtf8Bytes:4194304,maxChannels:1024,maxWorkspaces:64});class r{chargeReplay(a,b){let c=this.replayWorkspaces.get(b.workspace);for(;c&&c.utf8Bytes+a.utf8Bytes>n.maxWorkspaceUtf8Bytes;){let a=c.entries.values().next().value;if(!a)break;this.evictReplayOwner(a)}for(;this.replayUtf8Bytes+a.utf8Bytes>n.maxProcessUtf8Bytes;){let a=this.replayEntries.values().next().value;if(!a)break;this.evictReplayOwner(a)}(c=this.replayWorkspaces.get(b.workspace))||(c={utf8Bytes:0,entries:new Map},this.replayWorkspaces.set(b.workspace,c)),c.entries.set(a,b),c.utf8Bytes+=a.utf8Bytes,this.replayEntries.set(a,b),this.replayUtf8Bytes+=a.utf8Bytes}releaseReplay(a){let b=this.replayEntries.get(a);if(!b)return;this.replayEntries.delete(a),this.replayUtf8Bytes-=a.utf8Bytes;let c=this.replayWorkspaces.get(b.workspace);c&&(c.entries.delete(a),c.utf8Bytes-=a.utf8Bytes,0===c.entries.size&&this.replayWorkspaces.delete(b.workspace))}evictReplayOwner(a){"conversation"===a.kind?this.evictConversationReplayPrefix(a.channel):this.evictGlobalReplayPrefix(a.firehose)}getFirehose(){let a=(0,h.getCurrentWorkspace)(),b=this.firehoses.get(a);if(!b){if(this.firehoses.size>=q.maxWorkspaces){let a=[...this.firehoses].find(([,a])=>0===a.emitter.listenerCount("event"));if(!a)return;for(;a[1].buffer.length;)this.evictGlobalReplayPrefix(a[1]);this.firehoses.delete(a[0])}let c=new d.EventEmitter;c.setMaxListeners(0),b={emitter:c,seq:0,buffer:[],utf8Bytes:0,epoch:(0,e.randomUUID)()},this.firehoses.set(a,b)}return b}getChannel(a){let b=(0,h.workspaceCacheKey)(a),c=this.channels.get(b);if(!c){if(this.channels.size>=q.maxChannels){let a=[...this.channels].find(([,a])=>0===a.emitter.listenerCount("event"));if(!a)return;this.removeChannel(a[0],a[1])}let a=new d.EventEmitter;a.setMaxListeners(0),c={emitter:a,seq:0,buffer:[],utf8Bytes:0},this.channels.set(b,c)}return c}evictConversationReplayPrefix(a){let b=a.buffer.shift();b&&(a.utf8Bytes-=b.utf8Bytes,this.conversationReplayUtf8Bytes-=b.utf8Bytes,this.conversationReplayEntries.delete(b),this.releaseReplay(b),0===a.buffer.length&&(a.buffer=[]))}removeChannel(a,b){for(this.cancelCleanup(a);b.buffer.length;)this.evictConversationReplayPrefix(b);this.channels.delete(a)}retainConversationReplay(a,b){let c=l(b,q.maxConversationUtf8Bytes);if(!c){for(;a.buffer.length;)this.evictConversationReplayPrefix(a);return}let d={...c,seq:b.seq};for(this.chargeReplay(d,{workspace:(0,h.getCurrentWorkspace)(),kind:"conversation",channel:a}),a.buffer.push(d),a.utf8Bytes+=d.utf8Bytes,this.conversationReplayUtf8Bytes+=d.utf8Bytes,this.conversationReplayEntries.set(d,a);a.buffer.length>1e3||a.utf8Bytes>q.maxConversationUtf8Bytes;)this.evictConversationReplayPrefix(a)}ensureConversationProjection(a){return void 0!==this.getChannel(a)}ensureGlobalProjection(){return void 0!==this.getFirehose()}cancelCleanup(a){let b=this.cleanupTimers.get(a);b&&(clearTimeout(b),this.cleanupTimers.delete(a))}scheduleCleanup(a,b,c){this.cancelCleanup(a);let d=setTimeout(()=>{if(this.cleanupTimers.get(a)!==d)return;this.cleanupTimers.delete(a);let e=this.channels.get(a);e!==b||e.seq!==c||(0!==e.seq||0!==e.buffer.length)&&e.terminalSeq!==c||e.emitter.listenerCount("event")>0||this.removeChannel(a,e)},3e5);"function"==typeof d.unref&&d.unref(),this.cleanupTimers.set(a,d)}emit(a,b){let c=this.getChannel(a),d=(0,h.workspaceCacheKey)(a),e=(0,f.allocateSeq)(a);c&&(c.seq=e+1,this.cancelCleanup(d),c.terminalSeq="run:done"===b.type?c.seq:void 0);let g={...b,conversationId:a,seq:e,timestamp:Date.now()};return c&&(this.retainConversationReplay(c,g),c.emitter.emit("event",g)),(0,f.appendFromBus)(g),this.publishGlobal(g),c&&"run:done"===g.type&&c.seq===e+1&&c.terminalSeq===e+1&&this.scheduleCleanup(d,c,e+1),g}emitterFor(a){return(0,h.bindToCurrentWorkspace)(b=>{try{this.emit(a,b)}catch(b){m.warn(`Failed to emit execution event for ${a}`,{err:b})}})}getBufferedSince(a,b){let c=this.channels.get((0,h.workspaceCacheKey)(a));return c?c.buffer.filter(a=>a.seq>=b).map(a=>JSON.parse(a.json)):[]}replayWindow(a){let b=this.channels.get((0,h.workspaceCacheKey)(a));return{firstSeq:b?.buffer[0]?.seq??b?.seq??0,nextSeq:b?.seq??0}}currentSeq(a){return this.channels.get((0,h.workspaceCacheKey)(a))?.seq??0}subscribe(a,b){let c=this.getChannel(a);if(!c)throw Error("Execution event channel capacity exhausted");let d=(0,h.workspaceCacheKey)(a);this.cancelCleanup(d),c.emitter.on("event",b);let e=!0;return()=>{!e||(e=!1,c.emitter.off("event",b),this.channels.get(d)!==c||c.emitter.listenerCount("event")>0||(c.terminalSeq===c.seq||0===c.seq&&0===c.buffer.length)&&this.scheduleCleanup(d,c,c.seq))}}evictGlobalReplayPrefix(a){let b=a.buffer.shift();b&&(a.utf8Bytes-=b.utf8Bytes,this.globalReplayUtf8Bytes-=b.utf8Bytes,this.globalReplayEntries.delete(b),this.releaseReplay(b),0===a.buffer.length&&(a.buffer=[]))}retainGlobalReplay(a,b){let c=l(b,o);if(!c){for(;a.buffer.length;)this.evictGlobalReplayPrefix(a);return}let d={...c,globalSeq:b.globalSeq};for(this.chargeReplay(d,{workspace:(0,h.getCurrentWorkspace)(),kind:"global",firehose:a}),a.buffer.push(d),a.utf8Bytes+=d.utf8Bytes,this.globalReplayUtf8Bytes+=d.utf8Bytes,this.globalReplayEntries.set(d,a);a.buffer.length>5e3||a.utf8Bytes>o;)this.evictGlobalReplayPrefix(a)}publishGlobal(a){let b=this.getFirehose();if(!b)return;let c={globalSeq:b.seq++,event:a};this.retainGlobalReplay(b,c),b.emitter.emit("event",c)}subscribeGlobal(a){let b=this.getFirehose();if(!b)throw Error("Execution firehose capacity exhausted");return b.emitter.on("event",a),()=>{b.emitter.off("event",a)}}getGlobalBufferedSince(a){return this.getFirehose()?.buffer.filter(b=>b.globalSeq>=a).map(a=>JSON.parse(a.json))??[]}getGlobalReplayPressure(){let a=this.firehoses.get((0,h.getCurrentWorkspace)()),b=0;for(let a of this.firehoses.values())a.buffer.length>0&&b++;return{workspaceUtf8Bytes:a?.utf8Bytes??0,processUtf8Bytes:this.globalReplayUtf8Bytes,cachedEvents:this.globalReplayEntries.size,cachedWorkspaces:b,maxWorkspaceUtf8Bytes:o,maxProcessUtf8Bytes:p}}currentGlobalSeq(){return this.getFirehose()?.seq??0}globalReplayWindow(){let a=this.getFirehose();return{firstSeq:a?.buffer[0]?.globalSeq??a?.seq??0,nextSeq:a?.seq??0,epoch:a?.epoch}}getConversationReplayPressure(){return{processUtf8Bytes:this.conversationReplayUtf8Bytes,cachedEvents:this.conversationReplayEntries.size,channels:this.channels.size,workspaces:this.firehoses.size,limits:{...q}}}getReplayPressure(){return{workspaceUtf8Bytes:this.replayWorkspaces.get((0,h.getCurrentWorkspace)())?.utf8Bytes??0,processUtf8Bytes:this.replayUtf8Bytes,cachedEntries:this.replayEntries.size,cachedWorkspaces:this.replayWorkspaces.size,globalUtf8Bytes:this.globalReplayUtf8Bytes,conversationUtf8Bytes:this.conversationReplayUtf8Bytes,limits:{...n}}}constructor(){this.channels=new Map,this.cleanupTimers=new Map,this.firehoses=new Map,this.globalReplayEntries=new Map,this.globalReplayUtf8Bytes=0,this.conversationReplayEntries=new Map,this.conversationReplayUtf8Bytes=0,this.replayEntries=new Map,this.replayWorkspaces=new Map,this.replayUtf8Bytes=0}}let s=globalThis,t=s.__flujoExecutionEventBus??(s.__flujoExecutionEventBus=new r)},795796:(a,b,c)=>{"use strict";c.d(b,{NN:()=>g,o4:()=>h,tr:()=>e,w6:()=>f});var d=c(173635);let e=["rate_limit","unavailable","timeout"];function f(a,b){return!!a.fallbackPolicy?.modelIds.some(a=>b.some(b=>b.id===a&&(0,d.sP)(b)))}function g(a,b){if(void 0===a.fallbackPolicy)return;if("string"!=typeof a.id||!a.id.trim())return"Policy model ID is required";let c=a.fallbackPolicy;if(!c||"object"!=typeof c||!Array.isArray(c.modelIds)||c.modelIds.length<2||c.modelIds.length>8)return"A fallback policy requires 2 to 8 models";if(!/^policy\/[a-z0-9][a-z0-9_-]{0,63}$/.test(a.name))return"Policy alias must be policy/ followed by 1–64 lowercase letters, numbers, underscores or hyphens";if(b.some(b=>b.id!==a.id&&b.name.toLowerCase()===a.name.toLowerCase()))return"Policy alias already exists";if(new Set(c.modelIds).size!==c.modelIds.length)return"Policy models must be unique";for(let d of c.modelIds){if("string"!=typeof d||d===a.id)return"A policy cannot reference itself";let c=b.find(a=>a.id===d);if(!c)return`Policy model not found: ${d}`;if(c.fallbackPolicy)return"Nested fallback policies are not supported"}return void 0!==c.triggers&&(!Array.isArray(c.triggers)||!c.triggers.length||c.triggers.some(a=>!e.includes(a))||new Set(c.triggers).size!==c.triggers.length)?"Select valid, unique fallback triggers":void 0!==c.cooldownSeconds&&(!Number.isInteger(c.cooldownSeconds)||c.cooldownSeconds<0||c.cooldownSeconds>3600)?"Cooldown must be between 0 and 3600 seconds":a.ApiKey?.trim()?"Policies use their members’ credentials; leave ApiKey empty":(0,d.sP)(a)?"Owner-bound models cannot be fallback policies":f(a,b)?"Owner-bound models cannot be fallback policy members":void 0}function h(a,b){if(!a.fallbackPolicy)return a;let c=a.fallbackPolicy.modelIds.map(a=>b.find(b=>b.id===a)).filter(a=>!!(a&&!a.fallbackPolicy)),d=c[0];if(!d)return a;let e=c.map(a=>a.contextWindow).filter(a=>"number"==typeof a&&a>0);return{...a,ApiKey:"",provider:d.provider,adapter:d.adapter,contextWindow:e.length?Math.min(...e):void 0,inputModalities:void 0,supportsTools:!!c.some(a=>!1!==a.supportsTools)&&void 0}}},800338:(a,b,c)=>{"use strict";c.d(b,{A4:()=>q,I8:()=>r});var d=c(977598),e=c(973024),f=c(176760),g=c.n(f),h=c(901984),i=c(189663),j=c(779504);let k=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,l=globalThis,m=l.__flujoDetachedInstallationIds??=new Map;async function n(a){let b=await e.promises.lstat(a);if(!b.isDirectory()||b.isSymbolicLink())throw Error("Invalid detached task installation directory.");let c=g().join(a,"identity.json"),d=await e.promises.open(c,e.constants.O_RDONLY|(e.constants.O_NOFOLLOW??0)|(e.constants.O_NONBLOCK??0));try{let[f,g,h]=await Promise.all([d.stat(),e.promises.lstat(c),e.promises.lstat(a)]);if(!f.isFile()||f.nlink>1||f.size>4096||g.isSymbolicLink()||g.dev!==f.dev||g.ino!==f.ino||!h.isDirectory()||h.isSymbolicLink()||h.dev!==b.dev||h.ino!==b.ino)throw Error("Invalid detached task installation identity.");let i=Buffer.alloc(4097),j=0;for(;j<i.length;){let{bytesRead:a}=await d.read(i,j,i.length-j,j);if(0===a)break;j+=a}if(j>4096)throw Error("Invalid detached task installation identity.");let l=JSON.parse(i.toString("utf8",0,j));if(1!==l.version||!k.test(l.id??""))throw Error("Invalid detached task installation identity.");return l.id}finally{await d.close()}}async function o(a){let b=g().join(a,".flujo-detached-identity");try{return await n(b)}catch(a){if("ENOENT"!==a.code)throw a}await e.promises.mkdir(a,{recursive:!0});let c=await e.promises.mkdtemp(g().join(a,".flujo-detached-identity-"));try{await e.promises.writeFile(g().join(c,"identity.json"),JSON.stringify({version:1,id:(0,d.randomUUID)()}),{mode:384});try{await e.promises.rename(c,b)}catch(a){if(!["EEXIST","ENOTEMPTY","EPERM"].includes(a.code??""))throw a}return await n(b)}finally{await e.promises.rm(c,{recursive:!0,force:!0})}}function p(){let a=(0,h.ok)(),b=m.get(a);return b||(b=o(a),m.set(a,b),b.catch(()=>{m.get(a)===b&&m.delete(a)})),b}async function q(){let[{recoveryOwnerId:a},b,d]=await Promise.all([Promise.resolve().then(c.bind(c,880360)),p(),(0,j.getRuntimeProcessIdentity)()]);return{installationId:b,workspace:(0,i.getCurrentWorkspace)(),recoveryOwnerId:a(),...d}}async function r(a){if(!a||a.workspace!==(0,i.getCurrentWorkspace)()||!k.test(a.installationId)||!k.test(a.recoveryOwnerId)||!k.test(a.processInstanceId)||!Number.isSafeInteger(a.pid)||a.pid<=0||void 0!==a.processBirthMarkerV2&&"string"!=typeof a.processBirthMarkerV2)return!1;let{recoveryOwnerId:b}=await Promise.resolve().then(c.bind(c,880360));return a.recoveryOwnerId!==b()&&a.installationId===await p()&&!await (0,j.isRuntimeProcessIdentityAlive)(a)}},801598:(a,b,c)=>{"use strict";c.d(b,{Y:()=>g,c:()=>h});var d=c(455511),e=c(189663),f=c(252937);function g(a){return(0,d.createHash)("sha256").update((0,f.dj)(a)).digest("hex")}function h(a,b={}){let c=b.now??Date.now(),d=(0,e.getCurrentWorkspace)();return a.map(a=>{let e={kind:a.kind,id:a.id,messageId:a.messageId??null,uri:a.uri??null,workspaceId:d};return{...a,workspaceId:d,observedAt:a.observedAt??c,producer:b.producer??a.producer??function(a){switch(a.kind){case"user_statement":return"user";case"tool_result":return"tool";case"compaction":return"summarizing-compaction";case"import":return"import";default:return a.kind}}(a),contentDigest:a.contentDigest??g(void 0===b.digestMaterial?e:{locator:e,evidence:b.digestMaterial})}})}},803917:(a,b,c)=>{"use strict";c.d(b,{J:()=>i,Y:()=>h});var d=c(731421),e=c(779504);let f=globalThis,g=f.__flujoClaudeOwnedRegistrations??=new WeakMap;function h(a,b){if(!a||"object"!=typeof a||!g.has(a)||g.get(a)!==b)throw Error("Owned Claude process registration is unavailable or mismatched.")}function i(a){let b,c,f=new Promise((a,d)=>{b=a,c=d});f.catch(()=>{});let h=!1;return{ready:f,spawnClaudeCodeProcess(f){let i;if(h)throw Error("Owned Claude process hook cannot be reused.");h=!0;try{i=(0,d.spawn)(f.command,f.args,{cwd:f.cwd,env:f.env,signal:f.signal,stdio:["pipe","pipe","pipe"],windowsHide:!0})}catch(a){throw c(a),a}i.stderr.on("data",b=>{try{a.stderr?.(String(b))}catch{}});let j=new Promise(a=>{i.once("exit",(b,c)=>a(Object.freeze({code:b,signal:c})))}),k=new Promise(a=>{i.once("close",()=>a())});return i.on("error",a=>{c(a)}),i.once("spawn",()=>{(async()=>{try{let c=Object.freeze(await (0,e.RO)(i.pid));if(null!==i.exitCode||null!==i.signalCode)throw Error("Child exited before registration.");let d=Object.freeze({identity:c,requestStop:()=>a.requestSdkStop(),exit:j,close:k});g.set(d,a.owner),await a.register(d),b(d)}catch(b){c(b);try{a.requestSdkStop()}catch{}}})()}),i}}}},817040:(a,b,c)=>{"use strict";function d(a){return(!a.adapter||"openai"===a.adapter||"openai-responses"===a.adapter)&&("openai"===a.provider||"litellm"===a.provider&&/(?:^|\/)gpt-\d+/i.test(a.name))}function e(a){if(!d(a))return!1;let b=a.name.toLowerCase().match(/(?:^|\/)gpt-(\d+)(?:\.(\d+))?/);if(!b)return!1;let c=Number(b[1]),e=Number(b[2]??0);return c>5||5===c&&e>=6}c.d(b,{Rd:()=>i,bI:()=>h,ss:()=>e});let f=new Set(["text","image_url","input_audio","file","refusal"]);function g(a){let b=a.content;if("string"==typeof b){if(0===b.length)return;return{...a,content:[{type:"text",text:b,prompt_cache_breakpoint:{mode:"explicit"}}]}}if(!Array.isArray(b))return;let c=-1;for(let a=b.length-1;a>=0;a--){let d=b[a];if(d&&f.has(String(d.type??""))){c=a;break}}if(c<0)return;let d=b.map((a,b)=>b===c?{...a,prompt_cache_breakpoint:{mode:"explicit"}}:a);return{...a,content:d}}function h(a){return a.map(a=>{let b=a.content;if(!Array.isArray(b))return a;let c=!1,d=b.map(a=>{if(!a||"object"!=typeof a||!("prompt_cache_breakpoint"in a))return a;let{prompt_cache_breakpoint:b,...d}=a;return c=!0,d});return c?{...a,content:d}:a})}function i(a,b,c){if(!c.lateNodeInstruction||!d(b))return{messages:a,explicit:!1,breakpointCount:0,movedSystemMessages:0,lateSystem:!1};let f=a.filter(a=>"system"===a.role),h=a.filter(a=>"system"!==a.role);if(0===f.length||0===h.length)return{messages:a,explicit:!1,breakpointCount:0,movedSystemMessages:0,lateSystem:!1};if(!e(b))return{messages:[...h,...f],explicit:!1,breakpointCount:0,movedSystemMessages:f.length,lateSystem:!0};let i=[];for(let a=0;a<h.length;a++)g(h[a])&&i.push(a);let j=new Set(i.slice(-4)),k=0,l=h.map((a,b)=>{if(!j.has(b))return a;let c=g(a);return c?(k++,c):a});return 0===k?{messages:[...h,...f],explicit:!1,breakpointCount:0,movedSystemMessages:f.length,lateSystem:!0}:{messages:[...l,...f],explicit:!0,breakpointCount:k,movedSystemMessages:f.length,lateSystem:!0}}},848852:(a,b,c)=>{"use strict";c.d(b,{Jm:()=>h,UR:()=>j,hc:()=>f,kA:()=>k,lr:()=>g,zJ:()=>i});var d=c(700404);let e=new Set(["image","audio","video"]);function f(a){if(a.type&&e.has(a.type))return a.type;if("resource"===a.type&&a.resource&&"string"==typeof a.resource.blob){let b="string"==typeof a.resource.mimeType?a.resource.mimeType:void 0,c=(0,d.X)(b);return"file"===c?void 0:c}}function g(a){let b=f(a),c=i(a);if(!b||!c)return;let d=h(a);return{type:b,data:c,...d?{mimeType:d}:{}}}function h(a){if("string"==typeof a.mimeType)return a.mimeType;let b=a.resource?.mimeType;return"string"==typeof b?b:void 0}function i(a){if("string"==typeof a.data)return a.data;let b=a.resource?.blob;return"string"==typeof b?b:void 0}function j(a){if(!a||!Array.isArray(a.content))return{mediaItems:[],textResult:a,hasMedia:!1};let b=[],c=[];for(let d of a.content){let a=f(d);a?(b.push(d),c.push(function(a,b){let c=h(a)??b,d=i(a)?.length,e=d?` ~${Math.round(3*d/4/1024)} KB`:"";return{type:"text",text:`[${c}${e} media item returned by this tool; delivered to the model as a native ${b} input rather than inline base64]`}}(d,a))):c.push(d)}return 0===b.length?{mediaItems:[],textResult:a,hasMedia:!1}:{mediaItems:b,textResult:{...a,content:c},hasMedia:!0}}function k(a,b,c){return{type:b,...a.mimeType?{mimeType:a.mimeType}:{},...a.name?{name:a.name}:{},resourceUri:a.uri,...c?{localPath:c}:{}}}},862399:(a,b,c)=>{"use strict";function d(a,b){let c=new Set,d=a=>{b?.(a);let c=2;for(let b=0;b<a.length;){let d=Math.min(b+16384,a.length),e=a.charCodeAt(d-1),f=a.charCodeAt(d);d<a.length&&e>=55296&&e<=56319&&f>=56320&&f<=57343&&(d-=1),c+=JSON.stringify(a.slice(b,d)).length-2,b=d}return c},e=a=>{if("string"==typeof a)return d(a);if(null===a)return 4;if("number"==typeof a||"boolean"==typeof a)return JSON.stringify(a).length;if(void 0===a||"symbol"==typeof a)return;if("function"==typeof a){if("toJSON"in a)throw TypeError("Use native JSON serialization");return}if("object"!=typeof a)throw TypeError("Use native JSON serialization");let b=Object.getPrototypeOf(a);if(!Array.isArray(a)&&b!==Object.prototype&&null!==b||"toJSON"in a)throw TypeError("Use native JSON serialization");if(c.has(a))throw TypeError("Circular JSON");c.add(a);try{if(Array.isArray(a)){let b=2;for(let c=0;c<a.length;c+=1){c&&(b+=1);let d=Object.getOwnPropertyDescriptor(a,c);if(d?.get||d?.set||!d&&c in a)throw TypeError("Use native JSON serialization");b+=e(a[c])??4}return b}let b=2,c=0;for(let f of Object.keys(a)){let g=Object.getOwnPropertyDescriptor(a,f);if(g?.get||g?.set)throw TypeError("Use native JSON serialization");let h=a[f];if(void 0===h||"symbol"==typeof h||"function"==typeof h&&!("toJSON"in h))continue;let i=d(f),j=e(h);c++&&(b+=1),b+=i+1+(j??4)}return b}finally{c.delete(a)}},f=e(a);if(void 0===f)throw TypeError("No JSON value");return f}c.d(b,{j:()=>d})},869784:(a,b,c)=>{"use strict";c.d(b,{t:()=>e});var d=c(241043);function e(a){let b=(0,d.resolveModelAdapter)(a.provider,a.adapter),c=(a.outputModalities??[]).filter(a=>"string"==typeof a).map(a=>a.trim().toLowerCase());return!a.fallbackPolicy&&["openai","openai-responses","azure","anthropic","gemini"].includes(b)&&(!c.length||c.every(a=>"text"===a))}},880360:(a,b,c)=>{"use strict";c.r(b),c.d(b,{classifyRecoveryFailure:()=>n,commitRecoveryCheckpoint:()=>r,commitRecoveryTransition:()=>v,commitToolCheckpoint:()=>t,describeToolEffects:()=>s,fingerprintRecoveryInput:()=>p,initializeRecovery:()=>o,markDanglingToolEffectsUnknown:()=>x,reconcileInterruptedRecovery:()=>w,recoveryOwnerId:()=>k,setRecoveryTransition:()=>u});var d=c(455511),e=c(475560),f=c(552195),g=c(774207);let h=globalThis,i=h.__flujoRecoveryOwnerId??=(0,d.randomUUID)(),j="A tool may have produced an external side effect before execution stopped. Automatic replay is disabled; restart the turn or confirm the effect before retrying.";function k(){return i}function l(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function m(a){return"string"==typeof a&&a.length>0?a:void 0}function n(a){let b=a&&"object"==typeof a?a:{},c=b.details&&"object"==typeof b.details?b.details:b.errorDetails&&"object"==typeof b.errorDetails?b.errorDetails:b,d=l(c.status)??l(c.statusCode),e=m(c.code)??m(c.type)??m(b.code),f=a instanceof Error?a.message:"string"==typeof a?a:"string"==typeof a?.message?a.message:"string"==typeof a?.error?a.error:"Execution failed.",h=`${e??""} ${f}`.toLowerCase(),i="unknown",j=!1;429===d||/rate.?limit|too many requests/.test(h)?(i="rate_limit",j=!0):/context.{0,12}(limit|length|window)|maximum context/.test(h)?i="context_limit":/input.{0,12}(limit|length|too large)|request.{0,12}too large/.test(h)?i="input_limit":/session.{0,12}(lost|expired|invalid)|thread.{0,12}(lost|expired|not found)/.test(h)?i="session_loss":/empty response|no response content|response was empty/.test(h)?(i="model_empty_response",j=!0):/truncated response|unexpected end|premature end/.test(h)?(i="model_truncated_response",j=!0):/tool/.test(h)?i="tool_failure":408===d||502===d||503===d||504===d||/timeout|timed out|econnreset|econnrefused|socket|network|fetch failed|connection closed/.test(h)?(i="transport_failure",j=!0):(void 0!==d||/provider|model|api/.test(h))&&(i="provider_failure",j=void 0===d||d>=500);let k=l(c.retryAfterMs)??(0,g.oR)(c.retryAfter);return{classification:j?"retryable_failure":"permanent_failure",failure:{category:i,message:f,code:e,status:d,retryable:j},retryAfterAt:void 0!==k?Date.now()+Math.max(0,k):void 0}}function o(a,b){let c=Date.now(),e=a.recovery;if(e?.runId===b)return e.classification="running",e.ownerId=i,e.ownerHeartbeatAt=c,e.updatedAt=c,e.terminalAt=void 0,e.failure=void 0,e.retryAfterAt=void 0,e.manualActionRequired=!1,e.sideEffectWarning=void 0,a.recovery=e,e;let f={version:1,runId:b,attemptId:(0,d.randomUUID)(),attempt:1,classification:"running",parentRunId:a.parentRunId,ownerId:i,ownerHeartbeatAt:c,startedAt:c,updatedAt:c};return a.recovery=f,f}function p(a,b){let c=(a.messages??[]).slice(-8).map(a=>({id:a.id,role:a.role,content:a.content,toolCalls:a.tool_calls,toolCallId:a.tool_call_id}));return(0,d.createHash)("sha256").update(JSON.stringify({flowId:a.flowId,nodeId:b,messages:c})).digest("hex")}async function q(a,b,c,d){d?(d(c),b.conversationId&&!b.ephemeral&&await (0,e.flushConversationLog)(b.conversationId)):await (0,e.appendRawForState)(b,[c]),await (0,f.persistConversationState)(a,b)}async function r(a,b,c,e){if(b.ephemeral)return;let f=b.recovery??o(b,b.logicalRunId??(0,d.randomUUID)()),g=Date.now(),h={id:(0,d.randomUUID)(),phase:c.phase,nodeId:c.nodeId,turnEntryNodeId:c.turnEntryNodeId??f.lastSafeCheckpoint?.turnEntryNodeId??c.nodeId,attempt:f.attempt,inputFingerprint:p(b,c.nodeId),safe:c.safe,effectStatus:c.effectStatus??"none",parentRunId:b.parentRunId,lane:f.lane,tools:c.tools,createdAt:g};return f.currentCheckpoint=h,h.safe&&(f.lastSafeCheckpoint=h),f.ownerId=i,f.ownerHeartbeatAt=g,f.updatedAt=g,h.safe||"unknown"!==h.effectStatus||(f.manualActionRequired=!0,f.sideEffectWarning=j),b.recovery=f,await q(a,b,{type:"recovery:checkpoint",checkpoint:h},e),h}function s(a,b){return b.map(b=>{let c=a.toolNameMap?.[b.function.name],d=c?.annotations,e=d?.readOnlyHint===!0;return{toolCallId:b.id,name:b.function.name,readOnly:e,idempotent:e||d?.idempotentHint===!0,destructive:d?.destructiveHint}})}async function t(a,b,c,d,e){let f=s(b,c);if(!f.some(a=>!a.readOnly))return;let g="completed"===d&&b.isCancelled?"unknown":d;await r(a,b,{phase:"before"===g?"tool:before":"completed"===g?"tool:after":"tool:unknown",nodeId:b.currentNodeId,safe:"completed"===g,effectStatus:"before"===g?"pending":"completed"===g?"completed":"unknown",tools:f},e)}function u(a,b,c={}){let e=a.recovery??o(a,a.logicalRunId??(0,d.randomUUID)()),f=Date.now();return e.classification=b,e.failure=c.failure,e.retryAfterAt=c.retryAfterAt,e.cancellationRequestedAt=c.cancellationRequestedAt??e.cancellationRequestedAt,e.manualActionRequired=c.manualActionRequired??e.manualActionRequired,e.sideEffectWarning=c.sideEffectWarning??e.sideEffectWarning,e.updatedAt=f,e.ownerHeartbeatAt=f,"running"!==b&&"paused"!==b&&(e.terminalAt=f),a.recovery=e,e}async function v(a,b,c,d={},e){let f=u(b,c,d);return await q(a,b,{type:"recovery:transition",recovery:{...f}},e),f}async function w(a,b){let c=b.recovery;return"running"===b.status&&!!c?.ownerId&&c.ownerId!==i&&(b.status="error",b.isCancelled=!1,b.lastResponse={success:!1,error:"Execution was interrupted before it reached a terminal boundary."},await v(a,b,"interrupted",{failure:{category:"unclean_process_interruption",message:"The process that owned this run is no longer active.",retryable:!1},manualActionRequired:!0}),!0)}function x(a,b="interrupted"){let c=a.recovery??o(a,a.logicalRunId??(0,d.randomUUID)()),e=Date.now(),f={id:(0,d.randomUUID)(),phase:"tool:unknown",nodeId:a.currentNodeId,turnEntryNodeId:c.lastSafeCheckpoint?.turnEntryNodeId,attempt:c.attempt,inputFingerprint:p(a,a.currentNodeId),safe:!1,effectStatus:"unknown",parentRunId:a.parentRunId,lane:c.lane,createdAt:e};c.currentCheckpoint=f,c.classification=b,c.failure={category:"tool_failure",message:"A dangling tool call was repaired after interruption; its external effect is unknown.",retryable:!1},c.manualActionRequired=!0,c.sideEffectWarning=j,c.updatedAt=e,c.terminalAt="interrupted"===b?e:void 0,a.recovery=c}},890810:(a,b,c)=>{"use strict";c.d(b,{Ci:()=>i,G1:()=>o,Jj:()=>m,NS:()=>n});var d=c(334701);let e=/^(authorization|api[-_]?key|x-api-key|cookie|set-cookie|proxy-authorization|www-authenticate)$/i,f=/sk-[A-Za-z0-9_-]{8,}/g,g=/bearer\s+[A-Za-z0-9._.~+/=-]{8,}/gi;function h(a){return a.replace(g,"Bearer [REDACTED]").replace(f,"[REDACTED]")}function i(a){let b;if(null==a)return;let c=function a(b,c){if(c>6)return"[REDACTED: max depth exceeded]";if("string"==typeof b)return h(b);if(Array.isArray(b))return b.map(b=>a(b,c+1));if(b&&"object"==typeof b){let d={};for(let[f,g]of Object.entries(b))d[f]=e.test(f)?"[REDACTED]":a(g,c+1);return d}return b}(a,0);try{b=JSON.stringify(c)??""}catch{return{note:"[REDACTED: unserializable provider error body]"}}if(b)return b.length>8192?{note:"[REDACTED: provider error body truncated]",truncated:b.slice(0,8192)}:c&&"object"==typeof c&&!Array.isArray(c)?c:{value:c}}function j(a){return"string"==typeof a&&a.length>0?a:void 0}function k(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function l(a,b){let c,e=a&&"object"==typeof a&&a.details&&"object"==typeof a.details?a.details:void 0;c=a instanceof Error?a.message||"An unknown error occurred.":"string"==typeof a&&a.length>0?a:a&&"object"==typeof a&&j(a.message)?a.message:null==a?"An unknown error occurred.":String(a);let f=j(e?.code)??(a&&"object"==typeof a?j(a.code):void 0),g=k(e?.status)??(a&&"object"==typeof a?k(a.status):void 0),l=j(e?.type)??(a instanceof Error?j(a.name):void 0),m=j(e?.retryAfter),n=e?.providerError!==void 0?i(e.providerError):void 0;return{message:h(c),...f?{code:f}:{},...void 0!==g?{httpStatus:g}:{},...l?{providerType:l}:{},errorClass:(0,d.Ys)(a instanceof Error?Object.assign(Error(a.message),{name:a.name,code:f,type:l}):{code:f,type:l}),...b?.nodeId?{nodeId:b.nodeId}:{},...b?.nodeName?{nodeName:b.nodeName}:{},...m?{retryAfter:m}:{},occurredAt:Date.now(),...n?{details:n}:{}}}function m(a){if(null!=a){if("string"==typeof a)return a.length>0?l(Error(a)):void 0;if("object"==typeof a&&!1===a.success){let b=j(a.error)??"An unknown error occurred.",c=a.errorDetails&&"object"==typeof a.errorDetails?a.errorDetails:void 0;return l(Object.assign(Error(b),c?{details:c}:{}))}}}function n(a,b,c,d){return a.errorEventEmitted?a.lastError:o(a,b,l(c,d),d)}function o(a,b,c,d){return a.errorEventEmitted?a.lastError??c:(a.errorEventEmitted=!0,a.lastError=c,b?.({type:"error",node:d?.nodeId?{nodeId:d.nodeId}:void 0,message:c.message,error:c}),c)}},896305:(a,b,c)=>{"use strict";c.d(b,{$:()=>i});var d=c(973024),e=c(176760),f=c.n(e);let g=(a,b)=>a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs,h=a=>"win32"===process.platform?f().resolve(a).toLowerCase():f().resolve(a);async function i(a,b,c={}){let e,j=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),k=!1;try{let i=await j.stat({bigint:!0});if(!i.isFile()||i.nlink!==BigInt(1)||i.size<BigInt(1)||i.size>BigInt(b)||c.privateOwner&&"win32"!==process.platform&&((i.mode&BigInt(63))!==BigInt(0)||i.uid!==BigInt(process.getuid())))throw Error("Native source file is unsafe.");let l=[],m=f().dirname(f().resolve(a));for(;;){let a=await d.promises.lstat(m,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||h(await d.promises.realpath(m))!==h(m))throw Error("Native source directory changed.");l.push([m,a]);let b=f().dirname(m);if(b===m)break;m=b}let n=async()=>{let b=await d.promises.lstat(a,{bigint:!0});if(b.isSymbolicLink()||!g(i,b)||!g(i,await j.stat({bigint:!0})))throw Error("Native source file changed.");for(let[a,b]of l){let c=await d.promises.lstat(a,{bigint:!0});if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==b.dev||c.ino!==b.ino||c.mode!==b.mode||c.uid!==b.uid||c.gid!==b.gid||h(await d.promises.realpath(a))!==h(a))throw Error("Native source directory changed.")}};await n(),e=Buffer.alloc(Number(i.size)+1);let o=0;for(;o<e.length;){let a=await j.read(e,o,e.length-o,o);if(!a.bytesRead)break;o+=a.bytesRead}if(BigInt(o)!==i.size)throw Error("Native source file changed.");return await n(),k=!0,e.subarray(0,o)}finally{k||e?.fill(0),await j.close()}}},899631:(a,b,c)=>{"use strict";c.d(b,{T6:()=>f,at:()=>g,uh:()=>h,x0:()=>i});var d=c(978829),e=c(653637);function f(a){return"string"==typeof a&&a.startsWith("${global:")}function g(a,b){return a&&"object"==typeof a&&"value"in a?{value:a.value??"",isSecret:!!a.metadata?.isSecret}:{value:a??"",isSecret:(0,e.Hm)(b)}}function h(a){return a===d.RJ||a===d.gF}function i(a,b){if(!a)return a;let c={};for(let[d,e]of Object.entries(a)){if(!d)continue;let{value:a,isSecret:f}=g(e,d);if(f&&h(a)){let a=b?.[d];void 0!==a&&(c[d]=a);continue}c[d]=e}return c}},907094:(a,b,c)=>{"use strict";c.d(b,{Yx:()=>q,sz:()=>s});var d=c(333873),e=c.n(d),f=c(629021),g=c(81300),h=c(482040),i=c(245698),j=c(350661),k=c(530886),l=c(122134);async function m(a){let b,c;try{let d=await f.promises.stat(a);b=d.birthtimeMs,c=d.mtimeMs}catch{}return{id:a,name:e().basename(a)||a,created:b,updated:c}}async function n(a,b,c){if("time"===a.kind){let a=new Date;return{id:a.toTimeString().slice(0,8),name:a.toTimeString().slice(0,8),created:a.getTime(),updated:a.getTime()}}if("date"===a.kind){let a=new Date,b=`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}`;return{id:b,name:b,created:a.getTime(),updated:a.getTime()}}if("folder"===a.kind||"file"===a.kind){if(a.target)return m(a.target);if("folder"===a.kind&&b.flowId){let a=await g.flowService.getFlow(b.flowId);if(a?.folder)return{id:a.folder,name:a.folder,created:a.createdAt,updated:a.updatedAt}}return{}}if("conversation"===a.kind){let c=a.target||b.conversationId;if(!c)return{};let d=await (0,j.loadConversationState)(c);return{id:c,name:d?.title,created:d?.createdAt,updated:d?.updatedAt}}if("flows"===a.kind){let c=a.target||b.flowId;if(!c)return{};let d=await g.flowService.getFlow(c);return{id:c,name:d?.name,created:d?.createdAt,updated:d?.updatedAt}}if("node"===a.kind){let c=a.target||b.nodeId;if(!c)return{};let d=b.flowId?await g.flowService.getFlow(b.flowId):null,e=d?.nodes.find(a=>a.id===c);return{id:c,name:e?.data?.label||e?.data?.properties?.name,created:e?.data?.properties?.createdAt,updated:e?.data?.properties?.updatedAt}}if("model"===a.kind){let d=a.target||b.modelId;if(!d)return{};let e=c?.id===d?c:await h.modelService.getModel(d);return{id:d,name:e?.displayName||e?.name,created:e?.createdAt,updated:e?.updatedAt}}let d=a.target||b.appId;if(!d)return{};if(a.target&&a.target.toLocaleLowerCase().startsWith("ui://"))return{id:a.target,name:function(a){let b=a.replace(/^ui:\/\//i,"").split("/").filter(Boolean).at(-1);if(!b)return a;try{return decodeURIComponent(b).replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}catch{return b.replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}}(a.target)};let e=await i.mcpService.loadServerConfigs(),f=Array.isArray(e)?e.find(a=>a.name===d):void 0;return{id:d,name:f?.name||d,created:f?.createdAt,updated:f?.updatedAt}}async function o(a,b,c){let d=(0,k.sE)(a).filter(a=>"mention"===a.kind);if(0===d.length)return a;let e=await Promise.all(d.map(async a=>{let d=(0,k.AY)(a.fullMatch);return d?{match:a,value:(await n(d,b,c))[d.field]??(d.fullMatch.startsWith("@current.")?d.fullMatch:"")}:{match:a,value:a.fullMatch}}));if(1===e.length&&0===e[0].match.index&&e[0].match.fullMatch.length===a.length)return e[0].value;let f="",g=0;for(let b of e)f+=a.slice(g,b.match.index)+String(b.value??""),g=b.match.index+b.match.fullMatch.length;return f+a.slice(g)}async function p(a,b,c){if("string"==typeof a)return o(a,b,c);if(Array.isArray(a))return Promise.all(a.map(a=>p(a,b,c)));if(a&&"object"==typeof a){let d=new Map;for(let[e,f]of Object.entries(a))d.set(e,await p(f,b,c));return Object.fromEntries(d)}return a}async function q(a,b,c){return(0,l.V)(await p(a,b,c))}async function r(a,b){if(!a||0===Object.keys(a).length)return{};let c=await p(a,b??{});return await (0,l.resolveGlobalVars)(c)}async function s(a,b,c){return{...a,...await r(b,c)}}},920823:(a,b,c)=>{"use strict";c.d(b,{At:()=>s,KZ:()=>t,NW:()=>u,e$:()=>d.nativeDigest,iy:()=>y,p0:()=>v,x9:()=>z});var d=c(48718),e=c(28430),f=c(931237),g=c(907094),h=c(174396),i=c(7557),j=c(848852),k=c(18315),l=c(309994),m=c(316763),n=c(343276),o=c(242745);let p=new WeakSet,q=new WeakMap,r=new WeakSet;function s(a,b){if(!a||"function"!=typeof b)throw Error("Native broker authority is incomplete.");let c=Object.freeze({leaseEpoch:a,assertCurrent:b});return r.add(c),c}function t(a){if(!a||"object"!=typeof a||!r.has(a))throw Error("Native broker authority must be an in-process capability.")}function u(a){if(!a||"object"!=typeof a||!p.has(a))throw Error("Native tool port must be an origin-owned in-process capability.")}async function v(a,b){u(a);let c=q.get(a);if(!c)throw Error("Native tool inventory lacks its trusted Source context.");await c(b)}let w=a=>"handoff"===a||a.startsWith("handoff_to_");function x(a){if(a&&"object"==typeof a&&!Object.isFrozen(a)){for(let b of Object.values(a))x(b);Object.freeze(a)}return a}function y(a,b,c,e){if(void 0!==e&&!(0,n.yq)(e))throw Error("Unknown native termination protocol.");let f=new Set,g=a.filter(a=>"function"===a.type).map(a=>{let d=a.function.name;if(!d||f.has(d))throw Error("Native tool inventory has duplicate or empty names.");f.add(d);let g=b?.[d];if(g&&(void 0===g.clientGeneration||!g.schemaHash))throw Error(`Native MCP tool ${d} lacks frozen client and schema identity.`);let h=!!c?.[d],i=w(d);if(i&&!(0,n.yq)(e))throw Error("Native handoff requires a confirmed SDK termination protocol and is not admitted.");if(Number(!!g)+Number(h)+Number(i)!==1)throw Error(`Native tool ${d} has no unique Worker-owned executor.`);return{name:d,description:a.function.description??"",inputSchema:a.function.parameters,annotations:g?.annotations,binding:g,kind:g?"mcp":i?"handoff":"synthetic"}});return(0,d.nativeDigest)(e?{terminationProtocol:e,tools:g}:g)}function z(a){t(a.authority);let b=a.executionExtensionContext;if(b&&(0,o.M6)(a.originalProcessHost,b),void 0!==a.terminationProtocol){if(!(0,n.yq)(a.terminationProtocol))throw Error("Unknown native termination protocol.");if((0,o.Cb)(a.originalProcessHost),a.originalProcessHost.terminationProtocol!==a.terminationProtocol)throw Error("Native termination protocol differs from its Original host.")}let r=structuredClone(a.tools.filter(a=>"function"===a.type).map(b=>({name:b.function.name,description:b.function.description??"",inputSchema:b.function.parameters,annotations:a.toolNameMap?.[b.function.name]?.annotations}))),s=structuredClone(a.toolNameMap??{}),u=Object.freeze({...a.localToolExecutors}),v=new Set,z=new Map;for(let a of r){if(!a.name||v.has(a.name))throw Error("Native tool inventory has duplicate or empty names.");if(v.add(a.name),1!==[!!s[a.name],!!u[a.name],w(a.name)].filter(Boolean).length)throw Error(`Native tool ${a.name} has no unique Worker-owned executor.`);if(s[a.name]&&(void 0===s[a.name].clientGeneration||!s[a.name].schemaHash))throw Error(`Native MCP tool ${a.name} lacks frozen client and schema identity.`);z.set(a.name,s[a.name]?"mcp":w(a.name)?"handoff":"synthetic")}let A=y(a.tools,s,u,a.terminationProtocol);if(A!==a.receipt.owner.inventoryDigest||a.authority.leaseEpoch!==a.receipt.owner.leaseEpoch)throw Error("Native tool inventory or lease differs from the durable invocation.");x(r),x(s);let B=new AbortController,C=new Map,D=!1,E=Object.freeze({invocationId:a.receipt.invocationId,inventoryDigest:A,advertised:r,cancel:()=>B.abort(),confirmHandoffTermination:async b=>{if(D||!C.size||(0,d.nativeDigest)([...C.keys()])!==(0,d.nativeDigest)(b))throw Error("Native handoff receipts are incomplete or changed.");for(let{entry:c,terminal:d}of((0,o.Cb)(a.originalProcessHost),a.signal.throwIfAborted(),await a.authority.assertCurrent(),await a.originalProcessHost.confirmHandoffTermination(a.receipt.invocationId,b),C.values()))await (0,f.nq)(c,d,{assertCurrent:a.authority.assertCurrent,signal:a.signal});a.signal.throwIfAborted(),await a.authority.assertCurrent(),D=!0},dispatch:async({toolInvocationId:c,name:d,args:p,signal:q})=>{let r;if(!v.has(d)||!p||"object"!=typeof p||Array.isArray(p))throw Error("Native tool was not in the advertised inventory.");let t=JSON.stringify(p);if(!t)throw Error("Native tool arguments must be a JSON object.");if(Buffer.byteLength(t,"utf8")>262144)throw Error("Native tool arguments exceed the broker bound.");let w=x(JSON.parse(t));if(!w||"object"!=typeof w||Array.isArray(w))throw Error("Native tool arguments must be a JSON object.");let y=(0,f.a)(d,w,A),{entry:D,fresh:E}=await (0,f.fA)(a.receipt,c,y),F=(0,m.N)(a.signal,B.signal,q);if(!E){if("terminal"===D.state&&D.result)return F.throwIfAborted(),await a.authority.assertCurrent(),F.throwIfAborted(),D.result;throw Error("Native tool effect is unresolved; the original call cannot be replayed.")}let G=async()=>{F.throwIfAborted(),await a.authority.assertCurrent(),await a.beforeToolDispatch?.(),F.throwIfAborted(),await a.authority.assertCurrent(),F.throwIfAborted()},H=z.get(d);await G();let I=await a.requestToolApproval?.({id:c,name:d,args:w});if(!1===I)r={content:[{type:"text",text:"tool denied"}],isError:!0};else if("handoff"===H){if((0,o.Cb)(a.originalProcessHost),!(0,n.yq)(a.terminationProtocol)||C.size>=32)throw Error("Native handoff termination capability is unavailable.");await G(),await (0,f.C2)(D),await a.originalProcessHost.prepareHandoff(a.receipt.invocationId,c),r={content:[{type:"text",text:"Handoff requested. Routing awaits confirmed SDK process termination."}]}}else if("synthetic"===H){await G(),await (0,f.C2)(D),await G();let b=await u[d](w);await a.authority.assertCurrent(),await a.afterToolDispatch?.(),r={content:[{type:"text",text:JSON.stringify(b)}]}}else{let c=s[d],j=await (0,g.sz)(w,c.presetArgs,c.context);await G(),await a.authorizePersonaCoreMcp?.(c.server,c.nodeId);let k=(0,e.j1)(d,c,a.service),l=!!a.service.getClient(c.server)&&a.service.getClientGeneration(c.server)===c.clientGeneration&&a.service.getToolSchemaHash(c.server,c.tool)===c.schemaHash;if(k.ok&&l){await (0,f.C2)(D),await G();let d=!!a.service.getClient(c.server)&&a.service.getClientGeneration(c.server)===c.clientGeneration&&a.service.getToolSchemaHash(c.server,c.tool)===c.schemaHash;if(F.throwIfAborted(),!d)throw Error("Native MCP identity changed at the effect boundary.");let e=await a.service.callTool(c.server,c.tool,j,c.timeout??i.aI,void 0,c.nodeId,F,"model",(0,h.S)({runId:a.receipt.owner.runId,conversationId:a.receipt.owner.conversationId}),{conversationId:a.receipt.owner.conversationId},b);if(await a.authority.assertCurrent(),await a.afterToolDispatch?.(),F.throwIfAborted(),!e.success)throw Error(`Native MCP effect is unresolved: ${e.error??"Unknown error"}`);r=e.data}else r={content:[{type:"text",text:k.ok?"Native tool identity changed after advertisement.":k.reason}],isError:!0}}let{mediaItems:J,textResult:K}=(0,j.UR)(r),L=JSON.stringify(K);if("mcp"===H){let b=await (0,k.jR)(),e=await (0,l.S)({conversationId:a.receipt.owner.conversationId,toolCallId:c,server:s[d].server,toolName:s[d].tool,nodeId:s[d].nodeId,content:L,settings:b});e.spilled&&(L=e.content,r={...r,content:[...J,{type:"text",text:L}]})}if(Buffer.byteLength(L,"utf8")>65536||Buffer.byteLength(JSON.stringify(r),"utf8")>1048576)throw Error("Native tool result exceeds the broker transport bound.");await a.authority.assertCurrent();let M={result:r,transcriptText:L,kind:H};return"handoff"===H&&!1!==I?C.set(c,{entry:D,terminal:M}):await (0,f.nq)(D,M),F.throwIfAborted(),await a.authority.assertCurrent(),F.throwIfAborted(),M}});return p.add(E),b&&q.set(E,async d=>{if(d!==b)throw Error("Native tool inventory Source context changed.");(0,o.M6)(a.originalProcessHost,d),a.signal.throwIfAborted(),B.signal.throwIfAborted(),await a.authority.assertCurrent();let{assertExecutionModelTool:e}=await Promise.resolve().then(c.bind(c,558736));for(let b of r)await e(d,b.name,s[b.name]),a.signal.throwIfAborted(),B.signal.throwIfAborted();await a.authority.assertCurrent(),a.signal.throwIfAborted(),B.signal.throwIfAborted()}),E}},931237:(a,b,c)=>{"use strict";let d;c.d(b,{C2:()=>I,FH:()=>m,HD:()=>B,Lb:()=>F,Lk:()=>E,MC:()=>A,a:()=>J,dw:()=>z,ew:()=>D,fA:()=>G,nq:()=>H});var e=c(977598),f=c(973024),g=c(896305),h=c(176760),i=c.n(h),j=c(189663),k=c(492093),l=c(779504);class m extends Error{constructor(a){super("A native invocation in this conversation is unresolved; reconcile its original ID before starting another."),this.invocationId=a,this.name="NativeInvocationHeldError"}}let n=a=>d??i().join((0,j.getWorkspaceDataDir)(a),"db","native-tool-journal"),o=a=>(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),p=(a,b)=>i().join(n(b),"scopes",`${o(a.conversationId)}.json`),q=(a,b)=>i().join(n(b),"holds",`${o(a.conversationId)}.json`),r=(a,b)=>i().join(n(b),"calls",`${a}.json`),s=(a,b)=>i().join(n(),"tools",a,`${o(b)}.json`),t=(a,b,c)=>(0,k.NU)(()=>(0,l.withWorkspaceRuntimeLock)(`native-tool-${o(a).slice(0,40)}`,async a=>(await a.assertOwned(),b(()=>a.assertOwned()))),c);async function u(a){try{return JSON.parse(await f.promises.readFile(a,"utf8"))}catch(a){if("ENOENT"===a.code)return;throw a}}async function v(a){let b;try{b=await (0,g.$)(a,65536)}catch(a){if("ENOENT"===a.code)return;throw a}return JSON.parse(b.toString("utf8"))}async function w(a,b=!1){let c;try{c=await f.promises.lstat(a)}catch(a){if(b&&"ENOENT"===a.code)return!1;throw a}if(!c.isDirectory()||c.isSymbolicLink())throw Error("Native terminal source directory is unsafe.");return!0}async function x(a){let b=i().join(n(),"calls");for(let c of(await f.promises.readdir(b).catch(a=>{if("ENOENT"===a.code)return[];throw a}))){if(!c.endsWith(".json"))continue;let d=await u(i().join(b,c));if(!d)throw Error("Native call record vanished during admission.");if(d.owner?.conversationId===a&&"terminal"!==d.state)return d}}async function y(a,b,c){await f.promises.mkdir(i().dirname(a),{recursive:!0});let d=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`,g=await f.promises.open(d,"wx",384);try{await g.writeFile(JSON.stringify(b),"utf8"),await g.sync()}finally{await g.close()}try{await c?.(),await f.promises.rename(d,a)}catch(a){throw await f.promises.rm(d,{force:!0}).catch(()=>void 0),a}try{let b=await f.promises.open(i().dirname(a),"r");try{await b.sync()}finally{await b.close()}}catch{}}async function z(a){if(Object.entries(a).some(([a,b])=>"attemptOrdinal"!==a&&("string"!=typeof b||!b.trim()))||!Number.isSafeInteger(a.attemptOrdinal)||a.attemptOrdinal<1)throw Error("Native invocation requires complete owner identity.");return t(a.conversationId,async b=>{let c=await u(q(a));if(c)throw new m(c.invocationId);let d=await u(p(a));if(d&&"terminal"!==d.state)throw new m(d.invocationId);let f=await x(a.conversationId);if(f)throw new m(f.invocationId);let g={invocationId:(0,e.randomUUID)(),owner:structuredClone(a),state:"prepared",createdAt:Date.now()};return await y(q(a),g,b),await y(p(a),g,b),await y(r(g.invocationId),g,b),g})}async function A(a,b){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(a))throw Error("Invalid native invocation identity.");let c=await u(r(a));if(!c||JSON.stringify(c.owner)!==JSON.stringify(b))throw Error("Unknown or differently owned native invocation.");if("terminal"===c.state){let d=await u(q(b));if(d?.invocationId===a)return{...c,state:"unknown",outcome:void 0}}return c}async function B(a,b,c,d){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(a))throw Error("Invalid native invocation identity.");return t(b.conversationId,async()=>{for(let a of["","calls","scopes","holds"])await w(i().join(n(c),a));let e=await v(r(a,c)),g=await v(p(b,c)),h=await v(q(b,c));if(!e||!g||e.invocationId!==a||g.invocationId!==a||JSON.stringify(e.owner)!==JSON.stringify(b)||JSON.stringify(g.owner)!==JSON.stringify(b)||h&&(h.invocationId!==a||JSON.stringify(h.owner)!==JSON.stringify(b)))throw Error("Native terminal source identity changed.");let j=i().join(n(c),"tools",a),k=await w(i().join(n(c),"tools"),!0)&&await w(j,!0)?await f.promises.readdir(j):[];if(k.length>512||k.some(a=>!/^[a-f0-9]{64}\.json$/.test(a)))throw Error("Native terminal tool receipts are incomplete.");let l=!0;for(let c of k){let d=await v(i().join(j,c));d&&d.invocationId===a&&d.conversationId===b.conversationId&&"terminal"===d.state||(l=!1)}return await d?.(e),{receipt:structuredClone(e),holdAbsent:!h&&"terminal"===e.state&&"terminal"===g.state&&JSON.stringify(g)===JSON.stringify(e),effectsResolved:l}},c)}async function C(a,b,c,d){return t(a.owner.conversationId,async e=>{let g=await A(a.invocationId,a.owner),h=await u(p(a.owner));if(h?.invocationId!==g.invocationId||"terminal"===g.state||"unknown"===g.state||"begin-may-have-been-sent"===b&&"prepared"!==g.state)throw new m(g.invocationId);if("terminal"===b){if("begin-may-have-been-sent"!==g.state)throw new m(a.invocationId);let b=i().join(n(),"tools",a.invocationId);for(let c of(await f.promises.readdir(b).catch(a=>{if("ENOENT"===a.code)return[];throw a}))){let d=await u(i().join(b,c));if(!d||"terminal"!==d.state)throw new m(a.invocationId)}d?.signal.throwIfAborted(),await d?.assertCurrent(),d?.signal.throwIfAborted()}let j={...g,state:b,...c?{outcome:c}:{}};return await y(r(j.invocationId),j,e),await y(p(j.owner),j,e),"terminal"===b&&(d?.signal.throwIfAborted(),await d?.assertCurrent(),d?.signal.throwIfAborted(),await e(),await f.promises.unlink(q(j.owner))),j})}let D=a=>C(a,"begin-may-have-been-sent");async function E(a,b,c){return C(a,"terminal",b,c)}let F=a=>C(a,"unknown");async function G(a,b,c){if(!b||!b.trim()||!c)throw Error("Native tool requires an SDK callback identity and fingerprint.");return t(a.owner.conversationId,async d=>{let e=await A(a.invocationId,a.owner),f=await u(p(a.owner));if(f?.invocationId!==a.invocationId)throw new m(a.invocationId);let g=s(a.invocationId,b),h=await u(g);if(h){if(h.conversationId!==a.owner.conversationId||h.toolInvocationId!==b||h.fingerprint!==c)throw Error("Conflicting native tool invocation identity.");if("terminal"===e.state||"prepared"===e.state)throw new m(a.invocationId);return{entry:h,fresh:!1}}if("begin-may-have-been-sent"!==e.state)throw new m(a.invocationId);let i={invocationId:a.invocationId,conversationId:a.owner.conversationId,toolInvocationId:b,fingerprint:c,state:"pending"};return await y(g,i,d),{entry:i,fresh:!0}})}async function H(a,b,c){await t(a.conversationId,async d=>{let e=await u(r(a.invocationId));if(e?.owner.conversationId!==a.conversationId)throw Error("Native tool owner changed.");let f=await u(p(e.owner));if(f?.invocationId!==a.invocationId)throw new m(a.invocationId);let g=s(a.invocationId,a.toolInvocationId),h=await u(g);if(!h||h.fingerprint!==a.fingerprint||"terminal"===h.state)throw Error("Native tool invocation is not pending.");await y(g,{...h,state:"terminal",result:b},async()=>{c?.signal.throwIfAborted(),await c?.assertCurrent(),await d(),c?.signal.throwIfAborted()})})}async function I(a){await t(a.conversationId,async b=>{let c=await u(r(a.invocationId));if(c?.owner.conversationId!==a.conversationId)throw Error("Native tool owner changed.");let d=await u(p(c.owner));if(d?.invocationId!==a.invocationId)throw new m(a.invocationId);let e=s(a.invocationId,a.toolInvocationId),f=await u(e);if(!f||f.fingerprint!==a.fingerprint||"pending"!==f.state)throw Error("Native tool invocation cannot enter the effect boundary.");await y(e,{...f,state:"effect-unknown"},b)})}function J(a,b,c){let d=a=>null===a||"object"!=typeof a?JSON.stringify(a)??"null":Array.isArray(a)?`[${a.map(d).join(",")}]`:`{${Object.entries(a).sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>`${JSON.stringify(a)}:${d(b)}`).join(",")}}`;return(0,e.createHash)("sha256").update(d([a,b,c])).digest("hex")}},947990:()=>{},948464:(a,b,c)=>{"use strict";c.d(b,{AW:()=>p,E0:()=>t,l7:()=>u,m7:()=>s});var d=c(977598),e=c(973024),f=c(848161),g=c.n(f),h=c(176760),i=c.n(h),j=c(855166),k=c(189663),l=c(82887),m=c(674359);let n="flujo-auth-source.json";class o extends Error{constructor(a,b){super(b),this.reasonCode=a,this.name="CodexAuthInspectionError"}}function p(){return process.env.CODEX_HOME?.trim()||i().join(g().homedir(),".codex")}async function q(a){let b,c=i().join(a,"config.toml"),d=!1;try{let a=await e.promises.lstat(c);if(d=!0,!a.isFile()&&!a.isSymbolicLink())throw Error();let f=await (0,l.s)(c,1048576,{allowSymbolicLink:!0});b=(0,j.qg)(new TextDecoder("utf-8",{fatal:!0}).decode(f))}catch(a){if(!d&&"ENOENT"===a.code)return;throw new o("credential-store-unreadable","Could not verify the host Codex credential store. Repair or make its config.toml readable before using its login in FLUJO.")}let f=b.cli_auth_credentials_store;if(void 0!==f&&"file"!==f)throw new o("credential-store-incompatible",'FLUJO requires file-backed Codex authentication. Configure cli_auth_credentials_store = "file" and sign in again; keyring and auto storage cannot identify the active login from auth.json.')}async function r(a,b){try{let c=b??await (0,m.wB)(a),d=JSON.parse((await (0,m.c0)(a,i().join(a,n),4096,c)).toString("utf8"));if(d?.version!==1||!["host","workspace"].includes(d.source))throw Error("Invalid FLUJO Codex authentication source.");return d}catch(a){if("ENOENT"===a.code)return;throw new o("auth-source-unreadable","Could not read FLUJO Codex authentication source.")}}async function s(a){let b,c=await (0,m.wB)(a),f=await r(a,c),g=i().join(a,"auth.json");if(f?.source==="workspace")return void await (0,m.c0)(a,g,1048576,c).catch(()=>{throw Error("The worker Codex login is missing. Sign in using its CODEX_HOME.")});let h=p();await q(h);let j=i().join(h,"auth.json");if(i().resolve(j)===i().resolve(g))return;try{b=await (0,l.s)(j,1048576)}catch(b){if("ENOENT"!==b.code)throw Error("Could not read the host Codex login.");await c(),await e.promises.rm(g,{force:!0}),await e.promises.rm(i().join(a,n),{force:!0});return}let k=(0,d.createHash)("sha256").update(b).digest("hex"),o=await (0,m.c0)(a,g,1048576,c).then(()=>!0,a=>{if("ENOENT"===a.code)return!1;throw a});f?.sourceHash===k&&o||(await (0,m.lf)(a,g,b,c),await (0,m.lf)(a,i().join(a,n),JSON.stringify({version:1,source:"host",sourceHash:k}),c))}async function t(a){let b,c,e=i().join((0,k.getWorkspaceDataDir)(a),"db","codex-runtime");try{b=await (0,m.wB)(e)}catch(a){if("ENOENT"!==a.code)throw new o("auth-source-unreadable","Could not read FLUJO Codex authentication source.")}let f=await r(e,b),g=f?.source==="workspace"?e:p();f?.source!=="workspace"&&await q(g);let h=i().join(g,"auth.json");if(f?.source==="host"&&f.sourceHash){let a=await (0,l.s)(h,1048576).catch(()=>void 0);if(a&&(0,d.createHash)("sha256").update(a).digest("hex")===f.sourceHash){let a=i().join(e,"auth.json");try{if(!b)throw Error("Managed Codex home is unavailable.");await (0,m.c0)(e,a,1048576,b),h=a}catch(a){if("ENOENT"!==a.code)throw new o("auth-source-unreadable","Could not read FLUJO Codex authentication source.")}}}try{c=h===i().join(e,"auth.json")?await (0,m.c0)(e,h,1048576,b??await (0,m.wB)(e)):await (0,l.s)(h,1048576)}catch{throw new o("login-missing","A file-backed Codex ChatGPT login is required. Sign in with Codex using file credential storage before cloning.")}if(!function(a){try{let b=JSON.parse(a.toString("utf8"));return(!b.auth_mode||"chatgpt"===b.auth_mode)&&!b.OPENAI_API_KEY&&"string"==typeof b.tokens?.access_token&&b.tokens.access_token.length>0&&"string"==typeof b.tokens?.refresh_token&&b.tokens.refresh_token.length>0}catch{return!1}}(c))throw new o("login-incompatible","The Codex authentication cache is not a transferable ChatGPT login.");return c}async function u(a){try{return await t(a),{authentication:"login-detected"}}catch(a){if(!(a instanceof o))return{authentication:"unknown",reasonCode:"inspection-unavailable"};return{authentication:"login-missing"===a.reasonCode?"needs-connection":["credential-store-incompatible","login-incompatible"].includes(a.reasonCode)?"incompatible":"unknown",reasonCode:a.reasonCode}}}},954682:(a,b,c)=>{"use strict";c.d(b,{E5:()=>g,Jp:()=>d,O:()=>f,V8:()=>h,g4:()=>e});let d="TOOL_CALL",e="FINAL_RESPONSE",f="ERROR",g="STAY_ON_NODE",h="IMPLICIT_SUBFLOW_RETURN"},956233:(a,b,c)=>{"use strict";c.d(b,{J:()=>h,RZ:()=>j,Rt:()=>i,sf:()=>g});var d=c(189663);let e=globalThis,f=e.__flujoToolApprovals??(e.__flujoToolApprovals=new Map);function g(a,b,c){let e=(0,d.workspaceCacheKey)(a),g=f.get(e);g||(g=new Map,f.set(e,g)),g.set(b.id,{toolCall:b,resolve:c})}function h(a,b,c){let e=(0,d.workspaceCacheKey)(a),g=f.get(e),h=g?.get(b);return!!g&&!!h&&(g.delete(b),0===g.size&&f.delete(e),h.resolve(c),!0)}function i(a){let b=f.get((0,d.workspaceCacheKey)(a));return b?Array.from(b.values(),a=>a.toolCall):[]}function j(a){let b=(0,d.workspaceCacheKey)(a),c=f.get(b);if(c){for(let a of c.values())a.resolve(!1);f.delete(b)}}},965458:(a,b,c)=>{"use strict";let d;c.r(b),c.d(b,{FlowExecutor:()=>b3});var e=c(43521),f=c(954682),g=c(181721),h=c.n(g),i=c(383594),j=c(455511),k=c.n(j),l=c(81300),m=c(116197);let n=(0,e.h)("execution/nodes/StartNode.ts");class o extends m.Yp{async prep(a,b){n.info("prep() started");let c=b?.properties?.promptTemplate||"";n.info("Extracted promptTemplate",{promptTemplateLength:c.length,promptTemplatePreview:c.length>100?c.substring(0,100)+"...":c});let d={nodeId:b?.id||"",nodeType:"start",systemPrompt:c};return n.info("prep() completed"),d}async execCore(a,b){n.info("execCore() started"),n.verbose("execCore() prepResult",JSON.stringify(a));let c={success:!0};return n.verbose("execCore() execResult",JSON.stringify(c)),n.info("execCore() completed"),c}async post(a,b,c,d){if(n.info("post() started"),n.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),i.Gv.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"StartNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Start Node",timestamp:new Date().toISOString()}),n.info("Added StartNode tracking information")),a.systemPrompt){let b={role:"system",content:a.systemPrompt,id:crypto.randomUUID(),timestamp:Date.now()};c.messages.some(a=>"system"===a.role)||(c.messages.push(b),n.debug("Added system message",{contentLength:"string"==typeof b.content?b.content.length:"non-string content",contentPreview:"string"==typeof b.content&&b.content.length>50?b.content.substring(0,50)+"...":b.content}))}n.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(n.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return n.info(`post() completed, returning action: ${a}`),a}return n.info("post() completed, returning default action"),"default"}_clone(){return new o}}var p=c(482040),q=c(245698),r=c(805809),s=c(122134),t=c(558736);let u=(0,e.h)("backend/utils/PromptRenderer");class v{async resolveChatMessageReferences(a,b,c){let d=(0,r.A$)(a),e=a;if(d.length>0){let f="",g=0;for(let e of d){if(f+=a.slice(g,e.index),g=e.index+e.fullMatch.length,"tool"===e.kind){f+=e.fullMatch;continue}f+=b.some(a=>{if(a.properties.boundServer!==e.server)return!1;let b=a.properties.enabledResources;return void 0===b||"all"===b||b.includes(e.name)})?await this.renderResourceBinding(e.server,e.name,c,e.fullMatch):e.fullMatch}f+=a.slice(g),e=f}return await (0,s.V)(e)}async renderPrompt(a,b,c){let d=c?.renderMode||"rendered",e=c?.includeConversationHistory||!1;u.info(`Rendering prompt for node ${b} in flow ${a}`,{renderMode:d,includeConversationHistory:e});let{prompt:f,excludeModelPrompt:g,excludeStartNodePrompt:h,excludeSystemPrompt:i}=await this.findNodePrompt(b,a,c?.flowSnapshot),j=c?.excludeModelPrompt!==void 0?c?.excludeModelPrompt:g,k=c?.excludeStartNodePrompt!==void 0?c?.excludeStartNodePrompt:h,l=c?.excludeSystemPrompt!==void 0?c?.excludeSystemPrompt:i;u.debug("Exclusion settings",{excludeModelPrompt:j,excludeStartNodePrompt:k,excludeSystemPrompt:l,fromOptions:{excludeModelPrompt:c?.excludeModelPrompt!==void 0,excludeStartNodePrompt:c?.excludeStartNodePrompt!==void 0,excludeSystemPrompt:c?.excludeSystemPrompt!==void 0}});let m="",n=null;if(!k){let b=await this.findStartNodePrompt(a,c?.flowSnapshot);b&&(u.debug("Adding start node prompt",{length:b.length}),m+=b+"\n\n")}if(!j){let d=await this.findModelPrompt(b,a,c?.flowSnapshot,c?.admittedModel);d.prompt&&(u.debug("Adding model prompt",{modelId:d.modelId,length:d.prompt.length}),m+=d.prompt+"\n\n"),n=d.functionCallingSchema,d.reasoningSchema&&(m+=`Please use the following pattern to mark your reasoning: ${d.reasoningSchema}
112
112
 
113
113
  `),n&&(m+=`Please use the following pattern to use a tool: ${n}
114
114