@xopcai/xopc 0.0.91 → 0.0.93
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.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +2 -2
- package/dist/extensions/weixin/src/auth/accounts.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/assets/agents-C7tTJLP9.js +222 -0
- package/dist/gateway/static/root/assets/apps-page-BbzdMyrg.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-B49vG2hE.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-CYWL5DLD.js → channels-status-swr-CsGkK9h9.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-TVqLlGAC.js → cron-api-CyAm0xJT.js} +1 -1
- package/dist/gateway/static/root/assets/cron-page-Bjx7IOdR.js +1 -0
- package/dist/gateway/static/root/assets/{dist-CUV1uY5f.js → dist-DHwVV8XK.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-mTLHRDp1.js → extension-debug-page-BK8kcc4F.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-iI8BI7WK.js → extension-page-Cf8X_QUc.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-ByXcdubM.js → extension-settings-page-C5-YLMmy.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-BWtQq_Ys.js → fetch-BAPnkYbC.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-BsZ-4VT5.js → field-primitives-8p7ucXa1.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-CpgW2sGp.js +1 -0
- package/dist/gateway/static/root/assets/index-CwDdudZM.css +1 -0
- package/dist/gateway/static/root/assets/{index-CKkR-v9U.js → index-Do52EfZK.js} +82 -82
- package/dist/gateway/static/root/assets/logs-page-BxukQ-J-.js +1 -0
- package/dist/gateway/static/root/assets/{note-detail-page-DJ2Mb4x7.js → note-detail-page-WLM6FUIi.js} +53 -53
- package/dist/gateway/static/root/assets/{note-time-JLBPSLzK.js → note-time-EFyIVhec.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-BYPVYcYn.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-BFD2_-Cl.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CEs8pGh6.js +2 -0
- package/dist/gateway/static/root/assets/{settings-form-section-DSYCknxM.js → settings-form-section-C6cGTVwK.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-BiP5iH46.js +2 -0
- package/dist/gateway/static/root/assets/{share-preview-page-awRqs4hV.js → share-preview-page-tnIfJ4K6.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-CNDctFIn.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-BC-42BoZ.js → theme-store-D6EsNTPr.js} +1 -1
- package/dist/gateway/static/root/assets/url-CTjpm0Uz.js +3 -0
- package/dist/gateway/static/root/assets/{utils-DX3TQuap.js → utils-C86AVfY-.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-CalxUkxm.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-ClC37yEp.js → workflow-page.utils-DsEriMFW.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-D2fRxXJG.js +27 -0
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +7 -7
- package/dist/src/agent/agent-scope.js +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/goals/goal-run-store.js +4 -4
- package/dist/src/agent/goals/persistent-goal-service.js +1 -1
- package/dist/src/agent/goals/post-turn.js +2 -2
- package/dist/src/agent/image/load-image-media.js +2 -2
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/ipc/inbox.js +2 -2
- package/dist/src/agent/ipc/socket.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-config.d.ts +2 -9
- package/dist/src/agent/mcp/bundle-mcp-config.js +10 -34
- package/dist/src/agent/mcp/bundle-mcp-config.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js +2 -2
- package/dist/src/agent/mcp/bundle-mcp-policy.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +5 -5
- package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
- package/dist/src/agent/mcp/index.js +2 -2
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
- package/dist/src/agent/reply/post-compaction-context.js +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +2 -2
- package/dist/src/agent/service/build-direct-message-content.js +1 -1
- package/dist/src/agent/service.js +4 -4
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/config.js +1 -1
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +2 -2
- package/dist/src/agent/skills/index.js +1 -1
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/scanner.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/factory.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/send-media.js +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/tools/write.js +1 -1
- package/dist/src/agent/workflow/catalog.js +1 -1
- package/dist/src/auth/credentials.js +3 -3
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +2 -2
- package/dist/src/browser/providers/browser-ext-install.js +3 -3
- package/dist/src/browser/providers/cloakbrowser.js +4 -4
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/channels/attachments/inbound-persist.js +1 -1
- package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/chat-commands/agent-edit.js +2 -2
- package/dist/src/chat-commands/builtins/config.js +2 -2
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/cli/command-catalog.js +0 -4
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +1 -2
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.js +0 -4
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/config.js +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +2 -2
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/extension-pack.js +1 -1
- package/dist/src/cli/commands/gateway/logs.js +1 -1
- package/dist/src/cli/commands/image.js +1 -1
- package/dist/src/cli/commands/init.js +4 -4
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/commands/agents.config.js +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.d.ts +0 -1
- package/dist/src/config/index.js +6 -7
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/loader.js +2 -2
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.js +1 -1
- package/dist/src/config/profile.js +2 -2
- package/dist/src/config/schema.d.ts +36 -6
- package/dist/src/config/schema.js +13 -11
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/connectors/builtin-catalog.d.ts +2 -0
- package/dist/src/connectors/builtin-catalog.js +152 -0
- package/dist/src/connectors/builtin-catalog.js.map +1 -0
- package/dist/src/connectors/catalog.d.ts +5 -0
- package/dist/src/connectors/catalog.js +13 -0
- package/dist/src/connectors/catalog.js.map +1 -0
- package/dist/src/connectors/health.d.ts +3 -0
- package/dist/src/connectors/health.js +61 -0
- package/dist/src/connectors/health.js.map +1 -0
- package/dist/src/connectors/install.d.ts +5 -0
- package/dist/src/connectors/install.js +46 -0
- package/dist/src/connectors/install.js.map +1 -0
- package/dist/src/connectors/instances.d.ts +4 -0
- package/dist/src/connectors/instances.js +43 -0
- package/dist/src/connectors/instances.js.map +1 -0
- package/dist/src/connectors/materialize.d.ts +9 -0
- package/dist/src/connectors/materialize.js +76 -0
- package/dist/src/connectors/materialize.js.map +1 -0
- package/dist/src/connectors/oauth.d.ts +22 -0
- package/dist/src/connectors/oauth.js +99 -0
- package/dist/src/connectors/oauth.js.map +1 -0
- package/dist/src/connectors/providers.d.ts +9 -0
- package/dist/src/connectors/providers.js +20 -0
- package/dist/src/connectors/providers.js.map +1 -0
- package/dist/src/connectors/secret-store.d.ts +7 -0
- package/dist/src/connectors/secret-store.js +47 -0
- package/dist/src/connectors/secret-store.js.map +1 -0
- package/dist/src/connectors/types.d.ts +102 -0
- package/dist/src/connectors/types.js +1 -0
- package/dist/src/connectors/usage.d.ts +6 -0
- package/dist/src/connectors/usage.js +63 -0
- package/dist/src/connectors/usage.js.map +1 -0
- package/dist/src/cron/executor.js +2 -2
- package/dist/src/cron/persistence.js +1 -1
- package/dist/src/cron/run-log-store.js +1 -1
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/loader.js +1 -1
- package/dist/src/extensions/lockfile.js +2 -2
- package/dist/src/extensions/update.js +1 -1
- package/dist/src/gateway/agents-admin.js +3 -3
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/oauth.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/connectors.d.ts +3 -0
- package/dist/src/gateway/hono/routes/connectors.js +177 -0
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -0
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +12 -0
- package/dist/src/gateway/hono/routes/home.js +50 -0
- package/dist/src/gateway/hono/routes/home.js.map +1 -0
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +12 -4
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/notes.js +136 -1
- package/dist/src/gateway/hono/routes/notes.js.map +1 -1
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +4 -4
- package/dist/src/gateway/host.d.ts +2 -0
- package/dist/src/gateway/host.js +6 -3
- package/dist/src/gateway/host.js.map +1 -1
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service/agent-runner.js +2 -2
- package/dist/src/gateway/service/marketplace-service.js +2 -2
- package/dist/src/gateway/service.js +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/infra/brew.js +1 -1
- package/dist/src/infra/package-json.js +1 -1
- package/dist/src/infra/package-update-steps.js +1 -1
- package/dist/src/infra/path-env.js +2 -2
- package/dist/src/infra/restart.js +2 -2
- package/dist/src/infra/stable-node-path.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-lock.js +3 -3
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +2 -2
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/mcp/channel-bridge.js.map +1 -1
- package/dist/src/notes/index.d.ts +1 -1
- package/dist/src/notes/service.d.ts +24 -1
- package/dist/src/notes/service.js +279 -0
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/notes/store.d.ts +4 -0
- package/dist/src/notes/store.js +37 -8
- package/dist/src/notes/store.js.map +1 -1
- package/dist/src/notes/types.d.ts +70 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/session/config-store.js +2 -2
- package/dist/src/session/init-session-turn.js +2 -2
- package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
- package/dist/src/session/parity/sessions-json-file.js +1 -1
- package/dist/src/session/parity/transcript-file-lock.js +2 -2
- package/dist/src/session/parity/transcript-paths.js +1 -1
- package/dist/src/session/resolve-session.js +4 -4
- package/dist/src/session/search-index-cache.js +1 -1
- package/dist/src/session/search-index.js +1 -1
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store.d.ts +2 -0
- package/dist/src/session/store.js +27 -7
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/share/share-auto.js +2 -2
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/share/share-thumbnail.js +2 -2
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-share-store.js +3 -3
- package/dist/src/share/site-static-serve.js +1 -1
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui.js +3 -3
- package/dist/src/tunnel/frpc-binary.js +3 -3
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/workflows/store/event-store.js +1 -1
- package/dist/src/workflows/store/run-store.js +1 -1
- package/package.json +5 -1
- package/dist/gateway/static/root/assets/agents-bVWUlrlD.js +0 -222
- package/dist/gateway/static/root/assets/apps-page-CIC8bmvZ.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-C8G8RAAP.js +0 -1
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-Ip703-qM.js +0 -2
- package/dist/gateway/static/root/assets/cron-page-BtcFYlvv.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-WjTsRLCU.js +0 -1
- package/dist/gateway/static/root/assets/index-VlELBY99.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-ClnIpxfd.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-BE-75qz9.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-bJJkWtTl.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-WcMXLq2U.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-Lu-i1JG7.js +0 -2
- package/dist/gateway/static/root/assets/url-CY1RQKTU.js +0 -3
- package/dist/gateway/static/root/assets/voice-api-key-field-B5uKlDqA.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-C7VhIXtR.js +0 -27
- package/dist/src/cli/commands/mcp.d.ts +0 -4
- package/dist/src/cli/commands/mcp.js +0 -85
- package/dist/src/cli/commands/mcp.js.map +0 -1
- package/dist/src/config/mcp-config.d.ts +0 -34
- package/dist/src/config/mcp-config.js +0 -116
- package/dist/src/config/mcp-config.js.map +0 -1
- package/dist/src/gateway/hono/routes/mcp.d.ts +0 -3
- package/dist/src/gateway/hono/routes/mcp.js +0 -99
- 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-CY1RQKTU.js";import{o as a}from"./vendor-swr-BIWyz7Rc.js";import{a as o,n as s}from"./fetch-BWtQq_Ys.js";import{Co as c,K as l,ai as u,ba as d,eo as f,et as p,oi as m,or as h,qi as g,qr as _,si as v,sr as y,tt as b,zo as x}from"./index-CKkR-v9U.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&&!(l(n)&&l(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 h())}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 p;t[5]!==s||t[6]!==o?(p=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:[b(e.kind,s),(0,j.jsx)(f,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null,t[5]=s,t[6]=o,t[7]=p):p=t[7];let m=`img-cred-key-${n}`,h;t[8]!==a||t[9]!==i||t[10]!==l||t[11]!==m||t[12]!==r?(h=(0,j.jsx)(_,{id:m,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]=m,t[12]=r,t[13]=h):h=t[13];let g;return t[14]!==d||t[15]!==p||t[16]!==h?(g=(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[d,p,h]}),t[14]=d,t[15]=p,t[16]=h,t[17]=g):g=t[17],g}function M(e){return e.apiKey??null}function N(){return v(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,u)}function ie(){return v(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:l,credNoopFlash:u,updateCredRow:h,onDiscardCredentials:_,onSaveCredentials:y,extensionIds:b,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)(x,{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]!==u||t[35]!==l||t[36]!==o||t[37]!==ne||t[38]!==_||t[39]!==y||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:[l?(0,j.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsSaved}):null,u?(0,j.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsNothingToSave}):null,(0,j.jsx)(m,{type:`button`,variant:`secondary`,onClick:_,disabled:!a||o,children:O.discardCredentials}),(0,j.jsx)(m,{type:`button`,variant:`primary`,onClick:y,disabled:!a||o,children:o?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(d,{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)(g,{className:`size-3.5`}),(0,j.jsx)(`span`,{className:`ml-1.5`,children:O.saveCredentials})]})})]}),t[33]=a,t[34]=u,t[35]=l,t[36]=o,t[37]=ne,t[38]=_,t[39]=y,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]!==b||t[50]!==V||t[51]!==E||t[52]!==S||t[53]!==n||t[54]!==O||t[55]!==U||t[56]!==h){let e;t[58]!==D||t[59]!==i||t[60]!==r||t[61]!==b||t[62]!==V||t[63]!==E||t[64]!==S||t[65]!==O||t[66]!==U||t[67]!==h?(e=e=>{let t=r[e.id]??T(),n=e.ui,a=S&&b.has(e.id)?`/settings/ext/${encodeURIComponent(e.id)}`:null,o=ue(t,i[e.id]??T()),s=V(e.id),l=e.label??e.id,u=de(O,e.models.length);return(0,j.jsxs)(`section`,{className:v(`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:l}),(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:u}),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)(c,{className:v(`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)(x,{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)(f,{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=>h(e.id,{apiKey:t}),apiKeyLinks:p(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===``){h(e.id,{region:``,imageBaseUrl:``});return}if(r===P){h(e.id,{region:``,imageBaseUrl:``});return}let i=n.regions.find(e=>e.value===r);i&&h(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=>h(e.id,{region:t.target.value})}),(0,j.jsx)(`input`,{type:`url`,className:N(),value:t.imageBaseUrl,placeholder:O.imageBaseUrlLabel,onChange:t=>h(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===``){h(e.id,{baseUrl:``});return}if(n===P){h(e.id,{baseUrl:``});return}h(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:v(N(),`mt-2`),value:t.baseUrl,placeholder:`https://…`,onChange:t=>h(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:v(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]=b,t[62]=V,t[63]=E,t[64]=S,t[65]=O,t[66]=U,t[67]=h,t[68]=e):e=t[68],Z=n.map(e),t[46]=D,t[47]=i,t[48]=r,t[49]=b,t[50]=V,t[51]=E,t[52]=S,t[53]=n,t[54]=O,t[55]=U,t[56]=h,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=y(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),[g,_]=(0,w.useState)(!1),v=(0,w.useMemo)(()=>E(n?.payload?.config,r),[n?.payload?.config,r]),b=c??v,x=v;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:g,updateCredRow:(0,w.useCallback)((e,t)=>{s.current=!0,l(n=>{let r=n??v,i=r[e]??T();return{...r,[e]:{...i,...t}}})},[v]),onDiscardCredentials:(0,w.useCallback)(()=>{s.current=!1,l(null),p(null),h(!1),_(!1)},[]),saveCredentials:(0,w.useCallback)(async e=>{let n=ne(r,b,x);if(Object.keys(n).length===0){_(!0),window.setTimeout(()=>_(!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)})}),h()}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 f=d,p;t[3]===l?p=t[4]:(p=v(`flex min-w-0 flex-col gap-1.5`,l),t[3]=l,t[4]=p);let m;t[5]!==i||t[6]!==s||t[7]!==o||t[8]!==u||t[9]!==f||t[10]!==a?(m=(0,j.jsx)(_,{id:i,value:a,onChange:o,placeholder:u,labels:s,reveal:f,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]=f,t[10]=a,t[11]=m):m=t[11];let h;return t[12]!==p||t[13]!==m?(h=(0,j.jsx)(`div`,{className:p,children:m}),t[12]=p,t[13]=m,t[14]=h):h=t[14],h}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-CY1RQKTU.js";import{i as o}from"./vendor-swr-BIWyz7Rc.js";import{t as s}from"./copy-Dv6d4Dvw.js";import{a as c}from"./fetch-BWtQq_Ys.js";import{C as l,Ci as u,Co as d,Cr as f,D as p,E as m,Fr as h,Ho as g,Jr as _,Ka as v,Ma as y,Mi as b,Pi as x,Qr as S,S as C,Sr as w,T,Tr as E,Ui as D,Wo as O,Xi as k,Yi as A,_ as j,a as ee,b as M,br as te,d as N,f as P,g as F,ga as I,go as L,h as R,i as z,l as ne,li as re,m as B,mi as ie,o as V,oi as H,p as U,r as W,ra as G,ro as K,si as q,ta as ae,to as oe,u as J,ua as se,v as Y,w as ce,wo as le,wr as ue,xr as de,y as fe,yi as pe,yr as me}from"./index-CKkR-v9U.js";import{a as he,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-ClC37yEp.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)(65),{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 x=b,C=n.metrics.errorAgentCount>0,w=n.startedAtMs??n.createdAtMs,T=we(v?o-w:n.metrics.durationMs),E=X(f.taskArtifacts,{count:n.metrics.artifactCount}),D;t[7]===n?D=t[8]:(D=Fe(n),t[7]=n,t[8]=D);let O=D,k;t[9]===n?k=t[10]:(k=Ie(n),t[9]=n,t[10]=k);let A=k,j;t[11]!==c||t[12]!==n?(j=()=>{c(n)},t[11]=c,t[12]=n,t[13]=j):j=t[13];let ee=j,M;t[14]!==g||t[15]!==l||t[16]!==n?(M=()=>{g||l(n)},t[14]=g,t[15]=l,t[16]=n,t[17]=M):M=t[17];let te=M,N=s?`border-accent/70 ring-1 ring-accent/30`:`border-edge`,P;t[18]===N?P=t[19]:(P=q(`group relative overflow-hidden rounded-xl border bg-surface-panel p-3.5 transition-colors`,N,`hover:border-edge-strong hover:bg-surface-hover/50`),t[18]=N,t[19]=P);let F;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(F=q(`w-full text-left`,S.focusRingPanel),t[20]=F):F=t[20];let I;t[21]===O?I=t[22]:(I=(0,$.jsx)(`div`,{className:`line-clamp-2 text-sm font-semibold leading-5 text-fg`,children:O}),t[21]=O,t[22]=I);let L;t[23]===A?L=t[24]:(L=(0,$.jsx)(`div`,{className:`mt-1 truncate text-[11px] font-medium text-fg-muted`,children:A}),t[23]=A,t[24]=L);let R;t[25]!==I||t[26]!==L?(R=(0,$.jsxs)(`div`,{className:`min-w-0`,children:[I,L]}),t[25]=I,t[26]=L,t[27]=R):R=t[27];let z;t[28]===n.status?z=t[29]:(z=q(`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm`,De(n.status)),t[28]=n.status,t[29]=z);let ne;t[30]!==i||t[31]!==o||t[32]!==w?(ne=We(w,o,i),t[30]=i,t[31]=o,t[32]=w,t[33]=ne):ne=t[33];let re;t[34]===ne?re=t[35]:(re=(0,$.jsx)(`span`,{children:ne}),t[34]=ne,t[35]=re);let B=T===`—`?null:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,$.jsx)(`span`,{children:X(f.taskElapsed,{duration:T})})]}),ie;t[36]!==re||t[37]!==B?(ie=(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-1.5 text-[11px] text-fg-subtle`,children:[re,B]}),t[36]=re,t[37]=B,t[38]=ie):ie=t[38];let V=n.metrics.artifactCount>0?(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2 py-0.5 font-medium text-fg-muted`,children:E}):null,U=s?(0,$.jsx)(`span`,{className:`font-medium text-accent-fg`,children:f.taskOpenDetails}):null,W;t[39]!==V||t[40]!==U?(W=(0,$.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2 text-[11px] text-fg-subtle`,children:[V,U]}),t[39]=V,t[40]=U,t[41]=W):W=t[41];let G;t[42]===m?G=t[43]:(G=()=>m(Ye),t[42]=m,t[43]=G);let K;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,$.jsx)(oe,{className:`size-4`,"aria-hidden":!0}),t[44]=K):K=t[44];let ae;t[45]!==f.taskActionsAria||t[46]!==p||t[47]!==G?(ae=(0,$.jsx)(H,{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:G,children:K}),t[45]=f.taskActionsAria,t[46]=p,t[47]=G,t[48]=ae):ae=t[48];let J;t[49]!==v||t[50]!==g||t[51]!==te||t[52]!==f.cancel||t[53]!==f.continueInChat||t[54]!==f.rerun||t[55]!==f.taskCloseMenu||t[56]!==p||t[57]!==u||t[58]!==d||t[59]!==n||t[60]!==m?(J=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),te()}}),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[49]=v,t[50]=g,t[51]=te,t[52]=f.cancel,t[53]=f.continueInChat,t[54]=f.rerun,t[55]=f.taskCloseMenu,t[56]=p,t[57]=u,t[58]=d,t[59]=n,t[60]=m,t[61]=J):J=t[61];let se;return t[62]!==ae||t[63]!==J?(se=(0,$.jsxs)(`div`,{className:`absolute right-2 top-2`,children:[ae,J]}),t[62]=ae,t[63]=J,t[64]=se):se=t[64],(0,$.jsxs)(`div`,{className:P,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:ee,"aria-label":`${f.taskOpenDetails}: ${O}`,"aria-current":s?`true`:void 0,className:F,children:[(0,$.jsxs)(`div`,{className:`pr-7`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-2`,children:[R,(0,$.jsx)(`span`,{className:z,children:f.status[n.status]??n.status})]}),ie]}),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:[x,`%`]})]}),(0,$.jsx)(`div`,{className:`mt-1.5 h-1.5 overflow-hidden rounded-full bg-surface-hover`,children:(0,$.jsx)(`div`,{className:`h-full rounded-full bg-accent transition-all`,style:{width:`${x}%`}})})]}):null,W,C?(0,$.jsxs)(`div`,{className:`mt-2 flex items-center gap-1 text-[11px] text-amber-700 dark:text-amber-300`,children:[(0,$.jsx)(pe,{className:`size-3 shrink-0`,"aria-hidden":!0}),X(f.runRowErrorSummary,{count:n.metrics.errorAgentCount})]}):null]}),se]})});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=q(`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)(14),{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=q(`flex min-h-112 w-73 shrink-0 snap-center flex-col rounded-2xl border border-edge bg-surface-panel/40`),t[5]=x):x=t[5];let S;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,$.jsx)(`span`,{className:`size-2 rounded-full bg-accent`,"aria-hidden":!0}),t[6]=S):S=t[6];let C;t[7]===n.runs.length?C=t[8]:(C=(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2.5 py-1 text-xs font-semibold tabular-nums text-fg-muted`,children:n.runs.length}),t[7]=n.runs.length,t[8]=C);let w=v.length===0?(0,$.jsx)(`div`,{className:`flex min-h-32 items-center justify-center rounded-xl border border-dashed border-edge bg-surface-panel/40 px-4 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)(H,{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,E=b?(0,$.jsx)(H,{variant:`ghost`,className:`h-8 w-full text-xs`,onClick:()=>m(!1),children:f.boardCollapseSucceeded}):null,D=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,O;return t[9]!==w||t[10]!==T||t[11]!==E||t[12]!==D?(O=(0,$.jsxs)(`div`,{className:`flex flex-1 flex-col gap-3 p-2.5`,children:[w,T,E,D]}),t[9]=w,t[10]=T,t[11]=E,t[12]=D,t[13]=O):O=t[13],(0,$.jsxs)(`section`,{className:x,"aria-label":Xe(n.id,f),children:[(0,$.jsxs)(`header`,{className:`sticky top-0 z-10 flex items-center justify-between gap-2 rounded-t-2xl border-b border-edge-subtle bg-surface-panel/90 px-3.5 py-3 backdrop-blur`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[S,(0,$.jsx)(`h2`,{className:`truncate text-sm font-semibold text-fg`,children:Xe(n.id,f)})]}),C]}),O]})}),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 C=S,w=C.reduce(tt,0);if(u&&w===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&&w===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)(H,{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 T;if(t[24]!==C||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],T=C.map(e),t[24]=C,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]=T}else T=t[33];let E;return t[43]===T?E=t[44]:(E=(0,$.jsx)(`div`,{className:`-mx-1 flex min-w-0 snap-x snap-mandatory gap-3 overflow-x-auto px-1 pb-2`,children:T}),t[43]=T,t[44]=E),E});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,c;t[0]===i?c=t[1]:(c=a(i),t[0]=i,t[1]=c);let l=c.workflows;if(!r)return null;let u;t[2]!==r||t[3]!==i?(u=xe(r,i),t[2]=r,t[3]=i,t[4]=u):u=t[4];let d=u,p=r.runtime?.source??``,m;t[5]===o?m=t[6]:(m=e=>!e&&o(),t[5]=o,t[6]=m);let h;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,$.jsx)(w,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[7]=h):h=t[7];let g;t[8]===r.title?g=t[9]:(g=(0,$.jsx)(E,{className:`text-base font-semibold text-fg`,children:r.title}),t[8]=r.title,t[9]=g);let _;t[10]===d.description?_=t[11]:(_=(0,$.jsx)(de,{className:`mt-1 text-sm text-fg-muted`,children:d.description}),t[10]=d.description,t[11]=_);let v;t[12]!==g||t[13]!==_?(v=(0,$.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[g,_]}),t[12]=g,t[13]=_,t[14]=v):v=t[14];let y;t[15]!==l.whenToUseHeading||t[16]!==d.whenToUse?(y=d.whenToUse?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.whenToUseHeading}),(0,$.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-fg-muted`,children:d.whenToUse})]}):null,t[15]=l.whenToUseHeading,t[16]=d.whenToUse,t[17]=y):y=t[17];let b;t[18]!==r.phases||t[19]!==l.phasesHeading?(b=r.phases.length>0?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.phasesHeading}),(0,$.jsx)(`ol`,{className:`mt-2 space-y-2`,children:r.phases.map(rt)})]}):null,t[18]=r.phases,t[19]=l.phasesHeading,t[20]=b):b=t[20];let x;t[21]!==l.scriptHeading||t[22]!==p?(x=p?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.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:p})]}):null,t[21]=l.scriptHeading,t[22]=p,t[23]=x):x=t[23];let S;t[24]!==x||t[25]!==y||t[26]!==b?(S=(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-auto px-5 py-4`,children:[y,b,x]}),t[24]=x,t[25]=y,t[26]=b,t[27]=S):S=t[27];let C;t[28]!==l.closeResult||t[29]!==o?(C=(0,$.jsx)(H,{variant:`secondary`,onClick:o,children:l.closeResult}),t[28]=l.closeResult,t[29]=o,t[30]=C):C=t[30];let T;t[31]!==l.runWorkflow||t[32]!==s?(T=(0,$.jsx)(H,{variant:`primary`,onClick:s,children:l.runWorkflow}),t[31]=l.runWorkflow,t[32]=s,t[33]=T):T=t[33];let D;t[34]!==C||t[35]!==T?(D=(0,$.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[C,T]}),t[34]=C,t[35]=T,t[36]=D):D=t[36];let O;t[37]!==S||t[38]!==D||t[39]!==v?(O=(0,$.jsxs)(f,{children:[h,(0,$.jsxs)(te,{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:[v,S,D]})]}),t[37]=S,t[38]=D,t[39]=v,t[40]=O):O=t[40];let k;return t[41]!==n||t[42]!==O||t[43]!==m?(k=(0,$.jsx)(ue,{open:n,onOpenChange:m,children:O}),t[41]=n,t[42]=O,t[43]=m,t[44]=k):k=t[44],k}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,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(``),[d,p]=(0,Z.useState)(!1),[m,h]=(0,Z.useState)(!1),[g,_]=(0,Z.useState)(null),[v,y]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{e&&(c(``),p(!1),h(!1),_(null),y(null),u(`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 b=s.trim(),x=!!(b&&l.trim());(0,Z.useEffect)(()=>{if(!e||!x){h(!1),_(null),y(null);return}let t=!1,n=window.setTimeout(()=>{h(!0),_(null),M(b,l).then(e=>{t||y(e)}).catch(e=>{t||(y(null),_(e instanceof Error?e.message:o.validateWorkflowFailed))}).finally(()=>{t||h(!1)})},450);return()=>{t=!0,window.clearTimeout(n)}},[x,o.validateWorkflowFailed,e,l,b]);let S=(0,Z.useMemo)(()=>g?[g]:v?.errors.map(e=>e.message)??[],[g,v]),C=d||m||v!=null||g!=null,T=x&&!n&&!m&&v?.valid===!0,D=async()=>{if(p(!0),!(!x||n)){h(!0),_(null);try{let e=await M(b,l);if(y(e),!e.valid)return;await i({name:b,script:l})}catch(e){y(null),_(e instanceof Error?e.message:o.validateWorkflowFailed)}finally{h(!1)}}};return(0,$.jsx)(ue,{open:e,onOpenChange:e=>!e&&r(),children:(0,$.jsxs)(f,{children:[(0,$.jsx)(w,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),(0,$.jsxs)(te,{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)(E,{className:`text-base font-semibold text-fg`,children:o.manageDialogTitle}),(0,$.jsx)(de,{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=>{c(e.target.value),y(null),_(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:l,onChange:e=>{u(e.target.value),y(null),_(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`})]}),C?(0,$.jsxs)(`div`,{className:S.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:m?o.validatingWorkflow:S.length>0?o.validationFailed:o.validationPassed}),S.length>0?(0,$.jsx)(`ul`,{className:`mt-1 list-disc space-y-1 pl-5`,children:S.map(e=>(0,$.jsx)(`li`,{children:e},e))}):v?.definition?(0,$.jsx)(`div`,{className:`mt-1 text-xs opacity-80`,children:o.validationPreview.replace(`{{phaseCount}}`,String(v.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)(H,{variant:`secondary`,onClick:r,disabled:n,children:o.cancelDialog}),(0,$.jsx)(H,{variant:`primary`,disabled:!T,onClick:()=>void D(),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=q(`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`,S.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=q(`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 b;t[20]===n.title?b=t[21]:(b=(0,$.jsx)(`span`,{className:`line-clamp-2 text-sm font-semibold leading-5 text-fg`,children:n.title}),t[20]=n.title,t[21]=b);let x;t[22]!==v||t[23]!==b?(x=(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[v,b]}),t[22]=v,t[23]=b,t[24]=x):x=t[24];let C;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(C=(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)(G,{className:`size-3.5`,"aria-hidden":!0})}),t[25]=C):C=t[25];let w;t[26]===x?w=t[27]:(w=(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[x,C]}),t[26]=x,t[27]=w);let T;t[28]===s.description?T=t[29]:(T=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]=T);let E;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,$.jsx)(y,{className:`size-3`,"aria-hidden":!0}),t[30]=E):E=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:[E,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)(ie,{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 j;return t[41]!==w||t[42]!==T||t[43]!==A||t[44]!==d?(j=(0,$.jsxs)(`button`,{type:`button`,onClick:d,className:f,children:[w,T,A]}),t[41]=w,t[42]=T,t[43]=A,t[44]=d,t[45]=j):j=t[45],j}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=he(f),t[4]=f,t[5]=p);let m=p,h;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,$.jsx)(D,{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=q(`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`,S.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:V.map(e=>(0,$.jsx)(H,{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,c;t[0]===i?c=t[1]:(c=a(i),t[0]=i,t[1]=c);let l=c.workflows,u;t[2]===o?u=t[3]:(u=e=>!e&&o(),t[2]=o,t[3]=u);let d;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,$.jsx)(w,{className:`fixed inset-0 z-50 bg-scrim`}),t[4]=d):d=t[4];let p;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(p=q(`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`,S.focusRingPanel),t[5]=p):p=t[5];let m;t[6]===l.pickStartTitle?m=t[7]:(m=(0,$.jsx)(E,{className:`text-lg font-semibold text-fg`,children:l.pickStartTitle}),t[6]=l.pickStartTitle,t[7]=m);let h;t[8]===l.pickStartHint?h=t[9]:(h=(0,$.jsx)(de,{className:`mt-1 text-sm leading-6 text-fg-muted`,children:l.pickStartHint}),t[8]=l.pickStartHint,t[9]=h);let g;t[10]!==m||t[11]!==h?(g=(0,$.jsxs)(`div`,{className:`min-w-0`,children:[m,h]}),t[10]=m,t[11]=h,t[12]=g):g=t[12];let _;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,$.jsx)(re,{className:`size-5`,strokeWidth:1.75,"aria-hidden":!0}),t[13]=_):_=t[13];let v;t[14]===l.pickStartClose?v=t[15]:(v=(0,$.jsx)(me,{asChild:!0,children:(0,$.jsx)(H,{variant:`ghost`,className:`size-9 shrink-0 p-0`,"aria-label":l.pickStartClose,children:_})}),t[14]=l.pickStartClose,t[15]=v);let y;t[16]!==g||t[17]!==v?(y=(0,$.jsxs)(`div`,{className:`flex shrink-0 items-start justify-between gap-4 border-b border-edge-subtle px-6 py-5`,children:[g,v]}),t[16]=g,t[17]=v,t[18]=y):y=t[18];let b;t[19]!==r||t[20]!==i||t[21]!==s?(b=(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]=b):b=t[22];let x;t[23]!==y||t[24]!==b?(x=(0,$.jsxs)(f,{children:[d,(0,$.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none`,children:(0,$.jsxs)(te,{className:p,onOpenAutoFocus:dt,children:[y,b]})})]}),t[23]=y,t[24]=b,t[25]=x):x=t[25];let C;return t[26]!==n||t[27]!==x||t[28]!==u?(C=(0,$.jsx)(ue,{open:n,onOpenChange:u,children:x}),t[26]=n,t[27]=x,t[28]=u,t[29]=C):C=t[29],C}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:c}){let u=a(n).workflows,h=C(n),v=g(),[y,x]=(0,Z.useState)(!0),[S,D]=(0,Z.useState)(!1),[O,k]=(0,Z.useState)(null),[j,ee]=(0,Z.useState)(!1),[,M]=(0,Z.useState)(0),P=e?.run.status,F=P?z.has(P):!1;(0,Z.useEffect)(()=>{e?.run.id&&(x(F||P===`failed`||P===`timeout`||P===`succeeded`&&e.run.metrics.errorAgentCount>0),k(null))},[e?.run.id,F,P,e?.run.metrics.errorAgentCount]),(0,Z.useEffect)(()=>{if(!F)return;let e=window.setInterval(()=>M(e=>e+1),1e3);return()=>window.clearInterval(e)},[F]);let R=(0,Z.useMemo)(()=>e?N(e):null,[e]),ne=(0,Z.useMemo)(()=>R?p(R):{phases:[],unphased:null},[R]),B=(0,Z.useMemo)(()=>O==null||!R?null:R.agents.find(e=>e.id===O)??null,[O,R]),ie=(0,Z.useCallback)(e=>{k(e.id)},[]),V=e?Te(e.run.result):void 0,U=_e(V),W=U.trim().length>0,G=(0,Z.useCallback)(async()=>{W&&await _(U)&&(ee(!0),window.setTimeout(()=>ee(!1),1500))},[W,U]),ae=(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]),oe=(0,Z.useCallback)(()=>{if(!e)return;let t=gt(e);t&&v(ve(t))},[v,e]),J=e?gt(e):null;if(t)return(0,$.jsx)(ue,{open:!0,onOpenChange:e=>!e&&c(),children:(0,$.jsxs)(f,{children:[(0,$.jsx)(w,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),(0,$.jsxs)(te,{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)(E,{className:`text-base font-semibold tracking-tight text-fg`,children:u.runSummaryTitle}),(0,$.jsx)(H,{type:`button`,variant:`ghost`,className:`size-9 shrink-0 p-0`,"aria-label":u.pickStartClose,onClick:c,children:(0,$.jsx)(re,{className:`size-5`,"aria-hidden":!0})})]}),(0,$.jsx)(`div`,{className:`p-5 text-sm text-fg-muted`,children:u.loading})]})]})});if(!e||!R)return null;let{run:Y}=e,de=e.controls.canCancel&&F,fe=F&&Y.startedAtMs!=null?we(Date.now()-Y.startedAtMs):we(Y.metrics.durationMs??void 0),me=mt(e,u),he=ht(e,u),be=Y.metadata,xe=_t(Y.source);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ue,{open:!0,onOpenChange:e=>!e&&c(),children:(0,$.jsxs)(f,{children:[(0,$.jsx)(w,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),(0,$.jsxs)(te,{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)(E,{className:`truncate text-base font-semibold tracking-tight text-fg`,children:Y.title}),(0,$.jsx)(H,{type:`button`,variant:`ghost`,className:`size-9 shrink-0 p-0`,"aria-label":u.pickStartClose,onClick:c,children:(0,$.jsx)(re,{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:Y.title}),(0,$.jsx)(`span`,{className:q(`rounded-full px-2 py-0.5 text-xs font-medium`,De(Y.status)),children:ft(Y.status,u)})]}),(0,$.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:Y.definitionId}),Y.goal?(0,$.jsx)(`p`,{className:`mt-3 text-sm leading-6 text-fg-muted`,children:Y.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:Y.status===`succeeded`?(0,$.jsx)(se,{className:`size-4`,"aria-hidden":!0}):Y.status===`failed`||Y.status===`timeout`?(0,$.jsx)(pe,{className:`size-4`,"aria-hidden":!0}):(0,$.jsx)(b,{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:u.runSummaryTitle}),(0,$.jsx)(`p`,{className:`mt-1 text-sm leading-6 text-fg-muted`,children:me}),he?(0,$.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-subtle`,children:he}):null]})]})}),(0,$.jsxs)(`dl`,{className:`mt-5 grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,$.jsx)(St,{label:u.metrics.startedAt,value:ye(Y.startedAtMs??Y.createdAtMs,r)}),(0,$.jsx)(St,{label:u.metrics.duration,value:fe}),(0,$.jsx)(St,{label:u.metrics.agents,value:X(u.agentProgress,{done:Y.metrics.doneAgentCount,total:Y.metrics.agentCount})}),(0,$.jsx)(St,{label:u.metrics.artifacts,value:String(Y.metrics.artifactCount)})]}),(0,$.jsxs)(`div`,{className:`mt-5 flex flex-wrap gap-2`,children:[J?(0,$.jsxs)(H,{variant:`primary`,onClick:oe,children:[(0,$.jsx)(I,{className:`size-4`,"aria-hidden":!0}),u.continueInChat]}):null,de?(0,$.jsxs)(H,{variant:`secondary`,onClick:i,className:`text-red-600 dark:text-red-300`,children:[(0,$.jsx)(L,{className:`size-4`,"aria-hidden":!0}),u.cancel]}):null,e.controls.canRetry?(0,$.jsxs)(H,{variant:`secondary`,onClick:o,children:[(0,$.jsx)(A,{className:`size-4`,"aria-hidden":!0}),u.rerun]}):null,W?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(H,{variant:`secondary`,onClick:G,children:[j?(0,$.jsx)(le,{className:`size-4`,"aria-hidden":!0}):(0,$.jsx)(s,{className:`size-4`,"aria-hidden":!0}),j?u.copied:u.copyResult]}),(0,$.jsxs)(H,{variant:`secondary`,onClick:ae,children:[(0,$.jsx)(K,{className:`size-4`,"aria-hidden":!0}),u.exportResult]})]}):null]}),(0,$.jsxs)(`div`,{className:`mt-6`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:u.resultTitle}),W?(0,$.jsx)(`div`,{className:`mt-3 rounded-xl border border-edge bg-surface-base/50 p-3`,children:(0,$.jsx)(l,{result:V,labels:h.result})}):(0,$.jsx)(`div`,{className:`mt-3 rounded-xl border border-dashed border-edge p-4 text-sm text-fg-muted`,children:u.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:()=>x(e=>!e),"aria-expanded":y,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:u.process}),(0,$.jsxs)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:[X(u.agentProgress,{done:Y.metrics.doneAgentCount,total:Y.metrics.agentCount}),` · `,fe]})]}),(0,$.jsx)(d,{className:q(`size-4 shrink-0 text-fg-subtle transition-transform`,y?`rotate-180`:null),"aria-hidden":!0})]}),y?(0,$.jsxs)(`div`,{className:`border-t border-edge px-4 pb-4 pt-4`,children:[F?(0,$.jsx)(T,{snapshot:R,labels:h,logsExpanded:S,onToggleLogs:()=>D(e=>!e),selectedAgentId:O,onSelectAgent:ie}):(0,$.jsx)(ce,{rollup:ne,currentPhase:R.currentPhase,labels:h.phase,recentLogs:R.logs,recentLogsHeading:h.recentLogsHeading,showAllLogsLabel:h.showAllLogs,logsExpanded:S,onToggleLogs:()=>D(e=>!e),selectedAgentId:O,onSelectAgent:ie}),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,u)})]})},e.id))}):null]}):null]}),(0,$.jsx)(yt,{agents:R.agents,labels:u,defaultExpanded:Y.status===`failed`||Y.status===`timeout`||Y.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:u.metadataSession,value:be?.sessionKey??ge(e)??`—`}),(0,$.jsx)(Ct,{label:u.metadataSource,value:xe}),(0,$.jsx)(Ct,{label:u.metadataDefinition,value:`${be?.definition.version??Y.definitionVersion} · ${be?.definition.source??`unknown`}`}),(0,$.jsx)(Ct,{label:u.metadataRetryOf,value:be?.retryOfRunId??`—`})]})]})]})]})}),(0,$.jsx)(m,{open:O!=null&&B!=null,agent:B,snapshot:R,sessionKey:null,pinnedAgentId:null,onPinAgent:()=>{},onClose:()=>k(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 f;t[6]===r.agentIoHint?f=t[7]:(f=(0,$.jsx)(`p`,{className:`text-xs leading-5 text-fg-subtle`,children:r.agentIoHint}),t[6]=r.agentIoHint,t[7]=f);let p;t[8]!==u||t[9]!==f?(p=(0,$.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[u,f]}),t[8]=u,t[9]=f,t[10]=p):p=t[10];let m=a?`rotate-180`:null,h;t[11]===m?h=t[12]:(h=q(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,m),t[11]=m,t[12]=h);let g;t[13]===h?g=t[14]:(g=(0,$.jsx)(d,{className:h,"aria-hidden":!0}),t[13]=h,t[14]=g);let _;t[15]!==a||t[16]!==p||t[17]!==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:[p,g]}),t[15]=a,t[16]=p,t[17]=g,t[18]=_):_=t[18];let v;t[19]!==n||t[20]!==a||t[21]!==r.agentInputHeading||t[22]!==r.agentNoOutput||t[23]!==r.agentOutputHeading||t[24]!==r.agentStatus?(v=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:q(`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:q(`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]=v):v=t[25];let y;return t[26]!==_||t[27]!==v?(y=(0,$.jsxs)(`section`,{className:`mt-6 rounded-2xl border border-edge bg-surface-base/35`,children:[_,v]}),t[26]=_,t[27]=v,t[28]=y):y=t[28],y}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:c}=e,l=a(i).workflows,[p,m]=(0,Z.useState)(``),h;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(h={},t[0]=h):h=t[0];let[g,_]=(0,Z.useState)(h),[v,b]=(0,Z.useState)(``),[S,C]=(0,Z.useState)(``),[T,D]=(0,Z.useState)(!1),O;t[1]!==r||t[2]!==i?(O=r?xe(r,i):null,t[1]=r,t[2]=i,t[3]=O):O=t[3];let k=O,A;t[4]===r?A=t[5]:(A=r?ee[r.name]??[]:[],t[4]=r,t[5]=A);let j=A,M;t[6]===k?.examplePrompts?M=t[7]:(M=k?.examplePrompts??[],t[6]=k?.examplePrompts,t[7]=M);let N=M,P=j.length>0,F;t[8]!==v||t[9]!==r?.defaults?(F=v.trim()?Number(v):r?.defaults.concurrency,t[8]=v,t[9]=r?.defaults,t[10]=F):F=t[10];let I=F,L;t[11]!==r?.defaults||t[12]!==S?(L=S.trim()?Number(S):r?.defaults.maxSubagents,t[11]=r?.defaults,t[12]=S,t[13]=L):L=t[13];let R=L,z=r&&k?Et(p,g,k.description,l):l.noInputSummary,ne;t[14]!==r||t[15]!==n?(ne=()=>{!n||!r||(m(``),_({}),b(``),C(``),D(!1))},t[14]=r,t[15]=n,t[16]=ne):ne=t[16];let re=r?.id,B;if(t[17]!==n||t[18]!==re?(B=[n,re],t[17]=n,t[18]=re,t[19]=B):B=t[19],(0,Z.useEffect)(ne,B),!r||!k)return null;let V;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(V=e=>{Ce(e,m,_)},t[20]=V):V=t[20];let U=V,W;t[21]!==g||t[22]!==v||t[23]!==p||t[24]!==k.description||t[25]!==S||t[26]!==c?(W=()=>{let e=Ee(g);c({goal:p.trim()||k.description,input:e,concurrency:v.trim()?Number(v):void 0,maxSubagents:S.trim()?Number(S):void 0})},t[21]=g,t[22]=v,t[23]=p,t[24]=k.description,t[25]=S,t[26]=c,t[27]=W):W=t[27];let G=W,K;t[28]===s?K=t[29]:(K=e=>!e&&s(),t[28]=s,t[29]=K);let ae;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,$.jsx)(w,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[30]=ae):ae=t[30];let oe;t[31]===k.description?oe=t[32]:(oe=(0,$.jsx)(de,{className:`mt-1 text-sm text-fg-muted`,children:k.description}),t[31]=k.description,t[32]=oe);let J;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,$.jsx)(y,{className:`size-3.5 shrink-0 text-fg-subtle`,"aria-hidden":!0}),t[33]=J):J=t[33];let se;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(se=(0,$.jsx)(ie,{className:`size-3.5 shrink-0 text-fg-subtle`,"aria-hidden":!0}),t[34]=se):se=t[34];let Y;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(Y=(0,$.jsx)(x,{className:`size-3.5 shrink-0 text-fg-subtle`,"aria-hidden":!0}),t[35]=Y):Y=t[35];let ce=j.map(e=>(0,$.jsxs)(`label`,{className:`block`,children:[(0,$.jsxs)(`span`,{className:`text-xs font-medium text-fg`,children:[At(l,e.labelKey),e.required?` *`:``]}),e.multiline?(0,$.jsx)(`textarea`,{value:g[e.key]??``,onChange:t=>_(n=>({...n,[e.key]:t.target.value})),placeholder:At(l,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:g[e.key]??``,onChange:t=>_(n=>({...n,[e.key]:t.target.value})),placeholder:At(l,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)),le;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(le=e=>m(e.target.value),t[36]=le):le=t[36];let fe;t[37]===Symbol.for(`react.memo_cache_sentinel`)?(fe=()=>D(Ot),t[37]=fe):fe=t[37];let pe=l.advancedSettings,me=T&&`rotate-180`,he;t[38]===me?he=t[39]:(he=q(`size-4 transition-transform`,me),t[38]=me,t[39]=he);let ge;t[40]===he?ge=t[41]:(ge=(0,$.jsx)(d,{className:he}),t[40]=he,t[41]=ge);let _e;t[42]!==l.cancelDialog||t[43]!==s||t[44]!==o?(_e=(0,$.jsx)(H,{variant:`secondary`,onClick:s,disabled:o,children:l.cancelDialog}),t[42]=l.cancelDialog,t[43]=s,t[44]=o,t[45]=_e):_e=t[45];let ve=o?l.starting:l.start,ye;t[46]!==o||t[47]!==G||t[48]!==ve?(ye=(0,$.jsx)(H,{variant:`primary`,onClick:G,disabled:o,children:ve}),t[46]=o,t[47]=G,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)(ue,{open:n,onOpenChange:K,children:(0,$.jsxs)(f,{children:[ae,(0,$.jsxs)(te,{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)(E,{className:`text-base font-semibold text-fg`,children:[l.startTitle,` · `,r.title]}),oe]}),(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:l.runPlanPreview}),(0,$.jsx)(`p`,{className:`mt-1 line-clamp-2 text-xs leading-5 text-fg-muted`,children:z})]}),(0,$.jsx)(`span`,{className:`shrink-0 rounded-full bg-accent-soft px-2 py-1 text-[11px] font-medium text-accent-fg`,children:l.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:[J,(0,$.jsx)(`span`,{children:X(l.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:[se,(0,$.jsx)(`span`,{children:Tt(r,l)})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl bg-surface-panel px-2.5 py-2`,children:[Y,(0,$.jsx)(`span`,{children:X(l.runLimitsSummary,{concurrency:I??r.defaults.concurrency,max:R??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)(u,{className:`size-3.5`,"aria-hidden":!0}),l.startPlanPhases]}),(0,$.jsx)(`div`,{className:`mt-2 flex flex-wrap items-center gap-1.5`,children:r.phases.map(kt)})]}):null]}),ce,P?(0,$.jsx)(wt,{examples:N,labels:l,onSelect:U}):null,(0,$.jsxs)(`label`,{className:`block`,children:[(0,$.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:l.goalLabel}),(0,$.jsx)(`textarea`,{value:p,onChange:le,placeholder:l.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`})]}),P?null:(0,$.jsx)(wt,{examples:N,labels:l,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:fe,children:[pe,ge]}),T?(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:v,onChange:e=>b(e.target.value),placeholder:X(l.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:S,onChange:e=>C(e.target.value),placeholder:X(l.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)(D,{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=q(`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`,S.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)(ae,{className:`size-4`,"aria-hidden":!0}),t[10]=h):h=t[10];let g;t[11]!==r.addWorkflow||t[12]!==m?(g=(0,$.jsxs)(H,{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`,v;t[14]===_?v=t[15]:(v=q(`size-4`,_),t[14]=_,t[15]=v);let y;t[16]===v?y=t[17]:(y=(0,$.jsx)(k,{className:v,"aria-hidden":!0}),t[16]=v,t[17]=y);let b;t[18]!==r.refresh||t[19]!==i||t[20]!==s||t[21]!==y?(b=(0,$.jsxs)(H,{variant:`secondary`,onClick:s,disabled:i,children:[y,r.refresh]}),t[18]=r.refresh,t[19]=i,t[20]=s,t[21]=y,t[22]=b):b=t[22];let x;return t[23]!==b||t[24]!==p||t[25]!==g?(x=(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[p,g,b]}),t[23]=b,t[24]=p,t[25]=g,t[26]=x):x=t[26],x}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:g,selectedRunLoading:_,selectedRunError:y,openRunDetails:b,closeRunDetails:x,openRunInChat:C,pickStartOpen:w,setPickStartOpen:T,startDefinition:E,setStartDefinition:D,detailDefinition:O,setDetailDefinition:k,manageOpen:A,setManageOpen:j,actionError:ee,actionFeedback:M,starting:te,savingWorkflow:N,loading:P,error:F,stats:I,submitStart:L,cancelRun:R,retryRun:z,saveCustomWorkflow:ne}=n,re=h(Lt),B=h(It),ie;t[0]!==B||t[1]!==o||t[2]!==re||t[3]!==n?(ie=()=>{if(!o){B();return}return re({startExtra:null,main:null,end:(0,$.jsx)(Nt,{vm:n})}),()=>B()},t[0]=B,t[1]=o,t[2]=re,t[3]=n,t[4]=ie):ie=t[4];let V;if(t[5]!==B||t[6]!==o||t[7]!==P||t[8]!==n?(V=[B,o,P,n,n.refreshAll,n.setManageOpen,n.setSearchQuery],t[5]=B,t[6]=o,t[7]=P,t[8]=n,t[9]=V):V=t[9],(0,Z.useLayoutEffect)(ie,V),!o){let e;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,$.jsx)(v,{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 U;t[18]===a.title?U=t[19]:(U=(0,$.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:a.title}),t[18]=a.title,t[19]=U);let W;t[20]===a.subtitleBoard?W=t[21]:(W=(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]=W);let K;t[22]!==U||t[23]!==W?(K=(0,$.jsxs)(`div`,{children:[U,W]}),t[22]=U,t[23]=W,t[24]=K):K=t[24];let ae=a.boardTriggerFilterAria,oe;t[25]===p?oe=t[26]:(oe=e=>p(e.target.value),t[25]=p,t[26]=oe);let J;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(J=q(`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`,S.focusRingPanel),t[27]=J):J=t[27];let se;t[28]===a.boardTriggerFilterAll?se=t[29]:(se=(0,$.jsx)(`option`,{value:`all`,children:a.boardTriggerFilterAll}),t[28]=a.boardTriggerFilterAll,t[29]=se);let Y;t[30]===a.boardTriggerFilterCron?Y=t[31]:(Y=(0,$.jsx)(`option`,{value:`cron`,children:a.boardTriggerFilterCron}),t[30]=a.boardTriggerFilterCron,t[31]=Y);let ce;t[32]===a.boardTriggerFilterWebui?ce=t[33]:(ce=(0,$.jsx)(`option`,{value:`webui`,children:a.boardTriggerFilterWebui}),t[32]=a.boardTriggerFilterWebui,t[33]=ce);let le;t[34]===a.boardTriggerFilterChat?le=t[35]:(le=(0,$.jsx)(`option`,{value:`chat`,children:a.boardTriggerFilterChat}),t[34]=a.boardTriggerFilterChat,t[35]=le);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 de;t[38]!==a.boardTriggerFilterAria||t[39]!==Y||t[40]!==ce||t[41]!==le||t[42]!==ue||t[43]!==oe||t[44]!==se||t[45]!==f?(de=(0,$.jsxs)(`select`,{value:f,"aria-label":ae,onChange:oe,className:J,children:[se,Y,ce,le,ue]}),t[38]=a.boardTriggerFilterAria,t[39]=Y,t[40]=ce,t[41]=le,t[42]=ue,t[43]=oe,t[44]=se,t[45]=f,t[46]=de):de=t[46];let fe=a.boardWorkflowFilterAria,pe;t[47]===d?pe=t[48]:(pe=e=>d(e.target.value),t[47]=d,t[48]=pe);let me;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(me=q(`h-9 min-w-40 rounded-lg border border-edge bg-surface-panel px-2.5 text-xs font-medium text-fg shadow-surface`,S.focusRingPanel),t[49]=me):me=t[49];let he;t[50]===a.boardWorkflowFilterAll?he=t[51]:(he=(0,$.jsx)(`option`,{value:``,children:a.boardWorkflowFilterAll}),t[50]=a.boardWorkflowFilterAll,t[51]=he);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]!==pe||t[56]!==he||t[57]!==ge||t[58]!==u?(_e=(0,$.jsxs)(`select`,{value:u,"aria-label":fe,onChange:pe,className:me,children:[he,ge]}),t[54]=a.boardWorkflowFilterAria,t[55]=pe,t[56]=he,t[57]=ge,t[58]=u,t[59]=_e):_e=t[59];let ve;t[60]===T?ve=t[61]:(ve=()=>T(!0),t[60]=T,t[61]=ve);let ye;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,$.jsx)(G,{className:`size-4`,"aria-hidden":!0}),t[62]=ye):ye=t[62];let be;t[63]!==a.boardStart||t[64]!==ve?(be=(0,$.jsxs)(H,{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]!==de||t[67]!==_e||t[68]!==be?(xe=(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[de,_e,be]}),t[66]=de,t[67]=_e,t[68]=be,t[69]=xe):xe=t[69];let Se;t[70]!==xe||t[71]!==K?(Se=(0,$.jsxs)(`header`,{className:`flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between`,children:[K,xe]}),t[70]=xe,t[71]=K,t[72]=Se):Se=t[72];let X;t[73]===M?X=t[74]:(X=M?(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:M}):null,t[73]=M,t[74]=X);let Ce;t[75]!==ee||t[76]!==F?(Ce=ee??F?(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:ee??F}):null,t[75]=ee,t[76]=F,t[77]=Ce):Ce=t[77];let we;t[78]!==r||t[79]!==I?(we=(0,$.jsx)(jt,{stats:I,language:r}),t[78]=r,t[79]=I,t[80]=we):we=t[80];let Te;t[81]===y?Te=t[82]:(Te=y?(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:y}):null,t[81]=y,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]===z?Oe=t[91]:(Oe=e=>void z(e),t[90]=z,t[91]=Oe);let ke;t[92]===T?ke=t[93]:(ke=()=>T(!0),t[92]=T,t[93]=ke);let Ae;t[94]!==r||t[95]!==P||t[96]!==i||t[97]!==b||t[98]!==C||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:P,onOpenRun:b,onOpenRunChat:C,onCancelRun:De,onRetryRun:Oe,onStart:ke})}),t[94]=r,t[95]=P,t[96]=i,t[97]=b,t[98]=C,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&&_,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]!==z||t[120]!==m?(Pe=()=>{m&&z(m)},t[119]=z,t[120]=m,t[121]=Pe):Pe=t[121];let Fe;t[122]!==x||t[123]!==r||t[124]!==i||t[125]!==g||t[126]!==Me||t[127]!==Ne||t[128]!==Pe?(Fe=(0,$.jsx)(vt,{view:g,loading:Me,language:r,localeTag:i,onCancel:Ne,onRetry:Pe,onClose:x}),t[122]=x,t[123]=r,t[124]=i,t[125]=g,t[126]=Me,t[127]=Ne,t[128]=Pe,t[129]=Fe):Fe=t[129];let Ie;t[130]===T?Ie=t[131]:(Ie=()=>T(!1),t[130]=T,t[131]=Ie);let Le;t[132]!==T||t[133]!==D?(Le=e=>{T(!1),D(e)},t[132]=T,t[133]=D,t[134]=Le):Le=t[134];let Re;t[135]!==s||t[136]!==r||t[137]!==w||t[138]!==Ie||t[139]!==Le?(Re=(0,$.jsx)(ut,{open:w,definitions:s,language:r,onClose:Ie,onPick:Le}),t[135]=s,t[136]=r,t[137]=w,t[138]=Ie,t[139]=Le,t[140]=Re):Re=t[140];let ze=E!=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]!==E||t[147]!==te||t[148]!==ze||t[149]!==Be||t[150]!==Ve?(He=(0,$.jsx)(Dt,{open:ze,definition:E,language:r,starting:te,onClose:Be,onStart:Ve}),t[145]=r,t[146]=E,t[147]=te,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]===j?qe=t[165]:(qe=()=>j(!1),t[164]=j,t[165]=qe);let Je;t[166]===ne?Je=t[167]:(Je=e=>void ne(e),t[166]=ne,t[167]=Je);let Ye;t[168]!==r||t[169]!==A||t[170]!==N||t[171]!==qe||t[172]!==Je?(Ye=(0,$.jsx)(it,{open:A,language:r,saving:N,onClose:qe,onSave:Je}),t[168]=r,t[169]=A,t[170]=N,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=c(e=>e.token),s=!!r,l=g(),[u,d]=O(),f=u.get(`q`)??``,p=u.get(`wf`)?.trim()??``,m=u.get(`trigger`)?.trim()||`all`,h=u.get(`run`)?.trim()??``,[_,v]=(0,Z.useState)(null),[y,b]=(0,Z.useState)(!1),[x,S]=(0,Z.useState)(null),[C,w]=(0,Z.useState)(!1),[T,E]=(0,Z.useState)(null),[D,k]=(0,Z.useState)(null),[A,ee]=(0,Z.useState)(!1),[M,te]=(0,Z.useState)(!1),N=o(s?[`workflow-definitions`,r]:null,R,{revalidateOnFocus:!1}),I=o(s?[`workflow-runs`,r]:null,()=>F(100),{revalidateOnFocus:!1,refreshInterval:e=>e?.length&&e.some(e=>e.status===`queued`||e.status===`running`)?3e3:0}),L=o(s?[`workflow-stats`,r,p]:null,()=>B(p),{revalidateOnFocus:!1});(0,Z.useEffect)(()=>{if(!D)return;let e=window.setTimeout(()=>k(null),4e3);return()=>window.clearTimeout(e)},[D]);let z=N.data??[],re=I.data??[],ie=h||null,V=W(ie),H=(0,Z.useMemo)(()=>Se(z,f,`all`,`all`),[z,f]),G=(0,Z.useCallback)(e=>{d(t=>{let n=new URLSearchParams(t);return e(n,t),n},{replace:!0})},[d]),K=(0,Z.useCallback)(e=>{G(t=>{let n=e.trim();n?t.set(`q`,n):t.delete(`q`)})},[G]),q=(0,Z.useCallback)(e=>{G(t=>{let n=e.trim();n?t.set(`wf`,n):t.delete(`wf`)})},[G]),ae=(0,Z.useCallback)(e=>{G(t=>{let n=e.trim();n&&n!==`all`?t.set(J,n):t.delete(J)})},[G]),oe=(0,Z.useCallback)(e=>{G(t=>{t.set(`run`,e.id)})},[G]),se=(0,Z.useCallback)(()=>{G(e=>{e.delete(`run`)})},[G]),ce=(0,Z.useCallback)(e=>{let t=je(e);t&&l(ve(t))},[l]);(0,Z.useEffect)(()=>{u.get(`tab`)&&G(e=>{e.delete(`tab`)})},[G,u]),(0,Z.useEffect)(()=>{let e=u.get(`def`),t=u.get(ne)===`1`;if(!e||!z.length)return;let n=z.find(t=>t.id===e||t.name===e);n&&(t?v(n):S(n),G(e=>{e.delete(`def`),e.delete(ne)}))},[z,G,u]),(0,Z.useEffect)(()=>{let e=()=>{I.mutate(),L.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)}},[I,L]);let le=(0,Z.useCallback)(()=>{N.mutate(),I.mutate(),L.mutate()},[N,I,L]),ue=(0,Z.useCallback)(async e=>{if(_){ee(!0),E(null);try{let n=await fe({definitionId:_.id,goal:e.goal,input:e.input,concurrency:e.concurrency,maxSubagents:e.maxSubagents});v(null),await I.mutate(),await L.mutate(),k(t.startSuccess),G(e=>{e.set(`run`,n.runId)})}catch(e){E(e instanceof Error?e.message:t.startFailed)}finally{ee(!1)}}},[t.startFailed,t.startSuccess,G,I,_,L]),de=(0,Z.useCallback)(async e=>{try{await P(e),await I.mutate(),await L.mutate()}catch(e){let n=e instanceof Error?e.message:t.cancelFailed;if(/not active|already finished/i.test(n)){await I.mutate(),await L.mutate();return}E(n)}},[t.cancelFailed,I,L]),pe=(0,Z.useCallback)(async e=>{try{let t=await j(e);await I.mutate(),await L.mutate(),G(e=>{e.set(`run`,t.runId)})}catch(e){E(e instanceof Error?e.message:t.retryFailed)}},[t.retryFailed,G,I,L]),me=(0,Z.useCallback)(async e=>{te(!0),E(null);try{await Y(e.name,e.script),w(!1),await N.mutate(),k(t.saveWorkflowSuccess)}catch(e){E(e instanceof Error?e.message:t.saveWorkflowFailed)}finally{te(!1)}},[N,t.saveWorkflowFailed,t.saveWorkflowSuccess]),he=(0,Z.useCallback)(async e=>{if(e.metadata.source===`user`&&window.confirm(X(t.deleteConfirm,{name:e.name}))){E(null);try{await U(e.id),await N.mutate(),k(t.deleteWorkflowSuccess)}catch(e){E(e instanceof Error?e.message:t.deleteWorkflowFailed)}}},[N,t]),ge=N.isLoading||I.isLoading,_e=N.error?.message??I.error?.message??null;return{language:e,localeTag:n,labels:t,hasToken:s,searchQuery:f,setSearchQuery:K,workflowFilterId:p,setWorkflowFilterId:q,triggerFilter:m,setTriggerFilter:ae,definitions:z,filteredDefinitions:H,runs:re,selectedRunId:ie,selectedRunView:V.view,selectedRunLoading:V.loading,selectedRunError:V.error?.message??null,openRunDetails:oe,closeRunDetails:se,openRunInChat:ce,pickStartOpen:y,setPickStartOpen:b,startDefinition:_,setStartDefinition:v,detailDefinition:x,setDetailDefinition:S,manageOpen:C,setManageOpen:w,actionError:T,actionFeedback:D,starting:A,savingWorkflow:M,loading:ge,error:_e,stats:L.data,refreshAll:le,submitStart:ue,cancelRun:de,retryRun:pe,saveCustomWorkflow:me,removeCustomWorkflow:he}}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,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,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
|