flujo-ai 3.47.0 → 3.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +54 -54
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/react-loadable-manifest.json +2 -2
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  12. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  13. package/.next/server/app/api/approvals/route.js +1 -1
  14. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  15. package/.next/server/app/api/automation-map/route.js +1 -1
  16. package/.next/server/app/api/automation-map/route.js.nft.json +1 -1
  17. package/.next/server/app/api/avatar/[voiceAction]/route.js +1 -1
  18. package/.next/server/app/api/avatar/[voiceAction]/route.js.nft.json +1 -1
  19. package/.next/server/app/api/avatar/connections/route.js +1 -1
  20. package/.next/server/app/api/avatar/connections/route.js.nft.json +1 -1
  21. package/.next/server/app/api/avatar/local-speech/route.js +1 -1
  22. package/.next/server/app/api/avatar/local-speech/route.js.nft.json +1 -1
  23. package/.next/server/app/api/avatar/remote/[voiceAction]/route.js +1 -1
  24. package/.next/server/app/api/avatar/remote/[voiceAction]/route.js.nft.json +1 -1
  25. package/.next/server/app/api/avatar/remote/availability/route.js +1 -1
  26. package/.next/server/app/api/avatar/remote/availability/route.js.nft.json +1 -1
  27. package/.next/server/app/api/avatar/voice/route.js +1 -1
  28. package/.next/server/app/api/avatar/voice/route.js.nft.json +1 -1
  29. package/.next/server/app/api/avatar/work-model/route.js +1 -1
  30. package/.next/server/app/api/avatar/work-model/route.js.nft.json +1 -1
  31. package/.next/server/app/api/avatar/world/route.js +1 -1
  32. package/.next/server/app/api/avatar/world/route.js.nft.json +1 -1
  33. package/.next/server/app/api/backup/route.js +1 -1
  34. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  35. package/.next/server/app/api/browse/route.js +1 -1
  36. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  37. package/.next/server/app/api/bugs/enhance/route.js +1 -1
  38. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  39. package/.next/server/app/api/credential-migration/route.js +1 -1
  40. package/.next/server/app/api/credential-migration/route.js.nft.json +1 -1
  41. package/.next/server/app/api/credential-transfer/restore/route.js +1 -1
  42. package/.next/server/app/api/credential-transfer/restore/route.js.nft.json +1 -1
  43. package/.next/server/app/api/credential-transfer/route.js +1 -1
  44. package/.next/server/app/api/credential-transfer/route.js.nft.json +1 -1
  45. package/.next/server/app/api/cwd/route.js +1 -1
  46. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  47. package/.next/server/app/api/encryption/secure/route.js +1 -1
  48. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  49. package/.next/server/app/api/env/route.js +1 -1
  50. package/.next/server/app/api/env/route.js.nft.json +1 -1
  51. package/.next/server/app/api/factory-observatory/route.js +1 -1
  52. package/.next/server/app/api/factory-observatory/route.js.nft.json +1 -1
  53. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js +1 -1
  54. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/[id]/route.js +1 -1
  56. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  58. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  59. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  60. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/assist/route.js +1 -1
  62. package/.next/server/app/api/flow/assist/route.js.nft.json +1 -1
  63. package/.next/server/app/api/flow/compile/route.js +1 -1
  64. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  65. package/.next/server/app/api/flow/generate/route.js +1 -1
  66. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/generate/visual/route.js +1 -1
  68. package/.next/server/app/api/flow/generate/visual/route.js.nft.json +1 -1
  69. package/.next/server/app/api/flow/generator/route.js +1 -1
  70. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  71. package/.next/server/app/api/flow/improve/route.js +1 -1
  72. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  73. package/.next/server/app/api/flow/model-agent/route.js +1 -1
  74. package/.next/server/app/api/flow/model-agent/route.js.nft.json +1 -1
  75. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  76. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  77. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  78. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  79. package/.next/server/app/api/flow/repair/route.js +1 -1
  80. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  81. package/.next/server/app/api/flow/route.js +1 -1
  82. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  83. package/.next/server/app/api/git/route.js +1 -1
  84. package/.next/server/app/api/git/route.js.nft.json +1 -1
  85. package/.next/server/app/api/harness/[id]/route.js +1 -1
  86. package/.next/server/app/api/harness/[id]/route.js.nft.json +1 -1
  87. package/.next/server/app/api/harness/profiles/route.js +1 -1
  88. package/.next/server/app/api/harness/profiles/route.js.nft.json +1 -1
  89. package/.next/server/app/api/harness/route.js +1 -1
  90. package/.next/server/app/api/harness/route.js.nft.json +1 -1
  91. package/.next/server/app/api/init/route.js +1 -1
  92. package/.next/server/app/api/init/route.js.nft.json +1 -1
  93. package/.next/server/app/api/local-models/capability/route.js +1 -1
  94. package/.next/server/app/api/local-models/capability/route.js.nft.json +1 -1
  95. package/.next/server/app/api/local-models/pull/route.js +1 -1
  96. package/.next/server/app/api/local-models/pull/route.js.nft.json +1 -1
  97. package/.next/server/app/api/local-models/suggest/route.js +1 -1
  98. package/.next/server/app/api/local-models/suggest/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/app-consent/route.js +1 -1
  100. package/.next/server/app/api/mcp/app-consent/route.js.nft.json +1 -1
  101. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  102. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  103. package/.next/server/app/api/mcp/assistant/route.js +1 -1
  104. package/.next/server/app/api/mcp/assistant/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  106. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  107. package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -1
  108. package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -1
  109. package/.next/server/app/api/mcp/flujo/automation/route.js +1 -1
  110. package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -1
  111. package/.next/server/app/api/mcp/flujo/flows/route.js +1 -1
  112. package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -1
  113. package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -1
  114. package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/flujo/resources/route.js +1 -1
  116. package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -1
  117. package/.next/server/app/api/mcp/flujo/servers/route.js +1 -1
  118. package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -1
  119. package/.next/server/app/api/mcp/flujo/skills/route.js +1 -1
  120. package/.next/server/app/api/mcp/flujo/skills/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp/flujo/state/route.js +1 -1
  122. package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -1
  123. package/.next/server/app/api/mcp/flujo/tools/route.js +1 -1
  124. package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -1
  125. package/.next/server/app/api/mcp/model-risk-assessment/route.js +1 -1
  126. package/.next/server/app/api/mcp/model-risk-assessment/route.js.nft.json +1 -1
  127. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  128. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  129. package/.next/server/app/api/mcp/security-review/route.js +1 -1
  130. package/.next/server/app/api/mcp/security-review/route.js.nft.json +1 -1
  131. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js +1 -1
  132. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js.nft.json +1 -1
  133. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  134. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  135. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  136. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  137. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  138. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  139. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  140. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  141. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  142. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  143. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js +1 -1
  144. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js.nft.json +1 -1
  145. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js +1 -1
  146. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js.nft.json +1 -1
  147. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js +1 -1
  148. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js.nft.json +1 -1
  149. package/.next/server/app/api/mcp/servers/[name]/skills/route.js +1 -1
  150. package/.next/server/app/api/mcp/servers/[name]/skills/route.js.nft.json +1 -1
  151. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  152. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  153. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js +1 -1
  154. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js.nft.json +1 -1
  155. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js +1 -1
  156. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js.nft.json +1 -1
  157. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  158. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  159. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js +1 -1
  160. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js.nft.json +1 -1
  161. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  162. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  163. package/.next/server/app/api/mcp/servers/route.js +1 -1
  164. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  165. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  166. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  167. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  168. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  169. package/.next/server/app/api/mcp-registry/route.js +1 -1
  170. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  171. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  172. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  173. package/.next/server/app/api/model/[id]/route.js +1 -1
  174. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/model/allowance/route.js +1 -1
  176. package/.next/server/app/api/model/allowance/route.js.nft.json +1 -1
  177. package/.next/server/app/api/model/provider/route.js +1 -1
  178. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  179. package/.next/server/app/api/model/route.js +1 -1
  180. package/.next/server/app/api/model/route.js.nft.json +1 -1
  181. package/.next/server/app/api/model/test/route.js +1 -1
  182. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  183. package/.next/server/app/api/network-exposure/route.js +1 -1
  184. package/.next/server/app/api/network-exposure/route.js.nft.json +1 -1
  185. package/.next/server/app/api/oauth/callback/route.js +1 -1
  186. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  187. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  188. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  189. package/.next/server/app/api/oauth/reset/route.js +1 -1
  190. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  191. package/.next/server/app/api/operations/status/route.js +1 -1
  192. package/.next/server/app/api/operations/status/route.js.nft.json +1 -1
  193. package/.next/server/app/api/original-owner/route.js +1 -1
  194. package/.next/server/app/api/original-owner/route.js.nft.json +1 -1
  195. package/.next/server/app/api/packages/build/route.js +1 -1
  196. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  197. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  198. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  199. package/.next/server/app/api/packages/install/route.js +1 -1
  200. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  201. package/.next/server/app/api/packages/install/status/route.js +1 -1
  202. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  203. package/.next/server/app/api/packages/installed/route.js +1 -1
  204. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  205. package/.next/server/app/api/packages/resolve/route.js +1 -1
  206. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  207. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  208. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  209. package/.next/server/app/api/packages/search/route.js +1 -1
  210. package/.next/server/app/api/packages/search/route.js.nft.json +1 -1
  211. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  212. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  213. package/.next/server/app/api/persona-recovery/route.js +2 -2
  214. package/.next/server/app/api/persona-recovery/route.js.nft.json +1 -1
  215. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  216. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  217. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  218. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  219. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  220. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  221. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js +1 -1
  222. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js.nft.json +1 -1
  223. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  224. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  225. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  226. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  227. package/.next/server/app/api/planned-executions/route.js +1 -1
  228. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  229. package/.next/server/app/api/reference-search/files/route.js +1 -1
  230. package/.next/server/app/api/reference-search/files/route.js.nft.json +1 -1
  231. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  232. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  233. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  234. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  235. package/.next/server/app/api/registry/auth/route.js +1 -1
  236. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  237. package/.next/server/app/api/registry/feedback/route.js +1 -1
  238. package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -1
  239. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  240. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  241. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  242. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  243. package/.next/server/app/api/registry/packages/route.js +1 -1
  244. package/.next/server/app/api/registry/packages/route.js.nft.json +1 -1
  245. package/.next/server/app/api/registry/publish/route.js +1 -1
  246. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  247. package/.next/server/app/api/registry/settings/route.js +1 -1
  248. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  249. package/.next/server/app/api/restore/route.js +1 -1
  250. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  251. package/.next/server/app/api/runs/active/route.js +1 -1
  252. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  253. package/.next/server/app/api/runtime-environment/route.js +1 -1
  254. package/.next/server/app/api/runtime-environment/route.js.nft.json +1 -1
  255. package/.next/server/app/api/setup/ai-cli/route.js +1 -1
  256. package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -1
  257. package/.next/server/app/api/snapshot/abort/route.js +1 -1
  258. package/.next/server/app/api/snapshot/abort/route.js.nft.json +1 -1
  259. package/.next/server/app/api/snapshot/begin/route.js +1 -1
  260. package/.next/server/app/api/snapshot/begin/route.js.nft.json +1 -1
  261. package/.next/server/app/api/snapshot/download/route.js +1 -1
  262. package/.next/server/app/api/snapshot/download/route.js.nft.json +1 -1
  263. package/.next/server/app/api/snapshot/finalize/route.js +1 -1
  264. package/.next/server/app/api/snapshot/finalize/route.js.nft.json +1 -1
  265. package/.next/server/app/api/snapshot/info/route.js +1 -1
  266. package/.next/server/app/api/snapshot/info/route.js.nft.json +1 -1
  267. package/.next/server/app/api/snapshot/status/route.js +1 -1
  268. package/.next/server/app/api/snapshot/status/route.js.nft.json +1 -1
  269. package/.next/server/app/api/snapshots/cleanup/route.js +1 -1
  270. package/.next/server/app/api/snapshots/cleanup/route.js.nft.json +1 -1
  271. package/.next/server/app/api/snapshots/open-folder/route.js +1 -1
  272. package/.next/server/app/api/snapshots/open-folder/route.js.nft.json +1 -1
  273. package/.next/server/app/api/snapshots/route.js +1 -1
  274. package/.next/server/app/api/snapshots/route.js.nft.json +1 -1
  275. package/.next/server/app/api/statistics/route.js +1 -1
  276. package/.next/server/app/api/statistics/route.js.nft.json +1 -1
  277. package/.next/server/app/api/storage/route.js +1 -1
  278. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  279. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  280. package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -1
  281. package/.next/server/app/api/tickets/[id]/route.js +1 -1
  282. package/.next/server/app/api/tickets/[id]/route.js.nft.json +1 -1
  283. package/.next/server/app/api/tickets/route.js +1 -1
  284. package/.next/server/app/api/tickets/route.js.nft.json +1 -1
  285. package/.next/server/app/api/transcription/route.js +1 -1
  286. package/.next/server/app/api/transcription/route.js.nft.json +1 -1
  287. package/.next/server/app/api/update/route.js +1 -1
  288. package/.next/server/app/api/update/route.js.nft.json +1 -1
  289. package/.next/server/app/api/waves/route.js +1 -1
  290. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  291. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  292. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  293. package/.next/server/app/api/workspaces/route.js +1 -1
  294. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  295. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/mcp/page.js +1 -1
  298. package/.next/server/app/mcp/page.js.nft.json +1 -1
  299. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/mcp-flows/route.js +1 -1
  301. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  302. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  303. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  304. package/.next/server/app/settings/page.js +1 -1
  305. package/.next/server/app/settings/page.js.nft.json +1 -1
  306. package/.next/server/app/v1/chat/completions/route.js +1 -1
  307. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  308. package/.next/server/app/v1/chat/conversation-chains/route.js +1 -1
  309. package/.next/server/app/v1/chat/conversation-chains/route.js.nft.json +1 -1
  310. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -1
  311. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  312. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +1 -1
  313. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  314. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js +1 -1
  315. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js.nft.json +1 -1
  316. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  317. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  318. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js +1 -1
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js.nft.json +1 -1
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  321. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  322. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -1
  323. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  324. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  325. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  326. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
  327. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  328. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js +1 -1
  329. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js.nft.json +1 -1
  330. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js +1 -1
  331. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js.nft.json +1 -1
  332. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js +1 -1
  333. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js.nft.json +1 -1
  334. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js +1 -1
  335. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js.nft.json +1 -1
  336. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -1
  337. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -1
  338. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  339. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  340. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  341. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  342. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +1 -1
  343. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -1
  344. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  345. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  346. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js +1 -1
  347. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js.nft.json +1 -1
  348. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  349. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  350. package/.next/server/app/v1/chat/events/route.js +1 -1
  351. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  352. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js +1 -1
  353. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js.nft.json +1 -1
  354. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js +1 -1
  355. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js.nft.json +1 -1
  356. package/.next/server/app/v1/meetings/[meetingId]/events/route.js +1 -1
  357. package/.next/server/app/v1/meetings/[meetingId]/events/route.js.nft.json +1 -1
  358. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js +1 -1
  359. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js.nft.json +1 -1
  360. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js +1 -1
  361. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js.nft.json +1 -1
  362. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js +1 -1
  363. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js.nft.json +1 -1
  364. package/.next/server/app/v1/meetings/[meetingId]/route.js +1 -1
  365. package/.next/server/app/v1/meetings/[meetingId]/route.js.nft.json +1 -1
  366. package/.next/server/app/v1/meetings/[meetingId]/start/route.js +1 -1
  367. package/.next/server/app/v1/meetings/[meetingId]/start/route.js.nft.json +1 -1
  368. package/.next/server/app/v1/meetings/route.js +1 -1
  369. package/.next/server/app/v1/meetings/route.js.nft.json +1 -1
  370. package/.next/server/app/v1/models/route.js +1 -1
  371. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  372. package/.next/server/app/v1/persona-drafts/[draftId]/route.js +1 -1
  373. package/.next/server/app/v1/persona-drafts/[draftId]/route.js.nft.json +1 -1
  374. package/.next/server/app/v1/persona-drafts/route.js +1 -1
  375. package/.next/server/app/v1/persona-drafts/route.js.nft.json +1 -1
  376. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js +1 -1
  377. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js.nft.json +1 -1
  378. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js +1 -1
  379. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js.nft.json +1 -1
  380. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js +1 -1
  381. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js.nft.json +1 -1
  382. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js +1 -1
  383. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js.nft.json +1 -1
  384. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js +1 -1
  385. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js.nft.json +1 -1
  386. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js +1 -1
  387. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js.nft.json +1 -1
  388. package/.next/server/app/v1/personas/[personaId]/composition/route.js +1 -1
  389. package/.next/server/app/v1/personas/[personaId]/composition/route.js.nft.json +1 -1
  390. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js +1 -1
  391. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js.nft.json +1 -1
  392. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js +1 -1
  393. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js.nft.json +1 -1
  394. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js +1 -1
  395. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js.nft.json +1 -1
  396. package/.next/server/app/v1/personas/[personaId]/export/route.js +1 -1
  397. package/.next/server/app/v1/personas/[personaId]/export/route.js.nft.json +1 -1
  398. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js +1 -1
  399. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js.nft.json +1 -1
  400. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js +1 -1
  401. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js.nft.json +1 -1
  402. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js +1 -1
  403. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js.nft.json +1 -1
  404. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js +1 -1
  405. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js.nft.json +1 -1
  406. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js +1 -1
  407. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js.nft.json +1 -1
  408. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js +1 -1
  409. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js.nft.json +1 -1
  410. package/.next/server/app/v1/personas/[personaId]/improvements/route.js +1 -1
  411. package/.next/server/app/v1/personas/[personaId]/improvements/route.js.nft.json +1 -1
  412. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js +1 -1
  413. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js.nft.json +1 -1
  414. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js +1 -1
  415. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js.nft.json +1 -1
  416. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js +1 -1
  417. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js.nft.json +1 -1
  418. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js +1 -1
  419. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js.nft.json +1 -1
  420. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js +1 -1
  421. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js.nft.json +1 -1
  422. package/.next/server/app/v1/personas/[personaId]/memories/route.js +1 -1
  423. package/.next/server/app/v1/personas/[personaId]/memories/route.js.nft.json +1 -1
  424. package/.next/server/app/v1/personas/[personaId]/route.js +1 -1
  425. package/.next/server/app/v1/personas/[personaId]/route.js.nft.json +1 -1
  426. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js +1 -1
  427. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js.nft.json +1 -1
  428. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js +1 -1
  429. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js.nft.json +1 -1
  430. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js +1 -1
  431. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js.nft.json +1 -1
  432. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js +1 -1
  433. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js.nft.json +1 -1
  434. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js +1 -1
  435. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js.nft.json +1 -1
  436. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js +1 -1
  437. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js.nft.json +1 -1
  438. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js +1 -1
  439. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js.nft.json +1 -1
  440. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js +1 -1
  441. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js.nft.json +1 -1
  442. package/.next/server/app/v1/personas/[personaId]/work-items/route.js +1 -1
  443. package/.next/server/app/v1/personas/[personaId]/work-items/route.js.nft.json +1 -1
  444. package/.next/server/app/v1/personas/readiness/route.js +1 -1
  445. package/.next/server/app/v1/personas/readiness/route.js.nft.json +1 -1
  446. package/.next/server/app/v1/personas/route.js +1 -1
  447. package/.next/server/app/v1/personas/route.js.nft.json +1 -1
  448. package/.next/server/app/v1/personas/settings-options/route.js +1 -1
  449. package/.next/server/app/v1/personas/settings-options/route.js.nft.json +1 -1
  450. package/.next/server/app/v1/personas/summary/route.js +1 -1
  451. package/.next/server/app/v1/personas/summary/route.js.nft.json +1 -1
  452. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js +1 -1
  453. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js.nft.json +1 -1
  454. package/.next/server/app/v1/roles/[roleId]/impact/route.js +1 -1
  455. package/.next/server/app/v1/roles/[roleId]/impact/route.js.nft.json +1 -1
  456. package/.next/server/app/v1/roles/[roleId]/restore/route.js +1 -1
  457. package/.next/server/app/v1/roles/[roleId]/restore/route.js.nft.json +1 -1
  458. package/.next/server/app/v1/roles/[roleId]/rollback/route.js +1 -1
  459. package/.next/server/app/v1/roles/[roleId]/rollback/route.js.nft.json +1 -1
  460. package/.next/server/app/v1/roles/[roleId]/route.js +1 -1
  461. package/.next/server/app/v1/roles/[roleId]/route.js.nft.json +1 -1
  462. package/.next/server/app/v1/roles/[roleId]/versions/route.js +1 -1
  463. package/.next/server/app/v1/roles/[roleId]/versions/route.js.nft.json +1 -1
  464. package/.next/server/app/v1/roles/route.js +1 -1
  465. package/.next/server/app/v1/roles/route.js.nft.json +1 -1
  466. package/.next/server/app/v1/tasks/[taskId]/route.js +1 -1
  467. package/.next/server/app/v1/tasks/[taskId]/route.js.nft.json +1 -1
  468. package/.next/server/app-paths-manifest.json +54 -54
  469. package/.next/server/chunks/15662.js +3 -3
  470. package/.next/server/chunks/21619.js +1 -1
  471. package/.next/server/chunks/28398.js +2 -2
  472. package/.next/server/chunks/{32834.js → 29288.js} +3 -3
  473. package/.next/server/chunks/{38479.js → 32821.js} +2 -2
  474. package/.next/server/chunks/37388.js +2 -2
  475. package/.next/server/chunks/66087.js +2 -2
  476. package/.next/server/chunks/81306.js +1 -1
  477. package/.next/server/chunks/83718.js +1 -1
  478. package/.next/server/chunks/97235.js +1 -1
  479. package/.next/server/middleware-build-manifest.js +1 -1
  480. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  481. package/.next/server/pages/500.html +1 -1
  482. package/.next/server/preview-props.json +3 -3
  483. package/.next/server/server-reference-manifest.js +1 -1
  484. package/.next/server/server-reference-manifest.json +1 -1
  485. package/.next/static/chunks/{2103-a6bdf01e6f03c029.js → 2103-08e9b68a6ad6d1d1.js} +1 -1
  486. package/.next/static/chunks/{webpack-de65dd56b3485e8f.js → webpack-4bf9759a328c70e2.js} +1 -1
  487. package/.next/trace-build +1 -1
  488. package/README.md +1 -1
  489. package/mcp-servers/bash/package.json +1 -1
  490. package/mcp-servers/browser/package.json +1 -1
  491. package/mcp-servers/filesystem/package.json +1 -1
  492. package/mcp-servers/flujo/package.json +1 -1
  493. package/package.json +5 -5
  494. /package/.next/static/{YlJGyODWwQegJOdnlMS3b → QzMf94E1c_E9j47ZDfH3f}/_buildManifest.js +0 -0
  495. /package/.next/static/{YlJGyODWwQegJOdnlMS3b → QzMf94E1c_E9j47ZDfH3f}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
- "use strict";exports.id=32834,exports.ids=[32834],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(478645);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(49176),c.e(91784),c.e(74877),c.e(59859),c.e(77297),c.e(34679),c.e(79504),c.e(49366),c.e(74858),c.e(66087),c.e(81300),c.e(80314),c.e(48600)]).then(c.bind(c,348600)),Promise.all([c.e(49176),c.e(91784),c.e(74877),c.e(59859),c.e(77297),c.e(54276),c.e(54045),c.e(87019),c.e(34679),c.e(95260),c.e(79504),c.e(49366),c.e(55328),c.e(74858),c.e(66087),c.e(19123),c.e(81300),c.e(37305),c.e(80314),c.e(89374),c.e(46200),c.e(22891),c.e(19203),c.e(79121)]).then(c.bind(c,379121)),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}},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+=`:
2
- ${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)}}}},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,"605f69e009c72176509c186cec42f218566616f177",null),(0,d.A)(l,"40fb686305ff026578fc17772461c47effb637bba8",null),(0,d.A)(m,"60ed39eef69803dfc5b06c0e8fa867a787df8463a8",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.NU)(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:()=>l,InvalidWorkspaceNameError:()=>p,WORKSPACE_COLORS:()=>F,WORKSPACE_NAME_PATTERN:()=>m,WORKSPACE_SUBTREES:()=>o,WorkspaceMutationError:()=>J,assertValidWorkspaceName:()=>r,assertWorkspaceRoots:()=>K,bindToCurrentWorkspace:()=>D,createWorkspace:()=>T,deleteWorkspace:()=>Z,ensureWorkspaceDirs:()=>_,getCurrentWorkspace:()=>B,getWorkspaceDataDir:()=>v,getWorkspaceDbDir:()=>w,getWorkspaceDir:()=>u,getWorkspaceMcpServersDir:()=>x,getWorkspaceUserdataDir:()=>y,getWorkspacesDir:()=>t,isValidWorkspaceName:()=>q,listWorkspaces:()=>N,loadWorkspaceRoots:()=>L,normalizeWorkspaceName:()=>s,remapLegacyDefaultWorkspacePath:()=>z,remapLegacyDefaultWorkspaceReference:()=>function a(b,c){let d=z(b,c);if(d!==b)return d;try{let a=new URL(b);if("file:"===a.protocol){let b=(0,j.fileURLToPath)(a),d=z(b,c);if(d!==b){let b=(0,j.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:()=>W,runWithWorkspace:()=>C,updateWorkspaceRoots:()=>Y,withWorkspaceNamespaceMutation:()=>U,workspaceCacheKey:()=>E,workspaceColor:()=>H,workspaceColorIndex:()=>G,workspaceExists:()=>O});var d=c(333873),e=c.n(d),f=c(79748),g=c.n(f),h=c(629021),i=c(584297),j=c(379551),k=c(901984);let l="default-workspace",m=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,n=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i,o=["db","mcp-servers","userdata","snapshots","screenshots","recordings","browser-profile","bash-utils","artifacts"];class p 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 q(a){return"string"==typeof a&&m.test(a)&&!n.test(a)}function r(a){if(!q(a))throw new p(a);return a}function s(a){return null==a||"string"==typeof a&&""===a.trim()?l:r(a)}function t(){return e().join((0,k.ok)(),"workspaces")}function u(a){let b=s(a),c=t(),d=e().resolve(c,b),f=e().relative(c,d);if(""===f||f.startsWith("..")||e().isAbsolute(f))throw new p(a);return d}function v(a){return u(a??B())}function w(a){return e().join(v(a),"db")}function x(a){return e().join(v(a),"mcp-servers")}function y(a){return e().join(v(a),"userdata")}function z(a,b){if("string"!=typeof a||!e().isAbsolute(a)||B()!==l)return a;let c=e().join((0,k.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(v(l),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 m=!1;try{let a=(0,h.lstatSync)(i);m=!a.isSymbolicLink()&&(a.isDirectory()||a.isFile())}catch{m=!1}return j||!m?a:e().join(v(l),b,d)}function A(){return global.__flujo_workspace_als||(global.__flujo_workspace_als=new i.AsyncLocalStorage),global.__flujo_workspace_als}function B(){let a=A().getStore();return a&&q(a)?a:l}function C(a,b){let c=s(a);return A().run(c,b)}function D(a){let b=B();return(...c)=>C(b,()=>a(...c))}function E(...a){return[B(),...a].join("\0")}let F=["#6656E8","#10A8C3","#2E9E5B","#D2761B","#C2417E","#7A57C9","#1F86D0","#B4453A"];function G(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b%F.length}function H(a){return a===l?F[0]:F[G(a)]}let I=".workspace.json";class J extends Error{constructor(a,b){super(b),this.code=a,this.name="WorkspaceMutationError"}}function K(a){if(!Array.isArray(a))throw new J("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 J("WORKSPACE_INVALID_ROOTS","Workspace folders must be unique absolute filesystem paths.");return b}async function L(a){let b=s(a??B());try{let a=await g().readFile(e().join(u(b),I),"utf8"),c=JSON.parse(a);return K(c?.roots??[])}catch(a){if("ENOENT"===a.code)return[];throw a}}async function M(a){return{name:a,color:H(a),isDefault:a===l,roots:await L(a)}}async function N(){let a=t(),b=new Set([l]),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(!q(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(q(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===l?-1:b===l?1:a.localeCompare(b)).map(M))}async function O(a){if(!q(a))return!1;try{let b=(await g().readdir(t(),{withFileTypes:!0})).filter(b=>q(b.name)&&b.name.toLowerCase()===a.toLowerCase());if(1!==b.length||b[0].name!==a)return!1;let c=await g().lstat(u(a));return c.isDirectory()&&!c.isSymbolicLink()}catch(a){if("ENOENT"===a.code)return!1;throw a}}async function P(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 Q(a,b){try{await P(a,b)}catch(c){if("ENOENT"!==c.code)throw c;await g().mkdir(a,{recursive:!0}),await P(a,b)}}async function R(){let a=(0,k.ok)(),b=t();return await Q(a,"FLUJO data root"),await Q(b,"Workspaces root"),b}async function S(a){let b,c,d=r(a),f=t();try{b=await g().readdir(f)}catch(a){if("ENOENT"===a.code)throw new J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}let h=b.filter(a=>q(a)&&a.toLowerCase()===d.toLowerCase());if(1!==h.length||h[0]!==d)throw new J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist or is ambiguous on disk.`);let i=u(d);try{c=await g().lstat(i)}catch(a){if("ENOENT"===a.code)throw new J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}if(!c.isDirectory()||c.isSymbolicLink())throw new J("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 J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is outside the managed workspace root.`);return i}async function T(a){return U(()=>V(a))}async function U(a){let b=B(),{withWorkspaceRuntimeLock:d}=await c.e(79504).then(c.bind(c,779504));return C(l,()=>d("workspace-namespace",()=>C(b,a)))}async function V(a){let b=r(a);if(b===l)throw new J("WORKSPACE_ALREADY_EXISTS",`Workspace ${JSON.stringify(l)} already exists.`);let d=await R();if((await g().readdir(d)).filter(a=>q(a)&&a.toLowerCase()===b.toLowerCase()).length>0)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);let e=u(b);try{await g().mkdir(e)}catch(a){if("EEXIST"===a.code)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);throw a}try{await _(b);let{migrateShippedMcpServers:a}=await Promise.all([c.e(34679),c.e(4423)]).then(c.bind(c,4423));await C(b,()=>a())}catch(a){throw await g().rm(e,{recursive:!0,force:!0}),a}return M(b)}async function W(a,b){return U(()=>X(a,b))}async function X(a,b){let c=r(a),d=r(b);if(c===l||d===l)throw new J("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be renamed or replaced.");if(c===d)return M(c);if(c.toLowerCase()===d.toLowerCase())throw new J("WORKSPACE_ALREADY_EXISTS","Case-only workspace renames are not supported.");let e=await S(c),f=t();if((await g().readdir(f)).filter(a=>q(a)&&a.toLowerCase()===d.toLowerCase()).length>0)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);try{await g().rename(e,u(d))}catch(a){if("EEXIST"===a.code)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);throw a}return M(d)}async function Y(a,b){let c=r(a),d=K(b),f=await S(c),h=e().join(f,I),i=e().join(f,`${I}.${process.pid}.${Date.now()}.tmp`);await g().writeFile(i,`${JSON.stringify({roots:d},null,2)}
1
+ "use strict";exports.id=29288,exports.ids=[29288],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(478645);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(49176),c.e(91784),c.e(74877),c.e(59859),c.e(77297),c.e(34679),c.e(79504),c.e(49366),c.e(74858),c.e(66087),c.e(81300),c.e(80314),c.e(48600)]).then(c.bind(c,348600)),Promise.all([c.e(49176),c.e(91784),c.e(74877),c.e(59859),c.e(77297),c.e(54276),c.e(54045),c.e(87019),c.e(34679),c.e(95260),c.e(79504),c.e(49366),c.e(55328),c.e(74858),c.e(66087),c.e(19123),c.e(81300),c.e(37305),c.e(80314),c.e(89374),c.e(46200),c.e(22891),c.e(19203),c.e(79121)]).then(c.bind(c,379121)),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}},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+=`:
2
+ ${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)}}}},113357:(a,b,c)=>{c.r(b),c.d(b,{"400612d6c03b36f63863e0f9dce53860edff5b8cc5":()=>d.V,"606533c12f2c8f2301e26efabf791530e58c5809d1":()=>d.resolveGlobalVars,"60a5b8d5737770c005868701453a684fe1cafe9867":()=>d.G});var d=c(122134)},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,"606533c12f2c8f2301e26efabf791530e58c5809d1",null),(0,d.A)(l,"400612d6c03b36f63863e0f9dce53860edff5b8cc5",null),(0,d.A)(m,"60a5b8d5737770c005868701453a684fe1cafe9867",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.NU)(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:()=>l,InvalidWorkspaceNameError:()=>p,WORKSPACE_COLORS:()=>F,WORKSPACE_NAME_PATTERN:()=>m,WORKSPACE_SUBTREES:()=>o,WorkspaceMutationError:()=>J,assertValidWorkspaceName:()=>r,assertWorkspaceRoots:()=>K,bindToCurrentWorkspace:()=>D,createWorkspace:()=>T,deleteWorkspace:()=>Z,ensureWorkspaceDirs:()=>_,getCurrentWorkspace:()=>B,getWorkspaceDataDir:()=>v,getWorkspaceDbDir:()=>w,getWorkspaceDir:()=>u,getWorkspaceMcpServersDir:()=>x,getWorkspaceUserdataDir:()=>y,getWorkspacesDir:()=>t,isValidWorkspaceName:()=>q,listWorkspaces:()=>N,loadWorkspaceRoots:()=>L,normalizeWorkspaceName:()=>s,remapLegacyDefaultWorkspacePath:()=>z,remapLegacyDefaultWorkspaceReference:()=>function a(b,c){let d=z(b,c);if(d!==b)return d;try{let a=new URL(b);if("file:"===a.protocol){let b=(0,j.fileURLToPath)(a),d=z(b,c);if(d!==b){let b=(0,j.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:()=>W,runWithWorkspace:()=>C,updateWorkspaceRoots:()=>Y,withWorkspaceNamespaceMutation:()=>U,workspaceCacheKey:()=>E,workspaceColor:()=>H,workspaceColorIndex:()=>G,workspaceExists:()=>O});var d=c(333873),e=c.n(d),f=c(79748),g=c.n(f),h=c(629021),i=c(584297),j=c(379551),k=c(901984);let l="default-workspace",m=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,n=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i,o=["db","mcp-servers","userdata","snapshots","screenshots","recordings","browser-profile","bash-utils","artifacts"];class p 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 q(a){return"string"==typeof a&&m.test(a)&&!n.test(a)}function r(a){if(!q(a))throw new p(a);return a}function s(a){return null==a||"string"==typeof a&&""===a.trim()?l:r(a)}function t(){return e().join((0,k.ok)(),"workspaces")}function u(a){let b=s(a),c=t(),d=e().resolve(c,b),f=e().relative(c,d);if(""===f||f.startsWith("..")||e().isAbsolute(f))throw new p(a);return d}function v(a){return u(a??B())}function w(a){return e().join(v(a),"db")}function x(a){return e().join(v(a),"mcp-servers")}function y(a){return e().join(v(a),"userdata")}function z(a,b){if("string"!=typeof a||!e().isAbsolute(a)||B()!==l)return a;let c=e().join((0,k.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(v(l),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 m=!1;try{let a=(0,h.lstatSync)(i);m=!a.isSymbolicLink()&&(a.isDirectory()||a.isFile())}catch{m=!1}return j||!m?a:e().join(v(l),b,d)}function A(){return global.__flujo_workspace_als||(global.__flujo_workspace_als=new i.AsyncLocalStorage),global.__flujo_workspace_als}function B(){let a=A().getStore();return a&&q(a)?a:l}function C(a,b){let c=s(a);return A().run(c,b)}function D(a){let b=B();return(...c)=>C(b,()=>a(...c))}function E(...a){return[B(),...a].join("\0")}let F=["#6656E8","#10A8C3","#2E9E5B","#D2761B","#C2417E","#7A57C9","#1F86D0","#B4453A"];function G(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b%F.length}function H(a){return a===l?F[0]:F[G(a)]}let I=".workspace.json";class J extends Error{constructor(a,b){super(b),this.code=a,this.name="WorkspaceMutationError"}}function K(a){if(!Array.isArray(a))throw new J("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 J("WORKSPACE_INVALID_ROOTS","Workspace folders must be unique absolute filesystem paths.");return b}async function L(a){let b=s(a??B());try{let a=await g().readFile(e().join(u(b),I),"utf8"),c=JSON.parse(a);return K(c?.roots??[])}catch(a){if("ENOENT"===a.code)return[];throw a}}async function M(a){return{name:a,color:H(a),isDefault:a===l,roots:await L(a)}}async function N(){let a=t(),b=new Set([l]),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(!q(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(q(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===l?-1:b===l?1:a.localeCompare(b)).map(M))}async function O(a){if(!q(a))return!1;try{let b=(await g().readdir(t(),{withFileTypes:!0})).filter(b=>q(b.name)&&b.name.toLowerCase()===a.toLowerCase());if(1!==b.length||b[0].name!==a)return!1;let c=await g().lstat(u(a));return c.isDirectory()&&!c.isSymbolicLink()}catch(a){if("ENOENT"===a.code)return!1;throw a}}async function P(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 Q(a,b){try{await P(a,b)}catch(c){if("ENOENT"!==c.code)throw c;await g().mkdir(a,{recursive:!0}),await P(a,b)}}async function R(){let a=(0,k.ok)(),b=t();return await Q(a,"FLUJO data root"),await Q(b,"Workspaces root"),b}async function S(a){let b,c,d=r(a),f=t();try{b=await g().readdir(f)}catch(a){if("ENOENT"===a.code)throw new J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}let h=b.filter(a=>q(a)&&a.toLowerCase()===d.toLowerCase());if(1!==h.length||h[0]!==d)throw new J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist or is ambiguous on disk.`);let i=u(d);try{c=await g().lstat(i)}catch(a){if("ENOENT"===a.code)throw new J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}if(!c.isDirectory()||c.isSymbolicLink())throw new J("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 J("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is outside the managed workspace root.`);return i}async function T(a){return U(()=>V(a))}async function U(a){let b=B(),{withWorkspaceRuntimeLock:d}=await c.e(79504).then(c.bind(c,779504));return C(l,()=>d("workspace-namespace",()=>C(b,a)))}async function V(a){let b=r(a);if(b===l)throw new J("WORKSPACE_ALREADY_EXISTS",`Workspace ${JSON.stringify(l)} already exists.`);let d=await R();if((await g().readdir(d)).filter(a=>q(a)&&a.toLowerCase()===b.toLowerCase()).length>0)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);let e=u(b);try{await g().mkdir(e)}catch(a){if("EEXIST"===a.code)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);throw a}try{await _(b);let{migrateShippedMcpServers:a}=await Promise.all([c.e(34679),c.e(4423)]).then(c.bind(c,4423));await C(b,()=>a())}catch(a){throw await g().rm(e,{recursive:!0,force:!0}),a}return M(b)}async function W(a,b){return U(()=>X(a,b))}async function X(a,b){let c=r(a),d=r(b);if(c===l||d===l)throw new J("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be renamed or replaced.");if(c===d)return M(c);if(c.toLowerCase()===d.toLowerCase())throw new J("WORKSPACE_ALREADY_EXISTS","Case-only workspace renames are not supported.");let e=await S(c),f=t();if((await g().readdir(f)).filter(a=>q(a)&&a.toLowerCase()===d.toLowerCase()).length>0)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);try{await g().rename(e,u(d))}catch(a){if("EEXIST"===a.code)throw new J("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);throw a}return M(d)}async function Y(a,b){let c=r(a),d=K(b),f=await S(c),h=e().join(f,I),i=e().join(f,`${I}.${process.pid}.${Date.now()}.tmp`);await g().writeFile(i,`${JSON.stringify({roots:d},null,2)}
3
3
  `,{encoding:"utf8",flag:"wx"});try{await g().rename(i,h)}catch(a){throw await g().rm(i,{force:!0}),a}return M(c)}async function Z(a){return U(()=>$(a))}async function $(a){let b=r(a);if(b===l)throw new J("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be deleted.");let d=await S(b),{stopAndDrainPersonaGoalRuntime:e}=await Promise.all([c.e(49176),c.e(91784),c.e(74877),c.e(59859),c.e(77297),c.e(54045),c.e(87019),c.e(34679),c.e(95260),c.e(79504),c.e(49366),c.e(55328),c.e(74858),c.e(66087),c.e(19123),c.e(81300),c.e(80314),c.e(89374),c.e(77281)]).then(c.bind(c,389374));await C(b,()=>e());let{mcpService:f}=await Promise.all([c.e(49176),c.e(91784),c.e(74877),c.e(59859),c.e(77297),c.e(34679),c.e(79504),c.e(49366),c.e(74858),c.e(66087),c.e(81300),c.e(80314)]).then(c.bind(c,245698)),h=await C(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 _(a){let b=u(a),c=await R(),d=e().basename(b),f=(await g().readdir(c)).filter(a=>q(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 Q(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 o){let c=e().join(b,a);await Q(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()}},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:()=>N,N2:()=>L,bB:()=>aj,U3:()=>ad,Vx:()=>Q,al:()=>ab,JV:()=>af,$G:()=>al,pL:()=>ak,av:()=>am,EI:()=>ai,loadItem:()=>J,H0:()=>I,Jk:()=>aa,w5:()=>an,l_:()=>ag,Vt:()=>ah,VH:()=>H,Gl:()=>ac,c0:()=>K,Zf:()=>G});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);let z=(0,u.h)("utils/storage/backend"),A=()=>g().join((0,w.getWorkspaceDataDir)(),"db"),B=a=>g().join(A(),`${a}.json`);async function C(){let a=A(),b=g().join((0,v.ok)(),".next","storage");try{await e.promises.access(a),z.verbose(`Storage directory exists: ${a}`)}catch{z.debug(`Creating storage directory: ${a}`),await e.promises.mkdir(a,{recursive:!0})}try{await e.promises.access(b),z.warn(`Old storage directory found: ${b}. This may cause data inconsistency issues.`)}catch{}}let D=new Map,E=new Set(["EPERM","EBUSY","EACCES"]);async function F(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||!E.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 G(a,b,c){await (0,x.af)(a),await (0,y.NU)(async()=>{let f;await (0,x.af)(a),await (0,y.qy)();let i=g().dirname(a);await (0,d.QO)(),c&&(await c(),await (0,y.qy)(),await (0,d.QO)()),await e.promises.mkdir(i,{recursive:!0});let j=await e.promises.lstat(i,{bigint:!0}),k=await e.promises.realpath(i);if(!j.isDirectory()||j.isSymbolicLink())throw Error("Atomic write parent is unsafe");let l=`${a}.tmp.${(0,h.randomUUID)()}`,m=!1;try{await (0,y.qy)(),await (0,d.QO)(),c&&(await c(),await (0,y.qy)(),await (0,d.QO)());let g=await e.promises.open(l,"wx",384);m=!0;try{f=await g.stat({bigint:!0}),await (0,y.qy)(),await (0,d.QO)(),c&&(await c(),await (0,y.qy)(),await (0,d.QO)()),await g.writeFile(b),await (0,y.qy)(),await g.sync(),await (0,y.qy)(),f=await g.stat({bigint:!0})}finally{await g.close()}await F(l,a,async()=>{let[a,b,g]=await Promise.allSettled([e.promises.lstat(l,{bigint:!0}),e.promises.lstat(i,{bigint:!0}),e.promises.realpath(i)]);if("rejected"===a.status)throw a.reason;if("rejected"===b.status)throw b.reason;if("rejected"===g.status)throw g.reason;let h=a.value,m=b.value,n=g.value;if(!f||!h.isFile()||h.isSymbolicLink()||h.nlink!==BigInt(1)||h.dev!==f.dev||h.ino!==f.ino||h.size!==f.size||h.mtimeNs!==f.mtimeNs||h.ctimeNs!==f.ctimeNs||h.mode!==f.mode||h.uid!==f.uid||h.gid!==f.gid||!m.isDirectory()||m.isSymbolicLink()||m.dev!==j.dev||m.ino!==j.ino||m.mode!==j.mode||m.uid!==j.uid||m.gid!==j.gid||n!==k)throw Error("Atomic write file or parent changed");await (0,y.qy)(),await (0,d.QO)(),c&&(await c(),await (0,y.qy)(),await (0,d.QO)())}),m=!1,await (0,y.qy)()}catch(a){if(m)try{let a=await e.promises.lstat(l,{bigint:!0});f&&a.isFile()&&!a.isSymbolicLink()&&a.dev===f.dev&&a.ino===f.ino&&await e.promises.unlink(l)}catch{}throw a}})}async function H(a,b,c){let d=B(a);await (0,x.af)(d),await (0,y.NU)(async()=>{let e=(0,w.workspaceCacheKey)("item",a),f=(D.get(e)??Promise.resolve()).catch(()=>{}).then(()=>G(d,JSON.stringify(b,null,2),c));D.set(e,f);try{await f,z.verbose(`Successfully saved item to: ${d}`)}catch(b){throw z.error(`Error saving item with key "${a}" to ${d}:`,b),b}finally{D.get(e)===f&&D.delete(e)}})}async function I(a,b){let c,d=B(a);await (0,x.af)(d),await C();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 J(a,b){if(a.startsWith("conversations/"))return K(a.slice(14),async a=>void 0===a?b:a);await (0,x.af)(B(a));try{await C();let c=B(a),d=await e.promises.readFile(c,"utf-8");if(0===d.trim().length)return z.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return z.verbose(`Successfully loaded item from: ${c}`),a}catch(b){z.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,d),z.info(`Created backup of corrupted file at: ${a}`)}catch(a){z.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 z.verbose(`Item with key "${a}" not found at ${B(a)}, returning default.`),b;throw z.error(`CRITICAL: Error loading item with key "${a}" from ${B(a)}:`,c),c}}async function K(a,b,c={}){let d;c.signal?.throwIfAborted(),N(a);let f=B(`conversations/${a}`);await (0,x.af)(f),await C();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){z.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 L(a){let b=B(a);await (0,x.af)(b),await (0,y.NU)(async()=>{await (0,x.af)(b);try{await e.promises.unlink(b),z.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?z.warn(`Error clearing item with key "${a}" at ${b}:`,c):z.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}})}let M=/^[A-Za-z0-9_-]{1,64}$/;function N(a){if("string"!=typeof a||!M.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let O=a=>g().join(A(),a),P=(a,b)=>g().join(O(a),`${b}.json`);async function Q(a,b){N(b);try{let c=await e.promises.stat(P(a,b));return{mtimeMs:c.mtimeMs,sizeBytes:c.size}}catch(a){if("ENOENT"===a.code)return null;throw a}}let R=new Set(["persona-memories","persona-mailbox","persona-work-items","persona-activities","persona-lease-history"]);function S(a){if(!R.has(a))throw Error(`Unsupported Persona-sharded collection: ${JSON.stringify(a)}`)}function T(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 U(a,b){return S(a),N(b),P(a,b)}function V(a,b,c){S(a),N(b),N(c);let d=O(a),e=g().join(d,b,`${c}.json`);return T(d,e),e}async function W(a){try{return await e.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function X(a,b,c){S(a),N(b);let d=O(a),f=g().join(d,b);T(d,f),c&&await e.promises.mkdir(d,{recursive:!0});let h=await W(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 W(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 T(j,k),f}async function Y(a){return s(a,A())}async function Z(a){return(await Y(a))?.content??null}function $(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 _ 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 aa(a,b,c,d,e){S(a),N(b),N(c);let f=await X(a,b,!1),g=V(a,b,c),h=U(a,c),[i,j]=await Promise.all([f?Z(g):Promise.resolve(null),e?.includeLegacy===!1?Promise.resolve(null):Z(h)]);if(null!==i&&null!==j&&i!==j)throw new _(a,b,c);let k=i??j;return null===k?d:$(k,a,b,c)}async function ab(a,b,c){S(a),N(b),N(c);let d=await X(a,b,!1),e=V(a,b,c),f=U(a,c),[g,h]=await Promise.all([d?Y(e):Promise.resolve(null),Y(f)]);if(g&&h&&g.content!==h.content)throw new _(a,b,c);let i=g??h;return i?($(i.content,a,b,c),{mtimeMs:i.mtimeMs,sizeBytes:i.sizeBytes}):null}async function ac(a,b,c,f){if(S(a),N(b),N(c),f.id!==c||f.personaId!==b)throw Error("Persona-sharded save identity does not match its destination.");let g=V(a,b,c),h=U(a,c);await ag(`persona-shard/${a}/${b}/${c}`,async()=>{await X(a,b,!0);let i=await Z(h);null!==i&&$(i,a,b,c),await G(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 ad(a,b,c){S(a),N(b),N(c);let d=V(a,b,c),f=U(a,c);await ag(`persona-shard/${a}/${b}/${c}`,async()=>{let g=await X(a,b,!1),[h,i]=await Promise.all([g?Z(d):Promise.resolve(null),Z(f)]);null!==h&&$(h,a,b,c),null!==i&&$(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 ae(a,b){let c=await X(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);N(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 X(a,b,!1)}})).toString("utf8");f.push($(l,a,b,d))}return f}async function af(a){S(a);let b=O(a),c=await W(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(N(c.name),await ae(a,c.name))){let d=JSON.stringify(b),e=f.get(b.id);if(e&&e.content!==d)throw new _(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);N(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.`);N(d.personaId);let j=$(i,a,d.personaId,h),k=JSON.stringify(j),l=f.get(h);if(l&&l.content!==k)throw new _(a,d.personaId,h);f.set(h,{content:k,value:j})}return[...f.values()].map(({value:a})=>a)}function ag(a,b){return(0,y.NU)(async()=>{let c=(0,w.workspaceCacheKey)("chain",a),d=(D.get(c)??Promise.resolve()).catch(()=>{}).then(b);return D.set(c,d),d.catch(()=>{}).finally(()=>{D.get(c)===d&&D.delete(c)}),d})}async function ah(a,b,c){N(b);let d=P(a,b);try{await ag(`${a}/${b}`,()=>G(d,JSON.stringify(c,null,2))),z.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw z.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function ai(a,b,c){if(N(b),"conversations"===a)return K(b,async a=>void 0===a?c:a);let d=P(a,b);try{let f=await e.promises.readFile(d,"utf-8");if(0===f.trim().length)return z.warn(`Collection item "${a}/${b}" at ${d} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){z.error(`CRITICAL: Failed to parse JSON from ${d}:`,b);let a=`${d}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,f),z.info(`Created backup of corrupted file at: ${a}`)}catch(a){z.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 z.verbose(`Collection item "${a}/${b}" not found at ${d}, returning default.`),c;throw z.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${d}:`,e),e}}async function aj(a,b){N(b);let c=P(a,b);await ag(`${a}/${b}`,async()=>{try{await (0,d.QO)(),await e.promises.unlink(c),z.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;z.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function ak(a){let b,c=O(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){z.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push(JSON.parse(a))}catch(a){z.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function al(a){let b,c=O(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);N(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 am(a){let b,c=O(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){z.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){z.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function an(a,b,c){let f,g,h=B(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 z.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(g))return z.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await e.promises.mkdir(O(b),{recursive:!0}),g)){let d;try{d=c(a),N(d)}catch(a){z.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=P(b,d);try{await e.promises.access(f),z.debug(`Migration: ${b}/${d} already exists; keeping the existing file.`);continue}catch{}await G(f,JSON.stringify(a,null,2))}return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),z.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="********"},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")})})]})}},478645:(a,b,c)=>{c.d(b,{Kq:()=>A,y0:()=>F,Jl:()=>G,$j:()=>H,jf:()=>K,pr:()=>J,g:()=>P,DV:()=>z,r:()=>u,vb:()=>S,VN:()=>T,OU:()=>O,Zl:()=>y,Do:()=>x,Bh:()=>X});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(731421);let n=String.raw`
4
4
  $ErrorActionPreference = 'Stop'
5
5
  $phase = 'input'
@@ -54,4 +54,4 @@ while ($null -ne $current) {
54
54
  [Console]::Error.WriteLine('FLUJO_AUTHORITY_REFUSED:' + $phase)
55
55
  exit 1
56
56
  }
57
- `;function o(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 p(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,m.spawnSync)(d,["-NoLogo","-NoProfile","-NonInteractive","-Command",n],{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 q(f.stdout)}function q(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 r(a,b){if("win32"!==process.platform||b?.aborted)throw"win32"===process.platform&&b?.aborted&&o("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 o("abort-before-spawn"),Error("Windows authority inspection cancelled");return new Promise((c,e)=>{let h,i=(0,m.spawn)(f,["-NoLogo","-NoProfile","-NonInteractive","-Command",n],{windowsHide:!0,stdio:["pipe","pipe","pipe"],env:{NODE_ENV:"production",SystemRoot:d,WINDIR:d,PATH:g().join(d,"System32")}}),j=0,k=[],l=[],p=a=>{o(a),h??=Error("Windows authority inspection cancelled or exceeded bounds"),i.kill()},r=()=>p("abort"),s=setTimeout(()=>p("deadline"),3e4);for(let a of(b?.addEventListener("abort",r,{once:!0}),i.on("error",a=>{h=a,p("spawn")}),i.stdin.on("error",a=>{h=a,p("stdin")}),[i.stdout,i.stderr]))a.on("data",b=>{(j+=b.length)>65536?p("bounds"):a===i.stdout?k.push(b):l.push(b)});i.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(q(Buffer.concat(k).toString("utf8")))}catch(b){o(0===a?"evidence":"exit",Buffer.concat(l).toString("utf8")),e(b)}finally{for(let a of[...k,...l])a.fill(0)}});let t="string"==typeof a?{filename:g().resolve(a)}:{filenames:a.map(a=>g().resolve(a))};i.stdin.end(JSON.stringify(t)),b?.aborted&&r()})}var s=c(950902),t=c(711873);function u(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 A("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 A("HOST_POLICY_INVALID");b.set(c,f)}return b}let v=i.string().regex(/^[a-f0-9]{64}$/),w=i.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0"));function x(a,b){let c=y.parse(a.trustedHost),d=b??c.runtimeHome,e=u(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 y=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:w,sourceRoot:w,sourceDigest:v,executableDigest:v,packageRunner:t.kU.optional(),bundledInstallation:i.object({packageDirectory:i.enum(["flujo","filesystem","bash","browser"]),installationRoot:w,dependencyNamespaceRoot:w,assetDigest:v,dependencyGraphDigest:v,dependencyDirectories:i.array(w).max(256),dependencyLinks:i.array(i.object({link:w,target:w}).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:v}).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)),z=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:v,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 A 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 B(a){let b=g().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function C(a){let b=g().resolve(a);for(;;){if(e().lstatSync(b).isSymbolicLink())throw new A("HOST_SOURCE_CHANGED");let a=g().dirname(b);if(a===b)break;b=a}if(B(e().realpathSync(a))!==B(a))throw new A("HOST_SOURCE_CHANGED")}function D(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 E(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)||(C(a),!D(d,e().lstatSync(a,{bigint:!0}))))throw new A("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 A("HOST_SOURCE_CHANGED");c(g.subarray(0,a))}if(C(a),BigInt(h)!==d.size||!D(d,e().fstatSync(f,{bigint:!0}))||!D(d,e().lstatSync(a,{bigint:!0})))throw new A("HOST_SOURCE_CHANGED");return d}finally{e().closeSync(f)}}function F(a){try{let b=(0,h.createHash)("sha256");return E(a,0x20000000,a=>b.update(a)),b.digest("hex")}catch{throw new A("HOST_SOURCE_CHANGED")}}function G(a){let b="win32"===process.platform&&a?p(a):void 0,c=a?e().lstatSync(a,{bigint:!0}):void 0,d=M(a);if(void 0!==b&&p(a)!==b||c&&a&&(C(a),!D(c,e().lstatSync(a,{bigint:!0}))))throw new A("HOST_CONSENT_REQUIRED");return d}async function H(a,b){return(await L(a,b)).value}async function I(a,b,c){if(!a||!b||c?.aborted)throw new A("HOST_CONSENT_REQUIRED");let d=[a,b],f=d.map(a=>e().lstatSync(a,{bigint:!0})),g="win32"===process.platform?await r(d,c):void 0,h=d.map(a=>M(a));if(void 0!==g&&await r(d,c)!==g)throw new A("HOST_CONSENT_REQUIRED");for(let[a,b]of d.entries())if(C(b),!D(f[a],e().lstatSync(b,{bigint:!0})))throw new A("HOST_CONSENT_REQUIRED");if(c?.aborted)throw new A("HOST_CONSENT_REQUIRED");return[h[0],h[1]]}async function J(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 A("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 r(c,b):void 0;h="contents";let j=c.map((a,b)=>(d=b,M(a)));if(h="native-after",d=void 0,void 0!==i&&await r(c,b)!==i)throw new A("HOST_CONSENT_REQUIRED");for(let[a,b]of(h="identity-after",c.entries()))if(d=a,C(b),!D(f[a],e().lstatSync(b,{bigint:!0})))throw new A("HOST_CONSENT_REQUIRED");if(h="signal-after",d=void 0,b?.aborted)throw new A("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 K(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 A("HOST_CONSENT_REQUIRED");let c=[...a],d=c.map(a=>e().lstatSync(a,{bigint:!0})),f="win32"===process.platform?p(c):void 0,h=c.map(a=>M(a));if(void 0!==f&&p(c)!==f)throw new A("HOST_CONSENT_REQUIRED");for(let[a,b]of c.entries())if(C(b),!D(d[a],e().lstatSync(b,{bigint:!0})))throw new A("HOST_CONSENT_REQUIRED");if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");return h}async function L(a,b){let c="signal-before";try{if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");c="native-before";let d="win32"===process.platform&&a?await r(a,b):void 0;c="identity-before";let f=a?e().lstatSync(a,{bigint:!0}):void 0;c="contents";let g=M(a);if(c="native-after",void 0!==d&&await r(a,b)!==d||(c="identity-after",f&&a&&(C(a),!D(f,e().lstatSync(a,{bigint:!0}))))||(c="signal-after",b?.aborted))throw new A("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 M(a){if(!a||!g().isAbsolute(a))throw new A("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 A("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 A("HOST_CONSENT_REQUIRED");let d=g().dirname(c);if(d===c)break;c=d}}let c=[];try{let b=E(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 A("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 N(a,b=!1){let c="CONSENT_POLICY_SCHEMA";try{let b=y.parse(a.trustedHost);c="CONSENT_LAUNCH";let d=w.parse(a.command),e=w.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&&B(e)!==B(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,t.nT)({sourceRoot:b.sourceRoot,entryPoint:b.entryPoint,command:d,cwd:e,args:f,runner:b.packageRunner,environment:u(a)});else if("node"===b.runtime){if("node"!==l||f[0]!==b.entryPoint||!/\.(?:mjs|cjs|js)$/.test(b.entryPoint))throw Error()}else if(B(d)!==B(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||B(b.entryPoint)!==B(g().join(b.sourceRoot,"dist","index.js"))||B(b.sourceRoot)!==B(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=[...u(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)),o=i.array(n).max(64).parse(a.roots??[]),p=n.parse(a.rootPath??"");c="CONSENT_SERIALIZE";let q=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:o,sampling:a.sampling??null,elicitation:a.elicitation??null,apps:!0===a.enableMcpApps,skills:!0===a.enableMcpSkills,rootPath:p,runtimeHomeMode:a.runtimeHomeMode??null}}),r=JSON.stringify(["flujo:mcp:trusted-host-consent:v2",(0,j.getCurrentWorkspace)(),a.name,b.sourceRoot]);return{consent:q,salt:r}}catch(a){if(b)throw new s.IP(c,a);throw new A("HOST_POLICY_INVALID")}}function O(a){let{consent:b,salt:c}=N(a);return(0,h.scryptSync)(b,c,32,{N:16384,r:8,p:1,maxmem:0x4000000}).toString("hex")}function P(a,b){let c=N(a),d=N(b);return c.consent===d.consent&&c.salt===d.salt}async function Q(a,b){return R(a,b,!1)}async function R(a,b,c){if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");let{consent:d,salt:e}=N(a,c),f=await new Promise((a,b)=>{let f=a=>b(c?new s.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 A("HOST_CONSENT_REQUIRED");return f.toString("hex")}finally{f.fill(0)}}function S(a){if(void 0===a.trustedHost)throw new A("HOST_CONSENT_REQUIRED");try{let b=y.parse(a.trustedHost),c=O(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?p(g):void 0,k=g.map(a=>M(a));if(void 0!==i&&p(g)!==i)throw Error();for(let[a,b]of g.entries())if(C(b),!D(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 m=z.parse(k[0]),n=l.rF.parse(k[1]),o=m.approvals.find(b=>b.workspace===(0,j.getCurrentWorkspace)()&&b.serverName===a.name);if(n.ownerId!==m.ownerId||!o||o.expiresAt<=Date.now()||o.policyDigest!==c)throw Error();return{policy:b,digest:c,ownerId:n.ownerId,workspace:(0,j.getCurrentWorkspace)(),expiresAt:o.expiresAt}}catch(a){if(a instanceof A)throw a;throw new A("HOST_CONSENT_REQUIRED")}}async function T(a,b){try{let c=structuredClone(a),d=(0,j.getCurrentWorkspace)(),e=y.parse(c.trustedHost),f=await Q(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 I(g,h,b);if(g!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||h!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let k=z.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 A)throw a;throw new A("HOST_CONSENT_REQUIRED")}}async function U(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(B(await e().promises.realpath(a))!==B(a))throw Error()}async function V(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&&!D(f,d)||(await U(a),!D(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 U(a),BigInt(k)!==d.size||!D(d,await i.stat({bigint:!0}))||!D(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 W(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 U(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})=>V(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=>B(a.link)===B(h));if(!a||B(await e().promises.realpath(h))!==B(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(d,h).split(g().sep).join("/"),B(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 U(a),!D(f,await e().promises.lstat(a,{bigint:!0})))throw Error()};return await m(d),i.digest("hex")}async function X(a,b){let d=structuredClone(a),e=await T(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([V(d.command,0x20000000,b),W(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(B(c.dependencyNamespaceRoot)===B(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,t.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,{...x(d),inspectClosure:!1});let c=await V(a.shell,0x20000000,b);h(c.digest===a.shellDigest,"executable-digest"),(0,t.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,x(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 A(b?.aborted?"HOST_CONSENT_REQUIRED":"HOST_SOURCE_CHANGED")}if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");let g=await T(d,b);if(g.ownerId!==e.ownerId||g.digest!==e.digest||g.workspace!==e.workspace)throw new A("HOST_CONSENT_REQUIRED");return g}},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,NU:()=>n,qy:()=>j});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}}},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{var q;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()}await k(a,m,!1);let l=await d.promises.lstat(o,{bigint:!0});if(!h||l.isSymbolicLink()||!l.isFile()||(q=h,q.dev!==l.dev||q.ino!==l.ino||q.size!==l.size||q.mtimeNs!==l.mtimeNs||q.ctimeNs!==l.ctimeNs||q.mode!==l.mode||q.uid!==l.uid||q.gid!==l.gid||q.nlink!==l.nlink))throw Error("Restore temporary file changed before publication.");let n=await i(b);if(n?.isSymbolicLink()||n&&!n.isFile())throw Error(`Restore target became unsafe: ${b}`);await j?.(),await d.promises.rename(o,b),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)},602171:(a,b,c)=>{c.r(b),c.d(b,{"40fb686305ff026578fc17772461c47effb637bba8":()=>d.V,"605f69e009c72176509c186cec42f218566616f177":()=>d.resolveGlobalVars,"60ed39eef69803dfc5b06c0e8fa867a787df8463a8":()=>d.G});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:()=>j,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=new WeakMap;function i(a){let b=16*a+131072,c=(0,d.getHeapStatistics)();if(!Number.isSafeInteger(b)||a<0||g.bytes+b>c.heap_size_limit-c.used_heap_size-0x4000000)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}async function j(a,b,c){if(void 0!==c){let d=c&&h.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let e=i(a);g.bytes+=e;let f=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=e});return d.pending.add(f),f.then(()=>d.pending.delete(f),()=>d.pending.delete(f)),f}if(g.active>=4)throw new e("CONVERSATION_LOG_READ_BUSY",429);let d=i(a),f=Object.freeze({}),j={open:!0,pending:new Set};h.set(f,j),g.active++,g.bytes+=d;try{return await b(f)}finally{j.open=!1,await Promise.allSettled([...j.pending]),h.delete(f),g.active--,g.bytes-=d}}},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")}},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})}};
57
+ `;function o(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 p(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,m.spawnSync)(d,["-NoLogo","-NoProfile","-NonInteractive","-Command",n],{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 q(f.stdout)}function q(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 r(a,b){if("win32"!==process.platform||b?.aborted)throw"win32"===process.platform&&b?.aborted&&o("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 o("abort-before-spawn"),Error("Windows authority inspection cancelled");return new Promise((c,e)=>{let h,i=(0,m.spawn)(f,["-NoLogo","-NoProfile","-NonInteractive","-Command",n],{windowsHide:!0,stdio:["pipe","pipe","pipe"],env:{NODE_ENV:"production",SystemRoot:d,WINDIR:d,PATH:g().join(d,"System32")}}),j=0,k=[],l=[],p=a=>{o(a),h??=Error("Windows authority inspection cancelled or exceeded bounds"),i.kill()},r=()=>p("abort"),s=setTimeout(()=>p("deadline"),3e4);for(let a of(b?.addEventListener("abort",r,{once:!0}),i.on("error",a=>{h=a,p("spawn")}),i.stdin.on("error",a=>{h=a,p("stdin")}),[i.stdout,i.stderr]))a.on("data",b=>{(j+=b.length)>65536?p("bounds"):a===i.stdout?k.push(b):l.push(b)});i.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(q(Buffer.concat(k).toString("utf8")))}catch(b){o(0===a?"evidence":"exit",Buffer.concat(l).toString("utf8")),e(b)}finally{for(let a of[...k,...l])a.fill(0)}});let t="string"==typeof a?{filename:g().resolve(a)}:{filenames:a.map(a=>g().resolve(a))};i.stdin.end(JSON.stringify(t)),b?.aborted&&r()})}var s=c(950902),t=c(711873);function u(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 A("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 A("HOST_POLICY_INVALID");b.set(c,f)}return b}let v=i.string().regex(/^[a-f0-9]{64}$/),w=i.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0"));function x(a,b){let c=y.parse(a.trustedHost),d=b??c.runtimeHome,e=u(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 y=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:w,sourceRoot:w,sourceDigest:v,executableDigest:v,packageRunner:t.kU.optional(),bundledInstallation:i.object({packageDirectory:i.enum(["flujo","filesystem","bash","browser"]),installationRoot:w,dependencyNamespaceRoot:w,assetDigest:v,dependencyGraphDigest:v,dependencyDirectories:i.array(w).max(256),dependencyLinks:i.array(i.object({link:w,target:w}).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:v}).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)),z=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:v,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 A 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 B(a){let b=g().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function C(a){let b=g().resolve(a);for(;;){if(e().lstatSync(b).isSymbolicLink())throw new A("HOST_SOURCE_CHANGED");let a=g().dirname(b);if(a===b)break;b=a}if(B(e().realpathSync(a))!==B(a))throw new A("HOST_SOURCE_CHANGED")}function D(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 E(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)||(C(a),!D(d,e().lstatSync(a,{bigint:!0}))))throw new A("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 A("HOST_SOURCE_CHANGED");c(g.subarray(0,a))}if(C(a),BigInt(h)!==d.size||!D(d,e().fstatSync(f,{bigint:!0}))||!D(d,e().lstatSync(a,{bigint:!0})))throw new A("HOST_SOURCE_CHANGED");return d}finally{e().closeSync(f)}}function F(a){try{let b=(0,h.createHash)("sha256");return E(a,0x20000000,a=>b.update(a)),b.digest("hex")}catch{throw new A("HOST_SOURCE_CHANGED")}}function G(a){let b="win32"===process.platform&&a?p(a):void 0,c=a?e().lstatSync(a,{bigint:!0}):void 0,d=M(a);if(void 0!==b&&p(a)!==b||c&&a&&(C(a),!D(c,e().lstatSync(a,{bigint:!0}))))throw new A("HOST_CONSENT_REQUIRED");return d}async function H(a,b){return(await L(a,b)).value}async function I(a,b,c){if(!a||!b||c?.aborted)throw new A("HOST_CONSENT_REQUIRED");let d=[a,b],f=d.map(a=>e().lstatSync(a,{bigint:!0})),g="win32"===process.platform?await r(d,c):void 0,h=d.map(a=>M(a));if(void 0!==g&&await r(d,c)!==g)throw new A("HOST_CONSENT_REQUIRED");for(let[a,b]of d.entries())if(C(b),!D(f[a],e().lstatSync(b,{bigint:!0})))throw new A("HOST_CONSENT_REQUIRED");if(c?.aborted)throw new A("HOST_CONSENT_REQUIRED");return[h[0],h[1]]}async function J(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 A("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 r(c,b):void 0;h="contents";let j=c.map((a,b)=>(d=b,M(a)));if(h="native-after",d=void 0,void 0!==i&&await r(c,b)!==i)throw new A("HOST_CONSENT_REQUIRED");for(let[a,b]of(h="identity-after",c.entries()))if(d=a,C(b),!D(f[a],e().lstatSync(b,{bigint:!0})))throw new A("HOST_CONSENT_REQUIRED");if(h="signal-after",d=void 0,b?.aborted)throw new A("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 K(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 A("HOST_CONSENT_REQUIRED");let c=[...a],d=c.map(a=>e().lstatSync(a,{bigint:!0})),f="win32"===process.platform?p(c):void 0,h=c.map(a=>M(a));if(void 0!==f&&p(c)!==f)throw new A("HOST_CONSENT_REQUIRED");for(let[a,b]of c.entries())if(C(b),!D(d[a],e().lstatSync(b,{bigint:!0})))throw new A("HOST_CONSENT_REQUIRED");if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");return h}async function L(a,b){let c="signal-before";try{if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");c="native-before";let d="win32"===process.platform&&a?await r(a,b):void 0;c="identity-before";let f=a?e().lstatSync(a,{bigint:!0}):void 0;c="contents";let g=M(a);if(c="native-after",void 0!==d&&await r(a,b)!==d||(c="identity-after",f&&a&&(C(a),!D(f,e().lstatSync(a,{bigint:!0}))))||(c="signal-after",b?.aborted))throw new A("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 M(a){if(!a||!g().isAbsolute(a))throw new A("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 A("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 A("HOST_CONSENT_REQUIRED");let d=g().dirname(c);if(d===c)break;c=d}}let c=[];try{let b=E(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 A("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 N(a,b=!1){let c="CONSENT_POLICY_SCHEMA";try{let b=y.parse(a.trustedHost);c="CONSENT_LAUNCH";let d=w.parse(a.command),e=w.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&&B(e)!==B(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,t.nT)({sourceRoot:b.sourceRoot,entryPoint:b.entryPoint,command:d,cwd:e,args:f,runner:b.packageRunner,environment:u(a)});else if("node"===b.runtime){if("node"!==l||f[0]!==b.entryPoint||!/\.(?:mjs|cjs|js)$/.test(b.entryPoint))throw Error()}else if(B(d)!==B(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||B(b.entryPoint)!==B(g().join(b.sourceRoot,"dist","index.js"))||B(b.sourceRoot)!==B(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=[...u(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)),o=i.array(n).max(64).parse(a.roots??[]),p=n.parse(a.rootPath??"");c="CONSENT_SERIALIZE";let q=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:o,sampling:a.sampling??null,elicitation:a.elicitation??null,apps:!0===a.enableMcpApps,skills:!0===a.enableMcpSkills,rootPath:p,runtimeHomeMode:a.runtimeHomeMode??null}}),r=JSON.stringify(["flujo:mcp:trusted-host-consent:v2",(0,j.getCurrentWorkspace)(),a.name,b.sourceRoot]);return{consent:q,salt:r}}catch(a){if(b)throw new s.IP(c,a);throw new A("HOST_POLICY_INVALID")}}function O(a){let{consent:b,salt:c}=N(a);return(0,h.scryptSync)(b,c,32,{N:16384,r:8,p:1,maxmem:0x4000000}).toString("hex")}function P(a,b){let c=N(a),d=N(b);return c.consent===d.consent&&c.salt===d.salt}async function Q(a,b){return R(a,b,!1)}async function R(a,b,c){if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");let{consent:d,salt:e}=N(a,c),f=await new Promise((a,b)=>{let f=a=>b(c?new s.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 A("HOST_CONSENT_REQUIRED");return f.toString("hex")}finally{f.fill(0)}}function S(a){if(void 0===a.trustedHost)throw new A("HOST_CONSENT_REQUIRED");try{let b=y.parse(a.trustedHost),c=O(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?p(g):void 0,k=g.map(a=>M(a));if(void 0!==i&&p(g)!==i)throw Error();for(let[a,b]of g.entries())if(C(b),!D(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 m=z.parse(k[0]),n=l.rF.parse(k[1]),o=m.approvals.find(b=>b.workspace===(0,j.getCurrentWorkspace)()&&b.serverName===a.name);if(n.ownerId!==m.ownerId||!o||o.expiresAt<=Date.now()||o.policyDigest!==c)throw Error();return{policy:b,digest:c,ownerId:n.ownerId,workspace:(0,j.getCurrentWorkspace)(),expiresAt:o.expiresAt}}catch(a){if(a instanceof A)throw a;throw new A("HOST_CONSENT_REQUIRED")}}async function T(a,b){try{let c=structuredClone(a),d=(0,j.getCurrentWorkspace)(),e=y.parse(c.trustedHost),f=await Q(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 I(g,h,b);if(g!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||h!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let k=z.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 A)throw a;throw new A("HOST_CONSENT_REQUIRED")}}async function U(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(B(await e().promises.realpath(a))!==B(a))throw Error()}async function V(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&&!D(f,d)||(await U(a),!D(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 U(a),BigInt(k)!==d.size||!D(d,await i.stat({bigint:!0}))||!D(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 W(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 U(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})=>V(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=>B(a.link)===B(h));if(!a||B(await e().promises.realpath(h))!==B(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(d,h).split(g().sep).join("/"),B(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 U(a),!D(f,await e().promises.lstat(a,{bigint:!0})))throw Error()};return await m(d),i.digest("hex")}async function X(a,b){let d=structuredClone(a),e=await T(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([V(d.command,0x20000000,b),W(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(B(c.dependencyNamespaceRoot)===B(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,t.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,{...x(d),inspectClosure:!1});let c=await V(a.shell,0x20000000,b);h(c.digest===a.shellDigest,"executable-digest"),(0,t.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,x(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 A(b?.aborted?"HOST_CONSENT_REQUIRED":"HOST_SOURCE_CHANGED")}if(b?.aborted)throw new A("HOST_CONSENT_REQUIRED");let g=await T(d,b);if(g.ownerId!==e.ownerId||g.digest!==e.digest||g.workspace!==e.workspace)throw new A("HOST_CONSENT_REQUIRED");return g}},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,NU:()=>n,qy:()=>j});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}}},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{var q;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()}await k(a,m,!1);let l=await d.promises.lstat(o,{bigint:!0});if(!h||l.isSymbolicLink()||!l.isFile()||(q=h,q.dev!==l.dev||q.ino!==l.ino||q.size!==l.size||q.mtimeNs!==l.mtimeNs||q.ctimeNs!==l.ctimeNs||q.mode!==l.mode||q.uid!==l.uid||q.gid!==l.gid||q.nlink!==l.nlink))throw Error("Restore temporary file changed before publication.");let n=await i(b);if(n?.isSymbolicLink()||n&&!n.isFile())throw Error(`Restore target became unsafe: ${b}`);await j?.(),await d.promises.rename(o,b),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:()=>j,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=new WeakMap;function i(a){let b=16*a+131072,c=(0,d.getHeapStatistics)();if(!Number.isSafeInteger(b)||a<0||g.bytes+b>c.heap_size_limit-c.used_heap_size-0x4000000)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}async function j(a,b,c){if(void 0!==c){let d=c&&h.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let e=i(a);g.bytes+=e;let f=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=e});return d.pending.add(f),f.then(()=>d.pending.delete(f),()=>d.pending.delete(f)),f}if(g.active>=4)throw new e("CONVERSATION_LOG_READ_BUSY",429);let d=i(a),f=Object.freeze({}),j={open:!0,pending:new Set};h.set(f,j),g.active++,g.bytes+=d;try{return await b(f)}finally{j.open=!1,await Promise.allSettled([...j.pending]),h.delete(f),g.active--,g.bytes-=d}}},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")}},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})}};