@xopcai/xopc 0.0.90 → 0.0.92

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 (365) hide show
  1. package/README.md +36 -12
  2. package/README.zh-CN.md +36 -12
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  6. package/dist/extensions/telegram/src/plugin.js +1 -1
  7. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  8. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  9. package/dist/extensions/telegram/xopc.extension.json +1 -1
  10. package/dist/extensions/weixin/src/api/api.js +2 -2
  11. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  12. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  13. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  14. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  15. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  16. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  17. package/dist/extensions/weixin/src/plugin.js +1 -1
  18. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  19. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  20. package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +41 -0
  21. package/dist/gateway/static/root/assets/agents-uwPn7ZW9.js +222 -0
  22. package/dist/gateway/static/root/assets/apps-page-CWKdhSPU.js +1 -0
  23. package/dist/gateway/static/root/assets/{attachment-preview-renderer-CpyoFbs4.js → attachment-preview-renderer-DBAxQXb-.js} +2 -2
  24. package/dist/gateway/static/root/assets/{attachment-process-heavy-CqVriadb.js → attachment-process-heavy-Csq3TrrP.js} +4 -4
  25. package/dist/gateway/static/root/assets/channels-settings-hEhW7Mbk.js +1 -0
  26. package/dist/gateway/static/root/assets/{channels-status-swr-BrtH2VzC.js → channels-status-swr-XzddfJW2.js} +1 -1
  27. package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +1 -0
  28. package/dist/gateway/static/root/assets/{cron-api-CyqbgfHM.js → cron-api--I8LJ44S.js} +1 -1
  29. package/dist/gateway/static/root/assets/cron-page-B0kvgZGR.js +1 -0
  30. package/dist/gateway/static/root/assets/dist-CYgHMQO0.js +1 -0
  31. package/dist/gateway/static/root/assets/{extension-debug-page-D6Ak0STa.js → extension-debug-page-6cRP0nA9.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-Q0P3d6DW.js → extension-page-DpwIkspI.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-CL55LwU_.js → extension-settings-page-DYbnQUxH.js} +1 -1
  34. package/dist/gateway/static/root/assets/{fetch-Dqa9iTWl.js → fetch-DTN0w7rV.js} +1 -1
  35. package/dist/gateway/static/root/assets/{field-primitives-HUR6JElP.js → field-primitives-CslW6HwD.js} +1 -1
  36. package/dist/gateway/static/root/assets/heartbeat-config-api-2UiKevxG.js +1 -0
  37. package/dist/gateway/static/root/assets/index-BUKUv7QW.css +1 -0
  38. package/dist/gateway/static/root/assets/{index-BYcGfwcE.js → index-DnevRVa6.js} +63 -59
  39. package/dist/gateway/static/root/assets/logs-page-sOP4TXJ4.js +1 -0
  40. package/dist/gateway/static/root/assets/note-detail-page-B91pLkEI.css +1 -0
  41. package/dist/gateway/static/root/assets/note-detail-page-DvW2qg4i.js +179 -0
  42. package/dist/gateway/static/root/assets/note-time-BEiibLJv.js +1 -0
  43. package/dist/gateway/static/root/assets/notes-page-BFQaquHU.js +1 -0
  44. package/dist/gateway/static/root/assets/{pdf-BnEvgIXZ.js → pdf-epILhEOn.js} +1 -1
  45. package/dist/gateway/static/root/assets/preload-helper-zJ_50EbN.js +1 -0
  46. package/dist/gateway/static/root/assets/sessions-page-CptjDKAX.js +1 -0
  47. package/dist/gateway/static/root/assets/settings-advanced-gate-BctKqHcf.js +2 -0
  48. package/dist/gateway/static/root/assets/{settings-form-section-a0qGVOlr.js → settings-form-section-QJh5ruel.js} +1 -1
  49. package/dist/gateway/static/root/assets/settings-page-V3p-hISB.js +2 -0
  50. package/dist/gateway/static/root/assets/share-preview-page-DBsvvbmD.js +2 -0
  51. package/dist/gateway/static/root/assets/skills-page-q2zPUJAR.js +2 -0
  52. package/dist/gateway/static/root/assets/{theme-store-C0Ehmdo5.js → theme-store-ht5iswWS.js} +1 -1
  53. package/dist/gateway/static/root/assets/toast-z0toXu32.js +1 -0
  54. package/dist/gateway/static/root/assets/url-CWWpfkq1.js +3 -0
  55. package/dist/gateway/static/root/assets/{utils-DRQryzdn.js → utils-DhPv9xoB.js} +1 -1
  56. package/dist/gateway/static/root/assets/vendor-codemirror-DYoKfS8f.js +45 -0
  57. package/dist/gateway/static/root/assets/voice-api-key-field-DLSKUipa.js +1 -0
  58. package/dist/gateway/static/root/assets/{workflow-page.utils-DnG8JBhV.js → workflow-page.utils-CJqnPWkW.js} +1 -1
  59. package/dist/gateway/static/root/assets/workflows-page-DRRQ1A0l.js +27 -0
  60. package/dist/gateway/static/root/index.html +10 -8
  61. package/dist/package.js +1 -1
  62. package/dist/src/agent/agent-manager.js +7 -7
  63. package/dist/src/agent/agent-scope.js +1 -1
  64. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  65. package/dist/src/agent/context/workspace-seed.js +2 -2
  66. package/dist/src/agent/goals/goal-run-store.js +4 -4
  67. package/dist/src/agent/goals/persistent-goal-service.js +1 -1
  68. package/dist/src/agent/goals/post-turn.js +2 -2
  69. package/dist/src/agent/image/load-image-media.js +2 -2
  70. package/dist/src/agent/ipc/bus.js +1 -1
  71. package/dist/src/agent/ipc/inbox.js +2 -2
  72. package/dist/src/agent/ipc/socket.js +1 -1
  73. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +2 -9
  74. package/dist/src/agent/mcp/bundle-mcp-config.js +10 -34
  75. package/dist/src/agent/mcp/bundle-mcp-config.js.map +1 -1
  76. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  77. package/dist/src/agent/mcp/bundle-mcp-policy.js +2 -2
  78. package/dist/src/agent/mcp/bundle-mcp-policy.js.map +1 -1
  79. package/dist/src/agent/mcp/bundle-mcp-runtime.js +5 -5
  80. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  81. package/dist/src/agent/mcp/index.js +2 -2
  82. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  83. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  84. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  85. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  86. package/dist/src/agent/memory/dreaming/events.js +1 -1
  87. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  88. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  89. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  90. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  91. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  92. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  93. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  94. package/dist/src/agent/models/manager.js +1 -1
  95. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  96. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  97. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  98. package/dist/src/agent/sandbox/path-policy.js +2 -2
  99. package/dist/src/agent/service/build-direct-message-content.js +1 -1
  100. package/dist/src/agent/service.js +4 -4
  101. package/dist/src/agent/session/session-inspector.js +1 -1
  102. package/dist/src/agent/skills/config.js +1 -1
  103. package/dist/src/agent/skills/hub-hash.js +2 -2
  104. package/dist/src/agent/skills/hub-lock.js +1 -1
  105. package/dist/src/agent/skills/hub-pull.js +2 -2
  106. package/dist/src/agent/skills/index.js +1 -1
  107. package/dist/src/agent/skills/managed-store.js +1 -1
  108. package/dist/src/agent/skills/scanner.js +1 -1
  109. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  110. package/dist/src/agent/skills/skill-manager.js +1 -1
  111. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  112. package/dist/src/agent/tools/factory.js +1 -1
  113. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  114. package/dist/src/agent/tools/send-media.js +1 -1
  115. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  116. package/dist/src/agent/tools/workflow-tool.js +1 -1
  117. package/dist/src/agent/tools/write.js +1 -1
  118. package/dist/src/agent/workflow/catalog.js +1 -1
  119. package/dist/src/auth/credentials.js +3 -3
  120. package/dist/src/auth/profiles/store.js +1 -1
  121. package/dist/src/auth/sync-provider-auth.js +1 -1
  122. package/dist/src/browser/cache-dir-policy.js +1 -1
  123. package/dist/src/browser/cdp-local-launcher.js +2 -2
  124. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  125. package/dist/src/browser/providers/cloakbrowser.js +4 -4
  126. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  127. package/dist/src/browser/stealth.js +1 -1
  128. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  129. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  130. package/dist/src/channels/outbound/persist-store.js +1 -1
  131. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  132. package/dist/src/channels/pairing/pairing-store.js +2 -2
  133. package/dist/src/chat-commands/agent-edit.js +2 -2
  134. package/dist/src/chat-commands/builtins/config.js +2 -2
  135. package/dist/src/chat-commands/context.js +1 -1
  136. package/dist/src/cli/command-catalog.js +0 -4
  137. package/dist/src/cli/command-catalog.js.map +1 -1
  138. package/dist/src/cli/command-loaders.js +1 -2
  139. package/dist/src/cli/command-loaders.js.map +1 -1
  140. package/dist/src/cli/command-manifest.js +0 -4
  141. package/dist/src/cli/command-manifest.js.map +1 -1
  142. package/dist/src/cli/commands/config.js +1 -1
  143. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  144. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  145. package/dist/src/cli/commands/doctor/checks/session-integrity.js +2 -2
  146. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  147. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  148. package/dist/src/cli/commands/extension-dev.js +1 -1
  149. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  150. package/dist/src/cli/commands/extension-pack.js +1 -1
  151. package/dist/src/cli/commands/gateway/logs.js +1 -1
  152. package/dist/src/cli/commands/image.js +1 -1
  153. package/dist/src/cli/commands/init.js +4 -4
  154. package/dist/src/cli/commands/onboard.js +1 -1
  155. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  156. package/dist/src/commands/agents.config.js +1 -1
  157. package/dist/src/config/agent-profile.js +1 -1
  158. package/dist/src/config/gateway-bind.js +1 -1
  159. package/dist/src/config/index.d.ts +0 -1
  160. package/dist/src/config/index.js +6 -7
  161. package/dist/src/config/index.js.map +1 -1
  162. package/dist/src/config/loader.js +2 -2
  163. package/dist/src/config/models-json.js +2 -2
  164. package/dist/src/config/paths-state.js +1 -1
  165. package/dist/src/config/profile.js +2 -2
  166. package/dist/src/config/schema.d.ts +36 -6
  167. package/dist/src/config/schema.js +13 -11
  168. package/dist/src/config/schema.js.map +1 -1
  169. package/dist/src/config/workspace-path.js +1 -1
  170. package/dist/src/connectors/builtin-catalog.d.ts +2 -0
  171. package/dist/src/connectors/builtin-catalog.js +152 -0
  172. package/dist/src/connectors/builtin-catalog.js.map +1 -0
  173. package/dist/src/connectors/catalog.d.ts +5 -0
  174. package/dist/src/connectors/catalog.js +13 -0
  175. package/dist/src/connectors/catalog.js.map +1 -0
  176. package/dist/src/connectors/health.d.ts +3 -0
  177. package/dist/src/connectors/health.js +61 -0
  178. package/dist/src/connectors/health.js.map +1 -0
  179. package/dist/src/connectors/install.d.ts +5 -0
  180. package/dist/src/connectors/install.js +46 -0
  181. package/dist/src/connectors/install.js.map +1 -0
  182. package/dist/src/connectors/instances.d.ts +4 -0
  183. package/dist/src/connectors/instances.js +43 -0
  184. package/dist/src/connectors/instances.js.map +1 -0
  185. package/dist/src/connectors/materialize.d.ts +9 -0
  186. package/dist/src/connectors/materialize.js +76 -0
  187. package/dist/src/connectors/materialize.js.map +1 -0
  188. package/dist/src/connectors/oauth.d.ts +22 -0
  189. package/dist/src/connectors/oauth.js +99 -0
  190. package/dist/src/connectors/oauth.js.map +1 -0
  191. package/dist/src/connectors/providers.d.ts +9 -0
  192. package/dist/src/connectors/providers.js +20 -0
  193. package/dist/src/connectors/providers.js.map +1 -0
  194. package/dist/src/connectors/secret-store.d.ts +7 -0
  195. package/dist/src/connectors/secret-store.js +47 -0
  196. package/dist/src/connectors/secret-store.js.map +1 -0
  197. package/dist/src/connectors/types.d.ts +102 -0
  198. package/dist/src/connectors/types.js +1 -0
  199. package/dist/src/connectors/usage.d.ts +6 -0
  200. package/dist/src/connectors/usage.js +63 -0
  201. package/dist/src/connectors/usage.js.map +1 -0
  202. package/dist/src/cron/executor.js +2 -2
  203. package/dist/src/cron/persistence.js +1 -1
  204. package/dist/src/cron/run-log-store.js +1 -1
  205. package/dist/src/daemon/constants.js +1 -1
  206. package/dist/src/daemon/install-plan.js +2 -2
  207. package/dist/src/daemon/launchd.js +2 -2
  208. package/dist/src/daemon/schtasks.js +2 -2
  209. package/dist/src/daemon/systemd.js +2 -2
  210. package/dist/src/extensions/bundle-mcp.js +1 -1
  211. package/dist/src/extensions/discover-extensions.js +1 -1
  212. package/dist/src/extensions/health.js +1 -1
  213. package/dist/src/extensions/loader.js +1 -1
  214. package/dist/src/extensions/lockfile.js +2 -2
  215. package/dist/src/extensions/update.js +1 -1
  216. package/dist/src/gateway/agents-admin.js +3 -3
  217. package/dist/src/gateway/file-path-classifier.js +2 -2
  218. package/dist/src/gateway/heartbeat/service.js +1 -1
  219. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  220. package/dist/src/gateway/hono/lib/config-payload.js +2 -1
  221. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  222. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  223. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  224. package/dist/src/gateway/hono/middleware/auth.js +1 -2
  225. package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
  226. package/dist/src/gateway/hono/oauth.js +1 -1
  227. package/dist/src/gateway/hono/routes/agents.js +1 -1
  228. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  229. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
  230. package/dist/src/gateway/hono/routes/config-patch/gateway.js +12 -0
  231. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -1
  232. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  233. package/dist/src/gateway/hono/routes/connectors.d.ts +3 -0
  234. package/dist/src/gateway/hono/routes/connectors.js +177 -0
  235. package/dist/src/gateway/hono/routes/connectors.js.map +1 -0
  236. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  237. package/dist/src/gateway/hono/routes/home.d.ts +12 -0
  238. package/dist/src/gateway/hono/routes/home.js +50 -0
  239. package/dist/src/gateway/hono/routes/home.js.map +1 -0
  240. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  241. package/dist/src/gateway/hono/routes/lazy-bundles.js +20 -4
  242. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  243. package/dist/src/gateway/hono/routes/models.js +1 -1
  244. package/dist/src/gateway/hono/routes/notes.d.ts +3 -0
  245. package/dist/src/gateway/hono/routes/notes.js +305 -0
  246. package/dist/src/gateway/hono/routes/notes.js.map +1 -0
  247. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  248. package/dist/src/gateway/hono/routes/shares.js +1 -1
  249. package/dist/src/gateway/hono/routes/workspace.js +4 -4
  250. package/dist/src/gateway/lock.js +3 -3
  251. package/dist/src/gateway/ports.js +1 -1
  252. package/dist/src/gateway/service/agent-runner.js +2 -2
  253. package/dist/src/gateway/service/marketplace-service.js +2 -2
  254. package/dist/src/gateway/service.d.ts +3 -0
  255. package/dist/src/gateway/service.js +11 -1
  256. package/dist/src/gateway/service.js.map +1 -1
  257. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  258. package/dist/src/gateway/workspace-ripgrep.d.ts +6 -0
  259. package/dist/src/gateway/workspace-ripgrep.js +62 -11
  260. package/dist/src/gateway/workspace-ripgrep.js.map +1 -1
  261. package/dist/src/heartbeat/index.js +1 -1
  262. package/dist/src/infra/brew.js +1 -1
  263. package/dist/src/infra/package-json.js +1 -1
  264. package/dist/src/infra/package-update-steps.js +1 -1
  265. package/dist/src/infra/path-env.js +2 -2
  266. package/dist/src/infra/restart.js +2 -2
  267. package/dist/src/infra/stable-node-path.js +1 -1
  268. package/dist/src/infra/update-check.js +1 -1
  269. package/dist/src/infra/update-global.js +1 -1
  270. package/dist/src/infra/update-lock.js +3 -3
  271. package/dist/src/infra/update-runner.js +1 -1
  272. package/dist/src/infra/update-startup.js +2 -2
  273. package/dist/src/infra/write-file-atomic.js +2 -2
  274. package/dist/src/mcp/channel-bridge.js +1 -1
  275. package/dist/src/mcp/channel-bridge.js.map +1 -1
  276. package/dist/src/notes/attachment-ref.d.ts +9 -0
  277. package/dist/src/notes/attachment-ref.js +27 -0
  278. package/dist/src/notes/attachment-ref.js.map +1 -0
  279. package/dist/src/notes/index.d.ts +4 -0
  280. package/dist/src/notes/index.js +4 -0
  281. package/dist/src/notes/note-attachment-sync.d.ts +7 -0
  282. package/dist/src/notes/note-attachment-sync.js +46 -0
  283. package/dist/src/notes/note-attachment-sync.js.map +1 -0
  284. package/dist/src/notes/note-index-meta.d.ts +14 -0
  285. package/dist/src/notes/note-index-meta.js +87 -0
  286. package/dist/src/notes/note-index-meta.js.map +1 -0
  287. package/dist/src/notes/paths.d.ts +5 -0
  288. package/dist/src/notes/paths.js +23 -0
  289. package/dist/src/notes/paths.js.map +1 -0
  290. package/dist/src/notes/service.d.ts +53 -0
  291. package/dist/src/notes/service.js +373 -0
  292. package/dist/src/notes/service.js.map +1 -0
  293. package/dist/src/notes/store.d.ts +34 -0
  294. package/dist/src/notes/store.js +342 -0
  295. package/dist/src/notes/store.js.map +1 -0
  296. package/dist/src/notes/types.d.ts +199 -0
  297. package/dist/src/notes/types.js +1 -0
  298. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  299. package/dist/src/providers/index.js +2 -2
  300. package/dist/src/providers/model-registry.js +1 -1
  301. package/dist/src/session/config-store.js +2 -2
  302. package/dist/src/session/init-session-turn.js +2 -2
  303. package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
  304. package/dist/src/session/parity/sessions-json-file.js +1 -1
  305. package/dist/src/session/parity/transcript-file-lock.js +2 -2
  306. package/dist/src/session/parity/transcript-paths.js +1 -1
  307. package/dist/src/session/resolve-session.js +4 -4
  308. package/dist/src/session/search-index-cache.js +1 -1
  309. package/dist/src/session/search-index.js +1 -1
  310. package/dist/src/session/session-title.js +2 -2
  311. package/dist/src/session/store.d.ts +2 -0
  312. package/dist/src/session/store.js +27 -7
  313. package/dist/src/session/store.js.map +1 -1
  314. package/dist/src/share/share-auto.js +2 -2
  315. package/dist/src/share/share-store.js +3 -3
  316. package/dist/src/share/share-thumbnail.js +2 -2
  317. package/dist/src/share/share-zip.js +1 -1
  318. package/dist/src/share/site-share-store.js +3 -3
  319. package/dist/src/share/site-static-serve.js +1 -1
  320. package/dist/src/tui/clipboard-image.js +3 -3
  321. package/dist/src/tui/theme-manager.js +1 -1
  322. package/dist/src/tui/tui-keybindings-file.js +1 -1
  323. package/dist/src/tui/tui-scoped-models.js +2 -2
  324. package/dist/src/tui/tui-settings.js +1 -1
  325. package/dist/src/tui/tui.js +3 -3
  326. package/dist/src/tunnel/frpc-binary.js +3 -3
  327. package/dist/src/tunnel/frpc-config.js +1 -1
  328. package/dist/src/tunnel/frpc-extract.js +1 -1
  329. package/dist/src/tunnel/tunnel-state.js +1 -1
  330. package/dist/src/utils/logger/audit.js +1 -1
  331. package/dist/src/utils/logger/log-store.js +1 -1
  332. package/dist/src/utils/logger/rotation.js +1 -1
  333. package/dist/src/voice/tts/audio.js +1 -1
  334. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  335. package/dist/src/workflows/store/event-store.js +1 -1
  336. package/dist/src/workflows/store/run-store.js +1 -1
  337. package/package.json +1 -1
  338. package/dist/gateway/static/root/assets/agents-cPvvYLXo.js +0 -222
  339. package/dist/gateway/static/root/assets/apps-page-Bk1_P5FJ.js +0 -1
  340. package/dist/gateway/static/root/assets/channels-settings-CZoeQwHz.js +0 -1
  341. package/dist/gateway/static/root/assets/cron-dreaming-jobs-Ip703-qM.js +0 -2
  342. package/dist/gateway/static/root/assets/cron-page-BpLdiQN8.js +0 -1
  343. package/dist/gateway/static/root/assets/dist-BTWC-BTN.js +0 -45
  344. package/dist/gateway/static/root/assets/dist-BpAiK86n.js +0 -1
  345. package/dist/gateway/static/root/assets/eye-DAfL1U7M.js +0 -1
  346. package/dist/gateway/static/root/assets/heartbeat-config-api-DusckjUX.js +0 -1
  347. package/dist/gateway/static/root/assets/index-V7MQ7834.css +0 -1
  348. package/dist/gateway/static/root/assets/logs-page-_HcZ2fgK.js +0 -1
  349. package/dist/gateway/static/root/assets/sessions-page-iezSMjho.js +0 -1
  350. package/dist/gateway/static/root/assets/settings-page-C9_nYQwM.js +0 -3
  351. package/dist/gateway/static/root/assets/share-preview-page-DExl7CJy.js +0 -2
  352. package/dist/gateway/static/root/assets/skills-page-BlgGD93t.js +0 -2
  353. package/dist/gateway/static/root/assets/url-fxyYANfA.js +0 -3
  354. package/dist/gateway/static/root/assets/vendor-codemirror-D0yxdRpg.js +0 -58
  355. package/dist/gateway/static/root/assets/voice-api-key-field-D0viACE2.js +0 -1
  356. package/dist/gateway/static/root/assets/workflows-page-BvMobnJP.js +0 -27
  357. package/dist/src/cli/commands/mcp.d.ts +0 -4
  358. package/dist/src/cli/commands/mcp.js +0 -85
  359. package/dist/src/cli/commands/mcp.js.map +0 -1
  360. package/dist/src/config/mcp-config.d.ts +0 -34
  361. package/dist/src/config/mcp-config.js +0 -116
  362. package/dist/src/config/mcp-config.js.map +0 -1
  363. package/dist/src/gateway/hono/routes/mcp.d.ts +0 -3
  364. package/dist/src/gateway/hono/routes/mcp.js +0 -99
  365. package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./url-fxyYANfA.js";import{o as a}from"./vendor-swr-BIWyz7Rc.js";import{a as o,n as s}from"./fetch-Dqa9iTWl.js";import{Bi as c,Fr as l,Ha as u,Hn as d,Ir as f,K as p,Pr as m,Sr as h,Un as g,_i as _,et as v,ka as y,sa as b,tt as x}from"./index-BYcGfwcE.js";var S=`/api/image/providers`;async function C(){return(await s(i(`/api/image/providers`)))?.payload?.providers??[]}var w=e(t(),1),ee=n();function T(){return{apiKey:``,region:``,baseUrl:``,imageBaseUrl:``}}function te(e){return e?.apiKey?`••••••••••••`:``}function E(e,t){let n=(()=>{if(!e||typeof e!=`object`||!(`providersConfig`in e))return;let t=e.providersConfig;if(!(!t||typeof t!=`object`||Array.isArray(t)))return t})(),r={};for(let e of t){let t=n?.[e];r[e]={apiKey:te(t),region:t?.region??``,baseUrl:t?.baseUrl??``,imageBaseUrl:t?.imageBaseUrl??``}}return r}function D(e,t,n){let r=e[n].trim();if(r!==t[n].trim())return r||null}function O(e,t){let n=e.trim(),r=t.trim();if(n!==r&&!(p(n)&&p(r)))return n||(r?null:void 0)}function ne(e,t,n){let r={};for(let i of e){let e=t[i]??T(),a=n[i]??T();if(JSON.stringify(e)===JSON.stringify(a))continue;let o={},s=O(e.apiKey,a.apiKey);s!==void 0&&(o.apiKey=s);let c=D(e,a,`region`);c!==void 0&&(o.region=c);let l=D(e,a,`baseUrl`);l!==void 0&&(o.baseUrl=l);let u=D(e,a,`imageBaseUrl`);u!==void 0&&(o.imageBaseUrl=u),Object.keys(o).length>0&&(r[i]=o)}return r}async function k(e){let t=await s(i(`/api/image/providers/${encodeURIComponent(e)}/reveal-api-key`),{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`});if(!t.ok||!t.payload)throw Error(t.error?.message??`Reveal failed`);return t.payload}async function A(e){Object.keys(e).length!==0&&(await s(i(`/api/config`),{method:`PATCH`,body:JSON.stringify({providersConfig:e})}),await d())}var j=r();function re(e){let t=(0,ee.c)(18),{providerId:n,value:r,onChange:i,labels:a,apiKeyLinks:o,apiKeyLinkLabels:s}=e,c;t[0]===n?c=t[1]:(c=()=>k(n).then(M),t[0]=n,t[1]=c);let l=c,u=`img-cred-key-${n}`,d;t[2]!==a.apiKeyLabel||t[3]!==u?(d=(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:u,children:a.apiKeyLabel}),t[2]=a.apiKeyLabel,t[3]=u,t[4]=d):d=t[4];let f;t[5]!==s||t[6]!==o?(f=o.length>0?(0,j.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,j.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex w-fit items-center gap-1 text-xs font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:[x(e.kind,s),(0,j.jsx)(b,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null,t[5]=s,t[6]=o,t[7]=f):f=t[7];let p=`img-cred-key-${n}`,m;t[8]!==a||t[9]!==i||t[10]!==l||t[11]!==p||t[12]!==r?(m=(0,j.jsx)(h,{id:p,value:r,onChange:i,placeholder:a.optionalPlaceholder,labels:a,reveal:l,loadFailedLabel:a.loadFailed,maskedHelp:a.maskedHelp,notInConfigFile:a.notInConfigFile}),t[8]=a,t[9]=i,t[10]=l,t[11]=p,t[12]=r,t[13]=m):m=t[13];let g;return t[14]!==d||t[15]!==f||t[16]!==m?(g=(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[d,f,m]}),t[14]=d,t[15]=f,t[16]=m,t[17]=g):g=t[17],g}function M(e){return e.apiKey??null}function N(){return f(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,m)}function ie(){return f(N(),`appearance-none bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat pr-9`)}var P=`__custom__`;function ae(e,t){if(!e.region.trim()&&!e.imageBaseUrl.trim())return``;let n=e.region.trim().toLowerCase();return t.some(e=>e.value===n)?n:P}function oe(e,t){let n=e.baseUrl.trim().replace(/\/+$/,``);if(!n)return``;let r=t.map(e=>e.value.replace(/\/+$/,``)).indexOf(n);return r>=0?t[r].value:P}function se(e,t,n){return t===`beijing`?e.dashscopeRegion_beijing:t===`singapore`?e.dashscopeRegion_singapore:t===`us`?e.dashscopeRegion_us:n}function ce(e,t){return t===`minimax`?e.minimaxClusterLabel:t===`fal`?e.falQueueBaseLabel:e.baseUrlLabel}function le(e,t){return t===`minimax`?e.minimaxClusterHint:t===`fal`?e.falQueueBaseHint:null}function ue(e,t){return JSON.stringify(e)!==JSON.stringify(t)}function de(e,t){return t===1?e.modelCountOne:e.modelCountMany.replace(`{count}`,String(t))}function fe(e){let t=(0,ee.c)(76),{summaries:n,credDraft:r,credBaseline:i,credDirty:a,credSaving:o,credError:s,credSavedFlash:d,credNoopFlash:p,updateCredRow:m,onDiscardCredentials:h,onSaveCredentials:g,extensionIds:x,showExtensionLinks:S,showImageModelsLink:C,hideActions:te,language:E,apiKeyLinkLabels:D,messages:O}=e,ne=te===void 0?!1:te,k;t[0]===n?k=t[1]:(k=n.some(_e),t[0]=n,t[1]=k);let A=k,M;t[2]===n?M=t[3]:(M=n.some(ge),t[2]=n,t[3]=M);let fe=M,[F,ve]=(0,w.useState)(he),[I,L]=(0,w.useState)(me),R;if(t[4]!==i||t[5]!==r||t[6]!==n){R=new Set;for(let e of n)ue(r[e.id]??T(),i[e.id]??T())&&R.add(e.id);t[4]=i,t[5]=r,t[6]=n,t[7]=R}else R=t[7];let z=R,B;t[8]!==z||t[9]!==I||t[10]!==F?(B=e=>I.has(e)?!1:F.has(e)?!0:z.has(e),t[8]=z,t[9]=I,t[10]=F,t[11]=B):B=t[11];let V=B,H;t[12]===V?H=t[13]:(H=e=>{if(V(e)){L(t=>new Set(t).add(e)),ve(t=>{let n=new Set(t);return n.delete(e),n});return}L(t=>{let n=new Set(t);return n.delete(e),n}),ve(t=>new Set(t).add(e))},t[12]=V,t[13]=H);let U=H;if(n.length===0)return null;let W;t[14]===O.credentialsIntro?W=t[15]:(W=(0,j.jsx)(`p`,{children:O.credentialsIntro}),t[14]=O.credentialsIntro,t[15]=W);let G;t[16]!==A||t[17]!==O.regionHint?(G=A?(0,j.jsx)(`p`,{className:`text-fg-subtle`,children:O.regionHint}):null,t[16]=A,t[17]=O.regionHint,t[18]=G):G=t[18];let K;t[19]!==fe||t[20]!==O.endpointPresetsHint?(K=fe?(0,j.jsx)(`p`,{className:`text-fg-subtle`,children:O.endpointPresetsHint}):null,t[19]=fe,t[20]=O.endpointPresetsHint,t[21]=K):K=t[21];let q;t[22]!==C||t[23]!==O.imageModelsLinkTitle||t[24]!==O.openImageModelsPage?(q=C?(0,j.jsx)(`p`,{children:(0,j.jsx)(u,{to:`/settings/credentials?tab=image-models`,className:`font-medium text-accent hover:underline`,title:O.imageModelsLinkTitle,children:O.openImageModelsPage})}):null,t[22]=C,t[23]=O.imageModelsLinkTitle,t[24]=O.openImageModelsPage,t[25]=q):q=t[25];let J;t[26]!==W||t[27]!==G||t[28]!==K||t[29]!==q?(J=(0,j.jsxs)(`div`,{className:`flex flex-col gap-1 text-xs leading-relaxed text-fg-muted`,children:[W,G,K,q]}),t[26]=W,t[27]=G,t[28]=K,t[29]=q,t[30]=J):J=t[30];let Y;t[31]===s?Y=t[32]:(Y=s?(0,j.jsx)(`div`,{className:`rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300`,children:s}):null,t[31]=s,t[32]=Y);let X;t[33]!==a||t[34]!==p||t[35]!==d||t[36]!==o||t[37]!==ne||t[38]!==h||t[39]!==g||t[40]!==O.credentialsNothingToSave||t[41]!==O.credentialsSaved||t[42]!==O.discardCredentials||t[43]!==O.saveCredentials||t[44]!==O.savingCredentials?(X=ne?null:(0,j.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[d?(0,j.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsSaved}):null,p?(0,j.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsNothingToSave}):null,(0,j.jsx)(l,{type:`button`,variant:`secondary`,onClick:h,disabled:!a||o,children:O.discardCredentials}),(0,j.jsx)(l,{type:`button`,variant:`primary`,onClick:g,disabled:!a||o,children:o?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(c,{className:`size-3.5 animate-spin`}),(0,j.jsx)(`span`,{className:`ml-1.5`,children:O.savingCredentials})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(_,{className:`size-3.5`}),(0,j.jsx)(`span`,{className:`ml-1.5`,children:O.saveCredentials})]})})]}),t[33]=a,t[34]=p,t[35]=d,t[36]=o,t[37]=ne,t[38]=h,t[39]=g,t[40]=O.credentialsNothingToSave,t[41]=O.credentialsSaved,t[42]=O.discardCredentials,t[43]=O.saveCredentials,t[44]=O.savingCredentials,t[45]=X):X=t[45];let Z;if(t[46]!==D||t[47]!==i||t[48]!==r||t[49]!==x||t[50]!==V||t[51]!==E||t[52]!==S||t[53]!==n||t[54]!==O||t[55]!==U||t[56]!==m){let e;t[58]!==D||t[59]!==i||t[60]!==r||t[61]!==x||t[62]!==V||t[63]!==E||t[64]!==S||t[65]!==O||t[66]!==U||t[67]!==m?(e=e=>{let t=r[e.id]??T(),n=e.ui,a=S&&x.has(e.id)?`/settings/ext/${encodeURIComponent(e.id)}`:null,o=ue(t,i[e.id]??T()),s=V(e.id),c=e.label??e.id,l=de(O,e.models.length);return(0,j.jsxs)(`section`,{className:f(`overflow-hidden rounded-xl border bg-surface-panel shadow-sm transition-colors dark:shadow-none`,o?`border-accent/50`:`border-edge`),children:[(0,j.jsxs)(`button`,{type:`button`,className:`flex w-full items-start justify-between gap-3 px-4 py-3 text-left hover:bg-surface-hover/70`,"aria-expanded":s,"aria-controls":`img-provider-credentials-${e.id}`,onClick:()=>U(e.id),children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,j.jsx)(`span`,{className:`truncate text-sm font-semibold text-fg`,children:c}),(0,j.jsx)(`span`,{className:`rounded-full bg-surface-subtle px-2 py-0.5 text-[11px] font-medium text-fg-muted`,children:e.id}),o?(0,j.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:O.unsavedChanges}):null,e.configured?(0,j.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:O.configured}):(0,j.jsx)(`span`,{className:`rounded-full border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[11px] font-medium text-amber-700 dark:text-amber-300`,children:O.missingKey})]}),(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,j.jsx)(`span`,{children:l}),e.defaultModel?(0,j.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,j.jsxs)(`span`,{className:`text-fg-muted`,children:[O.defaultModel,`:`]}),` `,e.id,`/`,e.defaultModel]}):null]})]}),(0,j.jsx)(y,{className:f(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,s?`rotate-180`:`rotate-0`),"aria-hidden":`true`}),(0,j.jsx)(`span`,{className:`sr-only`,children:s?O.collapseProvider:O.expandProvider})]}),s?(0,j.jsxs)(`div`,{id:`img-provider-credentials-${e.id}`,className:`border-t border-edge px-4 py-4`,children:[a?(0,j.jsxs)(u,{to:a,className:`mb-3 inline-flex items-center gap-1 text-xs font-medium text-accent hover:underline`,title:O.extensionSettingsLinkTitle,children:[(0,j.jsx)(b,{className:`size-3`}),O.openExtensionSettings]}):null,e.models.length>0?(0,j.jsxs)(`p`,{className:`mb-3 text-xs leading-relaxed text-fg-subtle`,children:[(0,j.jsxs)(`span`,{className:`text-fg-muted`,children:[O.modelsLabel,`:`]}),` `,e.models.map(t=>`${e.id}/${t}`).join(`, `)]}):null,(0,j.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,j.jsx)(re,{providerId:e.id,value:t.apiKey,onChange:t=>m(e.id,{apiKey:t}),apiKeyLinks:v(e.id,E),apiKeyLinkLabels:D,labels:{apiKeyLabel:O.apiKeyLabel,optionalPlaceholder:O.optionalPlaceholder,maskedHelp:O.apiKeyMaskedHelp,copy:O.apiKeyCopy,copied:O.apiKeyCopied,show:O.apiKeyShow,hide:O.apiKeyHide,notInConfigFile:O.apiKeyNotInConfigFile,loadFailed:O.apiKeyRevealFailed}}),n?.regions?.length?(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-region-preset-${e.id}`,children:O.regionLabel}),(0,j.jsxs)(`select`,{id:`img-cred-region-preset-${e.id}`,className:ie(),value:ae(t,n.regions),onChange:t=>{let r=t.target.value;if(r===``){m(e.id,{region:``,imageBaseUrl:``});return}if(r===P){m(e.id,{region:``,imageBaseUrl:``});return}let i=n.regions.find(e=>e.value===r);i&&m(e.id,{region:i.value,imageBaseUrl:i.imageBaseUrl})},children:[(0,j.jsx)(`option`,{value:``,children:O.regionPresetDefault}),n.regions.map(e=>(0,j.jsx)(`option`,{value:e.value,children:se(O,e.value,e.label)},e.value)),(0,j.jsx)(`option`,{value:P,children:O.regionPresetCustom})]}),ae(t,n.regions)===P?(0,j.jsxs)(`div`,{className:`mt-2 grid gap-2 sm:grid-cols-2`,children:[(0,j.jsx)(`input`,{type:`text`,className:N(),value:t.region,placeholder:`region`,onChange:t=>m(e.id,{region:t.target.value})}),(0,j.jsx)(`input`,{type:`url`,className:N(),value:t.imageBaseUrl,placeholder:O.imageBaseUrlLabel,onChange:t=>m(e.id,{imageBaseUrl:t.target.value})})]}):null]}):null,n?.baseUrlPresets?.length?(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-base-preset-${e.id}`,children:ce(O,n.baseUrlPresetKind)}),le(O,n.baseUrlPresetKind)?(0,j.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:le(O,n.baseUrlPresetKind)}):null,(0,j.jsxs)(`select`,{id:`img-cred-base-preset-${e.id}`,className:ie(),value:oe(t,n.baseUrlPresets),onChange:t=>{let n=t.target.value;if(n===``){m(e.id,{baseUrl:``});return}if(n===P){m(e.id,{baseUrl:``});return}m(e.id,{baseUrl:n.replace(/\/+$/,``)})},children:[(0,j.jsx)(`option`,{value:``,children:O.baseUrlPresetDefault}),n.baseUrlPresets.map(pe),(0,j.jsx)(`option`,{value:P,children:O.baseUrlPresetCustom})]}),oe(t,n.baseUrlPresets)===P?(0,j.jsx)(`input`,{type:`url`,className:f(N(),`mt-2`),value:t.baseUrl,placeholder:`https://…`,onChange:t=>m(e.id,{baseUrl:t.target.value})}):null]}):null,n?.regions?.length&&ae(t,n.regions)!==P?(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-imgbase-ro-${e.id}`,children:O.imageBaseUrlLabel}),(0,j.jsx)(`input`,{id:`img-cred-imgbase-ro-${e.id}`,type:`url`,readOnly:!0,className:f(N(),`cursor-not-allowed opacity-90`),value:t.imageBaseUrl,title:O.imageBaseUrlPresetHint}),(0,j.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:O.imageBaseUrlPresetHint})]}):null]})]}):null]},e.id)},t[58]=D,t[59]=i,t[60]=r,t[61]=x,t[62]=V,t[63]=E,t[64]=S,t[65]=O,t[66]=U,t[67]=m,t[68]=e):e=t[68],Z=n.map(e),t[46]=D,t[47]=i,t[48]=r,t[49]=x,t[50]=V,t[51]=E,t[52]=S,t[53]=n,t[54]=O,t[55]=U,t[56]=m,t[57]=Z}else Z=t[57];let Q;t[69]===Z?Q=t[70]:(Q=(0,j.jsx)(`div`,{className:`flex flex-col gap-4`,children:Z}),t[69]=Z,t[70]=Q);let $;return t[71]!==J||t[72]!==Y||t[73]!==X||t[74]!==Q?($=(0,j.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[J,Y,X,Q]}),t[71]=J,t[72]=Y,t[73]=X,t[74]=Q,t[75]=$):$=t[75],$}function pe(e){return(0,j.jsx)(`option`,{value:e.value,children:e.label},e.value)}function me(){return new Set}function he(){return new Set}function ge(e){return(e.ui?.baseUrlPresets?.length??0)>0}function _e(e){return(e.ui?.regions?.length??0)>0}function F(e){let t=g(o(e=>!!e.token)),n=t.data,r=(0,w.useMemo)(()=>e.map(e=>e.id),[e]),s=(0,w.useRef)(!1),[c,l]=(0,w.useState)(null),[u,d]=(0,w.useState)(!1),[f,p]=(0,w.useState)(null),[m,h]=(0,w.useState)(!1),[_,v]=(0,w.useState)(!1),y=(0,w.useMemo)(()=>E(n?.payload?.config,r),[n?.payload?.config,r]),b=c??y,x=y;return{gwSwr:t,credDraft:b,credBaseline:x,credDirty:(0,w.useMemo)(()=>JSON.stringify(b)!==JSON.stringify(x),[b,x]),credSaving:u,credError:f,credSavedFlash:m,credNoopFlash:_,updateCredRow:(0,w.useCallback)((e,t)=>{s.current=!0,l(n=>{let r=n??y,i=r[e]??T();return{...r,[e]:{...i,...t}}})},[y]),onDiscardCredentials:(0,w.useCallback)(()=>{s.current=!1,l(null),p(null),h(!1),v(!1)},[]),saveCredentials:(0,w.useCallback)(async e=>{let n=ne(r,b,x);if(Object.keys(n).length===0){v(!0),window.setTimeout(()=>v(!1),2200);return}d(!0),p(null),h(!1);try{await A(n),await t.mutate?.(),a(i(S)),s.current=!1,l(null),h(!0),window.setTimeout(()=>h(!1),2e3)}catch(t){p(t instanceof Error?t.message:e)}finally{d(!1)}},[r,b,x,t])}}function ve(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function I(){return{enabled:!1,provider:`openai`,trigger:`always`,maxTextLength:512,timeoutMs:6e4,alibaba:{model:`qwen-tts`,voice:`Cherry`},openai:{model:`tts-1`,voice:`alloy`},edge:{voice:`en-US-MichelleNeural`},minimax:{model:`speech-2.8-hd`,voice:`male-qn-qingse`},"tts-local-cli":{command:``,outputFormat:`wav`}}}function L(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function R(e){return typeof e==`string`&&e.trim().length>0?e.trim():`alibaba`}function z(e,t,n){let r=L(e.providers)?e.providers:void 0,i=r&&L(r[t])?r[t]:void 0;return{...n,...i??{}}}function B(e){let t=ve();if(!L(e))return t;let n=R(e.provider),r=z(e,`alibaba`,t.alibaba??{}),i=z(e,`openai`,t.openai??{}),a=t.fallback??{enabled:!0,order:[`alibaba`,`openai`]};if(L(e.fallback)){let t=Array.isArray(e.fallback.order)?e.fallback.order.filter(e=>typeof e==`string`&&e.trim().length>0):a.order;a={enabled:typeof e.fallback.enabled==`boolean`?e.fallback.enabled:a.enabled,order:t.length?t:a.order}}let o=L(e.providers)?Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,L(t)?{...t}:{}])):void 0;return{enabled:!!e.enabled,provider:n,alibaba:r,openai:i,...o?{providers:o}:{},fallback:a}}function V(e){return typeof e==`string`&&e.trim().length>0?e.trim():`openai`}function H(e){let t=I();if(!L(e))return t;let n=V(e.provider),r=e.trigger===`off`||e.trigger===`always`||e.trigger===`inbound`||e.trigger===`tagged`?e.trigger:`always`,i=t[`tts-local-cli`]??{},a=L(e.providers)?Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,L(t)?{...t}:{}])):void 0;return{enabled:!!e.enabled,provider:n,trigger:r,maxTextLength:typeof e.maxTextLength==`number`&&Number.isFinite(e.maxTextLength)?e.maxTextLength:t.maxTextLength,timeoutMs:typeof e.timeoutMs==`number`&&Number.isFinite(e.timeoutMs)?e.timeoutMs:t.timeoutMs,...a?{providers:a}:{},alibaba:z(e,`alibaba`,t.alibaba??{}),openai:z(e,`openai`,t.openai??{}),edge:z(e,`edge`,t.edge??{}),minimax:z(e,`minimax`,t.minimax??{}),"tts-local-cli":z(e,`tts-local-cli`,i)}}function U(e){let{alibaba:t,openai:n,providers:r,...i}=e,a={...r??{}};return t&&(a.alibaba={...a.alibaba??{},...t}),n&&(a.openai={...a.openai??{},...n}),{...i,...Object.keys(a).length>0?{providers:a}:{}}}function W(e){let{alibaba:t,openai:n,edge:r,minimax:i,"tts-local-cli":a,providers:o,...s}=e,c={...o??{}};return t&&(c.alibaba={...c.alibaba??{},...t}),n&&(c.openai={...c.openai??{},...n}),r&&(c.edge={...c.edge??{},...r}),i&&(c.minimax={...c.minimax??{},...i}),a&&(c[`tts-local-cli`]={...c[`tts-local-cli`]??{},...a}),{...s,...Object.keys(c).length>0?{providers:c}:{}}}function G(e){let t=L(e)?e:{};return{stt:B(t.stt),tts:H(t.tts)}}async function K(){return G((await s(i(`/api/config`))).payload?.config??{})}async function q(e){await s(i(`/api/config`),{method:`PATCH`,body:JSON.stringify({stt:U(e.stt),tts:W(e.tts)})}),d()}async function J(){let e=await s(i(`/api/voice/models`));if(!e.payload?.models)throw Error(`Missing voice models payload`);return e.payload.models}async function Y(){let e=await s(i(`/api/voice/providers`));if(!e.payload?.providers)throw Error(`Missing voice providers payload`);return e.payload}async function X(){let e=await s(i(`/api/voice/stt-providers`));if(!e.payload?.providers)throw Error(`Missing STT providers payload`);return e.payload}async function Z(e){let t=await s(i(`/api/voice/reveal-api-key`),{method:`POST`,body:JSON.stringify(e)});if(!t.payload)throw Error(`Missing reveal payload`);return t.payload}function Q(e){let t=(0,ee.c)(15),{kind:n,providerId:r,fieldId:i,value:a,onChange:o,labels:s,placeholder:c,className:l}=e,u=c===void 0?`sk-...`:c,d;t[0]!==n||t[1]!==r?(d=()=>Z({kind:n,provider:r}).then($),t[0]=n,t[1]=r,t[2]=d):d=t[2];let p=d,m;t[3]===l?m=t[4]:(m=f(`flex min-w-0 flex-col gap-1.5`,l),t[3]=l,t[4]=m);let g;t[5]!==i||t[6]!==s||t[7]!==o||t[8]!==u||t[9]!==p||t[10]!==a?(g=(0,j.jsx)(h,{id:i,value:a,onChange:o,placeholder:u,labels:s,reveal:p,loadFailedLabel:s.loadFailed,maskedHelp:s.maskedHelp,notInConfigFile:s.notInConfigFile,inputClassName:`text-xs`}),t[5]=i,t[6]=s,t[7]=o,t[8]=u,t[9]=p,t[10]=a,t[11]=g):g=t[11];let _;return t[12]!==m||t[13]!==g?(_=(0,j.jsx)(`div`,{className:m,children:g}),t[12]=m,t[13]=g,t[14]=_):_=t[14],_}function $(e){return e.apiKey??null}export{X as a,F as c,S as d,K as i,fe as l,J as n,G as o,Y as r,q as s,Q as t,C as u};
@@ -1,27 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{i,o as a}from"./url-fxyYANfA.js";import{i as o}from"./vendor-swr-BIWyz7Rc.js";import{n as s}from"./eye-DAfL1U7M.js";import{a as c,i as l,n as u,o as d,r as f,s as p,t as m}from"./dist-BTWC-BTN.js";import{a as h}from"./fetch-Dqa9iTWl.js";import{Aa as g,C as _,Ci as v,Cr as y,D as b,Dr as x,E as S,Fr as C,Ga as w,Ii as T,Ir as E,Rr as D,S as O,Sa as k,T as A,Ti as j,Ur as M,Zr as N,_ as ee,a as P,ai as F,b as I,bi as te,ca as ne,d as L,ea as re,f as R,g as ie,h as ae,i as z,ji as B,ka as oe,l as V,m as H,o as U,p as W,pi as se,qa as G,qi as ce,qr as le,r as K,ri as q,u as J,ua as ue,ur as de,v as fe,w as pe,y as me,yi as he}from"./index-BYcGfwcE.js";import{a as Y,c as ge,d as _e,f as ve,i as ye,l as be,m as xe,n as Se,o as X,p as Ce,r as we,s as Te,t as Ee,u as De}from"./workflow-page.utils-DnG8JBhV.js";var Z=e(t(),1),Q=n(),Oe=[`queued`,`running`,`succeeded`,`attention`],ke=10080*60*1e3,Ae=new Set([`failed`,`timeout`,`cancelled`]);function je(e){return e.metadata?.sessionKey?.trim()||null}function Me(e,t){return e.length<=t?e:`${e.slice(0,t-1)}…`}function Ne(e,t){if(!e||typeof e!=`object`)return null;let n=e;for(let e of t){let t=n[e];if(typeof t==`string`&&t.trim())return t.trim()}return null}function Pe(e,t=90){let n=e.metadata?.input?.goal?.trim()||(typeof e.metadata?.input?.payload==`string`?e.metadata.input.payload.trim():null)||Ne(e.metadata?.input?.payload,[`query`,`goal`,`prompt`,`input`,`message`])||Ne(e.metadata?.input?.variables,[`query`,`goal`,`prompt`,`input`,`message`]);return n?Me(n,t):null}function Fe(e,t=90){return Pe(e,t)??Me(e.title?.trim()||e.definitionId,t)}function Ie(e,t=44){return Me(e.title?.trim()||e.definitionId,t)}function Le(e,t){let n=t.trim().toLowerCase();return n?[Pe(e,500),e.title,e.definitionId,e.id].filter(Boolean).join(` `).toLowerCase().includes(n):!0}function Re(e,t){let n=t.workflowFilterId.trim();return e.filter(e=>n&&e.definitionId!==n||!be(e,t.triggerFilter??`all`)?!1:Le(e,t.searchQuery))}function ze(e){return e.completedAtMs??e.createdAtMs}function Be(e,t){return t-ze(e)<=ke}function Ve(e,t){return e.status===`queued`?`queued`:e.status===`running`?`running`:e.status===`succeeded`?Be(e,t)?`succeeded`:null:Ae.has(e.status)?`attention`:null}function He(e,t){let n=[...t];return e===`queued`?n.sort((e,t)=>e.createdAtMs-t.createdAtMs):e===`running`?n.sort((e,t)=>(t.startedAtMs??t.createdAtMs)-(e.startedAtMs??e.createdAtMs)):n.sort((e,t)=>ze(t)-ze(e))}function Ue(e,t){let n={queued:[],running:[],succeeded:[],attention:[]};for(let r of e){let e=Ve(r,t);e&&n[e].push(r)}let r=He(`succeeded`,n.succeeded),i=r.length,a=r.slice(0,20),o=Math.max(0,i-20);return Oe.map(e=>e===`succeeded`?{id:e,runs:a,totalInWindow:i,hiddenByCap:o}:{id:e,runs:He(e,n[e])})}function We(e,t,n){let r=Math.round((t-e)/1e3);if(r<60)return new Intl.RelativeTimeFormat(n,{numeric:`auto`}).format(-r,`second`);let i=Math.round(r/60);if(i<60)return new Intl.RelativeTimeFormat(n,{numeric:`auto`}).format(-i,`minute`);let a=Math.round(i/60);if(a<48)return new Intl.RelativeTimeFormat(n,{numeric:`auto`}).format(-a,`hour`);let o=Math.round(a/24);return new Intl.RelativeTimeFormat(n,{numeric:`auto`}).format(-o,`day`)}function Ge(e){return e.status===`queued`||e.status===`running`}function Ke(e){return e.status===`failed`||e.status===`timeout`||e.status===`cancelled`}var $=r(),qe=(0,Z.memo)(function(e){let t=(0,Q.c)(64),{run:n,language:r,localeTag:i,nowMs:o,selected:s,onOpen:c,onOpenChat:l,onCancel:u,onRetry:d}=e,f=a(r).workflows,[p,m]=(0,Z.useState)(!1),h;t[0]===n?h=t[1]:(h=je(n),t[0]=n,t[1]=h);let g=!h,_;t[2]===n?_=t[3]:(_=Ge(n),t[2]=n,t[3]=_);let v=_,y=n.status===`running`||n.status===`queued`,b;t[4]!==n.metrics.agentCount||t[5]!==n.metrics.doneAgentCount?(b=n.metrics.agentCount>0?Math.round(n.metrics.doneAgentCount/n.metrics.agentCount*100):0,t[4]=n.metrics.agentCount,t[5]=n.metrics.doneAgentCount,t[6]=b):b=t[6];let S=b,w=n.metrics.errorAgentCount>0,T=n.startedAtMs??n.createdAtMs,D=we(v?o-T:n.metrics.durationMs),O=X(f.taskArtifacts,{count:n.metrics.artifactCount}),k;t[7]===n?k=t[8]:(k=Fe(n),t[7]=n,t[8]=k);let A=k,j;t[9]===n?j=t[10]:(j=Ie(n),t[9]=n,t[10]=j);let M=j,N;t[11]!==c||t[12]!==n?(N=()=>{c(n)},t[11]=c,t[12]=n,t[13]=N):N=t[13];let ee=N,P;t[14]!==g||t[15]!==l||t[16]!==n?(P=()=>{g||l(n)},t[14]=g,t[15]=l,t[16]=n,t[17]=P):P=t[17];let F=P,I=s?`border-accent/70 ring-1 ring-accent/30`:`border-edge`,te;t[18]===I?te=t[19]:(te=E(`group relative rounded-xl border bg-surface-panel p-3 transition-colors`,I,`hover:border-edge-strong hover:bg-surface-hover/50`),t[18]=I,t[19]=te);let L;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(L=E(`w-full text-left`,x.focusRingPanel),t[20]=L):L=t[20];let re;t[21]===A?re=t[22]:(re=(0,$.jsx)(`div`,{className:`line-clamp-2 min-w-0 text-sm font-medium leading-5 text-fg`,children:A}),t[21]=A,t[22]=re);let R;t[23]===n.status?R=t[24]:(R=E(`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium`,De(n.status)),t[23]=n.status,t[24]=R);let ie;t[25]===M?ie=t[26]:(ie=(0,$.jsx)(`span`,{className:`truncate`,children:M}),t[25]=M,t[26]=ie);let ae;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,$.jsx)(`span`,{"aria-hidden":!0,children:`·`}),t[27]=ae):ae=t[27];let z;t[28]!==i||t[29]!==o||t[30]!==T?(z=We(T,o,i),t[28]=i,t[29]=o,t[30]=T,t[31]=z):z=t[31];let B;t[32]===z?B=t[33]:(B=(0,$.jsx)(`span`,{children:z}),t[32]=z,t[33]=B);let oe=D===`—`?null:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,$.jsx)(`span`,{children:X(f.taskElapsed,{duration:D})})]}),V;t[34]!==ie||t[35]!==B||t[36]!==oe?(V=(0,$.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-1 text-[11px] text-fg-subtle`,children:[ie,ae,B,oe]}),t[34]=ie,t[35]=B,t[36]=oe,t[37]=V):V=t[37];let H=n.metrics.artifactCount>0?(0,$.jsx)(`span`,{children:O}):null,U=s?(0,$.jsx)(`span`,{className:`text-accent-fg`,children:f.taskOpenDetails}):null,W;t[38]!==H||t[39]!==U?(W=(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-[11px] text-fg-subtle`,children:[H,U]}),t[38]=H,t[39]=U,t[40]=W):W=t[40];let se;t[41]===m?se=t[42]:(se=()=>m(Ye),t[41]=m,t[42]=se);let G;t[43]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,$.jsx)(ne,{className:`size-4`,"aria-hidden":!0}),t[43]=G):G=t[43];let ce;t[44]!==f.taskActionsAria||t[45]!==p||t[46]!==se?(ce=(0,$.jsx)(C,{variant:`ghost`,className:`size-7 p-0 opacity-0 group-hover:opacity-100 group-focus-within:opacity-100`,"aria-label":f.taskActionsAria,"aria-expanded":p,onClick:se,children:G}),t[44]=f.taskActionsAria,t[45]=p,t[46]=se,t[47]=ce):ce=t[47];let K;t[48]!==v||t[49]!==g||t[50]!==F||t[51]!==f.cancel||t[52]!==f.continueInChat||t[53]!==f.rerun||t[54]!==f.taskCloseMenu||t[55]!==p||t[56]!==u||t[57]!==d||t[58]!==n||t[59]!==m?(K=p?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{type:`button`,className:`fixed inset-0 z-10 cursor-default`,"aria-label":f.taskCloseMenu,onClick:()=>m(!1)}),(0,$.jsxs)(`div`,{className:`absolute right-0 z-20 mt-1 min-w-36 rounded-lg border border-edge bg-surface-panel py-1 shadow-surface`,children:[(0,$.jsx)(Je,{label:f.continueInChat,disabled:g,onClick:()=>{m(!1),F()}}),v?(0,$.jsx)(Je,{label:f.cancel,tone:`danger`,onClick:()=>{m(!1),u(n.id)}}):null,Ke(n)?(0,$.jsx)(Je,{label:f.rerun,onClick:()=>{m(!1),d(n.id)}}):null]})]}):null,t[48]=v,t[49]=g,t[50]=F,t[51]=f.cancel,t[52]=f.continueInChat,t[53]=f.rerun,t[54]=f.taskCloseMenu,t[55]=p,t[56]=u,t[57]=d,t[58]=n,t[59]=m,t[60]=K):K=t[60];let q;return t[61]!==ce||t[62]!==K?(q=(0,$.jsxs)(`div`,{className:`absolute right-2 top-2`,children:[ce,K]}),t[61]=ce,t[62]=K,t[63]=q):q=t[63],(0,$.jsxs)(`div`,{className:te,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:ee,"aria-label":`${f.taskOpenDetails}: ${A}`,"aria-current":s?`true`:void 0,className:L,children:[(0,$.jsxs)(`div`,{className:`pr-7`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-2`,children:[re,(0,$.jsx)(`span`,{className:R,children:f.status[n.status]??n.status})]}),V]}),y?(0,$.jsxs)(`div`,{className:`mt-2.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[11px] text-fg-muted`,children:[(0,$.jsx)(`span`,{children:X(f.agentProgress,{done:n.metrics.doneAgentCount,total:n.metrics.agentCount})}),(0,$.jsxs)(`span`,{children:[S,`%`]})]}),(0,$.jsx)(`div`,{className:`mt-1.5 h-1 overflow-hidden rounded-full bg-surface-hover`,children:(0,$.jsx)(`div`,{className:`h-full rounded-full bg-accent transition-all`,style:{width:`${S}%`}})})]}):null,W,w?(0,$.jsxs)(`div`,{className:`mt-2 flex items-center gap-1 text-[11px] text-amber-700 dark:text-amber-300`,children:[(0,$.jsx)(le,{className:`size-3 shrink-0`,"aria-hidden":!0}),X(f.runRowErrorSummary,{count:n.metrics.errorAgentCount})]}):null]}),q]})});function Je(e){let t=(0,Q.c)(8),{label:n,disabled:r,tone:i,onClick:a}=e,o=r?`cursor-not-allowed text-fg-subtle`:`text-fg hover:bg-surface-hover`,s=i===`danger`&&!r&&`text-red-600 dark:text-red-300`,c;t[0]!==o||t[1]!==s?(c=E(`block w-full px-3 py-1.5 text-left text-xs`,o,s),t[0]=o,t[1]=s,t[2]=c):c=t[2];let l;return t[3]!==r||t[4]!==n||t[5]!==a||t[6]!==c?(l=(0,$.jsx)(`button`,{type:`button`,disabled:r,onClick:a,className:c,children:n}),t[3]=r,t[4]=n,t[5]=a,t[6]=c,t[7]=l):l=t[7],l}function Ye(e){return!e}function Xe(e,t){return t.boardColumns[e]}var Ze=(0,Z.memo)(function(e){let t=(0,Q.c)(13),{column:n,language:r,localeTag:i,nowMs:o,selectedRunId:s,onOpenRun:c,onOpenRunChat:l,onCancelRun:u,onRetryRun:d}=e,f=a(r).workflows,[p,m]=(0,Z.useState)(!1),h=n.id===`succeeded`,g=h?5:n.runs.length,_;t[0]!==g||t[1]!==n.runs||t[2]!==p||t[3]!==h?(_=h&&!p?n.runs.slice(0,g):n.runs,t[0]=g,t[1]=n.runs,t[2]=p,t[3]=h,t[4]=_):_=t[4];let v=_,y=h&&n.runs.length>5&&!p,b=h&&p,x;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(x=E(`flex min-h-48 min-w-64 flex-1 flex-col rounded-2xl border border-edge bg-surface-panel/40`,`snap-center`),t[5]=x):x=t[5];let S;t[6]===n.runs.length?S=t[7]:(S=(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2 py-0.5 text-xs tabular-nums text-fg-muted`,children:n.runs.length}),t[6]=n.runs.length,t[7]=S);let w=v.length===0?(0,$.jsx)(`p`,{className:`px-1 py-6 text-center text-xs text-fg-subtle`,children:f.boardColumnEmpty}):v.map(e=>(0,$.jsx)(qe,{run:e,language:r,localeTag:i,nowMs:o,selected:e.id===s,onOpen:c,onOpenChat:l,onCancel:u,onRetry:d},e.id)),T=y?(0,$.jsx)(C,{variant:`ghost`,className:`h-8 w-full text-xs`,onClick:()=>m(!0),children:X(f.boardExpandSucceeded,{count:Math.min(n.runs.length,n.totalInWindow??n.runs.length)})}):null,D=b?(0,$.jsx)(C,{variant:`ghost`,className:`h-8 w-full text-xs`,onClick:()=>m(!1),children:f.boardCollapseSucceeded}):null,O=h&&(n.hiddenByCap??0)>0?(0,$.jsx)(`p`,{className:`px-1 text-center text-[11px] text-fg-subtle`,children:X(f.boardSucceededCapHint,{count:n.hiddenByCap??0})}):null,k;return t[8]!==w||t[9]!==T||t[10]!==D||t[11]!==O?(k=(0,$.jsxs)(`div`,{className:`flex flex-1 flex-col gap-2 p-2`,children:[w,T,D,O]}),t[8]=w,t[9]=T,t[10]=D,t[11]=O,t[12]=k):k=t[12],(0,$.jsxs)(`section`,{className:x,"aria-label":Xe(n.id,f),children:[(0,$.jsxs)(`header`,{className:`flex items-center justify-between gap-2 border-b border-edge-subtle px-3 py-2.5`,children:[(0,$.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:Xe(n.id,f)}),S]}),k]})}),Qe=(0,Z.memo)(function(e){let t=(0,Q.c)(45),{runs:n,language:r,localeTag:i,labels:a,searchQuery:o,workflowFilterId:s,triggerFilter:c,selectedRunId:l,loading:u,onOpenRun:d,onOpenRunChat:f,onCancelRun:p,onRetryRun:m,onStart:h}=e,g;t[0]===n?g=t[1]:(g=n.some($e),t[0]=n,t[1]=g);let _=g,[v,y]=(0,Z.useState)(et),b,x;t[2]===_?(b=t[3],x=t[4]):(b=()=>{if(!_)return;let e=window.setInterval(()=>y(Date.now()),1e3);return()=>window.clearInterval(e)},x=[_],t[2]=_,t[3]=b,t[4]=x),(0,Z.useEffect)(b,x);let S;t[5]!==v||t[6]!==n||t[7]!==o||t[8]!==c||t[9]!==s?(S=Ue(Re(n,{searchQuery:o,workflowFilterId:s,triggerFilter:c}),v),t[5]=v,t[6]=n,t[7]=o,t[8]=c,t[9]=s,t[10]=S):S=t[10];let w=S,T=w.reduce(tt,0);if(u&&T===0){let e;return t[11]===a.loading?e=t[12]:(e=(0,$.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.loading}),t[11]=a.loading,t[12]=e),e}if(!u&&T===0){let e;t[13]===a.boardEmptyTitle?e=t[14]:(e=(0,$.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:a.boardEmptyTitle}),t[13]=a.boardEmptyTitle,t[14]=e);let n;t[15]===a.boardEmptyHint?n=t[16]:(n=(0,$.jsx)(`p`,{className:`mx-auto mt-2 max-w-md text-sm leading-6 text-fg-muted`,children:a.boardEmptyHint}),t[15]=a.boardEmptyHint,t[16]=n);let r;t[17]!==a.boardStart||t[18]!==h?(r=(0,$.jsx)(`div`,{className:`mt-4 flex justify-center`,children:(0,$.jsx)(C,{variant:`primary`,onClick:h,children:a.boardStart})}),t[17]=a.boardStart,t[18]=h,t[19]=r):r=t[19];let i;return t[20]!==e||t[21]!==n||t[22]!==r?(i=(0,$.jsxs)(`div`,{className:`rounded-2xl border border-dashed border-edge bg-surface-panel/40 px-6 py-12 text-center`,children:[e,n,r]}),t[20]=e,t[21]=n,t[22]=r,t[23]=i):i=t[23],i}let E;if(t[24]!==w||t[25]!==r||t[26]!==i||t[27]!==v||t[28]!==p||t[29]!==d||t[30]!==f||t[31]!==m||t[32]!==l){let e;t[34]!==r||t[35]!==i||t[36]!==v||t[37]!==p||t[38]!==d||t[39]!==f||t[40]!==m||t[41]!==l?(e=e=>(0,$.jsx)(Ze,{column:e,language:r,localeTag:i,nowMs:v,selectedRunId:l,onOpenRun:d,onOpenRunChat:f,onCancelRun:p,onRetryRun:m},e.id),t[34]=r,t[35]=i,t[36]=v,t[37]=p,t[38]=d,t[39]=f,t[40]=m,t[41]=l,t[42]=e):e=t[42],E=w.map(e),t[24]=w,t[25]=r,t[26]=i,t[27]=v,t[28]=p,t[29]=d,t[30]=f,t[31]=m,t[32]=l,t[33]=E}else E=t[33];let D;return t[43]===E?D=t[44]:(D=(0,$.jsx)(`div`,{className:`-mx-1 flex min-w-0 gap-3 overflow-x-auto px-1 pb-2 snap-x snap-mandatory`,children:E}),t[43]=E,t[44]=D),D});function $e(e){return e.status===`queued`||e.status===`running`}function et(){return Date.now()}function tt(e,t){return e+t.runs.length}function nt(e){let t=(0,Q.c)(45),{open:n,definition:r,language:i,onClose:o,onRun:s}=e,m;t[0]===i?m=t[1]:(m=a(i),t[0]=i,t[1]=m);let h=m.workflows;if(!r)return null;let g;t[2]!==r||t[3]!==i?(g=xe(r,i),t[2]=r,t[3]=i,t[4]=g):g=t[4];let _=g,v=r.runtime?.source??``,y;t[5]===o?y=t[6]:(y=e=>!e&&o(),t[5]=o,t[6]=y);let b;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,$.jsx)(l,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[7]=b):b=t[7];let x;t[8]===r.title?x=t[9]:(x=(0,$.jsx)(p,{className:`text-base font-semibold text-fg`,children:r.title}),t[8]=r.title,t[9]=x);let S;t[10]===_.description?S=t[11]:(S=(0,$.jsx)(f,{className:`mt-1 text-sm text-fg-muted`,children:_.description}),t[10]=_.description,t[11]=S);let w;t[12]!==x||t[13]!==S?(w=(0,$.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[x,S]}),t[12]=x,t[13]=S,t[14]=w):w=t[14];let T;t[15]!==h.whenToUseHeading||t[16]!==_.whenToUse?(T=_.whenToUse?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:h.whenToUseHeading}),(0,$.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-fg-muted`,children:_.whenToUse})]}):null,t[15]=h.whenToUseHeading,t[16]=_.whenToUse,t[17]=T):T=t[17];let E;t[18]!==r.phases||t[19]!==h.phasesHeading?(E=r.phases.length>0?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:h.phasesHeading}),(0,$.jsx)(`ol`,{className:`mt-2 space-y-2`,children:r.phases.map(rt)})]}):null,t[18]=r.phases,t[19]=h.phasesHeading,t[20]=E):E=t[20];let D;t[21]!==h.scriptHeading||t[22]!==v?(D=v?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:h.scriptHeading}),(0,$.jsx)(`pre`,{className:`mt-2 max-h-64 overflow-auto rounded-xl border border-edge bg-surface-base/50 p-3 font-mono text-xs leading-5 text-fg-muted`,children:v})]}):null,t[21]=h.scriptHeading,t[22]=v,t[23]=D):D=t[23];let O;t[24]!==D||t[25]!==T||t[26]!==E?(O=(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-auto px-5 py-4`,children:[T,E,D]}),t[24]=D,t[25]=T,t[26]=E,t[27]=O):O=t[27];let k;t[28]!==h.closeResult||t[29]!==o?(k=(0,$.jsx)(C,{variant:`secondary`,onClick:o,children:h.closeResult}),t[28]=h.closeResult,t[29]=o,t[30]=k):k=t[30];let A;t[31]!==h.runWorkflow||t[32]!==s?(A=(0,$.jsx)(C,{variant:`primary`,onClick:s,children:h.runWorkflow}),t[31]=h.runWorkflow,t[32]=s,t[33]=A):A=t[33];let j;t[34]!==k||t[35]!==A?(j=(0,$.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[k,A]}),t[34]=k,t[35]=A,t[36]=j):j=t[36];let M;t[37]!==O||t[38]!==j||t[39]!==w?(M=(0,$.jsxs)(c,{children:[b,(0,$.jsxs)(u,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(85vh,44rem)] w-[min(100%-2rem,48rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[w,O,j]})]}),t[37]=O,t[38]=j,t[39]=w,t[40]=M):M=t[40];let N;return t[41]!==n||t[42]!==M||t[43]!==y?(N=(0,$.jsx)(d,{open:n,onOpenChange:y,children:M}),t[41]=n,t[42]=M,t[43]=y,t[44]=N):N=t[44],N}function rt(e,t){return(0,$.jsxs)(`li`,{className:`rounded-xl border border-edge bg-surface-base/40 px-3 py-2`,children:[(0,$.jsxs)(`div`,{className:`text-sm font-medium text-fg`,children:[t+1,`. `,e.title]}),e.description?(0,$.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-fg-muted`,children:e.description}):null]},e.id)}function it({open:e,language:t,saving:n,onClose:r,onSave:i}){let o=a(t).workflows,[s,m]=(0,Z.useState)(``),[h,g]=(0,Z.useState)(``),[_,v]=(0,Z.useState)(!1),[y,b]=(0,Z.useState)(!1),[x,S]=(0,Z.useState)(null),[w,T]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{e&&(m(``),v(!1),b(!1),S(null),T(null),g(`export const meta = {
2
- name: 'my_workflow',
3
- description: 'Describe what this workflow does.',
4
- whenToUse: 'When the user asks for …',
5
- examplePrompts: [
6
- { field: 'goal', text: 'Example goal for this workflow' },
7
- ],
8
- i18n: {
9
- zh: {
10
- description: '描述此工作流做什么。',
11
- whenToUse: '当用户需要 … 时使用',
12
- examplePrompts: [
13
- { field: 'goal', text: '此工作流的示例目标' },
14
- ],
15
- },
16
- },
17
- tags: ['custom'],
18
- estimatedAgents: { min: 2, max: 4 },
19
- phases: [{ title: 'Step 1' }, { title: 'Synthesize' }],
20
- }
21
-
22
- phase('Step 1')
23
- const first = await agent('Do the first step.', { label: 'step 1' })
24
-
25
- phase('Synthesize')
26
- return await agent('Summarize:\\n\\n' + first, { label: 'synthesis' })
27
- `))},[e]);let E=s.trim(),D=!!(E&&h.trim());(0,Z.useEffect)(()=>{if(!e||!D){b(!1),S(null),T(null);return}let t=!1,n=window.setTimeout(()=>{b(!0),S(null),I(E,h).then(e=>{t||T(e)}).catch(e=>{t||(T(null),S(e instanceof Error?e.message:o.validateWorkflowFailed))}).finally(()=>{t||b(!1)})},450);return()=>{t=!0,window.clearTimeout(n)}},[D,o.validateWorkflowFailed,e,h,E]);let O=(0,Z.useMemo)(()=>x?[x]:w?.errors.map(e=>e.message)??[],[x,w]),k=_||y||w!=null||x!=null,A=D&&!n&&!y&&w?.valid===!0,j=async()=>{if(v(!0),!(!D||n)){b(!0),S(null);try{let e=await I(E,h);if(T(e),!e.valid)return;await i({name:E,script:h})}catch(e){T(null),S(e instanceof Error?e.message:o.validateWorkflowFailed)}finally{b(!1)}}};return(0,$.jsx)(d,{open:e,onOpenChange:e=>!e&&r(),children:(0,$.jsxs)(c,{children:[(0,$.jsx)(l,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),(0,$.jsxs)(u,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(90vh,44rem)] w-[min(100%-2rem,48rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[(0,$.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[(0,$.jsx)(p,{className:`text-base font-semibold text-fg`,children:o.manageDialogTitle}),(0,$.jsx)(f,{className:`mt-1 text-sm text-fg-muted`,children:o.manageDialogHint})]}),(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-auto px-5 py-4`,children:[(0,$.jsxs)(`label`,{className:`block`,children:[(0,$.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:o.workflowNameLabel}),(0,$.jsx)(`input`,{value:s,onChange:e=>{m(e.target.value),T(null),S(null)},placeholder:o.workflowNamePlaceholder,className:`mt-1.5 w-full rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm font-mono text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`})]}),(0,$.jsxs)(`label`,{className:`block`,children:[(0,$.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:o.workflowScriptLabel}),(0,$.jsx)(`textarea`,{value:h,onChange:e=>{g(e.target.value),T(null),S(null)},spellCheck:!1,className:`mt-1.5 min-h-72 w-full resize-y rounded-xl border border-edge bg-surface-base px-3 py-2 font-mono text-xs leading-5 text-fg outline-none focus:border-accent focus:ring-2 focus:ring-accent/20`})]}),k?(0,$.jsxs)(`div`,{className:O.length>0?`rounded-xl border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-200`:`rounded-xl border border-emerald-500/30 bg-emerald-500/10 px-3 py-2 text-sm text-emerald-700 dark:text-emerald-200`,role:`status`,children:[(0,$.jsx)(`div`,{className:`font-medium`,children:y?o.validatingWorkflow:O.length>0?o.validationFailed:o.validationPassed}),O.length>0?(0,$.jsx)(`ul`,{className:`mt-1 list-disc space-y-1 pl-5`,children:O.map(e=>(0,$.jsx)(`li`,{children:e},e))}):w?.definition?(0,$.jsx)(`div`,{className:`mt-1 text-xs opacity-80`,children:o.validationPreview.replace(`{{phaseCount}}`,String(w.definition.phases.length))}):null]}):null]}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[(0,$.jsx)(C,{variant:`secondary`,onClick:r,disabled:n,children:o.cancelDialog}),(0,$.jsx)(C,{variant:`primary`,disabled:!A,onClick:()=>void j(),children:n?o.savingWorkflow:o.saveWorkflow})]})]})]})})}function at(e,t){let n=e.metadata.estimatedAgents;return n?n.min===n.max?X(t.agentScaleExact,{count:n.min}):X(t.agentScaleRange,{min:n.min,max:n.max}):null}function ot(e){let t=(0,Q.c)(46),{definition:n,language:r,labels:i,onPick:a}=e,o;t[0]!==n||t[1]!==r?(o=xe(n,r),t[0]=n,t[1]=r,t[2]=o):o=t[2];let s=o,c;t[3]!==n||t[4]!==i?(c=at(n,i),t[3]=n,t[4]=i,t[5]=c):c=t[5];let l=c,u=n.metadata.source===`user`,d;t[6]!==n||t[7]!==a?(d=()=>a(n),t[6]=n,t[7]=a,t[8]=d):d=t[8];let f;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(f=E(`group flex h-full flex-col rounded-xl border border-edge-subtle bg-surface-base p-4 text-left transition-colors`,`hover:border-accent/40 hover:bg-surface-hover`,x.focusRingPanel),t[9]=f):f=t[9];let p=u?`bg-accent-soft text-accent-fg`:`bg-surface-hover text-fg-muted`,m;t[10]===p?m=t[11]:(m=E(`rounded-full px-2 py-0.5 text-[10px] font-medium`,p),t[10]=p,t[11]=m);let h=u?i.badgeUser:i.badgeBuiltin,g;t[12]!==m||t[13]!==h?(g=(0,$.jsx)(`span`,{className:m,children:h}),t[12]=m,t[13]=h,t[14]=g):g=t[14];let _;t[15]===n.metadata.tags?_=t[16]:(_=n.metadata.tags.slice(0,2).map(st),t[15]=n.metadata.tags,t[16]=_);let v;t[17]!==g||t[18]!==_?(v=(0,$.jsxs)(`div`,{className:`mb-2 flex flex-wrap items-center gap-1.5`,children:[g,_]}),t[17]=g,t[18]=_,t[19]=v):v=t[19];let y;t[20]===n.title?y=t[21]:(y=(0,$.jsx)(`span`,{className:`line-clamp-2 text-sm font-semibold leading-5 text-fg`,children:n.title}),t[20]=n.title,t[21]=y);let b;t[22]!==v||t[23]!==y?(b=(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[v,y]}),t[22]=v,t[23]=y,t[24]=b):b=t[24];let S;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,$.jsx)(`span`,{className:`flex size-8 shrink-0 items-center justify-center rounded-lg bg-accent-soft text-accent-fg opacity-80 transition-opacity group-hover:opacity-100`,children:(0,$.jsx)(j,{className:`size-3.5`,"aria-hidden":!0})}),t[25]=S):S=t[25];let C;t[26]===b?C=t[27]:(C=(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[b,S]}),t[26]=b,t[27]=C);let w;t[28]===s.description?w=t[29]:(w=s.description?(0,$.jsx)(`p`,{className:`mt-2 line-clamp-2 text-xs leading-5 text-fg-muted`,children:s.description}):null,t[28]=s.description,t[29]=w);let T;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,$.jsx)(ce,{className:`size-3`,"aria-hidden":!0}),t[30]=T):T=t[30];let D;t[31]!==n.phases.length||t[32]!==i.phaseCount?(D=X(i.phaseCount,{count:n.phases.length}),t[31]=n.phases.length,t[32]=i.phaseCount,t[33]=D):D=t[33];let O;t[34]===D?O=t[35]:(O=(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[T,D]}),t[34]=D,t[35]=O);let k;t[36]===l?k=t[37]:(k=l?(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,$.jsx)(M,{className:`size-3`,"aria-hidden":!0}),l]}):null,t[36]=l,t[37]=k);let A;t[38]!==O||t[39]!==k?(A=(0,$.jsxs)(`div`,{className:`mt-auto flex flex-wrap items-center gap-3 pt-3 text-[11px] text-fg-subtle`,children:[O,k]}),t[38]=O,t[39]=k,t[40]=A):A=t[40];let N;return t[41]!==C||t[42]!==w||t[43]!==A||t[44]!==d?(N=(0,$.jsxs)(`button`,{type:`button`,onClick:d,className:f,children:[C,w,A]}),t[41]=C,t[42]=w,t[43]=A,t[44]=d,t[45]=N):N=t[45],N}function st(e){return(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2 py-0.5 text-[10px] text-fg-subtle`,children:e},e)}function ct(e,t){return e===`uncategorized`?t.categories.uncategorized:t.categories[e]}function lt(e){let t=(0,Q.c)(11),{definitions:n,language:r,onPick:i}=e,o=a(r).workflows,[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(`all`),d;t[0]!==l||t[1]!==n||t[2]!==s?(d=Se(n,s,l,`all`),t[0]=l,t[1]=n,t[2]=s,t[3]=d):d=t[3];let f=d,p;t[4]===f?p=t[5]:(p=Y(f),t[4]=f,t[5]=p);let m=p,h;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,$.jsx)(se,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`,"aria-hidden":!0}),t[6]=h):h=t[6];let g;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(g=e=>c(e.target.value),t[7]=g):g=t[7];let _=o.searchPlaceholder,v;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(v=E(`h-10 w-full rounded-xl border border-edge bg-surface-base py-2 pl-10 pr-3 text-sm text-fg`,`placeholder:text-fg-subtle`,x.focusRingPanel),t[8]=v):v=t[8];let y=f.length===0?(0,$.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-4 py-12 text-center`,children:[(0,$.jsx)(`p`,{className:`text-sm text-fg-muted`,children:o.noDefinitions}),(0,$.jsx)(`p`,{className:`mt-1 max-w-sm text-xs leading-5 text-fg-subtle`,children:o.noDefinitionsHint})]}):l===`all`?(0,$.jsx)(`div`,{className:`flex flex-col gap-6 pb-1`,children:m.map(e=>(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`mb-3 text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:ct(e.category,o)}),(0,$.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-3`,children:e.items.map(e=>(0,$.jsx)(ot,{definition:e,language:r,labels:o,onPick:i},e.id))})]},e.category))}):(0,$.jsx)(`div`,{className:`grid grid-cols-1 gap-3 pb-1 sm:grid-cols-2 xl:grid-cols-3`,children:f.map(e=>(0,$.jsx)(ot,{definition:e,language:r,labels:o,onPick:i},e.id))}),b;return t[9]===y?b=t[10]:(b=(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:y}),t[9]=y,t[10]=b),(0,$.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4`,children:[(0,$.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-4`,children:[(0,$.jsxs)(`div`,{className:`relative`,children:[h,(0,$.jsx)(`input`,{value:s,onChange:g,placeholder:_,className:v})]}),(0,$.jsx)(`div`,{className:`flex flex-wrap gap-2`,role:`group`,"aria-label":o.categoryFilterAria,children:U.map(e=>(0,$.jsx)(C,{type:`button`,variant:l===e?`secondary`:`ghost`,className:`h-8 rounded-full px-3 py-1.5 text-xs`,onClick:()=>u(e),children:o.categories[e]},e))})]}),b]})}function ut(e){let t=(0,Q.c)(30),{open:n,definitions:r,language:i,onClose:o,onPick:s}=e,h;t[0]===i?h=t[1]:(h=a(i),t[0]=i,t[1]=h);let g=h.workflows,_;t[2]===o?_=t[3]:(_=e=>!e&&o(),t[2]=o,t[3]=_);let v;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,$.jsx)(l,{className:`fixed inset-0 z-50 bg-scrim`}),t[4]=v):v=t[4];let y;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(y=E(`pointer-events-auto relative flex h-[min(90vh,840px)] w-full max-w-5xl flex-col`,`rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,x.focusRingPanel),t[5]=y):y=t[5];let b;t[6]===g.pickStartTitle?b=t[7]:(b=(0,$.jsx)(p,{className:`text-lg font-semibold text-fg`,children:g.pickStartTitle}),t[6]=g.pickStartTitle,t[7]=b);let S;t[8]===g.pickStartHint?S=t[9]:(S=(0,$.jsx)(f,{className:`mt-1 text-sm leading-6 text-fg-muted`,children:g.pickStartHint}),t[8]=g.pickStartHint,t[9]=S);let w;t[10]!==b||t[11]!==S?(w=(0,$.jsxs)(`div`,{className:`min-w-0`,children:[b,S]}),t[10]=b,t[11]=S,t[12]=w):w=t[12];let T;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,$.jsx)(D,{className:`size-5`,strokeWidth:1.75,"aria-hidden":!0}),t[13]=T):T=t[13];let O;t[14]===g.pickStartClose?O=t[15]:(O=(0,$.jsx)(m,{asChild:!0,children:(0,$.jsx)(C,{variant:`ghost`,className:`size-9 shrink-0 p-0`,"aria-label":g.pickStartClose,children:T})}),t[14]=g.pickStartClose,t[15]=O);let k;t[16]!==w||t[17]!==O?(k=(0,$.jsxs)(`div`,{className:`flex shrink-0 items-start justify-between gap-4 border-b border-edge-subtle px-6 py-5`,children:[w,O]}),t[16]=w,t[17]=O,t[18]=k):k=t[18];let A;t[19]!==r||t[20]!==i||t[21]!==s?(A=(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-6 py-5`,children:(0,$.jsx)(lt,{definitions:r,language:i,onPick:s})}),t[19]=r,t[20]=i,t[21]=s,t[22]=A):A=t[22];let j;t[23]!==k||t[24]!==A?(j=(0,$.jsxs)(c,{children:[v,(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none`,children:(0,$.jsxs)(u,{className:y,onOpenAutoFocus:dt,children:[k,A]})})]}),t[23]=k,t[24]=A,t[25]=j):j=t[25];let M;return t[26]!==n||t[27]!==j||t[28]!==_?(M=(0,$.jsx)(d,{open:n,onOpenChange:_,children:j}),t[26]=n,t[27]=j,t[28]=_,t[29]=M):M=t[29],M}function dt(e){return e.preventDefault()}function ft(e,t){return t.status[e]??e}function pt(e,t){return t.phaseStatus[e]??e}function mt(e,t){let{run:n}=e;return n.status===`succeeded`?X(t.runSummarySucceeded,{agents:n.metrics.doneAgentCount,artifacts:n.metrics.artifactCount}):n.status===`failed`||n.status===`timeout`?n.error?.message??t.runSummaryFailedFallback:n.status===`cancelled`?t.runSummaryCancelled:X(t.runSummaryActive,{done:n.metrics.doneAgentCount,total:n.metrics.agentCount})}function ht(e,t){let{run:n}=e;return n.status===`failed`?t.diagnosticFailedHint:n.status===`timeout`?t.diagnosticTimeoutHint:n.status===`cancelled`?t.diagnosticCancelledHint:n.status===`succeeded`&&n.metrics.errorAgentCount>0?t.diagnosticPartialHint:null}function gt(e){return ge(e)}function _t(e){return!e||typeof e!=`object`||!(`kind`in e)?`unknown`:e.kind===`chat`?`chat · ${e.sessionKey}`:e.kind===`webui`?e.sessionKey?`webui · ${e.sessionKey}`:`webui`:e.kind===`cron`?`cron · ${e.scheduleId}`:e.kind===`api`?e.requestId?`api · ${e.requestId}`:`api`:e.kind===`im`?`${e.channel} · ${e.chatId}`:String(e.kind)}function vt({view:e,loading:t,language:n,localeTag:r,onCancel:i,onRetry:o,onClose:f}){let m=a(n).workflows,h=O(n),v=w(),[x,j]=(0,Z.useState)(!0),[M,N]=(0,Z.useState)(!1),[ee,P]=(0,Z.useState)(null),[F,I]=(0,Z.useState)(!1),[,te]=(0,Z.useState)(0),ne=e?.run.status,re=ne?z.has(ne):!1;(0,Z.useEffect)(()=>{e?.run.id&&(j(re||ne===`failed`||ne===`timeout`||ne===`succeeded`&&e.run.metrics.errorAgentCount>0),P(null))},[e?.run.id,re,ne,e?.run.metrics.errorAgentCount]),(0,Z.useEffect)(()=>{if(!re)return;let e=window.setInterval(()=>te(e=>e+1),1e3);return()=>window.clearInterval(e)},[re]);let R=(0,Z.useMemo)(()=>e?L(e):null,[e]),ie=(0,Z.useMemo)(()=>R?b(R):{phases:[],unphased:null},[R]),ae=(0,Z.useMemo)(()=>ee==null||!R?null:R.agents.find(e=>e.id===ee)??null,[ee,R]),V=(0,Z.useCallback)(e=>{P(e.id)},[]),H=e?Te(e.run.result):void 0,U=_e(H),W=U.trim().length>0,se=(0,Z.useCallback)(async()=>{W&&await y(U)&&(I(!0),window.setTimeout(()=>I(!1),1500))},[W,U]),G=(0,Z.useCallback)(()=>{if(!W||!e)return;let t=new Blob([U],{type:`text/markdown;charset=utf-8`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${e.run.definitionId}-${e.run.id.slice(0,8)}.md`,r.click(),URL.revokeObjectURL(n)},[W,U,e]),ce=(0,Z.useCallback)(()=>{if(!e)return;let t=gt(e);t&&v(ve(t))},[v,e]),K=e?gt(e):null;if(t)return(0,$.jsx)(d,{open:!0,onOpenChange:e=>!e&&f(),children:(0,$.jsxs)(c,{children:[(0,$.jsx)(l,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),(0,$.jsxs)(u,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(85vh,44rem)] w-[min(100%-2rem,48rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge px-5 py-4`,children:[(0,$.jsx)(p,{className:`text-base font-semibold tracking-tight text-fg`,children:m.runSummaryTitle}),(0,$.jsx)(C,{type:`button`,variant:`ghost`,className:`size-9 shrink-0 p-0`,"aria-label":m.pickStartClose,onClick:f,children:(0,$.jsx)(D,{className:`size-5`,"aria-hidden":!0})})]}),(0,$.jsx)(`div`,{className:`p-5 text-sm text-fg-muted`,children:m.loading})]})]})});if(!e||!R)return null;let{run:J}=e,de=e.controls.canCancel&&re,fe=re&&J.startedAtMs!=null?we(Date.now()-J.startedAtMs):we(J.metrics.durationMs??void 0),me=mt(e,m),Y=ht(e,m),be=J.metadata,xe=_t(J.source);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(d,{open:!0,onOpenChange:e=>!e&&f(),children:(0,$.jsxs)(c,{children:[(0,$.jsx)(l,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),(0,$.jsxs)(u,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(90vh,52rem)] w-[min(100%-2rem,64rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge px-5 py-4`,children:[(0,$.jsx)(p,{className:`truncate text-base font-semibold tracking-tight text-fg`,children:J.title}),(0,$.jsx)(C,{type:`button`,variant:`ghost`,className:`size-9 shrink-0 p-0`,"aria-label":m.pickStartClose,onClick:f,children:(0,$.jsx)(D,{className:`size-5`,"aria-hidden":!0})})]}),(0,$.jsxs)(`section`,{className:`min-h-0 flex-1 overflow-y-auto p-5`,children:[(0,$.jsx)(`div`,{className:`flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between`,children:(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold text-fg`,children:J.title}),(0,$.jsx)(`span`,{className:E(`rounded-full px-2 py-0.5 text-xs font-medium`,De(J.status)),children:ft(J.status,m)})]}),(0,$.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:J.definitionId}),J.goal?(0,$.jsx)(`p`,{className:`mt-3 text-sm leading-6 text-fg-muted`,children:J.goal}):null]})}),(0,$.jsx)(`div`,{className:`mt-5 rounded-2xl border border-edge-subtle bg-surface-base/60 p-4`,children:(0,$.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,$.jsx)(`div`,{className:`rounded-xl bg-accent-soft p-2 text-accent-fg`,children:J.status===`succeeded`?(0,$.jsx)(B,{className:`size-4`,"aria-hidden":!0}):J.status===`failed`||J.status===`timeout`?(0,$.jsx)(le,{className:`size-4`,"aria-hidden":!0}):(0,$.jsx)(q,{className:`size-4`,"aria-hidden":!0})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:m.runSummaryTitle}),(0,$.jsx)(`p`,{className:`mt-1 text-sm leading-6 text-fg-muted`,children:me}),Y?(0,$.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-subtle`,children:Y}):null]})]})}),(0,$.jsxs)(`dl`,{className:`mt-5 grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,$.jsx)(St,{label:m.metrics.startedAt,value:ye(J.startedAtMs??J.createdAtMs,r)}),(0,$.jsx)(St,{label:m.metrics.duration,value:fe}),(0,$.jsx)(St,{label:m.metrics.agents,value:X(m.agentProgress,{done:J.metrics.doneAgentCount,total:J.metrics.agentCount})}),(0,$.jsx)(St,{label:m.metrics.artifacts,value:String(J.metrics.artifactCount)})]}),(0,$.jsxs)(`div`,{className:`mt-5 flex flex-wrap gap-2`,children:[K?(0,$.jsxs)(C,{variant:`primary`,onClick:ce,children:[(0,$.jsx)(T,{className:`size-4`,"aria-hidden":!0}),m.continueInChat]}):null,de?(0,$.jsxs)(C,{variant:`secondary`,onClick:i,className:`text-red-600 dark:text-red-300`,children:[(0,$.jsx)(k,{className:`size-4`,"aria-hidden":!0}),m.cancel]}):null,e.controls.canRetry?(0,$.jsxs)(C,{variant:`secondary`,onClick:o,children:[(0,$.jsx)(he,{className:`size-4`,"aria-hidden":!0}),m.rerun]}):null,W?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(C,{variant:`secondary`,onClick:se,children:[F?(0,$.jsx)(g,{className:`size-4`,"aria-hidden":!0}):(0,$.jsx)(s,{className:`size-4`,"aria-hidden":!0}),F?m.copied:m.copyResult]}),(0,$.jsxs)(C,{variant:`secondary`,onClick:G,children:[(0,$.jsx)(ue,{className:`size-4`,"aria-hidden":!0}),m.exportResult]})]}):null]}),(0,$.jsxs)(`div`,{className:`mt-6`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:m.resultTitle}),W?(0,$.jsx)(`div`,{className:`mt-3 rounded-xl border border-edge bg-surface-base/50 p-3`,children:(0,$.jsx)(_,{result:H,labels:h.result})}):(0,$.jsx)(`div`,{className:`mt-3 rounded-xl border border-dashed border-edge p-4 text-sm text-fg-muted`,children:m.noResult})]}),(0,$.jsxs)(`div`,{className:`mt-6 rounded-2xl border border-edge bg-surface-base/35`,children:[(0,$.jsxs)(`button`,{type:`button`,className:`flex w-full items-center justify-between gap-4 px-4 py-3 text-left`,onClick:()=>j(e=>!e),"aria-expanded":x,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:m.process}),(0,$.jsxs)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:[X(m.agentProgress,{done:J.metrics.doneAgentCount,total:J.metrics.agentCount}),` · `,fe]})]}),(0,$.jsx)(oe,{className:E(`size-4 shrink-0 text-fg-subtle transition-transform`,x?`rotate-180`:null),"aria-hidden":!0})]}),x?(0,$.jsxs)(`div`,{className:`border-t border-edge px-4 pb-4 pt-4`,children:[re?(0,$.jsx)(A,{snapshot:R,labels:h,logsExpanded:M,onToggleLogs:()=>N(e=>!e),selectedAgentId:ee,onSelectAgent:V}):(0,$.jsx)(pe,{rollup:ie,currentPhase:R.currentPhase,labels:h.phase,recentLogs:R.logs,recentLogsHeading:h.recentLogsHeading,showAllLogsLabel:h.showAllLogs,logsExpanded:M,onToggleLogs:()=>N(e=>!e),selectedAgentId:ee,onSelectAgent:V}),e.phases.length>0?(0,$.jsx)(`div`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,children:e.phases.map(e=>(0,$.jsx)(`div`,{className:`rounded-xl border border-edge bg-surface-panel px-3 py-2`,children:(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:e.title}),(0,$.jsx)(`span`,{className:`text-xs text-fg-subtle`,children:pt(e.status,m)})]})},e.id))}):null]}):null]}),(0,$.jsx)(yt,{agents:R.agents,labels:m,defaultExpanded:J.status===`failed`||J.status===`timeout`||J.metrics.errorAgentCount>0}),(0,$.jsxs)(`div`,{className:`mt-6 grid gap-3 rounded-2xl border border-edge-subtle bg-surface-base/35 p-4 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,$.jsx)(Ct,{label:m.metadataSession,value:be?.sessionKey??ge(e)??`—`}),(0,$.jsx)(Ct,{label:m.metadataSource,value:xe}),(0,$.jsx)(Ct,{label:m.metadataDefinition,value:`${be?.definition.version??J.definitionVersion} · ${be?.definition.source??`unknown`}`}),(0,$.jsx)(Ct,{label:m.metadataRetryOf,value:be?.retryOfRunId??`—`})]})]})]})]})}),(0,$.jsx)(S,{open:ee!=null&&ae!=null,agent:ae,snapshot:R,sessionKey:null,pinnedAgentId:null,onPinAgent:()=>{},onClose:()=>P(null),labels:h.drawer})]})}function yt(e){let t=(0,Q.c)(29),{agents:n,labels:r,defaultExpanded:i}=e,[a,o]=(0,Z.useState)(i),s,c;if(t[0]===i?(s=t[1],c=t[2]):(s=()=>{o(i)},c=[i],t[0]=i,t[1]=s,t[2]=c),(0,Z.useEffect)(s,c),n.length===0)return null;let l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=()=>o(bt),t[3]=l):l=t[3];let u;t[4]===r.agentIoTitle?u=t[5]:(u=(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:r.agentIoTitle}),t[4]=r.agentIoTitle,t[5]=u);let d;t[6]===r.agentIoHint?d=t[7]:(d=(0,$.jsx)(`p`,{className:`text-xs leading-5 text-fg-subtle`,children:r.agentIoHint}),t[6]=r.agentIoHint,t[7]=d);let f;t[8]!==u||t[9]!==d?(f=(0,$.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[u,d]}),t[8]=u,t[9]=d,t[10]=f):f=t[10];let p=a?`rotate-180`:null,m;t[11]===p?m=t[12]:(m=E(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,p),t[11]=p,t[12]=m);let h;t[13]===m?h=t[14]:(h=(0,$.jsx)(oe,{className:m,"aria-hidden":!0}),t[13]=m,t[14]=h);let g;t[15]!==a||t[16]!==f||t[17]!==h?(g=(0,$.jsxs)(`button`,{type:`button`,className:`flex w-full items-start justify-between gap-4 px-4 py-3 text-left`,onClick:l,"aria-expanded":a,children:[f,h]}),t[15]=a,t[16]=f,t[17]=h,t[18]=g):g=t[18];let _;t[19]!==n||t[20]!==a||t[21]!==r.agentInputHeading||t[22]!==r.agentNoOutput||t[23]!==r.agentOutputHeading||t[24]!==r.agentStatus?(_=a?(0,$.jsx)(`div`,{className:`grid gap-3 border-t border-edge px-4 py-4`,children:n.map(e=>{let t=e.error||e.resultPreview||r.agentNoOutput;return(0,$.jsxs)(`article`,{className:`rounded-xl border border-edge-subtle bg-surface-panel p-3`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,$.jsx)(`div`,{className:`min-w-0 text-sm font-medium text-fg`,children:e.label}),(0,$.jsx)(`span`,{className:E(`rounded-full px-2 py-0.5 text-xs font-medium`,xt(e.status)),children:r.agentStatus[e.status]??e.status})]}),(0,$.jsxs)(`div`,{className:`mt-3 grid gap-3 lg:grid-cols-2`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`div`,{className:`text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r.agentInputHeading}),(0,$.jsx)(`pre`,{className:`mt-1 max-h-32 overflow-y-auto whitespace-pre-wrap wrap-break-word rounded-lg border border-edge-subtle bg-surface-base/50 p-2 font-mono text-xs leading-5 text-fg-muted`,children:e.prompt||`—`})]}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`div`,{className:`text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r.agentOutputHeading}),(0,$.jsx)(`div`,{className:E(`mt-1 max-h-32 overflow-y-auto whitespace-pre-wrap wrap-break-word rounded-lg border border-edge-subtle bg-surface-base/50 p-2 text-xs leading-5`,e.error?`font-mono text-rose-600 dark:text-rose-400`:`text-fg-muted`),children:t})]})]})]},e.id)})}):null,t[19]=n,t[20]=a,t[21]=r.agentInputHeading,t[22]=r.agentNoOutput,t[23]=r.agentOutputHeading,t[24]=r.agentStatus,t[25]=_):_=t[25];let v;return t[26]!==g||t[27]!==_?(v=(0,$.jsxs)(`section`,{className:`mt-6 rounded-2xl border border-edge bg-surface-base/35`,children:[g,_]}),t[26]=g,t[27]=_,t[28]=v):v=t[28],v}function bt(e){return!e}function xt(e){return e===`done`?`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`:e===`error`?`bg-rose-500/10 text-rose-700 dark:text-rose-300`:e===`running`?`bg-accent-soft text-accent-fg`:`bg-surface-hover text-fg-subtle`}function St(e){let t=(0,Q.c)(7),{label:n,value:r}=e,i;t[0]===n?i=t[1]:(i=(0,$.jsx)(`dt`,{className:`text-xs text-fg-subtle`,children:n}),t[0]=n,t[1]=i);let a;t[2]===r?a=t[3]:(a=(0,$.jsx)(`dd`,{className:`mt-1 text-sm font-semibold text-fg`,children:r}),t[2]=r,t[3]=a);let o;return t[4]!==i||t[5]!==a?(o=(0,$.jsxs)(`div`,{className:`rounded-xl border border-edge bg-surface-base/40 p-3`,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6],o}function Ct(e){let t=(0,Q.c)(7),{label:n,value:r}=e,i;t[0]===n?i=t[1]:(i=(0,$.jsx)(`div`,{className:`text-xs text-fg-subtle`,children:n}),t[0]=n,t[1]=i);let a;t[2]===r?a=t[3]:(a=(0,$.jsx)(`div`,{className:`mt-1 truncate text-sm font-medium text-fg`,title:r,children:r}),t[2]=r,t[3]=a);let o;return t[4]!==i||t[5]!==a?(o=(0,$.jsxs)(`div`,{className:`min-w-0`,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6],o}function wt(e){let t=(0,Q.c)(12),{examples:n,labels:r,onSelect:i}=e;if(n.length===0)return null;let a;t[0]===r.examplePrompts?a=t[1]:(a=(0,$.jsx)(`div`,{className:`text-xs font-medium text-fg-muted`,children:r.examplePrompts}),t[0]=r.examplePrompts,t[1]=a);let o;if(t[2]!==n||t[3]!==i){let e;t[5]===i?e=t[6]:(e=e=>(0,$.jsx)(`button`,{type:`button`,onClick:()=>i(e),className:`rounded-lg border border-edge bg-surface-base/50 px-3 py-2 text-left text-xs text-fg-muted hover:bg-surface-hover`,children:e.text},`${e.field}:${e.text}`),t[5]=i,t[6]=e),o=n.map(e),t[2]=n,t[3]=i,t[4]=o}else o=t[4];let s;t[7]===o?s=t[8]:(s=(0,$.jsx)(`div`,{className:`mt-2 flex flex-col gap-1.5`,children:o}),t[7]=o,t[8]=s);let c;return t[9]!==a||t[10]!==s?(c=(0,$.jsxs)(`div`,{children:[a,s]}),t[9]=a,t[10]=s,t[11]=c):c=t[11],c}function Tt(e,t){let n=e.metadata.estimatedAgents;return n?n.min===n.max?X(t.agentScaleExact,{count:n.min}):X(t.agentScaleRange,{min:n.min,max:n.max}):X(t.agentScaleExact,{count:e.defaults.maxSubagents})}function Et(e,t,n,r){let i=Object.values(t).map(e=>e.trim()).filter(Boolean),a=e.trim()||n;return a&&i.unshift(a),i.length===0?r.noInputSummary:i.join(` · `)}function Dt(e){let t=(0,Q.c)(53),{open:n,definition:r,language:i,starting:o,onClose:s,onStart:m}=e,h=a(i).workflows,[g,_]=(0,Z.useState)(``),v;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(v={},t[0]=v):v=t[0];let[y,b]=(0,Z.useState)(v),[x,S]=(0,Z.useState)(``),[w,T]=(0,Z.useState)(``),[D,O]=(0,Z.useState)(!1),k;t[1]!==r||t[2]!==i?(k=r?xe(r,i):null,t[1]=r,t[2]=i,t[3]=k):k=t[3];let A=k,j;t[4]===r?j=t[5]:(j=r?P[r.name]??[]:[],t[4]=r,t[5]=j);let ee=j,I;t[6]===A?.examplePrompts?I=t[7]:(I=A?.examplePrompts??[],t[6]=A?.examplePrompts,t[7]=I);let te=I,ne=ee.length>0,L;t[8]!==x||t[9]!==r?.defaults?(L=x.trim()?Number(x):r?.defaults.concurrency,t[8]=x,t[9]=r?.defaults,t[10]=L):L=t[10];let re=L,R;t[11]!==r?.defaults||t[12]!==w?(R=w.trim()?Number(w):r?.defaults.maxSubagents,t[11]=r?.defaults,t[12]=w,t[13]=R):R=t[13];let ie=R,ae=r&&A?Et(g,y,A.description,h):h.noInputSummary,z;t[14]!==r||t[15]!==n?(z=()=>{!n||!r||(_(``),b({}),S(``),T(``),O(!1))},t[14]=r,t[15]=n,t[16]=z):z=t[16];let B=r?.id,V;if(t[17]!==n||t[18]!==B?(V=[n,B],t[17]=n,t[18]=B,t[19]=V):V=t[19],(0,Z.useEffect)(z,V),!r||!A)return null;let H;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(H=e=>{Ce(e,_,b)},t[20]=H):H=t[20];let U=H,W;t[21]!==y||t[22]!==x||t[23]!==g||t[24]!==A.description||t[25]!==w||t[26]!==m?(W=()=>{let e=Ee(y);m({goal:g.trim()||A.description,input:e,concurrency:x.trim()?Number(x):void 0,maxSubagents:w.trim()?Number(w):void 0})},t[21]=y,t[22]=x,t[23]=g,t[24]=A.description,t[25]=w,t[26]=m,t[27]=W):W=t[27];let se=W,G;t[28]===s?G=t[29]:(G=e=>!e&&s(),t[28]=s,t[29]=G);let le;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(le=(0,$.jsx)(l,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[30]=le):le=t[30];let K;t[31]===A.description?K=t[32]:(K=(0,$.jsx)(f,{className:`mt-1 text-sm text-fg-muted`,children:A.description}),t[31]=A.description,t[32]=K);let q;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,$.jsx)(ce,{className:`size-3.5 shrink-0 text-fg-subtle`,"aria-hidden":!0}),t[33]=q):q=t[33];let J;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,$.jsx)(M,{className:`size-3.5 shrink-0 text-fg-subtle`,"aria-hidden":!0}),t[34]=J):J=t[34];let ue;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(ue=(0,$.jsx)(F,{className:`size-3.5 shrink-0 text-fg-subtle`,"aria-hidden":!0}),t[35]=ue):ue=t[35];let de=ee.map(e=>(0,$.jsxs)(`label`,{className:`block`,children:[(0,$.jsxs)(`span`,{className:`text-xs font-medium text-fg`,children:[At(h,e.labelKey),e.required?` *`:``]}),e.multiline?(0,$.jsx)(`textarea`,{value:y[e.key]??``,onChange:t=>b(n=>({...n,[e.key]:t.target.value})),placeholder:At(h,e.placeholderKey),className:`mt-1.5 min-h-20 w-full resize-y rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`}):(0,$.jsx)(`input`,{value:y[e.key]??``,onChange:t=>b(n=>({...n,[e.key]:t.target.value})),placeholder:At(h,e.placeholderKey),className:`mt-1.5 w-full rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`})]},e.key)),fe;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(fe=e=>_(e.target.value),t[36]=fe):fe=t[36];let pe;t[37]===Symbol.for(`react.memo_cache_sentinel`)?(pe=()=>O(Ot),t[37]=pe):pe=t[37];let me=h.advancedSettings,he=D&&`rotate-180`,Y;t[38]===he?Y=t[39]:(Y=E(`size-4 transition-transform`,he),t[38]=he,t[39]=Y);let ge;t[40]===Y?ge=t[41]:(ge=(0,$.jsx)(oe,{className:Y}),t[40]=Y,t[41]=ge);let _e;t[42]!==h.cancelDialog||t[43]!==s||t[44]!==o?(_e=(0,$.jsx)(C,{variant:`secondary`,onClick:s,disabled:o,children:h.cancelDialog}),t[42]=h.cancelDialog,t[43]=s,t[44]=o,t[45]=_e):_e=t[45];let ve=o?h.starting:h.start,ye;t[46]!==o||t[47]!==se||t[48]!==ve?(ye=(0,$.jsx)(C,{variant:`primary`,onClick:se,disabled:o,children:ve}),t[46]=o,t[47]=se,t[48]=ve,t[49]=ye):ye=t[49];let be;return t[50]!==_e||t[51]!==ye?(be=(0,$.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[_e,ye]}),t[50]=_e,t[51]=ye,t[52]=be):be=t[52],(0,$.jsx)(d,{open:n,onOpenChange:G,children:(0,$.jsxs)(c,{children:[le,(0,$.jsxs)(u,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(85vh,40rem)] w-[min(100%-2rem,32rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[(0,$.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[(0,$.jsxs)(p,{className:`text-base font-semibold text-fg`,children:[h.startTitle,` · `,r.title]}),K]}),(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-auto px-5 py-4`,children:[(0,$.jsxs)(`section`,{className:`rounded-2xl border border-edge bg-surface-base/70 p-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:h.runPlanPreview}),(0,$.jsx)(`p`,{className:`mt-1 line-clamp-2 text-xs leading-5 text-fg-muted`,children:ae})]}),(0,$.jsx)(`span`,{className:`shrink-0 rounded-full bg-accent-soft px-2 py-1 text-[11px] font-medium text-accent-fg`,children:h.readyToStart})]}),(0,$.jsxs)(`div`,{className:`mt-4 grid gap-2 text-xs text-fg-muted sm:grid-cols-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl bg-surface-panel px-2.5 py-2`,children:[q,(0,$.jsx)(`span`,{children:X(h.phaseCount,{count:r.phases.length})})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl bg-surface-panel px-2.5 py-2`,children:[J,(0,$.jsx)(`span`,{children:Tt(r,h)})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl bg-surface-panel px-2.5 py-2`,children:[ue,(0,$.jsx)(`span`,{children:X(h.runLimitsSummary,{concurrency:re??r.defaults.concurrency,max:ie??r.defaults.maxSubagents})})]})]}),r.phases.length>0?(0,$.jsxs)(`div`,{className:`mt-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-medium uppercase tracking-wide text-fg-subtle`,children:[(0,$.jsx)(N,{className:`size-3.5`,"aria-hidden":!0}),h.startPlanPhases]}),(0,$.jsx)(`div`,{className:`mt-2 flex flex-wrap items-center gap-1.5`,children:r.phases.map(kt)})]}):null]}),de,ne?(0,$.jsx)(wt,{examples:te,labels:h,onSelect:U}):null,(0,$.jsxs)(`label`,{className:`block`,children:[(0,$.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:h.goalLabel}),(0,$.jsx)(`textarea`,{value:g,onChange:fe,placeholder:h.goalPlaceholder,className:`mt-1.5 min-h-24 w-full resize-y rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`})]}),ne?null:(0,$.jsx)(wt,{examples:te,labels:h,onSelect:U}),(0,$.jsxs)(`div`,{className:`rounded-xl border border-edge`,children:[(0,$.jsxs)(`button`,{type:`button`,className:`flex w-full items-center justify-between px-3 py-2.5 text-left text-sm text-fg`,onClick:pe,children:[me,ge]}),D?(0,$.jsxs)(`div`,{className:`grid gap-3 border-t border-edge px-3 pb-3 pt-3 sm:grid-cols-2`,children:[(0,$.jsx)(`input`,{value:x,onChange:e=>S(e.target.value),placeholder:X(h.concurrencyPlaceholder,{default:r.defaults.concurrency}),inputMode:`numeric`,className:`rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`}),(0,$.jsx)(`input`,{value:w,onChange:e=>T(e.target.value),placeholder:X(h.maxSubagentsPlaceholder,{default:r.defaults.maxSubagents}),inputMode:`numeric`,className:`rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`})]}):null]})]}),be]})]})})}function Ot(e){return!e}function kt(e,t){return(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[t>0?(0,$.jsx)(`span`,{className:`text-fg-subtle`,children:`→`}):null,(0,$.jsx)(`span`,{className:`rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1 text-[11px] text-fg-muted`,children:e.title})]},e.id)}function At(e,t){return e.args[t]??t}function jt(e){let t=(0,Q.c)(28),{stats:n,language:r}=e,i,o,s;if(t[0]!==r||t[1]!==n){s=Symbol.for(`react.early_return_sentinel`);bb0:{if(i=a(r).workflows,!n||n.totalRuns===0){s=null;break bb0}o=n.topDefinitions[0]?X(i.statsTopWorkflow,{name:n.topDefinitions[0].definitionId,count:n.topDefinitions[0].count}):null}t[0]=r,t[1]=n,t[2]=i,t[3]=o,t[4]=s}else i=t[2],o=t[3],s=t[4];if(s!==Symbol.for(`react.early_return_sentinel`))return s;let c=o,l=i.statsTotalRuns,u=String(n.totalRuns),d;t[5]!==i.statsTotalRuns||t[6]!==u?(d=(0,$.jsx)(Mt,{label:l,value:u}),t[5]=i.statsTotalRuns,t[6]=u,t[7]=d):d=t[7];let f=i.statsActiveRuns,p=String(n.activeRuns),m;t[8]!==i.statsActiveRuns||t[9]!==p?(m=(0,$.jsx)(Mt,{label:f,value:p}),t[8]=i.statsActiveRuns,t[9]=p,t[10]=m):m=t[10];let h;t[11]!==n.succeededRuns||t[12]!==n.totalRuns?(h=n.totalRuns>0?`${Math.round(n.succeededRuns/n.totalRuns*100)}%`:`—`,t[11]=n.succeededRuns,t[12]=n.totalRuns,t[13]=h):h=t[13];let g;t[14]!==i.statsSuccessRate||t[15]!==h?(g=(0,$.jsx)(Mt,{label:i.statsSuccessRate,value:h}),t[14]=i.statsSuccessRate,t[15]=h,t[16]=g):g=t[16];let _;t[17]===n.averageDurationMs?_=t[18]:(_=n.averageDurationMs==null?`—`:we(n.averageDurationMs),t[17]=n.averageDurationMs,t[18]=_);let v=c??void 0,y;t[19]!==i.statsAvgDuration||t[20]!==_||t[21]!==v?(y=(0,$.jsx)(Mt,{label:i.statsAvgDuration,value:_,hint:v}),t[19]=i.statsAvgDuration,t[20]=_,t[21]=v,t[22]=y):y=t[22];let b;return t[23]!==g||t[24]!==y||t[25]!==d||t[26]!==m?(b=(0,$.jsxs)(`section`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[d,m,g,y]}),t[23]=g,t[24]=y,t[25]=d,t[26]=m,t[27]=b):b=t[27],b}function Mt(e){let t=(0,Q.c)(10),{label:n,value:r,hint:i}=e,a;t[0]===n?a=t[1]:(a=(0,$.jsx)(`div`,{className:`text-xs text-fg-subtle`,children:n}),t[0]=n,t[1]=a);let o;t[2]===r?o=t[3]:(o=(0,$.jsx)(`div`,{className:`mt-1 text-lg font-semibold tabular-nums text-fg`,children:r}),t[2]=r,t[3]=o);let s;t[4]===i?s=t[5]:(s=i?(0,$.jsx)(`div`,{className:`mt-1 truncate text-[11px] text-fg-muted`,children:i}):null,t[4]=i,t[5]=s);let c;return t[6]!==a||t[7]!==o||t[8]!==s?(c=(0,$.jsxs)(`div`,{className:`rounded-xl border border-edge bg-surface-panel px-4 py-3`,children:[a,o,s]}),t[6]=a,t[7]=o,t[8]=s,t[9]=c):c=t[9],c}function Nt(e){let t=(0,Q.c)(27),{vm:n}=e,{labels:r,loading:i,searchQuery:a,setSearchQuery:o,refreshAll:s,setManageOpen:c}=n,l;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,$.jsx)(se,{className:`pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`,"aria-hidden":!0}),t[0]=l):l=t[0];let u;t[1]===o?u=t[2]:(u=e=>o(e.target.value),t[1]=o,t[2]=u);let d=r.searchPlaceholder,f;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(f=E(`h-9 w-full rounded-lg border border-edge bg-surface-panel py-2 pl-9 pr-3 text-sm text-fg shadow-surface`,`placeholder:text-fg-subtle`,x.focusRingPanel),t[3]=f):f=t[3];let p;t[4]!==r.searchPlaceholder||t[5]!==a||t[6]!==u?(p=(0,$.jsxs)(`div`,{className:`relative min-w-[12rem] flex-1 sm:max-w-xs`,children:[l,(0,$.jsx)(`input`,{value:a,onChange:u,placeholder:d,className:f})]}),t[4]=r.searchPlaceholder,t[5]=a,t[6]=u,t[7]=p):p=t[7];let m;t[8]===c?m=t[9]:(m=()=>c(!0),t[8]=c,t[9]=m);let h;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,$.jsx)(v,{className:`size-4`,"aria-hidden":!0}),t[10]=h):h=t[10];let g;t[11]!==r.addWorkflow||t[12]!==m?(g=(0,$.jsxs)(C,{variant:`secondary`,onClick:m,children:[h,r.addWorkflow]}),t[11]=r.addWorkflow,t[12]=m,t[13]=g):g=t[13];let _=i&&`animate-spin`,y;t[14]===_?y=t[15]:(y=E(`size-4`,_),t[14]=_,t[15]=y);let b;t[16]===y?b=t[17]:(b=(0,$.jsx)(te,{className:y,"aria-hidden":!0}),t[16]=y,t[17]=b);let S;t[18]!==r.refresh||t[19]!==i||t[20]!==s||t[21]!==b?(S=(0,$.jsxs)(C,{variant:`secondary`,onClick:s,disabled:i,children:[b,r.refresh]}),t[18]=r.refresh,t[19]=i,t[20]=s,t[21]=b,t[22]=S):S=t[22];let w;return t[23]!==S||t[24]!==p||t[25]!==g?(w=(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[p,g,S]}),t[23]=S,t[24]=p,t[25]=g,t[26]=w):w=t[26],w}function Pt(e){let t=(0,Q.c)(181),{vm:n}=e,{language:r,localeTag:i,labels:a,hasToken:o,definitions:s,runs:c,searchQuery:l,workflowFilterId:u,setWorkflowFilterId:d,triggerFilter:f,setTriggerFilter:p,selectedRunId:m,selectedRunView:h,selectedRunLoading:g,selectedRunError:_,openRunDetails:v,closeRunDetails:y,openRunInChat:b,pickStartOpen:S,setPickStartOpen:w,startDefinition:T,setStartDefinition:D,detailDefinition:O,setDetailDefinition:k,manageOpen:A,setManageOpen:M,actionError:N,actionFeedback:ee,starting:P,savingWorkflow:F,loading:I,error:te,stats:ne,submitStart:L,cancelRun:R,retryRun:ie,saveCustomWorkflow:ae}=n,z=de(Lt),B=de(It),oe;t[0]!==B||t[1]!==o||t[2]!==z||t[3]!==n?(oe=()=>{if(!o){B();return}return z({startExtra:null,main:null,end:(0,$.jsx)(Nt,{vm:n})}),()=>B()},t[0]=B,t[1]=o,t[2]=z,t[3]=n,t[4]=oe):oe=t[4];let V;if(t[5]!==B||t[6]!==o||t[7]!==I||t[8]!==n?(V=[B,o,I,n,n.refreshAll,n.setManageOpen,n.setSearchQuery],t[5]=B,t[6]=o,t[7]=I,t[8]=n,t[9]=V):V=t[9],(0,Z.useLayoutEffect)(oe,V),!o){let e;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,$.jsx)(re,{className:`size-10 text-accent-fg`,"aria-hidden":!0}),t[10]=e):e=t[10];let n;t[11]===a.title?n=t[12]:(n=(0,$.jsx)(`h1`,{className:`mt-4 text-xl font-semibold text-fg`,children:a.title}),t[11]=a.title,t[12]=n);let r;t[13]===a.needToken?r=t[14]:(r=(0,$.jsx)(`p`,{className:`mt-2 max-w-md text-sm leading-6 text-fg-muted`,children:a.needToken}),t[13]=a.needToken,t[14]=r);let i;return t[15]!==n||t[16]!==r?(i=(0,$.jsx)(`main`,{className:`min-h-0 flex-1 overflow-auto bg-surface-base`,children:(0,$.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col items-center px-4 py-16 text-center sm:px-8`,children:[e,n,r]})}),t[15]=n,t[16]=r,t[17]=i):i=t[17],i}let H;t[18]===a.title?H=t[19]:(H=(0,$.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:a.title}),t[18]=a.title,t[19]=H);let U;t[20]===a.subtitleBoard?U=t[21]:(U=(0,$.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-fg-muted`,children:a.subtitleBoard}),t[20]=a.subtitleBoard,t[21]=U);let W;t[22]!==H||t[23]!==U?(W=(0,$.jsxs)(`div`,{children:[H,U]}),t[22]=H,t[23]=U,t[24]=W):W=t[24];let se=a.boardTriggerFilterAria,G;t[25]===p?G=t[26]:(G=e=>p(e.target.value),t[25]=p,t[26]=G);let ce;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(ce=E(`h-9 min-w-[7.5rem] rounded-lg border border-edge bg-surface-panel px-2.5 text-xs font-medium text-fg shadow-surface`,x.focusRingPanel),t[27]=ce):ce=t[27];let le;t[28]===a.boardTriggerFilterAll?le=t[29]:(le=(0,$.jsx)(`option`,{value:`all`,children:a.boardTriggerFilterAll}),t[28]=a.boardTriggerFilterAll,t[29]=le);let K;t[30]===a.boardTriggerFilterCron?K=t[31]:(K=(0,$.jsx)(`option`,{value:`cron`,children:a.boardTriggerFilterCron}),t[30]=a.boardTriggerFilterCron,t[31]=K);let q;t[32]===a.boardTriggerFilterWebui?q=t[33]:(q=(0,$.jsx)(`option`,{value:`webui`,children:a.boardTriggerFilterWebui}),t[32]=a.boardTriggerFilterWebui,t[33]=q);let J;t[34]===a.boardTriggerFilterChat?J=t[35]:(J=(0,$.jsx)(`option`,{value:`chat`,children:a.boardTriggerFilterChat}),t[34]=a.boardTriggerFilterChat,t[35]=J);let ue;t[36]===a.boardTriggerFilterApi?ue=t[37]:(ue=(0,$.jsx)(`option`,{value:`api`,children:a.boardTriggerFilterApi}),t[36]=a.boardTriggerFilterApi,t[37]=ue);let fe;t[38]!==a.boardTriggerFilterAria||t[39]!==K||t[40]!==q||t[41]!==J||t[42]!==ue||t[43]!==G||t[44]!==le||t[45]!==f?(fe=(0,$.jsxs)(`select`,{value:f,"aria-label":se,onChange:G,className:ce,children:[le,K,q,J,ue]}),t[38]=a.boardTriggerFilterAria,t[39]=K,t[40]=q,t[41]=J,t[42]=ue,t[43]=G,t[44]=le,t[45]=f,t[46]=fe):fe=t[46];let pe=a.boardWorkflowFilterAria,me;t[47]===d?me=t[48]:(me=e=>d(e.target.value),t[47]=d,t[48]=me);let he;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(he=E(`h-9 min-w-40 rounded-lg border border-edge bg-surface-panel px-2.5 text-xs font-medium text-fg shadow-surface`,x.focusRingPanel),t[49]=he):he=t[49];let Y;t[50]===a.boardWorkflowFilterAll?Y=t[51]:(Y=(0,$.jsx)(`option`,{value:``,children:a.boardWorkflowFilterAll}),t[50]=a.boardWorkflowFilterAll,t[51]=Y);let ge;t[52]===s?ge=t[53]:(ge=s.map(Ft),t[52]=s,t[53]=ge);let _e;t[54]!==a.boardWorkflowFilterAria||t[55]!==me||t[56]!==Y||t[57]!==ge||t[58]!==u?(_e=(0,$.jsxs)(`select`,{value:u,"aria-label":pe,onChange:me,className:he,children:[Y,ge]}),t[54]=a.boardWorkflowFilterAria,t[55]=me,t[56]=Y,t[57]=ge,t[58]=u,t[59]=_e):_e=t[59];let ve;t[60]===w?ve=t[61]:(ve=()=>w(!0),t[60]=w,t[61]=ve);let ye;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,$.jsx)(j,{className:`size-4`,"aria-hidden":!0}),t[62]=ye):ye=t[62];let be;t[63]!==a.boardStart||t[64]!==ve?(be=(0,$.jsxs)(C,{variant:`primary`,onClick:ve,children:[ye,a.boardStart]}),t[63]=a.boardStart,t[64]=ve,t[65]=be):be=t[65];let xe;t[66]!==fe||t[67]!==_e||t[68]!==be?(xe=(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[fe,_e,be]}),t[66]=fe,t[67]=_e,t[68]=be,t[69]=xe):xe=t[69];let Se;t[70]!==xe||t[71]!==W?(Se=(0,$.jsxs)(`header`,{className:`flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between`,children:[W,xe]}),t[70]=xe,t[71]=W,t[72]=Se):Se=t[72];let X;t[73]===ee?X=t[74]:(X=ee?(0,$.jsx)(`div`,{className:`rounded-xl border border-emerald-500/25 bg-emerald-500/10 px-3 py-2 text-sm text-emerald-800 dark:text-emerald-200`,children:ee}):null,t[73]=ee,t[74]=X);let Ce;t[75]!==N||t[76]!==te?(Ce=N??te?(0,$.jsx)(`div`,{className:`rounded-xl border border-red-500/25 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300`,children:N??te}):null,t[75]=N,t[76]=te,t[77]=Ce):Ce=t[77];let we;t[78]!==r||t[79]!==ne?(we=(0,$.jsx)(jt,{stats:ne,language:r}),t[78]=r,t[79]=ne,t[80]=we):we=t[80];let Te;t[81]===_?Te=t[82]:(Te=_?(0,$.jsx)(`div`,{className:`rounded-xl border border-amber-500/25 bg-amber-500/10 px-3 py-2 text-sm text-amber-800 dark:text-amber-200`,children:_}):null,t[81]=_,t[82]=Te);let Ee;t[83]!==a.boardEmptyHint||t[84]!==a.boardEmptyTitle||t[85]!==a.boardStart||t[86]!==a.loading?(Ee={boardEmptyTitle:a.boardEmptyTitle,boardEmptyHint:a.boardEmptyHint,boardStart:a.boardStart,loading:a.loading},t[83]=a.boardEmptyHint,t[84]=a.boardEmptyTitle,t[85]=a.boardStart,t[86]=a.loading,t[87]=Ee):Ee=t[87];let De;t[88]===R?De=t[89]:(De=e=>void R(e),t[88]=R,t[89]=De);let Oe;t[90]===ie?Oe=t[91]:(Oe=e=>void ie(e),t[90]=ie,t[91]=Oe);let ke;t[92]===w?ke=t[93]:(ke=()=>w(!0),t[92]=w,t[93]=ke);let Ae;t[94]!==r||t[95]!==I||t[96]!==i||t[97]!==v||t[98]!==b||t[99]!==c||t[100]!==l||t[101]!==m||t[102]!==Ee||t[103]!==De||t[104]!==Oe||t[105]!==ke||t[106]!==f||t[107]!==u?(Ae=(0,$.jsx)(`div`,{className:`min-w-0`,children:(0,$.jsx)(Qe,{runs:c,language:r,localeTag:i,labels:Ee,searchQuery:l,workflowFilterId:u,triggerFilter:f,selectedRunId:m,loading:I,onOpenRun:v,onOpenRunChat:b,onCancelRun:De,onRetryRun:Oe,onStart:ke})}),t[94]=r,t[95]=I,t[96]=i,t[97]=v,t[98]=b,t[99]=c,t[100]=l,t[101]=m,t[102]=Ee,t[103]=De,t[104]=Oe,t[105]=ke,t[106]=f,t[107]=u,t[108]=Ae):Ae=t[108];let je;t[109]!==Se||t[110]!==X||t[111]!==Ce||t[112]!==we||t[113]!==Te||t[114]!==Ae?(je=(0,$.jsxs)(`div`,{className:`mx-auto flex w-full max-w-400 flex-col gap-5 px-4 py-6 lg:px-6`,children:[Se,X,Ce,we,Te,Ae]}),t[109]=Se,t[110]=X,t[111]=Ce,t[112]=we,t[113]=Te,t[114]=Ae,t[115]=je):je=t[115];let Me=!!m&&g,Ne;t[116]!==R||t[117]!==m?(Ne=()=>{m&&R(m)},t[116]=R,t[117]=m,t[118]=Ne):Ne=t[118];let Pe;t[119]!==ie||t[120]!==m?(Pe=()=>{m&&ie(m)},t[119]=ie,t[120]=m,t[121]=Pe):Pe=t[121];let Fe;t[122]!==y||t[123]!==r||t[124]!==i||t[125]!==h||t[126]!==Me||t[127]!==Ne||t[128]!==Pe?(Fe=(0,$.jsx)(vt,{view:h,loading:Me,language:r,localeTag:i,onCancel:Ne,onRetry:Pe,onClose:y}),t[122]=y,t[123]=r,t[124]=i,t[125]=h,t[126]=Me,t[127]=Ne,t[128]=Pe,t[129]=Fe):Fe=t[129];let Ie;t[130]===w?Ie=t[131]:(Ie=()=>w(!1),t[130]=w,t[131]=Ie);let Le;t[132]!==w||t[133]!==D?(Le=e=>{w(!1),D(e)},t[132]=w,t[133]=D,t[134]=Le):Le=t[134];let Re;t[135]!==s||t[136]!==r||t[137]!==S||t[138]!==Ie||t[139]!==Le?(Re=(0,$.jsx)(ut,{open:S,definitions:s,language:r,onClose:Ie,onPick:Le}),t[135]=s,t[136]=r,t[137]=S,t[138]=Ie,t[139]=Le,t[140]=Re):Re=t[140];let ze=T!=null,Be;t[141]===D?Be=t[142]:(Be=()=>D(null),t[141]=D,t[142]=Be);let Ve;t[143]===L?Ve=t[144]:(Ve=e=>void L(e),t[143]=L,t[144]=Ve);let He;t[145]!==r||t[146]!==T||t[147]!==P||t[148]!==ze||t[149]!==Be||t[150]!==Ve?(He=(0,$.jsx)(Dt,{open:ze,definition:T,language:r,starting:P,onClose:Be,onStart:Ve}),t[145]=r,t[146]=T,t[147]=P,t[148]=ze,t[149]=Be,t[150]=Ve,t[151]=He):He=t[151];let Ue=O!=null,We;t[152]===k?We=t[153]:(We=()=>k(null),t[152]=k,t[153]=We);let Ge;t[154]!==O||t[155]!==k||t[156]!==D?(Ge=()=>{O&&(k(null),D(O))},t[154]=O,t[155]=k,t[156]=D,t[157]=Ge):Ge=t[157];let Ke;t[158]!==O||t[159]!==r||t[160]!==Ue||t[161]!==We||t[162]!==Ge?(Ke=(0,$.jsx)(nt,{open:Ue,definition:O,language:r,onClose:We,onRun:Ge}),t[158]=O,t[159]=r,t[160]=Ue,t[161]=We,t[162]=Ge,t[163]=Ke):Ke=t[163];let qe;t[164]===M?qe=t[165]:(qe=()=>M(!1),t[164]=M,t[165]=qe);let Je;t[166]===ae?Je=t[167]:(Je=e=>void ae(e),t[166]=ae,t[167]=Je);let Ye;t[168]!==r||t[169]!==A||t[170]!==F||t[171]!==qe||t[172]!==Je?(Ye=(0,$.jsx)(it,{open:A,language:r,saving:F,onClose:qe,onSave:Je}),t[168]=r,t[169]=A,t[170]=F,t[171]=qe,t[172]=Je,t[173]=Ye):Ye=t[173];let Xe;return t[174]!==je||t[175]!==Fe||t[176]!==Re||t[177]!==He||t[178]!==Ke||t[179]!==Ye?(Xe=(0,$.jsxs)(`main`,{className:`min-h-0 flex-1 overflow-auto bg-surface-base`,children:[je,Fe,Re,He,Ke,Ye]}),t[174]=je,t[175]=Fe,t[176]=Re,t[177]=He,t[178]=Ke,t[179]=Ye,t[180]=Xe):Xe=t[180],Xe}function Ft(e){return(0,$.jsx)(`option`,{value:e.id,children:e.title},e.id)}function It(e){return e.clearPageHeader}function Lt(e){return e.setPageHeader}function Rt(){let e=i(e=>e.language),t=a(e).workflows,n=e===`zh`?`zh-CN`:`en-US`,r=h(e=>e.token),s=!!r,c=w(),[l,u]=G(),d=l.get(`q`)??``,f=l.get(`wf`)?.trim()??``,p=l.get(`trigger`)?.trim()||`all`,m=l.get(`run`)?.trim()??``,[g,_]=(0,Z.useState)(null),[v,y]=(0,Z.useState)(!1),[b,x]=(0,Z.useState)(null),[S,C]=(0,Z.useState)(!1),[T,E]=(0,Z.useState)(null),[D,O]=(0,Z.useState)(null),[k,A]=(0,Z.useState)(!1),[j,M]=(0,Z.useState)(!1),N=o(s?[`workflow-definitions`,r]:null,ae,{revalidateOnFocus:!1}),P=o(s?[`workflow-runs`,r]:null,()=>ie(100),{revalidateOnFocus:!1,refreshInterval:e=>e?.length&&e.some(e=>e.status===`queued`||e.status===`running`)?3e3:0}),F=o(s?[`workflow-stats`,r,f]:null,()=>H(f),{revalidateOnFocus:!1});(0,Z.useEffect)(()=>{if(!D)return;let e=window.setTimeout(()=>O(null),4e3);return()=>window.clearTimeout(e)},[D]);let I=N.data??[],te=P.data??[],ne=m||null,L=K(ne),re=(0,Z.useMemo)(()=>Se(I,d,`all`,`all`),[I,d]),z=(0,Z.useCallback)(e=>{u(t=>{let n=new URLSearchParams(t);return e(n,t),n},{replace:!0})},[u]),B=(0,Z.useCallback)(e=>{z(t=>{let n=e.trim();n?t.set(`q`,n):t.delete(`q`)})},[z]),oe=(0,Z.useCallback)(e=>{z(t=>{let n=e.trim();n?t.set(`wf`,n):t.delete(`wf`)})},[z]),U=(0,Z.useCallback)(e=>{z(t=>{let n=e.trim();n&&n!==`all`?t.set(J,n):t.delete(J)})},[z]),se=(0,Z.useCallback)(e=>{z(t=>{t.set(`run`,e.id)})},[z]),ce=(0,Z.useCallback)(()=>{z(e=>{e.delete(`run`)})},[z]),le=(0,Z.useCallback)(e=>{let t=je(e);t&&c(ve(t))},[c]);(0,Z.useEffect)(()=>{l.get(`tab`)&&z(e=>{e.delete(`tab`)})},[z,l]),(0,Z.useEffect)(()=>{let e=l.get(`def`),t=l.get(V)===`1`;if(!e||!I.length)return;let n=I.find(t=>t.id===e||t.name===e);n&&(t?_(n):x(n),z(e=>{e.delete(`def`),e.delete(V)}))},[I,z,l]),(0,Z.useEffect)(()=>{let e=()=>{P.mutate(),F.mutate()};return window.addEventListener(`workflow-event-appended`,e),window.addEventListener(`workflow-run-updated`,e),window.addEventListener(`workflow-run-error`,e),()=>{window.removeEventListener(`workflow-event-appended`,e),window.removeEventListener(`workflow-run-updated`,e),window.removeEventListener(`workflow-run-error`,e)}},[P,F]);let q=(0,Z.useCallback)(()=>{N.mutate(),P.mutate(),F.mutate()},[N,P,F]),ue=(0,Z.useCallback)(async e=>{if(g){A(!0),E(null);try{let n=await me({definitionId:g.id,goal:e.goal,input:e.input,concurrency:e.concurrency,maxSubagents:e.maxSubagents});_(null),await P.mutate(),await F.mutate(),O(t.startSuccess),z(e=>{e.set(`run`,n.runId)})}catch(e){E(e instanceof Error?e.message:t.startFailed)}finally{A(!1)}}},[t.startFailed,t.startSuccess,z,P,g,F]),de=(0,Z.useCallback)(async e=>{try{await R(e),await P.mutate(),await F.mutate()}catch(e){let n=e instanceof Error?e.message:t.cancelFailed;if(/not active|already finished/i.test(n)){await P.mutate(),await F.mutate();return}E(n)}},[t.cancelFailed,P,F]),pe=(0,Z.useCallback)(async e=>{try{let t=await ee(e);await P.mutate(),await F.mutate(),z(e=>{e.set(`run`,t.runId)})}catch(e){E(e instanceof Error?e.message:t.retryFailed)}},[t.retryFailed,z,P,F]),he=(0,Z.useCallback)(async e=>{M(!0),E(null);try{await fe(e.name,e.script),C(!1),await N.mutate(),O(t.saveWorkflowSuccess)}catch(e){E(e instanceof Error?e.message:t.saveWorkflowFailed)}finally{M(!1)}},[N,t.saveWorkflowFailed,t.saveWorkflowSuccess]),Y=(0,Z.useCallback)(async e=>{if(e.metadata.source===`user`&&window.confirm(X(t.deleteConfirm,{name:e.name}))){E(null);try{await W(e.id),await N.mutate(),O(t.deleteWorkflowSuccess)}catch(e){E(e instanceof Error?e.message:t.deleteWorkflowFailed)}}},[N,t]),ge=N.isLoading||P.isLoading,_e=N.error?.message??P.error?.message??null;return{language:e,localeTag:n,labels:t,hasToken:s,searchQuery:d,setSearchQuery:B,workflowFilterId:f,setWorkflowFilterId:oe,triggerFilter:p,setTriggerFilter:U,definitions:I,filteredDefinitions:re,runs:te,selectedRunId:ne,selectedRunView:L.view,selectedRunLoading:L.loading,selectedRunError:L.error?.message??null,openRunDetails:se,closeRunDetails:ce,openRunInChat:le,pickStartOpen:v,setPickStartOpen:y,startDefinition:g,setStartDefinition:_,detailDefinition:b,setDetailDefinition:x,manageOpen:S,setManageOpen:C,actionError:T,actionFeedback:D,starting:k,savingWorkflow:j,loading:ge,error:_e,stats:F.data,refreshAll:q,submitStart:ue,cancelRun:de,retryRun:pe,saveCustomWorkflow:he,removeCustomWorkflow:Y}}function zt(){let e=(0,Q.c)(2),t=Rt(),n;return e[0]===t?n=e[1]:(n=(0,$.jsx)(Pt,{vm:t}),e[0]=t,e[1]=n),n}export{zt as WorkflowsPage};
@@ -1,4 +0,0 @@
1
- import { Command } from 'commander';
2
- import { type CLIContext } from '../registry.js';
3
- declare function createMcpCommand(ctx: CLIContext): Command;
4
- export { createMcpCommand };
@@ -1,85 +0,0 @@
1
- import { parseConfigValue } from "../../chat-commands/config-value.js";
2
- import { formatExamples, register } from "../registry.js";
3
- import { listConfiguredMcpServers, setConfiguredMcpServer, unsetConfiguredMcpServer } from "../../config/mcp-config.js";
4
- import { serveXopcChannelMcpImpl } from "../../mcp/channel-server.js";
5
- import { readFileSync } from "node:fs";
6
- import { Command } from "commander";
7
- //#region src/cli/commands/mcp.ts
8
- function readOptionalFile(path) {
9
- if (!path?.trim()) return;
10
- return readFileSync(path.trim(), "utf-8").trim();
11
- }
12
- function createMcpCommand(ctx) {
13
- const cmd = new Command("mcp").description("Manage xopc MCP config and channel bridge").addHelpText("after", formatExamples([
14
- "xopc mcp list",
15
- "xopc mcp set github '{\"command\":\"npx\",\"args\":[\"-y\",\"@modelcontextprotocol/server-github\"]}'",
16
- "xopc mcp serve --url http://127.0.0.1:18790"
17
- ]));
18
- cmd.command("serve").description("Expose xopc channels over MCP stdio").option("--url <url>", "Gateway HTTP base URL").option("--token <token>", "Gateway bearer token").option("--token-file <path>", "Read gateway token from file").option("--claude-channel-mode <mode>", "Claude channel mode: auto, on, or off", "auto").option("-v, --verbose", "Verbose logging to stderr", false).action(async (opts) => {
19
- const mode = String(opts.claudeChannelMode ?? "auto").toLowerCase();
20
- if (mode !== "auto" && mode !== "on" && mode !== "off") throw new Error("Invalid --claude-channel-mode. Use auto, on, or off.");
21
- await serveXopcChannelMcpImpl({
22
- gatewayUrl: opts.url,
23
- gatewayToken: opts.token ?? readOptionalFile(opts.tokenFile),
24
- claudeChannelMode: mode,
25
- verbose: Boolean(opts.verbose)
26
- });
27
- });
28
- cmd.command("list").description("List configured MCP servers").option("--json", "Print JSON").action((opts) => {
29
- const loaded = listConfiguredMcpServers(ctx.configPath);
30
- if (!loaded.ok) throw new Error("error" in loaded ? loaded.error : "Failed to load MCP config");
31
- if (opts.json) {
32
- console.log(JSON.stringify(loaded.mcpServers, null, 2));
33
- return;
34
- }
35
- const names = Object.keys(loaded.mcpServers).sort();
36
- if (names.length === 0) {
37
- console.log(`No MCP servers configured in ${loaded.path}.`);
38
- return;
39
- }
40
- console.log(`MCP servers (${loaded.path}):`);
41
- for (const name of names) console.log(`- ${name}`);
42
- });
43
- cmd.command("show").description("Show one MCP server or all servers").argument("[name]", "MCP server name").option("--json", "Print JSON").action((name, opts) => {
44
- const loaded = listConfiguredMcpServers(ctx.configPath);
45
- if (!loaded.ok) throw new Error("error" in loaded ? loaded.error : "Failed to load MCP config");
46
- const value = name ? loaded.mcpServers[name] : loaded.mcpServers;
47
- if (name && !value) throw new Error(`No MCP server named "${name}" in ${loaded.path}.`);
48
- console.log(JSON.stringify(value ?? {}, null, 2));
49
- if (!opts.json && !name) console.log(`(${loaded.path})`);
50
- });
51
- cmd.command("set").description("Upsert an MCP server definition").argument("<name>", "Server name").argument("<json>", "Server config JSON").action(async (name, json) => {
52
- const parsed = parseConfigValue(json);
53
- if (!parsed.ok) throw new Error("error" in parsed ? parsed.error : "Invalid JSON");
54
- const result = await setConfiguredMcpServer({
55
- name,
56
- server: parsed.value,
57
- configPath: ctx.configPath
58
- });
59
- if (!result.ok) throw new Error("error" in result ? result.error : "Failed to save MCP server");
60
- console.log(`Saved MCP server "${name}" to ${result.path}.`);
61
- });
62
- cmd.command("unset").description("Remove an MCP server definition").argument("<name>", "Server name").action(async (name) => {
63
- const result = await unsetConfiguredMcpServer({
64
- name,
65
- configPath: ctx.configPath
66
- });
67
- if (!result.ok) throw new Error("error" in result ? result.error : "Failed to unset MCP server");
68
- console.log(result.removed ? `Removed MCP server "${name}" from ${result.path}.` : `No MCP server named "${name}" in ${result.path}.`);
69
- });
70
- return cmd;
71
- }
72
- register({
73
- id: "mcp",
74
- name: "mcp",
75
- description: "MCP server registry and channel bridge",
76
- factory: createMcpCommand,
77
- metadata: {
78
- category: "setup",
79
- examples: ["xopc mcp list", "xopc mcp serve"]
80
- }
81
- });
82
- //#endregion
83
- export { createMcpCommand };
84
-
85
- //# sourceMappingURL=mcp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.js","names":[],"sources":["../../../../src/cli/commands/mcp.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { parseConfigValue } from '../../chat-commands/config-value.js';\nimport {\n listConfiguredMcpServers,\n setConfiguredMcpServer,\n unsetConfiguredMcpServer,\n} from '../../config/mcp-config.js';\nimport { serveXopcChannelMcpImpl } from '../../mcp/channel-server.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nfunction readOptionalFile(path: string | undefined): string | undefined {\n if (!path?.trim()) {\n return undefined;\n }\n return readFileSync(path.trim(), 'utf-8').trim();\n}\n\nfunction createMcpCommand(ctx: CLIContext): Command {\n const cmd = new Command('mcp')\n .description('Manage xopc MCP config and channel bridge')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc mcp list',\n 'xopc mcp set github \\'{\"command\":\"npx\",\"args\":[\"-y\",\"@modelcontextprotocol/server-github\"]}\\'',\n 'xopc mcp serve --url http://127.0.0.1:18790',\n ]),\n );\n\n cmd\n .command('serve')\n .description('Expose xopc channels over MCP stdio')\n .option('--url <url>', 'Gateway HTTP base URL')\n .option('--token <token>', 'Gateway bearer token')\n .option('--token-file <path>', 'Read gateway token from file')\n .option('--claude-channel-mode <mode>', 'Claude channel mode: auto, on, or off', 'auto')\n .option('-v, --verbose', 'Verbose logging to stderr', false)\n .action(async (opts) => {\n const mode = String(opts.claudeChannelMode ?? 'auto').toLowerCase();\n if (mode !== 'auto' && mode !== 'on' && mode !== 'off') {\n throw new Error('Invalid --claude-channel-mode. Use auto, on, or off.');\n }\n await serveXopcChannelMcpImpl({\n gatewayUrl: opts.url as string | undefined,\n gatewayToken: (opts.token as string | undefined) ?? readOptionalFile(opts.tokenFile),\n claudeChannelMode: mode as 'auto' | 'on' | 'off',\n verbose: Boolean(opts.verbose),\n });\n });\n\n cmd\n .command('list')\n .description('List configured MCP servers')\n .option('--json', 'Print JSON')\n .action((opts: { json?: boolean }) => {\n const loaded = listConfiguredMcpServers(ctx.configPath);\n if (!loaded.ok) {\n throw new Error('error' in loaded ? loaded.error : 'Failed to load MCP config');\n }\n if (opts.json) {\n console.log(JSON.stringify(loaded.mcpServers, null, 2));\n return;\n }\n const names = Object.keys(loaded.mcpServers).sort();\n if (names.length === 0) {\n console.log(`No MCP servers configured in ${loaded.path}.`);\n return;\n }\n console.log(`MCP servers (${loaded.path}):`);\n for (const name of names) {\n console.log(`- ${name}`);\n }\n });\n\n cmd\n .command('show')\n .description('Show one MCP server or all servers')\n .argument('[name]', 'MCP server name')\n .option('--json', 'Print JSON')\n .action((name: string | undefined, opts: { json?: boolean }) => {\n const loaded = listConfiguredMcpServers(ctx.configPath);\n if (!loaded.ok) {\n throw new Error('error' in loaded ? loaded.error : 'Failed to load MCP config');\n }\n const value = name ? loaded.mcpServers[name] : loaded.mcpServers;\n if (name && !value) {\n throw new Error(`No MCP server named \"${name}\" in ${loaded.path}.`);\n }\n console.log(JSON.stringify(value ?? {}, null, 2));\n if (!opts.json && !name) {\n console.log(`(${loaded.path})`);\n }\n });\n\n cmd\n .command('set')\n .description('Upsert an MCP server definition')\n .argument('<name>', 'Server name')\n .argument('<json>', 'Server config JSON')\n .action(async (name: string, json: string) => {\n const parsed = parseConfigValue(json);\n if (!parsed.ok) {\n throw new Error('error' in parsed ? parsed.error : 'Invalid JSON');\n }\n const result = await setConfiguredMcpServer({\n name,\n server: parsed.value,\n configPath: ctx.configPath,\n });\n if (!result.ok) {\n throw new Error('error' in result ? result.error : 'Failed to save MCP server');\n }\n console.log(`Saved MCP server \"${name}\" to ${result.path}.`);\n });\n\n cmd\n .command('unset')\n .description('Remove an MCP server definition')\n .argument('<name>', 'Server name')\n .action(async (name: string) => {\n const result = await unsetConfiguredMcpServer({ name, configPath: ctx.configPath });\n if (!result.ok) {\n throw new Error('error' in result ? result.error : 'Failed to unset MCP server');\n }\n console.log(\n result.removed\n ? `Removed MCP server \"${name}\" from ${result.path}.`\n : `No MCP server named \"${name}\" in ${result.path}.`,\n );\n });\n\n return cmd;\n}\n\nregister({\n id: 'mcp',\n name: 'mcp',\n description: 'MCP server registry and channel bridge',\n factory: createMcpCommand,\n metadata: {\n category: 'setup',\n examples: [\n 'xopc mcp list',\n 'xopc mcp serve',\n ],\n },\n});\n\nexport { createMcpCommand };\n"],"mappings":";;;;;;;AAWA,SAAS,iBAAiB,MAA8C;AACtE,KAAI,CAAC,MAAM,MAAM,CACf;AAEF,QAAO,aAAa,KAAK,MAAM,EAAE,QAAQ,CAAC,MAAM;;AAGlD,SAAS,iBAAiB,KAA0B;CAClD,MAAM,MAAM,IAAI,QAAQ,MAAM,CAC3B,YAAY,4CAA4C,CACxD,YACC,SACA,eAAe;EACb;EACA;EACA;EACD,CAAC,CACH;AAEH,KACG,QAAQ,QAAQ,CAChB,YAAY,sCAAsC,CAClD,OAAO,eAAe,wBAAwB,CAC9C,OAAO,mBAAmB,uBAAuB,CACjD,OAAO,uBAAuB,+BAA+B,CAC7D,OAAO,gCAAgC,yCAAyC,OAAO,CACvF,OAAO,iBAAiB,6BAA6B,MAAM,CAC3D,OAAO,OAAO,SAAS;EACtB,MAAM,OAAO,OAAO,KAAK,qBAAqB,OAAO,CAAC,aAAa;AACnE,MAAI,SAAS,UAAU,SAAS,QAAQ,SAAS,MAC/C,OAAM,IAAI,MAAM,uDAAuD;AAEzE,QAAM,wBAAwB;GAC5B,YAAY,KAAK;GACjB,cAAe,KAAK,SAAgC,iBAAiB,KAAK,UAAU;GACpF,mBAAmB;GACnB,SAAS,QAAQ,KAAK,QAAQ;GAC/B,CAAC;GACF;AAEJ,KACG,QAAQ,OAAO,CACf,YAAY,8BAA8B,CAC1C,OAAO,UAAU,aAAa,CAC9B,QAAQ,SAA6B;EACpC,MAAM,SAAS,yBAAyB,IAAI,WAAW;AACvD,MAAI,CAAC,OAAO,GACV,OAAM,IAAI,MAAM,WAAW,SAAS,OAAO,QAAQ,4BAA4B;AAEjF,MAAI,KAAK,MAAM;AACb,WAAQ,IAAI,KAAK,UAAU,OAAO,YAAY,MAAM,EAAE,CAAC;AACvD;;EAEF,MAAM,QAAQ,OAAO,KAAK,OAAO,WAAW,CAAC,MAAM;AACnD,MAAI,MAAM,WAAW,GAAG;AACtB,WAAQ,IAAI,gCAAgC,OAAO,KAAK,GAAG;AAC3D;;AAEF,UAAQ,IAAI,gBAAgB,OAAO,KAAK,IAAI;AAC5C,OAAK,MAAM,QAAQ,MACjB,SAAQ,IAAI,KAAK,OAAO;GAE1B;AAEJ,KACG,QAAQ,OAAO,CACf,YAAY,qCAAqC,CACjD,SAAS,UAAU,kBAAkB,CACrC,OAAO,UAAU,aAAa,CAC9B,QAAQ,MAA0B,SAA6B;EAC9D,MAAM,SAAS,yBAAyB,IAAI,WAAW;AACvD,MAAI,CAAC,OAAO,GACV,OAAM,IAAI,MAAM,WAAW,SAAS,OAAO,QAAQ,4BAA4B;EAEjF,MAAM,QAAQ,OAAO,OAAO,WAAW,QAAQ,OAAO;AACtD,MAAI,QAAQ,CAAC,MACX,OAAM,IAAI,MAAM,wBAAwB,KAAK,OAAO,OAAO,KAAK,GAAG;AAErE,UAAQ,IAAI,KAAK,UAAU,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC;AACjD,MAAI,CAAC,KAAK,QAAQ,CAAC,KACjB,SAAQ,IAAI,IAAI,OAAO,KAAK,GAAG;GAEjC;AAEJ,KACG,QAAQ,MAAM,CACd,YAAY,kCAAkC,CAC9C,SAAS,UAAU,cAAc,CACjC,SAAS,UAAU,qBAAqB,CACxC,OAAO,OAAO,MAAc,SAAiB;EAC5C,MAAM,SAAS,iBAAiB,KAAK;AACrC,MAAI,CAAC,OAAO,GACV,OAAM,IAAI,MAAM,WAAW,SAAS,OAAO,QAAQ,eAAe;EAEpE,MAAM,SAAS,MAAM,uBAAuB;GAC1C;GACA,QAAQ,OAAO;GACf,YAAY,IAAI;GACjB,CAAC;AACF,MAAI,CAAC,OAAO,GACV,OAAM,IAAI,MAAM,WAAW,SAAS,OAAO,QAAQ,4BAA4B;AAEjF,UAAQ,IAAI,qBAAqB,KAAK,OAAO,OAAO,KAAK,GAAG;GAC5D;AAEJ,KACG,QAAQ,QAAQ,CAChB,YAAY,kCAAkC,CAC9C,SAAS,UAAU,cAAc,CACjC,OAAO,OAAO,SAAiB;EAC9B,MAAM,SAAS,MAAM,yBAAyB;GAAE;GAAM,YAAY,IAAI;GAAY,CAAC;AACnF,MAAI,CAAC,OAAO,GACV,OAAM,IAAI,MAAM,WAAW,SAAS,OAAO,QAAQ,6BAA6B;AAElF,UAAQ,IACN,OAAO,UACH,uBAAuB,KAAK,SAAS,OAAO,KAAK,KACjD,wBAAwB,KAAK,OAAO,OAAO,KAAK,GACrD;GACD;AAEJ,QAAO;;AAGT,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU,CACR,iBACA,iBACD;EACF;CACF,CAAC"}
@@ -1,34 +0,0 @@
1
- import type { Config } from './schema.js';
2
- import { type ConfigMcpServers } from './mcp-config-normalize.js';
3
- export { normalizeConfiguredMcpServers, type ConfigMcpServers } from './mcp-config-normalize.js';
4
- type ConfigMcpReadResult = {
5
- ok: true;
6
- path: string;
7
- config: Config;
8
- mcpServers: ConfigMcpServers;
9
- } | {
10
- ok: false;
11
- path: string;
12
- error: string;
13
- };
14
- type ConfigMcpWriteResult = {
15
- ok: true;
16
- path: string;
17
- config: Config;
18
- mcpServers: ConfigMcpServers;
19
- removed?: boolean;
20
- } | {
21
- ok: false;
22
- path: string;
23
- error: string;
24
- };
25
- export declare function listConfiguredMcpServers(configPath?: string): ConfigMcpReadResult;
26
- export declare function setConfiguredMcpServer(params: {
27
- name: string;
28
- server: unknown;
29
- configPath?: string;
30
- }): Promise<ConfigMcpWriteResult>;
31
- export declare function unsetConfiguredMcpServer(params: {
32
- name: string;
33
- configPath?: string;
34
- }): Promise<ConfigMcpWriteResult>;
@@ -1,116 +0,0 @@
1
- import { init_paths, resolveConfigPath } from "./paths.js";
2
- import { init_loader, loadConfig, saveConfig } from "./loader.js";
3
- import { isRecord } from "../utils/is-record.js";
4
- import { canonicalizeConfiguredMcpServer, normalizeConfiguredMcpServers } from "./mcp-config-normalize.js";
5
- import { existsSync } from "node:fs";
6
- //#region src/config/mcp-config.ts
7
- init_loader();
8
- init_paths();
9
- function listConfiguredMcpServers(configPath) {
10
- const path = configPath?.trim() || process.env.XOPC_CONFIG_PATH?.trim() || resolveConfigPath();
11
- if (!existsSync(path)) return {
12
- ok: false,
13
- path,
14
- error: "Config file not found."
15
- };
16
- try {
17
- const config = loadConfig(path);
18
- return {
19
- ok: true,
20
- path,
21
- config: structuredClone(config),
22
- mcpServers: normalizeConfiguredMcpServers(config.mcp?.servers)
23
- };
24
- } catch (error) {
25
- return {
26
- ok: false,
27
- path,
28
- error: `Config file is invalid: ${error instanceof Error ? error.message : String(error)}`
29
- };
30
- }
31
- }
32
- async function setConfiguredMcpServer(params) {
33
- const name = params.name.trim();
34
- if (!name) return {
35
- ok: false,
36
- path: "",
37
- error: "MCP server name is required."
38
- };
39
- if (!isRecord(params.server)) return {
40
- ok: false,
41
- path: "",
42
- error: "MCP server config must be a JSON object."
43
- };
44
- const loaded = listConfiguredMcpServers(params.configPath);
45
- if (!loaded.ok) return loaded;
46
- const next = structuredClone(loaded.config);
47
- const servers = normalizeConfiguredMcpServers(next.mcp?.servers);
48
- servers[name] = canonicalizeConfiguredMcpServer(params.server);
49
- next.mcp = {
50
- ...next.mcp,
51
- servers
52
- };
53
- try {
54
- await saveConfig(next, loaded.path);
55
- } catch (error) {
56
- return {
57
- ok: false,
58
- path: loaded.path,
59
- error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`
60
- };
61
- }
62
- return {
63
- ok: true,
64
- path: loaded.path,
65
- config: next,
66
- mcpServers: servers
67
- };
68
- }
69
- async function unsetConfiguredMcpServer(params) {
70
- const name = params.name.trim();
71
- if (!name) return {
72
- ok: false,
73
- path: "",
74
- error: "MCP server name is required."
75
- };
76
- const loaded = listConfiguredMcpServers(params.configPath);
77
- if (!loaded.ok) return loaded;
78
- if (!Object.hasOwn(loaded.mcpServers, name)) return {
79
- ok: true,
80
- path: loaded.path,
81
- config: loaded.config,
82
- mcpServers: loaded.mcpServers,
83
- removed: false
84
- };
85
- const next = structuredClone(loaded.config);
86
- const servers = normalizeConfiguredMcpServers(next.mcp?.servers);
87
- delete servers[name];
88
- if (Object.keys(servers).length > 0) next.mcp = {
89
- ...next.mcp,
90
- servers
91
- };
92
- else if (next.mcp) {
93
- delete next.mcp.servers;
94
- if (Object.keys(next.mcp).length === 0) delete next.mcp;
95
- }
96
- try {
97
- await saveConfig(next, loaded.path);
98
- } catch (error) {
99
- return {
100
- ok: false,
101
- path: loaded.path,
102
- error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`
103
- };
104
- }
105
- return {
106
- ok: true,
107
- path: loaded.path,
108
- config: next,
109
- mcpServers: servers,
110
- removed: true
111
- };
112
- }
113
- //#endregion
114
- export { listConfiguredMcpServers, normalizeConfiguredMcpServers, setConfiguredMcpServer, unsetConfiguredMcpServer };
115
-
116
- //# sourceMappingURL=mcp-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-config.js","names":[],"sources":["../../../src/config/mcp-config.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport type { Config } from './schema.js';\nimport { loadConfig, saveConfig } from './loader.js';\nimport { resolveConfigPath } from './paths.js';\nimport {\n canonicalizeConfiguredMcpServer,\n normalizeConfiguredMcpServers,\n type ConfigMcpServers,\n} from './mcp-config-normalize.js';\nimport { isRecord } from '../utils/is-record.js';\n\nexport { normalizeConfiguredMcpServers, type ConfigMcpServers } from './mcp-config-normalize.js';\n\ntype ConfigMcpReadResult =\n | {\n ok: true;\n path: string;\n config: Config;\n mcpServers: ConfigMcpServers;\n }\n | { ok: false; path: string; error: string };\n\ntype ConfigMcpWriteResult =\n | {\n ok: true;\n path: string;\n config: Config;\n mcpServers: ConfigMcpServers;\n removed?: boolean;\n }\n | { ok: false; path: string; error: string };\n\nexport function listConfiguredMcpServers(configPath?: string): ConfigMcpReadResult {\n const path = configPath?.trim() || process.env.XOPC_CONFIG_PATH?.trim() || resolveConfigPath();\n if (!existsSync(path)) {\n return { ok: false, path, error: 'Config file not found.' };\n }\n try {\n const config = loadConfig(path);\n return {\n ok: true,\n path,\n config: structuredClone(config),\n mcpServers: normalizeConfiguredMcpServers(config.mcp?.servers),\n };\n } catch (error) {\n return {\n ok: false,\n path,\n error: `Config file is invalid: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n}\n\nexport async function setConfiguredMcpServer(params: {\n name: string;\n server: unknown;\n configPath?: string;\n}): Promise<ConfigMcpWriteResult> {\n const name = params.name.trim();\n if (!name) {\n return { ok: false, path: '', error: 'MCP server name is required.' };\n }\n if (!isRecord(params.server)) {\n return { ok: false, path: '', error: 'MCP server config must be a JSON object.' };\n }\n\n const loaded = listConfiguredMcpServers(params.configPath);\n if (!loaded.ok) {\n return loaded;\n }\n\n const next = structuredClone(loaded.config);\n const servers = normalizeConfiguredMcpServers(next.mcp?.servers);\n servers[name] = canonicalizeConfiguredMcpServer(params.server);\n next.mcp = { ...next.mcp, servers };\n\n try {\n await saveConfig(next, loaded.path);\n } catch (error) {\n return {\n ok: false,\n path: loaded.path,\n error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n\n return { ok: true, path: loaded.path, config: next, mcpServers: servers };\n}\n\nexport async function unsetConfiguredMcpServer(params: {\n name: string;\n configPath?: string;\n}): Promise<ConfigMcpWriteResult> {\n const name = params.name.trim();\n if (!name) {\n return { ok: false, path: '', error: 'MCP server name is required.' };\n }\n\n const loaded = listConfiguredMcpServers(params.configPath);\n if (!loaded.ok) {\n return loaded;\n }\n if (!Object.hasOwn(loaded.mcpServers, name)) {\n return {\n ok: true,\n path: loaded.path,\n config: loaded.config,\n mcpServers: loaded.mcpServers,\n removed: false,\n };\n }\n\n const next = structuredClone(loaded.config);\n const servers = normalizeConfiguredMcpServers(next.mcp?.servers);\n delete servers[name];\n if (Object.keys(servers).length > 0) {\n next.mcp = { ...next.mcp, servers };\n } else if (next.mcp) {\n delete next.mcp.servers;\n if (Object.keys(next.mcp).length === 0) {\n delete next.mcp;\n }\n }\n\n try {\n await saveConfig(next, loaded.path);\n } catch (error) {\n return {\n ok: false,\n path: loaded.path,\n error: `Failed to save config: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n\n return {\n ok: true,\n path: loaded.path,\n config: next,\n mcpServers: servers,\n removed: true,\n };\n}\n"],"mappings":";;;;;;aAEqD;YACN;AA6B/C,SAAgB,yBAAyB,YAA0C;CACjF,MAAM,OAAO,YAAY,MAAM,IAAI,QAAQ,IAAI,kBAAkB,MAAM,IAAI,mBAAmB;AAC9F,KAAI,CAAC,WAAW,KAAK,CACnB,QAAO;EAAE,IAAI;EAAO;EAAM,OAAO;EAA0B;AAE7D,KAAI;EACF,MAAM,SAAS,WAAW,KAAK;AAC/B,SAAO;GACL,IAAI;GACJ;GACA,QAAQ,gBAAgB,OAAO;GAC/B,YAAY,8BAA8B,OAAO,KAAK,QAAQ;GAC/D;UACM,OAAO;AACd,SAAO;GACL,IAAI;GACJ;GACA,OAAO,2BAA2B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GACzF;;;AAIL,eAAsB,uBAAuB,QAIX;CAChC,MAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,KAAI,CAAC,KACH,QAAO;EAAE,IAAI;EAAO,MAAM;EAAI,OAAO;EAAgC;AAEvE,KAAI,CAAC,SAAS,OAAO,OAAO,CAC1B,QAAO;EAAE,IAAI;EAAO,MAAM;EAAI,OAAO;EAA4C;CAGnF,MAAM,SAAS,yBAAyB,OAAO,WAAW;AAC1D,KAAI,CAAC,OAAO,GACV,QAAO;CAGT,MAAM,OAAO,gBAAgB,OAAO,OAAO;CAC3C,MAAM,UAAU,8BAA8B,KAAK,KAAK,QAAQ;AAChE,SAAQ,QAAQ,gCAAgC,OAAO,OAAO;AAC9D,MAAK,MAAM;EAAE,GAAG,KAAK;EAAK;EAAS;AAEnC,KAAI;AACF,QAAM,WAAW,MAAM,OAAO,KAAK;UAC5B,OAAO;AACd,SAAO;GACL,IAAI;GACJ,MAAM,OAAO;GACb,OAAO,0BAA0B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GACxF;;AAGH,QAAO;EAAE,IAAI;EAAM,MAAM,OAAO;EAAM,QAAQ;EAAM,YAAY;EAAS;;AAG3E,eAAsB,yBAAyB,QAGb;CAChC,MAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,KAAI,CAAC,KACH,QAAO;EAAE,IAAI;EAAO,MAAM;EAAI,OAAO;EAAgC;CAGvE,MAAM,SAAS,yBAAyB,OAAO,WAAW;AAC1D,KAAI,CAAC,OAAO,GACV,QAAO;AAET,KAAI,CAAC,OAAO,OAAO,OAAO,YAAY,KAAK,CACzC,QAAO;EACL,IAAI;EACJ,MAAM,OAAO;EACb,QAAQ,OAAO;EACf,YAAY,OAAO;EACnB,SAAS;EACV;CAGH,MAAM,OAAO,gBAAgB,OAAO,OAAO;CAC3C,MAAM,UAAU,8BAA8B,KAAK,KAAK,QAAQ;AAChE,QAAO,QAAQ;AACf,KAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAChC,MAAK,MAAM;EAAE,GAAG,KAAK;EAAK;EAAS;UAC1B,KAAK,KAAK;AACnB,SAAO,KAAK,IAAI;AAChB,MAAI,OAAO,KAAK,KAAK,IAAI,CAAC,WAAW,EACnC,QAAO,KAAK;;AAIhB,KAAI;AACF,QAAM,WAAW,MAAM,OAAO,KAAK;UAC5B,OAAO;AACd,SAAO;GACL,IAAI;GACJ,MAAM,OAAO;GACb,OAAO,0BAA0B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GACxF;;AAGH,QAAO;EACL,IAAI;EACJ,MAAM,OAAO;EACb,QAAQ;EACR,YAAY;EACZ,SAAS;EACV"}
@@ -1,3 +0,0 @@
1
- import type { Hono } from 'hono';
2
- import type { AuthenticatedRouteDeps } from './deps.js';
3
- export declare function registerMcpRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -1,99 +0,0 @@
1
- import { canonicalizeConfiguredMcpServer, normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
2
- import { loadMergedBundleMcpConfig } from "../../../agent/mcp/bundle-mcp-config.js";
3
- import { createBundleMcpToolRuntime, listBundleMcpServerToolsForGateway, mapBundleMcpToolsForGateway } from "../../../agent/mcp/bundle-mcp-materialize.js";
4
- import { getWorkspacePath } from "../../../config/workspace-path-helpers.js";
5
- //#region src/gateway/hono/routes/mcp.ts
6
- function registerMcpRoutes(authenticated, deps) {
7
- authenticated.get("/api/mcp/servers", (c) => {
8
- const cfg = deps.service.currentConfig;
9
- const merged = loadMergedBundleMcpConfig({
10
- workspaceDir: getWorkspacePath(cfg) || "./workspace",
11
- cfg
12
- });
13
- return c.json({
14
- ok: true,
15
- payload: {
16
- servers: Object.keys(merged.config.mcpServers).sort(),
17
- configured: normalizeConfiguredMcpServers(cfg.mcp?.servers)
18
- }
19
- });
20
- });
21
- authenticated.get("/api/mcp/servers/:id/tools", async (c) => {
22
- const id = c.req.param("id");
23
- const cfg = deps.service.currentConfig;
24
- const workspaceDir = getWorkspacePath(cfg) || "./workspace";
25
- try {
26
- const tools = await listBundleMcpServerToolsForGateway({
27
- workspaceDir,
28
- cfg,
29
- serverId: id
30
- });
31
- return c.json({
32
- ok: true,
33
- payload: { tools }
34
- });
35
- } catch (err) {
36
- return c.json({
37
- ok: false,
38
- error: err instanceof Error ? err.message : String(err)
39
- }, 500);
40
- }
41
- });
42
- authenticated.post("/api/mcp/servers/:id/test", async (c) => {
43
- const id = c.req.param("id");
44
- const cfg = deps.service.currentConfig;
45
- const workspaceDir = getWorkspacePath(cfg) || "./workspace";
46
- const body = await c.req.json().catch(() => ({}));
47
- const inlineServer = body && typeof body === "object" && !Array.isArray(body) && body.server && typeof body.server === "object" ? body.server : void 0;
48
- const servers = normalizeConfiguredMcpServers(cfg.mcp?.servers);
49
- const mergedServers = loadMergedBundleMcpConfig({
50
- workspaceDir,
51
- cfg
52
- }).config.mcpServers;
53
- if (!(inlineServer ?? servers[id] ?? mergedServers[id])) return c.json({
54
- ok: false,
55
- error: `Unknown MCP server: ${id}`
56
- }, 404);
57
- try {
58
- const runtime = await createBundleMcpToolRuntime({
59
- workspaceDir,
60
- cfg: inlineServer ? {
61
- ...cfg,
62
- mcp: {
63
- ...cfg.mcp,
64
- servers: { [id]: canonicalizeConfiguredMcpServer(inlineServer) }
65
- }
66
- } : cfg
67
- });
68
- const tools = mapBundleMcpToolsForGateway(runtime.tools, id);
69
- await runtime.dispose();
70
- return c.json({
71
- ok: true,
72
- payload: {
73
- serverId: id,
74
- toolCount: tools.length,
75
- tools
76
- }
77
- });
78
- } catch (err) {
79
- return c.json({
80
- ok: false,
81
- error: err instanceof Error ? err.message : String(err)
82
- }, 500);
83
- }
84
- });
85
- authenticated.post("/api/mcp/approvals/respond", async (c) => {
86
- const body = await c.req.json().catch(() => ({}));
87
- return c.json({
88
- ok: true,
89
- payload: {
90
- acknowledged: true,
91
- body
92
- }
93
- });
94
- });
95
- }
96
- //#endregion
97
- export { registerMcpRoutes };
98
-
99
- //# sourceMappingURL=mcp.js.map