flujo-ai 3.48.6 → 3.48.7

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 (510) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +60 -60
  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]/models/route.js +1 -1
  56. package/.next/server/app/api/flow/[id]/models/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/[id]/route.js +1 -1
  58. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  59. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  60. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  62. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  63. package/.next/server/app/api/flow/assist/route.js +1 -1
  64. package/.next/server/app/api/flow/assist/route.js.nft.json +1 -1
  65. package/.next/server/app/api/flow/compile/route.js +1 -1
  66. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/generate/route.js +1 -1
  68. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  69. package/.next/server/app/api/flow/generate/visual/route.js +1 -1
  70. package/.next/server/app/api/flow/generate/visual/route.js.nft.json +1 -1
  71. package/.next/server/app/api/flow/generator/route.js +1 -1
  72. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  73. package/.next/server/app/api/flow/improve/route.js +1 -1
  74. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  75. package/.next/server/app/api/flow/model-agent/route.js +1 -1
  76. package/.next/server/app/api/flow/model-agent/route.js.nft.json +1 -1
  77. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  78. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  79. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  80. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  81. package/.next/server/app/api/flow/repair/route.js +1 -1
  82. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  83. package/.next/server/app/api/flow/route.js +1 -1
  84. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  85. package/.next/server/app/api/git/route.js +1 -1
  86. package/.next/server/app/api/git/route.js.nft.json +1 -1
  87. package/.next/server/app/api/harness/[id]/route.js +1 -1
  88. package/.next/server/app/api/harness/[id]/route.js.nft.json +1 -1
  89. package/.next/server/app/api/harness/comparisons/[id]/route.js +1 -1
  90. package/.next/server/app/api/harness/comparisons/[id]/route.js.nft.json +1 -1
  91. package/.next/server/app/api/harness/comparisons/route.js +1 -1
  92. package/.next/server/app/api/harness/comparisons/route.js.nft.json +1 -1
  93. package/.next/server/app/api/harness/profiles/route.js +1 -1
  94. package/.next/server/app/api/harness/profiles/route.js.nft.json +1 -1
  95. package/.next/server/app/api/harness/route.js +1 -1
  96. package/.next/server/app/api/harness/route.js.nft.json +1 -1
  97. package/.next/server/app/api/init/route.js +1 -1
  98. package/.next/server/app/api/init/route.js.nft.json +1 -1
  99. package/.next/server/app/api/local-models/capability/route.js +1 -1
  100. package/.next/server/app/api/local-models/capability/route.js.nft.json +1 -1
  101. package/.next/server/app/api/local-models/pull/route.js +1 -1
  102. package/.next/server/app/api/local-models/pull/route.js.nft.json +1 -1
  103. package/.next/server/app/api/local-models/suggest/route.js +1 -1
  104. package/.next/server/app/api/local-models/suggest/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/app-consent/route.js +1 -1
  106. package/.next/server/app/api/mcp/app-consent/route.js.nft.json +1 -1
  107. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  108. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  109. package/.next/server/app/api/mcp/assistant/route.js +1 -1
  110. package/.next/server/app/api/mcp/assistant/route.js.nft.json +1 -1
  111. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  112. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  113. package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -1
  114. package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/flujo/automation/route.js +1 -1
  116. package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -1
  117. package/.next/server/app/api/mcp/flujo/flows/route.js +1 -1
  118. package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -1
  119. package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -1
  120. package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp/flujo/resources/route.js +1 -1
  122. package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -1
  123. package/.next/server/app/api/mcp/flujo/servers/route.js +1 -1
  124. package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -1
  125. package/.next/server/app/api/mcp/flujo/skills/route.js +1 -1
  126. package/.next/server/app/api/mcp/flujo/skills/route.js.nft.json +1 -1
  127. package/.next/server/app/api/mcp/flujo/state/route.js +1 -1
  128. package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -1
  129. package/.next/server/app/api/mcp/flujo/tools/route.js +1 -1
  130. package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -1
  131. package/.next/server/app/api/mcp/model-risk-assessment/route.js +1 -1
  132. package/.next/server/app/api/mcp/model-risk-assessment/route.js.nft.json +1 -1
  133. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  134. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  135. package/.next/server/app/api/mcp/security-review/route.js +1 -1
  136. package/.next/server/app/api/mcp/security-review/route.js.nft.json +1 -1
  137. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js +1 -1
  138. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js.nft.json +1 -1
  139. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  140. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  141. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  142. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  143. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  144. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  145. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  146. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  147. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  148. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  149. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js +1 -1
  150. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js.nft.json +1 -1
  151. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js +1 -1
  152. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js.nft.json +1 -1
  153. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js +1 -1
  154. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js.nft.json +1 -1
  155. package/.next/server/app/api/mcp/servers/[name]/skills/route.js +1 -1
  156. package/.next/server/app/api/mcp/servers/[name]/skills/route.js.nft.json +1 -1
  157. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  158. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  159. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js +1 -1
  160. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js.nft.json +1 -1
  161. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js +1 -1
  162. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js.nft.json +1 -1
  163. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  164. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  165. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js +1 -1
  166. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js.nft.json +1 -1
  167. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  168. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  169. package/.next/server/app/api/mcp/servers/route.js +1 -1
  170. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  171. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  172. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  173. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  174. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  175. package/.next/server/app/api/mcp-registry/route.js +1 -1
  176. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  177. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  178. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  179. package/.next/server/app/api/model/[id]/route.js +1 -1
  180. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  181. package/.next/server/app/api/model/allowance/route.js +1 -1
  182. package/.next/server/app/api/model/allowance/route.js.nft.json +1 -1
  183. package/.next/server/app/api/model/provider/route.js +1 -1
  184. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  185. package/.next/server/app/api/model/route.js +1 -1
  186. package/.next/server/app/api/model/route.js.nft.json +1 -1
  187. package/.next/server/app/api/model/test/route.js +1 -1
  188. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  189. package/.next/server/app/api/network-exposure/route.js +1 -1
  190. package/.next/server/app/api/network-exposure/route.js.nft.json +1 -1
  191. package/.next/server/app/api/oauth/callback/route.js +1 -1
  192. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  193. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  194. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  195. package/.next/server/app/api/oauth/reset/route.js +1 -1
  196. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  197. package/.next/server/app/api/operations/status/route.js +1 -1
  198. package/.next/server/app/api/operations/status/route.js.nft.json +1 -1
  199. package/.next/server/app/api/original-owner/route.js +1 -1
  200. package/.next/server/app/api/original-owner/route.js.nft.json +1 -1
  201. package/.next/server/app/api/packages/build/route.js +1 -1
  202. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  203. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  204. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  205. package/.next/server/app/api/packages/install/route.js +1 -1
  206. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  207. package/.next/server/app/api/packages/install/status/route.js +1 -1
  208. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  209. package/.next/server/app/api/packages/installed/route.js +1 -1
  210. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  211. package/.next/server/app/api/packages/resolve/route.js +1 -1
  212. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  213. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  214. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  215. package/.next/server/app/api/packages/search/route.js +1 -1
  216. package/.next/server/app/api/packages/search/route.js.nft.json +1 -1
  217. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  218. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  219. package/.next/server/app/api/persona-recovery/route.js +2 -2
  220. package/.next/server/app/api/persona-recovery/route.js.nft.json +1 -1
  221. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  222. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  223. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  224. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  225. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  226. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  227. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js +1 -1
  228. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js.nft.json +1 -1
  229. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  230. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  231. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  232. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  233. package/.next/server/app/api/planned-executions/route.js +1 -1
  234. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  235. package/.next/server/app/api/projects/route.js +1 -1
  236. package/.next/server/app/api/projects/route.js.nft.json +1 -1
  237. package/.next/server/app/api/reference-search/files/route.js +1 -1
  238. package/.next/server/app/api/reference-search/files/route.js.nft.json +1 -1
  239. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  240. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  241. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  242. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  243. package/.next/server/app/api/registry/auth/route.js +1 -1
  244. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  245. package/.next/server/app/api/registry/feedback/route.js +1 -1
  246. package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -1
  247. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  248. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  249. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  250. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  251. package/.next/server/app/api/registry/packages/route.js +1 -1
  252. package/.next/server/app/api/registry/packages/route.js.nft.json +1 -1
  253. package/.next/server/app/api/registry/publish/route.js +1 -1
  254. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  255. package/.next/server/app/api/registry/settings/route.js +1 -1
  256. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  257. package/.next/server/app/api/restore/route.js +1 -1
  258. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  259. package/.next/server/app/api/runs/active/route.js +1 -1
  260. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  261. package/.next/server/app/api/runtime-environment/route.js +1 -1
  262. package/.next/server/app/api/runtime-environment/route.js.nft.json +1 -1
  263. package/.next/server/app/api/setup/ai-cli/route.js +1 -1
  264. package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -1
  265. package/.next/server/app/api/snapshot/abort/route.js +1 -1
  266. package/.next/server/app/api/snapshot/abort/route.js.nft.json +1 -1
  267. package/.next/server/app/api/snapshot/begin/route.js +1 -1
  268. package/.next/server/app/api/snapshot/begin/route.js.nft.json +1 -1
  269. package/.next/server/app/api/snapshot/download/route.js +1 -1
  270. package/.next/server/app/api/snapshot/download/route.js.nft.json +1 -1
  271. package/.next/server/app/api/snapshot/finalize/route.js +1 -1
  272. package/.next/server/app/api/snapshot/finalize/route.js.nft.json +1 -1
  273. package/.next/server/app/api/snapshot/info/route.js +1 -1
  274. package/.next/server/app/api/snapshot/info/route.js.nft.json +1 -1
  275. package/.next/server/app/api/snapshot/status/route.js +1 -1
  276. package/.next/server/app/api/snapshot/status/route.js.nft.json +1 -1
  277. package/.next/server/app/api/snapshots/cleanup/route.js +1 -1
  278. package/.next/server/app/api/snapshots/cleanup/route.js.nft.json +1 -1
  279. package/.next/server/app/api/snapshots/open-folder/route.js +1 -1
  280. package/.next/server/app/api/snapshots/open-folder/route.js.nft.json +1 -1
  281. package/.next/server/app/api/snapshots/route.js +1 -1
  282. package/.next/server/app/api/snapshots/route.js.nft.json +1 -1
  283. package/.next/server/app/api/statistics/route.js +1 -1
  284. package/.next/server/app/api/statistics/route.js.nft.json +1 -1
  285. package/.next/server/app/api/storage/route.js +1 -1
  286. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  287. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  288. package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -1
  289. package/.next/server/app/api/tickets/[id]/route.js +1 -1
  290. package/.next/server/app/api/tickets/[id]/route.js.nft.json +1 -1
  291. package/.next/server/app/api/tickets/route.js +1 -1
  292. package/.next/server/app/api/tickets/route.js.nft.json +1 -1
  293. package/.next/server/app/api/transcription/route.js +1 -1
  294. package/.next/server/app/api/transcription/route.js.nft.json +1 -1
  295. package/.next/server/app/api/update/route.js +1 -1
  296. package/.next/server/app/api/update/route.js.nft.json +1 -1
  297. package/.next/server/app/api/waves/route.js +1 -1
  298. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  299. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  300. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  301. package/.next/server/app/api/workspaces/route.js +1 -1
  302. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  303. package/.next/server/app/chat/page.js +1 -1
  304. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  305. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  306. package/.next/server/app/mcp/page.js +1 -1
  307. package/.next/server/app/mcp/page.js.nft.json +1 -1
  308. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  309. package/.next/server/app/mcp-flows/route.js +1 -1
  310. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  311. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  312. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  313. package/.next/server/app/settings/page.js +1 -1
  314. package/.next/server/app/settings/page.js.nft.json +1 -1
  315. package/.next/server/app/v1/chat/completions/route.js +1 -1
  316. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  317. package/.next/server/app/v1/chat/conversation-chains/route.js +1 -1
  318. package/.next/server/app/v1/chat/conversation-chains/route.js.nft.json +1 -1
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -1
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  321. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +1 -1
  322. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  323. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js +1 -1
  324. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js.nft.json +1 -1
  325. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  326. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  327. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js +1 -1
  328. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js.nft.json +1 -1
  329. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  330. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  331. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -1
  332. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  333. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  334. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  335. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
  336. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  337. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js +1 -1
  338. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js.nft.json +1 -1
  339. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js +1 -1
  340. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js.nft.json +1 -1
  341. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js +1 -1
  342. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js.nft.json +1 -1
  343. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js +1 -1
  344. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js.nft.json +1 -1
  345. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -1
  346. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -1
  347. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  348. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  349. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  350. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  351. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +1 -1
  352. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -1
  353. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  354. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  355. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js +1 -1
  356. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js.nft.json +1 -1
  357. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  358. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  359. package/.next/server/app/v1/chat/events/route.js +1 -1
  360. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  361. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js +1 -1
  362. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js.nft.json +1 -1
  363. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js +1 -1
  364. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js.nft.json +1 -1
  365. package/.next/server/app/v1/meetings/[meetingId]/events/route.js +1 -1
  366. package/.next/server/app/v1/meetings/[meetingId]/events/route.js.nft.json +1 -1
  367. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js +1 -1
  368. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js.nft.json +1 -1
  369. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js +1 -1
  370. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js.nft.json +1 -1
  371. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js +1 -1
  372. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js.nft.json +1 -1
  373. package/.next/server/app/v1/meetings/[meetingId]/route.js +1 -1
  374. package/.next/server/app/v1/meetings/[meetingId]/route.js.nft.json +1 -1
  375. package/.next/server/app/v1/meetings/[meetingId]/start/route.js +1 -1
  376. package/.next/server/app/v1/meetings/[meetingId]/start/route.js.nft.json +1 -1
  377. package/.next/server/app/v1/meetings/route.js +1 -1
  378. package/.next/server/app/v1/meetings/route.js.nft.json +1 -1
  379. package/.next/server/app/v1/models/route.js +1 -1
  380. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  381. package/.next/server/app/v1/persona-drafts/[draftId]/route.js +1 -1
  382. package/.next/server/app/v1/persona-drafts/[draftId]/route.js.nft.json +1 -1
  383. package/.next/server/app/v1/persona-drafts/route.js +1 -1
  384. package/.next/server/app/v1/persona-drafts/route.js.nft.json +1 -1
  385. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js +1 -1
  386. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js.nft.json +1 -1
  387. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js +1 -1
  388. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js.nft.json +1 -1
  389. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js +1 -1
  390. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js.nft.json +1 -1
  391. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js +1 -1
  392. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js.nft.json +1 -1
  393. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js +1 -1
  394. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js.nft.json +1 -1
  395. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js +1 -1
  396. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js.nft.json +1 -1
  397. package/.next/server/app/v1/personas/[personaId]/composition/route.js +1 -1
  398. package/.next/server/app/v1/personas/[personaId]/composition/route.js.nft.json +1 -1
  399. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js +1 -1
  400. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js.nft.json +1 -1
  401. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js +1 -1
  402. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js.nft.json +1 -1
  403. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js +1 -1
  404. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js.nft.json +1 -1
  405. package/.next/server/app/v1/personas/[personaId]/export/route.js +1 -1
  406. package/.next/server/app/v1/personas/[personaId]/export/route.js.nft.json +1 -1
  407. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js +1 -1
  408. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js.nft.json +1 -1
  409. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js +1 -1
  410. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js.nft.json +1 -1
  411. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js +1 -1
  412. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js.nft.json +1 -1
  413. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js +1 -1
  414. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js.nft.json +1 -1
  415. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js +1 -1
  416. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js.nft.json +1 -1
  417. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js +1 -1
  418. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js.nft.json +1 -1
  419. package/.next/server/app/v1/personas/[personaId]/improvements/route.js +1 -1
  420. package/.next/server/app/v1/personas/[personaId]/improvements/route.js.nft.json +1 -1
  421. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js +1 -1
  422. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js.nft.json +1 -1
  423. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js +1 -1
  424. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js.nft.json +1 -1
  425. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js +1 -1
  426. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js.nft.json +1 -1
  427. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js +1 -1
  428. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js.nft.json +1 -1
  429. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js +1 -1
  430. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js.nft.json +1 -1
  431. package/.next/server/app/v1/personas/[personaId]/memories/route.js +1 -1
  432. package/.next/server/app/v1/personas/[personaId]/memories/route.js.nft.json +1 -1
  433. package/.next/server/app/v1/personas/[personaId]/route.js +1 -1
  434. package/.next/server/app/v1/personas/[personaId]/route.js.nft.json +1 -1
  435. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js +1 -1
  436. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js.nft.json +1 -1
  437. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js +1 -1
  438. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js.nft.json +1 -1
  439. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js +1 -1
  440. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js.nft.json +1 -1
  441. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js +1 -1
  442. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js.nft.json +1 -1
  443. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js +1 -1
  444. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js.nft.json +1 -1
  445. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js +1 -1
  446. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js.nft.json +1 -1
  447. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js +1 -1
  448. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js.nft.json +1 -1
  449. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js +1 -1
  450. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js.nft.json +1 -1
  451. package/.next/server/app/v1/personas/[personaId]/work-items/route.js +1 -1
  452. package/.next/server/app/v1/personas/[personaId]/work-items/route.js.nft.json +1 -1
  453. package/.next/server/app/v1/personas/readiness/route.js +1 -1
  454. package/.next/server/app/v1/personas/readiness/route.js.nft.json +1 -1
  455. package/.next/server/app/v1/personas/route.js +1 -1
  456. package/.next/server/app/v1/personas/route.js.nft.json +1 -1
  457. package/.next/server/app/v1/personas/settings-options/route.js +1 -1
  458. package/.next/server/app/v1/personas/settings-options/route.js.nft.json +1 -1
  459. package/.next/server/app/v1/personas/summary/route.js +1 -1
  460. package/.next/server/app/v1/personas/summary/route.js.nft.json +1 -1
  461. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js +1 -1
  462. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js.nft.json +1 -1
  463. package/.next/server/app/v1/roles/[roleId]/impact/route.js +1 -1
  464. package/.next/server/app/v1/roles/[roleId]/impact/route.js.nft.json +1 -1
  465. package/.next/server/app/v1/roles/[roleId]/restore/route.js +1 -1
  466. package/.next/server/app/v1/roles/[roleId]/restore/route.js.nft.json +1 -1
  467. package/.next/server/app/v1/roles/[roleId]/rollback/route.js +1 -1
  468. package/.next/server/app/v1/roles/[roleId]/rollback/route.js.nft.json +1 -1
  469. package/.next/server/app/v1/roles/[roleId]/route.js +1 -1
  470. package/.next/server/app/v1/roles/[roleId]/route.js.nft.json +1 -1
  471. package/.next/server/app/v1/roles/[roleId]/versions/route.js +1 -1
  472. package/.next/server/app/v1/roles/[roleId]/versions/route.js.nft.json +1 -1
  473. package/.next/server/app/v1/roles/route.js +1 -1
  474. package/.next/server/app/v1/roles/route.js.nft.json +1 -1
  475. package/.next/server/app/v1/tasks/[taskId]/route.js +1 -1
  476. package/.next/server/app/v1/tasks/[taskId]/route.js.nft.json +1 -1
  477. package/.next/server/app-paths-manifest.json +60 -60
  478. package/.next/server/chunks/14645.js +1 -1
  479. package/.next/server/chunks/21392.js +3 -3
  480. package/.next/server/chunks/{83503.js → 25847.js} +3 -3
  481. package/.next/server/chunks/31519.js +3 -3
  482. package/.next/server/chunks/34679.js +1 -1
  483. package/.next/server/chunks/52152.js +3 -3
  484. package/.next/server/chunks/73633.js +1 -1
  485. package/.next/server/chunks/81306.js +1 -1
  486. package/.next/server/chunks/82300.js +3 -3
  487. package/.next/server/chunks/83718.js +1 -1
  488. package/.next/server/chunks/8464.js +1 -1
  489. package/.next/server/chunks/{78608.js → 87864.js} +3 -3
  490. package/.next/server/chunks/89031.js +1 -1
  491. package/.next/server/chunks/97235.js +1 -1
  492. package/.next/server/middleware-build-manifest.js +1 -1
  493. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  494. package/.next/server/pages/500.html +1 -1
  495. package/.next/server/preview-props.json +3 -3
  496. package/.next/server/server-reference-manifest.js +1 -1
  497. package/.next/server/server-reference-manifest.json +1 -1
  498. package/.next/static/chunks/{2103-5f61569b0629e957.js → 2103-be5e06316fbab625.js} +1 -1
  499. package/.next/static/chunks/app/chat/{page-569fe5a097bb2c06.js → page-314d31c432c2d88b.js} +1 -1
  500. package/.next/static/chunks/webpack-1449ea081feba501.js +1 -0
  501. package/.next/trace-build +1 -1
  502. package/README.md +1 -1
  503. package/mcp-servers/bash/package.json +1 -1
  504. package/mcp-servers/browser/package.json +1 -1
  505. package/mcp-servers/filesystem/package.json +1 -1
  506. package/mcp-servers/flujo/package.json +1 -1
  507. package/package.json +5 -5
  508. package/.next/static/chunks/webpack-d7e41a6b1b459ed1.js +0 -1
  509. /package/.next/static/{QzwOWTB7GKoP7AaFNpYr5 → dA-lF06zcBoG4LavbX9MD}/_buildManifest.js +0 -0
  510. /package/.next/static/{QzwOWTB7GKoP7AaFNpYr5 → dA-lF06zcBoG4LavbX9MD}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=83503,exports.ids=[83503],exports.modules={34762:(a,b,c)=>{c.d(b,{Mr:()=>T,Ug:()=>ae,GD:()=>aq,QO:()=>ap,N$:()=>as,F_:()=>an,Uf:()=>Z,bG:()=>Y,p9:()=>ai});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(16698),i=c(977598),j=c(731612),k=c(189663),l=c(259994),m=c(268962),n=c(482432),o=c(820100),p=c(537944);let q="/api/mcp/flujo/";function r(a){let b=(a,c)=>{if(c>32)throw Error("Workload schema depth refused.");if(null===a||"string"==typeof a||"boolean"==typeof a||"number"==typeof a&&Number.isFinite(a))return a;if(Array.isArray(a))return a.map(a=>b(a,c+1));if(!a||"object"!=typeof a)throw Error("Workload schema value refused.");let d=Object.getOwnPropertyDescriptors(a);return Object.fromEntries(Object.keys(d).sort().filter(a=>d[a].enumerable).map(a=>{if(!("value"in d[a]))throw Error("Workload schema accessor refused.");return[a,b(d[a].value,c+1)]}))},c=JSON.stringify(b(a,0));if(Buffer.byteLength(c)>65536)throw Error("Workload schema bytes refused.");return c}let s=a=>(0,i.createHash)("sha256").update(r(a)).digest("hex"),t={listTools:{path:"tools",method:"GET",schema:{type:"object",additionalProperties:!1}},listResources:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},listResourceTemplates:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},readResource:{path:"resources/read",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}},listSkills:{path:"skills",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},getSkill:{path:"skills",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}}};async function u(){let[a,b,d]=await Promise.all([Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(34679),c.e(79504),c.e(49366),c.e(74858),c.e(52152),c.e(81300),c.e(80314),c.e(28266)]).then(c.bind(c,828266)),Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(79487),c.e(54045),c.e(77030),c.e(34679),c.e(95260),c.e(79504),c.e(49366),c.e(55328),c.e(74858),c.e(52152),c.e(42862),c.e(81300),c.e(41320),c.e(80314),c.e(89374),c.e(46200),c.e(22891),c.e(89201),c.e(64745)]).then(c.bind(c,464745)),c.e(67744).then(c.bind(c,467744))]),e=d.systemScreenshotEnabled(),f=b.internalToolDefinitions(),g=[["authoring",a.FLUJO_AUTHORING_TOOLS],["flows",a.FLUJO_FLOW_TOOLS],["servers",a.FLUJO_SERVER_TOOLS],["automation",a.FLUJO_AUTOMATION_TOOLS],["state",a.FLUJO_STATE_TOOLS]],h=new Set,i=[];for(let[a,b]of g)for(let c of b){if(h.has(c))throw Error("Duplicate workload action refused.");h.add(c);let b=f.filter(a=>a.name===c);if("system_screenshot"===c&&0===b.length&&!e&&void 0===d.systemScreenshotToolDefinition())continue;if(1!==b.length)throw Error("Missing or ambiguous workload definition.");let g=b[0].inputSchema;i.push({action:{action:c,method:"POST",path:q+a,schemaDigest:s({inputSchema:g,annotations:b[0].annotations??null})},schema:g,tool:!0})}for(let[a,b]of Object.entries(t))i.push({action:{action:a,method:b.method,path:q+b.path,schemaDigest:s(b.schema)},schema:b.schema,tool:!1});if(i.length>70)throw Error("Workload inventory exceeds its bound.");if(i.sort((a,b)=>a.action.action<b.action.action?-1:+(a.action.action>b.action.action)),r(i.map(a=>a.action)),e!==d.systemScreenshotEnabled())throw Error("Workload capability availability changed.");return i}async function v(){return(await u()).map(a=>Object.freeze(a.action))}let w="FLUJO_MCP_WORKLOAD_TOKEN",x="FLUJO_MCP_WORKLOAD_AUDIENCE",y=/^flo_mcp1_[A-Za-z0-9_-]{43}$/;function z(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();return console.info("[workload-guard]",a,"start"),b().finally(()=>console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c)))}function A(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();console.info("[workload-guard]",a,"start");try{return b()}finally{console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c))}}let B=a=>(0,i.createHash)("sha256").update(a).digest("hex"),C=["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"],D=(a,b)=>C.every(c=>a[c]===b[c]),E=j.object(Object.fromEntries(C.map(a=>[a,j.string().regex(/^\d{1,40}$/)]))).strict(),F=p.Zl.shape.bundledInstallation.unwrap().shape.workload.unwrap().shape.inventory,G=j.object({version:j.literal(1),purpose:j.literal("bundled-flujo-control-v1"),tokenHash:j.string().regex(/^[a-f0-9]{64}$/),generation:j.string().uuid(),ownerId:j.string().regex(/^[A-Za-z0-9_-]{1,64}$/),ownerRevision:j.string().regex(/^[a-f0-9]{64}$/),workspace:j.string().refine(k.isValidWorkspaceName),serverName:j.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),audience:j.string().max(2048),policyDigest:j.string().regex(/^[a-f0-9]{64}$/),issuedAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),expiresAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),markerIdentity:E,markerDigest:j.string().regex(/^[a-f0-9]{64}$/),inventory:F}).strict().refine(a=>a.expiresAt>a.issuedAt&&a.expiresAt<=a.issuedAt+3e5),H=j.object({version:j.literal(1),generation:j.string().uuid(),state:j.literal("active"),recordDev:j.string().regex(/^\d{1,40}$/),recordIno:j.string().regex(/^\d{1,40}$/)}).strict(),I=new WeakMap,J=new WeakSet,K=new WeakMap,L=new h.AsyncLocalStorage,M=Symbol.for("FLUJO:bundled-flujo-workload-request:v1"),N=Symbol.for("FLUJO:bundled-flujo-workload-errors:v1");function O(a,b,c){let d=Object.getOwnPropertyDescriptor(globalThis,a);if(d){if(!("value"in d)||d.configurable||d.writable||!c(d.value))throw Error("Workload process context refused.");return d.value}let e=b();return Object.defineProperty(globalThis,a,{value:e,writable:!1,configurable:!1,enumerable:!1}),e}let P=O(M,()=>new h.AsyncLocalStorage,a=>a instanceof h.AsyncLocalStorage),Q=O(N,()=>new WeakSet,a=>a instanceof WeakSet);function R(){let a=h.AsyncLocalStorage.prototype.getStore.call(P);if(void 0!==a&&!(a instanceof Request))throw new T;return a}let S=()=>Response.json({error:"Bundled workload authorization refused."},{status:401,headers:{"Cache-Control":"no-store"}});class T extends Error{constructor(a){super("Bundled workload authorization refused.",{cause:a}),this.response=S(),WeakSet.prototype.add.call(Q,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(Q,a)}}function U(a){if(!a)throw new T;let b=new URL(a);if(!["http:","https:"].includes(b.protocol)||!["127.0.0.1","localhost","[::1]"].includes(b.hostname)||b.username||b.password||"/"!==b.pathname||b.search||b.hash)throw new T;return b.origin}function V(a){if(!g().isAbsolute(a))throw new T;return g().join(g().dirname(a),`.flujo-workloads-${B(g().resolve(a)).slice(0,24)}`)}function W(a){let b=I.get(a);if(!b)throw new T;return b}function X(a){if("retired"===a.state||"uncertain"===a.state||a.ledger!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||a.ownerFile!==process.env.FLUJO_OWNER_AUTH_FILE||(0,k.getCurrentWorkspace)()!==a.workspace||U(process.env.FLUJO_BASE_URL)!==a.audience)throw new T}function Y(a){let b=(0,p.r)(a);if([...b.keys()].some(a=>[w,x].includes(a.toUpperCase())))throw new T;if("1"===process.env.FLUJO_WORKER_MODE||void 0===a.trustedHost)return;let c=p.Zl.parse(a.trustedHost);if(c.bundledInstallation?.packageDirectory!=="flujo")return;if(!c.bundledInstallation?.workload||![w,x].every(a=>c.environmentNames.includes(a)))throw new T;let d=(0,k.getCurrentWorkspace)(),e=U(process.env.FLUJO_BASE_URL);if(U(b.get("FLUJO_BASE_URL"))!==e||b.get("FLUJO_WORKSPACE")!==d)throw new T;let f=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,g=process.env.FLUJO_OWNER_AUTH_FILE;if(!f||!g)throw new T;let h=Object.freeze({});return I.set(h,{config:structuredClone(a),token:`flo_mcp1_${(0,i.randomBytes)(32).toString("base64url")}`,audience:e,workspace:d,ledger:f,ownerFile:g,state:"inactive"}),h}function Z(a,b){if(!b)return Object.freeze({});let c=W(b);if(X(c),!(0,p.g)(a,c.config))throw new T;return Object.freeze({[w]:c.token,[x]:c.audience})}function $(a,b){let c=0;for(;c<b.length;){let d=e().writeSync(a,b,c,b.length-c,c);if(!d)throw new T;c+=d}e().ftruncateSync(a,b.length),e().fsyncSync(a)}function _(a){if(void 0===a.fd||void 0!==a.uncertainDescriptor)throw new T;return a.fd}function aa(a){let b=g().dirname(a.filename),c=e().lstatSync(b,{bigint:!0});if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==a.parentIdentity.dev||c.ino!==a.parentIdentity.ino||c.mode!==a.parentIdentity.mode||c.uid!==a.parentIdentity.uid||c.gid!==a.parentIdentity.gid||""!==g().relative(e().realpathSync(b),b))throw new T}function ab(a,b=!0){let c=_(a),d=e().fstatSync(c,{bigint:!0});if(!D(d,a.identity)||!d.isFile()||d.nlink!==BigInt(+!a.removed)||b&&!D(d,e().lstatSync(a.filename,{bigint:!0})))throw new T;let f=Buffer.alloc(a.bytes.length+1);try{let g=e().readSync(c,f,0,f.length,0);if(g!==a.bytes.length||!f.subarray(0,g).equals(a.bytes)||!D(d,e().fstatSync(c,{bigint:!0}))||b&&!D(d,e().lstatSync(a.filename,{bigint:!0})))throw new T}finally{f.fill(0)}}function ac(a){let b=e().lstatSync(g().dirname(a),{bigint:!0}),c=e().openSync(a,d.constants.O_RDWR|d.constants.O_CREAT|d.constants.O_EXCL|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0),384);return{fd:c,filename:a,bytes:Buffer.alloc(0),identity:e().fstatSync(c,{bigint:!0}),parentIdentity:b}}function ad(a,b){let c=Buffer.from(JSON.stringify(b));if(c.length>65536)throw new T;ab(a),$(_(a),c),a.bytes.fill(0),a.bytes=c,a.identity=e().fstatSync(_(a),{bigint:!0}),ab(a),(0,p.Jl)(a.filename)}async function ae(a,b){let d=W(a);if("inactive"!==d.state)throw new T;d.state="activating";try{let f,{assertVerifiedBundledFlujoWorkloadStart:h}=await Promise.all([c.e(49176),c.e(74858),c.e(14514)]).then(c.bind(c,774858));X(d);let i=h(b,a);if(i.assertLive(),d.generation=i.generation,!(0,p.g)(i.config,d.config))throw new T;let j=await v();if(X(d),i.assertLive(),r(j)!==r(p.Zl.parse(d.config.trustedHost).bundledInstallation?.workload?.inventory))throw new T;let k=n.rF.parse(await z("activation-owner",()=>(0,p.$j)(d.ownerFile)));X(d),i.assertLive();let l=A("activation-grant",()=>(0,p.vb)(d.config));if(k.ownerId!==l.ownerId||l.digest!==i.digest||l.ownerId!==i.ownerId)throw new T;let m=V(d.ledger);try{e().mkdirSync(m,{mode:448})}catch(a){if("EEXIST"!==a.code)throw a}let q=e().lstatSync(m);if(!q.isDirectory()||q.isSymbolicLink()||""!==g().relative(e().realpathSync(m),m)||e().readdirSync(m).length>=512)throw new T;X(d),i.assertLive();let s=B(d.token),t=g().join(m,`${s}.json`);d.record=ac(g().join(m,`${s}.pending`)),d.marker=ac(g().join(m,`${s}.lease`)),A("activation-marker",()=>ad(d.marker,{version:1,generation:i.generation,state:"active",recordDev:String(d.record.identity.dev),recordIno:String(d.record.identity.ino)}));let u=Date.now(),w=G.parse({version:1,purpose:"bundled-flujo-control-v1",tokenHash:s,generation:i.generation,ownerId:k.ownerId,ownerRevision:(0,o.T8)(k),workspace:d.workspace,serverName:d.config.name,audience:d.audience,policyDigest:l.digest,issuedAt:u,expiresAt:Math.min(u+3e5,l.expiresAt),markerIdentity:(f=d.marker.identity,Object.fromEntries(C.map(a=>[a,String(f[a])]))),markerDigest:B(d.marker.bytes),inventory:j});if(X(d),i.assertLive(),A("activation-record",()=>ad(d.record,w)),(0,o.T8)(n.rF.parse(A("activation-owner-final",()=>(0,p.Jl)(d.ownerFile))))!==w.ownerRevision)throw new T;let x=A("activation-grant-final",()=>(0,p.vb)(d.config));if(X(d),i.assertLive(),x.digest!==w.policyDigest||x.ownerId!==w.ownerId||w.expiresAt<=Date.now()||(ab(d.marker),ab(d.record),e().existsSync(t)))throw new T;X(d),i.assertLive(),e().linkSync(d.record.filename,t);let y=e().fstatSync(_(d.record),{bigint:!0});if(y.nlink!==BigInt(2)||!D(y,e().lstatSync(d.record.filename,{bigint:!0}))||!D(y,e().lstatSync(t,{bigint:!0})))throw new T;e().unlinkSync(d.record.filename),d.record.filename=t,e().fsyncSync(_(d.record)),d.record.identity=e().fstatSync(_(d.record),{bigint:!0}),ab(d.record),d.state="active"}catch(b){try{ai(a)}catch(a){throw AggregateError([b,a],"Workload activation and durable retirement failed.",{cause:b})}throw b}}function af(a){if(void 0!==a.uncertainDescriptor){try{e().fstatSync(a.uncertainDescriptor)}catch(b){if("EBADF"===b.code){a.uncertainDescriptor=void 0;return}throw b}throw new T}}function ag(a){if(a.recoveryWriter){if(af(a.recoveryWriter),void 0!==a.recoveryWriter.fd)throw new T;a.recoveryWriter=void 0}}function ah(a){if(ag(a),af(a),aa(a),a.removed){try{e().lstatSync(a.filename)}catch(a){if("ENOENT"===a.code)return;throw a}throw new T}if(void 0!==a.fd){if(ab(a),a.readOnlyWitness){a.bytes.length&&(0,p.Jl)(a.filename);let b=a.fd,c=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),f={fd:c,uncertainDescriptor:void 0};a.recoveryWriter=f;try{if(!D(a.identity,e().fstatSync(c,{bigint:!0})))throw new T;ab(a),aa(a)}catch(b){f.fd=void 0;try{e().closeSync(c)}catch(a){f.uncertainDescriptor=c;try{af(f)}catch{}throw AggregateError([b,a],"Workload retry writer verification and cleanup failed.",{cause:b})}throw a.recoveryWriter=void 0,b}a.fd=c,a.readOnlyWitness=!1,a.recoveryWriter=void 0;try{e().closeSync(b)}catch(c){a.uncertainDescriptor=b;try{af(a)}catch{}throw c}ab(a),aa(a)}return}if(!D(a.identity,e().lstatSync(a.filename,{bigint:!0})))throw new T;a.bytes.length&&(0,p.Jl)(a.filename),a.fd=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),ab(a),aa(a)}function ai(a){if(!a)return;let b=W(a);if("retired"===b.state)return;b.state="uncertain";let c=[],f=b.marker;if(f)try{if(ah(f),!b.durablyRevoked){if(f.removed)throw new T;f.bytes.length&&(0,p.Jl)(f.filename),ab(f);let a=Buffer.from(JSON.stringify({version:1,generation:b.generation,state:"revoked"}));$(_(f),a),f.bytes.fill(0),f.bytes=a,f.identity=e().fstatSync(_(f),{bigint:!0}),ab(f),aa(f),b.durablyRevoked=!0}}catch(a){c.push(a)}for(let a of[b.record,b.marker])if(a){try{if(ah(a),!a.removed){a.bytes.length&&(0,p.Jl)(a.filename),ab(a),aa(a),e().unlinkSync(a.filename);let b=e().fstatSync(_(a),{bigint:!0});if(b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.nlink!==BigInt(0)||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid)throw new T;a.identity=b,a.removed=!0,e().fsyncSync(_(a))}}catch(a){c.push(a)}try{!function(a){let b,c;if(ag(a),af(a),void 0===a.fd)return;if(!a.removed){aa(a),ab(a),a.bytes.length&&(0,p.Jl)(a.filename);let c={fd:b=e().openSync(a.filename,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),uncertainDescriptor:void 0};a.recoveryWriter=c;try{if(!D(a.identity,e().fstatSync(b,{bigint:!0})))throw new T;ab(a),aa(a)}catch(d){c.fd=void 0;try{e().closeSync(b)}catch(a){c.uncertainDescriptor=b;try{af(c)}catch{}throw AggregateError([d,a],"Workload close witness failed.",{cause:d})}throw a.recoveryWriter=void 0,d}a.recoveryWriter=void 0}let f=a.identity,g=a.fd;a.fd=void 0;try{e().closeSync(g)}catch(b){c=b,a.uncertainDescriptor=g;try{af(a)}catch{}}if(void 0!==b){a.fd=b,a.readOnlyWitness=!0;try{if(void 0===a.uncertainDescriptor){let c=e().fstatSync(b,{bigint:!0});if(!C.filter(a=>"ctimeNs"!==a).every(a=>f[a]===c[a]))throw new T;let d=a.identity;a.identity=c;try{ab(a),aa(a),a.bytes.length&&(0,p.Jl)(a.filename),ab(a)}catch(b){throw a.identity=d,b}}}catch(a){if(void 0!==c)throw AggregateError([c,a],"Workload close and witness verification failed.",{cause:c});throw a}}if(void 0!==c)throw c}(a)}catch(a){c.push(a)}}if(c.length)throw AggregateError(c,"Workload retirement remains uncertain.");if(f&&!b.durablyRevoked)throw new T;for(let a of[b.record,b.marker])a?.bytes.fill(0);b.state="retired"}async function aj(a,b){let c=g().resolve((0,k.getWorkspaceDataDir)()),d=g().join(c,"db","mcp_servers.json"),f=[],h=g().dirname(d);for(;;){let a=e().lstatSync(h,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||""!==g().relative(e().realpathSync(h),h))throw new T;f.push({filename:h,identity:a});let b=g().dirname(h);if(b===h)break;h=b}let i=async()=>{for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new T}await (0,m.af)(d)};await i();let j=e().lstatSync(d,{bigint:!0}),n=await (0,l.b)(d,{maxBytes:4194304,signal:b,verifyPath:i,expected:j});try{let c=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n));if(!c||"object"!=typeof c||Array.isArray(c)||!Object.hasOwn(c,a))throw new T;let h=c[a];if(!h||"object"!=typeof h||Array.isArray(h))throw new T;let i={...h,name:a};if("stdio"!==i.transport||i.disabled||"string"!=typeof i.command||"string"!=typeof i.cwd)throw new T;return p.Zl.parse(i.trustedHost),{config:i,assertCurrent:()=>{if(!D(j,e().lstatSync(d,{bigint:!0})))throw new T;for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new T}b.throwIfAborted()}}}finally{n.fill(0)}}async function ak(a){let b="request";try{a.signal.throwIfAborted();let c=/^Bearer (flo_mcp1_[A-Za-z0-9_-]{43})$/.exec(a.headers.get("authorization")??"");if(!c||!y.test(c[1])||"1"===process.env.FLUJO_WORKER_MODE)throw new T;let d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw new T;let h=B(c[1]),i=g().join(V(d),`${h}.json`),j=g().join(V(d),`${h}.lease`);b="private-files";let l=e().lstatSync(i,{bigint:!0}),m=e().lstatSync(j,{bigint:!0}),q=[i,j,f,d],[s,t,u,w]=await z("private-set-initial",()=>(0,p.pr)(q,a.signal,["record","marker","owner","ledger"]));b="private-binding";let x=G.parse(s),E=H.parse(t),F=n.rF.parse(u),I=p.DV.parse(w),J=I.approvals.find(a=>a.workspace===x.workspace&&a.serverName===x.serverName);if(x.tokenHash!==h||x.issuedAt>Date.now()||x.expiresAt<=Date.now()||!C.every(a=>String(m[a])===x.markerIdentity[a])||1!==E.version||E.generation!==x.generation||"active"!==E.state||E.recordDev!==String(l.dev)||E.recordIno!==String(l.ino)||B(JSON.stringify(E))!==x.markerDigest||F.ownerId!==x.ownerId||(0,o.T8)(F)!==x.ownerRevision||I.ownerId!==x.ownerId||!J||J.expiresAt<=Date.now()||J.policyDigest!==x.policyDigest)throw new T;let K=new URL(a.url);b="request-binding";let L=(a,b)=>{if(!a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-request-binding]","refused",b)}catch{}throw new T}};if(L(K.origin===x.audience,"url-audience"),L(U(process.env.FLUJO_BASE_URL)===x.audience,"process-audience"),L(a.headers.get("host")===K.host,"host"),L(null===a.headers.get("origin")||a.headers.get("origin")===x.audience,"origin"),L(a.headers.get("x-flujo-workspace")===x.workspace,"workspace-header"),L(!K.searchParams.has("workspace"),"workspace-query"),L(x.inventory.some(b=>b.path===K.pathname&&b.method===a.method),"inventory-route"),L(!/%|\\|\/\//.test(K.pathname),"path"),await (0,k.runWithWorkspace)(x.workspace,async()=>{b="config";let c=(await z("config-first",()=>aj(x.serverName,a.signal))).config,d=p.Zl.parse(c.trustedHost);if(d.bundledInstallation?.packageDirectory!=="flujo")throw new T;b="package";let e=await z("package-verification",()=>(0,p.Bh)(c,a.signal));b="inventory-binding";let f=await z("inventory",()=>v());if(e.ownerId!==x.ownerId||e.digest!==x.policyDigest||r(d.bundledInstallation.workload?.inventory)!==r(x.inventory)||r(f)!==r(x.inventory))throw new T;b="config-fences";let g=await z("config-latest",()=>aj(x.serverName,a.signal));if(!(0,p.g)(g.config,c))throw new T;let h=await z("config-final",()=>aj(x.serverName,a.signal)),i=h.config;if(!(0,p.g)(i,c))throw new T;let j=A("digest-final",()=>(0,p.OU)(i));b="final-private-binding";let[k,l,m,s]=A("private-set-final",()=>(0,p.jf)(q,a.signal)),t=n.rF.parse(m),u=p.DV.parse(s),w=u.approvals.find(a=>a.workspace===x.workspace&&a.serverName===x.serverName);if(r(G.parse(k))!==r(x)||r(H.parse(l))!==r(E)||t.ownerId!==x.ownerId||(0,o.T8)(t)!==x.ownerRevision||u.ownerId!==x.ownerId||!w||w.expiresAt<=Date.now()||w.policyDigest!==x.policyDigest||j!==x.policyDigest)throw new T;h.assertCurrent()}),b="final-file-fences",!D(l,e().lstatSync(i,{bigint:!0}))||!D(m,e().lstatSync(j,{bigint:!0}))||d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE||U(process.env.FLUJO_BASE_URL)!==x.audience||x.expiresAt<=Date.now())throw new T;return a.signal.throwIfAborted(),x}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-guard]","refused",b)}catch{}throw a}}async function al(a){if(!/flo_mcp1_/i.test(a.headers.get("authorization")??""))return{kind:"unrelated"};try{let b=await ak(a),c=Object.freeze({workspace:b.workspace,serverName:b.serverName,generation:b.generation,inventory:Object.freeze(b.inventory.map(a=>Object.freeze(a))),readRequest:()=>a,recheck:async()=>{try{let c=await ak(a);if(r(c)!==r(b))return S();return null}catch{return S()}}});return J.add(c),{kind:"authorized",authorization:c}}catch{return{kind:"denied",response:S()}}}async function am(a,b){if(!J.has(a)||b!==a.readRequest())throw new T;let d=await c.e(80314).then(c.bind(c,558736)),e=()=>{let a=Reflect.get(d,"hasExecutionExtensionContext");if("function"!=typeof a||d.executionExtensionAdapter()||a())throw new T};if(e(),await a.recheck())throw new T;e()}function an(){let a=L.getStore(),b=R();if(!a&&!b)return;if(!a||!b||a.request!==b||!J.has(a.authorization))throw new T;let c=new Set(["listTools","listResources","listResourceTemplates","readResource","listSkills","getSkill"]);return a.authorization.inventory.filter(a=>!c.has(a.action)).map(a=>a.action)}async function ao(){let a=R(),b=L.getStore();if(!a&&!b)return;if(!a)throw new T;if(b){if(b.request!==a||!J.has(b.authorization))throw new T;return b}let c=K.get(a);if(c){if(!J.has(c)||c.readRequest()!==a)throw new T;return{authorization:c,request:a}}let d=await al(a);if("authorized"!==d.kind||R()!==a)throw new T;return K.set(a,d.authorization),{authorization:d.authorization,request:a}}async function ap(){let a=await ao();a&&await am(a.authorization,a.request)}async function aq(a,b,d,e={}){let f=await ao();if(!f)return;await am(f.authorization,f.request);let g=await u(),h="string"==typeof a?[a]:a;if(0===h.length)throw new T;let{AjvJsonSchemaValidator:i}=await c.e(91784).then(c.bind(c,891784)),j=new i;for(let a of h){let c=g.find(c=>c.action.action===a&&c.action.method===b&&c.action.path===d);if(!c||!f.authorization.inventory.some(a=>r(a)===r(c.action))||!j.getValidator(c.schema)(e).valid)throw new T}await am(f.authorization,f.request)}let ar=new WeakMap;function as(a,b=200){let c=new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}});return c.body&&ar.set(c,c.body),c}},35984:(a,b,c)=>{c.d(b,{f:()=>l,p:()=>n});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(731421);let j=String.raw`
1
+ "use strict";exports.id=25847,exports.ids=[25847],exports.modules={34762:(a,b,c)=>{c.d(b,{Mr:()=>T,Ug:()=>ae,GD:()=>aq,QO:()=>ap,N$:()=>as,F_:()=>an,Uf:()=>Z,bG:()=>Y,p9:()=>ai});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(16698),i=c(977598),j=c(731612),k=c(189663),l=c(259994),m=c(268962),n=c(482432),o=c(820100),p=c(537944);let q="/api/mcp/flujo/";function r(a){let b=(a,c)=>{if(c>32)throw Error("Workload schema depth refused.");if(null===a||"string"==typeof a||"boolean"==typeof a||"number"==typeof a&&Number.isFinite(a))return a;if(Array.isArray(a))return a.map(a=>b(a,c+1));if(!a||"object"!=typeof a)throw Error("Workload schema value refused.");let d=Object.getOwnPropertyDescriptors(a);return Object.fromEntries(Object.keys(d).sort().filter(a=>d[a].enumerable).map(a=>{if(!("value"in d[a]))throw Error("Workload schema accessor refused.");return[a,b(d[a].value,c+1)]}))},c=JSON.stringify(b(a,0));if(Buffer.byteLength(c)>65536)throw Error("Workload schema bytes refused.");return c}let s=a=>(0,i.createHash)("sha256").update(r(a)).digest("hex"),t={listTools:{path:"tools",method:"GET",schema:{type:"object",additionalProperties:!1}},listResources:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},listResourceTemplates:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},readResource:{path:"resources/read",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}},listSkills:{path:"skills",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},getSkill:{path:"skills",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}}};async function u(){let[a,b,d]=await Promise.all([Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(34679),c.e(79504),c.e(49366),c.e(74858),c.e(52152),c.e(81300),c.e(80314),c.e(28266)]).then(c.bind(c,828266)),Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(79487),c.e(54045),c.e(77030),c.e(34679),c.e(95260),c.e(79504),c.e(49366),c.e(55328),c.e(74858),c.e(52152),c.e(42862),c.e(81300),c.e(41320),c.e(80314),c.e(89374),c.e(46200),c.e(22891),c.e(89201),c.e(64745)]).then(c.bind(c,464745)),c.e(67744).then(c.bind(c,467744))]),e=d.systemScreenshotEnabled(),f=b.internalToolDefinitions(),g=[["authoring",a.FLUJO_AUTHORING_TOOLS],["flows",a.FLUJO_FLOW_TOOLS],["servers",a.FLUJO_SERVER_TOOLS],["automation",a.FLUJO_AUTOMATION_TOOLS],["state",a.FLUJO_STATE_TOOLS]],h=new Set,i=[];for(let[a,b]of g)for(let c of b){if(h.has(c))throw Error("Duplicate workload action refused.");h.add(c);let b=f.filter(a=>a.name===c);if("system_screenshot"===c&&0===b.length&&!e&&void 0===d.systemScreenshotToolDefinition())continue;if(1!==b.length)throw Error("Missing or ambiguous workload definition.");let g=b[0].inputSchema;i.push({action:{action:c,method:"POST",path:q+a,schemaDigest:s({inputSchema:g,annotations:b[0].annotations??null})},schema:g,tool:!0})}for(let[a,b]of Object.entries(t))i.push({action:{action:a,method:b.method,path:q+b.path,schemaDigest:s(b.schema)},schema:b.schema,tool:!1});if(i.length>70)throw Error("Workload inventory exceeds its bound.");if(i.sort((a,b)=>a.action.action<b.action.action?-1:+(a.action.action>b.action.action)),r(i.map(a=>a.action)),e!==d.systemScreenshotEnabled())throw Error("Workload capability availability changed.");return i}async function v(){return(await u()).map(a=>Object.freeze(a.action))}let w="FLUJO_MCP_WORKLOAD_TOKEN",x="FLUJO_MCP_WORKLOAD_AUDIENCE",y=/^flo_mcp1_[A-Za-z0-9_-]{43}$/;function z(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();return console.info("[workload-guard]",a,"start"),b().finally(()=>console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c)))}function A(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();console.info("[workload-guard]",a,"start");try{return b()}finally{console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c))}}let B=a=>(0,i.createHash)("sha256").update(a).digest("hex"),C=["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"],D=(a,b)=>C.every(c=>a[c]===b[c]),E=j.object(Object.fromEntries(C.map(a=>[a,j.string().regex(/^\d{1,40}$/)]))).strict(),F=p.Zl.shape.bundledInstallation.unwrap().shape.workload.unwrap().shape.inventory,G=j.object({version:j.literal(1),purpose:j.literal("bundled-flujo-control-v1"),tokenHash:j.string().regex(/^[a-f0-9]{64}$/),generation:j.string().uuid(),ownerId:j.string().regex(/^[A-Za-z0-9_-]{1,64}$/),ownerRevision:j.string().regex(/^[a-f0-9]{64}$/),workspace:j.string().refine(k.isValidWorkspaceName),serverName:j.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),audience:j.string().max(2048),policyDigest:j.string().regex(/^[a-f0-9]{64}$/),issuedAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),expiresAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),markerIdentity:E,markerDigest:j.string().regex(/^[a-f0-9]{64}$/),inventory:F}).strict().refine(a=>a.expiresAt>a.issuedAt&&a.expiresAt<=a.issuedAt+3e5),H=j.object({version:j.literal(1),generation:j.string().uuid(),state:j.literal("active"),recordDev:j.string().regex(/^\d{1,40}$/),recordIno:j.string().regex(/^\d{1,40}$/)}).strict(),I=new WeakMap,J=new WeakSet,K=new WeakMap,L=new h.AsyncLocalStorage,M=Symbol.for("FLUJO:bundled-flujo-workload-request:v1"),N=Symbol.for("FLUJO:bundled-flujo-workload-errors:v1");function O(a,b,c){let d=Object.getOwnPropertyDescriptor(globalThis,a);if(d){if(!("value"in d)||d.configurable||d.writable||!c(d.value))throw Error("Workload process context refused.");return d.value}let e=b();return Object.defineProperty(globalThis,a,{value:e,writable:!1,configurable:!1,enumerable:!1}),e}let P=O(M,()=>new h.AsyncLocalStorage,a=>a instanceof h.AsyncLocalStorage),Q=O(N,()=>new WeakSet,a=>a instanceof WeakSet);function R(){let a=h.AsyncLocalStorage.prototype.getStore.call(P);if(void 0!==a&&!(a instanceof Request))throw new T;return a}let S=()=>Response.json({error:"Bundled workload authorization refused."},{status:401,headers:{"Cache-Control":"no-store"}});class T extends Error{constructor(a){super("Bundled workload authorization refused.",{cause:a}),this.response=S(),WeakSet.prototype.add.call(Q,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(Q,a)}}function U(a){if(!a)throw new T;let b=new URL(a);if(!["http:","https:"].includes(b.protocol)||!["127.0.0.1","localhost","[::1]"].includes(b.hostname)||b.username||b.password||"/"!==b.pathname||b.search||b.hash)throw new T;return b.origin}function V(a){if(!g().isAbsolute(a))throw new T;return g().join(g().dirname(a),`.flujo-workloads-${B(g().resolve(a)).slice(0,24)}`)}function W(a){let b=I.get(a);if(!b)throw new T;return b}function X(a){if("retired"===a.state||"uncertain"===a.state||a.ledger!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||a.ownerFile!==process.env.FLUJO_OWNER_AUTH_FILE||(0,k.getCurrentWorkspace)()!==a.workspace||U(process.env.FLUJO_BASE_URL)!==a.audience)throw new T}function Y(a){let b=(0,p.r)(a);if([...b.keys()].some(a=>[w,x].includes(a.toUpperCase())))throw new T;if("1"===process.env.FLUJO_WORKER_MODE||void 0===a.trustedHost)return;let c=p.Zl.parse(a.trustedHost);if(c.bundledInstallation?.packageDirectory!=="flujo")return;if(!c.bundledInstallation?.workload||![w,x].every(a=>c.environmentNames.includes(a)))throw new T;let d=(0,k.getCurrentWorkspace)(),e=U(process.env.FLUJO_BASE_URL);if(U(b.get("FLUJO_BASE_URL"))!==e||b.get("FLUJO_WORKSPACE")!==d)throw new T;let f=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,g=process.env.FLUJO_OWNER_AUTH_FILE;if(!f||!g)throw new T;let h=Object.freeze({});return I.set(h,{config:structuredClone(a),token:`flo_mcp1_${(0,i.randomBytes)(32).toString("base64url")}`,audience:e,workspace:d,ledger:f,ownerFile:g,state:"inactive"}),h}function Z(a,b){if(!b)return Object.freeze({});let c=W(b);if(X(c),!(0,p.g)(a,c.config))throw new T;return Object.freeze({[w]:c.token,[x]:c.audience})}function $(a,b){let c=0;for(;c<b.length;){let d=e().writeSync(a,b,c,b.length-c,c);if(!d)throw new T;c+=d}e().ftruncateSync(a,b.length),e().fsyncSync(a)}function _(a){if(void 0===a.fd||void 0!==a.uncertainDescriptor)throw new T;return a.fd}function aa(a){let b=g().dirname(a.filename),c=e().lstatSync(b,{bigint:!0});if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==a.parentIdentity.dev||c.ino!==a.parentIdentity.ino||c.mode!==a.parentIdentity.mode||c.uid!==a.parentIdentity.uid||c.gid!==a.parentIdentity.gid||""!==g().relative(e().realpathSync(b),b))throw new T}function ab(a,b=!0){let c=_(a),d=e().fstatSync(c,{bigint:!0});if(!D(d,a.identity)||!d.isFile()||d.nlink!==BigInt(+!a.removed)||b&&!D(d,e().lstatSync(a.filename,{bigint:!0})))throw new T;let f=Buffer.alloc(a.bytes.length+1);try{let g=e().readSync(c,f,0,f.length,0);if(g!==a.bytes.length||!f.subarray(0,g).equals(a.bytes)||!D(d,e().fstatSync(c,{bigint:!0}))||b&&!D(d,e().lstatSync(a.filename,{bigint:!0})))throw new T}finally{f.fill(0)}}function ac(a){let b=e().lstatSync(g().dirname(a),{bigint:!0}),c=e().openSync(a,d.constants.O_RDWR|d.constants.O_CREAT|d.constants.O_EXCL|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0),384);return{fd:c,filename:a,bytes:Buffer.alloc(0),identity:e().fstatSync(c,{bigint:!0}),parentIdentity:b}}function ad(a,b){let c=Buffer.from(JSON.stringify(b));if(c.length>65536)throw new T;ab(a),$(_(a),c),a.bytes.fill(0),a.bytes=c,a.identity=e().fstatSync(_(a),{bigint:!0}),ab(a),(0,p.Jl)(a.filename)}async function ae(a,b){let d=W(a);if("inactive"!==d.state)throw new T;d.state="activating";try{let f,{assertVerifiedBundledFlujoWorkloadStart:h}=await Promise.all([c.e(49176),c.e(74858),c.e(14514)]).then(c.bind(c,774858));X(d);let i=h(b,a);if(i.assertLive(),d.generation=i.generation,!(0,p.g)(i.config,d.config))throw new T;let j=await v();if(X(d),i.assertLive(),r(j)!==r(p.Zl.parse(d.config.trustedHost).bundledInstallation?.workload?.inventory))throw new T;let k=n.rF.parse(await z("activation-owner",()=>(0,p.$j)(d.ownerFile)));X(d),i.assertLive();let l=A("activation-grant",()=>(0,p.vb)(d.config));if(k.ownerId!==l.ownerId||l.digest!==i.digest||l.ownerId!==i.ownerId)throw new T;let m=V(d.ledger);try{e().mkdirSync(m,{mode:448})}catch(a){if("EEXIST"!==a.code)throw a}let q=e().lstatSync(m);if(!q.isDirectory()||q.isSymbolicLink()||""!==g().relative(e().realpathSync(m),m)||e().readdirSync(m).length>=512)throw new T;X(d),i.assertLive();let s=B(d.token),t=g().join(m,`${s}.json`);d.record=ac(g().join(m,`${s}.pending`)),d.marker=ac(g().join(m,`${s}.lease`)),A("activation-marker",()=>ad(d.marker,{version:1,generation:i.generation,state:"active",recordDev:String(d.record.identity.dev),recordIno:String(d.record.identity.ino)}));let u=Date.now(),w=G.parse({version:1,purpose:"bundled-flujo-control-v1",tokenHash:s,generation:i.generation,ownerId:k.ownerId,ownerRevision:(0,o.T8)(k),workspace:d.workspace,serverName:d.config.name,audience:d.audience,policyDigest:l.digest,issuedAt:u,expiresAt:Math.min(u+3e5,l.expiresAt),markerIdentity:(f=d.marker.identity,Object.fromEntries(C.map(a=>[a,String(f[a])]))),markerDigest:B(d.marker.bytes),inventory:j});if(X(d),i.assertLive(),A("activation-record",()=>ad(d.record,w)),(0,o.T8)(n.rF.parse(A("activation-owner-final",()=>(0,p.Jl)(d.ownerFile))))!==w.ownerRevision)throw new T;let x=A("activation-grant-final",()=>(0,p.vb)(d.config));if(X(d),i.assertLive(),x.digest!==w.policyDigest||x.ownerId!==w.ownerId||w.expiresAt<=Date.now()||(ab(d.marker),ab(d.record),e().existsSync(t)))throw new T;X(d),i.assertLive(),e().linkSync(d.record.filename,t);let y=e().fstatSync(_(d.record),{bigint:!0});if(y.nlink!==BigInt(2)||!D(y,e().lstatSync(d.record.filename,{bigint:!0}))||!D(y,e().lstatSync(t,{bigint:!0})))throw new T;e().unlinkSync(d.record.filename),d.record.filename=t,e().fsyncSync(_(d.record)),d.record.identity=e().fstatSync(_(d.record),{bigint:!0}),ab(d.record),d.state="active"}catch(b){try{ai(a)}catch(a){throw AggregateError([b,a],"Workload activation and durable retirement failed.",{cause:b})}throw b}}function af(a){if(void 0!==a.uncertainDescriptor){try{e().fstatSync(a.uncertainDescriptor)}catch(b){if("EBADF"===b.code){a.uncertainDescriptor=void 0;return}throw b}throw new T}}function ag(a){if(a.recoveryWriter){if(af(a.recoveryWriter),void 0!==a.recoveryWriter.fd)throw new T;a.recoveryWriter=void 0}}function ah(a){if(ag(a),af(a),aa(a),a.removed){try{e().lstatSync(a.filename)}catch(a){if("ENOENT"===a.code)return;throw a}throw new T}if(void 0!==a.fd){if(ab(a),a.readOnlyWitness){a.bytes.length&&(0,p.Jl)(a.filename);let b=a.fd,c=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),f={fd:c,uncertainDescriptor:void 0};a.recoveryWriter=f;try{if(!D(a.identity,e().fstatSync(c,{bigint:!0})))throw new T;ab(a),aa(a)}catch(b){f.fd=void 0;try{e().closeSync(c)}catch(a){f.uncertainDescriptor=c;try{af(f)}catch{}throw AggregateError([b,a],"Workload retry writer verification and cleanup failed.",{cause:b})}throw a.recoveryWriter=void 0,b}a.fd=c,a.readOnlyWitness=!1,a.recoveryWriter=void 0;try{e().closeSync(b)}catch(c){a.uncertainDescriptor=b;try{af(a)}catch{}throw c}ab(a),aa(a)}return}if(!D(a.identity,e().lstatSync(a.filename,{bigint:!0})))throw new T;a.bytes.length&&(0,p.Jl)(a.filename),a.fd=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),ab(a),aa(a)}function ai(a){if(!a)return;let b=W(a);if("retired"===b.state)return;b.state="uncertain";let c=[],f=b.marker;if(f)try{if(ah(f),!b.durablyRevoked){if(f.removed)throw new T;f.bytes.length&&(0,p.Jl)(f.filename),ab(f);let a=Buffer.from(JSON.stringify({version:1,generation:b.generation,state:"revoked"}));$(_(f),a),f.bytes.fill(0),f.bytes=a,f.identity=e().fstatSync(_(f),{bigint:!0}),ab(f),aa(f),b.durablyRevoked=!0}}catch(a){c.push(a)}for(let a of[b.record,b.marker])if(a){try{if(ah(a),!a.removed){a.bytes.length&&(0,p.Jl)(a.filename),ab(a),aa(a),e().unlinkSync(a.filename);let b=e().fstatSync(_(a),{bigint:!0});if(b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.nlink!==BigInt(0)||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid)throw new T;a.identity=b,a.removed=!0,e().fsyncSync(_(a))}}catch(a){c.push(a)}try{!function(a){let b,c;if(ag(a),af(a),void 0===a.fd)return;if(!a.removed){aa(a),ab(a),a.bytes.length&&(0,p.Jl)(a.filename);let c={fd:b=e().openSync(a.filename,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),uncertainDescriptor:void 0};a.recoveryWriter=c;try{if(!D(a.identity,e().fstatSync(b,{bigint:!0})))throw new T;ab(a),aa(a)}catch(d){c.fd=void 0;try{e().closeSync(b)}catch(a){c.uncertainDescriptor=b;try{af(c)}catch{}throw AggregateError([d,a],"Workload close witness failed.",{cause:d})}throw a.recoveryWriter=void 0,d}a.recoveryWriter=void 0}let f=a.identity,g=a.fd;a.fd=void 0;try{e().closeSync(g)}catch(b){c=b,a.uncertainDescriptor=g;try{af(a)}catch{}}if(void 0!==b){a.fd=b,a.readOnlyWitness=!0;try{if(void 0===a.uncertainDescriptor){let c=e().fstatSync(b,{bigint:!0});if(!C.filter(a=>"ctimeNs"!==a).every(a=>f[a]===c[a]))throw new T;let d=a.identity;a.identity=c;try{ab(a),aa(a),a.bytes.length&&(0,p.Jl)(a.filename),ab(a)}catch(b){throw a.identity=d,b}}}catch(a){if(void 0!==c)throw AggregateError([c,a],"Workload close and witness verification failed.",{cause:c});throw a}}if(void 0!==c)throw c}(a)}catch(a){c.push(a)}}if(c.length)throw AggregateError(c,"Workload retirement remains uncertain.");if(f&&!b.durablyRevoked)throw new T;for(let a of[b.record,b.marker])a?.bytes.fill(0);b.state="retired"}async function aj(a,b){let c=g().resolve((0,k.getWorkspaceDataDir)()),d=g().join(c,"db","mcp_servers.json"),f=[],h=g().dirname(d);for(;;){let a=e().lstatSync(h,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||""!==g().relative(e().realpathSync(h),h))throw new T;f.push({filename:h,identity:a});let b=g().dirname(h);if(b===h)break;h=b}let i=async()=>{for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new T}await (0,m.af)(d)};await i();let j=e().lstatSync(d,{bigint:!0}),n=await (0,l.b)(d,{maxBytes:4194304,signal:b,verifyPath:i,expected:j});try{let c=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n));if(!c||"object"!=typeof c||Array.isArray(c)||!Object.hasOwn(c,a))throw new T;let h=c[a];if(!h||"object"!=typeof h||Array.isArray(h))throw new T;let i={...h,name:a};if("stdio"!==i.transport||i.disabled||"string"!=typeof i.command||"string"!=typeof i.cwd)throw new T;return p.Zl.parse(i.trustedHost),{config:i,assertCurrent:()=>{if(!D(j,e().lstatSync(d,{bigint:!0})))throw new T;for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new T}b.throwIfAborted()}}}finally{n.fill(0)}}async function ak(a){let b="request";try{a.signal.throwIfAborted();let c=/^Bearer (flo_mcp1_[A-Za-z0-9_-]{43})$/.exec(a.headers.get("authorization")??"");if(!c||!y.test(c[1])||"1"===process.env.FLUJO_WORKER_MODE)throw new T;let d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw new T;let h=B(c[1]),i=g().join(V(d),`${h}.json`),j=g().join(V(d),`${h}.lease`);b="private-files";let l=e().lstatSync(i,{bigint:!0}),m=e().lstatSync(j,{bigint:!0}),q=[i,j,f,d],[s,t,u,w]=await z("private-set-initial",()=>(0,p.pr)(q,a.signal,["record","marker","owner","ledger"]));b="private-binding";let x=G.parse(s),E=H.parse(t),F=n.rF.parse(u),I=p.DV.parse(w),J=I.approvals.find(a=>a.workspace===x.workspace&&a.serverName===x.serverName);if(x.tokenHash!==h||x.issuedAt>Date.now()||x.expiresAt<=Date.now()||!C.every(a=>String(m[a])===x.markerIdentity[a])||1!==E.version||E.generation!==x.generation||"active"!==E.state||E.recordDev!==String(l.dev)||E.recordIno!==String(l.ino)||B(JSON.stringify(E))!==x.markerDigest||F.ownerId!==x.ownerId||(0,o.T8)(F)!==x.ownerRevision||I.ownerId!==x.ownerId||!J||J.expiresAt<=Date.now()||J.policyDigest!==x.policyDigest)throw new T;let K=new URL(a.url);b="request-binding";let L=(a,b)=>{if(!a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-request-binding]","refused",b)}catch{}throw new T}};if(L(K.origin===x.audience,"url-audience"),L(U(process.env.FLUJO_BASE_URL)===x.audience,"process-audience"),L(a.headers.get("host")===K.host,"host"),L(null===a.headers.get("origin")||a.headers.get("origin")===x.audience,"origin"),L(a.headers.get("x-flujo-workspace")===x.workspace,"workspace-header"),L(!K.searchParams.has("workspace"),"workspace-query"),L(x.inventory.some(b=>b.path===K.pathname&&b.method===a.method),"inventory-route"),L(!/%|\\|\/\//.test(K.pathname),"path"),await (0,k.runWithWorkspace)(x.workspace,async()=>{b="config";let c=(await z("config-first",()=>aj(x.serverName,a.signal))).config,d=p.Zl.parse(c.trustedHost);if(d.bundledInstallation?.packageDirectory!=="flujo")throw new T;b="package";let e=await z("package-verification",()=>(0,p.Bh)(c,a.signal));b="inventory-binding";let f=await z("inventory",()=>v());if(e.ownerId!==x.ownerId||e.digest!==x.policyDigest||r(d.bundledInstallation.workload?.inventory)!==r(x.inventory)||r(f)!==r(x.inventory))throw new T;b="config-fences";let g=await z("config-latest",()=>aj(x.serverName,a.signal));if(!(0,p.g)(g.config,c))throw new T;let h=await z("config-final",()=>aj(x.serverName,a.signal)),i=h.config;if(!(0,p.g)(i,c))throw new T;let j=A("digest-final",()=>(0,p.OU)(i));b="final-private-binding";let[k,l,m,s]=A("private-set-final",()=>(0,p.jf)(q,a.signal)),t=n.rF.parse(m),u=p.DV.parse(s),w=u.approvals.find(a=>a.workspace===x.workspace&&a.serverName===x.serverName);if(r(G.parse(k))!==r(x)||r(H.parse(l))!==r(E)||t.ownerId!==x.ownerId||(0,o.T8)(t)!==x.ownerRevision||u.ownerId!==x.ownerId||!w||w.expiresAt<=Date.now()||w.policyDigest!==x.policyDigest||j!==x.policyDigest)throw new T;h.assertCurrent()}),b="final-file-fences",!D(l,e().lstatSync(i,{bigint:!0}))||!D(m,e().lstatSync(j,{bigint:!0}))||d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE||U(process.env.FLUJO_BASE_URL)!==x.audience||x.expiresAt<=Date.now())throw new T;return a.signal.throwIfAborted(),x}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-guard]","refused",b)}catch{}throw a}}async function al(a){if(!/flo_mcp1_/i.test(a.headers.get("authorization")??""))return{kind:"unrelated"};try{let b=await ak(a),c=Object.freeze({workspace:b.workspace,serverName:b.serverName,generation:b.generation,inventory:Object.freeze(b.inventory.map(a=>Object.freeze(a))),readRequest:()=>a,recheck:async()=>{try{let c=await ak(a);if(r(c)!==r(b))return S();return null}catch{return S()}}});return J.add(c),{kind:"authorized",authorization:c}}catch{return{kind:"denied",response:S()}}}async function am(a,b){if(!J.has(a)||b!==a.readRequest())throw new T;let d=await c.e(80314).then(c.bind(c,558736)),e=()=>{let a=Reflect.get(d,"hasExecutionExtensionContext");if("function"!=typeof a||d.executionExtensionAdapter()||a())throw new T};if(e(),await a.recheck())throw new T;e()}function an(){let a=L.getStore(),b=R();if(!a&&!b)return;if(!a||!b||a.request!==b||!J.has(a.authorization))throw new T;let c=new Set(["listTools","listResources","listResourceTemplates","readResource","listSkills","getSkill"]);return a.authorization.inventory.filter(a=>!c.has(a.action)).map(a=>a.action)}async function ao(){let a=R(),b=L.getStore();if(!a&&!b)return;if(!a)throw new T;if(b){if(b.request!==a||!J.has(b.authorization))throw new T;return b}let c=K.get(a);if(c){if(!J.has(c)||c.readRequest()!==a)throw new T;return{authorization:c,request:a}}let d=await al(a);if("authorized"!==d.kind||R()!==a)throw new T;return K.set(a,d.authorization),{authorization:d.authorization,request:a}}async function ap(){let a=await ao();a&&await am(a.authorization,a.request)}async function aq(a,b,d,e={}){let f=await ao();if(!f)return;await am(f.authorization,f.request);let g=await u(),h="string"==typeof a?[a]:a;if(0===h.length)throw new T;let{AjvJsonSchemaValidator:i}=await c.e(91784).then(c.bind(c,891784)),j=new i;for(let a of h){let c=g.find(c=>c.action.action===a&&c.action.method===b&&c.action.path===d);if(!c||!f.authorization.inventory.some(a=>r(a)===r(c.action))||!j.getValidator(c.schema)(e).valid)throw new T}await am(f.authorization,f.request)}let ar=new WeakMap;function as(a,b=200){let c=new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}});return c.body&&ar.set(c,c.body),c}},35984:(a,b,c)=>{c.d(b,{f:()=>l,p:()=>n});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(731421);let j=String.raw`
2
2
  $ErrorActionPreference = 'Stop'
3
3
  $phase = 'input'
4
4
  try {
@@ -53,5 +53,5 @@ while ($null -ne $current) {
53
53
  exit 1
54
54
  }
55
55
  `;function k(a,b=""){try{if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return;let c=/^FLUJO_AUTHORITY_REFUSED:(input|native-acl|owner-dacl|outsider-access|evidence-bounds)\s*$/.exec(b)?.[1];console.info("[private-authority-native]","refused",c??a)}catch{}}function l(a){if("win32"!==process.platform)throw Error("Windows authority inspection unavailable");let b="string"==typeof a?[a]:a;if(b.length<1||b.length>4||b.some(a=>!g().isAbsolute(a)||a.length>4096||a.includes("\0")))throw Error("Windows authority inspection unavailable");let c=process.env.SystemRoot;if(!c||!g().isAbsolute(c))throw Error("Windows authority inspection unavailable");let d=g().join(c,"System32","WindowsPowerShell","v1.0","powershell.exe");if(!e().statSync(d).isFile())throw Error("Windows authority inspection unavailable");let f=(0,i.spawnSync)(d,["-NoLogo","-NoProfile","-NonInteractive","-Command",j],{input:JSON.stringify("string"==typeof a?{filename:g().resolve(a)}:{filenames:b.map(a=>g().resolve(a))}),encoding:"utf8",windowsHide:!0,timeout:3e4,maxBuffer:65536,env:{NODE_ENV:"production",SystemRoot:c,WINDIR:c,PATH:g().join(c,"System32")}});if(f.error||0!==f.status||f.signal)throw Error("Windows authority inspection refused");return m(f.stdout)}function m(a){let b;try{b=JSON.parse(a)}catch{throw Error("Windows authority inspection refused")}let c=b;if(!c||1!==c.schemaVersion||!Array.isArray(c.records)||c.records.length<2||c.records.length>128||c.records.some(a=>"string"!=typeof a||a.length>8192))throw Error("Windows authority inspection refused");return(0,h.createHash)("sha256").update(JSON.stringify(c.records)).digest("hex")}async function n(a,b){if("win32"!==process.platform||b?.aborted)throw"win32"===process.platform&&b?.aborted&&k("abort-before-spawn"),Error("Windows authority inspection unavailable");let c="string"==typeof a?[a]:a;if(c.length<1||c.length>4||c.some(a=>!g().isAbsolute(a)||a.length>4096||a.includes("\0")))throw Error("Windows authority inspection unavailable");let d=process.env.SystemRoot;if(!d||!g().isAbsolute(d))throw Error("Windows authority inspection unavailable");let f=g().join(d,"System32","WindowsPowerShell","v1.0","powershell.exe");if(!(await e().promises.stat(f)).isFile())throw Error("Windows authority inspection unavailable");if(b?.aborted)throw k("abort-before-spawn"),Error("Windows authority inspection cancelled");return new Promise((c,e)=>{let h,l=(0,i.spawn)(f,["-NoLogo","-NoProfile","-NonInteractive","-Command",j],{windowsHide:!0,stdio:["pipe","pipe","pipe"],env:{NODE_ENV:"production",SystemRoot:d,WINDIR:d,PATH:g().join(d,"System32")}}),n=0,o=[],p=[],q=a=>{k(a),h??=Error("Windows authority inspection cancelled or exceeded bounds"),l.kill()},r=()=>q("abort"),s=setTimeout(()=>q("deadline"),3e4);for(let a of(b?.addEventListener("abort",r,{once:!0}),l.on("error",a=>{h=a,q("spawn")}),l.stdin.on("error",a=>{h=a,q("stdin")}),[l.stdout,l.stderr]))a.on("data",b=>{(n+=b.length)>65536?q("bounds"):a===l.stdout?o.push(b):p.push(b)});l.on("close",(a,d)=>{clearTimeout(s),b?.removeEventListener("abort",r);try{if(h||0!==a||d||b?.aborted)throw h??Error("Windows authority inspection refused");c(m(Buffer.concat(o).toString("utf8")))}catch(b){k(0===a?"evidence":"exit",Buffer.concat(p).toString("utf8")),e(b)}finally{for(let a of[...o,...p])a.fill(0)}});let t="string"==typeof a?{filename:g().resolve(a)}:{filenames:a.map(a=>g().resolve(a))};l.stdin.end(JSON.stringify(t)),b?.aborted&&r()})}},43521:(a,b,c)=>{c.d(b,{h:()=>h});var d=c(383594);let e="number"==typeof d.Gv.LOG_LEVEL?d.Gv.LOG_LEVEL:3;function f(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c=new Map([["name",a.name],["message",a.message]]);for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.set("stack",e):"cause"===d?c.set("cause",f(e,b+1)):"errors"===d&&Array.isArray(e)?c.set("errors",e.map(a=>f(a,b+1))):c.set(d,e))}return Object.fromEntries(c)}function g(a,b,c,d,g){if(a>=("number"==typeof g?g:e)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let e=new Date().toISOString(),g=`[${e}] [${b}]`,h=`${g} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?f(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?f(b):b,2);h+=`:
56
- ${b}`}catch(a){h+=": [Object cannot be stringified]"}else h+=`: ${d}`;switch(h=h.replace(/[\r\n\u2028\u2029]/g," ").replaceAll("\x1b","[ESC]").replace(/\p{Control}/gu,a=>`\\u${a.charCodeAt(0).toString(16).padStart(4,"0")}`),a){case -1:console.debug(`[VERBOSE] ${h}`);break;case 0:console.debug(h);break;case 1:console.info(h);break;case 2:console.warn(h);break;case 3:console.error(h);break;default:console.log(h)}}}function h(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{g(-1,d,a,c,b)},debug:(a,c)=>{g(0,d,a,c,b)},info:(a,c)=>{g(1,d,a,c,b)},warn:(a,c)=>{g(2,d,a,c,b)},error:(a,c)=>{g(3,d,a,c,b)}}}},76528:(a,b,c)=>{c.d(b,{B_:()=>z,Ev:()=>x,JN:()=>s,Lf:()=>t,MO:()=>i.MO,Sd:()=>u,Sg:()=>E,by:()=>w,gm:()=>H,l7:()=>v,oK:()=>y,pw:()=>F,sE:()=>i.sE,sR:()=>A});var d=c(16698),e=c(257975),f=c(178877),g=c(377424),h=c(295489),i=c(884122);let j=Object.freeze({writers:4,retainedBytes:0x10000000,ownerBytes:0x8000000,slots:262144,depth:128,bufferBytes:65536,stringChars:8192}),k=globalThis,l=k.__flujoConversationPublicationV1??={bytes:0,retained:0,owners:0,writers:0,quarantined:0,rejected:0,chains:new Map,fences:new Map,receipts:new Map,waiters:[],context:new d.AsyncLocalStorage,batches:new Map,captures:new WeakMap,immutableSnapshots:new WeakSet};function m(a,b){throw l.rejected++,new i.MO(a,b)}function n(a){let b=0;for(let c=a;c;c=Object.getPrototypeOf(c)){(++b>128||e.types.isProxy(c))&&m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported");let a=Object.getOwnPropertyDescriptor(c,"toJSON");!a||"value"in a&&"function"!=typeof a.value||m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported")}}function o(a,b){let c=Object.getOwnPropertyDescriptor(a,b);return!c||"value"in c||m("CONVERSATION_PUBLICATION_DATA","accessors are unsupported"),c?.value}l.captures??=new WeakMap,l.immutableSnapshots??=new WeakSet,l.batches??=new Map,(0,g.rF)("publication",l.bytes);let p=a=>void 0===a||"function"==typeof a||"symbol"==typeof a;function q(a,b,c){let d=0,i=0,k=0,q=null!==b&&"object"==typeof b?l.captures.get(b):void 0,r=l.context.getStore(),s=!!q?.live&&q===r&&q.owner.live&&q.owner.key===a&&l.immutableSnapshots.has(b)&&!c,t=new Set,u=(a,b,f)=>{if(!f&&(++d>j.slots||b>j.depth)&&m("CONVERSATION_PUBLICATION_DATA","JSON descriptor work exceeds the bounded publication policy"),f||(k+=64),"string"==typeof a)f||(i+=2*a.length);else if(null!==a&&"object"==typeof a){(e.types.isProxy(a)||t.has(a))&&m("CONVERSATION_PUBLICATION_DATA","a proxy or cycle cannot be captured");let d=Array.isArray(a);!function a(b,c){if(null===b)return!c;if(e.types.isProxy(b))return!1;let d=Object.getOwnPropertyDescriptor(b,"constructor");if(!d||!("value"in d)||"function"!=typeof d.value||e.types.isProxy(d.value))return!1;let f=c?Array:Object;return Function.prototype.toString.call(d.value)===Function.prototype.toString.call(f)&&Object.getOwnPropertyDescriptor(d.value,"prototype")?.value===b&&(c?a(Object.getPrototypeOf(b),!1):null===Object.getPrototypeOf(b))}(Object.getPrototypeOf(a),d)&&m("CONVERSATION_PUBLICATION_DATA","only plain JSON containers can be captured"),n(a),t.add(a);let g=f?d?[]:Object.create(null):void 0;try{if(d){let c=o(a,"length");c>j.slots&&m("CONVERSATION_PUBLICATION_DATA","array length exceeds publication policy");for(let d=0;d<c;d++){let c=String(d);!Object.hasOwn(a,c)&&c in a&&m("CONVERSATION_PUBLICATION_DATA","inherited array values are unsupported");let e=o(a,c),h=u(e,b+1,f);f&&g.push(p(e)?null:h)}}else for(let d in a){if(!Object.hasOwn(a,d)||0===b&&c?.has(d))continue;f||(k+=48+2*d.length,i+=2*d.length);let e=o(a,d),h=u(e,b+1,f);f&&!p(e)&&(g[d]=h)}}finally{t.delete(a)}if(f)return g}else"bigint"==typeof a?m("CONVERSATION_PUBLICATION_DATA","BigInt is not JSON data"):"function"==typeof a&&n(a);return!f&&i+k>j.ownerBytes&&m("CONVERSATION_PUBLICATION_MEMORY","retained data exceeds the per-publication bound"),a};p(b)&&m("CONVERSATION_PUBLICATION_DATA","publication has no JSON value"),s||u(b,0,!1);let v=2*k+524288,w=(0,f.getHeapStatistics)(),x=(0,g.XF)("publication",l.bytes+v),y=process.memoryUsage().rss;(l.retained+i+k>j.retainedBytes||x>.8*w.heap_size_limit-w.used_heap_size-0x4000000||!Number.isFinite(y)||y+x>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","publication allocation capacity is occupied"),l.bytes+=v,l.retained+=i+k,(0,g.rF)("publication",l.bytes);try{return{value:s?b:u(b,0,!0),retained:i+k,bytes:v,borrowed:s}}catch(a){throw l.bytes-=v,l.retained-=i+k,(0,g.rF)("publication",l.bytes),a}}async function r(a){for(;l.writers+l.quarantined>=j.writers;)await new Promise(a=>l.waiters.push(a));l.writers++;try{return await a()}finally{l.writers--,l.waiters.shift()?.()}}function s(a,b,c,d,e){a.length>4096&&m("CONVERSATION_PUBLICATION_DATA","publication key is too long");let f=l.context.getStore(),h=f?.live&&f.owner.live&&f.owner.key===a,i=q(a,b,d);try{e?.(i.value)}catch(a){throw l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes),a}let j=h?f.owner:{key:a,live:!0,bytes:0,quarantined:!1,snapshotCommits:0},k={owner:j,live:!0,tail:Promise.resolve(),pending:new Set};i.borrowed||null===i.value||"object"!=typeof i.value||l.captures.set(i.value,k),l.owners++;let n=async()=>{let b;try{return await c(i.value)}catch(a){throw b=a}finally{k.live=!1;let c=(await Promise.allSettled([...k.pending])).find(a=>"rejected"===a.status);if(void 0===b&&void 0!==k.failure)throw k.failure;if(void 0===b&&c?.status==="rejected")throw c.reason;void 0!==b||h||(l.fences.delete(a),l.receipts.delete(a))}},o=(h?f.tail:l.chains.get(a)??Promise.resolve()).catch(()=>void 0).then(()=>h?l.context.run(k,n):r(()=>l.context.run(k,n))).finally(()=>{h?l.owners--:(j.live=!1,l.owners--,j.descriptorUncertain&&(j.descriptorUncertain=!1,l.quarantined=Math.max(0,l.quarantined-1),l.waiters.shift()?.()),l.bytes-=j.bytes,l.chains.get(a)===o&&l.chains.delete(a)),i.value=void 0,l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes)});return h?(f.tail=o,f.pending.add(o),o.then(()=>f.pending.delete(o),a=>{f.pending.delete(o),f.failure??=a})):l.chains.set(a,o),o}function t(a){let b=l.captures.get(a);if(!b?.live||b.owner!==l.context.getStore()?.owner)throw Error("Snapshot is not owned by this live publication");let c=a=>{if(null!==a&&"object"==typeof a){for(let b in a)Object.hasOwn(a,b)&&c(a[b]);Object.isFrozen(a)||Object.freeze(a)}};return c(a),l.immutableSnapshots.add(a),a}function u(){return l.context.getStore()?.owner.snapshotCommits??0}async function v(){let a=l.context.getStore();if(!a)throw Error("No conversation publication frame");a.live=!1;let b=(await Promise.allSettled([...a.pending])).find(a=>"rejected"===a.status);if(void 0!==a.failure)throw a.failure;if(b?.status==="rejected")throw b.reason}function w(){return!!l.context.getStore()?.owner.quarantined}function x(a){let b=l.context.getStore()?.owner;if(!b?.live||!Number.isSafeInteger(a)||a<0||a>0x2000000)throw Error("Invalid publication scratch reservation");let c=Math.max(0,a-b.bytes),d=(0,f.getHeapStatistics)(),e=(0,g.XF)("publication",l.bytes+c),i=process.memoryUsage().rss;(e>.8*d.heap_size_limit-d.used_heap_size-0x4000000||!Number.isFinite(i)||i+e>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","rewrite metadata allocation capacity is occupied"),b.bytes+=c,l.bytes+=c,(0,g.rF)("publication",l.bytes)}function y(){let a=l.context.getStore()?.owner;if(!a?.live)throw Error("No live conversation publication owner");a.snapshotCommits++}function z(a,b,c=!1,d){let e=l.context.getStore()?.owner;if(!e?.live)throw Error("No live conversation publication owner");let f=new i.MO("CONVERSATION_PUBLICATION_UNCERTAIN",a,b instanceof Error?{cause:Error("Publication operation failed")}:void 0);if(e.quarantined||(e.quarantined=!0),c&&!e.descriptorUncertain&&(e.descriptorUncertain=!0,l.quarantined++),d){let a=Object.entries(d);if(a.length>8||a.some(([a,b])=>a.length>64||b.length>4096))throw Error("Publication receipt exceeded its bound");l.receipts.set(e.key,Object.freeze({...d}))}return l.fences.set(e.key,f),f}async function A(a){await l.chains.get(a);let b=l.fences.get(a);if(b)throw b}let B=new Set(["EBUSY","EPERM","EACCES","EAGAIN","EMFILE","ENFILE","ETIMEDOUT","EIO","ENOSPC"]),C=new Set(["PersonaRuntimeLockTimeoutError","WorkspaceSnapshotTimeoutError"]),D=Object.freeze([100,300,900]);async function E(a){for(let b=0;;b++)try{return await a()}catch(c){let a=D[b];if(void 0===a||!(c instanceof Error&&(C.has(c.name)||((0,i.sE)(c)?"CONVERSATION_PUBLICATION_DATA"!==c.code:B.has(c.code??"")))))throw c;await new Promise(b=>setTimeout(b,a))}}function F(a,b,c,d){let e=l.context.getStore(),f=e?.live&&e.owner.live&&e.owner.key===a?e:void 0,h=l.batches.get(a);if(h&&!h.started&&h.settled&&h.parent===f&&h.owner===d&&h.settled===(f?f.tail:l.chains.get(a))){let c=q(a,b);return h.items.push(c.value),h.bytes+=c.bytes,h.retained+=c.retained,h.settled}let i={items:[],started:!1,parent:f,owner:d,bytes:0,retained:0},j=s(a,[b],async b=>{i.started=!0,l.batches.get(a)===i&&l.batches.delete(a),await c(b)},void 0,a=>{i.items=a});i.settled=j,l.batches.set(a,i);let k=()=>{l.batches.get(a)===i&&l.batches.delete(a),i.items=[],l.bytes-=i.bytes,l.retained-=i.retained,i.bytes=0,i.retained=0,(0,g.rF)("publication",l.bytes)};return j.then(k,k),j}function*G(a){yield'"';for(let b=0;b<a.length;){let c=Math.min(b+j.stringChars,a.length),d=a.charCodeAt(c-1),e=a.charCodeAt(c);c<a.length&&d>=55296&&d<=56319&&e>=56320&&e<=57343&&c--,yield JSON.stringify(a.slice(b,c)).slice(1,-1),b=c}yield'"'}function*H(a,b){let c=Buffer.allocUnsafe(j.bufferBytes),d=0;for(let e of a)for(let a of function*(){yield*function* a(b){if("string"==typeof b)return void(yield*G(b));if(null===b||"object"!=typeof b)return void(yield JSON.stringify(b));let c=Array.isArray(b);yield c?"[":"{";let d=0;for(let e in b)Object.hasOwn(b,e)&&(d++&&(yield","),c||(yield*G(e),yield":"),yield*a(b[e]));yield c?"]":"}"}(e),b&&(yield"\n")}()){let b=Buffer.byteLength(a);if(b>c.length)throw Error("Conversation JSON encoder chunk exceeded its bound");d+b>c.length&&(yield c.subarray(0,d),d=0),d+=c.write(a,d,"utf8")}d&&(yield c.subarray(0,d))}},122134:(a,b,c)=>{c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(695349),e=c(43521),f=c(304927),g=c(320108),h=c(137106),i=c(889337);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.loadItem)(g.Zg.GLOBAL_ENV_VARS,{}),e=!!d&&"object"==typeof d&&Object.values(d).every(a=>{if(!a||"object"!=typeof a)return!1;let b=a.metadata;return"string"==typeof a.value&&null!==b&&"object"==typeof b&&"boolean"==typeof b.isSecret});j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i=new Map,l=new Set;if(e)for(let[a,b]of Object.entries(d))i.set(a,b.value),b.metadata.isSecret&&l.add(a);else for(let[a,b]of Object.entries(d))i.set(a,b);let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1),e=i.get(b);if(void 0!==e){let f=e;if(!c&&(l.has(b)||f.startsWith("encrypted:")||f.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(f.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=f.substring(10),c=await (0,h.Do)(a);if(c)f=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(f.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),d=d.replace(a,f)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b=new Map;for(let[c,d]of Object.entries(a))b.set(c,await n(d));return Object.fromEntries(b)}return a},o=await n(a);return j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn("Maximum resolution depth reached (10)"),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.Do)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),m(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l,m]),(0,d.A)(k,"60eab620425ddbd86cc239ac6b8fc50095e3a9f1ef",null),(0,d.A)(l,"40064b3bb4012d9b48afd736a05e4a27b19486d83b",null),(0,d.A)(m,"6017d1d90a84849ef08e2cd5f773e5acb98dedee0f",null)},137106:(a,b,c)=>{c.d(b,{Do:()=>$,pF:()=>Z,hO:()=>V,Gz:()=>_,C3:()=>ac,eS:()=>aa});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(304927),j=c(320108),k=c(189663),l=c(43521),m=c(901984),n=c(959933),o=c(268962);function p(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function q(){let a=process.env.FLUJO_ENCRYPTION_SECRET_FILE;if(void 0===a)return null;if(!g().isAbsolute(a))throw Error("Private encryption secret is unavailable");let b=g().resolve(a),c=[g().resolve((0,m.ok)())];try{c.push(e().realpathSync(c[0]))}catch(a){if("ENOENT"!==a.code)throw a}if(c.some(a=>{let c=g().relative(a,b);return""===c||".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}))throw Error("Private encryption secret must be outside the data directory");let d=e().lstatSync(b,{bigint:!0});if(!d.isFile()||d.isSymbolicLink()||d.nlink!==BigInt(1)||d.size>BigInt(1024)||""!==g().relative(e().realpathSync(b),b)||"win32"!==process.platform&&((d.mode&BigInt(63))!==BigInt(0)||d.uid!==BigInt(process.getuid?.()??-1)))throw Error("Private encryption secret is unavailable");let f=e().openSync(b,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let a=e().fstatSync(f,{bigint:!0});if(!a.isFile()||!p(d,a))throw Error("Private encryption secret changed");let c=Buffer.alloc(1025),i=0;for(;i<c.length;){let a=e().readSync(f,c,i,c.length-i,null);if(!a)break;i+=a}if(BigInt(i)!==a.size||!p(a,e().fstatSync(f,{bigint:!0}))||!p(a,e().lstatSync(b,{bigint:!0}))||""!==g().relative(e().realpathSync(b),b))throw Error("Private encryption secret changed");let j=new TextDecoder("utf-8",{fatal:!0}).decode(c.subarray(0,i)).replace(/\r?\n$/,"");if(!/^[A-Za-z0-9_-]{43,512}$/.test(j))throw Error("Private encryption secret is invalid");let k=(0,h.createHash)("sha256").update(JSON.stringify([b,...["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].map(b=>String(a[b]))])).digest("hex");return{secret:j,identity:k}}finally{e().closeSync(f)}}let r=(0,c(257975).promisify)(h.pbkdf2),s="FLUJO~";function t(a,b){return"string"==typeof a&&RegExp(`^[a-f0-9]{${2*b}}$`).test(a)}function u(a){if(!a||"object"!=typeof a||2!==a.version||!t(a.activeKey,32)||void 0!==a.legacyKey&&!t(a.legacyKey,16))throw Error("Invalid encryption keyring");return{version:2,activeKey:a.activeKey,...a.legacyKey?{legacyKey:a.legacyKey}:{}}}function v(a){return u({version:2,activeKey:(0,h.randomBytes)(32).toString("hex"),legacyKey:a})}function w(a){return(0,h.createHash)("sha256").update(Buffer.from(a.activeKey,"hex")).digest("hex")}function x(a){return(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex")}function y(a){if(a.startsWith("v2:")){let b=JSON.parse(a.slice(3));if(void 0!==b.metadataRevision&&!t(b.metadataRevision,32))throw Error("Invalid encryption metadata revision");return{...u(b),...b.metadataRevision?{metadataRevision:b.metadataRevision}:{}}}if(t(a,16))return{legacyKey:a};throw Error("Invalid encryption session key")}function z(a,b,c){if(!t(b,32))throw Error("Invalid AES-256 key");let d=(0,h.randomBytes)(12),e=(0,h.createCipheriv)("aes-256-gcm",Buffer.from(b,"hex"),d);e.setAAD(Buffer.from(c));let f=Buffer.concat([e.update(a,"utf8"),e.final()]);return`v2:${d.toString("hex")}:${e.getAuthTag().toString("hex")}:${f.toString("base64")}`}function A(a,b,c){let d=a.split(":");if(4!==d.length||"v2"!==d[0]||!t(d[1],12)||!t(d[2],16)||!t(b,32)||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(d[3]))throw Error("Invalid authenticated ciphertext");let e=(0,h.createDecipheriv)("aes-256-gcm",Buffer.from(b,"hex"),Buffer.from(d[1],"hex"));return e.setAAD(Buffer.from(c)),e.setAuthTag(Buffer.from(d[2],"hex")),Buffer.concat([e.update(Buffer.from(d[3],"base64")),e.final()]).toString("utf8")}async function B(a,b,c,d){if(d&&"user"!==b)throw Error("Invalid private key protection");let e=(0,h.randomBytes)(16),f=await r(c,e,6e5,32,"sha256"),g=w(a);return{encryption_version:2,encryption_type:b,key_id:g,kdf:"pbkdf2-sha256",kdf_iterations:6e5,...d?{key_protection:d}:{},data_encryption_salt:e.toString("hex"),data_encryption_key:z(JSON.stringify(a),f.toString("hex"),`flujo:keyring:v2:${b}:${g}${d?`:${d}`:""}`)}}async function C(a,b){if(2!==a.encryption_version||"pbkdf2-sha256"!==a.kdf||6e5!==a.kdf_iterations||!t(a.data_encryption_salt,16)||!t(a.key_id,32)||!["default","user"].includes(a.encryption_type??"")||void 0!==a.key_protection&&("user"!==a.encryption_type||!["passphrase","operator-file"].includes(a.key_protection)))throw Error("Unsupported encryption metadata");let c=await r(b,Buffer.from(a.data_encryption_salt,"hex"),6e5,32,"sha256"),d=u(JSON.parse(A(a.data_encryption_key,c.toString("hex"),`flujo:keyring:v2:${a.encryption_type}:${a.key_id}${a.key_protection?`:${a.key_protection}`:""}`)));if(w(d)!==a.key_id)throw Error("Encryption key identity mismatch");return d}async function D(a,b){if(1!==a.encryption_version||!t(a.data_encryption_iv,16))throw Error("Unsupported legacy encryption metadata");let c="user"===a.encryption_type?Buffer.from(a.data_encryption_salt,"hex"):Buffer.from("flujo_fixed_salt_v1");if("user"===a.encryption_type&&!t(a.data_encryption_salt,16))throw Error("Invalid legacy encryption salt");let d=await r(b,c,1e5,32,"sha256"),e=(0,h.createDecipheriv)("aes-256-cbc",d,Buffer.from(a.data_encryption_iv,"hex")),f=Buffer.concat([e.update(Buffer.from(a.data_encryption_key,"base64")),e.final()]).toString("utf8");if(!t(f,8))throw Error("Invalid legacy encryption key");return Buffer.from(f,"utf8").toString("hex")}class E extends Error{constructor(){super("Private encryption context changed; retry with the current profile")}}function F(){return(0,k.workspaceCacheKey)(g().resolve((0,k.getWorkspaceDataDir)()))}function G(){let a,b=global.__flujo_verified_operator_keyring;if(b){if(2!==b.version){for(let a of(global.__flujo_verified_operator_keyring=void 0,b.checks??[]))a.invalidated=!0;return}try{a=F()}catch{for(let a of(b.entries.clear(),b.checks??[]))a.invalidated=!0;return}for(let c of(b.entries.delete(a),b.checks??[]))c.namespace===a&&(c.invalidated=!0)}}async function H(a){await (0,o.bV)();let b=await a();if(!b||2!==b.encryption_version||"user"!==b.encryption_type||"operator-file"!==b.key_protection)throw new E;let c=g().resolve((0,k.getWorkspaceDataDir)()),e=await d.promises.realpath(c),f=await d.promises.stat(c,{bigint:!0});if(!f.isDirectory())throw new E;let i=q();if(!i)throw new E;let j=(0,k.workspaceCacheKey)(g().resolve((0,m.ok)()),c,e,f.dev.toString(),f.ino.toString(),String((0,n.ye)())),l=x(b),p=(0,h.createHash)("sha256").update(i.secret).digest("hex");return{metadata:b,secret:i.secret,revision:l,identity:JSON.stringify([j,l,i.identity,p])}}async function I(a,b){let c=global.__flujo_verified_operator_keyring;if(c?.version!==2){for(let a of c?.checks??[])a.invalidated=!0;global.__flujo_verified_operator_keyring=c={version:2,entries:new Map,checks:new Set}}let d={namespace:F(),invalidated:!1};c.checks.add(d);try{let e=await H(b);if(e.revision!==x(a)||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==F())throw new E;let f=c.entries.get(d.namespace);if(f?.namespace===d.namespace&&f.identity===e.identity&&w(f.ring)===e.metadata.key_id)return c.entries.delete(d.namespace),c.entries.set(d.namespace,f),{...f.ring};let g=await C(e.metadata,e.secret),h=await H(b);if(h.identity!==e.identity||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==F())throw new E;for(c.entries.delete(d.namespace),c.entries.set(d.namespace,Object.freeze({namespace:d.namespace,identity:h.identity,ring:Object.freeze({...g})}));c.entries.size>16;){let a=c.entries.keys().next();if(a.done){c.entries.clear();break}c.entries.delete(a.value)}return{...g}}catch(a){for(let a of(c.entries.delete(d.namespace),c.checks))a.namespace===d.namespace&&(a.invalidated=!0);throw a}finally{c.checks.delete(d)}}let J=(0,l.h)("utils/encryption/session");function K(){let a=(0,k.getCurrentWorkspace)();return a===k.DEFAULT_WORKSPACE?global.__flujo_server_dek??null:(global.__flujo_server_deks_by_workspace??(global.__flujo_server_deks_by_workspace=new Map)).get(a)??null}var L=c(492093),M=c(595391);let N=(0,l.h)("utils/encryption/secure"),O="flujo:secret:v2";class P extends Error{constructor(a="Encryption is locked: unlock with your password before accessing secrets"){super(a),this.name="EncryptionLockedError",Object.setPrototypeOf(this,P.prototype)}}async function Q(a){let b=global.__flujo_encryption_metadata_locks??=new Map,c=(0,k.workspaceCacheKey)("encryption-metadata"),d=(b.get(c)??Promise.resolve()).catch(()=>void 0).then(a);b.set(c,d);try{return await d}finally{b.get(c)===d&&b.delete(c)}}async function R(){let a=await (0,i.loadItem)(j.Zg.ENCRYPTION_KEY,null);if(null==a){let a=g().join((0,k.getWorkspaceDataDir)(),"db",`${j.Zg.ENCRYPTION_KEY}.json`);try{await d.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}throw Error("Existing encryption metadata is empty or invalid; restore it from a matching workspace backup")}if("object"!=typeof a||Array.isArray(a))throw Error("Invalid encryption metadata");if(![1,2].includes(a.encryption_version))throw Error("Unsupported encryption metadata version");if(void 0!==a.encryption_type&&!["default","user"].includes(a.encryption_type))throw Error("Invalid encryption type");if(void 0!==a.key_protection&&("user"!==a.encryption_type||!["passphrase","operator-file"].includes(a.key_protection)))throw Error("Invalid key protection");return a}async function S(a,b,c,e,f=!1){G(),await (0,o.bV)();let l=await B(a,b,c,e);if(f){let a=g().join((0,k.getWorkspaceDataDir)(),"db",`${j.Zg.ENCRYPTION_KEY}.json`),b=`${a}.initial.${(0,h.randomUUID)()}`;try{await (0,i.Zf)(b,JSON.stringify(l));try{await d.promises.link(b,a)}catch(a){if("EEXIST"!==a.code)throw a}let c=await R();if(!c)throw Error("Private encryption initialization did not commit");return c}finally{try{await d.promises.unlink(b)}catch(a){if("ENOENT"!==a.code)throw a}}}return await (0,L.withWorkspaceMutation)(async()=>{await (0,o.bV)();let b=await R();if(b?.encryption_version===2&&b.key_id!==w(a))throw new P("Encryption key changed; retry using current metadata");await (0,i.VH)(j.Zg.ENCRYPTION_KEY,l)}),l}async function T(){let a=await R();if(a)return a;let b=q()?.secret??null;if(!b&&(0,n.ye)())throw new P("Restore the worker workspace encryption metadata before accessing credentials");return b?S(v(),"user",b,"operator-file",!0):S(v(),"default",s,void 0,!0)}async function U(a,b){if(2===a.encryption_version)return C(a,b);let c=v(await D(a,b));return await S(c,a.encryption_type??"default",b),c}async function V(){try{return await Q(async()=>(await T(),!0))}catch{return N.error("Could not initialize encryption metadata"),!1}}async function W(a){let b=g().resolve((0,k.getWorkspaceDataDir)());if(g().resolve(a)!==b)throw new P("Worker transfer root mismatch");await (0,M.V$)((0,m.ok)(),g().join(b,"probe"));let c=await d.promises.lstat(b,{bigint:!0}),e=await d.promises.realpath(b);if(!c.isDirectory()||c.isSymbolicLink()||""!==g().relative(b,e))throw new P("Worker transfer root is unavailable");return{root:e,rootDevice:c.dev.toString(),rootInode:c.ino.toString()}}async function X(a){if(!(0,n.ye)()||void 0!==process.env.FLUJO_ENCRYPTION_SECRET_FILE)return null;let b=global.__flujo_worker_transfer_provenance?.get((0,k.getCurrentWorkspace)());if(!b||b.workspace!==(0,k.getCurrentWorkspace)()||"operator-file"!==a.key_protection||"user"!==a.encryption_type||b.metadataRevision!==x(a)||b.keyId!==a.key_id)return null;let c=await W(b.root);if(c.root!==b.root||c.rootDevice!==b.rootDevice||c.rootInode!==b.rootInode)return null;let d=K();if(!d)return null;let e=y(d);return"activeKey"in e&&e.metadataRevision===b.metadataRevision&&w(e)===b.keyId?e:null}async function Y(a,b=!1,c=!1){return Q(async()=>{if(await (0,o.Tm)())throw new P("Credential migration is pending; resume or roll back it before unlocking");let d=c?await T():await R();if(!d)throw new P("Restore matching encryption metadata before decrypting credentials");if("operator-file"===d.key_protection){let a=await X(d);return a||I(d,R)}if(G(),"user"!==d.encryption_type)return U(d,s);if(a&&!b)return U(d,a);let e=b&&a?function(a){let b=(0,k.getCurrentWorkspace)(),c=function(a=(0,k.getCurrentWorkspace)()){if(a===k.DEFAULT_WORKSPACE)return global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map);let b=global.__flujo_encryption_sessions_by_workspace??(global.__flujo_encryption_sessions_by_workspace=new Map),c=b.get(a);return c||(c=new Map,b.set(a,c)),c}(b),d=c.get(a);if(!d||(d.workspace??k.DEFAULT_WORKSPACE)!==b)return J.warn("Encryption session not found"),null;let e=Date.now();return e-d.createdAt>72e5?(J.warn("Encryption session expired"),c.delete(a),G(),null):(d.lastUsed=e,d.dek)}(a):K();if(!e)throw new P;let f=y(e);if("activeKey"in f&&(void 0!==f.metadataRevision&&f.metadataRevision!==x(d)||"passphrase"===d.key_protection&&void 0===f.metadataRevision)||2===d.encryption_version&&(!("activeKey"in f)||w(f)!==d.key_id))throw new P("Encryption metadata changed; unlock this workspace again");return f}).catch(a=>{if(G(),a instanceof E)throw new P(a.message);throw a})}async function Z(a,b,c=!1){try{let d=await Y(b,c,!0);if(!("activeKey"in d))throw new P("Unlock with your password to upgrade legacy encryption before saving secrets");return z(a,d.activeKey,O)}catch(a){if(a instanceof P)throw a;return N.error("Secret encryption failed; no plaintext value will be saved"),null}}async function $(a,b,c=!1){try{let e=await Y(b,c);if(a.startsWith("v2:")){if(!("activeKey"in e))return null;return A(a,e.activeKey,O)}if(!e.legacyKey)return null;var d=e.legacyKey;let f=a.split(":");if(2!==f.length||!t(f[0],16)||!t(d,16)||!/^[A-Za-z0-9+/]+={0,2}$/.test(f[1]))throw Error("Invalid legacy ciphertext");let g=(0,h.createDecipheriv)("aes-128-cbc",Buffer.from(d,"hex"),Buffer.from(f[0],"hex"));return Buffer.concat([g.update(Buffer.from(f[1],"base64")),g.final()]).toString("utf8")}catch(a){if(a instanceof P)throw a;return N.error("Secret decryption failed: invalid credentials, metadata or ciphertext"),null}}async function _(){return await R()!==null}async function aa(){let a=await R();return a?.encryption_type==="user"&&"operator-file"!==a.key_protection}async function ab(){if(await (0,o.Tm)())return G(),!0;let a=await R();if(!a&&void 0!==process.env.FLUJO_ENCRYPTION_SECRET_FILE)try{a=await Q(T)}catch{return!0}if(!a)return G(),(0,n.ye)();let b=K();if(b)try{let c=y(b);if("activeKey"in c&&void 0!==c.metadataRevision&&c.metadataRevision!==x(a))return G(),!0}catch{return G(),!0}if("operator-file"===a.key_protection)try{if(await X(a))return!1;return await I(a,R),!1}catch{return G(),!0}return G(),await aa()&&!K()}async function ac(){try{return await ab()}catch(a){throw G(),a}}},189663:(a,b,c)=>{c.r(b),c.d(b,{DEFAULT_WORKSPACE:()=>m,InvalidWorkspaceNameError:()=>q,WORKSPACE_COLORS:()=>G,WORKSPACE_NAME_PATTERN:()=>n,WORKSPACE_SUBTREES:()=>p,WorkspaceMutationError:()=>K,activeProjectOf:()=>V,assertValidWorkspaceName:()=>s,assertWorkspaceRoots:()=>L,bindToCurrentWorkspace:()=>E,createWorkspace:()=>ac,deleteWorkspace:()=>ai,ensureWorkspaceDirs:()=>ak,getCurrentWorkspace:()=>C,getWorkspaceDataDir:()=>w,getWorkspaceDbDir:()=>x,getWorkspaceDir:()=>v,getWorkspaceMcpServersDir:()=>y,getWorkspaceUserdataDir:()=>z,getWorkspacesDir:()=>u,isValidWorkspaceName:()=>r,listWorkspaces:()=>Y,loadWorkspaceRoots:()=>U,normalizeWorkspaceName:()=>t,readWorkspaceMetadata:()=>N,remapLegacyDefaultWorkspacePath:()=>A,remapLegacyDefaultWorkspaceReference:()=>function a(b,c){let d=A(b,c);if(d!==b)return d;try{let a=new URL(b);if("file:"===a.protocol){let b=(0,k.fileURLToPath)(a),d=A(b,c);if(d!==b){let b=(0,k.pathToFileURL)(d);return b.search=a.search,b.hash=a.hash,b.href}}}catch{}let e=b.indexOf("=");if(e<=0||e===b.length-1)return b;let f=b.slice(0,e+1),g=b.slice(e+1),h="";g.length>=2&&('"'===g[0]||"'"===g[0])&&g.at(-1)===g[0]&&(h=g[0],g=g.slice(1,-1));let i=a(g,c);return i===g?b:`${f}${h}${i}${h}`},renameWorkspace:()=>af,runWithWorkspace:()=>D,sameFilesystemPath:()=>W,updateWorkspaceMetadata:()=>T,updateWorkspaceRoots:()=>ah,withWorkspaceNamespaceMutation:()=>ad,workspaceCacheKey:()=>F,workspaceColor:()=>I,workspaceColorIndex:()=>H,workspaceExists:()=>Z});var d=c(333873),e=c.n(d),f=c(79748),g=c.n(f),h=c(629021),i=c(584297),j=c(455511),k=c(379551),l=c(901984);let m="default-workspace",n=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,o=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i,p=["db","mcp-servers","userdata","snapshots","screenshots","recordings","browser-profile","bash-utils","artifacts"];class q extends Error{constructor(a){super(`Invalid workspace name: ${JSON.stringify(a)}. Workspace names must match /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/ and must not be a reserved Windows device name.`),this.code="INVALID_WORKSPACE_NAME",this.name="InvalidWorkspaceNameError",this.value=a}}function r(a){return"string"==typeof a&&n.test(a)&&!o.test(a)}function s(a){if(!r(a))throw new q(a);return a}function t(a){return null==a||"string"==typeof a&&""===a.trim()?m:s(a)}function u(){return e().join((0,l.ok)(),"workspaces")}function v(a){let b=t(a),c=u(),d=e().resolve(c,b),f=e().relative(c,d);if(""===f||f.startsWith("..")||e().isAbsolute(f))throw new q(a);return d}function w(a){return v(a??C())}function x(a){return e().join(w(a),"db")}function y(a){return e().join(w(a),"mcp-servers")}function z(a){return e().join(w(a),"userdata")}function A(a,b){if("string"!=typeof a||!e().isAbsolute(a)||C()!==m)return a;let c=e().join((0,l.ok)(),b),d=e().relative(c,a);if(""===d||d.startsWith("..")||e().isAbsolute(d))return a;let[f]=d.split(e().sep);if(!f)return a;let g=e().join(c,f),i=e().join(w(m),b,f),j=!1;try{let a=(0,h.lstatSync)(g);j=!a.isDirectory()||a.isSymbolicLink()||(0,h.readdirSync)(g).length>0}catch(a){"ENOENT"!==a.code&&(j=!0)}let k=!1;try{let a=(0,h.lstatSync)(i);k=!a.isSymbolicLink()&&(a.isDirectory()||a.isFile())}catch{k=!1}return j||!k?a:e().join(w(m),b,d)}function B(){return global.__flujo_workspace_als||(global.__flujo_workspace_als=new i.AsyncLocalStorage),global.__flujo_workspace_als}function C(){let a=B().getStore();return a&&r(a)?a:m}function D(a,b){let c=t(a);return B().run(c,b)}function E(a){let b=C();return(...c)=>D(b,()=>a(...c))}function F(...a){return[C(),...a].join("\0")}let G=["#6656E8","#10A8C3","#2E9E5B","#D2761B","#C2417E","#7A57C9","#1F86D0","#B4453A"];function H(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b%G.length}function I(a){return a===m?G[0]:G[H(a)]}let J=".workspace.json";class K extends Error{constructor(a,b){super(b),this.code=a,this.name="WorkspaceMutationError"}}function L(a){if(!Array.isArray(a))throw new K("WORKSPACE_INVALID_ROOTS","Workspace folders must be a list.");let b=function(a){if(!Array.isArray(a))return[];let b=[],c=new Set;for(let d of a.slice(0,64)){if("string"!=typeof d)continue;let a=d.trim();if(!a||a.length>4096||!e().isAbsolute(a))continue;let f=e().normalize(a),g="win32"===process.platform?f.toLowerCase():f;c.has(g)||(c.add(g),b.push(f))}return b}(a);if(b.length!==a.length)throw new K("WORKSPACE_INVALID_ROOTS","Workspace folders must be unique absolute filesystem paths.");return b}async function M(a){try{let b=JSON.parse(await g().readFile(e().join(a,J),"utf8"));return b&&"object"==typeof b&&!Array.isArray(b)?b:{}}catch(a){if("ENOENT"===a.code)return{};throw a}}async function N(a){return M(v(t(a??C())))}let O=globalThis,P=O.__flujoWorkspaceMetadataWritesV1??=new Map,Q=new Set(["EPERM","EBUSY","EACCES"]);async function R(a,b){for(let c=1;;c+=1)try{await g().rename(a,b);return}catch(b){let a=b.code;if(c>=15||!a||!Q.has(a))throw b;await new Promise(a=>setTimeout(a,Math.min(100,5*2**(c-1))+10*Math.random()))}}async function S(a){try{return await M(a)}catch(a){if(a instanceof SyntaxError)return{};throw a}}async function T(a,b){let d=s(a),f=(P.get(d)??Promise.resolve()).catch(()=>void 0).then(async()=>{let{withWorkspaceMutation:a}=await Promise.resolve().then(c.bind(c,492093));return a(async()=>{let a=await ab(d),c=await S(a),f=b(c);if(f===c)return c;let h=e().join(a,J),i=e().join(a,`${J}.${process.pid}.${(0,j.randomUUID)()}.tmp`);await g().writeFile(i,`${JSON.stringify(f,null,2)}
57
- `,{encoding:"utf8",flag:"wx"});try{await R(i,h)}catch(a){throw await g().rm(i,{force:!0}),a}return f},d)});P.set(d,f);try{return await f}finally{P.get(d)===f&&P.delete(d)}}async function U(a){return L((await N(a)).roots??[])}function V(a,b){let c="string"==typeof a.activeProject?a.activeProject:void 0;return void 0===c?void 0:b.find(a=>W(a,c))}function W(a,b){let c=e().resolve(a),d=e().resolve(b);return"win32"===process.platform?c.toLowerCase()===d.toLowerCase():c===d}async function X(a){let b=await N(a),c=L(b.roots??[]);return{name:a,color:I(a),isDefault:a===m,roots:c,activeProject:V(b,c)}}async function Y(){let a=u(),b=new Set([m]),c=[];try{c=await g().readdir(a,{withFileTypes:!0})}catch(a){if("ENOENT"===a.code)c=[];else throw a}let d=new Map;for(let a of c){if(!r(a.name))continue;let b=a.name.toLowerCase(),c=d.get(b)??[];c.push(a.name),d.set(b,c)}for(let a of c)if(r(a.name)&&!((d.get(a.name.toLowerCase())?.length??0)>1)){if(a.isDirectory()){b.add(a.name);continue}if(a.isSymbolicLink())continue}return Promise.all([...b].sort((a,b)=>a===m?-1:b===m?1:a.localeCompare(b)).map(X))}async function Z(a){if(!r(a))return!1;try{let b=(await g().readdir(u(),{withFileTypes:!0})).filter(b=>r(b.name)&&b.name.toLowerCase()===a.toLowerCase());if(1!==b.length||b[0].name!==a)return!1;let c=await g().lstat(v(a));return c.isDirectory()&&!c.isSymbolicLink()}catch(a){if("ENOENT"===a.code)return!1;throw a}}async function $(a,b){let c=await g().lstat(a);if(!c.isDirectory()||c.isSymbolicLink())throw Error(`${b} must be a real directory, not a file, symlink, or junction: ${a}`)}async function _(a,b){try{await $(a,b)}catch(c){if("ENOENT"!==c.code)throw c;await g().mkdir(a,{recursive:!0}),await $(a,b)}}async function aa(){let a=(0,l.ok)(),b=u();return await _(a,"FLUJO data root"),await _(b,"Workspaces root"),b}async function ab(a){let b,c,d=s(a),f=u();try{b=await g().readdir(f)}catch(a){if("ENOENT"===a.code)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}let h=b.filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase());if(1!==h.length||h[0]!==d)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist or is ambiguous on disk.`);let i=v(d);try{c=await g().lstat(i)}catch(a){if("ENOENT"===a.code)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}if(!c.isDirectory()||c.isSymbolicLink())throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is not a managed directory.`);let[j,k]=await Promise.all([g().realpath(f),g().realpath(i)]),l=e().relative(j,k);if(""===l||l.startsWith("..")||e().isAbsolute(l))throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is outside the managed workspace root.`);return i}async function ac(a){return ad(()=>ae(a))}async function ad(a){let b=C(),{withWorkspaceRuntimeLock:d}=await c.e(79504).then(c.bind(c,779504));return D(m,()=>d("workspace-namespace",()=>D(b,a)))}async function ae(a){let b=s(a);if(b===m)throw new K("WORKSPACE_ALREADY_EXISTS",`Workspace ${JSON.stringify(m)} already exists.`);let d=await aa();if((await g().readdir(d)).filter(a=>r(a)&&a.toLowerCase()===b.toLowerCase()).length>0)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);let e=v(b);try{await g().mkdir(e)}catch(a){if("EEXIST"===a.code)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);throw a}try{await ak(b);let{migrateShippedMcpServers:a}=await Promise.all([c.e(34679),c.e(4423)]).then(c.bind(c,4423));await D(b,()=>a())}catch(a){throw await g().rm(e,{recursive:!0,force:!0}),a}return X(b)}async function af(a,b){return ad(()=>ag(a,b))}async function ag(a,b){let c=s(a),d=s(b);if(c===m||d===m)throw new K("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be renamed or replaced.");if(c===d)return X(c);if(c.toLowerCase()===d.toLowerCase())throw new K("WORKSPACE_ALREADY_EXISTS","Case-only workspace renames are not supported.");let e=await ab(c),f=u();if((await g().readdir(f)).filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase()).length>0)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);try{await g().rename(e,v(d))}catch(a){if("EEXIST"===a.code)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);throw a}return X(d)}async function ah(a,b){let c=s(a),d=L(b);return await T(c,a=>({...a,roots:d})),X(c)}async function ai(a){return ad(()=>aj(a))}async function aj(a){let b=s(a);if(b===m)throw new K("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be deleted.");let d=await ab(b),{stopAndDrainPersonaGoalRuntime:e}=await Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(54045),c.e(77030),c.e(34679),c.e(95260),c.e(79504),c.e(49366),c.e(55328),c.e(74858),c.e(52152),c.e(42862),c.e(81300),c.e(80314),c.e(89374),c.e(77281)]).then(c.bind(c,389374));await D(b,()=>e());let{mcpService:f}=await Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(34679),c.e(79504),c.e(49366),c.e(74858),c.e(52152),c.e(81300),c.e(80314)]).then(c.bind(c,464621)),h=await D(b,()=>f.disconnectAll("workspace deletion")),i=new Set(h.failed);for(let a of h.shutdownReceipts)("unknown"===a.exitOutcome||a.isolation?.cleanupOutcome==="unknown")&&i.add(a.serverName);if(i.size>0)throw Error(`Cannot delete workspace while ${i.size} MCP server(s) remain open.`);for(let a=0;a<5;a++)try{await g().rm(d,{recursive:!0,force:!0});return}catch(c){let b=c.code;if(4!==a&&("EBUSY"===b||"EPERM"===b)){let b=100*Math.pow(2,a);await new Promise(a=>setTimeout(a,b));continue}throw c}}async function ak(a){let b=v(a),c=await aa(),d=e().basename(b),f=(await g().readdir(c)).filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase());if(f.some(a=>a!==d)||f.length>1)throw Error(`Workspace name ${JSON.stringify(d)} conflicts with a case alias on disk: `+f.join(", "));await _(b,`Workspace ${d}`);let h=await g().realpath(c),i=await g().realpath(b),j=e().relative(h,i);if(""===j||j.startsWith("..")||e().isAbsolute(j))throw Error(`Workspace directory escapes the workspaces root: ${b}`);for(let a of p){let c=e().join(b,a);await _(c,`Workspace subtree ${a}`)}return b}},259994:(a,b,c)=>{c.d(b,{$:()=>f,b:()=>i});var d=c(973024),e=c(504573);class f extends Error{constructor(a,b){super("SIZE_LIMIT"===a?"File exceeds the size limit.":"File is unsafe or changed while being read."),this.code=a,this.detail=b,this.name="PlainFileReadError"}}function g(a,b){for(let c of["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"])if(a[c]!==b[c])return c}function h(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}async function i(a,b={}){b.signal?.throwIfAborted();let c=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let i=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===i[0].status)throw i[0].reason;if("rejected"===i[1].status)throw i[1].reason;let j=i[0].value,k=i[1].value;if(!j.isFile()||!k.isFile()||k.isSymbolicLink()||j.nlink!==BigInt(1)||!h(j,k)||b.expected&&!h(b.expected,j)||b.ownerOnly&&"win32"!==process.platform&&(j.mode&BigInt(63))!==BigInt(0)){let a=g(j,k),c=b.expected&&g(b.expected,j),d=!j.isFile()||!k.isFile()||k.isSymbolicLink()?"not-plain-file":j.nlink!==BigInt(1)?"hard-linked":a?`descriptor-path:${a}`:c?`expected:${c}`:"permissions";throw new f("UNSAFE_FILE",d)}let l=Math.min(b.maxBytes??e.constants.MAX_LENGTH-1,e.constants.MAX_LENGTH-1);if(!Number.isSafeInteger(l)||l<0||j.size<BigInt(0)||j.size>BigInt(l))throw new f("SIZE_LIMIT");await b.verifyPath?.();let m=Number(j.size)+1,n=Buffer.alloc(b.consume?Math.min(65536,m):m),o=0;for(;o<m;){b.signal?.throwIfAborted();let a=b.consume?0:o,{bytesRead:d}=await c.read(n,a,Math.min(m-o,b.consume?n.length:1048576),o);if(0===d)break;b.consume&&await b.consume(n.subarray(0,d)),o+=d}if(BigInt(o)!==j.size)throw new f("FILE_CHANGED");let p=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===p[0].status)throw p[0].reason;if(!h(j,p[0].value))throw new f("FILE_CHANGED");if("rejected"===p[1].status)throw p[1].reason;let q=p[1].value;if(q.isSymbolicLink()||!h(j,q))throw new f("FILE_CHANGED");return await b.verifyPath?.(),b.signal?.throwIfAborted(),b.consume?Buffer.alloc(0):n.subarray(0,o)}finally{await c.close()}}},268962:(a,b,c)=>{c.d(b,{Tm:()=>j,af:()=>l,bV:()=>k});var d=c(973024),e=c(176760),f=c.n(e),g=c(189663);let h=["models","mcp_servers","global_env_vars","registry_account","encryption_key"];class i extends Error{constructor(){super("Credential migration is pending. Resume or roll back using its recovery passphrase."),this.name="CredentialMigrationPendingError"}}async function j(a){try{return await d.promises.lstat(f().join((0,g.getWorkspaceDataDir)(a),"db",".credential-migration.pending")),!0}catch(a){return"ENOENT"!==a.code}}async function k(){if(await j())throw new i}async function l(a){let b=f().basename(a);h.some(a=>b===`${a}.json`)&&await k()}},295489:(a,b,c)=>{c.d(b,{K9:()=>B,RN:()=>C,bH:()=>A});var d=c(16698),e=c(848161),f=c.n(e),g=c(257975),h=c(178877),i=c(377424),j=c(189663);let k=new Set(["emit","abortSignal","executionAuthority","executionExtensionContext","behaviorToolRegistry"]);class l extends Error{constructor(a){super("FLOW_RUN_BUSY"===a?"Flow execution capacity is busy. Retry after active work finishes.":"FLOW_RUN_INPUT_TOO_LARGE"===a?"Flow input exceeds safe admission limits. Reduce the input before retrying.":"Insufficient memory to admit another Flow execution. Retry after active work finishes."),this.code=a,this.retryAfterSeconds=5,this.name="FlowRunPressureError",this.status="FLOW_RUN_BUSY"===a?429:"FLOW_RUN_INPUT_TOO_LARGE"===a?413:503}}let m=globalThis,n=m.__flujoFlowRunAdmission??={active:0,bytes:0,workspaces:new Map,reservations:new WeakMap,scope:new d.AsyncLocalStorage,rejectedBusy:0,rejectedMemory:0,rejectedInput:0};function o(a,b){let c=Number(process.env[`FLUJO_RUN_ADMISSION_${a}`]);return Number.isSafeInteger(c)&&c>0?c:b}function p(){let a,b;return{maxProcessRuns:o("MAX_PROCESS_RUNS",64),maxWorkspaceRuns:o("MAX_WORKSPACE_RUNS",32),maxConversationRuns:o("MAX_CONVERSATION_RUNS",4),maxProcessBytes:o("MAX_PROCESS_BYTES",0x20000000),maxWorkspaceBytes:o("MAX_WORKSPACE_BYTES",0x10000000),maxInputBytes:o("MAX_INPUT_BYTES",0x4000000),maxRssBytes:o("MAX_RSS_BYTES",(a=f().totalmem(),Number.isFinite(b="function"==typeof process.constrainedMemory?process.constrainedMemory():0)&&b>0&&b<a&&(a=b),Math.max(0x80000000,Math.floor(.75*a))))}}function q(a){throw"FLOW_RUN_BUSY"===a?n.rejectedBusy++:"FLOW_RUN_MEMORY"===a?n.rejectedMemory++:n.rejectedInput++,new l(a)}(0,i.rF)("run",n.bytes);let r=Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get,s="u"<typeof SharedArrayBuffer?void 0:Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype,"byteLength").get,t=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype),"buffer").get,u=Object.getOwnPropertyDescriptor(DataView.prototype,"buffer").get;function v(a,b){if(g.types.isProxy(a))return!1;let c=Object.getOwnPropertyDescriptor(a,"constructor");return!(!c||!("value"in c)||"function"!=typeof c.value||g.types.isProxy(c.value))&&Object.getOwnPropertyDescriptor(c.value,"prototype")?.value===a&&Function.prototype.toString.call(c.value)===Function.prototype.toString.call(b)}function w(a){return null!==a&&!g.types.isProxy(a)&&null===Object.getPrototypeOf(a)&&v(a,Object)}function x(a){(!a||"object"!=typeof a||g.types.isProxy(a))&&q("FLOW_RUN_INPUT_TOO_LARGE");let b=Object.getOwnPropertyDescriptor(a,"conversationId");return!b||"value"in b&&(void 0===b.value||"string"==typeof b.value)||q("FLOW_RUN_INPUT_TOO_LARGE"),b?.value}function y(a,b){var c;let d,e,f,h,i,j=Math.max(1048576,(c=b.maxInputBytes,d=0,e=0,f=new Set,h=a=>{(!Number.isSafeInteger(d+=a)||d>c)&&q("FLOW_RUN_INPUT_TOO_LARGE")},(i=(a,b)=>{var c,d;let j;if((++e>1e5||b>64)&&q("FLOW_RUN_INPUT_TOO_LARGE"),"string"==typeof a)return void h(24+2*a.length);if(null==a||"number"==typeof a||"boolean"==typeof a)return void h(8);if(("object"!=typeof a||g.types.isProxy(a))&&q("FLOW_RUN_INPUT_TOO_LARGE"),f.has(a))return;if(f.add(a),h(64),g.types.isArrayBuffer(a))return void h(r.call(a));if(g.types.isSharedArrayBuffer(a))return void h(s.call(a));if(ArrayBuffer.isView(a))return void i((g.types.isDataView(a)?u:t).call(a),b+1);let l=Array.isArray(a);for(let e in c=a,d=l,null===(j=Object.getPrototypeOf(c))||!g.types.isProxy(j)&&(d?Array.isArray(j)&&v(j,Array)&&w(Object.getPrototypeOf(j)):w(j))||q("FLOW_RUN_INPUT_TOO_LARGE"),l&&(a.length>1e5&&q("FLOW_RUN_INPUT_TOO_LARGE"),h(8*a.length)),a){if(!Object.hasOwn(a,e)||0===b&&k.has(e))continue;h(16+2*e.length);let c=Object.getOwnPropertyDescriptor(a,e);"value"in c||q("FLOW_RUN_INPUT_TOO_LARGE"),i(c.value,b+1)}})(a,0),4*d));return Number.isSafeInteger(j)||q("FLOW_RUN_INPUT_TOO_LARGE"),j}function z(a,b,c,d){let e=n.bytes-c+a,f=(b?.bytes??0)-c+a,g=(0,h.getHeapStatistics)(),j=process.memoryUsage().rss,k=g.heap_size_limit-g.used_heap_size-Math.ceil(.2*g.heap_size_limit)-0x4000000,l=(0,i.XF)("run",e);(e>d.maxProcessBytes||f>d.maxWorkspaceBytes||!Number.isFinite(k)||l>k||!Number.isFinite(j)||j+l>d.maxRssBytes)&&q("FLOW_RUN_MEMORY")}function A(a){let b=n.scope.getStore(),c=b&&n.reservations.get(b);if(!b||c?.claimed){let b,c,d,e,f,g,h,k,l=(b=(0,j.getCurrentWorkspace)(),c=x(a),d=p(),e=n.workspaces.get(b),(n.active>=d.maxProcessRuns||(e?.active??0)>=d.maxWorkspaceRuns||void 0!==c&&(e?.conversations.get(c)??0)>=d.maxConversationRuns)&&q("FLOW_RUN_BUSY"),z(f=y(a,d),e,0,d),e||(e={active:0,bytes:0,conversations:new Map},n.workspaces.set(b,e)),g=e,h={workspace:b,conversationId:c,bytes:f,open:!0,scoped:!1,claimed:!1},k=Object.freeze({release:()=>{if(h.open){if(h.open=!1,n.active--,n.bytes-=h.bytes,(0,i.rF)("run",n.bytes),g.active--,g.bytes-=h.bytes,void 0!==c){let a=g.conversations.get(c)-1;a?g.conversations.set(c,a):g.conversations.delete(c)}g.active||n.workspaces.delete(b)}}}),n.reservations.set(k,h),n.active++,n.bytes+=f,(0,i.rF)("run",n.bytes),g.active++,g.bytes+=f,void 0!==c&&g.conversations.set(c,(g.conversations.get(c)??0)+1),k);return n.reservations.get(l).claimed=!0,l}if(!c?.open)throw Error("Flow run admission scope has expired.");return B(b,a),c.claimed=!0,b}function B(a,b){let c=a&&n.reservations.get(a);if(!c?.open)throw Error("Flow run admission permit has expired.");if(c.workspace!==(0,j.getCurrentWorkspace)()||c.conversationId!==x(b))throw Error("Flow run admission does not match the current workspace and conversation.");let d=p(),e=Math.max(c.bytes,y(b,d)),f=n.workspaces.get(c.workspace);z(e,f,c.bytes,d);let g=e-c.bytes;n.bytes+=g,f.bytes+=g,c.bytes=e,(0,i.rF)("run",n.bytes)}function C(){let a=n.workspaces.get((0,j.getCurrentWorkspace)());return{activeRuns:n.active,reservedBytes:n.bytes,activeWorkspaces:n.workspaces.size,workspaceActiveRuns:a?.active??0,workspaceReservedBytes:a?.bytes??0,workspaceConversations:a?.conversations.size??0,rejectedBusy:n.rejectedBusy,rejectedMemory:n.rejectedMemory,rejectedInput:n.rejectedInput,...p(),minReservationBytes:1048576,inputExpansion:4}}},302642:(a,b,c)=>{c.d(b,{g:()=>g});var d=c(374948);let e=(0,c(406680).h)("frontend/services/flow/index");class f{async loadFlows(a={}){e.debug("loadFlows: Entering method");try{if(this.flowsCache&&!a.refresh)return e.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let b=await fetch("/api/flow");if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to load flows")}let c=await b.json();return e.debug("loadFlows: Loaded flows from API",{count:c.length}),this.flowsCache=c,c}catch(a){return e.warn("loadFlows: Failed to load flows:",a),[]}}async suggestToolsForStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"suggest-tools",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not suggest connected tools.");return c}async generateNameForFlow(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"generate-name",...a})}),c=await b.json().catch(()=>null);if(!b.ok||"string"!=typeof c?.name)throw Error(c?.error||"Could not generate a workflow name.");return{name:c.name}}async applyToolsToStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply-tools",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not connect the approved tools.");return c.flow}async suggestAgentsForStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"suggest-agents",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not suggest connected agents.");return c}async applyAgentsToStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply-agents",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not connect the approved agents.");return c.flow}async improvePromptForStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"improve-prompt",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not improve this prompt.");return c}async checkPlausibility(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check-plausibility",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not check flow plausibility.");return c}async getFlow(a){e.debug("getFlow: Entering method",{flowId:a});try{if(this.flowsCache){let b=this.flowsCache.find(b=>b.id===a);if(b)return e.debug("getFlow: Using cached flow",{flowId:a}),b}let b=await fetch(`/api/flow/${encodeURIComponent(a)}`);if(!b.ok){if(404===b.status)return e.debug(`getFlow: Flow ${a} not found`),null;let c=await b.json();throw Error(c.error||`Failed to get flow: ${a}`)}let c=await b.json();return e.debug("getFlow: Retrieved flow from API",{flowId:a}),c}catch(b){return e.warn(`getFlow: Failed to get flow ${a}:`,b),null}}async createModelAgent(a){let b=await fetch("/api/flow/model-agent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json().catch(()=>null);if(!b.ok||"string"!=typeof c?.flowId||"string"!=typeof c?.name)throw Error(c?.error||"Could not create the agent.");return this.flowsCache=null,{flowId:c.flowId,name:c.name}}async addFlow(a){e.debug("addFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to add flow"}}let c=await b.json();return this.flowsCache&&this.flowsCache.push(c),e.debug("addFlow: Flow added successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("addFlow: Failed to add flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to add flow"}}}async generateFlow(a,b,c){e.debug("generateFlow: Entering method",{modelId:b,allowInstall:c?.allowInstall,allowSubflows:c?.allowSubflows,maxDepth:c?.maxDepth});try{let d=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:a,modelId:b,allowInstall:c?.allowInstall===!0,allowSubflows:c?.allowSubflows!==!1,..."number"==typeof c?.maxDepth?{maxDepth:c.maxDepth}:{}})}),f=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:f?.error||"Failed to generate flow"};let g=Array.isArray(f.flows)&&f.flows.length>0?f.flows:[{flow:f.flow,validation:f.validation}];return e.debug("generateFlow: Draft generated",{flowId:f.flow?.id,flowCount:g.length,attempts:f.attempts,errorCount:f.validation?.errorCount,installedServers:f.installedServers?.length??0}),{success:!0,flow:f.flow,validation:f.validation,flows:g,rootFlowId:f.rootFlowId??f.flow?.id,attempts:f.attempts,installedServers:f.installedServers??[]}}catch(a){return e.warn("generateFlow: Failed to generate flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to generate flow"}}}async improveFlow(a,b,c,d){e.debug("improveFlow: Entering method",{flowId:a?.id,modelId:c,allowInstall:d?.allowInstall});try{let f=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:a,relatedFlows:d?.relatedFlows,description:b,modelId:c,allowInstall:d?.allowInstall===!0})}),g=await f.json().catch(()=>null);if(!f.ok)return{success:!1,error:g?.error||"Failed to improve flow"};return e.debug("improveFlow: Draft revised",{flowId:g.flow?.id,attempts:g.attempts,errorCount:g.validation?.errorCount,installedServers:g.installedServers?.length??0}),{success:!0,flow:g.flow,validation:g.validation,flows:Array.isArray(g.flows)&&g.flows.length>0?g.flows:[{flow:g.flow,validation:g.validation}],rootFlowId:g.rootFlowId??g.flow?.id,attempts:g.attempts,installedServers:g.installedServers??[]}}catch(a){return e.warn("improveFlow: Failed to improve flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to improve flow"}}}async convertProcessToSubflow(a,b,c,d){try{let e=await fetch(`/api/flow/${encodeURIComponent(a.id)}/convert-process-to-subflow`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({parentFlow:a,childFlow:b,processNodeId:c,expectedUpdatedAt:d})}),f=await e.json().catch(()=>null);if(!e.ok)return{success:!1,error:f?.error||"Failed to convert Process to Subflow."};let g=f.parentFlow,h=f.childFlow;if(this.flowsCache){let a=this.flowsCache.findIndex(a=>a.id===g.id);a>=0?this.flowsCache[a]=g:this.flowsCache.push(g),this.flowsCache.some(a=>a.id===h.id)||this.flowsCache.push(h)}return{success:!0,parentFlow:g,childFlow:h}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to convert Process to Subflow."}}}async updateFlow(a){e.debug("updateFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch(`/api/flow/${encodeURIComponent(a.id)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to update flow"}}let c=await b.json();if(this.flowsCache){let b=this.flowsCache.findIndex(b=>b.id===a.id);b>=0?this.flowsCache[b]=c:this.flowsCache.push(c)}return e.debug("updateFlow: Flow updated successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("updateFlow: Failed to update flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to update flow"}}}async deleteFlow(a){e.debug("deleteFlow: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}`,{method:"DELETE"});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(b=>b.id!==a)),e.debug("deleteFlow: Flow deleted successfully",{flowId:a}),{success:!0}}catch(a){return e.warn("deleteFlow: Failed to delete flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to delete flow"}}}async listFlowVersions(a){e.debug("listFlowVersions: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}/versions`);if(!b.ok){let a=await b.json().catch(()=>null);throw Error(a?.error||"Failed to list flow versions")}let c=await b.json();return Array.isArray(c.versions)?c.versions:[]}catch(b){return e.warn(`listFlowVersions: Failed for flow ${a}:`,b),[]}}async getFlowVersion(a,b){e.debug("getFlowVersion: Entering method",{flowId:a,versionId:b});try{let c=await fetch(`/api/flow/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}`);if(!c.ok){if(404===c.status)return null;let a=await c.json().catch(()=>null);throw Error(a?.error||"Failed to get flow version")}return await c.json()}catch(c){return e.warn(`getFlowVersion: Failed for ${a}/${b}:`,c),null}}createNode(a,b){return e.debug("createNode: Entering method",{type:a,position:b}),{id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:"process"===a?{inputMode:"full-history"}:"static"===a?{entries:[]}:"subflow"===a?{resultPresentation:"separate",sessionScope:"per-key"}:{}}}}createStartNode(){return{id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(a="NewFlow"){e.debug("createNewFlow: Entering method",{name:a});let b=Date.now();return{id:(0,d.A)(),name:a,createdAt:b,updatedAt:b,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(a,b){return e.debug("createHistoryEntry: Entering method"),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){return e.debug("generateSampleFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let g=new f},304927:(a,b,c)=>{c.d(b,{ln:()=>P,N2:()=>N,bB:()=>al,U3:()=>af,Vx:()=>S,al:()=>ad,JV:()=>ah,$G:()=>an,pL:()=>am,av:()=>ao,EI:()=>ak,loadItem:()=>L,H0:()=>K,Jk:()=>ac,w5:()=>ap,l_:()=>ai,Vt:()=>aj,VH:()=>J,Gl:()=>ae,c0:()=>M,Zf:()=>I});var d=c(34762),e=c(629021),f=c(333873),g=c.n(f),h=c(977598),i=c(749527),j=c(259994),k=c(973024),l=c(176760),m=c.n(l);function n(a,b){let c=m().relative(a,b);if(!c||c.startsWith("..")||m().isAbsolute(c))throw Error("Persona record path escapes its storage root.");return c}function o(a){return a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)}async function p(a){try{return await k.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}async function q(a,b){let c=[a];for(let d of n(a,b).split(m().sep).slice(0,-1))c.push(m().join(c[c.length-1],d));let d=[];for(let a of c){let[b,c]=await Promise.allSettled([p(a),k.promises.realpath(a)]);if("rejected"===b.status)throw b.reason;let e=b.value;if(!e)return null;if(!e.isDirectory()||e.isSymbolicLink())throw Error("Persona record parent is not a link-free directory.");if("rejected"===c.status)throw c.reason;let f=c.value;d.length&&n(d[0].canonical,f),d.push({filename:a,stats:e,canonical:f})}return d}async function r(a){let b=await Promise.allSettled(a.flatMap(a=>[k.promises.lstat(a.filename,{bigint:!0}),k.promises.realpath(a.filename)]));for(let[c,d]of a.entries()){let a=b[2*c],e=b[2*c+1];if("rejected"===a.status)throw a.reason;let f=a.value;if(!f.isDirectory()||f.isSymbolicLink()||f.dev!==d.stats.dev||f.ino!==d.stats.ino||f.mode!==d.stats.mode||f.uid!==d.stats.uid||f.gid!==d.stats.gid)throw Error("Persona record parent changed during its read.");if("rejected"===e.status)throw e.reason;if(e.value!==d.canonical)throw Error("Persona record parent changed during its read.")}}async function s(a,b){let c=m().resolve(b),d=m().resolve(a);n(c,d);let e=await q(c,d);if(!e)return null;let f=await p(d);if(!f)return null;if(!o(f))throw new j.$("UNSAFE_FILE");for(let a=0;a<3;a++){await r(e);try{return{content:(await (0,j.b)(d,{expected:f,verifyPath:()=>r(e)})).toString("utf8"),mtimeMs:Number(f.mtimeNs)/1e6,sizeBytes:Number(f.size)}}catch(c){var g;if(!(c instanceof j.$)||"SIZE_LIMIT"===c.code||a+1===3)throw c;await r(e);let b=await p(d);if(!b||!(o(g=f)&&o(b))||g.ino===b.ino||g.dev!==b.dev||g.uid!==b.uid||g.gid!==b.gid||g.mode!==b.mode)throw c;f=b}}throw new j.$("FILE_CHANGED")}class t extends Error{constructor(a,b){super(`Persona record ${JSON.stringify(a)} does not match requested Persona ${JSON.stringify(b)}.`),this.code="PERSONA_SHARD_IDENTITY_MISMATCH",this.name="PersonaShardIdentityError"}}c(320108);var u=c(43521),v=c(901984),w=c(189663),x=c(268962),y=c(492093),z=c(76528),A=c(808552);let B=(0,u.h)("utils/storage/backend"),C=()=>g().join((0,w.getWorkspaceDataDir)(),"db"),D=a=>g().join(C(),`${a}.json`);async function E(){let a=C(),b=g().join((0,v.ok)(),".next","storage");try{await e.promises.access(a),B.verbose(`Storage directory exists: ${a}`)}catch{B.debug(`Creating storage directory: ${a}`),await e.promises.mkdir(a,{recursive:!0})}try{await e.promises.access(b),B.warn(`Old storage directory found: ${b}. This may cause data inconsistency issues.`)}catch{}}let F=new Map,G=new Set(["EPERM","EBUSY","EACCES"]);async function H(a,b,c){for(let d=1;;d++)try{await c(),await e.promises.rename(a,b);return}catch(c){let a=c.code;if(d>=15||!a||!G.has(a))throw c;let b=Math.min(100,5*2**(d-1));await new Promise(a=>setTimeout(a,b+10*Math.random()))}}async function I(a,b,c){let f,i=!1,j=async a=>{try{await a()}catch(a){throw i=!0,f=a,a}},k=a=>"string"==typeof b?a():(0,A.Sc)(a);await (0,x.af)(a),await (0,y.withWorkspaceMutation)(async()=>{let l,m;await (0,x.af)(a),await j(()=>(0,y.qy)());let n=g().dirname(a);await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)())),await k(()=>e.promises.mkdir(n,{recursive:!0}));let o=await k(()=>e.promises.lstat(n,{bigint:!0})),p=await k(()=>e.promises.realpath(n));(!o.isDirectory()||o.isSymbolicLink())&&await k(async()=>{throw Error("Atomic write parent is unsafe")});let q=`${a}.tmp.${(0,h.randomUUID)()}`,r=!1,s=!1,t=!1,u=!1;try{await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()));let f=await e.promises.open(q,"wx",384);r=!0;try{if(l=await f.stat({bigint:!0}),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)())),"string"==typeof b)await f.writeFile(b);else{let a=0,c=(0,h.createHash)("sha256");for(let d of(0,z.gm)([b.value],!1)){c.update(d);let b=0;for(;b<d.length;){let c=await f.write(d,b,d.length-b,a+b);if(!c.bytesWritten)throw Error("Conversation snapshot made no write progress");b+=c.bytesWritten}a+=d.length}m=c.digest("hex")}await j(()=>(0,y.qy)()),await f.sync(),await j(()=>(0,y.qy)()),l=await f.stat({bigint:!0})}catch(a){try{await f.close()}catch{u=!0,"string"!=typeof b&&(0,z.B_)("snapshot descriptor closure is uncertain",void 0,!0)}throw a}if(!u)try{await f.close()}catch(a){if(u=!0,"string"!=typeof b)throw(0,z.B_)("snapshot descriptor closure is uncertain",a,!0);throw a}await H(q,a,async()=>{let[a,b,f]=await Promise.allSettled([e.promises.lstat(q,{bigint:!0}),e.promises.lstat(n,{bigint:!0}),e.promises.realpath(n)]);if("rejected"===a.status)throw a.reason;if("rejected"===b.status)throw b.reason;if("rejected"===f.status)throw f.reason;let g=a.value,h=b.value,i=f.value;if(!l||!g.isFile()||g.isSymbolicLink()||g.nlink!==BigInt(1)||g.dev!==l.dev||g.ino!==l.ino||g.size!==l.size||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid||!h.isDirectory()||h.isSymbolicLink()||h.dev!==o.dev||h.ino!==o.ino||h.mode!==o.mode||h.uid!==o.uid||h.gid!==o.gid||i!==p)throw Error("Atomic write file or parent changed");await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)())),s=!0}),r=!1,t=!0,"string"!=typeof b&&(0,z.oK)(),await j(()=>(0,y.qy)())}catch(c){if("string"!=typeof b&&s&&!t&&l){let b=async a=>{try{return await e.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return;throw a}};try{let c=await e.promises.lstat(n,{bigint:!0}),d=await e.promises.realpath(n);if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==o.dev||c.ino!==o.ino||d!==p)throw Error("Snapshot commit parent changed");let f=await b(a),g=await b(q),i=a=>a?.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===l.dev&&a.ino===l.ino&&a.size===l.size;if(i(f)){let b,c=await e.promises.open(a,e.constants.O_RDONLY|e.constants.O_NONBLOCK|(e.constants.O_NOFOLLOW??0));try{let b=await c.stat({bigint:!0});if(!i(b)||b.mtimeNs!==f.mtimeNs||b.ctimeNs!==f.ctimeNs)throw Error("Snapshot readback identity changed");let d=Buffer.alloc(65536),g=(0,h.createHash)("sha256"),j=0;for(;j<Number(l.size);){let{bytesRead:a}=await c.read(d,0,Math.min(d.length,Number(l.size)-j),j);if(!a)throw Error("Snapshot readback ended early");j+=a,g.update(d.subarray(0,a))}let k=await c.stat({bigint:!0}),n=await e.promises.lstat(a,{bigint:!0});if(!i(k)||k.mtimeNs!==b.mtimeNs||k.ctimeNs!==b.ctimeNs||!i(n)||n.mtimeNs!==k.mtimeNs||n.ctimeNs!==k.ctimeNs||g.digest("hex")!==m)throw Error("Snapshot readback bytes changed")}catch(a){throw b=a,a}finally{try{await c.close()}catch(c){let a=(0,z.B_)("snapshot readback descriptor closure is uncertain",c,!0);if(void 0===b)throw a}}(0,z.oK)(),r=!1}else if(!i(g)||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid)throw Error("Snapshot commit has no exclusive owned witness")}catch(b){throw(0,z.B_)("snapshot rename outcome requires reconciliation",b,!1,{destination:a,temporary:q,dev:String(l.dev),ino:String(l.ino),size:String(l.size)})}}if(r&&!u)try{let a=await e.promises.lstat(q,{bigint:!0});l&&a.isFile()&&!a.isSymbolicLink()&&a.dev===l.dev&&a.ino===l.ino&&await e.promises.unlink(q)}catch{}if(i&&c===f)throw c;await k(async()=>{throw c})}})}async function J(a,b,c){let d=D(a);if(a.startsWith("conversations/")){let e=a.slice(14);return P(e),(0,z.JN)((0,w.workspaceCacheKey)("conversation-publication",e),b,a=>(0,z.Sg)(()=>(0,y.withWorkspaceMutation)(()=>(0,A.MI)(e,()=>I(d,{conversation:!0,value:a},c)))))}await (0,x.af)(d),await (0,y.withWorkspaceMutation)(async()=>{let e=(0,w.workspaceCacheKey)("item",a),f=(F.get(e)??Promise.resolve()).catch(()=>{}).then(()=>I(d,JSON.stringify(b,null,2),c));F.set(e,f);try{await f,B.verbose(`Successfully saved item to: ${d}`)}catch(b){throw B.error(`Error saving item with key "${a}" to ${d}:`,b),b}finally{F.get(e)===f&&F.delete(e)}})}async function K(a,b){let c,d=D(a);await (0,x.af)(d),await E();try{c=await e.promises.readFile(d,"utf8")}catch(a){if("ENOENT"===a.code)return b;throw a}if(!c.trim())throw Error("Backup storage item is empty");return JSON.parse(c)}async function L(a,b){if(a.startsWith("conversations/"))return M(a.slice(14),async a=>void 0===a?b:a);await (0,x.af)(D(a));try{await E();let c=D(a),d=await e.promises.readFile(c,"utf-8");if(0===d.trim().length)return B.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return B.verbose(`Successfully loaded item from: ${c}`),a}catch(b){B.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,d),B.info(`Created backup of corrupted file at: ${a}`)}catch(a){B.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return B.verbose(`Item with key "${a}" not found at ${D(a)}, returning default.`),b;throw B.error(`CRITICAL: Error loading item with key "${a}" from ${D(a)}:`,c),c}}async function M(a,b,c={}){let d;c.signal?.throwIfAborted(),P(a);let f=D(`conversations/${a}`);await (0,x.af)(f),await E();try{d=await e.promises.lstat(f,{bigint:!0})}catch(a){if("ENOENT"===a.code)return(0,i.dw)(0,a=>b(void 0,a));throw a}let g=Number(d.size);return(0,i.dw)(g,async a=>{let g,h=(await (0,j.b)(f,{expected:d,signal:c.signal})).toString("utf8");if(c.signal?.throwIfAborted(),!h.trim())return b(void 0,a);try{g=JSON.parse(h)}catch(b){if(!(b instanceof SyntaxError))throw b;let a=`${f}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,h)}catch(a){B.error("Failed to back up corrupted conversation snapshot:",a)}throw Error(`Failed to parse JSON from ${f}. A backup has been created at ${a}. Original error: ${b.message}`)}return b(g,a)})}async function N(a){let b=D(a);await (0,x.af)(b),await (0,y.withWorkspaceMutation)(async()=>{await (0,x.af)(b);try{await e.promises.unlink(b),B.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?B.warn(`Error clearing item with key "${a}" at ${b}:`,c):B.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}})}let O=/^[A-Za-z0-9_-]{1,64}$/;function P(a){if("string"!=typeof a||!O.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let Q=a=>g().join(C(),a),R=(a,b)=>g().join(Q(a),`${b}.json`);async function S(a,b){P(b);try{let c=await e.promises.stat(R(a,b));return{mtimeMs:c.mtimeMs,sizeBytes:c.size}}catch(a){if("ENOENT"===a.code)return null;throw a}}let T=new Set(["persona-memories","persona-mailbox","persona-work-items","persona-activities","persona-lease-history"]);function U(a){if(!T.has(a))throw Error(`Unsupported Persona-sharded collection: ${JSON.stringify(a)}`)}function V(a,b){let c=g().relative(g().resolve(a),g().resolve(b));if(!c||c.startsWith("..")||g().isAbsolute(c))throw Error(`Persona shard path escapes its collection: ${b}`)}function W(a,b){return U(a),P(b),R(a,b)}function X(a,b,c){U(a),P(b),P(c);let d=Q(a),e=g().join(d,b,`${c}.json`);return V(d,e),e}async function Y(a){try{return await e.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function Z(a,b,c){U(a),P(b);let d=Q(a),f=g().join(d,b);V(d,f),c&&await e.promises.mkdir(d,{recursive:!0});let h=await Y(d);if(!h)return null;if(!h.isDirectory()||h.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${d}`);if(c)try{await e.promises.mkdir(f)}catch(a){if("EEXIST"!==a.code)throw a}let i=await Y(f);if(!i)return null;if(!i.isDirectory()||i.isSymbolicLink())throw Error(`Persona shard is not a link-free directory: ${f}`);let[j,k]=await Promise.all([e.promises.realpath(d),e.promises.realpath(f)]);return V(j,k),f}async function $(a){return s(a,C())}async function _(a){return(await $(a))?.content??null}function aa(a,b,c,d){let e;try{e=JSON.parse(a)}catch(a){throw Error(`Invalid JSON in Persona record ${JSON.stringify(`${b}/${c}/${d}`)}: `+a.message)}if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`Persona record ${JSON.stringify(d)} is not an object.`);let f=e;if(f.id!==d||f.personaId!==c)throw new t(d,c);return e}class ab extends Error{constructor(a,b,c){super(`Conflicting flat and sharded copies exist for ${JSON.stringify(`${a}/${b}/${c}`)}.`),this.collection=a,this.personaId=b,this.recordId=c,this.code="PERSONA_SHARD_COLLISION",this.name="PersonaShardCollisionError"}}async function ac(a,b,c,d,e){U(a),P(b),P(c);let f=await Z(a,b,!1),g=X(a,b,c),h=W(a,c),[i,j]=await Promise.all([f?_(g):Promise.resolve(null),e?.includeLegacy===!1?Promise.resolve(null):_(h)]);if(null!==i&&null!==j&&i!==j)throw new ab(a,b,c);let k=i??j;return null===k?d:aa(k,a,b,c)}async function ad(a,b,c){U(a),P(b),P(c);let d=await Z(a,b,!1),e=X(a,b,c),f=W(a,c),[g,h]=await Promise.all([d?$(e):Promise.resolve(null),$(f)]);if(g&&h&&g.content!==h.content)throw new ab(a,b,c);let i=g??h;return i?(aa(i.content,a,b,c),{mtimeMs:i.mtimeMs,sizeBytes:i.sizeBytes}):null}async function ae(a,b,c,f){if(U(a),P(b),P(c),f.id!==c||f.personaId!==b)throw Error("Persona-sharded save identity does not match its destination.");let g=X(a,b,c),h=W(a,c);await ai(`persona-shard/${a}/${b}/${c}`,async()=>{await Z(a,b,!0);let i=await _(h);null!==i&&aa(i,a,b,c),await I(g,JSON.stringify(f,null,2));try{await (0,d.QO)(),await e.promises.unlink(h)}catch(a){if("ENOENT"!==a.code)throw a}})}async function af(a,b,c){U(a),P(b),P(c);let d=X(a,b,c),f=W(a,c);await ai(`persona-shard/${a}/${b}/${c}`,async()=>{let g=await Z(a,b,!1),[h,i]=await Promise.all([g?_(d):Promise.resolve(null),_(f)]);null!==h&&aa(h,a,b,c),null!==i&&aa(i,a,b,c),await Promise.all([d,f].map(async a=>{try{await e.promises.unlink(a)}catch(a){if("ENOENT"!==a.code)throw a}}))})}async function ag(a,b){let c=await Z(a,b,!1);if(!c)return[];let d=(await e.promises.readdir(c)).sort(),f=[];for(let h of d){if(!h.endsWith(".json")||h.includes(".tmp.")||h.includes(".corrupted."))continue;let d=h.slice(0,-5);P(d);let i=g().join(c,h),k=await e.promises.lstat(i,{bigint:!0});if(!k.isFile()||k.isSymbolicLink())throw Error(`Persona shard item is not a regular link-free file: ${i}`);let l=(await (0,j.b)(i,{expected:k,verifyPath:async()=>{await Z(a,b,!1)}})).toString("utf8");f.push(aa(l,a,b,d))}return f}async function ah(a){U(a);let b=Q(a),c=await Y(b);if(!c)return[];if(!c.isDirectory()||c.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${b}`);let d=(await e.promises.readdir(b,{withFileTypes:!0})).sort((a,b)=>a.name.localeCompare(b.name)),f=new Map;for(let c of d){let d;if(c.isSymbolicLink())throw Error(`Persona collection contains a symbolic link: ${c.name}`);if(c.isDirectory()){for(let b of(P(c.name),await ag(a,c.name))){let d=JSON.stringify(b),e=f.get(b.id);if(e&&e.content!==d)throw new ab(a,c.name,b.id);f.set(b.id,{content:d,value:b})}continue}if(!c.isFile()||!c.name.endsWith(".json")||c.name.includes(".tmp.")||c.name.includes(".corrupted.")||c.name.endsWith(".bak"))continue;let h=c.name.slice(0,-5);P(h);let i=await e.promises.readFile(g().join(b,c.name),"utf8");try{d=JSON.parse(i)}catch(b){throw Error(`Invalid JSON in flat Persona record ${JSON.stringify(`${a}/${h}`)}: `+b.message)}if("string"!=typeof d.personaId)throw Error(`Flat Persona record ${JSON.stringify(h)} has no owner.`);P(d.personaId);let j=aa(i,a,d.personaId,h),k=JSON.stringify(j),l=f.get(h);if(l&&l.content!==k)throw new ab(a,d.personaId,h);f.set(h,{content:k,value:j})}return[...f.values()].map(({value:a})=>a)}function ai(a,b){return(0,y.withWorkspaceMutation)(async()=>{let c=(0,w.workspaceCacheKey)("chain",a),d=(F.get(c)??Promise.resolve()).catch(()=>{}).then(b);return F.set(c,d),d.catch(()=>{}).finally(()=>{F.get(c)===d&&F.delete(c)}),d})}async function aj(a,b,c){P(b);let d=R(a,b);if("conversations"===a)return(0,z.JN)((0,w.workspaceCacheKey)("conversation-publication",b),c,a=>(0,z.Sg)(()=>(0,y.withWorkspaceMutation)(()=>(0,A.MI)(b,()=>I(d,{conversation:!0,value:a})))));try{await ai(`${a}/${b}`,()=>I(d,JSON.stringify(c,null,2))),B.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw B.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function ak(a,b,c){if(P(b),"conversations"===a)return M(b,async a=>void 0===a?c:a);let d=R(a,b);try{let f=await e.promises.readFile(d,"utf-8");if(0===f.trim().length)return B.warn(`Collection item "${a}/${b}" at ${d} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){B.error(`CRITICAL: Failed to parse JSON from ${d}:`,b);let a=`${d}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,f),B.info(`Created backup of corrupted file at: ${a}`)}catch(a){B.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${d}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(e){if("ENOENT"===e.code)return B.verbose(`Collection item "${a}/${b}" not found at ${d}, returning default.`),c;throw B.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${d}:`,e),e}}async function al(a,b){P(b);let c=R(a,b);await ai(`${a}/${b}`,async()=>{try{await (0,d.QO)(),await e.promises.unlink(c),B.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;B.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function am(a){let b,c=Q(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let a=await e.promises.readFile(b,"utf-8");if(0===a.trim().length){B.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push(JSON.parse(a))}catch(a){B.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function an(a){let b,c=Q(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let f of b.sort()){let b;if(!f.endsWith(".json")||f.includes(".tmp.")||f.includes(".corrupted.")||f.endsWith(".bak"))continue;let h=f.slice(0,-5);P(h);let i=g().join(c,f),j=await e.promises.readFile(i,"utf8");if(0===j.trim().length)throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is empty.`);try{b=JSON.parse(j)}catch(b){throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is invalid JSON: ${b.message}`)}d.push({id:h,item:b})}return d}async function ao(a){let b,c=Q(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let[c,f]=await Promise.all([e.promises.readFile(b,"utf-8"),e.promises.stat(b)]);if(0===c.trim().length){B.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push({id:a.slice(0,-5),item:JSON.parse(c),mtimeMs:f.mtimeMs,sizeBytes:f.size})}catch(a){B.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function ap(a,b,c){let f,g,h=D(a);try{f=await e.promises.readFile(h,"utf-8")}catch(a){if("ENOENT"===a.code)return 0;throw a}if(0===f.trim().length)return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),0;try{g=JSON.parse(f)}catch(b){return B.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(g))return B.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await e.promises.mkdir(Q(b),{recursive:!0}),g)){let d;try{d=c(a),P(d)}catch(a){B.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=R(b,d);try{await e.promises.access(f),B.debug(`Migration: ${b}/${d} already exists; keeping the existing file.`);continue}catch{}await I(f,JSON.stringify(a,null,2))}return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),B.info(`Migration: moved ${g.length} ${b} item(s) from ${a}.json to per-item storage.`),g.length}},320108:(a,b,c)=>{c.d(b,{Zg:()=>d.Zg});var d=c(555271)},359262:(a,b,c)=>{c.d(b,{RJ:()=>e,gF:()=>d});let d="masked:********",e="********"},377424:(a,b,c)=>{c.d(b,{XF:()=>i,rF:()=>h});let d=globalThis;function e(a){if(void 0===a)return 0;if(!a||"object"!=typeof a)throw Error("Invalid existing allocation ledger.");let b=Object.getOwnPropertyDescriptor(a,"bytes");if(!b||!("value"in b)||!Number.isSafeInteger(b.value)||b.value<0)throw Error("Invalid existing allocation ledger.");return b.value}let f=d.__flujoAllocationReservationsV1??={run:e(d.__flujoFlowRunAdmission),preparation:e(d.__flujoSubflowPreparation),output:e(d.__flujoSubflowOutput),ingress:e(d.__flujoChatIngressV1),publication:e(d.__flujoConversationPublicationV1)};function g(a,b){if(!["run","preparation","output","ingress","publication"].includes(a)||!Number.isSafeInteger(b)||b<0)throw Error("Invalid allocation reservation observation.")}function h(a,b){g(a,b),f[a]=b}function i(a,b){return g(a,b),f.run+f.preparation+f.output+f.ingress+f.publication-f[a]+b}f.publication??=e(d.__flujoConversationPublicationV1)},383594:(a,b,c)=>{c.d(b,{Gv:()=>g,Ok:()=>h,nN:()=>f});let d=Object.freeze({maxSegmentBytes:8388608,maxSegmentEvents:2e4,retentionDays:0,maxClosedSegments:30});function e(a,b,c){if(void 0===a)return b;if(!/^-?\d+$/.test(a))return null;let d=Number(a);return Number.isSafeInteger(d)&&d>=c?d:null}function f(a=process.env){let b=e(a.FLUJO_PERSONA_RUNTIME_EVENT_SEGMENT_MAX_BYTES,d.maxSegmentBytes,1),c=e(a.FLUJO_PERSONA_RUNTIME_EVENT_SEGMENT_MAX_EVENTS,d.maxSegmentEvents,1),g=e(a.FLUJO_PERSONA_RUNTIME_EVENT_RETENTION_DAYS,d.retentionDays,0),h=e(a.FLUJO_PERSONA_RUNTIME_EVENT_MAX_CLOSED_SEGMENTS,d.maxClosedSegments,0);return null===b||null===c||null===g||null===h?{...d}:{maxSegmentBytes:b,maxSegmentEvents:c,retentionDays:g,maxClosedSegments:h}}Object.freeze({mode:"disabled",rolloutBasisPoints:0,cohortVersion:"persona-runtime-retention-v1",criticalPersonaIds:Object.freeze([])});let g={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_ADMISSION:!1,ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_DIAGNOSIS:!1,get ENABLE_MCP_TASKS_CLIENT(){return"true"===process.env.FLUJO_MCP_TASKS_CLIENT},get ENABLE_MCP_TASKS_SERVER(){return"true"===process.env.FLUJO_MCP_TASKS_SERVER},ENABLE_MEMORY_CANDIDATE_EXPIRY:!0,ENABLE_MEMORY_AUTO_PROMOTION:!1,ENABLE_MEMORY_CONFLICT_SURFACING:!0,ENABLE_PERSONA_RUNTIME_RETENTION:!1,ENABLE_PERSONA_LEASE_HISTORY_PRUNING:!1,ENABLE_PERSONA_BEHAVIOR_OUTCOME_METRICS:!1,ENABLE_PERSONA_BEHAVIOR_OUTCOME_AUTO_ROLLBACK:!1};function h(){return g.ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_DIAGNOSIS&&g.ENABLE_PERSONA_BEHAVIOR_OUTCOME_METRICS&&g.ENABLE_PERSONA_BEHAVIOR_OUTCOME_AUTO_ROLLBACK}},453635:(a,b,c)=>{c.d(b,{A:()=>E});var d=c(548249),e=c(367484),f=c(660799),g=c(398635),h=c(164621),i=c(170631),j=c(17774),k=c(679195),l=c(501057),m=c(567235),n=c(491316),o=c(414756),p=c(423892),q=c(690384),r=c(70803),s=c(406680),t=c(523806),u=c(269898),v=c(457726),w=c(232383),x=c(503753),y=c(192772),z=c(803146),A=c(359262),B=c(532166);let C=(0,s.h)("frontend/components/mcp/MCPEnvManager/EnvEditor"),D=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,E=({serverName:a,initialEnv:b,onSave:c,onDelete:s,onServerRestart:E})=>{let{t:F}=(0,B.s9)(),{globalEnvVars:G}=(0,t.rX)(),[H,I]=(0,e.useState)([]),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(!1),[P,Q]=(0,e.useState)(null);(0,e.useEffect)(()=>{C.debug(`Initializing environment variables for server: ${a}`,{variableCount:Object.keys(b).length}),I(Object.entries(b).map(([a,b])=>{let c="object"==typeof b&&null!==b&&"value"in b?b.value:b,d="object"==typeof b&&null!==b&&"metadata"in b?b.metadata:{isSecret:(0,z.xc)(a)},e=c.match(D);if(e){let b=e[1];return{key:a,value:c,isSecret:d.isSecret,isBound:!0,boundTo:b}}let f="string"==typeof c&&(c.startsWith("encrypted:")||c.startsWith("encrypted_failed:"));return{key:a,value:f?A.gF:c,isSecret:d.isSecret,isEncrypted:f}}))},[b]);let R=async b=>{C.debug(`Removing environment variable at index: ${b}`);let c=H[b];if("Global"===a&&s&&c.key)try{await s(c.key),I(H.filter((a,c)=>c!==b))}catch(a){C.error(`Failed to delete environment variable: ${c.key}`,a)}else I(H.filter((a,c)=>c!==b)),K(!0)},S=(a,b,c)=>{let d=[...H];if("isSecret"===b){let b=d[a];b.isSecret&&!c?d[a]={...b,isSecret:c,value:"",isEncrypted:!1,showWarning:!0}:d[a]={...b,isSecret:c}}else{let e={...d[a],[b]:c,isSecret:"key"===b?(0,z.xc)(c):d[a].isSecret};if("key"===b&&(e.isValidKey=""===c||/^[a-zA-Z0-9_]+$/.test(c)),"value"===b){let b=c.match(D);e.isBound=!!b,e.boundTo=b?.[1],d[a].isEncrypted&&(e.isEncrypted=!1),d[a].showWarning&&c&&(e.showWarning=!1)}d[a]=e}I(d),K(!0)},T=async()=>{if(H.some(a=>""!==a.key&&!1===a.isValidKey))return void C.error("Cannot save: Some variable names contain invalid characters");C.debug(`Saving environment variables for server: ${a}`,{variableCount:H.length}),M(!0);try{let b=H.reduce((a,b)=>{let{key:c,value:d,isBound:e,boundTo:f,isSecret:g}=b;return c&&(e&&f?a[c]={value:`$\{global:${f}}`,metadata:{isSecret:g}}:a[c]={value:d,metadata:{isSecret:g}}),a},{});await c(b),K(!1),E&&"Global"!==a&&(C.debug(`Restarting server after env variable changes: ${a}`),await E(a))}catch(a){C.error("Failed to save environment variables:",a)}M(!1)};return(0,d.jsxs)(f.A,{sx:{p:3,borderRadius:2,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[(0,d.jsx)(h.A,{variant:"h6",sx:{fontWeight:"semibold"},children:F("mcp.env.title",{server:a})}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,d.jsx)(u.A,{}),onClick:()=>{C.debug("Adding new environment variable"),I([...H,{key:"",value:"",isSecret:!1}]),K(!0)},children:F("mcp.env.add")})]}),(0,d.jsx)(j.A,{spacing:3,children:H.map((a,b)=>(0,d.jsxs)(k.A,{container:!0,spacing:2,sx:{alignItems:"flex-start"},children:[(0,d.jsx)(k.A,{size:{xs:12,sm:5},children:(0,d.jsx)(l.A,{fullWidth:!0,placeholder:F("mcp.env.name"),value:a.key,onChange:a=>S(b,"key",a.target.value),error:!1===a.isValidKey,helperText:!1===a.isValidKey?F("mcp.env.invalidName"):"",size:"small"})}),(0,d.jsx)(k.A,{size:{xs:12,sm:5},children:(0,d.jsx)(l.A,{fullWidth:!0,type:a.isSecret?"password":"text",placeholder:a.showWarning?F("mcp.env.reenter"):F("mcp.env.value"),value:a.value,onChange:a=>S(b,"value",a.target.value),slotProps:{input:{readOnly:a.isBound,startAdornment:a.isEncrypted?(0,d.jsx)(m.A,{position:"start",children:(0,d.jsx)(v.A,{fontSize:"small",titleAccess:F("mcp.env.encrypted")})}):null,endAdornment:a.isBound?(0,d.jsx)(m.A,{position:"end",children:(0,d.jsx)(n.A,{size:"small",label:F("mcp.env.bound",{name:a.boundTo??""}),color:"primary",variant:"outlined",onDelete:()=>{let a;return C.debug(`Unbinding variable at index: ${b}`),void((a=[...H])[b]={...a[b],isBound:!1,boundTo:void 0},I(a),K(!0))},deleteIcon:(0,d.jsx)(w.A,{fontSize:"small"})})}):null}},error:a.showWarning,helperText:a.showWarning?F("mcp.env.reenterHelp"):"",size:"small",sx:{bgcolor:b=>a.isBound?"dark"===b.palette.mode?"#1a1a1a":"#f9fafb":b.palette.background.paper}})}),(0,d.jsx)(k.A,{size:{xs:12,sm:2},children:(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(o.A,{control:(0,d.jsx)(p.A,{checked:a.isSecret,onChange:a=>S(b,"isSecret",a.target.checked),size:"small"}),label:F("mcp.env.secret"),sx:{mr:1}}),!a.isBound&&(0,d.jsx)(q.A,{size:"small",color:"primary",onClick:()=>{C.debug(`Opening bind modal for variable at index: ${b}`),Q(b),O(!0)},title:F("mcp.env.bind"),sx:{mr:1},children:(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(q.A,{size:"small",color:"error",onClick:()=>R(b),title:F("mcp.env.remove"),children:(0,d.jsx)(y.A,{fontSize:"small"})})]})})]},b))}),(0,d.jsx)(r.A,{open:N,onClose:()=>{O(!1),Q(null)},children:(0,d.jsxs)(g.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,d.jsx)(h.A,{variant:"h6",sx:{mb:2},children:F("mcp.env.bindTitle")}),0===Object.keys(G).length?(0,d.jsx)(h.A,{color:"text.secondary",sx:{mb:2},children:F("mcp.env.noGlobals")}):(0,d.jsx)(g.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(G).map(([a,b])=>(0,d.jsxs)(i.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{if(null!==P){C.debug(`Binding variable at index ${P} to global variable: ${a}`);let b=[...H];b[P]={...b[P],isBound:!0,boundTo:a,value:`$\{global:${a}}`},I(b),O(!1),Q(null),K(!0)}})(a),sx:{justifyContent:"space-between",textAlign:"left",mb:1,p:1,borderRadius:1},children:[(0,d.jsx)(h.A,{variant:"body2",children:a}),(0,d.jsx)(h.A,{variant:"caption",color:"text.secondary",children:b&&"object"==typeof b&&b.metadata&&b.metadata.isSecret?A.gF:b&&"object"==typeof b?b.value:b})]},a))}),(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(i.A,{variant:"outlined",onClick:()=>{O(!1),Q(null)},children:F("mcp.env.cancel")})})]})}),J&&(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end",mt:3},children:(0,d.jsx)(i.A,{variant:"contained",color:"success",onClick:T,disabled:L||H.some(a=>""!==a.key&&!1===a.isValidKey),children:L?F("mcp.env.saving"):F("mcp.env.save")})})]})}},482432:(a,b,c)=>{c.d(b,{l:()=>i,rF:()=>h}),c(977598);var d=c(731612);let e=["openai:read","openai:execute","mcp:access","control:admin","secrets:read","avatar:voice"],f=d.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),g=d.object({id:d.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),digest:d.string().regex(/^[a-f0-9]{64}$/),scopes:d.array(d.enum(e)).min(1).max(e.length).refine(a=>new Set(a).size===a.length),issuedAt:f,expiresAt:f,revokedAt:f.nullable(),workspaceId:d.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/).refine(a=>!/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i.test(a)).optional()}).strict().refine(a=>a.expiresAt>a.issuedAt).refine(a=>void 0===a.workspaceId||a.scopes.every(a=>"avatar:voice"===a)),h=d.object({schemaVersion:d.literal(1),ownerId:d.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),credentials:d.array(g).max(128)}).strict().superRefine((a,b)=>{(new Set(a.credentials.map(a=>a.id)).size!==a.credentials.length||new Set(a.credentials.map(a=>a.digest)).size!==a.credentials.length)&&b.addIssue({code:"custom",message:"Duplicate credential identity"})});function i(a,b){return b.every(b=>a.scopes.includes(b))}},492093:(a,b,c)=>{c.d(b,{B7:()=>o,qy:()=>j,withWorkspaceMutation:()=>n});var d=c(16698),e=c(189663);function f(a,b){let c=Error(`Workspace ${a?"recovery":"mutation"} ${b}.`);return c.name=a?"WorkspaceRecoveryOwnershipError":"WorkspaceMutationContextError",c}async function g(a,b,c){let d={live:!0,admission:b};b.participants+=1;let f=new Map(l.getStore()?.participants??[]);f.set(a,d);try{return await (0,e.runWithWorkspace)(a,()=>l.run({participants:f,readCaptures:l.getStore()?.readCaptures},()=>c(d)))}finally{if(d.live=!1,b.participants-=1,0===b.participants){for(let a of b.waiters)a();b.waiters.clear()}}}async function h(a){a.participants>0&&await new Promise(b=>a.waiters.add(b))}async function i(a,b){let c=b.admission.recovery,d=()=>{if(!b.live)throw f(!!c,"context has finished");if((0,e.getCurrentWorkspace)()!==a)throw f(!!c,"workspace changed");if(c?.signal?.aborted)throw f(!0,"was cancelled")};if(d(),c){try{await c.assertOwned()}catch{throw f(!0,"ownership was lost")}d()}}async function j(){let a=(0,e.normalizeWorkspaceName)((0,e.getCurrentWorkspace)()),b=l.getStore()?.participants?.get(a);if(!b)throw f(!1,"has no admitted participant");await i(a,b)}let k=globalThis.__flujoWorkspaceMutationGates??(globalThis.__flujoWorkspaceMutationGates=new Map),l=globalThis.__flujoWorkspaceMutationContext??(globalThis.__flujoWorkspaceMutationContext=new d.AsyncLocalStorage);function m(a){let b=k.get(a);return b||(b={activeMutations:0,blocked:!1,generation:0,admissionWaiters:new Set,drainWaiters:new Set},k.set(a,b)),b}async function n(a,b=(0,e.getCurrentWorkspace)()){let d=(0,e.normalizeWorkspaceName)(b),j=l.getStore();if(j&&!j.participants)throw f(!1,"context predates the current admission protocol");if(j?.readCaptures?.has(d))throw f(!1,"cannot write from a read capture");let k=j?.participants?.get(d);if(k&&!k.live&&k.admission.recovery)throw f(!0,"context has finished");if(k?.live){if(await (0,e.runWithWorkspace)(d,()=>i(d,k)),!k.live&&k.admission.recovery)throw f(!0,"context has finished");if(k.live)return(0,e.runWithWorkspace)(d,()=>g(d,k.admission,async b=>{await i(d,b);let c=await a();return await i(d,b),c}))}let o=m(d);for(;o.blocked;)await new Promise(a=>o.admissionWaiters.add(a));o.activeMutations+=1;let p={participants:0,waiters:new Set};try{let{withWorkspaceProcessMutation:b}=await c.e(79504).then(c.bind(c,779504));return await (0,e.runWithWorkspace)(d,()=>b(async()=>{try{return await g(d,p,a)}finally{await h(p)}}))}finally{o.activeMutations-=1,function(a){if(0!==a.activeMutations)return;let b=[...a.drainWaiters];for(let c of(a.drainWaiters.clear(),b))c()}(o)}}function o(a=(0,e.getCurrentWorkspace)()){let b=m((0,e.normalizeWorkspaceName)(a));return{activeMutations:b.activeMutations,blocked:b.blocked,generation:b.generation}}},537944:(a,b,c)=>{c.d(b,{$j:()=>C,Bh:()=>S,DV:()=>u,Do:()=>s,Jl:()=>B,Kq:()=>v,OU:()=>J,VN:()=>O,Zl:()=>t,g:()=>K,jf:()=>F,pr:()=>E,r:()=>p,vb:()=>N,y0:()=>A});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(731612),j=c(189663),k=c(901984),l=c(482432),m=c(35984),n=c(950902),o=c(711873);function p(a){let b=new Map;for(let[c,d]of Object.entries(Object.getOwnPropertyDescriptors(a.env??{}))){if(!d.enumerable)continue;if(!("value"in d))throw new v("HOST_POLICY_INVALID");let a=d.value,e=a&&"object"==typeof a?Object.getOwnPropertyDescriptor(a,"value"):void 0,f="string"==typeof a?a:e&&"value"in e?e.value:void 0;if("string"!=typeof f||Buffer.byteLength(f)>16384||f.includes("\0"))throw new v("HOST_POLICY_INVALID");b.set(c,f)}return b}let q=i.string().regex(/^[a-f0-9]{64}$/),r=i.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0"));function s(a,b){let c=t.parse(a.trustedHost),d=b??c.runtimeHome,e=p(a),f="win32"===process.platform?"USERPROFILE":"HOME",i=[...e].find(([a])=>"win32"===process.platform?a.toUpperCase()===f:a===f)?.[1],k="isolated"===d?g().join((0,j.getWorkspaceDataDir)(),"userdata","mcp-runtime",(0,h.createHash)("sha256").update(a.name).digest("hex").slice(0,24),"home"):i??"";return{command:a.command,home:k}}[..."win32"===process.platform?["HOMEDRIVE","HOMEPATH"]:[]];let t=i.object({schemaVersion:i.literal(1),kind:i.literal("trusted-host"),privileges:i.literal("owner-account"),runtime:i.enum(["node","native","npx"]),runtimeHome:i.enum(["host","isolated"]).optional(),entryPoint:r,sourceRoot:r,sourceDigest:q,executableDigest:q,packageRunner:o.kU.optional(),bundledInstallation:i.object({packageDirectory:i.enum(["flujo","filesystem","bash","browser"]),installationRoot:r,dependencyNamespaceRoot:r,assetDigest:q,dependencyGraphDigest:q,dependencyDirectories:i.array(r).max(256),dependencyLinks:i.array(i.object({link:r,target:r}).strict()).max(64),workload:i.object({purpose:i.literal("bundled-flujo-control-v1"),inventory:i.array(i.object({action:i.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,127}$/),method:i.enum(["GET","POST"]),path:i.enum(["/api/mcp/flujo/tools","/api/mcp/flujo/resources","/api/mcp/flujo/resources/read","/api/mcp/flujo/skills","/api/mcp/flujo/authoring","/api/mcp/flujo/flows","/api/mcp/flujo/servers","/api/mcp/flujo/automation","/api/mcp/flujo/state"]),schemaDigest:q}).strict()).min(1).max(70).refine(a=>new Set(a.map(a=>a.action)).size===a.length)}).strict().optional()}).strict().optional(),environmentNames:i.array(i.string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,127}$/).refine(a=>!["NODE_OPTIONS","NODE_PATH","PYTHONPATH","PYTHONHOME","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH"].includes(a.toUpperCase()))).max(64)}).strict().refine(a=>new Set(a.environmentNames.map(a=>"win32"===process.platform?a.toUpperCase():a)).size===a.environmentNames.length).refine(a=>!a.bundledInstallation?.workload||"flujo"===a.bundledInstallation.packageDirectory).refine(a=>"npx"===a.runtime==!!a.packageRunner&&!(a.packageRunner&&a.bundledInstallation)),u=i.object({schemaVersion:i.literal(1),ownerId:i.string().regex(/^[A-Za-z0-9_-]{1,64}$/),approvals:i.array(i.object({workspace:i.string().refine(j.isValidWorkspaceName),serverName:i.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),policyDigest:q,expiresAt:i.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).strict()).max(128)}).strict().refine(a=>new Set(a.approvals.map(a=>JSON.stringify([a.workspace,a.serverName]))).size===a.approvals.length);class v extends Error{constructor(a){super("HOST_CONSENT_REQUIRED"===a?"MCP host execution requires explicit owner consent for this workspace, server, package revision and capabilities. Configure an approved isolated profile or a separately protected trusted-host approval.":"HOST_SOURCE_CHANGED"===a?"MCP executable or package revision changed. Inspect the fixed package and renew owner consent before execution.":"MCP trusted-host policy is invalid. Use an absolute executable, working directory and fixed workspace package; dynamic package runners require an approved isolated profile."),this.code=a,this.name="TrustedHostMcpError"}}function w(a){let b=g().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function x(a){let b=g().resolve(a);for(;;){if(e().lstatSync(b).isSymbolicLink())throw new v("HOST_SOURCE_CHANGED");let a=g().dirname(b);if(a===b)break;b=a}if(w(e().realpathSync(a))!==w(a))throw new v("HOST_SOURCE_CHANGED")}function y(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}function z(a,b,c){let f=e().openSync(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=e().fstatSync(f,{bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||(x(a),!y(d,e().lstatSync(a,{bigint:!0}))))throw new v("HOST_SOURCE_CHANGED");let g=Buffer.alloc(65536),h=0;for(;;){let a=e().readSync(f,g,0,g.length,null);if(!a)break;if((h+=a)>b||BigInt(h)>d.size)throw new v("HOST_SOURCE_CHANGED");c(g.subarray(0,a))}if(x(a),BigInt(h)!==d.size||!y(d,e().fstatSync(f,{bigint:!0}))||!y(d,e().lstatSync(a,{bigint:!0})))throw new v("HOST_SOURCE_CHANGED");return d}finally{e().closeSync(f)}}function A(a){try{let b=(0,h.createHash)("sha256");return z(a,0x20000000,a=>b.update(a)),b.digest("hex")}catch{throw new v("HOST_SOURCE_CHANGED")}}function B(a){let b="win32"===process.platform&&a?(0,m.f)(a):void 0,c=a?e().lstatSync(a,{bigint:!0}):void 0,d=H(a);if(void 0!==b&&(0,m.f)(a)!==b||c&&a&&(x(a),!y(c,e().lstatSync(a,{bigint:!0}))))throw new v("HOST_CONSENT_REQUIRED");return d}async function C(a,b){return(await G(a,b)).value}async function D(a,b,c){if(!a||!b||c?.aborted)throw new v("HOST_CONSENT_REQUIRED");let d=[a,b],f=d.map(a=>e().lstatSync(a,{bigint:!0})),g="win32"===process.platform?await (0,m.p)(d,c):void 0,h=d.map(a=>H(a));if(void 0!==g&&await (0,m.p)(d,c)!==g)throw new v("HOST_CONSENT_REQUIRED");for(let[a,b]of d.entries())if(x(b),!y(f[a],e().lstatSync(b,{bigint:!0})))throw new v("HOST_CONSENT_REQUIRED");if(c?.aborted)throw new v("HOST_CONSENT_REQUIRED");return[h[0],h[1]]}async function E(a,b,c){let d,f="1"===process.env.FLUJO_MCP_WORKLOAD_TRACE?Date.now():void 0,h="input";try{if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let c=[...a];h="identity-before";let f=c.map((a,b)=>(d=b,e().lstatSync(a,{bigint:!0})));h="native-before",d=void 0;let i="win32"===process.platform?await (0,m.p)(c,b):void 0;h="contents";let j=c.map((a,b)=>(d=b,H(a)));if(h="native-after",d=void 0,void 0!==i&&await (0,m.p)(c,b)!==i)throw new v("HOST_CONSENT_REQUIRED");for(let[a,b]of(h="identity-after",c.entries()))if(d=a,x(b),!y(f[a],e().lstatSync(b,{bigint:!0})))throw new v("HOST_CONSENT_REQUIRED");if(h="signal-after",d=void 0,b?.aborted)throw new v("HOST_CONSENT_REQUIRED");return j}catch(a){throw!function(a,b,c,d,e,f){try{if(void 0===f)return;let g=void 0!==b&&c?Object.getOwnPropertyDescriptor(c,String(b)):void 0,h=g&&"value"in g?g.value:void 0,i=void 0===b?"set":"record"===h||"marker"===h||"owner"===h||"ledger"===h?h:"member",j=d&&"object"==typeof d?Object.getOwnPropertyDescriptors(d):{},k=j.code&&"value"in j.code?j.code.value:void 0,l=j.errno&&"value"in j.errno?j.errno.value:void 0,m="string"==typeof k&&["HOST_CONSENT_REQUIRED","HOST_SOURCE_CHANGED","HOST_POLICY_INVALID","ENOENT","EACCES","EPERM","EIO","EBUSY","EMFILE","ENFILE","ENOTDIR","ELOOP","EINVAL"].includes(k)?k:"unknown";console.info("[private-approval-set-reader]","refused",{phase:a,role:i,errorKind:m,..."number"==typeof l&&Number.isInteger(l)&&65535>=Math.abs(l)?{errno:l}:{},cancelled:e?.aborted===!0,elapsedMs:Math.max(0,Date.now()-f)})}catch{}}(h,d,c,a,b,f),a}}function F(a,b){if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let c=[...a],d=c.map(a=>e().lstatSync(a,{bigint:!0})),f="win32"===process.platform?(0,m.f)(c):void 0,h=c.map(a=>H(a));if(void 0!==f&&(0,m.f)(c)!==f)throw new v("HOST_CONSENT_REQUIRED");for(let[a,b]of c.entries())if(x(b),!y(d[a],e().lstatSync(b,{bigint:!0})))throw new v("HOST_CONSENT_REQUIRED");if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");return h}async function G(a,b){let c="signal-before";try{if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");c="native-before";let d="win32"===process.platform&&a?await (0,m.p)(a,b):void 0;c="identity-before";let f=a?e().lstatSync(a,{bigint:!0}):void 0;c="contents";let g=H(a);if(c="native-after",void 0!==d&&await (0,m.p)(a,b)!==d||(c="identity-after",f&&a&&(x(a),!y(f,e().lstatSync(a,{bigint:!0}))))||(c="signal-after",b?.aborted))throw new v("HOST_CONSENT_REQUIRED");return{value:g,windowsAuthority:d}}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[private-approval-reader]","refused",c)}catch{}throw a}}function H(a){if(!a||!g().isAbsolute(a))throw new v("HOST_CONSENT_REQUIRED");let b=g().relative(g().resolve((0,k.ok)()),g().resolve(a));if(!b||".."!==b&&!b.startsWith(`..${g().sep}`)&&!g().isAbsolute(b))throw new v("HOST_CONSENT_REQUIRED");if("win32"!==process.platform&&"function"==typeof process.getuid){let b=BigInt(process.getuid()),c=g().dirname(g().resolve(a));for(;;){let a=e().lstatSync(c,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||a.uid!==b&&a.uid!==BigInt(0)||(a.mode&BigInt(18))!==BigInt(0)&&(a.mode&BigInt(512))===BigInt(0))throw new v("HOST_CONSENT_REQUIRED");let d=g().dirname(c);if(d===c)break;c=d}}let c=[];try{let b=z(a,65536,a=>c.push(Buffer.from(a)));if("win32"!==process.platform&&(b.mode&BigInt(63))!==BigInt(0)||"win32"!==process.platform&&"function"==typeof process.getuid&&b.uid!==BigInt(process.getuid())&&b.uid!==BigInt(0))throw new v("HOST_CONSENT_REQUIRED");return JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(Buffer.concat(c)))}finally{for(let a of c)a.fill(0)}}function I(a,b=!1){let c="CONSENT_POLICY_SCHEMA";try{let b=t.parse(a.trustedHost);c="CONSENT_LAUNCH";let d=r.parse(a.command),e=r.parse(a.cwd),f=i.array(i.string().max(2048).refine(a=>!a.includes("\0"))).max(64).parse(a.args??[]);if(void 0!==a.isolation||/\.(?:cmd|bat|ps1)$/i.test(d)||"npx"!==b.runtime&&w(e)!==w(b.sourceRoot))throw Error();let h=g().relative(b.sourceRoot,b.entryPoint);if(!h||".."===h||h.startsWith(`..${g().sep}`)||g().isAbsolute(h))throw Error();let l=g().basename(d).toLowerCase().replace(/\.exe$/,"");if("npx"===b.runtime)(0,o.nT)({sourceRoot:b.sourceRoot,entryPoint:b.entryPoint,command:d,cwd:e,args:f,runner:b.packageRunner,environment:p(a)});else if("node"===b.runtime){if("node"!==l||f[0]!==b.entryPoint||!/\.(?:mjs|cjs|js)$/.test(b.entryPoint))throw Error()}else if(w(d)!==w(b.entryPoint)||["node","npm","npx","pnpm","yarn","corepack","uv","uvx","pip","pip3","python","python3","bash","sh","cmd","powershell","pwsh","ruby","perl","deno","bun","go","cargo"].includes(l))throw Error();if(c="CONSENT_BUNDLE",b.bundledInstallation){if("node"!==b.runtime||w(b.entryPoint)!==w(g().join(b.sourceRoot,"dist","index.js"))||w(b.sourceRoot)!==w(g().join((0,j.getWorkspaceDataDir)(),"mcp-servers",b.bundledInstallation.packageDirectory)))throw Error();let a=g().relative(g().resolve((0,k.ok)()),b.bundledInstallation.installationRoot);if(!a||".."!==a&&!a.startsWith(`..${g().sep}`)&&!g().isAbsolute(a))throw Error();for(let a of b.bundledInstallation.dependencyLinks){let c=g().relative(g().join(b.sourceRoot,"node_modules"),a.link);if(".."===c||c.startsWith(`..${g().sep}`)||g().isAbsolute(c))throw Error()}}c="CONSENT_ENVIRONMENT";let m=[...p(a)].sort(([a],[b])=>a<b?-1:+(a>b)).map(([a,c])=>{if(!b.environmentNames.includes(a))throw Error();return[a,c]});c="CONSENT_CAPABILITIES";let n=i.string().max(2048).refine(a=>!a.includes("${global:")&&!/[\x00-\x1f\x7f]/.test(a)),q=i.array(n).max(64).parse(a.roots??[]),s=n.parse(a.rootPath??"");c="CONSENT_SERIALIZE";let u=JSON.stringify({domain:"flujo:mcp:trusted-host-consent:v2",command:d,args:f,cwd:e,requestedEnvironment:m,policy:{...b,environmentNames:[...b.environmentNames].sort()},capabilities:{roots:q,sampling:a.sampling??null,elicitation:a.elicitation??null,apps:!0===a.enableMcpApps,skills:!0===a.enableMcpSkills,rootPath:s,runtimeHomeMode:a.runtimeHomeMode??null}}),v=JSON.stringify(["flujo:mcp:trusted-host-consent:v2",(0,j.getCurrentWorkspace)(),a.name,b.sourceRoot]);return{consent:u,salt:v}}catch(a){if(b)throw new n.IP(c,a);throw new v("HOST_POLICY_INVALID")}}function J(a){let{consent:b,salt:c}=I(a);return(0,h.scryptSync)(b,c,32,{N:16384,r:8,p:1,maxmem:0x4000000}).toString("hex")}function K(a,b){let c=I(a),d=I(b);return c.consent===d.consent&&c.salt===d.salt}async function L(a,b){return M(a,b,!1)}async function M(a,b,c){if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let{consent:d,salt:e}=I(a,c),f=await new Promise((a,b)=>{let f=a=>b(c?new n.IP("CONSENT_SCRYPT",a):a);try{(0,h.scrypt)(d,e,32,{N:16384,r:8,p:1,maxmem:0x4000000},(b,c)=>b?f(b):a(c))}catch(a){f(a)}});try{if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");return f.toString("hex")}finally{f.fill(0)}}function N(a){if(void 0===a.trustedHost)throw new v("HOST_CONSENT_REQUIRED");try{let b=t.parse(a.trustedHost),c=J(a),d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw Error();let g=[d,f],h=g.map(a=>e().lstatSync(a,{bigint:!0})),i="win32"===process.platform?(0,m.f)(g):void 0,k=g.map(a=>H(a));if(void 0!==i&&(0,m.f)(g)!==i)throw Error();for(let[a,b]of g.entries())if(x(b),!y(h[a],e().lstatSync(b,{bigint:!0})))throw Error();if(d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let n=u.parse(k[0]),o=l.rF.parse(k[1]),p=n.approvals.find(b=>b.workspace===(0,j.getCurrentWorkspace)()&&b.serverName===a.name);if(o.ownerId!==n.ownerId||!p||p.expiresAt<=Date.now()||p.policyDigest!==c)throw Error();return{policy:b,digest:c,ownerId:o.ownerId,workspace:(0,j.getCurrentWorkspace)(),expiresAt:p.expiresAt}}catch(a){if(a instanceof v)throw a;throw new v("HOST_CONSENT_REQUIRED")}}async function O(a,b){try{let c=structuredClone(a),d=(0,j.getCurrentWorkspace)(),e=t.parse(c.trustedHost),f=await L(c,b),g=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,h=process.env.FLUJO_OWNER_AUTH_FILE;if(!g||!h)throw Error();let i=await D(g,h,b);if(g!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||h!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let k=u.parse(i[0]),m=l.rF.parse(i[1]),n=k.approvals.find(a=>a.workspace===d&&a.serverName===c.name);if(b?.aborted||d!==(0,j.getCurrentWorkspace)()||m.ownerId!==k.ownerId||!n||n.expiresAt<=Date.now()||n.policyDigest!==f)throw Error();return{policy:e,digest:f,ownerId:m.ownerId,workspace:d,expiresAt:n.expiresAt}}catch(a){if(a instanceof v)throw a;throw new v("HOST_CONSENT_REQUIRED")}}async function P(a){let b=[],c=g().resolve(a);for(;;){b.push(c);let a=g().dirname(c);if(a===c)break;c=a}for(let a=0;a<b.length;a+=8)if((await Promise.allSettled(b.slice(a,a+8).map(a=>e().promises.lstat(a)))).some(a=>"rejected"===a.status||a.value.isSymbolicLink()))throw Error();if(w(await e().promises.realpath(a))!==w(a))throw Error()}async function Q(a,b,c,f){let g;if(c?.aborted)throw Error();let i=await e().promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=await i.stat({bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||f&&!y(f,d)||(await P(a),!y(d,await e().promises.lstat(a,{bigint:!0}))))throw Error();let j=(0,h.createHash)("sha256");g=Buffer.alloc(d.size>BigInt(1048576)?1048576:65536);let k=0;for(;;){if(c?.aborted)throw Error();let{bytesRead:a}=await i.read(g,0,g.length,null);if(!a)break;if((k+=a)>b||BigInt(k)>d.size)throw Error();j.update(g.subarray(0,a))}if(await P(a),BigInt(k)!==d.size||!y(d,await i.stat({bigint:!0}))||!y(d,await e().promises.lstat(a,{bigint:!0})))throw Error();return{digest:j.digest("hex"),size:k}}finally{g?.fill(0),await i.close()}}async function R(a,b,c=[]){let d=g().resolve(a),f=g().relative(g().resolve((0,j.getWorkspaceDataDir)(),"mcp-servers"),d);if(!f||".."===f||f.startsWith(`..${g().sep}`)||g().isAbsolute(f))throw Error();let i=(0,h.createHash)("sha256").update("flujo:mcp:trusted-host-source:v1\0"),k=0,l=0,m=async a=>{if(b?.aborted||++k>16384)throw Error();await P(a);let f=await e().promises.lstat(a,{bigint:!0});if(!f.isDirectory())throw Error();i.update(JSON.stringify(["directory",g().relative(d,a).split(g().sep).join("/"),String(f.mode)]));let h=(await e().promises.readdir(a)).sort((a,b)=>a<b?-1:+(a>b)),j=[],n=async()=>{let a=j.splice(0),c=await Promise.allSettled(a.map(({filename:a,stat:c})=>Q(a,Number(c.size),b,c)));if(b?.aborted||c.some(a=>"rejected"===a.status))throw Error();for(let[b,e]of c.entries()){if("fulfilled"!==e.status)throw Error();let{filename:c,stat:f}=a[b];if(e.value.size!==Number(f.size))throw Error();i.update(JSON.stringify(["file",g().relative(d,c).split(g().sep).join("/"),String(f.mode),e.value.digest]))}};for(let f of h){if(b?.aborted)throw Error();let h=g().join(a,f),o=await e().promises.lstat(h,{bigint:!0});if(o.isSymbolicLink()){await n();let a=c.find(a=>w(a.link)===w(h));if(!a||w(await e().promises.realpath(h))!==w(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(d,h).split(g().sep).join("/"),w(a.target)]));continue}if(o.isDirectory()&&!o.isSymbolicLink()){await n(),await m(h);continue}if(++k>16384||!o.isFile()||o.isSymbolicLink()||o.nlink!==BigInt(1)||o.size<BigInt(0)||o.size>BigInt(0x10000000-l))throw Error();l+=Number(o.size),j.push({filename:h,stat:o}),8===j.length&&await n()}if(await n(),await P(a),!y(f,await e().promises.lstat(a,{bigint:!0})))throw Error()};return await m(d),i.digest("hex")}async function S(a,b){let d=structuredClone(a),e=await O(d,b),f="inspection";try{let a=async()=>{let a=e.policy.bundledInstallation;if(!a)return;let{inspectShippedWorkspaceProvenance:b}=await c.e(34679).then(c.bind(c,34679));return b((0,j.getWorkspaceDataDir)(),a.packageDirectory,a.installationRoot)},g=await Promise.allSettled([Q(d.command,0x20000000,b),R(e.policy.sourceRoot,b,e.policy.bundledInstallation?.dependencyLinks),a()]);if("rejected"===g[0].status)throw f="executable-read",g[0].reason;if("rejected"===g[1].status)throw f="source-read",g[1].reason;if("rejected"===g[2].status)throw f="provenance-read",g[2].reason;let h=(a,b)=>{if(f=b,!a)throw Error()},i=g[0].value,k=g[1].value;if(e.policy.bundledInstallation){let a=e.policy.bundledInstallation,c=g[2].value;if(f="provenance-result",!c)throw Error();h(!b?.aborted,"signal"),h(c.assetDigest===a.assetDigest,"asset-digest"),h(w(c.dependencyNamespaceRoot)===w(a.dependencyNamespaceRoot),"namespace"),h(c.dependencyGraph.digest===a.dependencyGraphDigest,"graph-digest"),h(JSON.stringify(c.dependencyLinks)===JSON.stringify(a.dependencyLinks),"links"),h(JSON.stringify(c.dependencies.map(a=>a.directory))===JSON.stringify(a.dependencyDirectories),"directories")}if(h(i.digest===e.policy.executableDigest,"executable-digest"),h(k===e.policy.sourceDigest,"source-digest"),e.policy.packageRunner){let a=e.policy.packageRunner;(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,{...s(d),inspectClosure:!1});let c=await Q(a.shell,0x20000000,b);h(c.digest===a.shellDigest,"executable-digest"),(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,s(d))}}catch{try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[trusted-host-source]","refused",b?.aborted?"signal-aborted":"revision-or-read",f)}catch{}throw new v(b?.aborted?"HOST_CONSENT_REQUIRED":"HOST_SOURCE_CHANGED")}if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let g=await O(d,b);if(g.ownerId!==e.ownerId||g.digest!==e.digest||g.workspace!==e.workspace)throw new v("HOST_CONSENT_REQUIRED");return g}},555271:(a,b,c)=>{c.d(b,{Zg:()=>e});var d,e=((d={}).MODELS="models",d.AVATAR_WORLD="avatar_world",d.FLOWS="flows",d.TICKETS="tickets",d.CHAT_HISTORY="history",d.THEME="theme",d.THEME_STYLE="theme_style",d.LIVING_WORLD_ENABLED="living_world_enabled",d.ENCRYPTION_KEY="encryption_key",d.MCP_SERVERS="mcp_servers",d.GLOBAL_ENV_VARS="global_env_vars",d.CURRENT_CONVERSATION_ID="current_conversation_id",d.SELECTED_FLOW_ID="selected_flow_id",d.LAST_PICKED_FLOW_ID="last_picked_flow_id",d.SPEECH_SETTINGS="speech_settings",d.SPOTLIGHT_SERVERS="spotlight_servers",d.PLANNED_EXECUTIONS="planned_executions",d.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",d.MCP_QUALITY_SETTINGS="mcp_quality_settings",d.MCP_APP_CONSENT="mcp_app_consent",d.RUN_RESOURCE_SETTINGS="run_resource_settings",d.MEMORY_SETTINGS="memory_settings",d.SUBFLOW_TASK_SETTINGS="subflow_task_settings",d.MCP_REMOTE_TASK_SETTINGS="mcp_remote_task_settings",d.KV_STORE_SETTINGS="kv_store_settings",d.PENDING_APPROVALS="pending_approvals",d.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",d.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",d.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",d.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",d.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",d.MCP_SHIPPED_SERVER_ROOTS_MIGRATION_V5="mcp_shipped_server_roots_migration_v5",d.MCP_SHIPPED_BROWSER_REPAIR_MIGRATION_V6="mcp_shipped_browser_repair_migration_v6",d.MCP_SHIPPED_FLUJO_REPAIR_MIGRATION_V7="mcp_shipped_flujo_repair_migration_v7",d.MCP_SHIPPED_BASH_REPAIR_MIGRATION_V8="mcp_shipped_bash_repair_migration_v8",d.PACKAGE_INSTALLS="package_installs",d.EXPERIMENTAL_SETTINGS="experimental_settings",d.REGISTRY_ACCOUNT="registry_account",d.REGISTRY_SETTINGS="registry_settings",d.TELEMETRY_STATE="telemetry_state",d.SNAPSHOT_RETENTION_POLICY="snapshot_retention_policy",d.MEMORY_EMBEDDINGS="memory_embeddings",d)},595391:(a,b,c)=>{c.d(b,{V$:()=>m,sA:()=>l});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598);function h(a,b,c=!1){let d=f().relative(f().resolve(a),f().resolve(b));return""===d?c:!d.startsWith("..")&&!f().isAbsolute(d)}async function i(a){try{return await d.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}function j(a,b){if(!a||a.isSymbolicLink()||!a.isDirectory())throw Error(`${b} must be a real directory, not a symbolic link or junction.`)}async function k(a,b,c){let e=f().resolve(a),g=f().resolve(b);if(j(await i(e),"Workspace restore boundary"),!h(e,g,!0))throw Error(`Restore directory escapes workspace boundary: ${g}`);let k=f().relative(e,g),l=e;for(let a of k?k.split(f().sep):[]){l=f().join(l,a);let b=await i(l);if(!b&&c){try{await d.promises.mkdir(l)}catch(a){if("EEXIST"!==a.code)throw a}b=await i(l)}j(b,`Restore path component ${l}`)}if(!h(await d.promises.realpath(e),await d.promises.realpath(g),!0))throw Error(`Restore directory resolves outside workspace boundary: ${g}`)}async function l(a,b,c,e={}){let h,j=e.assertOwned;await j?.();let m=f().dirname(b);await k(a,m,!0),await j?.();let n=await i(b);if(n?.isSymbolicLink())throw Error(`Refusing to replace symbolic link or junction: ${b}`);if(n&&!n.isFile())throw Error(`Refusing to replace non-file restore target: ${b}`);let o=f().join(m,`.flujo-restore-${(0,g.randomUUID)()}.tmp`),p=!1;try{let f=384|(e.mode??0)&64;await j?.();let g=await d.promises.open(o,d.constants.O_WRONLY|d.constants.O_CREAT|d.constants.O_EXCL,f);p=!0;try{h=await g.stat({bigint:!0}),await j?.(),await g.writeFile(c),await j?.(),await g.sync(),await j?.(),h=await g.stat({bigint:!0})}finally{await g.close()}for(let c=0;;c++){var q;await k(a,m,!1);let e=await d.promises.lstat(o,{bigint:!0});if(!h||e.isSymbolicLink()||!e.isFile()||(q=h,q.dev!==e.dev||q.ino!==e.ino||q.size!==e.size||q.mtimeNs!==e.mtimeNs||q.ctimeNs!==e.ctimeNs||q.mode!==e.mode||q.uid!==e.uid||q.gid!==e.gid||q.nlink!==e.nlink))throw Error("Restore temporary file changed before publication.");let f=await i(b);if(f?.isSymbolicLink()||f&&!f.isFile())throw Error(`Restore target became unsafe: ${b}`);await j?.();try{await d.promises.rename(o,b);break}catch(a){if(c>=14||!["EPERM","EBUSY","EACCES"].includes(a.code??""))throw a;await new Promise(a=>setTimeout(a,Math.min(100,5*2**c)))}}p=!1,await j?.()}finally{if(p)try{let a=await d.promises.lstat(o,{bigint:!0});h&&a.isFile()&&!a.isSymbolicLink()&&a.dev===h.dev&&a.ino===h.ino&&await d.promises.unlink(o)}catch{}}}async function m(a,b){await k(a,f().dirname(b),!1)}c(504573)},601186:(a,b,c)=>{c.r(b),c.d(b,{"40064b3bb4012d9b48afd736a05e4a27b19486d83b":()=>d.V,"6017d1d90a84849ef08e2cd5f773e5acb98dedee0f":()=>d.G,"60eab620425ddbd86cc239ac6b8fc50095e3a9f1ef":()=>d.resolveGlobalVars});var d=c(122134)},711873:(a,b,c)=>{c.d(b,{HK:()=>t,P1:()=>s,kU:()=>n,nT:()=>q});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(731612),i=c(977598);let j=process.getBuiltinModule("node:module"),{createRequire:k}=j,l=h.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0")),m=h.string().max(256).regex(/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/),n=h.object({packageName:h.string().max(214).regex(/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/),packageVersion:m,npmVersion:m,packageDirectory:l,binaryName:h.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/),shell:l,shellDigest:h.string().regex(/^[a-f0-9]{64}$/)}).strict();function o(a,b){let c=g().relative(a,b);return!!c&&".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}function p(a,b){return"win32"===process.platform?g().resolve(a).toLowerCase()===g().resolve(b).toLowerCase():g().resolve(a)===g().resolve(b)}function q(a){let{sourceRoot:b,entryPoint:c,command:d,cwd:e,args:f,runner:h,environment:i}=a;if(!o(b,h.packageDirectory)||!o(b,h.shell)||!o(b,c)||"npx-cli.js"!==g().basename(c)||"bin"!==g().basename(g().dirname(c))||o(b,e)||p(b,e)||!/^node(?:\.exe)?$/i.test(g().basename(d))||"-y"!==f[0]||f[1]!==`${h.packageName}@${h.packageVersion}`)throw Error("Invalid package runner declaration");for(let[a]of i)if(/^npm_config_/i.test(a)&&"NPM_CONFIG_CACHE"!==a.toUpperCase())throw Error("Ambient npm configuration is forbidden");let j=a=>[...i].find(([b])=>b.toUpperCase()===a)?.[1];if(!j("NPM_CONFIG_CACHE")||!g().isAbsolute(j("NPM_CONFIG_CACHE")))throw Error("Declare the package runner cache");if("win32"===process.platform&&(j("COMSPEC")!==h.shell||".COM;.EXE;.BAT;.CMD"!==j("PATHEXT")))throw Error("Declare the reviewed Windows shell and extensions");let k=[g().join(h.packageDirectory,"node_modules",".bin"),g().dirname(d)].join(g().delimiter);if(j("PATH")!==k)throw Error("Declare only the reviewed package and Node binary paths")}function r(a){let b,c=()=>{for(let b=g().resolve(a);;b=g().dirname(b)){if(e().lstatSync(b).isSymbolicLink())throw Error("Linked package manifest path");if(g().dirname(b)===b)break}if(!p(e().realpathSync(a),a))throw Error("Retargeted package manifest")};c();let d=e().openSync(a,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let f=e().fstatSync(d,{bigint:!0});if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(1048576))throw Error("Invalid package manifest");b=Buffer.alloc(Number(f.size)+1);let g=0;for(;g<b.length;){let a=e().readSync(d,b,g,b.length-g,null);if(!a)break;g+=a}if(BigInt(g)!==f.size)throw Error("Manifest changed while reading");let h=e().fstatSync(d,{bigint:!0}),i=e().lstatSync(a,{bigint:!0});if(c(),i.isSymbolicLink()||!i.isFile()||!["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(a=>f[a]===h[a]&&f[a]===i[a]))throw Error("Manifest changed");let j=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(b.subarray(0,g)));if(!j||"object"!=typeof j||Array.isArray(j))throw Error("Invalid package manifest");return j}finally{b?.fill(0),e().closeSync(d)}}function s(a,b,c,d,f){for(let a=g().resolve(c);;a=g().dirname(a)){if(e().lstatSync(a).isSymbolicLink()||!p(e().realpathSync(a),a))throw Error("Unsafe package runner working directory");for(let b of[g().join(a,"node_modules",".bin")]){try{e().lstatSync(b)}catch(a){if("ENOENT"===a.code)continue;throw a}throw Error("Unreviewed npm ancestor resolution candidate")}if(g().dirname(a)===a)break}let h=r(g().join(g().dirname(g().dirname(b)),"package.json"));if("npm"!==h.name||h.version!==d.npmVersion)throw Error("npm revision changed");let l=g().join(d.packageDirectory,".npmrc");try{let a=e().lstatSync(l);if(!a.isFile()||a.isSymbolicLink()||1!==a.nlink||0!==a.size)throw Error("Unreviewed project npm configuration")}catch(a){if("ENOENT"!==a.code)throw a}for(let b of["runner-user.npmrc","runner-global.npmrc"]){let c=g().join(a,b),d=e().lstatSync(c);if(!d.isFile()||d.isSymbolicLink()||1!==d.nlink||0!==d.size)throw Error("npm control file changed")}let n=g().join(d.packageDirectory,"node_modules",...d.packageName.split("/")),q=r(g().join(d.packageDirectory,"package.json"));if(void 0!==q.bin||void 0!==q.workspaces)throw Error("Installation project may not redirect npm binary selection");let s=r(g().join(n,"package.json"));if(s.name!==d.packageName||s.version!==d.packageVersion)throw Error("Package revision changed");let t=s.bin,u="string"==typeof t&&d.binaryName===d.packageName.split("/").at(-1)?t:t&&"object"==typeof t&&!Array.isArray(t)?t[d.binaryName]:void 0;if("string"!=typeof u||!o(n,g().resolve(n,u)))throw Error("Package binary changed");let v="string"==typeof t?{[d.packageName.split("/").at(-1)]:t}:t;if((1===new Set(Object.values(v)).size?Object.keys(v)[0]:v[d.packageName.split("/").at(-1)]?d.packageName.split("/").at(-1):void 0)!==d.binaryName)throw Error("npm binary selection differs from the reviewed binary");let w=g().join(d.packageDirectory,"node_modules",".bin",d.binaryName+("win32"===process.platform?".cmd":""));if(!e().lstatSync(w).isFile()||e().lstatSync(w).isSymbolicLink())throw Error("Materialize the reviewed package binary shim");return f?.inspectClosure===!1?void 0:function(a,b,c){let d=new Map,f=new Set,h=[],l=0,n=a=>{let b=d.get(a);if(!b){if(d.size>=1024)throw Error("Package graph exceeds inspection bounds");if("string"!=typeof(b=r(g().join(a,"package.json"))).name||b.name.length>214||!m.safeParse(b.version).success)throw Error("Package graph revision unavailable");d.set(a,b)}return b},p=a=>{try{return e().lstatSync(a),!0}catch(a){if("ENOENT"===a.code)return!1;throw a}},q=b=>{if(f.has(b))return;f.add(b);let d=n(b),e={directory:g().relative(a,b).split(g().sep).join("/"),name:d.name,version:d.version,dependencies:[]};h.push(e);let i=new Map;for(let a of["dependencies","peerDependencies","optionalDependencies"]){let b=d[a];if(void 0!==b){if(!b||"object"!=typeof b||Array.isArray(b)||Object.keys(b).length>256)throw Error("Invalid package dependencies");for(let[c,e]of Object.entries(b)){if(++l>8192||!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(c)||c.length>214||"string"!=typeof e||e.length>2048)throw Error("Invalid package dependency declaration");let b=d.peerDependenciesMeta,f="peerDependencies"===a&&b&&"object"==typeof b&&b[c]?.optional===!0,g=e.startsWith("npm:")?/^npm:((?:@[^/]+\/)?[^@]+)(?:@.*)?$/.exec(e)?.[1]:void 0;if(e.startsWith("npm:")&&!g)throw Error("Invalid package alias");i.set(c,{optional:"optionalDependencies"===a||!!f,target:g??c})}}}let m=function(a,b){let c=Reflect.get(j,"globalPaths");if(!Array.isArray(c)||c.some(a=>"string"!=typeof a))throw Error("Native module search roots unavailable");let d=new Set(c.map(a=>g().resolve(a))),e=(k(a).resolve.paths("flujo-owned-dependency-inspection")??[]).filter(a=>!d.has(g().resolve(a)));if(b){let a="win32"===process.platform?g().dirname(b.command):g().dirname(g().dirname(b.command));e.push(g().join(a,"lib","node"),...b.home?[g().join(b.home,".node_modules"),g().join(b.home,".node_libraries")]:[])}return[...new Set(e)]}(g().join(b,"package.json"),c);for(let[b,c]of i){let d;for(let c of m){let e=g().join(c,...b.split("/"));if(!o(a,c)){if(["",".js",".json",".node"].some(a=>p(e+a)))throw Error("Ambient Node dependency candidate");continue}if([".js",".json",".node"].some(a=>p(e+a)))throw Error("Package dependency redirected to an unreviewed file");if(p(e)){d=e;break}}if(!d){if(!c.optional)throw Error(`Materialized runtime dependency missing: ${b}`);e.dependencies.push({name:b,...c,directory:null});continue}if(n(d).name!==c.target)throw Error("Package dependency identity differs from its declaration");e.dependencies.push({name:b,...c,directory:g().relative(a,d).split(g().sep).join("/")}),q(d)}};for(let a of b)q(a);for(let a of(h.sort((a,b)=>a.directory<b.directory?-1:+(a.directory>b.directory)),h))a.dependencies.sort((a,b)=>a.name<b.name?-1:+(a.name>b.name));return{inventory:h,digest:(0,i.createHash)("sha256").update("flujo:mcp:local-npx-dependencies:v1\0").update(JSON.stringify(h)).digest("hex")}}(a,[g().dirname(g().dirname(b)),d.packageDirectory],f)}function t(a,b,c,d,e){return[c,`--prefix=${b.packageDirectory}`,"--offline","--ignore-scripts","--no-update-notifier","--no-audit","--no-fund","--workspaces=false",`--userconfig=${g().join(a,"runner-user.npmrc")}`,`--globalconfig=${g().join(a,"runner-global.npmrc")}`,`--script-shell=${b.shell}`,`--cache=${e}`,...d]}},749527:(a,b,c)=>{c.d(b,{dw:()=>n,re:()=>e});var d=c(178877);class e extends Error{constructor(a,b){super(429===b?"Conversation history reads are busy. Retry shortly.":"Insufficient memory to safely load complete conversation history. Retry after active work finishes."),this.code=a,this.status=b,this.name="ConversationLogReadPressureError"}}let f=globalThis,g=f.__flujoConversationLogReadAdmission??={active:0,bytes:0},h=g.waiters??=[],i=new WeakMap;function j(a){let b=6*a+131072;if(!Number.isSafeInteger(b)||a<0)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}function k(a){let b=(0,d.getHeapStatistics)();return g.bytes+a<=b.heap_size_limit-b.used_heap_size-0x4000000}function l(){for(let a of h.splice(0))a()}async function m(a){let b=Date.now()+3e4;for(;;){let c=g.active<4;if(c&&k(a))return;if(c&&0===g.active)throw new e("CONVERSATION_LOG_READ_MEMORY",503);let d=b-Date.now();if(d<=0)throw c?new e("CONVERSATION_LOG_READ_MEMORY",503):new e("CONVERSATION_LOG_READ_BUSY",429);await new Promise(a=>{let b=setTimeout(a,Math.min(d,1e3));h.push(()=>{clearTimeout(b),a()})})}}async function n(a,b,c){if(void 0!==c){let d=c&&i.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let f=j(a);if(!k(f))throw new e("CONVERSATION_LOG_READ_MEMORY",503);g.bytes+=f;let h=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=f,l()});return d.pending.add(h),h.then(()=>d.pending.delete(h),()=>d.pending.delete(h)),h}let d=j(a);await m(d);let f=Object.freeze({}),h={open:!0,pending:new Set};i.set(f,h),g.active++,g.bytes+=d;try{return await b(f)}finally{h.open=!1,await Promise.allSettled([...h.pending]),i.delete(f),g.active--,g.bytes-=d,l()}}},808552:(a,b,c)=>{c.d(b,{H6:()=>y,MI:()=>s,Sc:()=>u});var d=c(973024),e=c(176760),f=c.n(e),g=c(446193),h=c(16698),i=c(977598),j=c(189663),k=c(492093),l=c(34762),m=c(76528);let n=globalThis,o=n.__flujoPublicationIntentContextV1??=new h.AsyncLocalStorage,p=n.__flujoPublicationIntentProcessV1??={token:(0,i.randomUUID)(),startedAt:Date.now()-Math.round(1e3*process.uptime()),live:new Set};async function q(a){let b,c;if(p.live.has(a))return;try{b=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0))}catch(a){return"ENOENT"===a.code?"gone":void 0}let e={};try{c=await b.stat({bigint:!0});try{e=JSON.parse(await b.readFile("utf8"))??{}}catch{}}catch{return}finally{await b.close().catch(()=>void 0)}if(!c.isFile())return;if(e.process===p.token)return c;let f="number"==typeof e.startedAt?e.startedAt:Number(c.mtimeMs);return Date.now()-f>6e5?c:"number"==typeof e.pid?e.pid!==process.pid&&function(a){try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}}(e.pid)?void 0:c:f<p.startedAt?c:void 0}async function r(a,b){try{let c=await d.promises.lstat(a,{bigint:!0});w(c,b)&&await d.promises.unlink(a)}catch{}}async function s(a,b){let c,e=f().join((0,j.getWorkspaceDataDir)(),"db","conversation-publications",`${a}.json`),g=o.getStore();if(g?.live&&g.filename===e)return b();await x(),await u(()=>d.promises.mkdir(f().dirname(e),{recursive:!0}));let h=await u(()=>d.promises.lstat(f().dirname(e),{bigint:!0}));if(!h.isDirectory()||h.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","publication intent directory is unsafe");let i=Date.now()+15e3;for(let a=0;!c;a++)try{c=await d.promises.open(e,"wx",384)}catch(c){if("EEXIST"!==c.code)throw new m.MO("CONVERSATION_PUBLICATION_IO","could not create a publication intent",{cause:c});let b=a<3?await q(e):void 0;if(b){"gone"!==b&&await r(e,b);continue}if(Date.now()>=i)throw new m.MO("CONVERSATION_PUBLICATION_BUSY","another FLUJO process is still writing this conversation");await new Promise(b=>setTimeout(b,Math.min(1e3,50*2**a)))}p.live.add(e);try{return await t(c,e,h,a,b)}finally{p.live.delete(e)}}async function t(a,b,c,e,g){let h,j;try{h=await a.stat({bigint:!0}),await a.writeFile(JSON.stringify({version:2,conversationId:e,token:(0,i.randomUUID)(),startedAt:Date.now(),pid:process.pid,process:p.token}))}catch(c){try{await a.close()}catch{(0,m.B_)("intent descriptor closure is uncertain",void 0,!0,{intent:b})}throw(0,m.B_)("publication intent did not finish",c,!1,{intent:b})}try{await a.close()}catch(a){throw(0,m.B_)("intent descriptor closure is uncertain",a,!0,{intent:b})}let k={filename:b,live:!0};try{return await o.run(k,g)}catch(a){throw j=a}finally{try{await (0,m.l7)()}catch(a){void 0===j&&(j=a)}if(k.live=!1,!(0,m.by)())try{await x();let a=await d.promises.lstat(b,{bigint:!0}),e=await d.promises.lstat(f().dirname(b),{bigint:!0});if(!h||!v(a,h)||!e.isDirectory()||e.isSymbolicLink()||e.dev!==c.dev||e.ino!==c.ino)throw Error("Publication intent identity changed");await d.promises.unlink(b)}catch{}if(void 0!==j)throw j}}async function u(a){try{return await a()}catch(a){if((0,m.sE)(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name)throw a;throw new m.MO("CONVERSATION_PUBLICATION_IO","required durable publication failed",{cause:a})}}let v=(a,b)=>a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===b.dev&&a.ino===b.ino,w=(a,b)=>v(a,b)&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs;async function x(){await (0,k.qy)(),await (0,l.QO)()}async function y(a,b){await x();let c=f().dirname(a);await u(()=>d.promises.mkdir(c,{recursive:!0}));let e=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!e.isDirectory()||e.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log directory is unsafe");let g=await u(()=>d.promises.open(a,d.constants.O_RDWR|d.constants.O_CREAT|(d.constants.O_NOFOLLOW??0),384)),h={filename:a};try{let f=await u(()=>g.stat({bigint:!0}));if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(Number.MAX_SAFE_INTEGER))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log is not a regular owned file");let i=f,j=Number(f.size);h={filename:a,dev:String(f.dev),ino:String(f.ino),start:String(f.size)};let k=async()=>{let b=await u(()=>d.promises.lstat(a,{bigint:!0})),f=await u(()=>g.stat({bigint:!0})),j=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!w(f,i)||!w(b,i)||!j.isDirectory()||j.isSymbolicLink()||j.dev!==e.dev||j.ino!==e.ino)throw(0,m.B_)("conversation log identity or appended suffix changed",void 0,!1,h);await x()};await k();let l=!1;if(j>0){let a=Buffer.alloc(1),{bytesRead:b}=await u(()=>g.read(a,0,1,j-1));l=1===b&&10!==a[0]}let n=l,o=async a=>{let b=0;for(;b<a.length;){let c=await g.write(a,b,a.length-b,j);if(!c.bytesWritten)throw Error("Conversation log made no write progress");b+=c.bytesWritten,j+=c.bytesWritten}},p=async a=>{try{let b=await g.stat({bigint:!0});if(!v(b,f)||b.size<BigInt(a))return!1;return b.size!==BigInt(a)&&(await g.truncate(a),await g.sync()),i=await g.stat({bigint:!0}),j=a,i.size===BigInt(a)}catch{return!1}};return await b({activeMessageIds:()=>u(()=>z(g,Number(f.size))),append:async a=>{await k();let b=j;try{for(let b of(l&&await o(Buffer.from("\n")),(0,m.gm)(a,!0)))await o(b);if(await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==BigInt(j))throw(0,m.B_)("conversation append completion has no owned suffix witness",void 0,!1,h);await k(),l=!1}catch(a){if(await p(b))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation append did not finish and was rolled back",{cause:a});throw(0,m.B_)("conversation append outcome requires reconciliation",a,!1,{...h,acknowledgedEnd:String(j)})}},rollback:async()=>{await k();try{if(await g.truncate(Number(f.size)),await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==f.size)throw Error("Rollback size changed");j=Number(f.size),l=n,await k()}catch(a){throw(0,m.B_)("conversation rollback requires reconciliation",a,!1,h)}}})}finally{try{await g.close()}catch{}}}async function z(a,b){(0,m.Ev)(0x2000000);let c=Buffer.alloc(65536),d=new g.StringDecoder("utf8"),e=new Set,f=new Map,h=[],i="",j=0,k="",l=!1,n=!1,o=!1,p=0,q=!1,r=!1,s=0,t=0,u=0,v=0,w=()=>{throw new m.MO("CONVERSATION_PUBLICATION_MEMORY","transcript metadata exceeds its bounded rewrite policy")},x=()=>{h=[],i="",j=0,u=0,v=0},y=a=>{j+a.length>1048576&&w(),j+=a.length;for(let b=0;b<a.length;){let c=Math.min(4096-i.length,a.length-b);i+=a.slice(b,b+c),b+=c,4096===i.length&&(h.push(Buffer.from(i,"utf16le").toString("utf16le")),i="")}},z=()=>{let a;if(r){r=!1,x();return}i&&h.push(i);let b=h.join("");if(x(),b.trim()){try{a=JSON.parse(b)}catch{return}if(a?.type==="message"&&a.message&&"system"!==a.message.role){let b=a.message.id;if(null===b&&w(),"string"!=typeof b||!b)return;b.length>4096&&w();let c=b;if(e.has(c)&&/^stream_codex_item_/.test(c)){let a=(f.get(c)??1)+1;f.set(c,a),c=`${c}_legacy_${a}`}else f.has(c)||((t+=c.length)>1048576&&w(),f.set(c,1));e.has(c)||(e.add(c),p+=c.length),(e.size>65536||f.size>65536||p>1048576)&&w()}else a?.type==="message:removed"&&(null===a.messageId&&w(),"string"==typeof a.messageId&&e.delete(a.messageId)&&(p-=a.messageId.length))}},A=a=>{for(let b=0;b<a.length;b++){let c=a[b];if(q){if(" "===c||" "===c||"\r"===c)continue;y(":"===c?'""':"null"),q=!1}if("\n"===c){l?(x(),r=!1):z(),l=!1,n=!1,k="",o=!1,s=0;continue}if(!l){"{"===c||"["===c?++u>128&&w():("}"===c||"]"===c)&&u--,'{[,"'.includes(c)&&++v>262144&&w(),'"'===c?(l=!0,k='"',o=!1):y(c);continue}!o&&(k+=c).length>24578&&(o=!0,k=""),s?(/[0-9a-f]/i.test(c)||(r=!0),s--):n?(n=!1,"u"===c?s=4:'"\\/bfnrt'.includes(c)||(r=!0)):"\\"===c?n=!0:'"'===c?(l=!1,o?q=!0:y(k),k=""):32>c.charCodeAt(0)&&(r=!0)}};for(let e=0;e<b;){let{bytesRead:f}=await a.read(c,0,Math.min(c.length,b-e),e);if(!f)throw Error("Conversation log changed while reading rewrite metadata");e+=f,A(d.write(c.subarray(0,f)))}return A(d.end()),q&&y("null"),l||z(),[...e]}},820100:(a,b,c)=>{c.d(b,{T8:()=>l,uj:()=>k});var d=c(973024),e=c(977598),f=c(176760),g=c.n(f),h=c(482432);function i(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function j(a){if(!a.isFile()||a.isSymbolicLink()||a.nlink!==BigInt(1)||a.size>BigInt(65536)||"win32"!==process.platform&&((a.mode&BigInt(63))!==BigInt(0)||a.uid!==BigInt(process.getuid?.()??-1)))throw Error("Invalid owner policy file")}function k(a){if(!g().isAbsolute(a))throw Error("Invalid owner policy path");let b=g().resolve(a),c=(0,d.lstatSync)(b,{bigint:!0});j(c);let e=(0,d.realpathSync)(b);if(""!==g().relative(e,b))throw Error("Invalid owner policy path");let f=(0,d.openSync)(b,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let a=(0,d.fstatSync)(f,{bigint:!0});if(j(a),!i(c,a))throw Error("Owner policy changed");let k=Buffer.alloc(65537),l=0;for(;l<k.length;){let a=(0,d.readSync)(f,k,l,k.length-l,null);if(0===a)break;l+=a}let m=(0,d.lstatSync)(b,{bigint:!0});if(l>65536||BigInt(l)!==a.size||!i(a,(0,d.fstatSync)(f,{bigint:!0}))||!i(a,m)||m.isSymbolicLink()||""!==g().relative(e,(0,d.realpathSync)(b)))throw Error("Owner policy changed");return h.rF.parse(JSON.parse(k.subarray(0,l).toString("utf8")))}finally{(0,d.closeSync)(f)}}function l(a){return(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex")}},884122:(a,b,c)=>{c.d(b,{At:()=>g,Hd:()=>f,MO:()=>d,sE:()=>e});class d extends Error{constructor(a,b,c){super(`Conversation publication refused: ${b}. Existing durable history is retained.`,c),this.code=a,this.name="ConversationPublicationError",this.status="CONVERSATION_PUBLICATION_BUSY"===a?429:503,this.details={code:a,status:this.status,type:"conversation_publication_error"}}}function e(a){return a instanceof Error&&"ConversationPublicationError"===a.name}function f(a){return e(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name}function g(a){return"string"==typeof a&&(a.startsWith("CONVERSATION_PUBLICATION_")||a.startsWith("CONVERSATION_SEQUENCE_"))}},901984:(a,b,c)=>{c.d(b,{ok:()=>f});var d=c(333873),e=c.n(d);function f(){let a=process.env.FLUJO_PARENT_DATA_DIR;if(a&&a.trim().length>0)return e().resolve(a);let b=process.env.FLUJO_DATA_DIR;return b&&b.trim().length>0?e().resolve(b):process.cwd()}},950902:(a,b,c)=>{c.d(b,{Cg:()=>g,IP:()=>f});var d=c(300643);let e=["CONFIG","ASSETS","DEP_LAYOUT","DEP_GRAPH","DEP_LINKS","SOURCE_FINGERPRINT","EXEC_FINGERPRINT","CONSENT_DIGEST","CONSENT_POLICY_SCHEMA","CONSENT_LAUNCH","CONSENT_BUNDLE","CONSENT_ENVIRONMENT","CONSENT_CAPABILITIES","CONSENT_SERIALIZE","CONSENT_SCRYPT","APPROVAL_INITIALIZE","APPROVAL_SEED_PARENT","APPROVAL_SEED_OWNER","APPROVAL_SEED_IDENTITY","APPROVAL_SEED_AUTHORITY","APPROVAL_LOCK","APPROVAL_REQUEST","APPROVAL_PROPOSAL","APPROVAL_AUTHORITY","APPROVAL_STAGE","APPROVAL_RECHECK","APPROVAL_CONFIG","APPROVAL_SAVE","APPROVAL_PUBLICATION","APPROVAL_DISPOSE"];class f extends Error{constructor(a,b){super("Bundled consent preview refused.",{cause:b}),this.stage=a}}async function g(a,b){let c=function(a){try{if("1"!==process.env.FLUJO_BUNDLED_CONSENT_TRACE||!e.includes(a))return;let b=d.performance.now();return Number.isFinite(b)?b:void 0}catch{return}}(a);try{return await b()}catch(b){if(b instanceof f)throw b;throw new f(a,b)}finally{!function(a,b){if(void 0!==b)try{let c=d.performance.now()-b;if(!Number.isFinite(c))return;console.info(JSON.stringify({bundledConsentStage:a,elapsedMs:Math.max(0,c)}))}catch{}}(a,c)}}},959933:(a,b,c)=>{function d(){return"1"===process.env.FLUJO_WORKER_MODE}function e(){return d()?global.__flujo_worker_bootstrap_status??{mode:"worker",state:"not-started"}:{mode:"local",state:"not-started"}}c.d(b,{dT:()=>e,ye:()=>d})}};
56
+ ${b}`}catch(a){h+=": [Object cannot be stringified]"}else h+=`: ${d}`;switch(h=h.replace(/[\r\n\u2028\u2029]/g," ").replaceAll("\x1b","[ESC]").replace(/\p{Control}/gu,a=>`\\u${a.charCodeAt(0).toString(16).padStart(4,"0")}`),a){case -1:console.debug(`[VERBOSE] ${h}`);break;case 0:console.debug(h);break;case 1:console.info(h);break;case 2:console.warn(h);break;case 3:console.error(h);break;default:console.log(h)}}}function h(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{g(-1,d,a,c,b)},debug:(a,c)=>{g(0,d,a,c,b)},info:(a,c)=>{g(1,d,a,c,b)},warn:(a,c)=>{g(2,d,a,c,b)},error:(a,c)=>{g(3,d,a,c,b)}}}},76528:(a,b,c)=>{c.d(b,{B_:()=>z,Ev:()=>x,JN:()=>s,Lf:()=>t,MO:()=>i.MO,Sd:()=>u,Sg:()=>E,by:()=>w,gm:()=>H,l7:()=>v,oK:()=>y,pw:()=>F,sE:()=>i.sE,sR:()=>A});var d=c(16698),e=c(257975),f=c(178877),g=c(377424),h=c(295489),i=c(884122);let j=Object.freeze({writers:4,retainedBytes:0x10000000,ownerBytes:0x8000000,slots:262144,depth:128,bufferBytes:65536,stringChars:8192}),k=globalThis,l=k.__flujoConversationPublicationV1??={bytes:0,retained:0,owners:0,writers:0,quarantined:0,rejected:0,chains:new Map,fences:new Map,receipts:new Map,waiters:[],context:new d.AsyncLocalStorage,batches:new Map,captures:new WeakMap,immutableSnapshots:new WeakSet};function m(a,b){throw l.rejected++,new i.MO(a,b)}function n(a){let b=0;for(let c=a;c;c=Object.getPrototypeOf(c)){(++b>128||e.types.isProxy(c))&&m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported");let a=Object.getOwnPropertyDescriptor(c,"toJSON");!a||"value"in a&&"function"!=typeof a.value||m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported")}}function o(a,b){let c=Object.getOwnPropertyDescriptor(a,b);return!c||"value"in c||m("CONVERSATION_PUBLICATION_DATA","accessors are unsupported"),c?.value}l.captures??=new WeakMap,l.immutableSnapshots??=new WeakSet,l.batches??=new Map,(0,g.rF)("publication",l.bytes);let p=a=>void 0===a||"function"==typeof a||"symbol"==typeof a;function q(a,b,c){let d=0,i=0,k=0,q=null!==b&&"object"==typeof b?l.captures.get(b):void 0,r=l.context.getStore(),s=!!q?.live&&q===r&&q.owner.live&&q.owner.key===a&&l.immutableSnapshots.has(b)&&!c,t=new Set,u=(a,b,f)=>{if(!f&&(++d>j.slots||b>j.depth)&&m("CONVERSATION_PUBLICATION_DATA","JSON descriptor work exceeds the bounded publication policy"),f||(k+=64),"string"==typeof a)f||(i+=2*a.length);else if(null!==a&&"object"==typeof a){(e.types.isProxy(a)||t.has(a))&&m("CONVERSATION_PUBLICATION_DATA","a proxy or cycle cannot be captured");let d=Array.isArray(a);!function a(b,c){if(null===b)return!c;if(e.types.isProxy(b))return!1;let d=Object.getOwnPropertyDescriptor(b,"constructor");if(!d||!("value"in d)||"function"!=typeof d.value||e.types.isProxy(d.value))return!1;let f=c?Array:Object;return Function.prototype.toString.call(d.value)===Function.prototype.toString.call(f)&&Object.getOwnPropertyDescriptor(d.value,"prototype")?.value===b&&(c?a(Object.getPrototypeOf(b),!1):null===Object.getPrototypeOf(b))}(Object.getPrototypeOf(a),d)&&m("CONVERSATION_PUBLICATION_DATA","only plain JSON containers can be captured"),n(a),t.add(a);let g=f?d?[]:Object.create(null):void 0;try{if(d){let c=o(a,"length");c>j.slots&&m("CONVERSATION_PUBLICATION_DATA","array length exceeds publication policy");for(let d=0;d<c;d++){let c=String(d);!Object.hasOwn(a,c)&&c in a&&m("CONVERSATION_PUBLICATION_DATA","inherited array values are unsupported");let e=o(a,c),h=u(e,b+1,f);f&&g.push(p(e)?null:h)}}else for(let d in a){if(!Object.hasOwn(a,d)||0===b&&c?.has(d))continue;f||(k+=48+2*d.length,i+=2*d.length);let e=o(a,d),h=u(e,b+1,f);f&&!p(e)&&(g[d]=h)}}finally{t.delete(a)}if(f)return g}else"bigint"==typeof a?m("CONVERSATION_PUBLICATION_DATA","BigInt is not JSON data"):"function"==typeof a&&n(a);return!f&&i+k>j.ownerBytes&&m("CONVERSATION_PUBLICATION_MEMORY","retained data exceeds the per-publication bound"),a};p(b)&&m("CONVERSATION_PUBLICATION_DATA","publication has no JSON value"),s||u(b,0,!1);let v=2*k+524288,w=(0,f.getHeapStatistics)(),x=(0,g.XF)("publication",l.bytes+v),y=process.memoryUsage().rss;(l.retained+i+k>j.retainedBytes||x>.8*w.heap_size_limit-w.used_heap_size-0x4000000||!Number.isFinite(y)||y+x>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","publication allocation capacity is occupied"),l.bytes+=v,l.retained+=i+k,(0,g.rF)("publication",l.bytes);try{return{value:s?b:u(b,0,!0),retained:i+k,bytes:v,borrowed:s}}catch(a){throw l.bytes-=v,l.retained-=i+k,(0,g.rF)("publication",l.bytes),a}}async function r(a){for(;l.writers+l.quarantined>=j.writers;)await new Promise(a=>l.waiters.push(a));l.writers++;try{return await a()}finally{l.writers--,l.waiters.shift()?.()}}function s(a,b,c,d,e){a.length>4096&&m("CONVERSATION_PUBLICATION_DATA","publication key is too long");let f=l.context.getStore(),h=f?.live&&f.owner.live&&f.owner.key===a,i=q(a,b,d);try{e?.(i.value)}catch(a){throw l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes),a}let j=h?f.owner:{key:a,live:!0,bytes:0,quarantined:!1,snapshotCommits:0},k={owner:j,live:!0,tail:Promise.resolve(),pending:new Set};i.borrowed||null===i.value||"object"!=typeof i.value||l.captures.set(i.value,k),l.owners++;let n=async()=>{let b;try{return await c(i.value)}catch(a){throw b=a}finally{k.live=!1;let c=(await Promise.allSettled([...k.pending])).find(a=>"rejected"===a.status);if(void 0===b&&void 0!==k.failure)throw k.failure;if(void 0===b&&c?.status==="rejected")throw c.reason;void 0!==b||h||(l.fences.delete(a),l.receipts.delete(a))}},o=(h?f.tail:l.chains.get(a)??Promise.resolve()).catch(()=>void 0).then(()=>h?l.context.run(k,n):r(()=>l.context.run(k,n))).finally(()=>{h?l.owners--:(j.live=!1,l.owners--,j.descriptorUncertain&&(j.descriptorUncertain=!1,l.quarantined=Math.max(0,l.quarantined-1),l.waiters.shift()?.()),l.bytes-=j.bytes,l.chains.get(a)===o&&l.chains.delete(a)),i.value=void 0,l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes)});return h?(f.tail=o,f.pending.add(o),o.then(()=>f.pending.delete(o),a=>{f.pending.delete(o),f.failure??=a})):l.chains.set(a,o),o}function t(a){let b=l.captures.get(a);if(!b?.live||b.owner!==l.context.getStore()?.owner)throw Error("Snapshot is not owned by this live publication");let c=a=>{if(null!==a&&"object"==typeof a){for(let b in a)Object.hasOwn(a,b)&&c(a[b]);Object.isFrozen(a)||Object.freeze(a)}};return c(a),l.immutableSnapshots.add(a),a}function u(){return l.context.getStore()?.owner.snapshotCommits??0}async function v(){let a=l.context.getStore();if(!a)throw Error("No conversation publication frame");a.live=!1;let b=(await Promise.allSettled([...a.pending])).find(a=>"rejected"===a.status);if(void 0!==a.failure)throw a.failure;if(b?.status==="rejected")throw b.reason}function w(){return!!l.context.getStore()?.owner.quarantined}function x(a){let b=l.context.getStore()?.owner;if(!b?.live||!Number.isSafeInteger(a)||a<0||a>0x2000000)throw Error("Invalid publication scratch reservation");let c=Math.max(0,a-b.bytes),d=(0,f.getHeapStatistics)(),e=(0,g.XF)("publication",l.bytes+c),i=process.memoryUsage().rss;(e>.8*d.heap_size_limit-d.used_heap_size-0x4000000||!Number.isFinite(i)||i+e>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","rewrite metadata allocation capacity is occupied"),b.bytes+=c,l.bytes+=c,(0,g.rF)("publication",l.bytes)}function y(){let a=l.context.getStore()?.owner;if(!a?.live)throw Error("No live conversation publication owner");a.snapshotCommits++}function z(a,b,c=!1,d){let e=l.context.getStore()?.owner;if(!e?.live)throw Error("No live conversation publication owner");let f=new i.MO("CONVERSATION_PUBLICATION_UNCERTAIN",a,b instanceof Error?{cause:Error("Publication operation failed")}:void 0);if(e.quarantined||(e.quarantined=!0),c&&!e.descriptorUncertain&&(e.descriptorUncertain=!0,l.quarantined++),d){let a=Object.entries(d);if(a.length>8||a.some(([a,b])=>a.length>64||b.length>4096))throw Error("Publication receipt exceeded its bound");l.receipts.set(e.key,Object.freeze({...d}))}return l.fences.set(e.key,f),f}async function A(a){await l.chains.get(a);let b=l.fences.get(a);if(b)throw b}let B=new Set(["EBUSY","EPERM","EACCES","EAGAIN","EMFILE","ENFILE","ETIMEDOUT","EIO","ENOSPC"]),C=new Set(["PersonaRuntimeLockTimeoutError","WorkspaceSnapshotTimeoutError"]),D=Object.freeze([100,300,900]);async function E(a){for(let b=0;;b++)try{return await a()}catch(c){let a=D[b];if(void 0===a||!(c instanceof Error&&(C.has(c.name)||((0,i.sE)(c)?"CONVERSATION_PUBLICATION_DATA"!==c.code:B.has(c.code??"")))))throw c;await new Promise(b=>setTimeout(b,a))}}function F(a,b,c,d){let e=l.context.getStore(),f=e?.live&&e.owner.live&&e.owner.key===a?e:void 0,h=l.batches.get(a);if(h&&!h.started&&h.settled&&h.parent===f&&h.owner===d&&h.settled===(f?f.tail:l.chains.get(a))){let c=q(a,b);return h.items.push(c.value),h.bytes+=c.bytes,h.retained+=c.retained,h.settled}let i={items:[],started:!1,parent:f,owner:d,bytes:0,retained:0},j=s(a,[b],async b=>{i.started=!0,l.batches.get(a)===i&&l.batches.delete(a),await c(b)},void 0,a=>{i.items=a});i.settled=j,l.batches.set(a,i);let k=()=>{l.batches.get(a)===i&&l.batches.delete(a),i.items=[],l.bytes-=i.bytes,l.retained-=i.retained,i.bytes=0,i.retained=0,(0,g.rF)("publication",l.bytes)};return j.then(k,k),j}function*G(a){yield'"';for(let b=0;b<a.length;){let c=Math.min(b+j.stringChars,a.length),d=a.charCodeAt(c-1),e=a.charCodeAt(c);c<a.length&&d>=55296&&d<=56319&&e>=56320&&e<=57343&&c--,yield JSON.stringify(a.slice(b,c)).slice(1,-1),b=c}yield'"'}function*H(a,b){let c=Buffer.allocUnsafe(j.bufferBytes),d=0;for(let e of a)for(let a of function*(){yield*function* a(b){if("string"==typeof b)return void(yield*G(b));if(null===b||"object"!=typeof b)return void(yield JSON.stringify(b));let c=Array.isArray(b);yield c?"[":"{";let d=0;for(let e in b)Object.hasOwn(b,e)&&(d++&&(yield","),c||(yield*G(e),yield":"),yield*a(b[e]));yield c?"]":"}"}(e),b&&(yield"\n")}()){let b=Buffer.byteLength(a);if(b>c.length)throw Error("Conversation JSON encoder chunk exceeded its bound");d+b>c.length&&(yield c.subarray(0,d),d=0),d+=c.write(a,d,"utf8")}d&&(yield c.subarray(0,d))}},122134:(a,b,c)=>{c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(695349),e=c(43521),f=c(304927),g=c(320108),h=c(137106),i=c(889337);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.loadItem)(g.Zg.GLOBAL_ENV_VARS,{}),e=!!d&&"object"==typeof d&&Object.values(d).every(a=>{if(!a||"object"!=typeof a)return!1;let b=a.metadata;return"string"==typeof a.value&&null!==b&&"object"==typeof b&&"boolean"==typeof b.isSecret});j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i=new Map,l=new Set;if(e)for(let[a,b]of Object.entries(d))i.set(a,b.value),b.metadata.isSecret&&l.add(a);else for(let[a,b]of Object.entries(d))i.set(a,b);let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1),e=i.get(b);if(void 0!==e){let f=e;if(!c&&(l.has(b)||f.startsWith("encrypted:")||f.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(f.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=f.substring(10),c=await (0,h.Do)(a);if(c)f=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(f.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),d=d.replace(a,f)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b=new Map;for(let[c,d]of Object.entries(a))b.set(c,await n(d));return Object.fromEntries(b)}return a},o=await n(a);return j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn("Maximum resolution depth reached (10)"),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.Do)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),m(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l,m]),(0,d.A)(k,"600ff7d2206eae52f9d771674d5f8029e5c095bb5e",null),(0,d.A)(l,"40841aa02a531ebbf36e631e77030d97227e9d3930",null),(0,d.A)(m,"6024367037e23f118f42c473679aff2d02bbea4b67",null)},137106:(a,b,c)=>{c.d(b,{Do:()=>$,pF:()=>Z,hO:()=>V,Gz:()=>_,C3:()=>ac,eS:()=>aa});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(304927),j=c(320108),k=c(189663),l=c(43521),m=c(901984),n=c(959933),o=c(268962);function p(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function q(){let a=process.env.FLUJO_ENCRYPTION_SECRET_FILE;if(void 0===a)return null;if(!g().isAbsolute(a))throw Error("Private encryption secret is unavailable");let b=g().resolve(a),c=[g().resolve((0,m.ok)())];try{c.push(e().realpathSync(c[0]))}catch(a){if("ENOENT"!==a.code)throw a}if(c.some(a=>{let c=g().relative(a,b);return""===c||".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}))throw Error("Private encryption secret must be outside the data directory");let d=e().lstatSync(b,{bigint:!0});if(!d.isFile()||d.isSymbolicLink()||d.nlink!==BigInt(1)||d.size>BigInt(1024)||""!==g().relative(e().realpathSync(b),b)||"win32"!==process.platform&&((d.mode&BigInt(63))!==BigInt(0)||d.uid!==BigInt(process.getuid?.()??-1)))throw Error("Private encryption secret is unavailable");let f=e().openSync(b,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let a=e().fstatSync(f,{bigint:!0});if(!a.isFile()||!p(d,a))throw Error("Private encryption secret changed");let c=Buffer.alloc(1025),i=0;for(;i<c.length;){let a=e().readSync(f,c,i,c.length-i,null);if(!a)break;i+=a}if(BigInt(i)!==a.size||!p(a,e().fstatSync(f,{bigint:!0}))||!p(a,e().lstatSync(b,{bigint:!0}))||""!==g().relative(e().realpathSync(b),b))throw Error("Private encryption secret changed");let j=new TextDecoder("utf-8",{fatal:!0}).decode(c.subarray(0,i)).replace(/\r?\n$/,"");if(!/^[A-Za-z0-9_-]{43,512}$/.test(j))throw Error("Private encryption secret is invalid");let k=(0,h.createHash)("sha256").update(JSON.stringify([b,...["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].map(b=>String(a[b]))])).digest("hex");return{secret:j,identity:k}}finally{e().closeSync(f)}}let r=(0,c(257975).promisify)(h.pbkdf2),s="FLUJO~";function t(a,b){return"string"==typeof a&&RegExp(`^[a-f0-9]{${2*b}}$`).test(a)}function u(a){if(!a||"object"!=typeof a||2!==a.version||!t(a.activeKey,32)||void 0!==a.legacyKey&&!t(a.legacyKey,16))throw Error("Invalid encryption keyring");return{version:2,activeKey:a.activeKey,...a.legacyKey?{legacyKey:a.legacyKey}:{}}}function v(a){return u({version:2,activeKey:(0,h.randomBytes)(32).toString("hex"),legacyKey:a})}function w(a){return(0,h.createHash)("sha256").update(Buffer.from(a.activeKey,"hex")).digest("hex")}function x(a){return(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex")}function y(a){if(a.startsWith("v2:")){let b=JSON.parse(a.slice(3));if(void 0!==b.metadataRevision&&!t(b.metadataRevision,32))throw Error("Invalid encryption metadata revision");return{...u(b),...b.metadataRevision?{metadataRevision:b.metadataRevision}:{}}}if(t(a,16))return{legacyKey:a};throw Error("Invalid encryption session key")}function z(a,b,c){if(!t(b,32))throw Error("Invalid AES-256 key");let d=(0,h.randomBytes)(12),e=(0,h.createCipheriv)("aes-256-gcm",Buffer.from(b,"hex"),d);e.setAAD(Buffer.from(c));let f=Buffer.concat([e.update(a,"utf8"),e.final()]);return`v2:${d.toString("hex")}:${e.getAuthTag().toString("hex")}:${f.toString("base64")}`}function A(a,b,c){let d=a.split(":");if(4!==d.length||"v2"!==d[0]||!t(d[1],12)||!t(d[2],16)||!t(b,32)||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(d[3]))throw Error("Invalid authenticated ciphertext");let e=(0,h.createDecipheriv)("aes-256-gcm",Buffer.from(b,"hex"),Buffer.from(d[1],"hex"));return e.setAAD(Buffer.from(c)),e.setAuthTag(Buffer.from(d[2],"hex")),Buffer.concat([e.update(Buffer.from(d[3],"base64")),e.final()]).toString("utf8")}async function B(a,b,c,d){if(d&&"user"!==b)throw Error("Invalid private key protection");let e=(0,h.randomBytes)(16),f=await r(c,e,6e5,32,"sha256"),g=w(a);return{encryption_version:2,encryption_type:b,key_id:g,kdf:"pbkdf2-sha256",kdf_iterations:6e5,...d?{key_protection:d}:{},data_encryption_salt:e.toString("hex"),data_encryption_key:z(JSON.stringify(a),f.toString("hex"),`flujo:keyring:v2:${b}:${g}${d?`:${d}`:""}`)}}async function C(a,b){if(2!==a.encryption_version||"pbkdf2-sha256"!==a.kdf||6e5!==a.kdf_iterations||!t(a.data_encryption_salt,16)||!t(a.key_id,32)||!["default","user"].includes(a.encryption_type??"")||void 0!==a.key_protection&&("user"!==a.encryption_type||!["passphrase","operator-file"].includes(a.key_protection)))throw Error("Unsupported encryption metadata");let c=await r(b,Buffer.from(a.data_encryption_salt,"hex"),6e5,32,"sha256"),d=u(JSON.parse(A(a.data_encryption_key,c.toString("hex"),`flujo:keyring:v2:${a.encryption_type}:${a.key_id}${a.key_protection?`:${a.key_protection}`:""}`)));if(w(d)!==a.key_id)throw Error("Encryption key identity mismatch");return d}async function D(a,b){if(1!==a.encryption_version||!t(a.data_encryption_iv,16))throw Error("Unsupported legacy encryption metadata");let c="user"===a.encryption_type?Buffer.from(a.data_encryption_salt,"hex"):Buffer.from("flujo_fixed_salt_v1");if("user"===a.encryption_type&&!t(a.data_encryption_salt,16))throw Error("Invalid legacy encryption salt");let d=await r(b,c,1e5,32,"sha256"),e=(0,h.createDecipheriv)("aes-256-cbc",d,Buffer.from(a.data_encryption_iv,"hex")),f=Buffer.concat([e.update(Buffer.from(a.data_encryption_key,"base64")),e.final()]).toString("utf8");if(!t(f,8))throw Error("Invalid legacy encryption key");return Buffer.from(f,"utf8").toString("hex")}class E extends Error{constructor(){super("Private encryption context changed; retry with the current profile")}}function F(){return(0,k.workspaceCacheKey)(g().resolve((0,k.getWorkspaceDataDir)()))}function G(){let a,b=global.__flujo_verified_operator_keyring;if(b){if(2!==b.version){for(let a of(global.__flujo_verified_operator_keyring=void 0,b.checks??[]))a.invalidated=!0;return}try{a=F()}catch{for(let a of(b.entries.clear(),b.checks??[]))a.invalidated=!0;return}for(let c of(b.entries.delete(a),b.checks??[]))c.namespace===a&&(c.invalidated=!0)}}async function H(a){await (0,o.bV)();let b=await a();if(!b||2!==b.encryption_version||"user"!==b.encryption_type||"operator-file"!==b.key_protection)throw new E;let c=g().resolve((0,k.getWorkspaceDataDir)()),e=await d.promises.realpath(c),f=await d.promises.stat(c,{bigint:!0});if(!f.isDirectory())throw new E;let i=q();if(!i)throw new E;let j=(0,k.workspaceCacheKey)(g().resolve((0,m.ok)()),c,e,f.dev.toString(),f.ino.toString(),String((0,n.ye)())),l=x(b),p=(0,h.createHash)("sha256").update(i.secret).digest("hex");return{metadata:b,secret:i.secret,revision:l,identity:JSON.stringify([j,l,i.identity,p])}}async function I(a,b){let c=global.__flujo_verified_operator_keyring;if(c?.version!==2){for(let a of c?.checks??[])a.invalidated=!0;global.__flujo_verified_operator_keyring=c={version:2,entries:new Map,checks:new Set}}let d={namespace:F(),invalidated:!1};c.checks.add(d);try{let e=await H(b);if(e.revision!==x(a)||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==F())throw new E;let f=c.entries.get(d.namespace);if(f?.namespace===d.namespace&&f.identity===e.identity&&w(f.ring)===e.metadata.key_id)return c.entries.delete(d.namespace),c.entries.set(d.namespace,f),{...f.ring};let g=await C(e.metadata,e.secret),h=await H(b);if(h.identity!==e.identity||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==F())throw new E;for(c.entries.delete(d.namespace),c.entries.set(d.namespace,Object.freeze({namespace:d.namespace,identity:h.identity,ring:Object.freeze({...g})}));c.entries.size>16;){let a=c.entries.keys().next();if(a.done){c.entries.clear();break}c.entries.delete(a.value)}return{...g}}catch(a){for(let a of(c.entries.delete(d.namespace),c.checks))a.namespace===d.namespace&&(a.invalidated=!0);throw a}finally{c.checks.delete(d)}}let J=(0,l.h)("utils/encryption/session");function K(){let a=(0,k.getCurrentWorkspace)();return a===k.DEFAULT_WORKSPACE?global.__flujo_server_dek??null:(global.__flujo_server_deks_by_workspace??(global.__flujo_server_deks_by_workspace=new Map)).get(a)??null}var L=c(492093),M=c(595391);let N=(0,l.h)("utils/encryption/secure"),O="flujo:secret:v2";class P extends Error{constructor(a="Encryption is locked: unlock with your password before accessing secrets"){super(a),this.name="EncryptionLockedError",Object.setPrototypeOf(this,P.prototype)}}async function Q(a){let b=global.__flujo_encryption_metadata_locks??=new Map,c=(0,k.workspaceCacheKey)("encryption-metadata"),d=(b.get(c)??Promise.resolve()).catch(()=>void 0).then(a);b.set(c,d);try{return await d}finally{b.get(c)===d&&b.delete(c)}}async function R(){let a=await (0,i.loadItem)(j.Zg.ENCRYPTION_KEY,null);if(null==a){let a=g().join((0,k.getWorkspaceDataDir)(),"db",`${j.Zg.ENCRYPTION_KEY}.json`);try{await d.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}throw Error("Existing encryption metadata is empty or invalid; restore it from a matching workspace backup")}if("object"!=typeof a||Array.isArray(a))throw Error("Invalid encryption metadata");if(![1,2].includes(a.encryption_version))throw Error("Unsupported encryption metadata version");if(void 0!==a.encryption_type&&!["default","user"].includes(a.encryption_type))throw Error("Invalid encryption type");if(void 0!==a.key_protection&&("user"!==a.encryption_type||!["passphrase","operator-file"].includes(a.key_protection)))throw Error("Invalid key protection");return a}async function S(a,b,c,e,f=!1){G(),await (0,o.bV)();let l=await B(a,b,c,e);if(f){let a=g().join((0,k.getWorkspaceDataDir)(),"db",`${j.Zg.ENCRYPTION_KEY}.json`),b=`${a}.initial.${(0,h.randomUUID)()}`;try{await (0,i.Zf)(b,JSON.stringify(l));try{await d.promises.link(b,a)}catch(a){if("EEXIST"!==a.code)throw a}let c=await R();if(!c)throw Error("Private encryption initialization did not commit");return c}finally{try{await d.promises.unlink(b)}catch(a){if("ENOENT"!==a.code)throw a}}}return await (0,L.withWorkspaceMutation)(async()=>{await (0,o.bV)();let b=await R();if(b?.encryption_version===2&&b.key_id!==w(a))throw new P("Encryption key changed; retry using current metadata");await (0,i.VH)(j.Zg.ENCRYPTION_KEY,l)}),l}async function T(){let a=await R();if(a)return a;let b=q()?.secret??null;if(!b&&(0,n.ye)())throw new P("Restore the worker workspace encryption metadata before accessing credentials");return b?S(v(),"user",b,"operator-file",!0):S(v(),"default",s,void 0,!0)}async function U(a,b){if(2===a.encryption_version)return C(a,b);let c=v(await D(a,b));return await S(c,a.encryption_type??"default",b),c}async function V(){try{return await Q(async()=>(await T(),!0))}catch{return N.error("Could not initialize encryption metadata"),!1}}async function W(a){let b=g().resolve((0,k.getWorkspaceDataDir)());if(g().resolve(a)!==b)throw new P("Worker transfer root mismatch");await (0,M.V$)((0,m.ok)(),g().join(b,"probe"));let c=await d.promises.lstat(b,{bigint:!0}),e=await d.promises.realpath(b);if(!c.isDirectory()||c.isSymbolicLink()||""!==g().relative(b,e))throw new P("Worker transfer root is unavailable");return{root:e,rootDevice:c.dev.toString(),rootInode:c.ino.toString()}}async function X(a){if(!(0,n.ye)()||void 0!==process.env.FLUJO_ENCRYPTION_SECRET_FILE)return null;let b=global.__flujo_worker_transfer_provenance?.get((0,k.getCurrentWorkspace)());if(!b||b.workspace!==(0,k.getCurrentWorkspace)()||"operator-file"!==a.key_protection||"user"!==a.encryption_type||b.metadataRevision!==x(a)||b.keyId!==a.key_id)return null;let c=await W(b.root);if(c.root!==b.root||c.rootDevice!==b.rootDevice||c.rootInode!==b.rootInode)return null;let d=K();if(!d)return null;let e=y(d);return"activeKey"in e&&e.metadataRevision===b.metadataRevision&&w(e)===b.keyId?e:null}async function Y(a,b=!1,c=!1){return Q(async()=>{if(await (0,o.Tm)())throw new P("Credential migration is pending; resume or roll back it before unlocking");let d=c?await T():await R();if(!d)throw new P("Restore matching encryption metadata before decrypting credentials");if("operator-file"===d.key_protection){let a=await X(d);return a||I(d,R)}if(G(),"user"!==d.encryption_type)return U(d,s);if(a&&!b)return U(d,a);let e=b&&a?function(a){let b=(0,k.getCurrentWorkspace)(),c=function(a=(0,k.getCurrentWorkspace)()){if(a===k.DEFAULT_WORKSPACE)return global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map);let b=global.__flujo_encryption_sessions_by_workspace??(global.__flujo_encryption_sessions_by_workspace=new Map),c=b.get(a);return c||(c=new Map,b.set(a,c)),c}(b),d=c.get(a);if(!d||(d.workspace??k.DEFAULT_WORKSPACE)!==b)return J.warn("Encryption session not found"),null;let e=Date.now();return e-d.createdAt>72e5?(J.warn("Encryption session expired"),c.delete(a),G(),null):(d.lastUsed=e,d.dek)}(a):K();if(!e)throw new P;let f=y(e);if("activeKey"in f&&(void 0!==f.metadataRevision&&f.metadataRevision!==x(d)||"passphrase"===d.key_protection&&void 0===f.metadataRevision)||2===d.encryption_version&&(!("activeKey"in f)||w(f)!==d.key_id))throw new P("Encryption metadata changed; unlock this workspace again");return f}).catch(a=>{if(G(),a instanceof E)throw new P(a.message);throw a})}async function Z(a,b,c=!1){try{let d=await Y(b,c,!0);if(!("activeKey"in d))throw new P("Unlock with your password to upgrade legacy encryption before saving secrets");return z(a,d.activeKey,O)}catch(a){if(a instanceof P)throw a;return N.error("Secret encryption failed; no plaintext value will be saved"),null}}async function $(a,b,c=!1){try{let e=await Y(b,c);if(a.startsWith("v2:")){if(!("activeKey"in e))return null;return A(a,e.activeKey,O)}if(!e.legacyKey)return null;var d=e.legacyKey;let f=a.split(":");if(2!==f.length||!t(f[0],16)||!t(d,16)||!/^[A-Za-z0-9+/]+={0,2}$/.test(f[1]))throw Error("Invalid legacy ciphertext");let g=(0,h.createDecipheriv)("aes-128-cbc",Buffer.from(d,"hex"),Buffer.from(f[0],"hex"));return Buffer.concat([g.update(Buffer.from(f[1],"base64")),g.final()]).toString("utf8")}catch(a){if(a instanceof P)throw a;return N.error("Secret decryption failed: invalid credentials, metadata or ciphertext"),null}}async function _(){return await R()!==null}async function aa(){let a=await R();return a?.encryption_type==="user"&&"operator-file"!==a.key_protection}async function ab(){if(await (0,o.Tm)())return G(),!0;let a=await R();if(!a&&void 0!==process.env.FLUJO_ENCRYPTION_SECRET_FILE)try{a=await Q(T)}catch{return!0}if(!a)return G(),(0,n.ye)();let b=K();if(b)try{let c=y(b);if("activeKey"in c&&void 0!==c.metadataRevision&&c.metadataRevision!==x(a))return G(),!0}catch{return G(),!0}if("operator-file"===a.key_protection)try{if(await X(a))return!1;return await I(a,R),!1}catch{return G(),!0}return G(),await aa()&&!K()}async function ac(){try{return await ab()}catch(a){throw G(),a}}},189663:(a,b,c)=>{c.r(b),c.d(b,{DEFAULT_WORKSPACE:()=>m,InvalidWorkspaceNameError:()=>q,WORKSPACE_COLORS:()=>G,WORKSPACE_NAME_PATTERN:()=>n,WORKSPACE_SUBTREES:()=>p,WorkspaceMutationError:()=>K,activeProjectOf:()=>V,assertValidWorkspaceName:()=>s,assertWorkspaceRoots:()=>L,bindToCurrentWorkspace:()=>E,createWorkspace:()=>ac,deleteWorkspace:()=>ai,ensureWorkspaceDirs:()=>ak,getCurrentWorkspace:()=>C,getWorkspaceDataDir:()=>w,getWorkspaceDbDir:()=>x,getWorkspaceDir:()=>v,getWorkspaceMcpServersDir:()=>y,getWorkspaceUserdataDir:()=>z,getWorkspacesDir:()=>u,isValidWorkspaceName:()=>r,listWorkspaces:()=>Y,loadWorkspaceRoots:()=>U,normalizeWorkspaceName:()=>t,readWorkspaceMetadata:()=>N,remapLegacyDefaultWorkspacePath:()=>A,remapLegacyDefaultWorkspaceReference:()=>function a(b,c){let d=A(b,c);if(d!==b)return d;try{let a=new URL(b);if("file:"===a.protocol){let b=(0,k.fileURLToPath)(a),d=A(b,c);if(d!==b){let b=(0,k.pathToFileURL)(d);return b.search=a.search,b.hash=a.hash,b.href}}}catch{}let e=b.indexOf("=");if(e<=0||e===b.length-1)return b;let f=b.slice(0,e+1),g=b.slice(e+1),h="";g.length>=2&&('"'===g[0]||"'"===g[0])&&g.at(-1)===g[0]&&(h=g[0],g=g.slice(1,-1));let i=a(g,c);return i===g?b:`${f}${h}${i}${h}`},renameWorkspace:()=>af,runWithWorkspace:()=>D,sameFilesystemPath:()=>W,updateWorkspaceMetadata:()=>T,updateWorkspaceRoots:()=>ah,withWorkspaceNamespaceMutation:()=>ad,workspaceCacheKey:()=>F,workspaceColor:()=>I,workspaceColorIndex:()=>H,workspaceExists:()=>Z});var d=c(333873),e=c.n(d),f=c(79748),g=c.n(f),h=c(629021),i=c(584297),j=c(455511),k=c(379551),l=c(901984);let m="default-workspace",n=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,o=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i,p=["db","mcp-servers","userdata","snapshots","screenshots","recordings","browser-profile","bash-utils","artifacts"];class q extends Error{constructor(a){super(`Invalid workspace name: ${JSON.stringify(a)}. Workspace names must match /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/ and must not be a reserved Windows device name.`),this.code="INVALID_WORKSPACE_NAME",this.name="InvalidWorkspaceNameError",this.value=a}}function r(a){return"string"==typeof a&&n.test(a)&&!o.test(a)}function s(a){if(!r(a))throw new q(a);return a}function t(a){return null==a||"string"==typeof a&&""===a.trim()?m:s(a)}function u(){return e().join((0,l.ok)(),"workspaces")}function v(a){let b=t(a),c=u(),d=e().resolve(c,b),f=e().relative(c,d);if(""===f||f.startsWith("..")||e().isAbsolute(f))throw new q(a);return d}function w(a){return v(a??C())}function x(a){return e().join(w(a),"db")}function y(a){return e().join(w(a),"mcp-servers")}function z(a){return e().join(w(a),"userdata")}function A(a,b){if("string"!=typeof a||!e().isAbsolute(a)||C()!==m)return a;let c=e().join((0,l.ok)(),b),d=e().relative(c,a);if(""===d||d.startsWith("..")||e().isAbsolute(d))return a;let[f]=d.split(e().sep);if(!f)return a;let g=e().join(c,f),i=e().join(w(m),b,f),j=!1;try{let a=(0,h.lstatSync)(g);j=!a.isDirectory()||a.isSymbolicLink()||(0,h.readdirSync)(g).length>0}catch(a){"ENOENT"!==a.code&&(j=!0)}let k=!1;try{let a=(0,h.lstatSync)(i);k=!a.isSymbolicLink()&&(a.isDirectory()||a.isFile())}catch{k=!1}return j||!k?a:e().join(w(m),b,d)}function B(){return global.__flujo_workspace_als||(global.__flujo_workspace_als=new i.AsyncLocalStorage),global.__flujo_workspace_als}function C(){let a=B().getStore();return a&&r(a)?a:m}function D(a,b){let c=t(a);return B().run(c,b)}function E(a){let b=C();return(...c)=>D(b,()=>a(...c))}function F(...a){return[C(),...a].join("\0")}let G=["#6656E8","#10A8C3","#2E9E5B","#D2761B","#C2417E","#7A57C9","#1F86D0","#B4453A"];function H(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b%G.length}function I(a){return a===m?G[0]:G[H(a)]}let J=".workspace.json";class K extends Error{constructor(a,b){super(b),this.code=a,this.name="WorkspaceMutationError"}}function L(a){if(!Array.isArray(a))throw new K("WORKSPACE_INVALID_ROOTS","Workspace folders must be a list.");let b=function(a){if(!Array.isArray(a))return[];let b=[],c=new Set;for(let d of a.slice(0,64)){if("string"!=typeof d)continue;let a=d.trim();if(!a||a.length>4096||!e().isAbsolute(a))continue;let f=e().normalize(a),g="win32"===process.platform?f.toLowerCase():f;c.has(g)||(c.add(g),b.push(f))}return b}(a);if(b.length!==a.length)throw new K("WORKSPACE_INVALID_ROOTS","Workspace folders must be unique absolute filesystem paths.");return b}async function M(a){try{let b=JSON.parse(await g().readFile(e().join(a,J),"utf8"));return b&&"object"==typeof b&&!Array.isArray(b)?b:{}}catch(a){if("ENOENT"===a.code)return{};throw a}}async function N(a){return M(v(t(a??C())))}let O=globalThis,P=O.__flujoWorkspaceMetadataWritesV1??=new Map,Q=new Set(["EPERM","EBUSY","EACCES"]);async function R(a,b){for(let c=1;;c+=1)try{await g().rename(a,b);return}catch(b){let a=b.code;if(c>=15||!a||!Q.has(a))throw b;await new Promise(a=>setTimeout(a,Math.min(100,5*2**(c-1))+10*Math.random()))}}async function S(a){try{return await M(a)}catch(a){if(a instanceof SyntaxError)return{};throw a}}async function T(a,b){let d=s(a),f=(P.get(d)??Promise.resolve()).catch(()=>void 0).then(async()=>{let{withWorkspaceMutation:a}=await Promise.resolve().then(c.bind(c,492093));return a(async()=>{let a=await ab(d),c=await S(a),f=b(c);if(f===c)return c;let h=e().join(a,J),i=e().join(a,`${J}.${process.pid}.${(0,j.randomUUID)()}.tmp`);await g().writeFile(i,`${JSON.stringify(f,null,2)}
57
+ `,{encoding:"utf8",flag:"wx"});try{await R(i,h)}catch(a){throw await g().rm(i,{force:!0}),a}return f},d)});P.set(d,f);try{return await f}finally{P.get(d)===f&&P.delete(d)}}async function U(a){return L((await N(a)).roots??[])}function V(a,b){let c="string"==typeof a.activeProject?a.activeProject:void 0;return void 0===c?void 0:b.find(a=>W(a,c))}function W(a,b){let c=e().resolve(a),d=e().resolve(b);return"win32"===process.platform?c.toLowerCase()===d.toLowerCase():c===d}async function X(a){let b=await N(a),c=L(b.roots??[]);return{name:a,color:I(a),isDefault:a===m,roots:c,activeProject:V(b,c)}}async function Y(){let a=u(),b=new Set([m]),c=[];try{c=await g().readdir(a,{withFileTypes:!0})}catch(a){if("ENOENT"===a.code)c=[];else throw a}let d=new Map;for(let a of c){if(!r(a.name))continue;let b=a.name.toLowerCase(),c=d.get(b)??[];c.push(a.name),d.set(b,c)}for(let a of c)if(r(a.name)&&!((d.get(a.name.toLowerCase())?.length??0)>1)){if(a.isDirectory()){b.add(a.name);continue}if(a.isSymbolicLink())continue}return Promise.all([...b].sort((a,b)=>a===m?-1:b===m?1:a.localeCompare(b)).map(X))}async function Z(a){if(!r(a))return!1;try{let b=(await g().readdir(u(),{withFileTypes:!0})).filter(b=>r(b.name)&&b.name.toLowerCase()===a.toLowerCase());if(1!==b.length||b[0].name!==a)return!1;let c=await g().lstat(v(a));return c.isDirectory()&&!c.isSymbolicLink()}catch(a){if("ENOENT"===a.code)return!1;throw a}}async function $(a,b){let c=await g().lstat(a);if(!c.isDirectory()||c.isSymbolicLink())throw Error(`${b} must be a real directory, not a file, symlink, or junction: ${a}`)}async function _(a,b){try{await $(a,b)}catch(c){if("ENOENT"!==c.code)throw c;await g().mkdir(a,{recursive:!0}),await $(a,b)}}async function aa(){let a=(0,l.ok)(),b=u();return await _(a,"FLUJO data root"),await _(b,"Workspaces root"),b}async function ab(a){let b,c,d=s(a),f=u();try{b=await g().readdir(f)}catch(a){if("ENOENT"===a.code)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}let h=b.filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase());if(1!==h.length||h[0]!==d)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist or is ambiguous on disk.`);let i=v(d);try{c=await g().lstat(i)}catch(a){if("ENOENT"===a.code)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}if(!c.isDirectory()||c.isSymbolicLink())throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is not a managed directory.`);let[j,k]=await Promise.all([g().realpath(f),g().realpath(i)]),l=e().relative(j,k);if(""===l||l.startsWith("..")||e().isAbsolute(l))throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is outside the managed workspace root.`);return i}async function ac(a){return ad(()=>ae(a))}async function ad(a){let b=C(),{withWorkspaceRuntimeLock:d}=await c.e(79504).then(c.bind(c,779504));return D(m,()=>d("workspace-namespace",()=>D(b,a)))}async function ae(a){let b=s(a);if(b===m)throw new K("WORKSPACE_ALREADY_EXISTS",`Workspace ${JSON.stringify(m)} already exists.`);let d=await aa();if((await g().readdir(d)).filter(a=>r(a)&&a.toLowerCase()===b.toLowerCase()).length>0)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);let e=v(b);try{await g().mkdir(e)}catch(a){if("EEXIST"===a.code)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);throw a}try{await ak(b);let{migrateShippedMcpServers:a}=await Promise.all([c.e(34679),c.e(4423)]).then(c.bind(c,4423));await D(b,()=>a())}catch(a){throw await g().rm(e,{recursive:!0,force:!0}),a}return X(b)}async function af(a,b){return ad(()=>ag(a,b))}async function ag(a,b){let c=s(a),d=s(b);if(c===m||d===m)throw new K("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be renamed or replaced.");if(c===d)return X(c);if(c.toLowerCase()===d.toLowerCase())throw new K("WORKSPACE_ALREADY_EXISTS","Case-only workspace renames are not supported.");let e=await ab(c),f=u();if((await g().readdir(f)).filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase()).length>0)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);try{await g().rename(e,v(d))}catch(a){if("EEXIST"===a.code)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);throw a}return X(d)}async function ah(a,b){let c=s(a),d=L(b);return await T(c,a=>({...a,roots:d})),X(c)}async function ai(a){return ad(()=>aj(a))}async function aj(a){let b=s(a);if(b===m)throw new K("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be deleted.");let d=await ab(b),{stopAndDrainPersonaGoalRuntime:e}=await Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(54045),c.e(77030),c.e(34679),c.e(95260),c.e(79504),c.e(49366),c.e(55328),c.e(74858),c.e(52152),c.e(42862),c.e(81300),c.e(80314),c.e(89374),c.e(77281)]).then(c.bind(c,389374));await D(b,()=>e());let{mcpService:f}=await Promise.all([c.e(91784),c.e(49176),c.e(74877),c.e(59859),c.e(88166),c.e(34679),c.e(79504),c.e(49366),c.e(74858),c.e(52152),c.e(81300),c.e(80314)]).then(c.bind(c,464621)),h=await D(b,()=>f.disconnectAll("workspace deletion")),i=new Set(h.failed);for(let a of h.shutdownReceipts)("unknown"===a.exitOutcome||a.isolation?.cleanupOutcome==="unknown")&&i.add(a.serverName);if(i.size>0)throw Error(`Cannot delete workspace while ${i.size} MCP server(s) remain open.`);for(let a=0;a<5;a++)try{await g().rm(d,{recursive:!0,force:!0});return}catch(c){let b=c.code;if(4!==a&&("EBUSY"===b||"EPERM"===b)){let b=100*Math.pow(2,a);await new Promise(a=>setTimeout(a,b));continue}throw c}}async function ak(a){let b=v(a),c=await aa(),d=e().basename(b),f=(await g().readdir(c)).filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase());if(f.some(a=>a!==d)||f.length>1)throw Error(`Workspace name ${JSON.stringify(d)} conflicts with a case alias on disk: `+f.join(", "));await _(b,`Workspace ${d}`);let h=await g().realpath(c),i=await g().realpath(b),j=e().relative(h,i);if(""===j||j.startsWith("..")||e().isAbsolute(j))throw Error(`Workspace directory escapes the workspaces root: ${b}`);for(let a of p){let c=e().join(b,a);await _(c,`Workspace subtree ${a}`)}return b}},217178:(a,b,c)=>{c.r(b),c.d(b,{"40841aa02a531ebbf36e631e77030d97227e9d3930":()=>d.V,"600ff7d2206eae52f9d771674d5f8029e5c095bb5e":()=>d.resolveGlobalVars,"6024367037e23f118f42c473679aff2d02bbea4b67":()=>d.G});var d=c(122134)},259994:(a,b,c)=>{c.d(b,{$:()=>f,b:()=>i});var d=c(973024),e=c(504573);class f extends Error{constructor(a,b){super("SIZE_LIMIT"===a?"File exceeds the size limit.":"File is unsafe or changed while being read."),this.code=a,this.detail=b,this.name="PlainFileReadError"}}function g(a,b){for(let c of["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"])if(a[c]!==b[c])return c}function h(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}async function i(a,b={}){b.signal?.throwIfAborted();let c=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let i=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===i[0].status)throw i[0].reason;if("rejected"===i[1].status)throw i[1].reason;let j=i[0].value,k=i[1].value;if(!j.isFile()||!k.isFile()||k.isSymbolicLink()||j.nlink!==BigInt(1)||!h(j,k)||b.expected&&!h(b.expected,j)||b.ownerOnly&&"win32"!==process.platform&&(j.mode&BigInt(63))!==BigInt(0)){let a=g(j,k),c=b.expected&&g(b.expected,j),d=!j.isFile()||!k.isFile()||k.isSymbolicLink()?"not-plain-file":j.nlink!==BigInt(1)?"hard-linked":a?`descriptor-path:${a}`:c?`expected:${c}`:"permissions";throw new f("UNSAFE_FILE",d)}let l=Math.min(b.maxBytes??e.constants.MAX_LENGTH-1,e.constants.MAX_LENGTH-1);if(!Number.isSafeInteger(l)||l<0||j.size<BigInt(0)||j.size>BigInt(l))throw new f("SIZE_LIMIT");await b.verifyPath?.();let m=Number(j.size)+1,n=Buffer.alloc(b.consume?Math.min(65536,m):m),o=0;for(;o<m;){b.signal?.throwIfAborted();let a=b.consume?0:o,{bytesRead:d}=await c.read(n,a,Math.min(m-o,b.consume?n.length:1048576),o);if(0===d)break;b.consume&&await b.consume(n.subarray(0,d)),o+=d}if(BigInt(o)!==j.size)throw new f("FILE_CHANGED");let p=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===p[0].status)throw p[0].reason;if(!h(j,p[0].value))throw new f("FILE_CHANGED");if("rejected"===p[1].status)throw p[1].reason;let q=p[1].value;if(q.isSymbolicLink()||!h(j,q))throw new f("FILE_CHANGED");return await b.verifyPath?.(),b.signal?.throwIfAborted(),b.consume?Buffer.alloc(0):n.subarray(0,o)}finally{await c.close()}}},268962:(a,b,c)=>{c.d(b,{Tm:()=>j,af:()=>l,bV:()=>k});var d=c(973024),e=c(176760),f=c.n(e),g=c(189663);let h=["models","mcp_servers","global_env_vars","registry_account","encryption_key"];class i extends Error{constructor(){super("Credential migration is pending. Resume or roll back using its recovery passphrase."),this.name="CredentialMigrationPendingError"}}async function j(a){try{return await d.promises.lstat(f().join((0,g.getWorkspaceDataDir)(a),"db",".credential-migration.pending")),!0}catch(a){return"ENOENT"!==a.code}}async function k(){if(await j())throw new i}async function l(a){let b=f().basename(a);h.some(a=>b===`${a}.json`)&&await k()}},295489:(a,b,c)=>{c.d(b,{K9:()=>B,RN:()=>C,bH:()=>A});var d=c(16698),e=c(848161),f=c.n(e),g=c(257975),h=c(178877),i=c(377424),j=c(189663);let k=new Set(["emit","abortSignal","executionAuthority","executionExtensionContext","behaviorToolRegistry"]);class l extends Error{constructor(a){super("FLOW_RUN_BUSY"===a?"Flow execution capacity is busy. Retry after active work finishes.":"FLOW_RUN_INPUT_TOO_LARGE"===a?"Flow input exceeds safe admission limits. Reduce the input before retrying.":"Insufficient memory to admit another Flow execution. Retry after active work finishes."),this.code=a,this.retryAfterSeconds=5,this.name="FlowRunPressureError",this.status="FLOW_RUN_BUSY"===a?429:"FLOW_RUN_INPUT_TOO_LARGE"===a?413:503}}let m=globalThis,n=m.__flujoFlowRunAdmission??={active:0,bytes:0,workspaces:new Map,reservations:new WeakMap,scope:new d.AsyncLocalStorage,rejectedBusy:0,rejectedMemory:0,rejectedInput:0};function o(a,b){let c=Number(process.env[`FLUJO_RUN_ADMISSION_${a}`]);return Number.isSafeInteger(c)&&c>0?c:b}function p(){let a,b;return{maxProcessRuns:o("MAX_PROCESS_RUNS",64),maxWorkspaceRuns:o("MAX_WORKSPACE_RUNS",32),maxConversationRuns:o("MAX_CONVERSATION_RUNS",4),maxProcessBytes:o("MAX_PROCESS_BYTES",0x20000000),maxWorkspaceBytes:o("MAX_WORKSPACE_BYTES",0x10000000),maxInputBytes:o("MAX_INPUT_BYTES",0x4000000),maxRssBytes:o("MAX_RSS_BYTES",(a=f().totalmem(),Number.isFinite(b="function"==typeof process.constrainedMemory?process.constrainedMemory():0)&&b>0&&b<a&&(a=b),Math.max(0x80000000,Math.floor(.75*a))))}}function q(a){throw"FLOW_RUN_BUSY"===a?n.rejectedBusy++:"FLOW_RUN_MEMORY"===a?n.rejectedMemory++:n.rejectedInput++,new l(a)}(0,i.rF)("run",n.bytes);let r=Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get,s="u"<typeof SharedArrayBuffer?void 0:Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype,"byteLength").get,t=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype),"buffer").get,u=Object.getOwnPropertyDescriptor(DataView.prototype,"buffer").get;function v(a,b){if(g.types.isProxy(a))return!1;let c=Object.getOwnPropertyDescriptor(a,"constructor");return!(!c||!("value"in c)||"function"!=typeof c.value||g.types.isProxy(c.value))&&Object.getOwnPropertyDescriptor(c.value,"prototype")?.value===a&&Function.prototype.toString.call(c.value)===Function.prototype.toString.call(b)}function w(a){return null!==a&&!g.types.isProxy(a)&&null===Object.getPrototypeOf(a)&&v(a,Object)}function x(a){(!a||"object"!=typeof a||g.types.isProxy(a))&&q("FLOW_RUN_INPUT_TOO_LARGE");let b=Object.getOwnPropertyDescriptor(a,"conversationId");return!b||"value"in b&&(void 0===b.value||"string"==typeof b.value)||q("FLOW_RUN_INPUT_TOO_LARGE"),b?.value}function y(a,b){var c;let d,e,f,h,i,j=Math.max(1048576,(c=b.maxInputBytes,d=0,e=0,f=new Set,h=a=>{(!Number.isSafeInteger(d+=a)||d>c)&&q("FLOW_RUN_INPUT_TOO_LARGE")},(i=(a,b)=>{var c,d;let j;if((++e>1e5||b>64)&&q("FLOW_RUN_INPUT_TOO_LARGE"),"string"==typeof a)return void h(24+2*a.length);if(null==a||"number"==typeof a||"boolean"==typeof a)return void h(8);if(("object"!=typeof a||g.types.isProxy(a))&&q("FLOW_RUN_INPUT_TOO_LARGE"),f.has(a))return;if(f.add(a),h(64),g.types.isArrayBuffer(a))return void h(r.call(a));if(g.types.isSharedArrayBuffer(a))return void h(s.call(a));if(ArrayBuffer.isView(a))return void i((g.types.isDataView(a)?u:t).call(a),b+1);let l=Array.isArray(a);for(let e in c=a,d=l,null===(j=Object.getPrototypeOf(c))||!g.types.isProxy(j)&&(d?Array.isArray(j)&&v(j,Array)&&w(Object.getPrototypeOf(j)):w(j))||q("FLOW_RUN_INPUT_TOO_LARGE"),l&&(a.length>1e5&&q("FLOW_RUN_INPUT_TOO_LARGE"),h(8*a.length)),a){if(!Object.hasOwn(a,e)||0===b&&k.has(e))continue;h(16+2*e.length);let c=Object.getOwnPropertyDescriptor(a,e);"value"in c||q("FLOW_RUN_INPUT_TOO_LARGE"),i(c.value,b+1)}})(a,0),4*d));return Number.isSafeInteger(j)||q("FLOW_RUN_INPUT_TOO_LARGE"),j}function z(a,b,c,d){let e=n.bytes-c+a,f=(b?.bytes??0)-c+a,g=(0,h.getHeapStatistics)(),j=process.memoryUsage().rss,k=g.heap_size_limit-g.used_heap_size-Math.ceil(.2*g.heap_size_limit)-0x4000000,l=(0,i.XF)("run",e);(e>d.maxProcessBytes||f>d.maxWorkspaceBytes||!Number.isFinite(k)||l>k||!Number.isFinite(j)||j+l>d.maxRssBytes)&&q("FLOW_RUN_MEMORY")}function A(a){let b=n.scope.getStore(),c=b&&n.reservations.get(b);if(!b||c?.claimed){let b,c,d,e,f,g,h,k,l=(b=(0,j.getCurrentWorkspace)(),c=x(a),d=p(),e=n.workspaces.get(b),(n.active>=d.maxProcessRuns||(e?.active??0)>=d.maxWorkspaceRuns||void 0!==c&&(e?.conversations.get(c)??0)>=d.maxConversationRuns)&&q("FLOW_RUN_BUSY"),z(f=y(a,d),e,0,d),e||(e={active:0,bytes:0,conversations:new Map},n.workspaces.set(b,e)),g=e,h={workspace:b,conversationId:c,bytes:f,open:!0,scoped:!1,claimed:!1},k=Object.freeze({release:()=>{if(h.open){if(h.open=!1,n.active--,n.bytes-=h.bytes,(0,i.rF)("run",n.bytes),g.active--,g.bytes-=h.bytes,void 0!==c){let a=g.conversations.get(c)-1;a?g.conversations.set(c,a):g.conversations.delete(c)}g.active||n.workspaces.delete(b)}}}),n.reservations.set(k,h),n.active++,n.bytes+=f,(0,i.rF)("run",n.bytes),g.active++,g.bytes+=f,void 0!==c&&g.conversations.set(c,(g.conversations.get(c)??0)+1),k);return n.reservations.get(l).claimed=!0,l}if(!c?.open)throw Error("Flow run admission scope has expired.");return B(b,a),c.claimed=!0,b}function B(a,b){let c=a&&n.reservations.get(a);if(!c?.open)throw Error("Flow run admission permit has expired.");if(c.workspace!==(0,j.getCurrentWorkspace)()||c.conversationId!==x(b))throw Error("Flow run admission does not match the current workspace and conversation.");let d=p(),e=Math.max(c.bytes,y(b,d)),f=n.workspaces.get(c.workspace);z(e,f,c.bytes,d);let g=e-c.bytes;n.bytes+=g,f.bytes+=g,c.bytes=e,(0,i.rF)("run",n.bytes)}function C(){let a=n.workspaces.get((0,j.getCurrentWorkspace)());return{activeRuns:n.active,reservedBytes:n.bytes,activeWorkspaces:n.workspaces.size,workspaceActiveRuns:a?.active??0,workspaceReservedBytes:a?.bytes??0,workspaceConversations:a?.conversations.size??0,rejectedBusy:n.rejectedBusy,rejectedMemory:n.rejectedMemory,rejectedInput:n.rejectedInput,...p(),minReservationBytes:1048576,inputExpansion:4}}},302642:(a,b,c)=>{c.d(b,{g:()=>g});var d=c(374948);let e=(0,c(406680).h)("frontend/services/flow/index");class f{async loadFlows(a={}){e.debug("loadFlows: Entering method");try{if(this.flowsCache&&!a.refresh)return e.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let b=await fetch("/api/flow");if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to load flows")}let c=await b.json();return e.debug("loadFlows: Loaded flows from API",{count:c.length}),this.flowsCache=c,c}catch(a){return e.warn("loadFlows: Failed to load flows:",a),[]}}async suggestToolsForStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"suggest-tools",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not suggest connected tools.");return c}async generateNameForFlow(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"generate-name",...a})}),c=await b.json().catch(()=>null);if(!b.ok||"string"!=typeof c?.name)throw Error(c?.error||"Could not generate a workflow name.");return{name:c.name}}async applyToolsToStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply-tools",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not connect the approved tools.");return c.flow}async suggestAgentsForStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"suggest-agents",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not suggest connected agents.");return c}async applyAgentsToStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply-agents",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not connect the approved agents.");return c.flow}async improvePromptForStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"improve-prompt",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not improve this prompt.");return c}async checkPlausibility(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check-plausibility",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not check flow plausibility.");return c}async getFlow(a){e.debug("getFlow: Entering method",{flowId:a});try{if(this.flowsCache){let b=this.flowsCache.find(b=>b.id===a);if(b)return e.debug("getFlow: Using cached flow",{flowId:a}),b}let b=await fetch(`/api/flow/${encodeURIComponent(a)}`);if(!b.ok){if(404===b.status)return e.debug(`getFlow: Flow ${a} not found`),null;let c=await b.json();throw Error(c.error||`Failed to get flow: ${a}`)}let c=await b.json();return e.debug("getFlow: Retrieved flow from API",{flowId:a}),c}catch(b){return e.warn(`getFlow: Failed to get flow ${a}:`,b),null}}async createModelAgent(a){let b=await fetch("/api/flow/model-agent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json().catch(()=>null);if(!b.ok||"string"!=typeof c?.flowId||"string"!=typeof c?.name)throw Error(c?.error||"Could not create the agent.");return this.flowsCache=null,{flowId:c.flowId,name:c.name}}async addFlow(a){e.debug("addFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to add flow"}}let c=await b.json();return this.flowsCache&&this.flowsCache.push(c),e.debug("addFlow: Flow added successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("addFlow: Failed to add flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to add flow"}}}async generateFlow(a,b,c){e.debug("generateFlow: Entering method",{modelId:b,allowInstall:c?.allowInstall,allowSubflows:c?.allowSubflows,maxDepth:c?.maxDepth});try{let d=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:a,modelId:b,allowInstall:c?.allowInstall===!0,allowSubflows:c?.allowSubflows!==!1,..."number"==typeof c?.maxDepth?{maxDepth:c.maxDepth}:{}})}),f=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:f?.error||"Failed to generate flow"};let g=Array.isArray(f.flows)&&f.flows.length>0?f.flows:[{flow:f.flow,validation:f.validation}];return e.debug("generateFlow: Draft generated",{flowId:f.flow?.id,flowCount:g.length,attempts:f.attempts,errorCount:f.validation?.errorCount,installedServers:f.installedServers?.length??0}),{success:!0,flow:f.flow,validation:f.validation,flows:g,rootFlowId:f.rootFlowId??f.flow?.id,attempts:f.attempts,installedServers:f.installedServers??[]}}catch(a){return e.warn("generateFlow: Failed to generate flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to generate flow"}}}async improveFlow(a,b,c,d){e.debug("improveFlow: Entering method",{flowId:a?.id,modelId:c,allowInstall:d?.allowInstall});try{let f=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:a,relatedFlows:d?.relatedFlows,description:b,modelId:c,allowInstall:d?.allowInstall===!0})}),g=await f.json().catch(()=>null);if(!f.ok)return{success:!1,error:g?.error||"Failed to improve flow"};return e.debug("improveFlow: Draft revised",{flowId:g.flow?.id,attempts:g.attempts,errorCount:g.validation?.errorCount,installedServers:g.installedServers?.length??0}),{success:!0,flow:g.flow,validation:g.validation,flows:Array.isArray(g.flows)&&g.flows.length>0?g.flows:[{flow:g.flow,validation:g.validation}],rootFlowId:g.rootFlowId??g.flow?.id,attempts:g.attempts,installedServers:g.installedServers??[]}}catch(a){return e.warn("improveFlow: Failed to improve flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to improve flow"}}}async convertProcessToSubflow(a,b,c,d){try{let e=await fetch(`/api/flow/${encodeURIComponent(a.id)}/convert-process-to-subflow`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({parentFlow:a,childFlow:b,processNodeId:c,expectedUpdatedAt:d})}),f=await e.json().catch(()=>null);if(!e.ok)return{success:!1,error:f?.error||"Failed to convert Process to Subflow."};let g=f.parentFlow,h=f.childFlow;if(this.flowsCache){let a=this.flowsCache.findIndex(a=>a.id===g.id);a>=0?this.flowsCache[a]=g:this.flowsCache.push(g),this.flowsCache.some(a=>a.id===h.id)||this.flowsCache.push(h)}return{success:!0,parentFlow:g,childFlow:h}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to convert Process to Subflow."}}}async updateFlow(a){e.debug("updateFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch(`/api/flow/${encodeURIComponent(a.id)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to update flow"}}let c=await b.json();if(this.flowsCache){let b=this.flowsCache.findIndex(b=>b.id===a.id);b>=0?this.flowsCache[b]=c:this.flowsCache.push(c)}return e.debug("updateFlow: Flow updated successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("updateFlow: Failed to update flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to update flow"}}}async deleteFlow(a){e.debug("deleteFlow: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}`,{method:"DELETE"});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(b=>b.id!==a)),e.debug("deleteFlow: Flow deleted successfully",{flowId:a}),{success:!0}}catch(a){return e.warn("deleteFlow: Failed to delete flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to delete flow"}}}async listFlowVersions(a){e.debug("listFlowVersions: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}/versions`);if(!b.ok){let a=await b.json().catch(()=>null);throw Error(a?.error||"Failed to list flow versions")}let c=await b.json();return Array.isArray(c.versions)?c.versions:[]}catch(b){return e.warn(`listFlowVersions: Failed for flow ${a}:`,b),[]}}async getFlowVersion(a,b){e.debug("getFlowVersion: Entering method",{flowId:a,versionId:b});try{let c=await fetch(`/api/flow/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}`);if(!c.ok){if(404===c.status)return null;let a=await c.json().catch(()=>null);throw Error(a?.error||"Failed to get flow version")}return await c.json()}catch(c){return e.warn(`getFlowVersion: Failed for ${a}/${b}:`,c),null}}createNode(a,b){return e.debug("createNode: Entering method",{type:a,position:b}),{id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:"process"===a?{inputMode:"full-history"}:"static"===a?{entries:[]}:"subflow"===a?{resultPresentation:"separate",sessionScope:"per-key"}:{}}}}createStartNode(){return{id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(a="NewFlow"){e.debug("createNewFlow: Entering method",{name:a});let b=Date.now();return{id:(0,d.A)(),name:a,createdAt:b,updatedAt:b,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(a,b){return e.debug("createHistoryEntry: Entering method"),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){return e.debug("generateSampleFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let g=new f},304927:(a,b,c)=>{c.d(b,{ln:()=>P,N2:()=>N,bB:()=>al,U3:()=>af,Vx:()=>S,al:()=>ad,JV:()=>ah,$G:()=>an,pL:()=>am,av:()=>ao,EI:()=>ak,loadItem:()=>L,H0:()=>K,Jk:()=>ac,w5:()=>ap,l_:()=>ai,Vt:()=>aj,VH:()=>J,Gl:()=>ae,c0:()=>M,Zf:()=>I});var d=c(34762),e=c(629021),f=c(333873),g=c.n(f),h=c(977598),i=c(749527),j=c(259994),k=c(973024),l=c(176760),m=c.n(l);function n(a,b){let c=m().relative(a,b);if(!c||c.startsWith("..")||m().isAbsolute(c))throw Error("Persona record path escapes its storage root.");return c}function o(a){return a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)}async function p(a){try{return await k.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}async function q(a,b){let c=[a];for(let d of n(a,b).split(m().sep).slice(0,-1))c.push(m().join(c[c.length-1],d));let d=[];for(let a of c){let[b,c]=await Promise.allSettled([p(a),k.promises.realpath(a)]);if("rejected"===b.status)throw b.reason;let e=b.value;if(!e)return null;if(!e.isDirectory()||e.isSymbolicLink())throw Error("Persona record parent is not a link-free directory.");if("rejected"===c.status)throw c.reason;let f=c.value;d.length&&n(d[0].canonical,f),d.push({filename:a,stats:e,canonical:f})}return d}async function r(a){let b=await Promise.allSettled(a.flatMap(a=>[k.promises.lstat(a.filename,{bigint:!0}),k.promises.realpath(a.filename)]));for(let[c,d]of a.entries()){let a=b[2*c],e=b[2*c+1];if("rejected"===a.status)throw a.reason;let f=a.value;if(!f.isDirectory()||f.isSymbolicLink()||f.dev!==d.stats.dev||f.ino!==d.stats.ino||f.mode!==d.stats.mode||f.uid!==d.stats.uid||f.gid!==d.stats.gid)throw Error("Persona record parent changed during its read.");if("rejected"===e.status)throw e.reason;if(e.value!==d.canonical)throw Error("Persona record parent changed during its read.")}}async function s(a,b){let c=m().resolve(b),d=m().resolve(a);n(c,d);let e=await q(c,d);if(!e)return null;let f=await p(d);if(!f)return null;if(!o(f))throw new j.$("UNSAFE_FILE");for(let a=0;a<3;a++){await r(e);try{return{content:(await (0,j.b)(d,{expected:f,verifyPath:()=>r(e)})).toString("utf8"),mtimeMs:Number(f.mtimeNs)/1e6,sizeBytes:Number(f.size)}}catch(c){var g;if(!(c instanceof j.$)||"SIZE_LIMIT"===c.code||a+1===3)throw c;await r(e);let b=await p(d);if(!b||!(o(g=f)&&o(b))||g.ino===b.ino||g.dev!==b.dev||g.uid!==b.uid||g.gid!==b.gid||g.mode!==b.mode)throw c;f=b}}throw new j.$("FILE_CHANGED")}class t extends Error{constructor(a,b){super(`Persona record ${JSON.stringify(a)} does not match requested Persona ${JSON.stringify(b)}.`),this.code="PERSONA_SHARD_IDENTITY_MISMATCH",this.name="PersonaShardIdentityError"}}c(320108);var u=c(43521),v=c(901984),w=c(189663),x=c(268962),y=c(492093),z=c(76528),A=c(808552);let B=(0,u.h)("utils/storage/backend"),C=()=>g().join((0,w.getWorkspaceDataDir)(),"db"),D=a=>g().join(C(),`${a}.json`);async function E(){let a=C(),b=g().join((0,v.ok)(),".next","storage");try{await e.promises.access(a),B.verbose(`Storage directory exists: ${a}`)}catch{B.debug(`Creating storage directory: ${a}`),await e.promises.mkdir(a,{recursive:!0})}try{await e.promises.access(b),B.warn(`Old storage directory found: ${b}. This may cause data inconsistency issues.`)}catch{}}let F=new Map,G=new Set(["EPERM","EBUSY","EACCES"]);async function H(a,b,c){for(let d=1;;d++)try{await c(),await e.promises.rename(a,b);return}catch(c){let a=c.code;if(d>=15||!a||!G.has(a))throw c;let b=Math.min(100,5*2**(d-1));await new Promise(a=>setTimeout(a,b+10*Math.random()))}}async function I(a,b,c){let f,i=!1,j=async a=>{try{await a()}catch(a){throw i=!0,f=a,a}},k=a=>"string"==typeof b?a():(0,A.Sc)(a);await (0,x.af)(a),await (0,y.withWorkspaceMutation)(async()=>{let l,m;await (0,x.af)(a),await j(()=>(0,y.qy)());let n=g().dirname(a);await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)())),await k(()=>e.promises.mkdir(n,{recursive:!0}));let o=await k(()=>e.promises.lstat(n,{bigint:!0})),p=await k(()=>e.promises.realpath(n));(!o.isDirectory()||o.isSymbolicLink())&&await k(async()=>{throw Error("Atomic write parent is unsafe")});let q=`${a}.tmp.${(0,h.randomUUID)()}`,r=!1,s=!1,t=!1,u=!1;try{await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()));let f=await e.promises.open(q,"wx",384);r=!0;try{if(l=await f.stat({bigint:!0}),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)())),"string"==typeof b)await f.writeFile(b);else{let a=0,c=(0,h.createHash)("sha256");for(let d of(0,z.gm)([b.value],!1)){c.update(d);let b=0;for(;b<d.length;){let c=await f.write(d,b,d.length-b,a+b);if(!c.bytesWritten)throw Error("Conversation snapshot made no write progress");b+=c.bytesWritten}a+=d.length}m=c.digest("hex")}await j(()=>(0,y.qy)()),await f.sync(),await j(()=>(0,y.qy)()),l=await f.stat({bigint:!0})}catch(a){try{await f.close()}catch{u=!0,"string"!=typeof b&&(0,z.B_)("snapshot descriptor closure is uncertain",void 0,!0)}throw a}if(!u)try{await f.close()}catch(a){if(u=!0,"string"!=typeof b)throw(0,z.B_)("snapshot descriptor closure is uncertain",a,!0);throw a}await H(q,a,async()=>{let[a,b,f]=await Promise.allSettled([e.promises.lstat(q,{bigint:!0}),e.promises.lstat(n,{bigint:!0}),e.promises.realpath(n)]);if("rejected"===a.status)throw a.reason;if("rejected"===b.status)throw b.reason;if("rejected"===f.status)throw f.reason;let g=a.value,h=b.value,i=f.value;if(!l||!g.isFile()||g.isSymbolicLink()||g.nlink!==BigInt(1)||g.dev!==l.dev||g.ino!==l.ino||g.size!==l.size||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid||!h.isDirectory()||h.isSymbolicLink()||h.dev!==o.dev||h.ino!==o.ino||h.mode!==o.mode||h.uid!==o.uid||h.gid!==o.gid||i!==p)throw Error("Atomic write file or parent changed");await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,y.qy)()),await j(()=>(0,d.QO)())),s=!0}),r=!1,t=!0,"string"!=typeof b&&(0,z.oK)(),await j(()=>(0,y.qy)())}catch(c){if("string"!=typeof b&&s&&!t&&l){let b=async a=>{try{return await e.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return;throw a}};try{let c=await e.promises.lstat(n,{bigint:!0}),d=await e.promises.realpath(n);if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==o.dev||c.ino!==o.ino||d!==p)throw Error("Snapshot commit parent changed");let f=await b(a),g=await b(q),i=a=>a?.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===l.dev&&a.ino===l.ino&&a.size===l.size;if(i(f)){let b,c=await e.promises.open(a,e.constants.O_RDONLY|e.constants.O_NONBLOCK|(e.constants.O_NOFOLLOW??0));try{let b=await c.stat({bigint:!0});if(!i(b)||b.mtimeNs!==f.mtimeNs||b.ctimeNs!==f.ctimeNs)throw Error("Snapshot readback identity changed");let d=Buffer.alloc(65536),g=(0,h.createHash)("sha256"),j=0;for(;j<Number(l.size);){let{bytesRead:a}=await c.read(d,0,Math.min(d.length,Number(l.size)-j),j);if(!a)throw Error("Snapshot readback ended early");j+=a,g.update(d.subarray(0,a))}let k=await c.stat({bigint:!0}),n=await e.promises.lstat(a,{bigint:!0});if(!i(k)||k.mtimeNs!==b.mtimeNs||k.ctimeNs!==b.ctimeNs||!i(n)||n.mtimeNs!==k.mtimeNs||n.ctimeNs!==k.ctimeNs||g.digest("hex")!==m)throw Error("Snapshot readback bytes changed")}catch(a){throw b=a,a}finally{try{await c.close()}catch(c){let a=(0,z.B_)("snapshot readback descriptor closure is uncertain",c,!0);if(void 0===b)throw a}}(0,z.oK)(),r=!1}else if(!i(g)||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid)throw Error("Snapshot commit has no exclusive owned witness")}catch(b){throw(0,z.B_)("snapshot rename outcome requires reconciliation",b,!1,{destination:a,temporary:q,dev:String(l.dev),ino:String(l.ino),size:String(l.size)})}}if(r&&!u)try{let a=await e.promises.lstat(q,{bigint:!0});l&&a.isFile()&&!a.isSymbolicLink()&&a.dev===l.dev&&a.ino===l.ino&&await e.promises.unlink(q)}catch{}if(i&&c===f)throw c;await k(async()=>{throw c})}})}async function J(a,b,c){let d=D(a);if(a.startsWith("conversations/")){let e=a.slice(14);return P(e),(0,z.JN)((0,w.workspaceCacheKey)("conversation-publication",e),b,a=>(0,z.Sg)(()=>(0,y.withWorkspaceMutation)(()=>(0,A.MI)(e,()=>I(d,{conversation:!0,value:a},c)))))}await (0,x.af)(d),await (0,y.withWorkspaceMutation)(async()=>{let e=(0,w.workspaceCacheKey)("item",a),f=(F.get(e)??Promise.resolve()).catch(()=>{}).then(()=>I(d,JSON.stringify(b,null,2),c));F.set(e,f);try{await f,B.verbose(`Successfully saved item to: ${d}`)}catch(b){throw B.error(`Error saving item with key "${a}" to ${d}:`,b),b}finally{F.get(e)===f&&F.delete(e)}})}async function K(a,b){let c,d=D(a);await (0,x.af)(d),await E();try{c=await e.promises.readFile(d,"utf8")}catch(a){if("ENOENT"===a.code)return b;throw a}if(!c.trim())throw Error("Backup storage item is empty");return JSON.parse(c)}async function L(a,b){if(a.startsWith("conversations/"))return M(a.slice(14),async a=>void 0===a?b:a);await (0,x.af)(D(a));try{await E();let c=D(a),d=await e.promises.readFile(c,"utf-8");if(0===d.trim().length)return B.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return B.verbose(`Successfully loaded item from: ${c}`),a}catch(b){B.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,d),B.info(`Created backup of corrupted file at: ${a}`)}catch(a){B.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return B.verbose(`Item with key "${a}" not found at ${D(a)}, returning default.`),b;throw B.error(`CRITICAL: Error loading item with key "${a}" from ${D(a)}:`,c),c}}async function M(a,b,c={}){let d;c.signal?.throwIfAborted(),P(a);let f=D(`conversations/${a}`);await (0,x.af)(f),await E();try{d=await e.promises.lstat(f,{bigint:!0})}catch(a){if("ENOENT"===a.code)return(0,i.dw)(0,a=>b(void 0,a));throw a}let g=Number(d.size);return(0,i.dw)(g,async a=>{let g,h=(await (0,j.b)(f,{expected:d,signal:c.signal})).toString("utf8");if(c.signal?.throwIfAborted(),!h.trim())return b(void 0,a);try{g=JSON.parse(h)}catch(b){if(!(b instanceof SyntaxError))throw b;let a=`${f}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,h)}catch(a){B.error("Failed to back up corrupted conversation snapshot:",a)}throw Error(`Failed to parse JSON from ${f}. A backup has been created at ${a}. Original error: ${b.message}`)}return b(g,a)})}async function N(a){let b=D(a);await (0,x.af)(b),await (0,y.withWorkspaceMutation)(async()=>{await (0,x.af)(b);try{await e.promises.unlink(b),B.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?B.warn(`Error clearing item with key "${a}" at ${b}:`,c):B.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}})}let O=/^[A-Za-z0-9_-]{1,64}$/;function P(a){if("string"!=typeof a||!O.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let Q=a=>g().join(C(),a),R=(a,b)=>g().join(Q(a),`${b}.json`);async function S(a,b){P(b);try{let c=await e.promises.stat(R(a,b));return{mtimeMs:c.mtimeMs,sizeBytes:c.size}}catch(a){if("ENOENT"===a.code)return null;throw a}}let T=new Set(["persona-memories","persona-mailbox","persona-work-items","persona-activities","persona-lease-history"]);function U(a){if(!T.has(a))throw Error(`Unsupported Persona-sharded collection: ${JSON.stringify(a)}`)}function V(a,b){let c=g().relative(g().resolve(a),g().resolve(b));if(!c||c.startsWith("..")||g().isAbsolute(c))throw Error(`Persona shard path escapes its collection: ${b}`)}function W(a,b){return U(a),P(b),R(a,b)}function X(a,b,c){U(a),P(b),P(c);let d=Q(a),e=g().join(d,b,`${c}.json`);return V(d,e),e}async function Y(a){try{return await e.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function Z(a,b,c){U(a),P(b);let d=Q(a),f=g().join(d,b);V(d,f),c&&await e.promises.mkdir(d,{recursive:!0});let h=await Y(d);if(!h)return null;if(!h.isDirectory()||h.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${d}`);if(c)try{await e.promises.mkdir(f)}catch(a){if("EEXIST"!==a.code)throw a}let i=await Y(f);if(!i)return null;if(!i.isDirectory()||i.isSymbolicLink())throw Error(`Persona shard is not a link-free directory: ${f}`);let[j,k]=await Promise.all([e.promises.realpath(d),e.promises.realpath(f)]);return V(j,k),f}async function $(a){return s(a,C())}async function _(a){return(await $(a))?.content??null}function aa(a,b,c,d){let e;try{e=JSON.parse(a)}catch(a){throw Error(`Invalid JSON in Persona record ${JSON.stringify(`${b}/${c}/${d}`)}: `+a.message)}if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`Persona record ${JSON.stringify(d)} is not an object.`);let f=e;if(f.id!==d||f.personaId!==c)throw new t(d,c);return e}class ab extends Error{constructor(a,b,c){super(`Conflicting flat and sharded copies exist for ${JSON.stringify(`${a}/${b}/${c}`)}.`),this.collection=a,this.personaId=b,this.recordId=c,this.code="PERSONA_SHARD_COLLISION",this.name="PersonaShardCollisionError"}}async function ac(a,b,c,d,e){U(a),P(b),P(c);let f=await Z(a,b,!1),g=X(a,b,c),h=W(a,c),[i,j]=await Promise.all([f?_(g):Promise.resolve(null),e?.includeLegacy===!1?Promise.resolve(null):_(h)]);if(null!==i&&null!==j&&i!==j)throw new ab(a,b,c);let k=i??j;return null===k?d:aa(k,a,b,c)}async function ad(a,b,c){U(a),P(b),P(c);let d=await Z(a,b,!1),e=X(a,b,c),f=W(a,c),[g,h]=await Promise.all([d?$(e):Promise.resolve(null),$(f)]);if(g&&h&&g.content!==h.content)throw new ab(a,b,c);let i=g??h;return i?(aa(i.content,a,b,c),{mtimeMs:i.mtimeMs,sizeBytes:i.sizeBytes}):null}async function ae(a,b,c,f){if(U(a),P(b),P(c),f.id!==c||f.personaId!==b)throw Error("Persona-sharded save identity does not match its destination.");let g=X(a,b,c),h=W(a,c);await ai(`persona-shard/${a}/${b}/${c}`,async()=>{await Z(a,b,!0);let i=await _(h);null!==i&&aa(i,a,b,c),await I(g,JSON.stringify(f,null,2));try{await (0,d.QO)(),await e.promises.unlink(h)}catch(a){if("ENOENT"!==a.code)throw a}})}async function af(a,b,c){U(a),P(b),P(c);let d=X(a,b,c),f=W(a,c);await ai(`persona-shard/${a}/${b}/${c}`,async()=>{let g=await Z(a,b,!1),[h,i]=await Promise.all([g?_(d):Promise.resolve(null),_(f)]);null!==h&&aa(h,a,b,c),null!==i&&aa(i,a,b,c),await Promise.all([d,f].map(async a=>{try{await e.promises.unlink(a)}catch(a){if("ENOENT"!==a.code)throw a}}))})}async function ag(a,b){let c=await Z(a,b,!1);if(!c)return[];let d=(await e.promises.readdir(c)).sort(),f=[];for(let h of d){if(!h.endsWith(".json")||h.includes(".tmp.")||h.includes(".corrupted."))continue;let d=h.slice(0,-5);P(d);let i=g().join(c,h),k=await e.promises.lstat(i,{bigint:!0});if(!k.isFile()||k.isSymbolicLink())throw Error(`Persona shard item is not a regular link-free file: ${i}`);let l=(await (0,j.b)(i,{expected:k,verifyPath:async()=>{await Z(a,b,!1)}})).toString("utf8");f.push(aa(l,a,b,d))}return f}async function ah(a){U(a);let b=Q(a),c=await Y(b);if(!c)return[];if(!c.isDirectory()||c.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${b}`);let d=(await e.promises.readdir(b,{withFileTypes:!0})).sort((a,b)=>a.name.localeCompare(b.name)),f=new Map;for(let c of d){let d;if(c.isSymbolicLink())throw Error(`Persona collection contains a symbolic link: ${c.name}`);if(c.isDirectory()){for(let b of(P(c.name),await ag(a,c.name))){let d=JSON.stringify(b),e=f.get(b.id);if(e&&e.content!==d)throw new ab(a,c.name,b.id);f.set(b.id,{content:d,value:b})}continue}if(!c.isFile()||!c.name.endsWith(".json")||c.name.includes(".tmp.")||c.name.includes(".corrupted.")||c.name.endsWith(".bak"))continue;let h=c.name.slice(0,-5);P(h);let i=await e.promises.readFile(g().join(b,c.name),"utf8");try{d=JSON.parse(i)}catch(b){throw Error(`Invalid JSON in flat Persona record ${JSON.stringify(`${a}/${h}`)}: `+b.message)}if("string"!=typeof d.personaId)throw Error(`Flat Persona record ${JSON.stringify(h)} has no owner.`);P(d.personaId);let j=aa(i,a,d.personaId,h),k=JSON.stringify(j),l=f.get(h);if(l&&l.content!==k)throw new ab(a,d.personaId,h);f.set(h,{content:k,value:j})}return[...f.values()].map(({value:a})=>a)}function ai(a,b){return(0,y.withWorkspaceMutation)(async()=>{let c=(0,w.workspaceCacheKey)("chain",a),d=(F.get(c)??Promise.resolve()).catch(()=>{}).then(b);return F.set(c,d),d.catch(()=>{}).finally(()=>{F.get(c)===d&&F.delete(c)}),d})}async function aj(a,b,c){P(b);let d=R(a,b);if("conversations"===a)return(0,z.JN)((0,w.workspaceCacheKey)("conversation-publication",b),c,a=>(0,z.Sg)(()=>(0,y.withWorkspaceMutation)(()=>(0,A.MI)(b,()=>I(d,{conversation:!0,value:a})))));try{await ai(`${a}/${b}`,()=>I(d,JSON.stringify(c,null,2))),B.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw B.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function ak(a,b,c){if(P(b),"conversations"===a)return M(b,async a=>void 0===a?c:a);let d=R(a,b);try{let f=await e.promises.readFile(d,"utf-8");if(0===f.trim().length)return B.warn(`Collection item "${a}/${b}" at ${d} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){B.error(`CRITICAL: Failed to parse JSON from ${d}:`,b);let a=`${d}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,f),B.info(`Created backup of corrupted file at: ${a}`)}catch(a){B.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${d}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(e){if("ENOENT"===e.code)return B.verbose(`Collection item "${a}/${b}" not found at ${d}, returning default.`),c;throw B.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${d}:`,e),e}}async function al(a,b){P(b);let c=R(a,b);await ai(`${a}/${b}`,async()=>{try{await (0,d.QO)(),await e.promises.unlink(c),B.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;B.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function am(a){let b,c=Q(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let a=await e.promises.readFile(b,"utf-8");if(0===a.trim().length){B.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push(JSON.parse(a))}catch(a){B.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function an(a){let b,c=Q(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let f of b.sort()){let b;if(!f.endsWith(".json")||f.includes(".tmp.")||f.includes(".corrupted.")||f.endsWith(".bak"))continue;let h=f.slice(0,-5);P(h);let i=g().join(c,f),j=await e.promises.readFile(i,"utf8");if(0===j.trim().length)throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is empty.`);try{b=JSON.parse(j)}catch(b){throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is invalid JSON: ${b.message}`)}d.push({id:h,item:b})}return d}async function ao(a){let b,c=Q(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let[c,f]=await Promise.all([e.promises.readFile(b,"utf-8"),e.promises.stat(b)]);if(0===c.trim().length){B.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push({id:a.slice(0,-5),item:JSON.parse(c),mtimeMs:f.mtimeMs,sizeBytes:f.size})}catch(a){B.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function ap(a,b,c){let f,g,h=D(a);try{f=await e.promises.readFile(h,"utf-8")}catch(a){if("ENOENT"===a.code)return 0;throw a}if(0===f.trim().length)return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),0;try{g=JSON.parse(f)}catch(b){return B.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(g))return B.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await e.promises.mkdir(Q(b),{recursive:!0}),g)){let d;try{d=c(a),P(d)}catch(a){B.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=R(b,d);try{await e.promises.access(f),B.debug(`Migration: ${b}/${d} already exists; keeping the existing file.`);continue}catch{}await I(f,JSON.stringify(a,null,2))}return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),B.info(`Migration: moved ${g.length} ${b} item(s) from ${a}.json to per-item storage.`),g.length}},320108:(a,b,c)=>{c.d(b,{Zg:()=>d.Zg});var d=c(555271)},359262:(a,b,c)=>{c.d(b,{RJ:()=>e,gF:()=>d});let d="masked:********",e="********"},377424:(a,b,c)=>{c.d(b,{XF:()=>i,rF:()=>h});let d=globalThis;function e(a){if(void 0===a)return 0;if(!a||"object"!=typeof a)throw Error("Invalid existing allocation ledger.");let b=Object.getOwnPropertyDescriptor(a,"bytes");if(!b||!("value"in b)||!Number.isSafeInteger(b.value)||b.value<0)throw Error("Invalid existing allocation ledger.");return b.value}let f=d.__flujoAllocationReservationsV1??={run:e(d.__flujoFlowRunAdmission),preparation:e(d.__flujoSubflowPreparation),output:e(d.__flujoSubflowOutput),ingress:e(d.__flujoChatIngressV1),publication:e(d.__flujoConversationPublicationV1)};function g(a,b){if(!["run","preparation","output","ingress","publication"].includes(a)||!Number.isSafeInteger(b)||b<0)throw Error("Invalid allocation reservation observation.")}function h(a,b){g(a,b),f[a]=b}function i(a,b){return g(a,b),f.run+f.preparation+f.output+f.ingress+f.publication-f[a]+b}f.publication??=e(d.__flujoConversationPublicationV1)},383594:(a,b,c)=>{c.d(b,{Gv:()=>g,Ok:()=>h,nN:()=>f});let d=Object.freeze({maxSegmentBytes:8388608,maxSegmentEvents:2e4,retentionDays:0,maxClosedSegments:30});function e(a,b,c){if(void 0===a)return b;if(!/^-?\d+$/.test(a))return null;let d=Number(a);return Number.isSafeInteger(d)&&d>=c?d:null}function f(a=process.env){let b=e(a.FLUJO_PERSONA_RUNTIME_EVENT_SEGMENT_MAX_BYTES,d.maxSegmentBytes,1),c=e(a.FLUJO_PERSONA_RUNTIME_EVENT_SEGMENT_MAX_EVENTS,d.maxSegmentEvents,1),g=e(a.FLUJO_PERSONA_RUNTIME_EVENT_RETENTION_DAYS,d.retentionDays,0),h=e(a.FLUJO_PERSONA_RUNTIME_EVENT_MAX_CLOSED_SEGMENTS,d.maxClosedSegments,0);return null===b||null===c||null===g||null===h?{...d}:{maxSegmentBytes:b,maxSegmentEvents:c,retentionDays:g,maxClosedSegments:h}}Object.freeze({mode:"disabled",rolloutBasisPoints:0,cohortVersion:"persona-runtime-retention-v1",criticalPersonaIds:Object.freeze([])});let g={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_ADMISSION:!1,ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_DIAGNOSIS:!1,get ENABLE_MCP_TASKS_CLIENT(){return"true"===process.env.FLUJO_MCP_TASKS_CLIENT},get ENABLE_MCP_TASKS_SERVER(){return"true"===process.env.FLUJO_MCP_TASKS_SERVER},ENABLE_MEMORY_CANDIDATE_EXPIRY:!0,ENABLE_MEMORY_AUTO_PROMOTION:!1,ENABLE_MEMORY_CONFLICT_SURFACING:!0,ENABLE_PERSONA_RUNTIME_RETENTION:!1,ENABLE_PERSONA_LEASE_HISTORY_PRUNING:!1,ENABLE_PERSONA_BEHAVIOR_OUTCOME_METRICS:!1,ENABLE_PERSONA_BEHAVIOR_OUTCOME_AUTO_ROLLBACK:!1};function h(){return g.ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_DIAGNOSIS&&g.ENABLE_PERSONA_BEHAVIOR_OUTCOME_METRICS&&g.ENABLE_PERSONA_BEHAVIOR_OUTCOME_AUTO_ROLLBACK}},453635:(a,b,c)=>{c.d(b,{A:()=>E});var d=c(548249),e=c(367484),f=c(660799),g=c(398635),h=c(164621),i=c(170631),j=c(17774),k=c(679195),l=c(501057),m=c(567235),n=c(491316),o=c(414756),p=c(423892),q=c(690384),r=c(70803),s=c(406680),t=c(523806),u=c(269898),v=c(457726),w=c(232383),x=c(503753),y=c(192772),z=c(803146),A=c(359262),B=c(532166);let C=(0,s.h)("frontend/components/mcp/MCPEnvManager/EnvEditor"),D=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,E=({serverName:a,initialEnv:b,onSave:c,onDelete:s,onServerRestart:E})=>{let{t:F}=(0,B.s9)(),{globalEnvVars:G}=(0,t.rX)(),[H,I]=(0,e.useState)([]),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(!1),[P,Q]=(0,e.useState)(null);(0,e.useEffect)(()=>{C.debug(`Initializing environment variables for server: ${a}`,{variableCount:Object.keys(b).length}),I(Object.entries(b).map(([a,b])=>{let c="object"==typeof b&&null!==b&&"value"in b?b.value:b,d="object"==typeof b&&null!==b&&"metadata"in b?b.metadata:{isSecret:(0,z.xc)(a)},e=c.match(D);if(e){let b=e[1];return{key:a,value:c,isSecret:d.isSecret,isBound:!0,boundTo:b}}let f="string"==typeof c&&(c.startsWith("encrypted:")||c.startsWith("encrypted_failed:"));return{key:a,value:f?A.gF:c,isSecret:d.isSecret,isEncrypted:f}}))},[b]);let R=async b=>{C.debug(`Removing environment variable at index: ${b}`);let c=H[b];if("Global"===a&&s&&c.key)try{await s(c.key),I(H.filter((a,c)=>c!==b))}catch(a){C.error(`Failed to delete environment variable: ${c.key}`,a)}else I(H.filter((a,c)=>c!==b)),K(!0)},S=(a,b,c)=>{let d=[...H];if("isSecret"===b){let b=d[a];b.isSecret&&!c?d[a]={...b,isSecret:c,value:"",isEncrypted:!1,showWarning:!0}:d[a]={...b,isSecret:c}}else{let e={...d[a],[b]:c,isSecret:"key"===b?(0,z.xc)(c):d[a].isSecret};if("key"===b&&(e.isValidKey=""===c||/^[a-zA-Z0-9_]+$/.test(c)),"value"===b){let b=c.match(D);e.isBound=!!b,e.boundTo=b?.[1],d[a].isEncrypted&&(e.isEncrypted=!1),d[a].showWarning&&c&&(e.showWarning=!1)}d[a]=e}I(d),K(!0)},T=async()=>{if(H.some(a=>""!==a.key&&!1===a.isValidKey))return void C.error("Cannot save: Some variable names contain invalid characters");C.debug(`Saving environment variables for server: ${a}`,{variableCount:H.length}),M(!0);try{let b=H.reduce((a,b)=>{let{key:c,value:d,isBound:e,boundTo:f,isSecret:g}=b;return c&&(e&&f?a[c]={value:`$\{global:${f}}`,metadata:{isSecret:g}}:a[c]={value:d,metadata:{isSecret:g}}),a},{});await c(b),K(!1),E&&"Global"!==a&&(C.debug(`Restarting server after env variable changes: ${a}`),await E(a))}catch(a){C.error("Failed to save environment variables:",a)}M(!1)};return(0,d.jsxs)(f.A,{sx:{p:3,borderRadius:2,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[(0,d.jsx)(h.A,{variant:"h6",sx:{fontWeight:"semibold"},children:F("mcp.env.title",{server:a})}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,d.jsx)(u.A,{}),onClick:()=>{C.debug("Adding new environment variable"),I([...H,{key:"",value:"",isSecret:!1}]),K(!0)},children:F("mcp.env.add")})]}),(0,d.jsx)(j.A,{spacing:3,children:H.map((a,b)=>(0,d.jsxs)(k.A,{container:!0,spacing:2,sx:{alignItems:"flex-start"},children:[(0,d.jsx)(k.A,{size:{xs:12,sm:5},children:(0,d.jsx)(l.A,{fullWidth:!0,placeholder:F("mcp.env.name"),value:a.key,onChange:a=>S(b,"key",a.target.value),error:!1===a.isValidKey,helperText:!1===a.isValidKey?F("mcp.env.invalidName"):"",size:"small"})}),(0,d.jsx)(k.A,{size:{xs:12,sm:5},children:(0,d.jsx)(l.A,{fullWidth:!0,type:a.isSecret?"password":"text",placeholder:a.showWarning?F("mcp.env.reenter"):F("mcp.env.value"),value:a.value,onChange:a=>S(b,"value",a.target.value),slotProps:{input:{readOnly:a.isBound,startAdornment:a.isEncrypted?(0,d.jsx)(m.A,{position:"start",children:(0,d.jsx)(v.A,{fontSize:"small",titleAccess:F("mcp.env.encrypted")})}):null,endAdornment:a.isBound?(0,d.jsx)(m.A,{position:"end",children:(0,d.jsx)(n.A,{size:"small",label:F("mcp.env.bound",{name:a.boundTo??""}),color:"primary",variant:"outlined",onDelete:()=>{let a;return C.debug(`Unbinding variable at index: ${b}`),void((a=[...H])[b]={...a[b],isBound:!1,boundTo:void 0},I(a),K(!0))},deleteIcon:(0,d.jsx)(w.A,{fontSize:"small"})})}):null}},error:a.showWarning,helperText:a.showWarning?F("mcp.env.reenterHelp"):"",size:"small",sx:{bgcolor:b=>a.isBound?"dark"===b.palette.mode?"#1a1a1a":"#f9fafb":b.palette.background.paper}})}),(0,d.jsx)(k.A,{size:{xs:12,sm:2},children:(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(o.A,{control:(0,d.jsx)(p.A,{checked:a.isSecret,onChange:a=>S(b,"isSecret",a.target.checked),size:"small"}),label:F("mcp.env.secret"),sx:{mr:1}}),!a.isBound&&(0,d.jsx)(q.A,{size:"small",color:"primary",onClick:()=>{C.debug(`Opening bind modal for variable at index: ${b}`),Q(b),O(!0)},title:F("mcp.env.bind"),sx:{mr:1},children:(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(q.A,{size:"small",color:"error",onClick:()=>R(b),title:F("mcp.env.remove"),children:(0,d.jsx)(y.A,{fontSize:"small"})})]})})]},b))}),(0,d.jsx)(r.A,{open:N,onClose:()=>{O(!1),Q(null)},children:(0,d.jsxs)(g.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,d.jsx)(h.A,{variant:"h6",sx:{mb:2},children:F("mcp.env.bindTitle")}),0===Object.keys(G).length?(0,d.jsx)(h.A,{color:"text.secondary",sx:{mb:2},children:F("mcp.env.noGlobals")}):(0,d.jsx)(g.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(G).map(([a,b])=>(0,d.jsxs)(i.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{if(null!==P){C.debug(`Binding variable at index ${P} to global variable: ${a}`);let b=[...H];b[P]={...b[P],isBound:!0,boundTo:a,value:`$\{global:${a}}`},I(b),O(!1),Q(null),K(!0)}})(a),sx:{justifyContent:"space-between",textAlign:"left",mb:1,p:1,borderRadius:1},children:[(0,d.jsx)(h.A,{variant:"body2",children:a}),(0,d.jsx)(h.A,{variant:"caption",color:"text.secondary",children:b&&"object"==typeof b&&b.metadata&&b.metadata.isSecret?A.gF:b&&"object"==typeof b?b.value:b})]},a))}),(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(i.A,{variant:"outlined",onClick:()=>{O(!1),Q(null)},children:F("mcp.env.cancel")})})]})}),J&&(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end",mt:3},children:(0,d.jsx)(i.A,{variant:"contained",color:"success",onClick:T,disabled:L||H.some(a=>""!==a.key&&!1===a.isValidKey),children:L?F("mcp.env.saving"):F("mcp.env.save")})})]})}},482432:(a,b,c)=>{c.d(b,{l:()=>i,rF:()=>h}),c(977598);var d=c(731612);let e=["openai:read","openai:execute","mcp:access","control:admin","secrets:read","avatar:voice"],f=d.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),g=d.object({id:d.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),digest:d.string().regex(/^[a-f0-9]{64}$/),scopes:d.array(d.enum(e)).min(1).max(e.length).refine(a=>new Set(a).size===a.length),issuedAt:f,expiresAt:f,revokedAt:f.nullable(),workspaceId:d.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/).refine(a=>!/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i.test(a)).optional()}).strict().refine(a=>a.expiresAt>a.issuedAt).refine(a=>void 0===a.workspaceId||a.scopes.every(a=>"avatar:voice"===a)),h=d.object({schemaVersion:d.literal(1),ownerId:d.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),credentials:d.array(g).max(128)}).strict().superRefine((a,b)=>{(new Set(a.credentials.map(a=>a.id)).size!==a.credentials.length||new Set(a.credentials.map(a=>a.digest)).size!==a.credentials.length)&&b.addIssue({code:"custom",message:"Duplicate credential identity"})});function i(a,b){return b.every(b=>a.scopes.includes(b))}},492093:(a,b,c)=>{c.d(b,{B7:()=>o,qy:()=>j,withWorkspaceMutation:()=>n});var d=c(16698),e=c(189663);function f(a,b){let c=Error(`Workspace ${a?"recovery":"mutation"} ${b}.`);return c.name=a?"WorkspaceRecoveryOwnershipError":"WorkspaceMutationContextError",c}async function g(a,b,c){let d={live:!0,admission:b};b.participants+=1;let f=new Map(l.getStore()?.participants??[]);f.set(a,d);try{return await (0,e.runWithWorkspace)(a,()=>l.run({participants:f,readCaptures:l.getStore()?.readCaptures},()=>c(d)))}finally{if(d.live=!1,b.participants-=1,0===b.participants){for(let a of b.waiters)a();b.waiters.clear()}}}async function h(a){a.participants>0&&await new Promise(b=>a.waiters.add(b))}async function i(a,b){let c=b.admission.recovery,d=()=>{if(!b.live)throw f(!!c,"context has finished");if((0,e.getCurrentWorkspace)()!==a)throw f(!!c,"workspace changed");if(c?.signal?.aborted)throw f(!0,"was cancelled")};if(d(),c){try{await c.assertOwned()}catch{throw f(!0,"ownership was lost")}d()}}async function j(){let a=(0,e.normalizeWorkspaceName)((0,e.getCurrentWorkspace)()),b=l.getStore()?.participants?.get(a);if(!b)throw f(!1,"has no admitted participant");await i(a,b)}let k=globalThis.__flujoWorkspaceMutationGates??(globalThis.__flujoWorkspaceMutationGates=new Map),l=globalThis.__flujoWorkspaceMutationContext??(globalThis.__flujoWorkspaceMutationContext=new d.AsyncLocalStorage);function m(a){let b=k.get(a);return b||(b={activeMutations:0,blocked:!1,generation:0,admissionWaiters:new Set,drainWaiters:new Set},k.set(a,b)),b}async function n(a,b=(0,e.getCurrentWorkspace)()){let d=(0,e.normalizeWorkspaceName)(b),j=l.getStore();if(j&&!j.participants)throw f(!1,"context predates the current admission protocol");if(j?.readCaptures?.has(d))throw f(!1,"cannot write from a read capture");let k=j?.participants?.get(d);if(k&&!k.live&&k.admission.recovery)throw f(!0,"context has finished");if(k?.live){if(await (0,e.runWithWorkspace)(d,()=>i(d,k)),!k.live&&k.admission.recovery)throw f(!0,"context has finished");if(k.live)return(0,e.runWithWorkspace)(d,()=>g(d,k.admission,async b=>{await i(d,b);let c=await a();return await i(d,b),c}))}let o=m(d);for(;o.blocked;)await new Promise(a=>o.admissionWaiters.add(a));o.activeMutations+=1;let p={participants:0,waiters:new Set};try{let{withWorkspaceProcessMutation:b}=await c.e(79504).then(c.bind(c,779504));return await (0,e.runWithWorkspace)(d,()=>b(async()=>{try{return await g(d,p,a)}finally{await h(p)}}))}finally{o.activeMutations-=1,function(a){if(0!==a.activeMutations)return;let b=[...a.drainWaiters];for(let c of(a.drainWaiters.clear(),b))c()}(o)}}function o(a=(0,e.getCurrentWorkspace)()){let b=m((0,e.normalizeWorkspaceName)(a));return{activeMutations:b.activeMutations,blocked:b.blocked,generation:b.generation}}},537944:(a,b,c)=>{c.d(b,{$j:()=>C,Bh:()=>S,DV:()=>u,Do:()=>s,Jl:()=>B,Kq:()=>v,OU:()=>J,VN:()=>O,Zl:()=>t,g:()=>K,jf:()=>F,pr:()=>E,r:()=>p,vb:()=>N,y0:()=>A});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(731612),j=c(189663),k=c(901984),l=c(482432),m=c(35984),n=c(950902),o=c(711873);function p(a){let b=new Map;for(let[c,d]of Object.entries(Object.getOwnPropertyDescriptors(a.env??{}))){if(!d.enumerable)continue;if(!("value"in d))throw new v("HOST_POLICY_INVALID");let a=d.value,e=a&&"object"==typeof a?Object.getOwnPropertyDescriptor(a,"value"):void 0,f="string"==typeof a?a:e&&"value"in e?e.value:void 0;if("string"!=typeof f||Buffer.byteLength(f)>16384||f.includes("\0"))throw new v("HOST_POLICY_INVALID");b.set(c,f)}return b}let q=i.string().regex(/^[a-f0-9]{64}$/),r=i.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0"));function s(a,b){let c=t.parse(a.trustedHost),d=b??c.runtimeHome,e=p(a),f="win32"===process.platform?"USERPROFILE":"HOME",i=[...e].find(([a])=>"win32"===process.platform?a.toUpperCase()===f:a===f)?.[1],k="isolated"===d?g().join((0,j.getWorkspaceDataDir)(),"userdata","mcp-runtime",(0,h.createHash)("sha256").update(a.name).digest("hex").slice(0,24),"home"):i??"";return{command:a.command,home:k}}[..."win32"===process.platform?["HOMEDRIVE","HOMEPATH"]:[]];let t=i.object({schemaVersion:i.literal(1),kind:i.literal("trusted-host"),privileges:i.literal("owner-account"),runtime:i.enum(["node","native","npx"]),runtimeHome:i.enum(["host","isolated"]).optional(),entryPoint:r,sourceRoot:r,sourceDigest:q,executableDigest:q,packageRunner:o.kU.optional(),bundledInstallation:i.object({packageDirectory:i.enum(["flujo","filesystem","bash","browser"]),installationRoot:r,dependencyNamespaceRoot:r,assetDigest:q,dependencyGraphDigest:q,dependencyDirectories:i.array(r).max(256),dependencyLinks:i.array(i.object({link:r,target:r}).strict()).max(64),workload:i.object({purpose:i.literal("bundled-flujo-control-v1"),inventory:i.array(i.object({action:i.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,127}$/),method:i.enum(["GET","POST"]),path:i.enum(["/api/mcp/flujo/tools","/api/mcp/flujo/resources","/api/mcp/flujo/resources/read","/api/mcp/flujo/skills","/api/mcp/flujo/authoring","/api/mcp/flujo/flows","/api/mcp/flujo/servers","/api/mcp/flujo/automation","/api/mcp/flujo/state"]),schemaDigest:q}).strict()).min(1).max(70).refine(a=>new Set(a.map(a=>a.action)).size===a.length)}).strict().optional()}).strict().optional(),environmentNames:i.array(i.string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,127}$/).refine(a=>!["NODE_OPTIONS","NODE_PATH","PYTHONPATH","PYTHONHOME","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH"].includes(a.toUpperCase()))).max(64)}).strict().refine(a=>new Set(a.environmentNames.map(a=>"win32"===process.platform?a.toUpperCase():a)).size===a.environmentNames.length).refine(a=>!a.bundledInstallation?.workload||"flujo"===a.bundledInstallation.packageDirectory).refine(a=>"npx"===a.runtime==!!a.packageRunner&&!(a.packageRunner&&a.bundledInstallation)),u=i.object({schemaVersion:i.literal(1),ownerId:i.string().regex(/^[A-Za-z0-9_-]{1,64}$/),approvals:i.array(i.object({workspace:i.string().refine(j.isValidWorkspaceName),serverName:i.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),policyDigest:q,expiresAt:i.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).strict()).max(128)}).strict().refine(a=>new Set(a.approvals.map(a=>JSON.stringify([a.workspace,a.serverName]))).size===a.approvals.length);class v extends Error{constructor(a){super("HOST_CONSENT_REQUIRED"===a?"MCP host execution requires explicit owner consent for this workspace, server, package revision and capabilities. Configure an approved isolated profile or a separately protected trusted-host approval.":"HOST_SOURCE_CHANGED"===a?"MCP executable or package revision changed. Inspect the fixed package and renew owner consent before execution.":"MCP trusted-host policy is invalid. Use an absolute executable, working directory and fixed workspace package; dynamic package runners require an approved isolated profile."),this.code=a,this.name="TrustedHostMcpError"}}function w(a){let b=g().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function x(a){let b=g().resolve(a);for(;;){if(e().lstatSync(b).isSymbolicLink())throw new v("HOST_SOURCE_CHANGED");let a=g().dirname(b);if(a===b)break;b=a}if(w(e().realpathSync(a))!==w(a))throw new v("HOST_SOURCE_CHANGED")}function y(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}function z(a,b,c){let f=e().openSync(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=e().fstatSync(f,{bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||(x(a),!y(d,e().lstatSync(a,{bigint:!0}))))throw new v("HOST_SOURCE_CHANGED");let g=Buffer.alloc(65536),h=0;for(;;){let a=e().readSync(f,g,0,g.length,null);if(!a)break;if((h+=a)>b||BigInt(h)>d.size)throw new v("HOST_SOURCE_CHANGED");c(g.subarray(0,a))}if(x(a),BigInt(h)!==d.size||!y(d,e().fstatSync(f,{bigint:!0}))||!y(d,e().lstatSync(a,{bigint:!0})))throw new v("HOST_SOURCE_CHANGED");return d}finally{e().closeSync(f)}}function A(a){try{let b=(0,h.createHash)("sha256");return z(a,0x20000000,a=>b.update(a)),b.digest("hex")}catch{throw new v("HOST_SOURCE_CHANGED")}}function B(a){let b="win32"===process.platform&&a?(0,m.f)(a):void 0,c=a?e().lstatSync(a,{bigint:!0}):void 0,d=H(a);if(void 0!==b&&(0,m.f)(a)!==b||c&&a&&(x(a),!y(c,e().lstatSync(a,{bigint:!0}))))throw new v("HOST_CONSENT_REQUIRED");return d}async function C(a,b){return(await G(a,b)).value}async function D(a,b,c){if(!a||!b||c?.aborted)throw new v("HOST_CONSENT_REQUIRED");let d=[a,b],f=d.map(a=>e().lstatSync(a,{bigint:!0})),g="win32"===process.platform?await (0,m.p)(d,c):void 0,h=d.map(a=>H(a));if(void 0!==g&&await (0,m.p)(d,c)!==g)throw new v("HOST_CONSENT_REQUIRED");for(let[a,b]of d.entries())if(x(b),!y(f[a],e().lstatSync(b,{bigint:!0})))throw new v("HOST_CONSENT_REQUIRED");if(c?.aborted)throw new v("HOST_CONSENT_REQUIRED");return[h[0],h[1]]}async function E(a,b,c){let d,f="1"===process.env.FLUJO_MCP_WORKLOAD_TRACE?Date.now():void 0,h="input";try{if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let c=[...a];h="identity-before";let f=c.map((a,b)=>(d=b,e().lstatSync(a,{bigint:!0})));h="native-before",d=void 0;let i="win32"===process.platform?await (0,m.p)(c,b):void 0;h="contents";let j=c.map((a,b)=>(d=b,H(a)));if(h="native-after",d=void 0,void 0!==i&&await (0,m.p)(c,b)!==i)throw new v("HOST_CONSENT_REQUIRED");for(let[a,b]of(h="identity-after",c.entries()))if(d=a,x(b),!y(f[a],e().lstatSync(b,{bigint:!0})))throw new v("HOST_CONSENT_REQUIRED");if(h="signal-after",d=void 0,b?.aborted)throw new v("HOST_CONSENT_REQUIRED");return j}catch(a){throw!function(a,b,c,d,e,f){try{if(void 0===f)return;let g=void 0!==b&&c?Object.getOwnPropertyDescriptor(c,String(b)):void 0,h=g&&"value"in g?g.value:void 0,i=void 0===b?"set":"record"===h||"marker"===h||"owner"===h||"ledger"===h?h:"member",j=d&&"object"==typeof d?Object.getOwnPropertyDescriptors(d):{},k=j.code&&"value"in j.code?j.code.value:void 0,l=j.errno&&"value"in j.errno?j.errno.value:void 0,m="string"==typeof k&&["HOST_CONSENT_REQUIRED","HOST_SOURCE_CHANGED","HOST_POLICY_INVALID","ENOENT","EACCES","EPERM","EIO","EBUSY","EMFILE","ENFILE","ENOTDIR","ELOOP","EINVAL"].includes(k)?k:"unknown";console.info("[private-approval-set-reader]","refused",{phase:a,role:i,errorKind:m,..."number"==typeof l&&Number.isInteger(l)&&65535>=Math.abs(l)?{errno:l}:{},cancelled:e?.aborted===!0,elapsedMs:Math.max(0,Date.now()-f)})}catch{}}(h,d,c,a,b,f),a}}function F(a,b){if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let c=[...a],d=c.map(a=>e().lstatSync(a,{bigint:!0})),f="win32"===process.platform?(0,m.f)(c):void 0,h=c.map(a=>H(a));if(void 0!==f&&(0,m.f)(c)!==f)throw new v("HOST_CONSENT_REQUIRED");for(let[a,b]of c.entries())if(x(b),!y(d[a],e().lstatSync(b,{bigint:!0})))throw new v("HOST_CONSENT_REQUIRED");if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");return h}async function G(a,b){let c="signal-before";try{if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");c="native-before";let d="win32"===process.platform&&a?await (0,m.p)(a,b):void 0;c="identity-before";let f=a?e().lstatSync(a,{bigint:!0}):void 0;c="contents";let g=H(a);if(c="native-after",void 0!==d&&await (0,m.p)(a,b)!==d||(c="identity-after",f&&a&&(x(a),!y(f,e().lstatSync(a,{bigint:!0}))))||(c="signal-after",b?.aborted))throw new v("HOST_CONSENT_REQUIRED");return{value:g,windowsAuthority:d}}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[private-approval-reader]","refused",c)}catch{}throw a}}function H(a){if(!a||!g().isAbsolute(a))throw new v("HOST_CONSENT_REQUIRED");let b=g().relative(g().resolve((0,k.ok)()),g().resolve(a));if(!b||".."!==b&&!b.startsWith(`..${g().sep}`)&&!g().isAbsolute(b))throw new v("HOST_CONSENT_REQUIRED");if("win32"!==process.platform&&"function"==typeof process.getuid){let b=BigInt(process.getuid()),c=g().dirname(g().resolve(a));for(;;){let a=e().lstatSync(c,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||a.uid!==b&&a.uid!==BigInt(0)||(a.mode&BigInt(18))!==BigInt(0)&&(a.mode&BigInt(512))===BigInt(0))throw new v("HOST_CONSENT_REQUIRED");let d=g().dirname(c);if(d===c)break;c=d}}let c=[];try{let b=z(a,65536,a=>c.push(Buffer.from(a)));if("win32"!==process.platform&&(b.mode&BigInt(63))!==BigInt(0)||"win32"!==process.platform&&"function"==typeof process.getuid&&b.uid!==BigInt(process.getuid())&&b.uid!==BigInt(0))throw new v("HOST_CONSENT_REQUIRED");return JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(Buffer.concat(c)))}finally{for(let a of c)a.fill(0)}}function I(a,b=!1){let c="CONSENT_POLICY_SCHEMA";try{let b=t.parse(a.trustedHost);c="CONSENT_LAUNCH";let d=r.parse(a.command),e=r.parse(a.cwd),f=i.array(i.string().max(2048).refine(a=>!a.includes("\0"))).max(64).parse(a.args??[]);if(void 0!==a.isolation||/\.(?:cmd|bat|ps1)$/i.test(d)||"npx"!==b.runtime&&w(e)!==w(b.sourceRoot))throw Error();let h=g().relative(b.sourceRoot,b.entryPoint);if(!h||".."===h||h.startsWith(`..${g().sep}`)||g().isAbsolute(h))throw Error();let l=g().basename(d).toLowerCase().replace(/\.exe$/,"");if("npx"===b.runtime)(0,o.nT)({sourceRoot:b.sourceRoot,entryPoint:b.entryPoint,command:d,cwd:e,args:f,runner:b.packageRunner,environment:p(a)});else if("node"===b.runtime){if("node"!==l||f[0]!==b.entryPoint||!/\.(?:mjs|cjs|js)$/.test(b.entryPoint))throw Error()}else if(w(d)!==w(b.entryPoint)||["node","npm","npx","pnpm","yarn","corepack","uv","uvx","pip","pip3","python","python3","bash","sh","cmd","powershell","pwsh","ruby","perl","deno","bun","go","cargo"].includes(l))throw Error();if(c="CONSENT_BUNDLE",b.bundledInstallation){if("node"!==b.runtime||w(b.entryPoint)!==w(g().join(b.sourceRoot,"dist","index.js"))||w(b.sourceRoot)!==w(g().join((0,j.getWorkspaceDataDir)(),"mcp-servers",b.bundledInstallation.packageDirectory)))throw Error();let a=g().relative(g().resolve((0,k.ok)()),b.bundledInstallation.installationRoot);if(!a||".."!==a&&!a.startsWith(`..${g().sep}`)&&!g().isAbsolute(a))throw Error();for(let a of b.bundledInstallation.dependencyLinks){let c=g().relative(g().join(b.sourceRoot,"node_modules"),a.link);if(".."===c||c.startsWith(`..${g().sep}`)||g().isAbsolute(c))throw Error()}}c="CONSENT_ENVIRONMENT";let m=[...p(a)].sort(([a],[b])=>a<b?-1:+(a>b)).map(([a,c])=>{if(!b.environmentNames.includes(a))throw Error();return[a,c]});c="CONSENT_CAPABILITIES";let n=i.string().max(2048).refine(a=>!a.includes("${global:")&&!/[\x00-\x1f\x7f]/.test(a)),q=i.array(n).max(64).parse(a.roots??[]),s=n.parse(a.rootPath??"");c="CONSENT_SERIALIZE";let u=JSON.stringify({domain:"flujo:mcp:trusted-host-consent:v2",command:d,args:f,cwd:e,requestedEnvironment:m,policy:{...b,environmentNames:[...b.environmentNames].sort()},capabilities:{roots:q,sampling:a.sampling??null,elicitation:a.elicitation??null,apps:!0===a.enableMcpApps,skills:!0===a.enableMcpSkills,rootPath:s,runtimeHomeMode:a.runtimeHomeMode??null}}),v=JSON.stringify(["flujo:mcp:trusted-host-consent:v2",(0,j.getCurrentWorkspace)(),a.name,b.sourceRoot]);return{consent:u,salt:v}}catch(a){if(b)throw new n.IP(c,a);throw new v("HOST_POLICY_INVALID")}}function J(a){let{consent:b,salt:c}=I(a);return(0,h.scryptSync)(b,c,32,{N:16384,r:8,p:1,maxmem:0x4000000}).toString("hex")}function K(a,b){let c=I(a),d=I(b);return c.consent===d.consent&&c.salt===d.salt}async function L(a,b){return M(a,b,!1)}async function M(a,b,c){if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let{consent:d,salt:e}=I(a,c),f=await new Promise((a,b)=>{let f=a=>b(c?new n.IP("CONSENT_SCRYPT",a):a);try{(0,h.scrypt)(d,e,32,{N:16384,r:8,p:1,maxmem:0x4000000},(b,c)=>b?f(b):a(c))}catch(a){f(a)}});try{if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");return f.toString("hex")}finally{f.fill(0)}}function N(a){if(void 0===a.trustedHost)throw new v("HOST_CONSENT_REQUIRED");try{let b=t.parse(a.trustedHost),c=J(a),d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw Error();let g=[d,f],h=g.map(a=>e().lstatSync(a,{bigint:!0})),i="win32"===process.platform?(0,m.f)(g):void 0,k=g.map(a=>H(a));if(void 0!==i&&(0,m.f)(g)!==i)throw Error();for(let[a,b]of g.entries())if(x(b),!y(h[a],e().lstatSync(b,{bigint:!0})))throw Error();if(d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let n=u.parse(k[0]),o=l.rF.parse(k[1]),p=n.approvals.find(b=>b.workspace===(0,j.getCurrentWorkspace)()&&b.serverName===a.name);if(o.ownerId!==n.ownerId||!p||p.expiresAt<=Date.now()||p.policyDigest!==c)throw Error();return{policy:b,digest:c,ownerId:o.ownerId,workspace:(0,j.getCurrentWorkspace)(),expiresAt:p.expiresAt}}catch(a){if(a instanceof v)throw a;throw new v("HOST_CONSENT_REQUIRED")}}async function O(a,b){try{let c=structuredClone(a),d=(0,j.getCurrentWorkspace)(),e=t.parse(c.trustedHost),f=await L(c,b),g=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,h=process.env.FLUJO_OWNER_AUTH_FILE;if(!g||!h)throw Error();let i=await D(g,h,b);if(g!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||h!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let k=u.parse(i[0]),m=l.rF.parse(i[1]),n=k.approvals.find(a=>a.workspace===d&&a.serverName===c.name);if(b?.aborted||d!==(0,j.getCurrentWorkspace)()||m.ownerId!==k.ownerId||!n||n.expiresAt<=Date.now()||n.policyDigest!==f)throw Error();return{policy:e,digest:f,ownerId:m.ownerId,workspace:d,expiresAt:n.expiresAt}}catch(a){if(a instanceof v)throw a;throw new v("HOST_CONSENT_REQUIRED")}}async function P(a){let b=[],c=g().resolve(a);for(;;){b.push(c);let a=g().dirname(c);if(a===c)break;c=a}for(let a=0;a<b.length;a+=8)if((await Promise.allSettled(b.slice(a,a+8).map(a=>e().promises.lstat(a)))).some(a=>"rejected"===a.status||a.value.isSymbolicLink()))throw Error();if(w(await e().promises.realpath(a))!==w(a))throw Error()}async function Q(a,b,c,f){let g;if(c?.aborted)throw Error();let i=await e().promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=await i.stat({bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||f&&!y(f,d)||(await P(a),!y(d,await e().promises.lstat(a,{bigint:!0}))))throw Error();let j=(0,h.createHash)("sha256");g=Buffer.alloc(d.size>BigInt(1048576)?1048576:65536);let k=0;for(;;){if(c?.aborted)throw Error();let{bytesRead:a}=await i.read(g,0,g.length,null);if(!a)break;if((k+=a)>b||BigInt(k)>d.size)throw Error();j.update(g.subarray(0,a))}if(await P(a),BigInt(k)!==d.size||!y(d,await i.stat({bigint:!0}))||!y(d,await e().promises.lstat(a,{bigint:!0})))throw Error();return{digest:j.digest("hex"),size:k}}finally{g?.fill(0),await i.close()}}async function R(a,b,c=[]){let d=g().resolve(a),f=g().relative(g().resolve((0,j.getWorkspaceDataDir)(),"mcp-servers"),d);if(!f||".."===f||f.startsWith(`..${g().sep}`)||g().isAbsolute(f))throw Error();let i=(0,h.createHash)("sha256").update("flujo:mcp:trusted-host-source:v1\0"),k=0,l=0,m=async a=>{if(b?.aborted||++k>16384)throw Error();await P(a);let f=await e().promises.lstat(a,{bigint:!0});if(!f.isDirectory())throw Error();i.update(JSON.stringify(["directory",g().relative(d,a).split(g().sep).join("/"),String(f.mode)]));let h=(await e().promises.readdir(a)).sort((a,b)=>a<b?-1:+(a>b)),j=[],n=async()=>{let a=j.splice(0),c=await Promise.allSettled(a.map(({filename:a,stat:c})=>Q(a,Number(c.size),b,c)));if(b?.aborted||c.some(a=>"rejected"===a.status))throw Error();for(let[b,e]of c.entries()){if("fulfilled"!==e.status)throw Error();let{filename:c,stat:f}=a[b];if(e.value.size!==Number(f.size))throw Error();i.update(JSON.stringify(["file",g().relative(d,c).split(g().sep).join("/"),String(f.mode),e.value.digest]))}};for(let f of h){if(b?.aborted)throw Error();let h=g().join(a,f),o=await e().promises.lstat(h,{bigint:!0});if(o.isSymbolicLink()){await n();let a=c.find(a=>w(a.link)===w(h));if(!a||w(await e().promises.realpath(h))!==w(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(d,h).split(g().sep).join("/"),w(a.target)]));continue}if(o.isDirectory()&&!o.isSymbolicLink()){await n(),await m(h);continue}if(++k>16384||!o.isFile()||o.isSymbolicLink()||o.nlink!==BigInt(1)||o.size<BigInt(0)||o.size>BigInt(0x10000000-l))throw Error();l+=Number(o.size),j.push({filename:h,stat:o}),8===j.length&&await n()}if(await n(),await P(a),!y(f,await e().promises.lstat(a,{bigint:!0})))throw Error()};return await m(d),i.digest("hex")}async function S(a,b){let d=structuredClone(a),e=await O(d,b),f="inspection";try{let a=async()=>{let a=e.policy.bundledInstallation;if(!a)return;let{inspectShippedWorkspaceProvenance:b}=await c.e(34679).then(c.bind(c,34679));return b((0,j.getWorkspaceDataDir)(),a.packageDirectory,a.installationRoot)},g=await Promise.allSettled([Q(d.command,0x20000000,b),R(e.policy.sourceRoot,b,e.policy.bundledInstallation?.dependencyLinks),a()]);if("rejected"===g[0].status)throw f="executable-read",g[0].reason;if("rejected"===g[1].status)throw f="source-read",g[1].reason;if("rejected"===g[2].status)throw f="provenance-read",g[2].reason;let h=(a,b)=>{if(f=b,!a)throw Error()},i=g[0].value,k=g[1].value;if(e.policy.bundledInstallation){let a=e.policy.bundledInstallation,c=g[2].value;if(f="provenance-result",!c)throw Error();h(!b?.aborted,"signal"),h(c.assetDigest===a.assetDigest,"asset-digest"),h(w(c.dependencyNamespaceRoot)===w(a.dependencyNamespaceRoot),"namespace"),h(c.dependencyGraph.digest===a.dependencyGraphDigest,"graph-digest"),h(JSON.stringify(c.dependencyLinks)===JSON.stringify(a.dependencyLinks),"links"),h(JSON.stringify(c.dependencies.map(a=>a.directory))===JSON.stringify(a.dependencyDirectories),"directories")}if(h(i.digest===e.policy.executableDigest,"executable-digest"),h(k===e.policy.sourceDigest,"source-digest"),e.policy.packageRunner){let a=e.policy.packageRunner;(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,{...s(d),inspectClosure:!1});let c=await Q(a.shell,0x20000000,b);h(c.digest===a.shellDigest,"executable-digest"),(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,s(d))}}catch{try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[trusted-host-source]","refused",b?.aborted?"signal-aborted":"revision-or-read",f)}catch{}throw new v(b?.aborted?"HOST_CONSENT_REQUIRED":"HOST_SOURCE_CHANGED")}if(b?.aborted)throw new v("HOST_CONSENT_REQUIRED");let g=await O(d,b);if(g.ownerId!==e.ownerId||g.digest!==e.digest||g.workspace!==e.workspace)throw new v("HOST_CONSENT_REQUIRED");return g}},555271:(a,b,c)=>{c.d(b,{Zg:()=>e});var d,e=((d={}).MODELS="models",d.AVATAR_WORLD="avatar_world",d.FLOWS="flows",d.TICKETS="tickets",d.CHAT_HISTORY="history",d.THEME="theme",d.THEME_STYLE="theme_style",d.LIVING_WORLD_ENABLED="living_world_enabled",d.ENCRYPTION_KEY="encryption_key",d.MCP_SERVERS="mcp_servers",d.GLOBAL_ENV_VARS="global_env_vars",d.CURRENT_CONVERSATION_ID="current_conversation_id",d.SELECTED_FLOW_ID="selected_flow_id",d.LAST_PICKED_FLOW_ID="last_picked_flow_id",d.SPEECH_SETTINGS="speech_settings",d.SPOTLIGHT_SERVERS="spotlight_servers",d.PLANNED_EXECUTIONS="planned_executions",d.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",d.MCP_QUALITY_SETTINGS="mcp_quality_settings",d.MCP_APP_CONSENT="mcp_app_consent",d.RUN_RESOURCE_SETTINGS="run_resource_settings",d.MEMORY_SETTINGS="memory_settings",d.SUBFLOW_TASK_SETTINGS="subflow_task_settings",d.MCP_REMOTE_TASK_SETTINGS="mcp_remote_task_settings",d.KV_STORE_SETTINGS="kv_store_settings",d.PENDING_APPROVALS="pending_approvals",d.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",d.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",d.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",d.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",d.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",d.MCP_SHIPPED_SERVER_ROOTS_MIGRATION_V5="mcp_shipped_server_roots_migration_v5",d.MCP_SHIPPED_BROWSER_REPAIR_MIGRATION_V6="mcp_shipped_browser_repair_migration_v6",d.MCP_SHIPPED_FLUJO_REPAIR_MIGRATION_V7="mcp_shipped_flujo_repair_migration_v7",d.MCP_SHIPPED_BASH_REPAIR_MIGRATION_V8="mcp_shipped_bash_repair_migration_v8",d.PACKAGE_INSTALLS="package_installs",d.EXPERIMENTAL_SETTINGS="experimental_settings",d.REGISTRY_ACCOUNT="registry_account",d.REGISTRY_SETTINGS="registry_settings",d.TELEMETRY_STATE="telemetry_state",d.SNAPSHOT_RETENTION_POLICY="snapshot_retention_policy",d.MEMORY_EMBEDDINGS="memory_embeddings",d)},595391:(a,b,c)=>{c.d(b,{V$:()=>m,sA:()=>l});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598);function h(a,b,c=!1){let d=f().relative(f().resolve(a),f().resolve(b));return""===d?c:!d.startsWith("..")&&!f().isAbsolute(d)}async function i(a){try{return await d.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}function j(a,b){if(!a||a.isSymbolicLink()||!a.isDirectory())throw Error(`${b} must be a real directory, not a symbolic link or junction.`)}async function k(a,b,c){let e=f().resolve(a),g=f().resolve(b);if(j(await i(e),"Workspace restore boundary"),!h(e,g,!0))throw Error(`Restore directory escapes workspace boundary: ${g}`);let k=f().relative(e,g),l=e;for(let a of k?k.split(f().sep):[]){l=f().join(l,a);let b=await i(l);if(!b&&c){try{await d.promises.mkdir(l)}catch(a){if("EEXIST"!==a.code)throw a}b=await i(l)}j(b,`Restore path component ${l}`)}if(!h(await d.promises.realpath(e),await d.promises.realpath(g),!0))throw Error(`Restore directory resolves outside workspace boundary: ${g}`)}async function l(a,b,c,e={}){let h,j=e.assertOwned;await j?.();let m=f().dirname(b);await k(a,m,!0),await j?.();let n=await i(b);if(n?.isSymbolicLink())throw Error(`Refusing to replace symbolic link or junction: ${b}`);if(n&&!n.isFile())throw Error(`Refusing to replace non-file restore target: ${b}`);let o=f().join(m,`.flujo-restore-${(0,g.randomUUID)()}.tmp`),p=!1;try{let f=384|(e.mode??0)&64;await j?.();let g=await d.promises.open(o,d.constants.O_WRONLY|d.constants.O_CREAT|d.constants.O_EXCL,f);p=!0;try{h=await g.stat({bigint:!0}),await j?.(),await g.writeFile(c),await j?.(),await g.sync(),await j?.(),h=await g.stat({bigint:!0})}finally{await g.close()}for(let c=0;;c++){var q;await k(a,m,!1);let e=await d.promises.lstat(o,{bigint:!0});if(!h||e.isSymbolicLink()||!e.isFile()||(q=h,q.dev!==e.dev||q.ino!==e.ino||q.size!==e.size||q.mtimeNs!==e.mtimeNs||q.ctimeNs!==e.ctimeNs||q.mode!==e.mode||q.uid!==e.uid||q.gid!==e.gid||q.nlink!==e.nlink))throw Error("Restore temporary file changed before publication.");let f=await i(b);if(f?.isSymbolicLink()||f&&!f.isFile())throw Error(`Restore target became unsafe: ${b}`);await j?.();try{await d.promises.rename(o,b);break}catch(a){if(c>=14||!["EPERM","EBUSY","EACCES"].includes(a.code??""))throw a;await new Promise(a=>setTimeout(a,Math.min(100,5*2**c)))}}p=!1,await j?.()}finally{if(p)try{let a=await d.promises.lstat(o,{bigint:!0});h&&a.isFile()&&!a.isSymbolicLink()&&a.dev===h.dev&&a.ino===h.ino&&await d.promises.unlink(o)}catch{}}}async function m(a,b){await k(a,f().dirname(b),!1)}c(504573)},711873:(a,b,c)=>{c.d(b,{HK:()=>t,P1:()=>s,kU:()=>n,nT:()=>q});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(731612),i=c(977598);let j=process.getBuiltinModule("node:module"),{createRequire:k}=j,l=h.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0")),m=h.string().max(256).regex(/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/),n=h.object({packageName:h.string().max(214).regex(/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/),packageVersion:m,npmVersion:m,packageDirectory:l,binaryName:h.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/),shell:l,shellDigest:h.string().regex(/^[a-f0-9]{64}$/)}).strict();function o(a,b){let c=g().relative(a,b);return!!c&&".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}function p(a,b){return"win32"===process.platform?g().resolve(a).toLowerCase()===g().resolve(b).toLowerCase():g().resolve(a)===g().resolve(b)}function q(a){let{sourceRoot:b,entryPoint:c,command:d,cwd:e,args:f,runner:h,environment:i}=a;if(!o(b,h.packageDirectory)||!o(b,h.shell)||!o(b,c)||"npx-cli.js"!==g().basename(c)||"bin"!==g().basename(g().dirname(c))||o(b,e)||p(b,e)||!/^node(?:\.exe)?$/i.test(g().basename(d))||"-y"!==f[0]||f[1]!==`${h.packageName}@${h.packageVersion}`)throw Error("Invalid package runner declaration");for(let[a]of i)if(/^npm_config_/i.test(a)&&"NPM_CONFIG_CACHE"!==a.toUpperCase())throw Error("Ambient npm configuration is forbidden");let j=a=>[...i].find(([b])=>b.toUpperCase()===a)?.[1];if(!j("NPM_CONFIG_CACHE")||!g().isAbsolute(j("NPM_CONFIG_CACHE")))throw Error("Declare the package runner cache");if("win32"===process.platform&&(j("COMSPEC")!==h.shell||".COM;.EXE;.BAT;.CMD"!==j("PATHEXT")))throw Error("Declare the reviewed Windows shell and extensions");let k=[g().join(h.packageDirectory,"node_modules",".bin"),g().dirname(d)].join(g().delimiter);if(j("PATH")!==k)throw Error("Declare only the reviewed package and Node binary paths")}function r(a){let b,c=()=>{for(let b=g().resolve(a);;b=g().dirname(b)){if(e().lstatSync(b).isSymbolicLink())throw Error("Linked package manifest path");if(g().dirname(b)===b)break}if(!p(e().realpathSync(a),a))throw Error("Retargeted package manifest")};c();let d=e().openSync(a,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let f=e().fstatSync(d,{bigint:!0});if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(1048576))throw Error("Invalid package manifest");b=Buffer.alloc(Number(f.size)+1);let g=0;for(;g<b.length;){let a=e().readSync(d,b,g,b.length-g,null);if(!a)break;g+=a}if(BigInt(g)!==f.size)throw Error("Manifest changed while reading");let h=e().fstatSync(d,{bigint:!0}),i=e().lstatSync(a,{bigint:!0});if(c(),i.isSymbolicLink()||!i.isFile()||!["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(a=>f[a]===h[a]&&f[a]===i[a]))throw Error("Manifest changed");let j=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(b.subarray(0,g)));if(!j||"object"!=typeof j||Array.isArray(j))throw Error("Invalid package manifest");return j}finally{b?.fill(0),e().closeSync(d)}}function s(a,b,c,d,f){for(let a=g().resolve(c);;a=g().dirname(a)){if(e().lstatSync(a).isSymbolicLink()||!p(e().realpathSync(a),a))throw Error("Unsafe package runner working directory");for(let b of[g().join(a,"node_modules",".bin")]){try{e().lstatSync(b)}catch(a){if("ENOENT"===a.code)continue;throw a}throw Error("Unreviewed npm ancestor resolution candidate")}if(g().dirname(a)===a)break}let h=r(g().join(g().dirname(g().dirname(b)),"package.json"));if("npm"!==h.name||h.version!==d.npmVersion)throw Error("npm revision changed");let l=g().join(d.packageDirectory,".npmrc");try{let a=e().lstatSync(l);if(!a.isFile()||a.isSymbolicLink()||1!==a.nlink||0!==a.size)throw Error("Unreviewed project npm configuration")}catch(a){if("ENOENT"!==a.code)throw a}for(let b of["runner-user.npmrc","runner-global.npmrc"]){let c=g().join(a,b),d=e().lstatSync(c);if(!d.isFile()||d.isSymbolicLink()||1!==d.nlink||0!==d.size)throw Error("npm control file changed")}let n=g().join(d.packageDirectory,"node_modules",...d.packageName.split("/")),q=r(g().join(d.packageDirectory,"package.json"));if(void 0!==q.bin||void 0!==q.workspaces)throw Error("Installation project may not redirect npm binary selection");let s=r(g().join(n,"package.json"));if(s.name!==d.packageName||s.version!==d.packageVersion)throw Error("Package revision changed");let t=s.bin,u="string"==typeof t&&d.binaryName===d.packageName.split("/").at(-1)?t:t&&"object"==typeof t&&!Array.isArray(t)?t[d.binaryName]:void 0;if("string"!=typeof u||!o(n,g().resolve(n,u)))throw Error("Package binary changed");let v="string"==typeof t?{[d.packageName.split("/").at(-1)]:t}:t;if((1===new Set(Object.values(v)).size?Object.keys(v)[0]:v[d.packageName.split("/").at(-1)]?d.packageName.split("/").at(-1):void 0)!==d.binaryName)throw Error("npm binary selection differs from the reviewed binary");let w=g().join(d.packageDirectory,"node_modules",".bin",d.binaryName+("win32"===process.platform?".cmd":""));if(!e().lstatSync(w).isFile()||e().lstatSync(w).isSymbolicLink())throw Error("Materialize the reviewed package binary shim");return f?.inspectClosure===!1?void 0:function(a,b,c){let d=new Map,f=new Set,h=[],l=0,n=a=>{let b=d.get(a);if(!b){if(d.size>=1024)throw Error("Package graph exceeds inspection bounds");if("string"!=typeof(b=r(g().join(a,"package.json"))).name||b.name.length>214||!m.safeParse(b.version).success)throw Error("Package graph revision unavailable");d.set(a,b)}return b},p=a=>{try{return e().lstatSync(a),!0}catch(a){if("ENOENT"===a.code)return!1;throw a}},q=b=>{if(f.has(b))return;f.add(b);let d=n(b),e={directory:g().relative(a,b).split(g().sep).join("/"),name:d.name,version:d.version,dependencies:[]};h.push(e);let i=new Map;for(let a of["dependencies","peerDependencies","optionalDependencies"]){let b=d[a];if(void 0!==b){if(!b||"object"!=typeof b||Array.isArray(b)||Object.keys(b).length>256)throw Error("Invalid package dependencies");for(let[c,e]of Object.entries(b)){if(++l>8192||!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(c)||c.length>214||"string"!=typeof e||e.length>2048)throw Error("Invalid package dependency declaration");let b=d.peerDependenciesMeta,f="peerDependencies"===a&&b&&"object"==typeof b&&b[c]?.optional===!0,g=e.startsWith("npm:")?/^npm:((?:@[^/]+\/)?[^@]+)(?:@.*)?$/.exec(e)?.[1]:void 0;if(e.startsWith("npm:")&&!g)throw Error("Invalid package alias");i.set(c,{optional:"optionalDependencies"===a||!!f,target:g??c})}}}let m=function(a,b){let c=Reflect.get(j,"globalPaths");if(!Array.isArray(c)||c.some(a=>"string"!=typeof a))throw Error("Native module search roots unavailable");let d=new Set(c.map(a=>g().resolve(a))),e=(k(a).resolve.paths("flujo-owned-dependency-inspection")??[]).filter(a=>!d.has(g().resolve(a)));if(b){let a="win32"===process.platform?g().dirname(b.command):g().dirname(g().dirname(b.command));e.push(g().join(a,"lib","node"),...b.home?[g().join(b.home,".node_modules"),g().join(b.home,".node_libraries")]:[])}return[...new Set(e)]}(g().join(b,"package.json"),c);for(let[b,c]of i){let d;for(let c of m){let e=g().join(c,...b.split("/"));if(!o(a,c)){if(["",".js",".json",".node"].some(a=>p(e+a)))throw Error("Ambient Node dependency candidate");continue}if([".js",".json",".node"].some(a=>p(e+a)))throw Error("Package dependency redirected to an unreviewed file");if(p(e)){d=e;break}}if(!d){if(!c.optional)throw Error(`Materialized runtime dependency missing: ${b}`);e.dependencies.push({name:b,...c,directory:null});continue}if(n(d).name!==c.target)throw Error("Package dependency identity differs from its declaration");e.dependencies.push({name:b,...c,directory:g().relative(a,d).split(g().sep).join("/")}),q(d)}};for(let a of b)q(a);for(let a of(h.sort((a,b)=>a.directory<b.directory?-1:+(a.directory>b.directory)),h))a.dependencies.sort((a,b)=>a.name<b.name?-1:+(a.name>b.name));return{inventory:h,digest:(0,i.createHash)("sha256").update("flujo:mcp:local-npx-dependencies:v1\0").update(JSON.stringify(h)).digest("hex")}}(a,[g().dirname(g().dirname(b)),d.packageDirectory],f)}function t(a,b,c,d,e){return[c,`--prefix=${b.packageDirectory}`,"--offline","--ignore-scripts","--no-update-notifier","--no-audit","--no-fund","--workspaces=false",`--userconfig=${g().join(a,"runner-user.npmrc")}`,`--globalconfig=${g().join(a,"runner-global.npmrc")}`,`--script-shell=${b.shell}`,`--cache=${e}`,...d]}},749527:(a,b,c)=>{c.d(b,{dw:()=>n,re:()=>e});var d=c(178877);class e extends Error{constructor(a,b){super(429===b?"Conversation history reads are busy. Retry shortly.":"Insufficient memory to safely load complete conversation history. Retry after active work finishes."),this.code=a,this.status=b,this.name="ConversationLogReadPressureError"}}let f=globalThis,g=f.__flujoConversationLogReadAdmission??={active:0,bytes:0},h=g.waiters??=[],i=new WeakMap;function j(a){let b=6*a+131072;if(!Number.isSafeInteger(b)||a<0)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}function k(a){let b=(0,d.getHeapStatistics)();return g.bytes+a<=b.heap_size_limit-b.used_heap_size-0x4000000}function l(){for(let a of h.splice(0))a()}async function m(a){let b=Date.now()+3e4;for(;;){let c=g.active<4;if(c&&k(a))return;if(c&&0===g.active)throw new e("CONVERSATION_LOG_READ_MEMORY",503);let d=b-Date.now();if(d<=0)throw c?new e("CONVERSATION_LOG_READ_MEMORY",503):new e("CONVERSATION_LOG_READ_BUSY",429);await new Promise(a=>{let b=setTimeout(a,Math.min(d,1e3));h.push(()=>{clearTimeout(b),a()})})}}async function n(a,b,c){if(void 0!==c){let d=c&&i.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let f=j(a);if(!k(f))throw new e("CONVERSATION_LOG_READ_MEMORY",503);g.bytes+=f;let h=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=f,l()});return d.pending.add(h),h.then(()=>d.pending.delete(h),()=>d.pending.delete(h)),h}let d=j(a);await m(d);let f=Object.freeze({}),h={open:!0,pending:new Set};i.set(f,h),g.active++,g.bytes+=d;try{return await b(f)}finally{h.open=!1,await Promise.allSettled([...h.pending]),i.delete(f),g.active--,g.bytes-=d,l()}}},808552:(a,b,c)=>{c.d(b,{H6:()=>y,MI:()=>s,Sc:()=>u});var d=c(973024),e=c(176760),f=c.n(e),g=c(446193),h=c(16698),i=c(977598),j=c(189663),k=c(492093),l=c(34762),m=c(76528);let n=globalThis,o=n.__flujoPublicationIntentContextV1??=new h.AsyncLocalStorage,p=n.__flujoPublicationIntentProcessV1??={token:(0,i.randomUUID)(),startedAt:Date.now()-Math.round(1e3*process.uptime()),live:new Set};async function q(a){let b,c;if(p.live.has(a))return;try{b=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0))}catch(a){return"ENOENT"===a.code?"gone":void 0}let e={};try{c=await b.stat({bigint:!0});try{e=JSON.parse(await b.readFile("utf8"))??{}}catch{}}catch{return}finally{await b.close().catch(()=>void 0)}if(!c.isFile())return;if(e.process===p.token)return c;let f="number"==typeof e.startedAt?e.startedAt:Number(c.mtimeMs);return Date.now()-f>6e5?c:"number"==typeof e.pid?e.pid!==process.pid&&function(a){try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}}(e.pid)?void 0:c:f<p.startedAt?c:void 0}async function r(a,b){try{let c=await d.promises.lstat(a,{bigint:!0});w(c,b)&&await d.promises.unlink(a)}catch{}}async function s(a,b){let c,e=f().join((0,j.getWorkspaceDataDir)(),"db","conversation-publications",`${a}.json`),g=o.getStore();if(g?.live&&g.filename===e)return b();await x(),await u(()=>d.promises.mkdir(f().dirname(e),{recursive:!0}));let h=await u(()=>d.promises.lstat(f().dirname(e),{bigint:!0}));if(!h.isDirectory()||h.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","publication intent directory is unsafe");let i=Date.now()+15e3;for(let a=0;!c;a++)try{c=await d.promises.open(e,"wx",384)}catch(c){if("EEXIST"!==c.code)throw new m.MO("CONVERSATION_PUBLICATION_IO","could not create a publication intent",{cause:c});let b=a<3?await q(e):void 0;if(b){"gone"!==b&&await r(e,b);continue}if(Date.now()>=i)throw new m.MO("CONVERSATION_PUBLICATION_BUSY","another FLUJO process is still writing this conversation");await new Promise(b=>setTimeout(b,Math.min(1e3,50*2**a)))}p.live.add(e);try{return await t(c,e,h,a,b)}finally{p.live.delete(e)}}async function t(a,b,c,e,g){let h,j;try{h=await a.stat({bigint:!0}),await a.writeFile(JSON.stringify({version:2,conversationId:e,token:(0,i.randomUUID)(),startedAt:Date.now(),pid:process.pid,process:p.token}))}catch(c){try{await a.close()}catch{(0,m.B_)("intent descriptor closure is uncertain",void 0,!0,{intent:b})}throw(0,m.B_)("publication intent did not finish",c,!1,{intent:b})}try{await a.close()}catch(a){throw(0,m.B_)("intent descriptor closure is uncertain",a,!0,{intent:b})}let k={filename:b,live:!0};try{return await o.run(k,g)}catch(a){throw j=a}finally{try{await (0,m.l7)()}catch(a){void 0===j&&(j=a)}if(k.live=!1,!(0,m.by)())try{await x();let a=await d.promises.lstat(b,{bigint:!0}),e=await d.promises.lstat(f().dirname(b),{bigint:!0});if(!h||!v(a,h)||!e.isDirectory()||e.isSymbolicLink()||e.dev!==c.dev||e.ino!==c.ino)throw Error("Publication intent identity changed");await d.promises.unlink(b)}catch{}if(void 0!==j)throw j}}async function u(a){try{return await a()}catch(a){if((0,m.sE)(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name)throw a;throw new m.MO("CONVERSATION_PUBLICATION_IO","required durable publication failed",{cause:a})}}let v=(a,b)=>a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===b.dev&&a.ino===b.ino,w=(a,b)=>v(a,b)&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs;async function x(){await (0,k.qy)(),await (0,l.QO)()}async function y(a,b){await x();let c=f().dirname(a);await u(()=>d.promises.mkdir(c,{recursive:!0}));let e=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!e.isDirectory()||e.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log directory is unsafe");let g=await u(()=>d.promises.open(a,d.constants.O_RDWR|d.constants.O_CREAT|(d.constants.O_NOFOLLOW??0),384)),h={filename:a};try{let f=await u(()=>g.stat({bigint:!0}));if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(Number.MAX_SAFE_INTEGER))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log is not a regular owned file");let i=f,j=Number(f.size);h={filename:a,dev:String(f.dev),ino:String(f.ino),start:String(f.size)};let k=async()=>{let b=await u(()=>d.promises.lstat(a,{bigint:!0})),f=await u(()=>g.stat({bigint:!0})),j=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!w(f,i)||!w(b,i)||!j.isDirectory()||j.isSymbolicLink()||j.dev!==e.dev||j.ino!==e.ino)throw(0,m.B_)("conversation log identity or appended suffix changed",void 0,!1,h);await x()};await k();let l=!1;if(j>0){let a=Buffer.alloc(1),{bytesRead:b}=await u(()=>g.read(a,0,1,j-1));l=1===b&&10!==a[0]}let n=l,o=async a=>{let b=0;for(;b<a.length;){let c=await g.write(a,b,a.length-b,j);if(!c.bytesWritten)throw Error("Conversation log made no write progress");b+=c.bytesWritten,j+=c.bytesWritten}},p=async a=>{try{let b=await g.stat({bigint:!0});if(!v(b,f)||b.size<BigInt(a))return!1;return b.size!==BigInt(a)&&(await g.truncate(a),await g.sync()),i=await g.stat({bigint:!0}),j=a,i.size===BigInt(a)}catch{return!1}};return await b({activeMessageIds:()=>u(()=>z(g,Number(f.size))),append:async a=>{await k();let b=j;try{for(let b of(l&&await o(Buffer.from("\n")),(0,m.gm)(a,!0)))await o(b);if(await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==BigInt(j))throw(0,m.B_)("conversation append completion has no owned suffix witness",void 0,!1,h);await k(),l=!1}catch(a){if(await p(b))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation append did not finish and was rolled back",{cause:a});throw(0,m.B_)("conversation append outcome requires reconciliation",a,!1,{...h,acknowledgedEnd:String(j)})}},rollback:async()=>{await k();try{if(await g.truncate(Number(f.size)),await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==f.size)throw Error("Rollback size changed");j=Number(f.size),l=n,await k()}catch(a){throw(0,m.B_)("conversation rollback requires reconciliation",a,!1,h)}}})}finally{try{await g.close()}catch{}}}async function z(a,b){(0,m.Ev)(0x2000000);let c=Buffer.alloc(65536),d=new g.StringDecoder("utf8"),e=new Set,f=new Map,h=[],i="",j=0,k="",l=!1,n=!1,o=!1,p=0,q=!1,r=!1,s=0,t=0,u=0,v=0,w=()=>{throw new m.MO("CONVERSATION_PUBLICATION_MEMORY","transcript metadata exceeds its bounded rewrite policy")},x=()=>{h=[],i="",j=0,u=0,v=0},y=a=>{j+a.length>1048576&&w(),j+=a.length;for(let b=0;b<a.length;){let c=Math.min(4096-i.length,a.length-b);i+=a.slice(b,b+c),b+=c,4096===i.length&&(h.push(Buffer.from(i,"utf16le").toString("utf16le")),i="")}},z=()=>{let a;if(r){r=!1,x();return}i&&h.push(i);let b=h.join("");if(x(),b.trim()){try{a=JSON.parse(b)}catch{return}if(a?.type==="message"&&a.message&&"system"!==a.message.role){let b=a.message.id;if(null===b&&w(),"string"!=typeof b||!b)return;b.length>4096&&w();let c=b;if(e.has(c)&&/^stream_codex_item_/.test(c)){let a=(f.get(c)??1)+1;f.set(c,a),c=`${c}_legacy_${a}`}else f.has(c)||((t+=c.length)>1048576&&w(),f.set(c,1));e.has(c)||(e.add(c),p+=c.length),(e.size>65536||f.size>65536||p>1048576)&&w()}else a?.type==="message:removed"&&(null===a.messageId&&w(),"string"==typeof a.messageId&&e.delete(a.messageId)&&(p-=a.messageId.length))}},A=a=>{for(let b=0;b<a.length;b++){let c=a[b];if(q){if(" "===c||" "===c||"\r"===c)continue;y(":"===c?'""':"null"),q=!1}if("\n"===c){l?(x(),r=!1):z(),l=!1,n=!1,k="",o=!1,s=0;continue}if(!l){"{"===c||"["===c?++u>128&&w():("}"===c||"]"===c)&&u--,'{[,"'.includes(c)&&++v>262144&&w(),'"'===c?(l=!0,k='"',o=!1):y(c);continue}!o&&(k+=c).length>24578&&(o=!0,k=""),s?(/[0-9a-f]/i.test(c)||(r=!0),s--):n?(n=!1,"u"===c?s=4:'"\\/bfnrt'.includes(c)||(r=!0)):"\\"===c?n=!0:'"'===c?(l=!1,o?q=!0:y(k),k=""):32>c.charCodeAt(0)&&(r=!0)}};for(let e=0;e<b;){let{bytesRead:f}=await a.read(c,0,Math.min(c.length,b-e),e);if(!f)throw Error("Conversation log changed while reading rewrite metadata");e+=f,A(d.write(c.subarray(0,f)))}return A(d.end()),q&&y("null"),l||z(),[...e]}},820100:(a,b,c)=>{c.d(b,{T8:()=>l,uj:()=>k});var d=c(973024),e=c(977598),f=c(176760),g=c.n(f),h=c(482432);function i(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function j(a){if(!a.isFile()||a.isSymbolicLink()||a.nlink!==BigInt(1)||a.size>BigInt(65536)||"win32"!==process.platform&&((a.mode&BigInt(63))!==BigInt(0)||a.uid!==BigInt(process.getuid?.()??-1)))throw Error("Invalid owner policy file")}function k(a){if(!g().isAbsolute(a))throw Error("Invalid owner policy path");let b=g().resolve(a),c=(0,d.lstatSync)(b,{bigint:!0});j(c);let e=(0,d.realpathSync)(b);if(""!==g().relative(e,b))throw Error("Invalid owner policy path");let f=(0,d.openSync)(b,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let a=(0,d.fstatSync)(f,{bigint:!0});if(j(a),!i(c,a))throw Error("Owner policy changed");let k=Buffer.alloc(65537),l=0;for(;l<k.length;){let a=(0,d.readSync)(f,k,l,k.length-l,null);if(0===a)break;l+=a}let m=(0,d.lstatSync)(b,{bigint:!0});if(l>65536||BigInt(l)!==a.size||!i(a,(0,d.fstatSync)(f,{bigint:!0}))||!i(a,m)||m.isSymbolicLink()||""!==g().relative(e,(0,d.realpathSync)(b)))throw Error("Owner policy changed");return h.rF.parse(JSON.parse(k.subarray(0,l).toString("utf8")))}finally{(0,d.closeSync)(f)}}function l(a){return(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex")}},884122:(a,b,c)=>{c.d(b,{At:()=>g,Hd:()=>f,MO:()=>d,sE:()=>e});class d extends Error{constructor(a,b,c){super(`Conversation publication refused: ${b}. Existing durable history is retained.`,c),this.code=a,this.name="ConversationPublicationError",this.status="CONVERSATION_PUBLICATION_BUSY"===a?429:503,this.details={code:a,status:this.status,type:"conversation_publication_error"}}}function e(a){return a instanceof Error&&"ConversationPublicationError"===a.name}function f(a){return e(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name}function g(a){return"string"==typeof a&&(a.startsWith("CONVERSATION_PUBLICATION_")||a.startsWith("CONVERSATION_SEQUENCE_"))}},901984:(a,b,c)=>{c.d(b,{ok:()=>f});var d=c(333873),e=c.n(d);function f(){let a=process.env.FLUJO_PARENT_DATA_DIR;if(a&&a.trim().length>0)return e().resolve(a);let b=process.env.FLUJO_DATA_DIR;return b&&b.trim().length>0?e().resolve(b):process.cwd()}},950902:(a,b,c)=>{c.d(b,{Cg:()=>g,IP:()=>f});var d=c(300643);let e=["CONFIG","ASSETS","DEP_LAYOUT","DEP_GRAPH","DEP_LINKS","SOURCE_FINGERPRINT","EXEC_FINGERPRINT","CONSENT_DIGEST","CONSENT_POLICY_SCHEMA","CONSENT_LAUNCH","CONSENT_BUNDLE","CONSENT_ENVIRONMENT","CONSENT_CAPABILITIES","CONSENT_SERIALIZE","CONSENT_SCRYPT","APPROVAL_INITIALIZE","APPROVAL_SEED_PARENT","APPROVAL_SEED_OWNER","APPROVAL_SEED_IDENTITY","APPROVAL_SEED_AUTHORITY","APPROVAL_LOCK","APPROVAL_REQUEST","APPROVAL_PROPOSAL","APPROVAL_AUTHORITY","APPROVAL_STAGE","APPROVAL_RECHECK","APPROVAL_CONFIG","APPROVAL_SAVE","APPROVAL_PUBLICATION","APPROVAL_DISPOSE"];class f extends Error{constructor(a,b){super("Bundled consent preview refused.",{cause:b}),this.stage=a}}async function g(a,b){let c=function(a){try{if("1"!==process.env.FLUJO_BUNDLED_CONSENT_TRACE||!e.includes(a))return;let b=d.performance.now();return Number.isFinite(b)?b:void 0}catch{return}}(a);try{return await b()}catch(b){if(b instanceof f)throw b;throw new f(a,b)}finally{!function(a,b){if(void 0!==b)try{let c=d.performance.now()-b;if(!Number.isFinite(c))return;console.info(JSON.stringify({bundledConsentStage:a,elapsedMs:Math.max(0,c)}))}catch{}}(a,c)}}},959933:(a,b,c)=>{function d(){return"1"===process.env.FLUJO_WORKER_MODE}function e(){return d()?global.__flujo_worker_bootstrap_status??{mode:"worker",state:"not-started"}:{mode:"local",state:"not-started"}}c.d(b,{dT:()=>e,ye:()=>d})}};