flujo-ai 3.48.1 → 3.48.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (505) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +58 -58
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/react-loadable-manifest.json +2 -2
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  12. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  13. package/.next/server/app/api/approvals/route.js +1 -1
  14. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  15. package/.next/server/app/api/automation-map/route.js +1 -1
  16. package/.next/server/app/api/automation-map/route.js.nft.json +1 -1
  17. package/.next/server/app/api/avatar/[voiceAction]/route.js +1 -1
  18. package/.next/server/app/api/avatar/[voiceAction]/route.js.nft.json +1 -1
  19. package/.next/server/app/api/avatar/connections/route.js +1 -1
  20. package/.next/server/app/api/avatar/connections/route.js.nft.json +1 -1
  21. package/.next/server/app/api/avatar/local-speech/route.js +1 -1
  22. package/.next/server/app/api/avatar/local-speech/route.js.nft.json +1 -1
  23. package/.next/server/app/api/avatar/remote/[voiceAction]/route.js +1 -1
  24. package/.next/server/app/api/avatar/remote/[voiceAction]/route.js.nft.json +1 -1
  25. package/.next/server/app/api/avatar/remote/availability/route.js +1 -1
  26. package/.next/server/app/api/avatar/remote/availability/route.js.nft.json +1 -1
  27. package/.next/server/app/api/avatar/voice/route.js +1 -1
  28. package/.next/server/app/api/avatar/voice/route.js.nft.json +1 -1
  29. package/.next/server/app/api/avatar/work-model/route.js +1 -1
  30. package/.next/server/app/api/avatar/work-model/route.js.nft.json +1 -1
  31. package/.next/server/app/api/avatar/world/route.js +1 -1
  32. package/.next/server/app/api/avatar/world/route.js.nft.json +1 -1
  33. package/.next/server/app/api/backup/route.js +1 -1
  34. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  35. package/.next/server/app/api/browse/route.js +1 -1
  36. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  37. package/.next/server/app/api/bugs/enhance/route.js +1 -1
  38. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  39. package/.next/server/app/api/credential-migration/route.js +1 -1
  40. package/.next/server/app/api/credential-migration/route.js.nft.json +1 -1
  41. package/.next/server/app/api/credential-transfer/restore/route.js +1 -1
  42. package/.next/server/app/api/credential-transfer/restore/route.js.nft.json +1 -1
  43. package/.next/server/app/api/credential-transfer/route.js +1 -1
  44. package/.next/server/app/api/credential-transfer/route.js.nft.json +1 -1
  45. package/.next/server/app/api/cwd/route.js +1 -1
  46. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  47. package/.next/server/app/api/encryption/secure/route.js +1 -1
  48. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  49. package/.next/server/app/api/env/route.js +1 -1
  50. package/.next/server/app/api/env/route.js.nft.json +1 -1
  51. package/.next/server/app/api/factory-observatory/route.js +1 -1
  52. package/.next/server/app/api/factory-observatory/route.js.nft.json +1 -1
  53. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js +1 -1
  54. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/[id]/route.js +1 -1
  56. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  58. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  59. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  60. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/assist/route.js +1 -1
  62. package/.next/server/app/api/flow/assist/route.js.nft.json +1 -1
  63. package/.next/server/app/api/flow/compile/route.js +1 -1
  64. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  65. package/.next/server/app/api/flow/generate/route.js +1 -1
  66. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/generate/visual/route.js +1 -1
  68. package/.next/server/app/api/flow/generate/visual/route.js.nft.json +1 -1
  69. package/.next/server/app/api/flow/generator/route.js +1 -1
  70. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  71. package/.next/server/app/api/flow/improve/route.js +1 -1
  72. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  73. package/.next/server/app/api/flow/model-agent/route.js +1 -1
  74. package/.next/server/app/api/flow/model-agent/route.js.nft.json +1 -1
  75. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  76. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  77. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  78. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  79. package/.next/server/app/api/flow/repair/route.js +1 -1
  80. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  81. package/.next/server/app/api/flow/route.js +1 -1
  82. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  83. package/.next/server/app/api/git/route.js +1 -1
  84. package/.next/server/app/api/git/route.js.nft.json +1 -1
  85. package/.next/server/app/api/harness/[id]/route.js +1 -1
  86. package/.next/server/app/api/harness/[id]/route.js.nft.json +1 -1
  87. package/.next/server/app/api/harness/profiles/route.js +1 -1
  88. package/.next/server/app/api/harness/profiles/route.js.nft.json +1 -1
  89. package/.next/server/app/api/harness/route.js +1 -1
  90. package/.next/server/app/api/harness/route.js.nft.json +1 -1
  91. package/.next/server/app/api/init/route.js +1 -1
  92. package/.next/server/app/api/init/route.js.nft.json +1 -1
  93. package/.next/server/app/api/local-models/capability/route.js +1 -1
  94. package/.next/server/app/api/local-models/capability/route.js.nft.json +1 -1
  95. package/.next/server/app/api/local-models/pull/route.js +1 -1
  96. package/.next/server/app/api/local-models/pull/route.js.nft.json +1 -1
  97. package/.next/server/app/api/local-models/suggest/route.js +1 -1
  98. package/.next/server/app/api/local-models/suggest/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/app-consent/route.js +1 -1
  100. package/.next/server/app/api/mcp/app-consent/route.js.nft.json +1 -1
  101. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  102. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  103. package/.next/server/app/api/mcp/assistant/route.js +1 -1
  104. package/.next/server/app/api/mcp/assistant/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  106. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  107. package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -1
  108. package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -1
  109. package/.next/server/app/api/mcp/flujo/automation/route.js +1 -1
  110. package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -1
  111. package/.next/server/app/api/mcp/flujo/flows/route.js +1 -1
  112. package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -1
  113. package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -1
  114. package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/flujo/resources/route.js +1 -1
  116. package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -1
  117. package/.next/server/app/api/mcp/flujo/servers/route.js +1 -1
  118. package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -1
  119. package/.next/server/app/api/mcp/flujo/skills/route.js +1 -1
  120. package/.next/server/app/api/mcp/flujo/skills/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp/flujo/state/route.js +1 -1
  122. package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -1
  123. package/.next/server/app/api/mcp/flujo/tools/route.js +1 -1
  124. package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -1
  125. package/.next/server/app/api/mcp/model-risk-assessment/route.js +1 -1
  126. package/.next/server/app/api/mcp/model-risk-assessment/route.js.nft.json +1 -1
  127. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  128. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  129. package/.next/server/app/api/mcp/security-review/route.js +1 -1
  130. package/.next/server/app/api/mcp/security-review/route.js.nft.json +1 -1
  131. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js +1 -1
  132. package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js.nft.json +1 -1
  133. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  134. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  135. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  136. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  137. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  138. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  139. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  140. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  141. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  142. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  143. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js +1 -1
  144. package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js.nft.json +1 -1
  145. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js +1 -1
  146. package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js.nft.json +1 -1
  147. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js +1 -1
  148. package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js.nft.json +1 -1
  149. package/.next/server/app/api/mcp/servers/[name]/skills/route.js +1 -1
  150. package/.next/server/app/api/mcp/servers/[name]/skills/route.js.nft.json +1 -1
  151. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  152. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  153. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js +1 -1
  154. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js.nft.json +1 -1
  155. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js +1 -1
  156. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js.nft.json +1 -1
  157. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  158. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  159. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js +1 -1
  160. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js.nft.json +1 -1
  161. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  162. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  163. package/.next/server/app/api/mcp/servers/route.js +1 -1
  164. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  165. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  166. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  167. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  168. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  169. package/.next/server/app/api/mcp-registry/route.js +1 -1
  170. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  171. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  172. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  173. package/.next/server/app/api/model/[id]/route.js +1 -1
  174. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/model/allowance/route.js +1 -1
  176. package/.next/server/app/api/model/allowance/route.js.nft.json +1 -1
  177. package/.next/server/app/api/model/provider/route.js +1 -1
  178. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  179. package/.next/server/app/api/model/route.js +1 -1
  180. package/.next/server/app/api/model/route.js.nft.json +1 -1
  181. package/.next/server/app/api/model/test/route.js +1 -1
  182. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  183. package/.next/server/app/api/network-exposure/route.js +1 -1
  184. package/.next/server/app/api/network-exposure/route.js.nft.json +1 -1
  185. package/.next/server/app/api/oauth/callback/route.js +1 -1
  186. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  187. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  188. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  189. package/.next/server/app/api/oauth/reset/route.js +1 -1
  190. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  191. package/.next/server/app/api/operations/status/route.js +1 -1
  192. package/.next/server/app/api/operations/status/route.js.nft.json +1 -1
  193. package/.next/server/app/api/original-owner/route.js +1 -1
  194. package/.next/server/app/api/original-owner/route.js.nft.json +1 -1
  195. package/.next/server/app/api/packages/build/route.js +1 -1
  196. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  197. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  198. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  199. package/.next/server/app/api/packages/install/route.js +1 -1
  200. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  201. package/.next/server/app/api/packages/install/status/route.js +1 -1
  202. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  203. package/.next/server/app/api/packages/installed/route.js +1 -1
  204. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  205. package/.next/server/app/api/packages/resolve/route.js +1 -1
  206. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  207. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  208. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  209. package/.next/server/app/api/packages/search/route.js +1 -1
  210. package/.next/server/app/api/packages/search/route.js.nft.json +1 -1
  211. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  212. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  213. package/.next/server/app/api/persona-recovery/route.js +2 -2
  214. package/.next/server/app/api/persona-recovery/route.js.nft.json +1 -1
  215. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  216. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  217. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  218. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  219. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  220. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  221. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js +1 -1
  222. package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js.nft.json +1 -1
  223. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  224. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  225. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  226. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  227. package/.next/server/app/api/planned-executions/route.js +1 -1
  228. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  229. package/.next/server/app/api/reference-search/files/route.js +1 -1
  230. package/.next/server/app/api/reference-search/files/route.js.nft.json +1 -1
  231. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  232. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  233. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  234. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  235. package/.next/server/app/api/registry/auth/route.js +1 -1
  236. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  237. package/.next/server/app/api/registry/feedback/route.js +1 -1
  238. package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -1
  239. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  240. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  241. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  242. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  243. package/.next/server/app/api/registry/packages/route.js +1 -1
  244. package/.next/server/app/api/registry/packages/route.js.nft.json +1 -1
  245. package/.next/server/app/api/registry/publish/route.js +1 -1
  246. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  247. package/.next/server/app/api/registry/settings/route.js +1 -1
  248. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  249. package/.next/server/app/api/restore/route.js +1 -1
  250. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  251. package/.next/server/app/api/runs/active/route.js +1 -1
  252. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  253. package/.next/server/app/api/runtime-environment/route.js +1 -1
  254. package/.next/server/app/api/runtime-environment/route.js.nft.json +1 -1
  255. package/.next/server/app/api/setup/ai-cli/route.js +1 -1
  256. package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -1
  257. package/.next/server/app/api/snapshot/abort/route.js +1 -1
  258. package/.next/server/app/api/snapshot/abort/route.js.nft.json +1 -1
  259. package/.next/server/app/api/snapshot/begin/route.js +1 -1
  260. package/.next/server/app/api/snapshot/begin/route.js.nft.json +1 -1
  261. package/.next/server/app/api/snapshot/download/route.js +1 -1
  262. package/.next/server/app/api/snapshot/download/route.js.nft.json +1 -1
  263. package/.next/server/app/api/snapshot/finalize/route.js +1 -1
  264. package/.next/server/app/api/snapshot/finalize/route.js.nft.json +1 -1
  265. package/.next/server/app/api/snapshot/info/route.js +1 -1
  266. package/.next/server/app/api/snapshot/info/route.js.nft.json +1 -1
  267. package/.next/server/app/api/snapshot/status/route.js +1 -1
  268. package/.next/server/app/api/snapshot/status/route.js.nft.json +1 -1
  269. package/.next/server/app/api/snapshots/cleanup/route.js +1 -1
  270. package/.next/server/app/api/snapshots/cleanup/route.js.nft.json +1 -1
  271. package/.next/server/app/api/snapshots/open-folder/route.js +1 -1
  272. package/.next/server/app/api/snapshots/open-folder/route.js.nft.json +1 -1
  273. package/.next/server/app/api/snapshots/route.js +1 -1
  274. package/.next/server/app/api/snapshots/route.js.nft.json +1 -1
  275. package/.next/server/app/api/statistics/route.js +1 -1
  276. package/.next/server/app/api/statistics/route.js.nft.json +1 -1
  277. package/.next/server/app/api/storage/route.js +1 -1
  278. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  279. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  280. package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -1
  281. package/.next/server/app/api/tickets/[id]/route.js +1 -1
  282. package/.next/server/app/api/tickets/[id]/route.js.nft.json +1 -1
  283. package/.next/server/app/api/tickets/route.js +1 -1
  284. package/.next/server/app/api/tickets/route.js.nft.json +1 -1
  285. package/.next/server/app/api/transcription/route.js +1 -1
  286. package/.next/server/app/api/transcription/route.js.nft.json +1 -1
  287. package/.next/server/app/api/update/route.js +1 -1
  288. package/.next/server/app/api/update/route.js.nft.json +1 -1
  289. package/.next/server/app/api/waves/route.js +1 -1
  290. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  291. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  292. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  293. package/.next/server/app/api/workspaces/route.js +1 -1
  294. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  295. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/mcp/page.js +1 -1
  298. package/.next/server/app/mcp/page.js.nft.json +1 -1
  299. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/mcp-flows/route.js +1 -1
  301. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  302. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  303. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  304. package/.next/server/app/settings/page.js +1 -1
  305. package/.next/server/app/settings/page.js.nft.json +1 -1
  306. package/.next/server/app/v1/chat/completions/route.js +1 -1
  307. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  308. package/.next/server/app/v1/chat/conversation-chains/route.js +1 -1
  309. package/.next/server/app/v1/chat/conversation-chains/route.js.nft.json +1 -1
  310. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -1
  311. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  312. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +1 -1
  313. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  314. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js +1 -1
  315. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js.nft.json +1 -1
  316. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  317. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  318. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js +1 -1
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js.nft.json +1 -1
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  321. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  322. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -1
  323. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  324. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  325. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  326. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
  327. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  328. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js +1 -1
  329. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js.nft.json +1 -1
  330. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js +1 -1
  331. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js.nft.json +1 -1
  332. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js +1 -1
  333. package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js.nft.json +1 -1
  334. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js +1 -1
  335. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js.nft.json +1 -1
  336. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -1
  337. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -1
  338. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  339. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  340. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  341. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  342. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +1 -1
  343. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -1
  344. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  345. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  346. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js +1 -1
  347. package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js.nft.json +1 -1
  348. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  349. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  350. package/.next/server/app/v1/chat/events/route.js +1 -1
  351. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  352. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js +1 -1
  353. package/.next/server/app/v1/flows/[flowRef]/readiness/route.js.nft.json +1 -1
  354. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js +1 -1
  355. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js.nft.json +1 -1
  356. package/.next/server/app/v1/meetings/[meetingId]/events/route.js +1 -1
  357. package/.next/server/app/v1/meetings/[meetingId]/events/route.js.nft.json +1 -1
  358. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js +1 -1
  359. package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js.nft.json +1 -1
  360. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js +1 -1
  361. package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js.nft.json +1 -1
  362. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js +1 -1
  363. package/.next/server/app/v1/meetings/[meetingId]/resume/route.js.nft.json +1 -1
  364. package/.next/server/app/v1/meetings/[meetingId]/route.js +1 -1
  365. package/.next/server/app/v1/meetings/[meetingId]/route.js.nft.json +1 -1
  366. package/.next/server/app/v1/meetings/[meetingId]/start/route.js +1 -1
  367. package/.next/server/app/v1/meetings/[meetingId]/start/route.js.nft.json +1 -1
  368. package/.next/server/app/v1/meetings/route.js +1 -1
  369. package/.next/server/app/v1/meetings/route.js.nft.json +1 -1
  370. package/.next/server/app/v1/models/route.js +1 -1
  371. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  372. package/.next/server/app/v1/persona-drafts/[draftId]/route.js +1 -1
  373. package/.next/server/app/v1/persona-drafts/[draftId]/route.js.nft.json +1 -1
  374. package/.next/server/app/v1/persona-drafts/route.js +1 -1
  375. package/.next/server/app/v1/persona-drafts/route.js.nft.json +1 -1
  376. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js +1 -1
  377. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js.nft.json +1 -1
  378. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js +1 -1
  379. package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js.nft.json +1 -1
  380. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js +1 -1
  381. package/.next/server/app/v1/personas/[personaId]/app-grants/route.js.nft.json +1 -1
  382. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js +1 -1
  383. package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js.nft.json +1 -1
  384. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js +1 -1
  385. package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js.nft.json +1 -1
  386. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js +1 -1
  387. package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js.nft.json +1 -1
  388. package/.next/server/app/v1/personas/[personaId]/composition/route.js +1 -1
  389. package/.next/server/app/v1/personas/[personaId]/composition/route.js.nft.json +1 -1
  390. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js +1 -1
  391. package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js.nft.json +1 -1
  392. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js +1 -1
  393. package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js.nft.json +1 -1
  394. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js +1 -1
  395. package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js.nft.json +1 -1
  396. package/.next/server/app/v1/personas/[personaId]/export/route.js +1 -1
  397. package/.next/server/app/v1/personas/[personaId]/export/route.js.nft.json +1 -1
  398. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js +1 -1
  399. package/.next/server/app/v1/personas/[personaId]/export-preview/route.js.nft.json +1 -1
  400. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js +1 -1
  401. package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js.nft.json +1 -1
  402. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js +1 -1
  403. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js.nft.json +1 -1
  404. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js +1 -1
  405. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js.nft.json +1 -1
  406. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js +1 -1
  407. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js.nft.json +1 -1
  408. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js +1 -1
  409. package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js.nft.json +1 -1
  410. package/.next/server/app/v1/personas/[personaId]/improvements/route.js +1 -1
  411. package/.next/server/app/v1/personas/[personaId]/improvements/route.js.nft.json +1 -1
  412. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js +1 -1
  413. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js.nft.json +1 -1
  414. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js +1 -1
  415. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js.nft.json +1 -1
  416. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js +1 -1
  417. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js.nft.json +1 -1
  418. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js +1 -1
  419. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js.nft.json +1 -1
  420. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js +1 -1
  421. package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js.nft.json +1 -1
  422. package/.next/server/app/v1/personas/[personaId]/memories/route.js +1 -1
  423. package/.next/server/app/v1/personas/[personaId]/memories/route.js.nft.json +1 -1
  424. package/.next/server/app/v1/personas/[personaId]/route.js +1 -1
  425. package/.next/server/app/v1/personas/[personaId]/route.js.nft.json +1 -1
  426. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js +1 -1
  427. package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js.nft.json +1 -1
  428. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js +1 -1
  429. package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js.nft.json +1 -1
  430. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js +1 -1
  431. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js.nft.json +1 -1
  432. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js +1 -1
  433. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js.nft.json +1 -1
  434. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js +1 -1
  435. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js.nft.json +1 -1
  436. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js +1 -1
  437. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js.nft.json +1 -1
  438. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js +1 -1
  439. package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js.nft.json +1 -1
  440. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js +1 -1
  441. package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js.nft.json +1 -1
  442. package/.next/server/app/v1/personas/[personaId]/work-items/route.js +1 -1
  443. package/.next/server/app/v1/personas/[personaId]/work-items/route.js.nft.json +1 -1
  444. package/.next/server/app/v1/personas/readiness/route.js +1 -1
  445. package/.next/server/app/v1/personas/readiness/route.js.nft.json +1 -1
  446. package/.next/server/app/v1/personas/route.js +1 -1
  447. package/.next/server/app/v1/personas/route.js.nft.json +1 -1
  448. package/.next/server/app/v1/personas/settings-options/route.js +1 -1
  449. package/.next/server/app/v1/personas/settings-options/route.js.nft.json +1 -1
  450. package/.next/server/app/v1/personas/summary/route.js +1 -1
  451. package/.next/server/app/v1/personas/summary/route.js.nft.json +1 -1
  452. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js +1 -1
  453. package/.next/server/app/v1/roles/[roleId]/duplicate/route.js.nft.json +1 -1
  454. package/.next/server/app/v1/roles/[roleId]/impact/route.js +1 -1
  455. package/.next/server/app/v1/roles/[roleId]/impact/route.js.nft.json +1 -1
  456. package/.next/server/app/v1/roles/[roleId]/restore/route.js +1 -1
  457. package/.next/server/app/v1/roles/[roleId]/restore/route.js.nft.json +1 -1
  458. package/.next/server/app/v1/roles/[roleId]/rollback/route.js +1 -1
  459. package/.next/server/app/v1/roles/[roleId]/rollback/route.js.nft.json +1 -1
  460. package/.next/server/app/v1/roles/[roleId]/route.js +1 -1
  461. package/.next/server/app/v1/roles/[roleId]/route.js.nft.json +1 -1
  462. package/.next/server/app/v1/roles/[roleId]/versions/route.js +1 -1
  463. package/.next/server/app/v1/roles/[roleId]/versions/route.js.nft.json +1 -1
  464. package/.next/server/app/v1/roles/route.js +1 -1
  465. package/.next/server/app/v1/roles/route.js.nft.json +1 -1
  466. package/.next/server/app/v1/tasks/[taskId]/route.js +1 -1
  467. package/.next/server/app/v1/tasks/[taskId]/route.js.nft.json +1 -1
  468. package/.next/server/app-paths-manifest.json +58 -58
  469. package/.next/server/chunks/{89291.js → 11417.js} +4 -4
  470. package/.next/server/chunks/14130.js +1 -1
  471. package/.next/server/chunks/21392.js +4 -4
  472. package/.next/server/chunks/23167.js +1 -1
  473. package/.next/server/chunks/30775.js +1 -1
  474. package/.next/server/chunks/30953.js +2 -2
  475. package/.next/server/chunks/36362.js +2 -2
  476. package/.next/server/chunks/42265.js +2 -2
  477. package/.next/server/chunks/52152.js +2 -2
  478. package/.next/server/chunks/57085.js +1 -1
  479. package/.next/server/chunks/73633.js +1 -1
  480. package/.next/server/chunks/74050.js +1 -1
  481. package/.next/server/chunks/{28644.js → 75650.js} +2 -2
  482. package/.next/server/chunks/77297.js +6 -6
  483. package/.next/server/chunks/81306.js +1 -1
  484. package/.next/server/chunks/82300.js +2 -2
  485. package/.next/server/chunks/83718.js +1 -1
  486. package/.next/server/chunks/87068.js +1 -1
  487. package/.next/server/chunks/91784.js +3 -3
  488. package/.next/server/chunks/97235.js +1 -1
  489. package/.next/server/middleware-build-manifest.js +1 -1
  490. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  491. package/.next/server/pages/500.html +1 -1
  492. package/.next/server/preview-props.json +3 -3
  493. package/.next/server/server-reference-manifest.js +1 -1
  494. package/.next/server/server-reference-manifest.json +1 -1
  495. package/.next/static/chunks/{2103-e3cdcdaf6b6e91fe.js → 2103-294c66f113cd67a5.js} +1 -1
  496. package/.next/static/chunks/{webpack-5157aab6954f4d2c.js → webpack-fdea59d2034fe7c1.js} +1 -1
  497. package/.next/trace-build +1 -1
  498. package/README.md +1 -1
  499. package/mcp-servers/bash/package.json +1 -1
  500. package/mcp-servers/browser/package.json +1 -1
  501. package/mcp-servers/filesystem/package.json +1 -1
  502. package/mcp-servers/flujo/package.json +1 -1
  503. package/package.json +5 -5
  504. /package/.next/static/{ge1_acWolH72coqTUewza → TsqR1zGslz8fIpBz6QVy_}/_buildManifest.js +0 -0
  505. /package/.next/static/{ge1_acWolH72coqTUewza → TsqR1zGslz8fIpBz6QVy_}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=83718,exports.ids=[83718],exports.modules={489153:(a,b,c)=>{c.d(b,{uJ:()=>K,Ay:()=>$,Yw:()=>N});var d=c(548249),e=c(367484),f=c(769233),g=c(170631),h=c(398635),i=c(164621),j=c(964565),k=c(550172),l=c(424180),m=c(765074),n=c(845484),o=c(337296),p=c(551266),q=c(866730),r=c(375598),s=c(965214),t=c(929762),u=c(476376),v=c(532166),w=c(523806),x=c(166277);function y(a){return null===a||"object"!=typeof a||Array.isArray(a)?void 0:a}var z=c(494651);let A=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a;function B(a){return"string"==typeof a&&a.length>0&&a.length<=512&&a.trim()===a}var C=c(639361),D=c(406680),E=c(915380);let F=(0,D.h)("frontend/components/Chat/McpAppFrame"),G={name:"FLUJO",version:"3.48.1"},H=new Set(["https:","http:"]),I=["inline","fullscreen","pip"],J=new Set(["text"]),K=262144,L=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a,M=a=>{let b=L(a);return b?.type==="text"&&"string"==typeof b.text};function N(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let O=new Map;function P(a,b,c,d){return JSON.stringify([a,b,c,d??null])}async function Q(a,b,c){let d=(0,C.dJ)(),e=P(d,a,b,c);if(!O.has(e)){let f=new URLSearchParams;f.set("serverName",a),f.set("uri",b),c&&f.set("conversationId",c);let g=fetch((0,C.TA)(`/api/mcp/app-sandbox${f.toString()?`?${f}`:""}`,d)).then(async a=>{if(!a.ok){let b="";try{let c=await a.json();"string"==typeof c.error&&c.error.trim()&&(b=`: ${c.error.trim()}`)}catch{}throw Error(`Sandbox endpoint discovery failed (${a.status})${b}`)}return await a.json()}).catch(a=>{throw O.delete(e),a});O.set(e,g)}let f=await O.get(e);return{href:function(a,b){let c;if("boolean"!=typeof a.shared)throw Error("Sandbox endpoint discovery did not describe its origin mode");if(!function(a){if("string"!=typeof a)return!1;let b=a.trim();if(0===b.length||b.length>253||b!==a||b!==b.toLowerCase()||/[^\w.-]|[^\x00-\x7f]/i.test(b)||/^\d+(\.\d+)*$/.test(b)||b.includes(":")||/[/?#@]/.test(b))return!1;let c=b.split(".");return!(0===c.length||c.some(a=>0===a.length))&&c.every(a=>a.length<=63&&/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(a))}(a.originKey))throw Error("Sandbox endpoint discovery returned an invalid origin key");if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery did not return an isolated app URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL");if(a.shared){if(c.searchParams.get("originKey")!==a.originKey)throw Error("Shared sandbox URL is not bound to the verified app origin key")}else if(!c.hostname.split(".").includes(a.originKey))throw Error("Sandbox URL is not bound to the verified app origin key");if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(f,window.location),allowAll:!0===f.allowAll}}function R(a,b,c=!1,d=!1){let e=a=>{let c=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(a);if(!c||!b.includes(c[1].toLowerCase()))return!1;let d=c[3].split(".");if(c[3].length>253||d.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))return!1;let e=c[4]?Number(c[4]):void 0;return void 0===e||Number.isInteger(e)&&e>=1&&e<=65535},f=[],g=new Set;for(let h of a??[]){if(0===h.length||h.length>2048||/[^\x21-\x7e]/.test(h))continue;if("*"===h){if(d)return["*"];continue}let a=c?(0,z._w)(h,b.includes("wss")?["http","ws"]:["http"]):void 0;if(!a&&!e(h))continue;let i=a??h,j=i.toLowerCase();if(!g.has(j)&&(g.add(j),f.push(i),f.length>=64))break}return f}function S(a){return!!a&&"http:"===a.protocol}function T(a,b=S(),c=!1){return{connectDomains:R(a.connectDomains,["https","wss"],b,c),resourceDomains:R(a.resourceDomains,["https"],b,c),frameDomains:R(a.frameDomains,["https"],b,c),baseUriDomains:R(a.baseUriDomains,["https"],b,c)}}function U(a){if(a)try{return JSON.parse(a)}catch{return}}async function V(a,b,c,d,e){let f;if(await a.sendToolInput({arguments:(f=U(b))&&"object"==typeof f&&!Array.isArray(f)?f:{}}),void 0!==d)return void await a.sendToolCancelled({reason:d});let g=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=u.TFo.safeParse(U(a));return c.success?{...c.data,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);g&&await a.sendToolResult(g)}function W(a,b,c){return b.includes(a)&&c.includes(a)}function X(a,b,c,d,e,f){let g=void 0===b?`${c??""}\0${d??""}\0${e??""}\0${f??""}`:`${typeof b}:${String(b)}`;return`${a??""}\0${g}`}function Y(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function Z(a,b,c){try{let d=await x.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,z.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,z.Gt)(f._meta)===b)return{tool:f}}catch(a){F.debug("Could not resolve the full MCP App tool definition",a)}}let $=({conversationId:a,ownerScopeId:b,serverName:c,uri:u,toolName:D,toolArgs:R,toolResultContent:U,toolOwnerScope:$,toolUpdateId:_,toolCancelledReason:aa,toolIsError:ab,onAppMessage:ac,onUpdateModelContext:ad,onRequestDock:ae,onDockable:af,onAvailableDisplayModes:ag,hostDisplayMode:ah,onRequestDisplayMode:ai,onRequestClose:aj,onRegisterTeardown:ak,teardownRegistrationKey:al,docked:am=!1,visible:an=!0,defaultExpanded:ao=!1,autoDock:ap=!1,linkedToolCallCount:aq=1,onUserOpen:ar})=>{let{t:as}=(0,v.s9)(),{settings:at,settingsHydrated:au}=(0,w.rX)(),av=!1!==au,aw=at?.experimental?.requireMcpAppLaunchClick===!0,ax=(0,f.A)(),ay=(0,e.useId)(),az=(0,e.useMemo)(()=>{var d;let e;return(e=B((d={toolOwnerScope:$,toolResultContent:U,conversationId:a,ownerScopeId:b,serverName:c,uri:u,frameInstanceId:ay}).toolOwnerScope)?d.toolOwnerScope:function(a){if(void 0!==a)try{let b="string"==typeof a?JSON.parse(a):a,c=A(A(b)?._meta),d=c?.["io.flujo/host-owner-scope"];return B(d)?d:void 0}catch{return}}(d.toolResultContent))||(d.conversationId?`conversation:${d.conversationId}`:d.ownerScopeId?.trim()?`app:${d.ownerScopeId.trim().slice(0,500)}`:`app:${d.serverName}:${d.uri}:${d.frameInstanceId}`)},[a,ay,b,c,$,U,u]),[aA,aB]=(0,e.useState)(ao),[aC,aD]=(0,e.useState)(!1),[aE,aF]=(0,e.useState)(null),[aG,aH]=(0,e.useState)(av&&!aw?"granted":"loading"),[aI,aJ]=(0,e.useState)(!1),[aK,aL]=(0,e.useState)(null),aM=(0,e.useRef)(!1);aM.current=av&&("internal"===aG||"granted"===aG)&&(am||aA);let aN=(0,e.useRef)(null);(0,e.useEffect)(()=>{aN.current=aE},[aE]),(0,e.useEffect)(()=>{if(!av)return void aH("loading");if(!aw){aH("granted"),aL(null);return}let b=!0;aH("loading");let d=new URLSearchParams({serverName:c,uri:u});return a&&d.set("conversationId",a),fetch(`/api/mcp/app-consent?${d}`).then(async a=>a.ok?a.json():Promise.reject(Error("Consent lookup failed"))).then(a=>{b&&["internal","granted","prompt","denied"].includes(a.status??"")&&aH(a.status)}).catch(()=>{b&&aH("denied")}),()=>{b=!1}},[av,aw,a,c,u]);let aO=(0,e.useCallback)(async b=>{aJ(!0),aL(null);try{let d=await fetch("/api/mcp/app-consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:c,uri:u,conversationId:a,decision:b})});if(!d.ok)throw Error("Unable to save MCP App consent");let e=await d.json();aH("granted"===e.status?"granted":"denied")}catch{aL(as("chat.app.consentSaveFailed"))}finally{aJ(!1)}},[a,c,as,u]),aP=(0,e.useCallback)(async()=>{aJ(!0),aL(null);try{let a=new URLSearchParams({serverName:c,uri:u});if(!(await fetch(`/api/mcp/app-consent?${a}`,{method:"DELETE"})).ok)throw Error("Unable to reset MCP App consent");aH("prompt")}catch{aL(as("chat.app.consentSaveFailed"))}finally{aJ(!1)}},[c,as,u]),[aQ,aR]=(0,e.useState)(am?"pip":"inline"),[aS,aT]=(0,e.useState)(null),[aU,aV]=(0,e.useState)([]),[aW,aX]=(0,e.useState)(!1),aY=(0,e.useRef)(ao),{activeCursor:aZ,startPointerDrag:a$}=(0,E.LI)(),a_=ah??aQ,a0=(0,e.useMemo)(()=>am?["pip","fullscreen"]:["inline","fullscreen",...ae?["pip"]:[]],[am,ae]),a1=(0,e.useRef)(null),a2=(0,e.useRef)(null),a3=(0,e.useRef)(null),a4=(0,e.useRef)(200),a5=(0,e.useRef)(null),a6=(0,e.useRef)(!1),a7=(0,e.useRef)(0),a8=(0,e.useRef)(!1),a9=(0,e.useRef)(null),ba=(0,e.useRef)(null),bb=(0,e.useRef)(!1),bc=(0,e.useRef)(!0),bd=(0,e.useRef)([]),be=(0,e.useRef)(a_),bf=(0,e.useRef)(a0),bg=(0,e.useRef)(D),bh=(0,e.useRef)(D),bi=(0,e.useRef)(az),bj=(0,e.useRef)(az);bi.current=az;let bk=(0,e.useRef)(Promise.resolve()),bl=(0,e.useRef)(void 0),bm=(0,e.useRef)({toolName:D,args:R,resultContent:U,cancelledReason:aa,isError:ab,updateId:_});(0,e.useEffect)(()=>{},[am,a_]),(0,e.useEffect)(()=>{},[am,a_]);let bn=(0,e.useCallback)(a=>{if("fullscreen"!==a_||!a2.current||a.target.closest('button,[role="button"]'))return;a.preventDefault();let b=a2.current.getBoundingClientRect(),c=a.clientX,d=a.clientY;a$(a,"move",a=>{aT({...(0,E.RA)({x:b.left+a.clientX-c,y:b.top+a.clientY-d},{width:b.width,height:b.height},{width:window.innerWidth,height:window.innerHeight}),width:b.width,height:b.height})})},[a_,a$]),bo=(0,e.useCallback)((a,b,c)=>{if("fullscreen"!==a_||!a2.current)return;let d=a2.current.getBoundingClientRect(),e={x:d.left,y:d.top,width:d.width,height:d.height},f=a.clientX,g=a.clientY;a$(a,c,a=>{aT((0,E.hU)(e,b,a.clientX-f,a.clientY-g,{width:window.innerWidth,height:window.innerHeight},{width:Math.min(480,window.innerWidth),height:Math.min(320,window.innerHeight)}))})},[a_,a$]),bp=(0,E.ri)(a2,"fullscreen"===aQ&&!am);bm.current={toolName:D,args:R,resultContent:U,cancelledReason:aa,isError:ab,updateId:_},bg.current=D;let bq=(0,e.useRef)(ac);(0,e.useEffect)(()=>{bq.current=ac},[ac]);let br=(0,e.useRef)(ad);(0,e.useEffect)(()=>{br.current=ad},[ad]);let bs=(0,e.useRef)(ae);(0,e.useEffect)(()=>{bs.current=ae},[ae]);let bt=(0,e.useRef)(ap);(0,e.useEffect)(()=>{ap&&(bt.current=!0)},[ap]);let bu=(0,e.useRef)(af);(0,e.useEffect)(()=>{bu.current=af},[af]);let bv=(0,e.useRef)(ag);(0,e.useEffect)(()=>{bv.current=ag},[ag]);let bw=(0,e.useRef)(ai);(0,e.useEffect)(()=>{bw.current=ai},[ai]);let bx=(0,e.useRef)(aj);(0,e.useEffect)(()=>{bx.current=aj},[aj]);let by=(0,e.useRef)(am);(0,e.useEffect)(()=>{by.current=am},[am]),(0,e.useEffect)(()=>{be.current=a_},[a_]),(0,e.useEffect)(()=>{bf.current=a0},[a0]);let bz=(0,e.useCallback)(()=>{if(ba.current)return ba.current;a7.current+=1;let a=a5.current,b=a3.current,c=a8.current;a5.current=null,a3.current=null,a8.current=!1,a6.current=!1,bd.current=[],a9.current?.disconnect(),a9.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){F.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return ba.current=d,d.finally(()=>{ba.current===d&&(ba.current=null)}),d},[]),bA=(0,e.useCallback)(()=>{bb.current||!bs.current||aN.current||(bb.current=!0,bz().then(()=>{bc.current&&(bs.current?.(),aB(!1))}).finally(()=>{bb.current=!1}))},[bz]),bB=(0,e.useCallback)((a,b,c,d,e)=>{bk.current=bk.current.catch(()=>void 0).then(async()=>{a5.current===a&&a8.current&&await V(a,b,c,d,e)}).catch(a=>{F.warn("MCP App tool delivery failed",a)})},[]),bC=(0,e.useCallback)(async()=>{if(ba.current&&await ba.current,a6.current||!a1.current)return;let b=a7.current+1;a7.current=b;let d=()=>a7.current===b&&a6.current;a6.current=!0,aV([]),aD(!0),aF(null);try{var e,f,g,h,i,j;let k,l,[m,n]=await Promise.all([x.S.readResourceFromApp(c,u),Z(c,u,bg.current)]);if(!d())return;if(m?.httpStatus===403)throw Error(m?.error||as("chat.app.accessDisabled"));if(!m||!1===m.success)throw Error(m?.error||as("chat.app.readFailed"));let o=function(a,b){let c,d=a?.contents;if(!Array.isArray(d)||0===d.length)throw Error("Resource has no contents");let e=d.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,z.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!e)throw Error(`Resource ${b} did not return MCP App HTML`);try{if("string"==typeof e.text)c=e.text;else if("string"==typeof e.blob){var f;let a;f=e.blob,a=Uint8Array.from(atob(f),a=>a.charCodeAt(0)),c=new TextDecoder("utf-8",{fatal:!0}).decode(a)}else throw Error("Missing app resource body")}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(c).length>z.Pt)throw Error(`Resource exceeds the ${Math.round(z.Pt/1024)} KiB size cap`);let g=L(e._meta??e.meta),h=L(g?.ui),i=t.c0.safeParse(h?.csp);if(h?.csp!==void 0&&!i.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let j=t.Ml.safeParse(h?.permissions);if(h?.permissions!==void 0&&!j.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:c,csp:i.success?T(i.data):void 0,rawCsp:i.success?i.data:void 0,permissions:j.success&&j.data.clipboardWrite?{clipboardWrite:{}}:void 0,prefersBorder:"boolean"==typeof h?.prefersBorder?h.prefersBorder:void 0}}(m.data,u);aX(!1===o.prefersBorder);let p=await Q(c,u,a);if(!d()||!a1.current)return;p.allowAll&&o.rawCsp&&(o.csp=T(o.rawCsp,S(),!0));let q=document.createElement("iframe");q.title=as("chat.app.frameTitle",{uri:u}),q.setAttribute("sandbox","allow-scripts allow-same-origin"),q.referrerPolicy="origin";let r=(0,t.Sy)(o.permissions);r&&q.setAttribute("allow",r);let s=!1===o.prefersBorder?"transparent":"#fff";q.style.cssText=by.current||"fullscreen"===be.current?`width:100%;height:100%;border:none;background:${s};`:`width:100%;min-height:120px;height:200px;border:none;background:${s};`+(!1===o.prefersBorder?"":"border-radius:4px;"),a1.current.appendChild(q),a3.current=q;let v=new URL(p.href);o.csp&&v.searchParams.set("csp",JSON.stringify(o.csp));let w=v.origin,A=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error(as("chat.app.proxyTimeout")))},1e4),d=b=>{b.source===q.contentWindow&&b.origin===w&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(q.src=v.href,await A,!d()||a3.current!==q)return;let B=be.current,C="inline";be.current=C;let D=new t.T1((e=bi.current,f=a=>{a7.current===b&&a5.current===D&&(aF(a),aD(!1),bz().finally(()=>{by.current&&bx.current?.()}))},g=x.S,h=a=>F.info(`MCP App tools/call: ${c}/${a}`),{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(a,b)=>{let{method:d,params:i}=a;if("tools/call"===d){let a=y(i),d="string"==typeof a?.name?a.name:void 0;if(!d)throw Error("MCP App tool call is missing a tool name");h?.(d);let j=await g.callToolFromApp(c,d,y(a?.arguments)??{},void 0,b?.signal,e);if(j?.httpStatus===403){let a=j.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!j||!1===j.success)throw Error(j?.error||`Tool call failed: ${d}`);return j.data}if("resources/read"===d){let a=y(i),d="string"==typeof a?.uri?a.uri:void 0;if(!d)throw Error("MCP App resource read is missing a URI");let e=await g.readResourceFromApp(c,d,b?.signal);if(e?.httpStatus===403){let a=e.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!e||!1===e.success)throw Error(e?.error||`Resource read failed: ${d}`);return e.data}if("resources/list"===d)return{resources:[]};if("resources/templates/list"===d)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${d}`)}}),G,{openLinks:{},serverTools:{},serverResources:{},logging:{},...bq.current?{message:{text:{}}}:{},...br.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:o.csp,permissions:o.permissions}},{hostContext:{...n?{toolInfo:n}:{},theme:"dark"===ax.palette.mode?"dark":"light",platform:"web",displayMode:C,availableDisplayModes:bf.current,containerDimensions:Y(a1.current,by.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}});a5.current=D;let E=()=>d()&&a5.current===D;if(D.onopenlink=async({url:a})=>{if(!E())return{isError:!0};let b=function(a){try{let b=new URL(a);if(!H.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(a);if(!b)return F.warn("MCP App open-link rejected by URL policy",{serverName:c,uri:u}),{isError:!0};let d=window.open(b,"_blank","noopener,noreferrer");return d&&(d.opener=null),{}},D.ondownloadfile=async({contents:a})=>{if(!E())return{isError:!0};try{for(let b of a??[]){let a,c=L(L(b)?.resource);if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return F.warn("MCP App download failed",a),{isError:!0}}},D.onloggingmessage=a=>{E()&&F.debug("MCP App log",a?.data)},D.onmessage=async a=>{if(!E())return{};if(!bq.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){let b=L(a);if(b?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let c=b.content,d=Array.isArray(c)?c:c&&"object"==typeof c?[c]:[];if(0===d.length||!d.every(M))throw Error("This host accepts text-only ui/message content");let e=d.map(a=>a.text).join("\n").trim();if(!e)throw Error("ui/message text must not be empty");return e}(a);if(!await bq.current(b))throw Error("ui/message was not delivered");return{}},D.onupdatemodelcontext=async a=>{if(!E())return{};let b=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!J.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":N(a)>K?`Model context exceeds ${K} bytes`:null}(a);if(b)throw Error(b);let d=`${c}::${u}`;if(!br.current)throw Error("This host cannot preserve model context in this surface");if(!await br.current(d,a))throw Error("MCP App model context was not stored");return{}},D.onsizechange=async({width:a,height:b})=>{if(!E()||by.current)return;let c=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},a1.current?.getBoundingClientRect().width||a1.current?.clientWidth||0);void 0!==c.height&&(a4.current=c.height,"fullscreen"!==be.current&&(q.style.height=`${c.height}px`)),void 0!==c.width&&(q.style.width=`${c.width}px`,q.style.maxWidth="100%")},D.onrequestdisplaymode=async({mode:a})=>{if(!E())return{mode:be.current};let b=be.current,c=bd.current;if(!W(a,bf.current,c))return{mode:b};if("pip"===a&&!by.current&&bs.current)return setTimeout(bA,0),{mode:b};let d=b;return(d=bw.current?await bw.current(a,[...c]):a)===b||W(d,bf.current,c)||(d=b),d!==b&&(be.current=d,aR(d),await D.sendHostContextChange({displayMode:d})),{mode:d}},D.onrequestteardown=()=>{E()&&bz().finally(()=>{bx.current?bx.current():(be.current="inline",aR("inline"),aB(!1))})},D.oninitialized=()=>{var a,b,c,d;if(!E())return;let e=D.getAppCapabilities()?.availableDisplayModes,f=Array.isArray(e)?[...new Set(e.filter(a=>I.includes(a)))]:[];bd.current=f,aV(f),bu.current?.(f.includes("pip")),bv.current?.([...f]),a8.current=!0;let g=(a=B,b=by.current,c=bf.current,d=f,b?W("pip",c,d)?"fullscreen"===a&&W("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&W("fullscreen",c,d)?"fullscreen":"inline");if(null===g){aF(as("chat.app.canvasUnsupported")),aD(!1),bz();return}bt.current&&f.includes("pip")&&!by.current&&bs.current&&setTimeout(bA,0),be.current=g,aR(g),g!==C&&D.sendHostContextChange({displayMode:g});let h=a1.current;if(h&&"u">typeof ResizeObserver){let a=()=>{if(!E()||!a8.current)return;let a=h.getBoundingClientRect();a.width<=0||by.current&&a.height<=0||D.sendHostContextChange({containerDimensions:Y(h,by.current)})};a9.current?.disconnect(),a9.current=new ResizeObserver(a),a9.current.observe(h),a()}let i=bm.current;bl.current=X(i.toolName,i.updateId,i.args,i.resultContent,i.cancelledReason,i.isError),(void 0!==i.args||void 0!==i.resultContent||void 0!==i.cancelledReason||!0===i.isError)&&bB(D,i.args,i.resultContent,i.cancelledReason,i.isError),aD(!1)},await D.connect((i=q.contentWindow,j=q.contentWindow,k=new t.hJ(i,j),l={start:async()=>{k.onmessage=(a,b)=>{l.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},k.onerror=a=>l.onerror?.(a),k.onclose=()=>l.onclose?.(),await k.start()},send:(a,b)=>k.send(a,b),close:()=>k.close(),setProtocolVersion:a=>k.setProtocolVersion?.(a)})),!E())return;await D.sendSandboxResourceReady({html:o.html,csp:o.csp,permissions:o.permissions})}catch(a){if(!d())return;F.warn(`Failed to mount MCP App ${u} from ${c}`,a),aF(a instanceof Error?a.message:as("chat.app.loadFailed")),aD(!1),bz()}},[bA,az,bB,c,bz,ax.palette.mode,u,as]),bD=(0,e.useCallback)(()=>{!aC&&aM.current&&(aD(!0),aF(null),aN.current=null,bz().then(()=>{bc.current&&aM.current&&(O.delete(P((0,C.dJ)(),c,u,a)),bC())}))},[a,aC,bC,c,bz,u]),bE=(0,e.useCallback)(()=>{let a=!aA;a||"fullscreen"!==be.current||(be.current="inline",aR("inline"),a5.current?.sendHostContextChange({displayMode:"inline"})),a&&ar?.(),aB(a),a&&("internal"===aG||"granted"===aG)&&setTimeout(()=>{bC()},0)},[aG,aA,bC,ar]);(0,e.useEffect)(()=>{let a=aY.current;aY.current=ao,am||!ao||a||aA||aB(!0)},[ao,am,aA]),(0,e.useEffect)(()=>{am&&("internal"===aG||"granted"===aG)&&!a6.current&&bC()},[aG,am,bC]),(0,e.useEffect)(()=>{if(!am&&("internal"===aG||"granted"===aG)&&aA&&!a6.current){let a=window.setTimeout(()=>{bC()},0);return()=>window.clearTimeout(a)}},[aG,ao,am,aA,bC]),(0,e.useEffect)(()=>{let a=a3.current;if(a){if(am||"fullscreen"===a_){a.style.width="100%",a.style.height="100%",a.style.minHeight="0",a.style.borderRadius="0";return}a.style.width="100%",a.style.height=`${a4.current}px`,a.style.minHeight="120px",a.style.borderRadius=aW?"0":"4px"}},[aW,am,a_]),(0,e.useEffect)(()=>{bh.current===D&&bj.current===az||(bh.current=D,bj.current=az,(a6.current||ba.current)&&bz().then(()=>{bc.current&&(by.current||aA)&&bC()}))},[aA,bC,az,bz,D]),(0,e.useEffect)(()=>{let a=X(D,_,R,U,aa,ab);a8.current&&a5.current&&a!==bl.current&&(bl.current=a,bz().then(()=>{bc.current&&(by.current||aA)&&bC()}))},[aA,bC,bz,R,aa,ab,D,U,_]),(0,e.useEffect)(()=>{ah&&a8.current&&a5.current&&be.current!==ah&&W(ah,bf.current,bd.current)&&(be.current=ah,aR(ah),a5.current.sendHostContextChange({displayMode:ah}))},[ah]),(0,e.useEffect)(()=>{a8.current&&a5.current&&a5.current?.sendHostContextChange({theme:"dark"===ax.palette.mode?"dark":"light"})},[ax.palette.mode]),(0,e.useEffect)(()=>{let a=al??`${c}::${u}`;return ak?.(a,bz),()=>ak?.(a,null)},[ak,c,bz,al,u]),(0,e.useEffect)(()=>{let a=a=>{let b=a.detail;b?.serverName===c&&(b.config?.enableMcpApps===!1||b.config?.disabled===!0)&&(aF(as("chat.app.accessDisabled")),aD(!1),bz().finally(()=>{by.current&&bx.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",a),()=>{window.removeEventListener("flujo:mcp-server-config-changed",a)}},[c,bz,as]),(0,e.useEffect)(()=>(bc.current=!0,()=>{bc.current=!1,bz()}),[bz]);let bF=("internal"===aG||"granted"===aG)&&(0,d.jsx)(g.A,{disabled:aC,onClick:bD,sx:{minHeight:44,flexShrink:0},children:as("chat.app.reload")});if(am)return(0,d.jsxs)(h.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:an?"visible":"hidden",pointerEvents:an?"auto":"none",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"flex-end",flexShrink:0},children:bF}),av&&aw&&"loading"===aG&&(0,d.jsx)(i.A,{variant:"body2",sx:{p:2},children:as("chat.app.consentChecking")}),"prompt"===aG&&(0,d.jsxs)(h.default,{sx:{p:2},children:[(0,d.jsx)(i.A,{variant:"body2",sx:{mb:1},children:as("chat.app.consentPrompt")}),(0,d.jsxs)(i.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1},children:[c," — ",u]}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-once")},children:as("chat.app.consentAllowOnce")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aO("deny-always")},children:as("chat.app.consentNeverAllow")})]}),"denied"===aG&&(0,d.jsxs)(h.default,{sx:{p:2},children:[(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:as("chat.app.consentBlocked")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aP()},children:as("chat.app.consentAskAgain")})]}),aK&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aK}),("internal"===aG||"granted"===aG)&&aC&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:as("chat.app.loading")})]}),aE&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aE}),(0,d.jsx)(h.default,{ref:a1,sx:{flex:1,minHeight:0,width:"100%",display:aE?"none":"block"}})]});let bG=aU.includes("inline")&&aU.includes("fullscreen")&&a0.includes("fullscreen"),bH=aU.includes("inline")&&aU.includes("pip")&&a0.includes("pip")&&!!ae;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(h.default,{ref:a2,sx:{mt:1,...aW?{border:0,borderRadius:0}:{border:"1px solid",borderColor:"divider",borderRadius:1},overflow:"hidden",..."fullscreen"===aQ?{position:"fixed",left:(aS?.x??16)-bp.x,top:(aS?.y??16)-bp.y,width:aS?.width??"calc(100vw - 32px)",height:aS?.height??"calc(100vh - 32px)",minWidth:"min(480px, 100vw)",minHeight:"min(320px, 100vh)",maxWidth:"100vw",maxHeight:"100vh",zIndex:1300,bgcolor:"background.paper",boxShadow:6,display:"flex",flexDirection:"column"}:{}},children:["fullscreen"===aQ&&(0,d.jsx)(E.y1,{label:as("chat.canvas.resize"),onResizeStart:bo}),(0,d.jsxs)(h.default,{onPointerDown:bn,sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover",cursor:"fullscreen"===aQ?"move":"default",userSelect:"none",flexWrap:"wrap",flexShrink:0},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsx)(i.A,{variant:"body2",sx:{fontWeight:500},children:as("chat.app.fromServer",{server:c})}),aq>1&&(0,d.jsxs)(i.A,{variant:"caption",color:"text.secondary",children:["\xd7",aq]}),(0,d.jsx)(l.A,{title:as("chat.app.sandboxHelp"),children:(0,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(h.default,{sx:{flex:1}}),aA&&bF,aA&&bH&&(0,d.jsx)(g.A,{size:"small",onClick:bA,children:as("chat.app.canvas")}),aA&&(0,d.jsx)(l.A,{title:bG?"fullscreen"===aQ?as("chat.app.exitFullscreen"):as("chat.app.fullscreen"):as("chat.app.fullscreenUnsupported"),children:(0,d.jsx)("span",{children:(0,d.jsx)(g.A,{size:"small",disabled:!bG,"aria-label":"fullscreen"===aQ?as("chat.app.exitFullscreen"):as("chat.app.fullscreen"),onClick:()=>{let a="fullscreen"===aQ?"inline":"fullscreen";W(a,a0,aU)&&(be.current=a,aR(a),a5.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===aQ?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(g.A,{size:"small",onClick:bE,startIcon:aA?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:aA?as("chat.app.hide"):as("chat.app.open")})]}),aA&&"prompt"===aG&&(0,d.jsxs)(h.default,{sx:{p:1},children:[(0,d.jsx)(i.A,{variant:"body2",sx:{mb:1},children:as("chat.app.consentPrompt")}),(0,d.jsx)(i.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1},children:u}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-once")},children:as("chat.app.consentAllowOnce")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aO("deny-always")},children:as("chat.app.consentNeverAllow")})]}),aA&&"denied"===aG&&(0,d.jsxs)(h.default,{sx:{p:1},children:[(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:as("chat.app.consentBlocked")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aP()},children:as("chat.app.consentAskAgain")})]}),aA&&aK&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aK}),(0,d.jsx)(m.A,{in:aA&&("internal"===aG||"granted"===aG),onExited:()=>{bz()},sx:"fullscreen"===aQ?{flex:1,minHeight:0,display:"flex",flexDirection:"column","& .MuiCollapse-wrapper, & .MuiCollapse-wrapperInner":{height:"100%",minHeight:0,display:"flex",flexDirection:"column"}}:void 0,children:(0,d.jsxs)(h.default,{sx:{p:1,height:"fullscreen"===aQ?"100%":"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[aC&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:as("chat.app.loading")})]}),aE&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:aE}),(0,d.jsx)(h.default,{ref:a1,sx:{width:"100%",flex:"fullscreen"===aQ?1:void 0,minHeight:0,height:"fullscreen"===aQ?"100%":"auto",display:aE?"none":"block"}})]})})]}),(0,d.jsx)(E.Fy,{cursor:aZ})]})}},597701:(a,b,c)=>{c.d(b,{aI:()=>d,$Z:()=>h,Th:()=>e,BC:()=>s});let d=300,e=-1;var f=c(935705),g=c(866547);let h=8,i=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,j=/^sha256:[0-9a-f]{64}$/;class k extends Error{constructor(a){super(a),this.name="McpSkillsValidationError"}}function l(a){throw new k(a)}function m(a,b){return(null===a||"object"!=typeof a||Array.isArray(a))&&l(`${b} must be an object`),a}function n(a){let b;"string"==typeof a&&a||l("resource URI must be a non-empty string"),a.includes("\\")&&l("resource URI must use forward slashes");try{b=new URL(a)}catch{l("resource URI must be an absolute URI")}(!b.protocol||b.username||b.password||b.port||b.search||b.hash)&&l("resource URI must have no credentials, port, query, or fragment");var c="resource URI";let d=b.pathname.split("/");for(let a=0;a<d.length;a+=1){let b,e=d[a];if(0!==a||""!==e){e||l(`${c} contains an empty path segment`);try{b=decodeURIComponent(e)}catch{l(`${c} contains invalid percent encoding`)}("."===b||".."===b||b.includes("/")||b.includes("\\"))&&l(`${c} contains an unsafe path segment`)}}return b.href}function o(a){let b,c=n(a),d=new URL(c),e=d.pathname.split("/").filter(Boolean);"SKILL.md"!==e[e.length-1]&&l("skill URI must identify a top-level SKILL.md");let f=e.slice(0,-1),g=f.length>0?f[f.length-1]:d.hostname;try{b=decodeURIComponent(g)}catch{l("skill URI contains an invalid name")}p(b);let h=c.slice(0,-9);return{normalizedUri:c,rootUri:h,name:b,scheme:d.protocol.slice(0,-1)}}function p(a){return("string"!=typeof a||a.length<1||a.length>64||!i.test(a))&&l("skill name must be 1-64 lowercase alphanumeric or hyphen characters without leading, trailing, or consecutive hyphens"),a}function q(a){let b={};return void 0!==a.ttlMs&&(("number"!=typeof a.ttlMs||!Number.isInteger(a.ttlMs)||a.ttlMs<0)&&l("ttlMs must be a non-negative integer"),b.ttlMs=a.ttlMs),void 0!==a.cacheScope&&("public"!==a.cacheScope&&"private"!==a.cacheScope&&l('cacheScope must be "public" or "private"'),b.cacheScope=a.cacheScope),b}function r(a){var b,c;let d,e,f=m(a,"skill entry"),g=o(f.uri),h=(b=f.frontmatter,c=g.name,(e=p((d=m(b,"skill frontmatter")).name))!==c&&l("skill frontmatter name must match the final skill path segment"),("string"!=typeof d.description||d.description.length<1||d.description.length>1024)&&l("skill description must be a non-empty string of at most 1024 characters"),{...d,name:e,description:d.description});if("dynamic"===f.resources)return{uri:g.normalizedUri,frontmatter:h,resources:"dynamic"};Array.isArray(f.resources)||l('skill resources must be a complete array or "dynamic"'),(f.resources.length<1||f.resources.length>512)&&l("skill resources must contain 1-512 entries");let i=new Set,k=0,q=!1,r=f.resources.map((a,b)=>{var c;let d=m(a,`skill resource ${b}`),e=n(d.uri);e===g.normalizedUri||e.startsWith(`${g.rootUri}/`)||l("skill resource URI must be contained within the skill root"),i.has(e)&&l("skill resource URIs must be unique"),i.add(e),("number"!=typeof d.size||!Number.isSafeInteger(d.size)||d.size<0)&&l("skill resource size must be a non-negative safe integer");let f=("string"==typeof(c=d.digest)&&j.test(c)||l("skill resource digest must be sha256 followed by 64 lowercase hex characters"),c);return(k+=d.size)>0x1000000&&l("skill resources exceed the 16777216-byte limit"),e===g.normalizedUri&&(q=!0),{uri:e,digest:f,size:d.size}});return q||l("skill resources must include the top-level SKILL.md"),{uri:g.normalizedUri,frontmatter:h,resources:r}}function s(a,b,c){return JSON.stringify([a,o(b).normalizedUri,c])}function t(a){return a.catch(({error:a})=>{throw new g.Nh(g.O4.InvalidParams,"Invalid Skills request parameters.",{issues:a.issues.map(({path:a,message:b})=>({path:a,message:b}))})})}f.Ikc({method:f.euz("skills/list"),params:t(f.Ikc({cursor:f.YjP().optional()}).optional())}),f.Ikc({method:f.euz("skills/get"),params:t(f.Ikc({uri:f.YjP().min(1)}))}),f.Ikc({method:f.euz("resources/directory/read"),params:t(f.Ikc({uri:f.YjP().min(1),cursor:f.YjP().optional()}))}),f.L5J().transform(a=>(function(a){let b=m(a,"skills/list result");"complete"!==b.resultType&&l('skills/list resultType must be "complete"'),Array.isArray(b.skills)||l("skills/list skills must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&l("skills/list nextCursor must be a string");let c=b.skills.map(r),d=new Set;for(let a of c)d.has(a.uri)&&l("skills/list skill URIs must be unique"),d.add(a.uri);return{resultType:"complete",skills:c,...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...q(b)}})(a)),f.L5J().transform(a=>{let b;return"complete"!==(b=m(a,"skills/get result")).resultType&&l('skills/get resultType must be "complete"'),{resultType:"complete",skill:r(b.skill),...q(b)}}),f.L5J().transform(a=>{let b;return"complete"!==(b=m(a,"resources/directory/read result")).resultType&&l('resources/directory/read resultType must be "complete"'),Array.isArray(b.resources)||l("resources/directory/read resources must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&l("resources/directory/read nextCursor must be a string"),{resultType:"complete",resources:b.resources.map((a,b)=>{let c=m(a,`directory resource ${b}`),d=n(c.uri);return"string"==typeof c.name&&c.name||l("directory resource name must be a non-empty string"),void 0!==c.description&&"string"!=typeof c.description&&l("directory resource description must be a string"),void 0!==c.mimeType&&"string"!=typeof c.mimeType&&l("directory resource mimeType must be a string"),{...c,uri:d,name:c.name,...void 0===c.description?{}:{description:c.description},...void 0===c.mimeType?{}:{mimeType:c.mimeType}}}),...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...q(b)}})},803146:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}},915380:(a,b,c)=>{c.d(b,{Fy:()=>n,LI:()=>m,RA:()=>i,eH:()=>k,hU:()=>j,ri:()=>l,y1:()=>q});var d=c(548249),e=c(367484),f=c(398635);let g=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),h={x:0,y:0};function i(a,b,c){return{x:g(a.x,0,Math.max(0,c.width-b.width)),y:g(a.y,0,Math.max(0,c.height-b.height))}}function j(a,b,c,d,e,f){let h=b.includes("left"),i=b.includes("right"),j=b.includes("top"),k=b.includes("bottom"),l=a.x+a.width,m=a.y+a.height,n=a.x,o=a.y,p=a.width,q=a.height;return h?(n=g(a.x+c,0,l-f.width),p=l-n):i&&(p=g(a.width+c,f.width,e.width-a.x)),j?(o=g(a.y+d,0,m-f.height),q=m-o):k&&(q=g(a.height+d,f.height,e.height-a.y)),{x:n,y:o,width:p,height:q}}function k(a,b,c){let d=g(a.width,c.width,b.width),e=g(a.height,c.height,b.height);return{x:g(a.x,0,b.width-d),y:g(a.y,0,b.height-e),width:d,height:e}}function l(a,b){let[c,d]=(0,e.useState)(h);return c}function m(){let[a,b]=(0,e.useState)(null),c=(0,e.useRef)(null),d=(0,e.useRef)(!0);return{activeCursor:a,startPointerDrag:(0,e.useCallback)((a,e,f)=>{c.current?.(),a.preventDefault(),a.stopPropagation();let g=a.currentTarget,h=a.pointerId,i=g.ownerDocument,j=i.defaultView??window,k=i.body.style.userSelect,l=i.body.style.cursor;try{g.setPointerCapture?.(h)}catch{}i.body.style.userSelect="none",i.body.style.cursor=e??"",b(e);let m=a=>{a.pointerId===h&&(a.preventDefault(),f(a))},n=(a=!0)=>{j.removeEventListener("pointermove",m,!0),j.removeEventListener("pointerup",o,!0),j.removeEventListener("pointercancel",o,!0);try{g.hasPointerCapture?.(h)&&g.releasePointerCapture(h)}catch{}i.body.style.userSelect=k,i.body.style.cursor=l,a&&d.current&&b(null),c.current===n&&(c.current=null)},o=a=>{a.pointerId===h&&n()};c.current=n,j.addEventListener("pointermove",m,!0),j.addEventListener("pointerup",o,!0),j.addEventListener("pointercancel",o,!0)},[])}}let n=({cursor:a})=>a?(0,d.jsx)(f.default,{"aria-hidden":!0,"data-testid":"pointer-drag-shield",sx:{position:"fixed",inset:0,zIndex:0x7ffffffe,cursor:a,touchAction:"none"}}):null,o={top:{top:-3,left:10,right:10,height:8},right:{right:-3,top:10,bottom:10,width:8},bottom:{bottom:-3,left:10,right:10,height:8},left:{left:-3,top:10,bottom:10,width:8},"top-left":{top:-3,left:-3,width:14,height:14},"top-right":{top:-3,right:-3,width:14,height:14},"bottom-left":{bottom:-3,left:-3,width:14,height:14},"bottom-right":{bottom:-3,right:-3,width:14,height:14}},p=Object.keys(o),q=({label:a,onResizeStart:b})=>(0,d.jsx)(d.Fragment,{children:p.map(c=>{let e="top"===c||"bottom"===c?"ns-resize":"left"===c||"right"===c?"ew-resize":"top-left"===c||"bottom-right"===c?"nwse-resize":"nesw-resize";return(0,d.jsx)(f.default,{component:"span",role:"separator","aria-label":`${a} (${c})`,onPointerDown:a=>b(a,c,e),sx:{position:"absolute",zIndex:8,cursor:e,touchAction:"none",...o[c],..."bottom-right"===c?{"&::after":{content:'""',position:"absolute",right:3,bottom:3,width:7,height:7,borderRight:2,borderBottom:2,borderColor:"text.secondary",opacity:.7}}:{}}},c)})})}};
1
+ "use strict";exports.id=83718,exports.ids=[83718],exports.modules={489153:(a,b,c)=>{c.d(b,{uJ:()=>K,Ay:()=>$,Yw:()=>N});var d=c(548249),e=c(367484),f=c(769233),g=c(170631),h=c(398635),i=c(164621),j=c(964565),k=c(550172),l=c(424180),m=c(765074),n=c(845484),o=c(337296),p=c(551266),q=c(866730),r=c(375598),s=c(965214),t=c(929762),u=c(476376),v=c(532166),w=c(523806),x=c(166277);function y(a){return null===a||"object"!=typeof a||Array.isArray(a)?void 0:a}var z=c(494651);let A=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a;function B(a){return"string"==typeof a&&a.length>0&&a.length<=512&&a.trim()===a}var C=c(639361),D=c(406680),E=c(915380);let F=(0,D.h)("frontend/components/Chat/McpAppFrame"),G={name:"FLUJO",version:"3.48.2"},H=new Set(["https:","http:"]),I=["inline","fullscreen","pip"],J=new Set(["text"]),K=262144,L=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a,M=a=>{let b=L(a);return b?.type==="text"&&"string"==typeof b.text};function N(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let O=new Map;function P(a,b,c,d){return JSON.stringify([a,b,c,d??null])}async function Q(a,b,c){let d=(0,C.dJ)(),e=P(d,a,b,c);if(!O.has(e)){let f=new URLSearchParams;f.set("serverName",a),f.set("uri",b),c&&f.set("conversationId",c);let g=fetch((0,C.TA)(`/api/mcp/app-sandbox${f.toString()?`?${f}`:""}`,d)).then(async a=>{if(!a.ok){let b="";try{let c=await a.json();"string"==typeof c.error&&c.error.trim()&&(b=`: ${c.error.trim()}`)}catch{}throw Error(`Sandbox endpoint discovery failed (${a.status})${b}`)}return await a.json()}).catch(a=>{throw O.delete(e),a});O.set(e,g)}let f=await O.get(e);return{href:function(a,b){let c;if("boolean"!=typeof a.shared)throw Error("Sandbox endpoint discovery did not describe its origin mode");if(!function(a){if("string"!=typeof a)return!1;let b=a.trim();if(0===b.length||b.length>253||b!==a||b!==b.toLowerCase()||/[^\w.-]|[^\x00-\x7f]/i.test(b)||/^\d+(\.\d+)*$/.test(b)||b.includes(":")||/[/?#@]/.test(b))return!1;let c=b.split(".");return!(0===c.length||c.some(a=>0===a.length))&&c.every(a=>a.length<=63&&/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(a))}(a.originKey))throw Error("Sandbox endpoint discovery returned an invalid origin key");if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery did not return an isolated app URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL");if(a.shared){if(c.searchParams.get("originKey")!==a.originKey)throw Error("Shared sandbox URL is not bound to the verified app origin key")}else if(!c.hostname.split(".").includes(a.originKey))throw Error("Sandbox URL is not bound to the verified app origin key");if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(f,window.location),allowAll:!0===f.allowAll}}function R(a,b,c=!1,d=!1){let e=a=>{let c=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(a);if(!c||!b.includes(c[1].toLowerCase()))return!1;let d=c[3].split(".");if(c[3].length>253||d.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))return!1;let e=c[4]?Number(c[4]):void 0;return void 0===e||Number.isInteger(e)&&e>=1&&e<=65535},f=[],g=new Set;for(let h of a??[]){if(0===h.length||h.length>2048||/[^\x21-\x7e]/.test(h))continue;if("*"===h){if(d)return["*"];continue}let a=c?(0,z._w)(h,b.includes("wss")?["http","ws"]:["http"]):void 0;if(!a&&!e(h))continue;let i=a??h,j=i.toLowerCase();if(!g.has(j)&&(g.add(j),f.push(i),f.length>=64))break}return f}function S(a){return!!a&&"http:"===a.protocol}function T(a,b=S(),c=!1){return{connectDomains:R(a.connectDomains,["https","wss"],b,c),resourceDomains:R(a.resourceDomains,["https"],b,c),frameDomains:R(a.frameDomains,["https"],b,c),baseUriDomains:R(a.baseUriDomains,["https"],b,c)}}function U(a){if(a)try{return JSON.parse(a)}catch{return}}async function V(a,b,c,d,e){let f;if(await a.sendToolInput({arguments:(f=U(b))&&"object"==typeof f&&!Array.isArray(f)?f:{}}),void 0!==d)return void await a.sendToolCancelled({reason:d});let g=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=u.TFo.safeParse(U(a));return c.success?{...c.data,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);g&&await a.sendToolResult(g)}function W(a,b,c){return b.includes(a)&&c.includes(a)}function X(a,b,c,d,e,f){let g=void 0===b?`${c??""}\0${d??""}\0${e??""}\0${f??""}`:`${typeof b}:${String(b)}`;return`${a??""}\0${g}`}function Y(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function Z(a,b,c){try{let d=await x.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,z.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,z.Gt)(f._meta)===b)return{tool:f}}catch(a){F.debug("Could not resolve the full MCP App tool definition",a)}}let $=({conversationId:a,ownerScopeId:b,serverName:c,uri:u,toolName:D,toolArgs:R,toolResultContent:U,toolOwnerScope:$,toolUpdateId:_,toolCancelledReason:aa,toolIsError:ab,onAppMessage:ac,onUpdateModelContext:ad,onRequestDock:ae,onDockable:af,onAvailableDisplayModes:ag,hostDisplayMode:ah,onRequestDisplayMode:ai,onRequestClose:aj,onRegisterTeardown:ak,teardownRegistrationKey:al,docked:am=!1,visible:an=!0,defaultExpanded:ao=!1,autoDock:ap=!1,linkedToolCallCount:aq=1,onUserOpen:ar})=>{let{t:as}=(0,v.s9)(),{settings:at,settingsHydrated:au}=(0,w.rX)(),av=!1!==au,aw=at?.experimental?.requireMcpAppLaunchClick===!0,ax=(0,f.A)(),ay=(0,e.useId)(),az=(0,e.useMemo)(()=>{var d;let e;return(e=B((d={toolOwnerScope:$,toolResultContent:U,conversationId:a,ownerScopeId:b,serverName:c,uri:u,frameInstanceId:ay}).toolOwnerScope)?d.toolOwnerScope:function(a){if(void 0!==a)try{let b="string"==typeof a?JSON.parse(a):a,c=A(A(b)?._meta),d=c?.["io.flujo/host-owner-scope"];return B(d)?d:void 0}catch{return}}(d.toolResultContent))||(d.conversationId?`conversation:${d.conversationId}`:d.ownerScopeId?.trim()?`app:${d.ownerScopeId.trim().slice(0,500)}`:`app:${d.serverName}:${d.uri}:${d.frameInstanceId}`)},[a,ay,b,c,$,U,u]),[aA,aB]=(0,e.useState)(ao),[aC,aD]=(0,e.useState)(!1),[aE,aF]=(0,e.useState)(null),[aG,aH]=(0,e.useState)(av&&!aw?"granted":"loading"),[aI,aJ]=(0,e.useState)(!1),[aK,aL]=(0,e.useState)(null),aM=(0,e.useRef)(!1);aM.current=av&&("internal"===aG||"granted"===aG)&&(am||aA);let aN=(0,e.useRef)(null);(0,e.useEffect)(()=>{aN.current=aE},[aE]),(0,e.useEffect)(()=>{if(!av)return void aH("loading");if(!aw){aH("granted"),aL(null);return}let b=!0;aH("loading");let d=new URLSearchParams({serverName:c,uri:u});return a&&d.set("conversationId",a),fetch(`/api/mcp/app-consent?${d}`).then(async a=>a.ok?a.json():Promise.reject(Error("Consent lookup failed"))).then(a=>{b&&["internal","granted","prompt","denied"].includes(a.status??"")&&aH(a.status)}).catch(()=>{b&&aH("denied")}),()=>{b=!1}},[av,aw,a,c,u]);let aO=(0,e.useCallback)(async b=>{aJ(!0),aL(null);try{let d=await fetch("/api/mcp/app-consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:c,uri:u,conversationId:a,decision:b})});if(!d.ok)throw Error("Unable to save MCP App consent");let e=await d.json();aH("granted"===e.status?"granted":"denied")}catch{aL(as("chat.app.consentSaveFailed"))}finally{aJ(!1)}},[a,c,as,u]),aP=(0,e.useCallback)(async()=>{aJ(!0),aL(null);try{let a=new URLSearchParams({serverName:c,uri:u});if(!(await fetch(`/api/mcp/app-consent?${a}`,{method:"DELETE"})).ok)throw Error("Unable to reset MCP App consent");aH("prompt")}catch{aL(as("chat.app.consentSaveFailed"))}finally{aJ(!1)}},[c,as,u]),[aQ,aR]=(0,e.useState)(am?"pip":"inline"),[aS,aT]=(0,e.useState)(null),[aU,aV]=(0,e.useState)([]),[aW,aX]=(0,e.useState)(!1),aY=(0,e.useRef)(ao),{activeCursor:aZ,startPointerDrag:a$}=(0,E.LI)(),a_=ah??aQ,a0=(0,e.useMemo)(()=>am?["pip","fullscreen"]:["inline","fullscreen",...ae?["pip"]:[]],[am,ae]),a1=(0,e.useRef)(null),a2=(0,e.useRef)(null),a3=(0,e.useRef)(null),a4=(0,e.useRef)(200),a5=(0,e.useRef)(null),a6=(0,e.useRef)(!1),a7=(0,e.useRef)(0),a8=(0,e.useRef)(!1),a9=(0,e.useRef)(null),ba=(0,e.useRef)(null),bb=(0,e.useRef)(!1),bc=(0,e.useRef)(!0),bd=(0,e.useRef)([]),be=(0,e.useRef)(a_),bf=(0,e.useRef)(a0),bg=(0,e.useRef)(D),bh=(0,e.useRef)(D),bi=(0,e.useRef)(az),bj=(0,e.useRef)(az);bi.current=az;let bk=(0,e.useRef)(Promise.resolve()),bl=(0,e.useRef)(void 0),bm=(0,e.useRef)({toolName:D,args:R,resultContent:U,cancelledReason:aa,isError:ab,updateId:_});(0,e.useEffect)(()=>{},[am,a_]),(0,e.useEffect)(()=>{},[am,a_]);let bn=(0,e.useCallback)(a=>{if("fullscreen"!==a_||!a2.current||a.target.closest('button,[role="button"]'))return;a.preventDefault();let b=a2.current.getBoundingClientRect(),c=a.clientX,d=a.clientY;a$(a,"move",a=>{aT({...(0,E.RA)({x:b.left+a.clientX-c,y:b.top+a.clientY-d},{width:b.width,height:b.height},{width:window.innerWidth,height:window.innerHeight}),width:b.width,height:b.height})})},[a_,a$]),bo=(0,e.useCallback)((a,b,c)=>{if("fullscreen"!==a_||!a2.current)return;let d=a2.current.getBoundingClientRect(),e={x:d.left,y:d.top,width:d.width,height:d.height},f=a.clientX,g=a.clientY;a$(a,c,a=>{aT((0,E.hU)(e,b,a.clientX-f,a.clientY-g,{width:window.innerWidth,height:window.innerHeight},{width:Math.min(480,window.innerWidth),height:Math.min(320,window.innerHeight)}))})},[a_,a$]),bp=(0,E.ri)(a2,"fullscreen"===aQ&&!am);bm.current={toolName:D,args:R,resultContent:U,cancelledReason:aa,isError:ab,updateId:_},bg.current=D;let bq=(0,e.useRef)(ac);(0,e.useEffect)(()=>{bq.current=ac},[ac]);let br=(0,e.useRef)(ad);(0,e.useEffect)(()=>{br.current=ad},[ad]);let bs=(0,e.useRef)(ae);(0,e.useEffect)(()=>{bs.current=ae},[ae]);let bt=(0,e.useRef)(ap);(0,e.useEffect)(()=>{ap&&(bt.current=!0)},[ap]);let bu=(0,e.useRef)(af);(0,e.useEffect)(()=>{bu.current=af},[af]);let bv=(0,e.useRef)(ag);(0,e.useEffect)(()=>{bv.current=ag},[ag]);let bw=(0,e.useRef)(ai);(0,e.useEffect)(()=>{bw.current=ai},[ai]);let bx=(0,e.useRef)(aj);(0,e.useEffect)(()=>{bx.current=aj},[aj]);let by=(0,e.useRef)(am);(0,e.useEffect)(()=>{by.current=am},[am]),(0,e.useEffect)(()=>{be.current=a_},[a_]),(0,e.useEffect)(()=>{bf.current=a0},[a0]);let bz=(0,e.useCallback)(()=>{if(ba.current)return ba.current;a7.current+=1;let a=a5.current,b=a3.current,c=a8.current;a5.current=null,a3.current=null,a8.current=!1,a6.current=!1,bd.current=[],a9.current?.disconnect(),a9.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){F.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return ba.current=d,d.finally(()=>{ba.current===d&&(ba.current=null)}),d},[]),bA=(0,e.useCallback)(()=>{bb.current||!bs.current||aN.current||(bb.current=!0,bz().then(()=>{bc.current&&(bs.current?.(),aB(!1))}).finally(()=>{bb.current=!1}))},[bz]),bB=(0,e.useCallback)((a,b,c,d,e)=>{bk.current=bk.current.catch(()=>void 0).then(async()=>{a5.current===a&&a8.current&&await V(a,b,c,d,e)}).catch(a=>{F.warn("MCP App tool delivery failed",a)})},[]),bC=(0,e.useCallback)(async()=>{if(ba.current&&await ba.current,a6.current||!a1.current)return;let b=a7.current+1;a7.current=b;let d=()=>a7.current===b&&a6.current;a6.current=!0,aV([]),aD(!0),aF(null);try{var e,f,g,h,i,j;let k,l,[m,n]=await Promise.all([x.S.readResourceFromApp(c,u),Z(c,u,bg.current)]);if(!d())return;if(m?.httpStatus===403)throw Error(m?.error||as("chat.app.accessDisabled"));if(!m||!1===m.success)throw Error(m?.error||as("chat.app.readFailed"));let o=function(a,b){let c,d=a?.contents;if(!Array.isArray(d)||0===d.length)throw Error("Resource has no contents");let e=d.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,z.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!e)throw Error(`Resource ${b} did not return MCP App HTML`);try{if("string"==typeof e.text)c=e.text;else if("string"==typeof e.blob){var f;let a;f=e.blob,a=Uint8Array.from(atob(f),a=>a.charCodeAt(0)),c=new TextDecoder("utf-8",{fatal:!0}).decode(a)}else throw Error("Missing app resource body")}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(c).length>z.Pt)throw Error(`Resource exceeds the ${Math.round(z.Pt/1024)} KiB size cap`);let g=L(e._meta??e.meta),h=L(g?.ui),i=t.c0.safeParse(h?.csp);if(h?.csp!==void 0&&!i.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let j=t.Ml.safeParse(h?.permissions);if(h?.permissions!==void 0&&!j.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:c,csp:i.success?T(i.data):void 0,rawCsp:i.success?i.data:void 0,permissions:j.success&&j.data.clipboardWrite?{clipboardWrite:{}}:void 0,prefersBorder:"boolean"==typeof h?.prefersBorder?h.prefersBorder:void 0}}(m.data,u);aX(!1===o.prefersBorder);let p=await Q(c,u,a);if(!d()||!a1.current)return;p.allowAll&&o.rawCsp&&(o.csp=T(o.rawCsp,S(),!0));let q=document.createElement("iframe");q.title=as("chat.app.frameTitle",{uri:u}),q.setAttribute("sandbox","allow-scripts allow-same-origin"),q.referrerPolicy="origin";let r=(0,t.Sy)(o.permissions);r&&q.setAttribute("allow",r);let s=!1===o.prefersBorder?"transparent":"#fff";q.style.cssText=by.current||"fullscreen"===be.current?`width:100%;height:100%;border:none;background:${s};`:`width:100%;min-height:120px;height:200px;border:none;background:${s};`+(!1===o.prefersBorder?"":"border-radius:4px;"),a1.current.appendChild(q),a3.current=q;let v=new URL(p.href);o.csp&&v.searchParams.set("csp",JSON.stringify(o.csp));let w=v.origin,A=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error(as("chat.app.proxyTimeout")))},1e4),d=b=>{b.source===q.contentWindow&&b.origin===w&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(q.src=v.href,await A,!d()||a3.current!==q)return;let B=be.current,C="inline";be.current=C;let D=new t.T1((e=bi.current,f=a=>{a7.current===b&&a5.current===D&&(aF(a),aD(!1),bz().finally(()=>{by.current&&bx.current?.()}))},g=x.S,h=a=>F.info(`MCP App tools/call: ${c}/${a}`),{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(a,b)=>{let{method:d,params:i}=a;if("tools/call"===d){let a=y(i),d="string"==typeof a?.name?a.name:void 0;if(!d)throw Error("MCP App tool call is missing a tool name");h?.(d);let j=await g.callToolFromApp(c,d,y(a?.arguments)??{},void 0,b?.signal,e);if(j?.httpStatus===403){let a=j.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!j||!1===j.success)throw Error(j?.error||`Tool call failed: ${d}`);return j.data}if("resources/read"===d){let a=y(i),d="string"==typeof a?.uri?a.uri:void 0;if(!d)throw Error("MCP App resource read is missing a URI");let e=await g.readResourceFromApp(c,d,b?.signal);if(e?.httpStatus===403){let a=e.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!e||!1===e.success)throw Error(e?.error||`Resource read failed: ${d}`);return e.data}if("resources/list"===d)return{resources:[]};if("resources/templates/list"===d)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${d}`)}}),G,{openLinks:{},serverTools:{},serverResources:{},logging:{},...bq.current?{message:{text:{}}}:{},...br.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:o.csp,permissions:o.permissions}},{hostContext:{...n?{toolInfo:n}:{},theme:"dark"===ax.palette.mode?"dark":"light",platform:"web",displayMode:C,availableDisplayModes:bf.current,containerDimensions:Y(a1.current,by.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}});a5.current=D;let E=()=>d()&&a5.current===D;if(D.onopenlink=async({url:a})=>{if(!E())return{isError:!0};let b=function(a){try{let b=new URL(a);if(!H.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(a);if(!b)return F.warn("MCP App open-link rejected by URL policy",{serverName:c,uri:u}),{isError:!0};let d=window.open(b,"_blank","noopener,noreferrer");return d&&(d.opener=null),{}},D.ondownloadfile=async({contents:a})=>{if(!E())return{isError:!0};try{for(let b of a??[]){let a,c=L(L(b)?.resource);if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return F.warn("MCP App download failed",a),{isError:!0}}},D.onloggingmessage=a=>{E()&&F.debug("MCP App log",a?.data)},D.onmessage=async a=>{if(!E())return{};if(!bq.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){let b=L(a);if(b?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let c=b.content,d=Array.isArray(c)?c:c&&"object"==typeof c?[c]:[];if(0===d.length||!d.every(M))throw Error("This host accepts text-only ui/message content");let e=d.map(a=>a.text).join("\n").trim();if(!e)throw Error("ui/message text must not be empty");return e}(a);if(!await bq.current(b))throw Error("ui/message was not delivered");return{}},D.onupdatemodelcontext=async a=>{if(!E())return{};let b=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!J.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":N(a)>K?`Model context exceeds ${K} bytes`:null}(a);if(b)throw Error(b);let d=`${c}::${u}`;if(!br.current)throw Error("This host cannot preserve model context in this surface");if(!await br.current(d,a))throw Error("MCP App model context was not stored");return{}},D.onsizechange=async({width:a,height:b})=>{if(!E()||by.current)return;let c=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},a1.current?.getBoundingClientRect().width||a1.current?.clientWidth||0);void 0!==c.height&&(a4.current=c.height,"fullscreen"!==be.current&&(q.style.height=`${c.height}px`)),void 0!==c.width&&(q.style.width=`${c.width}px`,q.style.maxWidth="100%")},D.onrequestdisplaymode=async({mode:a})=>{if(!E())return{mode:be.current};let b=be.current,c=bd.current;if(!W(a,bf.current,c))return{mode:b};if("pip"===a&&!by.current&&bs.current)return setTimeout(bA,0),{mode:b};let d=b;return(d=bw.current?await bw.current(a,[...c]):a)===b||W(d,bf.current,c)||(d=b),d!==b&&(be.current=d,aR(d),await D.sendHostContextChange({displayMode:d})),{mode:d}},D.onrequestteardown=()=>{E()&&bz().finally(()=>{bx.current?bx.current():(be.current="inline",aR("inline"),aB(!1))})},D.oninitialized=()=>{var a,b,c,d;if(!E())return;let e=D.getAppCapabilities()?.availableDisplayModes,f=Array.isArray(e)?[...new Set(e.filter(a=>I.includes(a)))]:[];bd.current=f,aV(f),bu.current?.(f.includes("pip")),bv.current?.([...f]),a8.current=!0;let g=(a=B,b=by.current,c=bf.current,d=f,b?W("pip",c,d)?"fullscreen"===a&&W("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&W("fullscreen",c,d)?"fullscreen":"inline");if(null===g){aF(as("chat.app.canvasUnsupported")),aD(!1),bz();return}bt.current&&f.includes("pip")&&!by.current&&bs.current&&setTimeout(bA,0),be.current=g,aR(g),g!==C&&D.sendHostContextChange({displayMode:g});let h=a1.current;if(h&&"u">typeof ResizeObserver){let a=()=>{if(!E()||!a8.current)return;let a=h.getBoundingClientRect();a.width<=0||by.current&&a.height<=0||D.sendHostContextChange({containerDimensions:Y(h,by.current)})};a9.current?.disconnect(),a9.current=new ResizeObserver(a),a9.current.observe(h),a()}let i=bm.current;bl.current=X(i.toolName,i.updateId,i.args,i.resultContent,i.cancelledReason,i.isError),(void 0!==i.args||void 0!==i.resultContent||void 0!==i.cancelledReason||!0===i.isError)&&bB(D,i.args,i.resultContent,i.cancelledReason,i.isError),aD(!1)},await D.connect((i=q.contentWindow,j=q.contentWindow,k=new t.hJ(i,j),l={start:async()=>{k.onmessage=(a,b)=>{l.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},k.onerror=a=>l.onerror?.(a),k.onclose=()=>l.onclose?.(),await k.start()},send:(a,b)=>k.send(a,b),close:()=>k.close(),setProtocolVersion:a=>k.setProtocolVersion?.(a)})),!E())return;await D.sendSandboxResourceReady({html:o.html,csp:o.csp,permissions:o.permissions})}catch(a){if(!d())return;F.warn(`Failed to mount MCP App ${u} from ${c}`,a),aF(a instanceof Error?a.message:as("chat.app.loadFailed")),aD(!1),bz()}},[bA,az,bB,c,bz,ax.palette.mode,u,as]),bD=(0,e.useCallback)(()=>{!aC&&aM.current&&(aD(!0),aF(null),aN.current=null,bz().then(()=>{bc.current&&aM.current&&(O.delete(P((0,C.dJ)(),c,u,a)),bC())}))},[a,aC,bC,c,bz,u]),bE=(0,e.useCallback)(()=>{let a=!aA;a||"fullscreen"!==be.current||(be.current="inline",aR("inline"),a5.current?.sendHostContextChange({displayMode:"inline"})),a&&ar?.(),aB(a),a&&("internal"===aG||"granted"===aG)&&setTimeout(()=>{bC()},0)},[aG,aA,bC,ar]);(0,e.useEffect)(()=>{let a=aY.current;aY.current=ao,am||!ao||a||aA||aB(!0)},[ao,am,aA]),(0,e.useEffect)(()=>{am&&("internal"===aG||"granted"===aG)&&!a6.current&&bC()},[aG,am,bC]),(0,e.useEffect)(()=>{if(!am&&("internal"===aG||"granted"===aG)&&aA&&!a6.current){let a=window.setTimeout(()=>{bC()},0);return()=>window.clearTimeout(a)}},[aG,ao,am,aA,bC]),(0,e.useEffect)(()=>{let a=a3.current;if(a){if(am||"fullscreen"===a_){a.style.width="100%",a.style.height="100%",a.style.minHeight="0",a.style.borderRadius="0";return}a.style.width="100%",a.style.height=`${a4.current}px`,a.style.minHeight="120px",a.style.borderRadius=aW?"0":"4px"}},[aW,am,a_]),(0,e.useEffect)(()=>{bh.current===D&&bj.current===az||(bh.current=D,bj.current=az,(a6.current||ba.current)&&bz().then(()=>{bc.current&&(by.current||aA)&&bC()}))},[aA,bC,az,bz,D]),(0,e.useEffect)(()=>{let a=X(D,_,R,U,aa,ab);a8.current&&a5.current&&a!==bl.current&&(bl.current=a,bz().then(()=>{bc.current&&(by.current||aA)&&bC()}))},[aA,bC,bz,R,aa,ab,D,U,_]),(0,e.useEffect)(()=>{ah&&a8.current&&a5.current&&be.current!==ah&&W(ah,bf.current,bd.current)&&(be.current=ah,aR(ah),a5.current.sendHostContextChange({displayMode:ah}))},[ah]),(0,e.useEffect)(()=>{a8.current&&a5.current&&a5.current?.sendHostContextChange({theme:"dark"===ax.palette.mode?"dark":"light"})},[ax.palette.mode]),(0,e.useEffect)(()=>{let a=al??`${c}::${u}`;return ak?.(a,bz),()=>ak?.(a,null)},[ak,c,bz,al,u]),(0,e.useEffect)(()=>{let a=a=>{let b=a.detail;b?.serverName===c&&(b.config?.enableMcpApps===!1||b.config?.disabled===!0)&&(aF(as("chat.app.accessDisabled")),aD(!1),bz().finally(()=>{by.current&&bx.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",a),()=>{window.removeEventListener("flujo:mcp-server-config-changed",a)}},[c,bz,as]),(0,e.useEffect)(()=>(bc.current=!0,()=>{bc.current=!1,bz()}),[bz]);let bF=("internal"===aG||"granted"===aG)&&(0,d.jsx)(g.A,{disabled:aC,onClick:bD,sx:{minHeight:44,flexShrink:0},children:as("chat.app.reload")});if(am)return(0,d.jsxs)(h.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:an?"visible":"hidden",pointerEvents:an?"auto":"none",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"flex-end",flexShrink:0},children:bF}),av&&aw&&"loading"===aG&&(0,d.jsx)(i.A,{variant:"body2",sx:{p:2},children:as("chat.app.consentChecking")}),"prompt"===aG&&(0,d.jsxs)(h.default,{sx:{p:2},children:[(0,d.jsx)(i.A,{variant:"body2",sx:{mb:1},children:as("chat.app.consentPrompt")}),(0,d.jsxs)(i.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1},children:[c," — ",u]}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-once")},children:as("chat.app.consentAllowOnce")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aO("deny-always")},children:as("chat.app.consentNeverAllow")})]}),"denied"===aG&&(0,d.jsxs)(h.default,{sx:{p:2},children:[(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:as("chat.app.consentBlocked")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aP()},children:as("chat.app.consentAskAgain")})]}),aK&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aK}),("internal"===aG||"granted"===aG)&&aC&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:as("chat.app.loading")})]}),aE&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aE}),(0,d.jsx)(h.default,{ref:a1,sx:{flex:1,minHeight:0,width:"100%",display:aE?"none":"block"}})]});let bG=aU.includes("inline")&&aU.includes("fullscreen")&&a0.includes("fullscreen"),bH=aU.includes("inline")&&aU.includes("pip")&&a0.includes("pip")&&!!ae;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(h.default,{ref:a2,sx:{mt:1,...aW?{border:0,borderRadius:0}:{border:"1px solid",borderColor:"divider",borderRadius:1},overflow:"hidden",..."fullscreen"===aQ?{position:"fixed",left:(aS?.x??16)-bp.x,top:(aS?.y??16)-bp.y,width:aS?.width??"calc(100vw - 32px)",height:aS?.height??"calc(100vh - 32px)",minWidth:"min(480px, 100vw)",minHeight:"min(320px, 100vh)",maxWidth:"100vw",maxHeight:"100vh",zIndex:1300,bgcolor:"background.paper",boxShadow:6,display:"flex",flexDirection:"column"}:{}},children:["fullscreen"===aQ&&(0,d.jsx)(E.y1,{label:as("chat.canvas.resize"),onResizeStart:bo}),(0,d.jsxs)(h.default,{onPointerDown:bn,sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover",cursor:"fullscreen"===aQ?"move":"default",userSelect:"none",flexWrap:"wrap",flexShrink:0},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsx)(i.A,{variant:"body2",sx:{fontWeight:500},children:as("chat.app.fromServer",{server:c})}),aq>1&&(0,d.jsxs)(i.A,{variant:"caption",color:"text.secondary",children:["\xd7",aq]}),(0,d.jsx)(l.A,{title:as("chat.app.sandboxHelp"),children:(0,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(h.default,{sx:{flex:1}}),aA&&bF,aA&&bH&&(0,d.jsx)(g.A,{size:"small",onClick:bA,children:as("chat.app.canvas")}),aA&&(0,d.jsx)(l.A,{title:bG?"fullscreen"===aQ?as("chat.app.exitFullscreen"):as("chat.app.fullscreen"):as("chat.app.fullscreenUnsupported"),children:(0,d.jsx)("span",{children:(0,d.jsx)(g.A,{size:"small",disabled:!bG,"aria-label":"fullscreen"===aQ?as("chat.app.exitFullscreen"):as("chat.app.fullscreen"),onClick:()=>{let a="fullscreen"===aQ?"inline":"fullscreen";W(a,a0,aU)&&(be.current=a,aR(a),a5.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===aQ?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(g.A,{size:"small",onClick:bE,startIcon:aA?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:aA?as("chat.app.hide"):as("chat.app.open")})]}),aA&&"prompt"===aG&&(0,d.jsxs)(h.default,{sx:{p:1},children:[(0,d.jsx)(i.A,{variant:"body2",sx:{mb:1},children:as("chat.app.consentPrompt")}),(0,d.jsx)(i.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1},children:u}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-once")},children:as("chat.app.consentAllowOnce")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aO("deny-always")},children:as("chat.app.consentNeverAllow")})]}),aA&&"denied"===aG&&(0,d.jsxs)(h.default,{sx:{p:1},children:[(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:as("chat.app.consentBlocked")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,onClick:()=>{aO("allow-always")},children:as("chat.app.consentAllowAlways")}),(0,d.jsx)(g.A,{size:"small",disabled:aI,color:"inherit",onClick:()=>{aP()},children:as("chat.app.consentAskAgain")})]}),aA&&aK&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aK}),(0,d.jsx)(m.A,{in:aA&&("internal"===aG||"granted"===aG),onExited:()=>{bz()},sx:"fullscreen"===aQ?{flex:1,minHeight:0,display:"flex",flexDirection:"column","& .MuiCollapse-wrapper, & .MuiCollapse-wrapperInner":{height:"100%",minHeight:0,display:"flex",flexDirection:"column"}}:void 0,children:(0,d.jsxs)(h.default,{sx:{p:1,height:"fullscreen"===aQ?"100%":"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[aC&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:as("chat.app.loading")})]}),aE&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:aE}),(0,d.jsx)(h.default,{ref:a1,sx:{width:"100%",flex:"fullscreen"===aQ?1:void 0,minHeight:0,height:"fullscreen"===aQ?"100%":"auto",display:aE?"none":"block"}})]})})]}),(0,d.jsx)(E.Fy,{cursor:aZ})]})}},597701:(a,b,c)=>{c.d(b,{aI:()=>d,$Z:()=>h,Th:()=>e,BC:()=>s});let d=300,e=-1;var f=c(935705),g=c(866547);let h=8,i=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,j=/^sha256:[0-9a-f]{64}$/;class k extends Error{constructor(a){super(a),this.name="McpSkillsValidationError"}}function l(a){throw new k(a)}function m(a,b){return(null===a||"object"!=typeof a||Array.isArray(a))&&l(`${b} must be an object`),a}function n(a){let b;"string"==typeof a&&a||l("resource URI must be a non-empty string"),a.includes("\\")&&l("resource URI must use forward slashes");try{b=new URL(a)}catch{l("resource URI must be an absolute URI")}(!b.protocol||b.username||b.password||b.port||b.search||b.hash)&&l("resource URI must have no credentials, port, query, or fragment");var c="resource URI";let d=b.pathname.split("/");for(let a=0;a<d.length;a+=1){let b,e=d[a];if(0!==a||""!==e){e||l(`${c} contains an empty path segment`);try{b=decodeURIComponent(e)}catch{l(`${c} contains invalid percent encoding`)}("."===b||".."===b||b.includes("/")||b.includes("\\"))&&l(`${c} contains an unsafe path segment`)}}return b.href}function o(a){let b,c=n(a),d=new URL(c),e=d.pathname.split("/").filter(Boolean);"SKILL.md"!==e[e.length-1]&&l("skill URI must identify a top-level SKILL.md");let f=e.slice(0,-1),g=f.length>0?f[f.length-1]:d.hostname;try{b=decodeURIComponent(g)}catch{l("skill URI contains an invalid name")}p(b);let h=c.slice(0,-9);return{normalizedUri:c,rootUri:h,name:b,scheme:d.protocol.slice(0,-1)}}function p(a){return("string"!=typeof a||a.length<1||a.length>64||!i.test(a))&&l("skill name must be 1-64 lowercase alphanumeric or hyphen characters without leading, trailing, or consecutive hyphens"),a}function q(a){let b={};return void 0!==a.ttlMs&&(("number"!=typeof a.ttlMs||!Number.isInteger(a.ttlMs)||a.ttlMs<0)&&l("ttlMs must be a non-negative integer"),b.ttlMs=a.ttlMs),void 0!==a.cacheScope&&("public"!==a.cacheScope&&"private"!==a.cacheScope&&l('cacheScope must be "public" or "private"'),b.cacheScope=a.cacheScope),b}function r(a){var b,c;let d,e,f=m(a,"skill entry"),g=o(f.uri),h=(b=f.frontmatter,c=g.name,(e=p((d=m(b,"skill frontmatter")).name))!==c&&l("skill frontmatter name must match the final skill path segment"),("string"!=typeof d.description||d.description.length<1||d.description.length>1024)&&l("skill description must be a non-empty string of at most 1024 characters"),{...d,name:e,description:d.description});if("dynamic"===f.resources)return{uri:g.normalizedUri,frontmatter:h,resources:"dynamic"};Array.isArray(f.resources)||l('skill resources must be a complete array or "dynamic"'),(f.resources.length<1||f.resources.length>512)&&l("skill resources must contain 1-512 entries");let i=new Set,k=0,q=!1,r=f.resources.map((a,b)=>{var c;let d=m(a,`skill resource ${b}`),e=n(d.uri);e===g.normalizedUri||e.startsWith(`${g.rootUri}/`)||l("skill resource URI must be contained within the skill root"),i.has(e)&&l("skill resource URIs must be unique"),i.add(e),("number"!=typeof d.size||!Number.isSafeInteger(d.size)||d.size<0)&&l("skill resource size must be a non-negative safe integer");let f=("string"==typeof(c=d.digest)&&j.test(c)||l("skill resource digest must be sha256 followed by 64 lowercase hex characters"),c);return(k+=d.size)>0x1000000&&l("skill resources exceed the 16777216-byte limit"),e===g.normalizedUri&&(q=!0),{uri:e,digest:f,size:d.size}});return q||l("skill resources must include the top-level SKILL.md"),{uri:g.normalizedUri,frontmatter:h,resources:r}}function s(a,b,c){return JSON.stringify([a,o(b).normalizedUri,c])}function t(a){return a.catch(({error:a})=>{throw new g.Nh(g.O4.InvalidParams,"Invalid Skills request parameters.",{issues:a.issues.map(({path:a,message:b})=>({path:a,message:b}))})})}f.Ikc({method:f.euz("skills/list"),params:t(f.Ikc({cursor:f.YjP().optional()}).optional())}),f.Ikc({method:f.euz("skills/get"),params:t(f.Ikc({uri:f.YjP().min(1)}))}),f.Ikc({method:f.euz("resources/directory/read"),params:t(f.Ikc({uri:f.YjP().min(1),cursor:f.YjP().optional()}))}),f.L5J().transform(a=>(function(a){let b=m(a,"skills/list result");"complete"!==b.resultType&&l('skills/list resultType must be "complete"'),Array.isArray(b.skills)||l("skills/list skills must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&l("skills/list nextCursor must be a string");let c=b.skills.map(r),d=new Set;for(let a of c)d.has(a.uri)&&l("skills/list skill URIs must be unique"),d.add(a.uri);return{resultType:"complete",skills:c,...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...q(b)}})(a)),f.L5J().transform(a=>{let b;return"complete"!==(b=m(a,"skills/get result")).resultType&&l('skills/get resultType must be "complete"'),{resultType:"complete",skill:r(b.skill),...q(b)}}),f.L5J().transform(a=>{let b;return"complete"!==(b=m(a,"resources/directory/read result")).resultType&&l('resources/directory/read resultType must be "complete"'),Array.isArray(b.resources)||l("resources/directory/read resources must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&l("resources/directory/read nextCursor must be a string"),{resultType:"complete",resources:b.resources.map((a,b)=>{let c=m(a,`directory resource ${b}`),d=n(c.uri);return"string"==typeof c.name&&c.name||l("directory resource name must be a non-empty string"),void 0!==c.description&&"string"!=typeof c.description&&l("directory resource description must be a string"),void 0!==c.mimeType&&"string"!=typeof c.mimeType&&l("directory resource mimeType must be a string"),{...c,uri:d,name:c.name,...void 0===c.description?{}:{description:c.description},...void 0===c.mimeType?{}:{mimeType:c.mimeType}}}),...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...q(b)}})},803146:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}},915380:(a,b,c)=>{c.d(b,{Fy:()=>n,LI:()=>m,RA:()=>i,eH:()=>k,hU:()=>j,ri:()=>l,y1:()=>q});var d=c(548249),e=c(367484),f=c(398635);let g=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),h={x:0,y:0};function i(a,b,c){return{x:g(a.x,0,Math.max(0,c.width-b.width)),y:g(a.y,0,Math.max(0,c.height-b.height))}}function j(a,b,c,d,e,f){let h=b.includes("left"),i=b.includes("right"),j=b.includes("top"),k=b.includes("bottom"),l=a.x+a.width,m=a.y+a.height,n=a.x,o=a.y,p=a.width,q=a.height;return h?(n=g(a.x+c,0,l-f.width),p=l-n):i&&(p=g(a.width+c,f.width,e.width-a.x)),j?(o=g(a.y+d,0,m-f.height),q=m-o):k&&(q=g(a.height+d,f.height,e.height-a.y)),{x:n,y:o,width:p,height:q}}function k(a,b,c){let d=g(a.width,c.width,b.width),e=g(a.height,c.height,b.height);return{x:g(a.x,0,b.width-d),y:g(a.y,0,b.height-e),width:d,height:e}}function l(a,b){let[c,d]=(0,e.useState)(h);return c}function m(){let[a,b]=(0,e.useState)(null),c=(0,e.useRef)(null),d=(0,e.useRef)(!0);return{activeCursor:a,startPointerDrag:(0,e.useCallback)((a,e,f)=>{c.current?.(),a.preventDefault(),a.stopPropagation();let g=a.currentTarget,h=a.pointerId,i=g.ownerDocument,j=i.defaultView??window,k=i.body.style.userSelect,l=i.body.style.cursor;try{g.setPointerCapture?.(h)}catch{}i.body.style.userSelect="none",i.body.style.cursor=e??"",b(e);let m=a=>{a.pointerId===h&&(a.preventDefault(),f(a))},n=(a=!0)=>{j.removeEventListener("pointermove",m,!0),j.removeEventListener("pointerup",o,!0),j.removeEventListener("pointercancel",o,!0);try{g.hasPointerCapture?.(h)&&g.releasePointerCapture(h)}catch{}i.body.style.userSelect=k,i.body.style.cursor=l,a&&d.current&&b(null),c.current===n&&(c.current=null)},o=a=>{a.pointerId===h&&n()};c.current=n,j.addEventListener("pointermove",m,!0),j.addEventListener("pointerup",o,!0),j.addEventListener("pointercancel",o,!0)},[])}}let n=({cursor:a})=>a?(0,d.jsx)(f.default,{"aria-hidden":!0,"data-testid":"pointer-drag-shield",sx:{position:"fixed",inset:0,zIndex:0x7ffffffe,cursor:a,touchAction:"none"}}):null,o={top:{top:-3,left:10,right:10,height:8},right:{right:-3,top:10,bottom:10,width:8},bottom:{bottom:-3,left:10,right:10,height:8},left:{left:-3,top:10,bottom:10,width:8},"top-left":{top:-3,left:-3,width:14,height:14},"top-right":{top:-3,right:-3,width:14,height:14},"bottom-left":{bottom:-3,left:-3,width:14,height:14},"bottom-right":{bottom:-3,right:-3,width:14,height:14}},p=Object.keys(o),q=({label:a,onResizeStart:b})=>(0,d.jsx)(d.Fragment,{children:p.map(c=>{let e="top"===c||"bottom"===c?"ns-resize":"left"===c||"right"===c?"ew-resize":"top-left"===c||"bottom-right"===c?"nwse-resize":"nesw-resize";return(0,d.jsx)(f.default,{component:"span",role:"separator","aria-label":`${a} (${c})`,onPointerDown:a=>b(a,c,e),sx:{position:"absolute",zIndex:8,cursor:e,touchAction:"none",...o[c],..."bottom-right"===c?{"&::after":{content:'""',position:"absolute",right:3,bottom:3,width:7,height:7,borderRight:2,borderBottom:2,borderColor:"text.secondary",opacity:.7}}:{}}},c)})})}};
@@ -1 +1 @@
1
- "use strict";exports.id=87068,exports.ids=[87068],exports.modules={87068:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{C9:()=>t,Go:()=>z,X_:()=>A,synchronizeAssignedWorkItemFromActivity:()=>x,synchronizeAssignedWorkItemFromActivityWithinRuntimeLock:()=>y,vp:()=>s}),c(977598);var e=c(700948),f=c(825867),g=c(299883),h=c(581991),i=c(14130),j=c(535843),k=c(949219),l=c(792992),m=c(274050),n=c(71392),o=c(662457),p=a([f,i,m]);[f,i,m]=p.then?(await p)():p;let B=e.object({statuses:e.array(e.enum(g.wh)).optional(),priorities:e.array(e.enum(g.mc)).optional(),dueBefore:e.number().int().nonnegative().optional(),includeBlockedByDependencies:e.boolean().optional()}).strict(),C=e.object({activityId:g.Qy.optional(),todoId:e.string().trim().min(1).max(512),title:e.string().trim().min(1).max(500).optional(),description:e.string().trim().max(1e5).optional(),priority:e.enum(g.mc).optional(),nextAction:e.string().trim().max(2e4).optional(),deadline:e.number().int().nonnegative().optional()}).strict(),D={urgent:0,high:1,normal:2,low:3};function q(a,b){if(!a||a.personaId!==b)throw new j.SZ("PersonaWorkItem",a?.id??"unknown");return a}function r(a,b,c){let d=new Map(c.map(a=>[a.id,a]));for(let c of(d.set(b.id,b),b.dependencyIds)){let b=d.get(c);if(!b||b.personaId!==a)throw new j.TP(`WorkItem dependency ${JSON.stringify(c)} is missing or belongs to another Persona.`)}let e=new Map;for(let a of d.values())a.parentGoalId&&e.set(a.parentGoalId,[...e.get(a.parentGoalId)??[],a.id]);let f=new Set,g=new Set,h=a=>{if(f.has(a))throw new j.TP("WorkItem dependencies must remain acyclic, including ongoing goal completion and inherited prerequisites.");if(g.has(a))return;f.add(a);let b=d.get(a);for(let a of[...b?.dependencyIds??[],...b?.goal?e.get(b.id)??[]:[],...b?.parentGoalId?d.get(b.parentGoalId)?.dependencyIds??[]:[]])h(a);f.delete(a),g.add(a)};if(h(b.id),("in_progress"===b.status||"completed"===b.status)&&b.dependencyIds.filter(a=>d.get(a)?.status!=="completed").length>0)throw new j.TP(`WorkItem cannot be ${b.status} while dependencies remain incomplete.`)}async function s(a,b={}){let c=g.s7.parse(a);if(void 0!==b.initialGoalState&&("paused"!==b.initialGoalState||!c.goal||c.parentGoalId||b.executionAuthority))throw new j.TP("Paused admission requires an owner-created Goal root.");let d=async({activity:a})=>{let d=Date.now(),e=c.id??(0,k.WK)("work");if(await (0,o.getPersonaWorkItem)(c.personaId,e))throw new j.TP(`WorkItem ${JSON.stringify(e)} already exists.`);if(c.createdByActivityId&&a&&c.createdByActivityId!==a.id)throw new j.TP("A Flow cannot attribute a WorkItem to another Activity.");let f=a?.kind==="assignment"&&a.source.sourceId?await (0,o.getPersonaWorkItem)(c.personaId,a.source.sourceId):null,h=c.goal?void 0:f?.goal?f.id:f?.parentGoalId;if(h&&c.parentGoalId&&c.parentGoalId!==h)throw new j.TP("Tasks created during an ongoing goal must belong to that goal.");let i=c.parentGoalId??h;if(i){let a=await (0,o.getPersonaWorkItem)(c.personaId,i);if(!a?.goal||"active"!==a.goal.state||c.goal)throw new j.TP("A child Task requires an active ongoing goal in this Persona.")}let n=g.s0.parse({schemaVersion:g.cq,id:e,personaId:c.personaId,title:c.title,...c.description?{description:c.description}:{},...i?{parentGoalId:i}:{},...c.goal?{goal:{...(0,m.tb)(c.goal,d),..."paused"===b.initialGoalState?{state:"paused",nextRunAt:void 0,interventionReason:"Owner admission awaits separately qualified activation."}:{}}}:{},...c.goal&&b.goalCreateRequestDigest?{goalCreateRequestDigest:b.goalCreateRequestDigest}:{},status:"open",priority:c.priority??"normal",dependencyIds:c.dependencyIds??[],...c.nextAction?{nextAction:c.nextAction}:{},...void 0!==c.deadline?{deadline:c.deadline}:{},...a?.id||c.createdByActivityId?{createdByActivityId:a?.id??c.createdByActivityId}:{},...a?.behaviorRevisionId?{behaviorRevisionId:a.behaviorRevisionId}:{},...c.sourceRefs?.length?{sourceRefs:(0,l.c)(c.sourceRefs,{now:d})}:{},createdAt:d,updatedAt:d});return r(c.personaId,n,await (0,o.listPersonaWorkItems)(c.personaId)),(0,o.savePersonaWorkItem)(n)},e=b.executionAuthority?await (0,j.g7)(c.personaId,b,d):await (0,n._T)(c.personaId,async()=>{if(!await (0,o.getPersona)(c.personaId)||await (0,o.getPersonaDeletionTombstone)(c.personaId))throw new j.SZ("Persona",c.personaId);let a=await (0,o.getPersonaLease)(c.personaId);if(a?.status==="active"&&a.expiresAt>Date.now()&&(c.goal||c.parentGoalId||c.createdByActivityId||b.nextRoleVersionId))throw new j.q2(c.personaId);return d({})});return(e.goal||e.parentGoalId)&&(0,m.PV)(e.personaId),e}async function t(a,b,c,d={}){g.Qy.parse(a),g.Qy.parse(b);let e=g.V8.parse(c),f=await (0,j.g7)(a,d,async()=>{let c=q(await (0,o.getPersonaWorkItem)(a,b),a);if(void 0!==e.expectedUpdatedAt&&e.expectedUpdatedAt!==c.updatedAt)throw new j.TP("WorkItem changed since it was inspected.","PERSONA_WORK_ITEM_CHANGED");if(c.parentGoalId&&c.goalControlState&&void 0!==e.status&&e.status!==c.status)throw new j.TP(`This goal Task was ${c.goalControlState} by its owner. Only an explicit owner control can change its lifecycle.`,"PERSONA_GOAL_TASK_OWNER_CONTROLLED");if(!d.executionAuthority&&void 0!==e.status&&e.status!==c.status&&("completed"===e.status||"cancelled"===e.status)&&(await u(a,b)).length>0)throw new j.TP("completed"===e.status?"This Task is still active. Let it finish normally, or Stop it first.":"This Task is still active. Use Stop so its work ends safely.","PERSONA_WORK_ITEM_ACTIVE",{reason:"active_assignment"});let f=Math.max(Date.now(),c.updatedAt+1),h=c.goal&&d.executionAuthority&&"blocked"===e.status?"open":e.status??c.status,i=await (0,o.listPersonaWorkItems)(a);if(e.goal&&!c.goal)throw new j.TP("Only an ongoing goal has continuation settings.");if(c.goal&&void 0!==e.status&&e.status!==c.status){if("completed"===c.goal.state||"stopped"===c.goal.state)throw new j.TP("A completed or stopped ongoing goal cannot be reopened.");if(!d.executionAuthority&&"completed"!==e.status)throw new j.TP("Use the ongoing goal Pause, Stop, or Resume controls to change its lifecycle safely.");if(d.executionAuthority&&"cancelled"===e.status)throw new j.TP("Keep an ongoing goal active and report blockers. Only its owner can stop it.");if(d.executionAuthority&&"completed"===e.status)throw new j.TP("Report verified goal success with report_activity_outcome and finish the Activity. The runtime completes the goal only after the Activity ends successfully.")}if(c.goal&&"completed"===h&&i.some(a=>a.parentGoalId===c.id&&!["completed","cancelled"].includes(a.status)))throw new j.TP("Finish or cancel this goal’s remaining Tasks before completing the goal.");let k=c.goal?{...c.goal,...e.goal??{},maxRounds:e.goal?.maxRounds===null?void 0:e.goal?.maxRounds??c.goal.maxRounds}:void 0,l=k?{...k,..."completed"===e.status?{...(0,m.a2)(k),state:"completed",nextRunAt:void 0}:{},..."cancelled"===e.status?{...(0,m.a2)(k),state:"stopped",nextRunAt:void 0}:{},...!d.executionAuthority&&"blocked"===e.status?{state:"paused",nextRunAt:void 0}:{},...!d.executionAuthority&&"open"===e.status?{state:"active",nextRunAt:f}:{}}:void 0,n=g.s0.parse({...c,...void 0!==e.title?{title:e.title}:{},description:null===e.description?void 0:e.description??c.description,status:h,...l?{goal:l}:{},...void 0!==e.priority?{priority:e.priority}:{},...void 0!==e.dependencyIds?{dependencyIds:e.dependencyIds}:{},nextAction:null===e.nextAction?void 0:e.nextAction??c.nextAction,deadline:null===e.deadline?void 0:e.deadline??c.deadline,...void 0!==e.status?{deferredUntil:void 0}:{},updatedAt:f,completedAt:"completed"===h?c.completedAt??f:void 0});return r(a,n,i),(0,o.savePersonaWorkItem)(n)});return void 0!==e.priority&&await (0,i.reprioritizePersonaWorkItemDispatches)({personaId:a,workItemId:b,priority:f.priority}),(f.goal||f.parentGoalId)&&(0,m.PV)(a),f}async function u(a,b){return(await (0,i.listPersonaFlowDispatches)(a)).filter(c=>c.personaId===a&&"assignment"===c.admission.kind&&"assignment"===c.admission.source.kind&&c.admission.source.sourceId===b&&"completed"!==c.state&&"error"!==c.state&&"cancelled"!==c.state)}function v(a){return"assignment"===a.kind&&"assignment"===a.source.kind&&!!a.source.sourceId&&("completed"===a.status||"error"===a.status||"cancelled"===a.status)}async function w(a){let b=await (0,o.getPersonaWorkItem)(a.personaId,a.source.sourceId);if(!b||b.personaId!==a.personaId)return null;if(b.goal||b.parentGoalId){let c=b.goal?b:await (0,o.getPersonaWorkItem)(a.personaId,b.parentGoalId);if(!c?.goal||"active"!==c.goal.state||c.goal.pendingTaskId!==b.id)return b;let d=c.goal.pendingDispatchId;if(!d||a.entryPointPayloadRef!==d&&(await (0,i.getPersonaFlowDispatch)(d))?.activityId!==a.id)return b;let e=await (0,o.listPersonaWorkItems)(a.personaId),f=Math.max(Date.now(),c.updatedAt+1,b.updatedAt+1,a.completedAt??0),h=(0,m.Jh)(c,b,a,e,f);if(h.root===c)return b;let j=b;return b.id===c.id||["completed","cancelled","blocked"].includes(b.status)||(j=g.s0.parse({...b,status:h.taskStatus,nextAction:a.outcome?.nextAction??b.nextAction,deferredUntil:h.taskDeferredUntil,updatedAt:f,completedAt:"completed"===h.taskStatus?f:void 0}),r(a.personaId,j,e),await (0,o.savePersonaWorkItem)(j)),await (0,o.savePersonaWorkItem)(h.root),(0,m.PV)(a.personaId),b.id===c.id?h.root:j}if("completed"===b.status||"cancelled"===b.status||"blocked"===b.status)return b;let c="completed"===a.status&&a.outcome?.resolution==="succeeded"?"completed":"cancelled"===a.status?"cancelled":"blocked",d=await (0,o.listPersonaWorkItems)(a.personaId);"completed"===c&&b.dependencyIds.some(a=>d.find(b=>b.id===a)?.status!=="completed")&&(c="blocked");let e=Math.max(Date.now(),b.updatedAt+1,a.updatedAt,a.completedAt??0),f="completed"===c?Math.max(b.createdAt,a.completedAt??e):void 0,h=g.s0.parse({...b,status:c,..."blocked"===c?{nextAction:a.outcome?.nextAction??b.nextAction??"Review the Activity result and decide the next safe action."}:{},updatedAt:e,completedAt:f});return r(a.personaId,h,d),(0,o.savePersonaWorkItem)(h)}async function x(a){if(!v(a))return null;let b=await (0,o.getPersonaWorkItem)(a.personaId,a.source.sourceId);return b&&b.personaId===a.personaId?(0,j.g7)(a.personaId,{},async()=>w(a)):null}async function y(a,b){return v(a)?(await b.assertOwned(),w(a)):null}async function z(a,b={}){g.Qy.parse(a);let c=B.parse(b),d=await (0,o.listPersonaWorkItems)(a,{statuses:c.statuses,priorities:c.priorities,dueBefore:c.dueBefore}),e=new Map((!1===c.includeBlockedByDependencies?await (0,o.listPersonaWorkItems)(a):d).map(a=>[a.id,a]));return d.filter(a=>(!c.statuses?.length||c.statuses.includes(a.status))&&(!c.priorities?.length||c.priorities.includes(a.priority))&&(void 0===c.dueBefore||void 0!==a.deadline&&a.deadline<=c.dueBefore)&&(!1!==c.includeBlockedByDependencies||a.dependencyIds.every(a=>e.get(a)?.status==="completed"))).sort((a,b)=>D[a.priority]-D[b.priority]||(a.deadline??Number.MAX_SAFE_INTEGER)-(b.deadline??Number.MAX_SAFE_INTEGER)||b.updatedAt-a.updatedAt||a.id.localeCompare(b.id))}async function A(a,b,c={}){g.Qy.parse(a);let d=C.parse(b);return(0,j.g7)(a,c,async({activity:b})=>{let c=b?.id??d.activityId;if(!c)throw new j.TP("Todo promotion requires an owning Activity.");if(b&&d.activityId&&d.activityId!==b.id)throw new j.TP("A live Activity cannot promote another Activity's todo.");let e=b??await (0,o.getPersonaActivity)(a,c);if(!e||e.personaId!==a||!e.conversationId)throw new j.SZ("PersonaActivity",c);let i=await (0,f.loadConversationState)(e.conversationId),n=i?.todos?.find(a=>a.id===d.todoId);if(!n||"done"===n.status||"cancelled"===n.status)throw new j.SZ("Promotable run todo",d.todoId);let p=(0,k.k$)("work",{purpose:"run-todo-promotion-v1",workspaceId:(0,h.getCurrentWorkspace)(),personaId:a,activityId:e.id,todoId:n.id}),r=await (0,o.getPersonaWorkItem)(a,p);if(r)return q(r,a);let s=Date.now(),t=(0,l.c)([{kind:"activity",id:e.id,uri:`flujo://activity/${e.id}/todo/${n.id}`,observedAt:n.updatedAt}],{now:s,producer:"explicit-todo-promotion",digestMaterial:n}),u="assignment"===e.kind&&e.source.sourceId?await (0,o.getPersonaWorkItem)(a,e.source.sourceId):null,v=u?.goal?u.id:u?.parentGoalId;if(v){let b=await (0,o.getPersonaWorkItem)(a,v);if(b?.goal?.state!=="active")throw new j.TP("The ongoing goal is no longer active.");(0,m.PV)(a)}return(0,o.savePersonaWorkItem)(g.s0.parse({schemaVersion:g.cq,id:p,personaId:a,title:d.title??n.content,...v?{parentGoalId:v}:{},...d.description?{description:d.description}:{},status:"in_progress"===n.status?"in_progress":"open",priority:d.priority??"normal",dependencyIds:[],nextAction:d.nextAction??n.content,...void 0!==d.deadline?{deadline:d.deadline}:{},createdByActivityId:e.id,...e.behaviorRevisionId?{behaviorRevisionId:e.behaviorRevisionId}:{},sourceRefs:t,createdAt:s,updatedAt:s}))})}d()}catch(a){d(a)}})}};
1
+ "use strict";exports.id=87068,exports.ids=[87068],exports.modules={87068:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{C9:()=>t,Go:()=>z,X_:()=>A,synchronizeAssignedWorkItemFromActivity:()=>x,synchronizeAssignedWorkItemFromActivityWithinRuntimeLock:()=>y,vp:()=>s}),c(977598);var e=c(700948),f=c(825867),g=c(299883),h=c(581991),i=c(14130),j=c(758224),k=c(949219),l=c(792992),m=c(274050),n=c(71392),o=c(662457),p=a([f,i,m]);[f,i,m]=p.then?(await p)():p;let B=e.object({statuses:e.array(e.enum(g.wh)).optional(),priorities:e.array(e.enum(g.mc)).optional(),dueBefore:e.number().int().nonnegative().optional(),includeBlockedByDependencies:e.boolean().optional()}).strict(),C=e.object({activityId:g.Qy.optional(),todoId:e.string().trim().min(1).max(512),title:e.string().trim().min(1).max(500).optional(),description:e.string().trim().max(1e5).optional(),priority:e.enum(g.mc).optional(),nextAction:e.string().trim().max(2e4).optional(),deadline:e.number().int().nonnegative().optional()}).strict(),D={urgent:0,high:1,normal:2,low:3};function q(a,b){if(!a||a.personaId!==b)throw new j.SZ("PersonaWorkItem",a?.id??"unknown");return a}function r(a,b,c){let d=new Map(c.map(a=>[a.id,a]));for(let c of(d.set(b.id,b),b.dependencyIds)){let b=d.get(c);if(!b||b.personaId!==a)throw new j.TP(`WorkItem dependency ${JSON.stringify(c)} is missing or belongs to another Persona.`)}let e=new Map;for(let a of d.values())a.parentGoalId&&e.set(a.parentGoalId,[...e.get(a.parentGoalId)??[],a.id]);let f=new Set,g=new Set,h=a=>{if(f.has(a))throw new j.TP("WorkItem dependencies must remain acyclic, including ongoing goal completion and inherited prerequisites.");if(g.has(a))return;f.add(a);let b=d.get(a);for(let a of[...b?.dependencyIds??[],...b?.goal?e.get(b.id)??[]:[],...b?.parentGoalId?d.get(b.parentGoalId)?.dependencyIds??[]:[]])h(a);f.delete(a),g.add(a)};if(h(b.id),("in_progress"===b.status||"completed"===b.status)&&b.dependencyIds.filter(a=>d.get(a)?.status!=="completed").length>0)throw new j.TP(`WorkItem cannot be ${b.status} while dependencies remain incomplete.`)}async function s(a,b={}){let c=g.s7.parse(a);if(void 0!==b.initialGoalState&&("paused"!==b.initialGoalState||!c.goal||c.parentGoalId||b.executionAuthority))throw new j.TP("Paused admission requires an owner-created Goal root.");let d=async({activity:a})=>{let d=Date.now(),e=c.id??(0,k.WK)("work");if(await (0,o.getPersonaWorkItem)(c.personaId,e))throw new j.TP(`WorkItem ${JSON.stringify(e)} already exists.`);if(c.createdByActivityId&&a&&c.createdByActivityId!==a.id)throw new j.TP("A Flow cannot attribute a WorkItem to another Activity.");let f=a?.kind==="assignment"&&a.source.sourceId?await (0,o.getPersonaWorkItem)(c.personaId,a.source.sourceId):null,h=c.goal?void 0:f?.goal?f.id:f?.parentGoalId;if(h&&c.parentGoalId&&c.parentGoalId!==h)throw new j.TP("Tasks created during an ongoing goal must belong to that goal.");let i=c.parentGoalId??h;if(i){let a=await (0,o.getPersonaWorkItem)(c.personaId,i);if(!a?.goal||"active"!==a.goal.state||c.goal)throw new j.TP("A child Task requires an active ongoing goal in this Persona.")}let n=g.s0.parse({schemaVersion:g.cq,id:e,personaId:c.personaId,title:c.title,...c.description?{description:c.description}:{},...i?{parentGoalId:i}:{},...c.goal?{goal:{...(0,m.tb)(c.goal,d),..."paused"===b.initialGoalState?{state:"paused",nextRunAt:void 0,interventionReason:"Owner admission awaits separately qualified activation."}:{}}}:{},...c.goal&&b.goalCreateRequestDigest?{goalCreateRequestDigest:b.goalCreateRequestDigest}:{},status:"open",priority:c.priority??"normal",dependencyIds:c.dependencyIds??[],...c.nextAction?{nextAction:c.nextAction}:{},...void 0!==c.deadline?{deadline:c.deadline}:{},...a?.id||c.createdByActivityId?{createdByActivityId:a?.id??c.createdByActivityId}:{},...a?.behaviorRevisionId?{behaviorRevisionId:a.behaviorRevisionId}:{},...c.sourceRefs?.length?{sourceRefs:(0,l.c)(c.sourceRefs,{now:d})}:{},createdAt:d,updatedAt:d});return r(c.personaId,n,await (0,o.listPersonaWorkItems)(c.personaId)),(0,o.savePersonaWorkItem)(n)},e=b.executionAuthority?await (0,j.g7)(c.personaId,b,d):await (0,n._T)(c.personaId,async()=>{if(!await (0,o.getPersona)(c.personaId)||await (0,o.getPersonaDeletionTombstone)(c.personaId))throw new j.SZ("Persona",c.personaId);let a=await (0,o.getPersonaLease)(c.personaId);if(a?.status==="active"&&a.expiresAt>Date.now()&&(c.goal||c.parentGoalId||c.createdByActivityId||b.nextRoleVersionId))throw new j.q2(c.personaId);return d({})});return(e.goal||e.parentGoalId)&&(0,m.PV)(e.personaId),e}async function t(a,b,c,d={}){g.Qy.parse(a),g.Qy.parse(b);let e=g.V8.parse(c),f=await (0,j.g7)(a,d,async()=>{let c=q(await (0,o.getPersonaWorkItem)(a,b),a);if(void 0!==e.expectedUpdatedAt&&e.expectedUpdatedAt!==c.updatedAt)throw new j.TP("WorkItem changed since it was inspected.","PERSONA_WORK_ITEM_CHANGED");if(c.parentGoalId&&c.goalControlState&&void 0!==e.status&&e.status!==c.status)throw new j.TP(`This goal Task was ${c.goalControlState} by its owner. Only an explicit owner control can change its lifecycle.`,"PERSONA_GOAL_TASK_OWNER_CONTROLLED");if(!d.executionAuthority&&void 0!==e.status&&e.status!==c.status&&("completed"===e.status||"cancelled"===e.status)&&(await u(a,b)).length>0)throw new j.TP("completed"===e.status?"This Task is still active. Let it finish normally, or Stop it first.":"This Task is still active. Use Stop so its work ends safely.","PERSONA_WORK_ITEM_ACTIVE",{reason:"active_assignment"});let f=Math.max(Date.now(),c.updatedAt+1),h=c.goal&&d.executionAuthority&&"blocked"===e.status?"open":e.status??c.status,i=await (0,o.listPersonaWorkItems)(a);if(e.goal&&!c.goal)throw new j.TP("Only an ongoing goal has continuation settings.");if(c.goal&&void 0!==e.status&&e.status!==c.status){if("completed"===c.goal.state||"stopped"===c.goal.state)throw new j.TP("A completed or stopped ongoing goal cannot be reopened.");if(!d.executionAuthority&&"completed"!==e.status)throw new j.TP("Use the ongoing goal Pause, Stop, or Resume controls to change its lifecycle safely.");if(d.executionAuthority&&"cancelled"===e.status)throw new j.TP("Keep an ongoing goal active and report blockers. Only its owner can stop it.");if(d.executionAuthority&&"completed"===e.status)throw new j.TP("Report verified goal success with report_activity_outcome and finish the Activity. The runtime completes the goal only after the Activity ends successfully.")}if(c.goal&&"completed"===h&&i.some(a=>a.parentGoalId===c.id&&!["completed","cancelled"].includes(a.status)))throw new j.TP("Finish or cancel this goal’s remaining Tasks before completing the goal.");let k=c.goal?{...c.goal,...e.goal??{},maxRounds:e.goal?.maxRounds===null?void 0:e.goal?.maxRounds??c.goal.maxRounds}:void 0,l=k?{...k,..."completed"===e.status?{...(0,m.a2)(k),state:"completed",nextRunAt:void 0}:{},..."cancelled"===e.status?{...(0,m.a2)(k),state:"stopped",nextRunAt:void 0}:{},...!d.executionAuthority&&"blocked"===e.status?{state:"paused",nextRunAt:void 0}:{},...!d.executionAuthority&&"open"===e.status?{state:"active",nextRunAt:f}:{}}:void 0,n=g.s0.parse({...c,...void 0!==e.title?{title:e.title}:{},description:null===e.description?void 0:e.description??c.description,status:h,...l?{goal:l}:{},...void 0!==e.priority?{priority:e.priority}:{},...void 0!==e.dependencyIds?{dependencyIds:e.dependencyIds}:{},nextAction:null===e.nextAction?void 0:e.nextAction??c.nextAction,deadline:null===e.deadline?void 0:e.deadline??c.deadline,...void 0!==e.status?{deferredUntil:void 0}:{},updatedAt:f,completedAt:"completed"===h?c.completedAt??f:void 0});return r(a,n,i),(0,o.savePersonaWorkItem)(n)});return void 0!==e.priority&&await (0,i.reprioritizePersonaWorkItemDispatches)({personaId:a,workItemId:b,priority:f.priority}),(f.goal||f.parentGoalId)&&(0,m.PV)(a),f}async function u(a,b){return(await (0,i.listPersonaFlowDispatches)(a)).filter(c=>c.personaId===a&&"assignment"===c.admission.kind&&"assignment"===c.admission.source.kind&&c.admission.source.sourceId===b&&"completed"!==c.state&&"error"!==c.state&&"cancelled"!==c.state)}function v(a){return"assignment"===a.kind&&"assignment"===a.source.kind&&!!a.source.sourceId&&("completed"===a.status||"error"===a.status||"cancelled"===a.status)}async function w(a){let b=await (0,o.getPersonaWorkItem)(a.personaId,a.source.sourceId);if(!b||b.personaId!==a.personaId)return null;if(b.goal||b.parentGoalId){let c=b.goal?b:await (0,o.getPersonaWorkItem)(a.personaId,b.parentGoalId);if(!c?.goal||"active"!==c.goal.state||c.goal.pendingTaskId!==b.id)return b;let d=c.goal.pendingDispatchId;if(!d||a.entryPointPayloadRef!==d&&(await (0,i.getPersonaFlowDispatch)(d))?.activityId!==a.id)return b;let e=await (0,o.listPersonaWorkItems)(a.personaId),f=Math.max(Date.now(),c.updatedAt+1,b.updatedAt+1,a.completedAt??0),h=(0,m.Jh)(c,b,a,e,f);if(h.root===c)return b;let j=b;return b.id===c.id||["completed","cancelled","blocked"].includes(b.status)||(j=g.s0.parse({...b,status:h.taskStatus,nextAction:a.outcome?.nextAction??b.nextAction,deferredUntil:h.taskDeferredUntil,updatedAt:f,completedAt:"completed"===h.taskStatus?f:void 0}),r(a.personaId,j,e),await (0,o.savePersonaWorkItem)(j)),await (0,o.savePersonaWorkItem)(h.root),(0,m.PV)(a.personaId),b.id===c.id?h.root:j}if("completed"===b.status||"cancelled"===b.status||"blocked"===b.status)return b;let c="completed"===a.status&&a.outcome?.resolution==="succeeded"?"completed":"cancelled"===a.status?"cancelled":"blocked",d=await (0,o.listPersonaWorkItems)(a.personaId);"completed"===c&&b.dependencyIds.some(a=>d.find(b=>b.id===a)?.status!=="completed")&&(c="blocked");let e=Math.max(Date.now(),b.updatedAt+1,a.updatedAt,a.completedAt??0),f="completed"===c?Math.max(b.createdAt,a.completedAt??e):void 0,h=g.s0.parse({...b,status:c,..."blocked"===c?{nextAction:a.outcome?.nextAction??b.nextAction??"Review the Activity result and decide the next safe action."}:{},updatedAt:e,completedAt:f});return r(a.personaId,h,d),(0,o.savePersonaWorkItem)(h)}async function x(a){if(!v(a))return null;let b=await (0,o.getPersonaWorkItem)(a.personaId,a.source.sourceId);return b&&b.personaId===a.personaId?(0,j.g7)(a.personaId,{},async()=>w(a)):null}async function y(a,b){return v(a)?(await b.assertOwned(),w(a)):null}async function z(a,b={}){g.Qy.parse(a);let c=B.parse(b),d=await (0,o.listPersonaWorkItems)(a,{statuses:c.statuses,priorities:c.priorities,dueBefore:c.dueBefore}),e=new Map((!1===c.includeBlockedByDependencies?await (0,o.listPersonaWorkItems)(a):d).map(a=>[a.id,a]));return d.filter(a=>(!c.statuses?.length||c.statuses.includes(a.status))&&(!c.priorities?.length||c.priorities.includes(a.priority))&&(void 0===c.dueBefore||void 0!==a.deadline&&a.deadline<=c.dueBefore)&&(!1!==c.includeBlockedByDependencies||a.dependencyIds.every(a=>e.get(a)?.status==="completed"))).sort((a,b)=>D[a.priority]-D[b.priority]||(a.deadline??Number.MAX_SAFE_INTEGER)-(b.deadline??Number.MAX_SAFE_INTEGER)||b.updatedAt-a.updatedAt||a.id.localeCompare(b.id))}async function A(a,b,c={}){g.Qy.parse(a);let d=C.parse(b);return(0,j.g7)(a,c,async({activity:b})=>{let c=b?.id??d.activityId;if(!c)throw new j.TP("Todo promotion requires an owning Activity.");if(b&&d.activityId&&d.activityId!==b.id)throw new j.TP("A live Activity cannot promote another Activity's todo.");let e=b??await (0,o.getPersonaActivity)(a,c);if(!e||e.personaId!==a||!e.conversationId)throw new j.SZ("PersonaActivity",c);let i=await (0,f.loadConversationState)(e.conversationId),n=i?.todos?.find(a=>a.id===d.todoId);if(!n||"done"===n.status||"cancelled"===n.status)throw new j.SZ("Promotable run todo",d.todoId);let p=(0,k.k$)("work",{purpose:"run-todo-promotion-v1",workspaceId:(0,h.getCurrentWorkspace)(),personaId:a,activityId:e.id,todoId:n.id}),r=await (0,o.getPersonaWorkItem)(a,p);if(r)return q(r,a);let s=Date.now(),t=(0,l.c)([{kind:"activity",id:e.id,uri:`flujo://activity/${e.id}/todo/${n.id}`,observedAt:n.updatedAt}],{now:s,producer:"explicit-todo-promotion",digestMaterial:n}),u="assignment"===e.kind&&e.source.sourceId?await (0,o.getPersonaWorkItem)(a,e.source.sourceId):null,v=u?.goal?u.id:u?.parentGoalId;if(v){let b=await (0,o.getPersonaWorkItem)(a,v);if(b?.goal?.state!=="active")throw new j.TP("The ongoing goal is no longer active.");(0,m.PV)(a)}return(0,o.savePersonaWorkItem)(g.s0.parse({schemaVersion:g.cq,id:p,personaId:a,title:d.title??n.content,...v?{parentGoalId:v}:{},...d.description?{description:d.description}:{},status:"in_progress"===n.status?"in_progress":"open",priority:d.priority??"normal",dependencyIds:[],nextAction:d.nextAction??n.content,...void 0!==d.deadline?{deadline:d.deadline}:{},createdByActivityId:e.id,...e.behaviorRevisionId?{behaviorRevisionId:e.behaviorRevisionId}:{},sourceRefs:t,createdAt:s,updatedAt:s}))})}d()}catch(a){d(a)}})}};