@xopcai/xopc 0.0.84 → 0.0.85
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/plugin.d.ts +2 -0
- package/dist/extensions/feishu/src/plugin.js +10 -0
- package/dist/extensions/feishu/src/plugin.js.map +1 -1
- package/dist/extensions/feishu/src/workflow-progress.d.ts +27 -0
- package/dist/extensions/feishu/src/workflow-progress.js +99 -0
- package/dist/extensions/feishu/src/workflow-progress.js.map +1 -0
- package/dist/extensions/telegram/src/plugin.d.ts +2 -0
- package/dist/extensions/telegram/src/plugin.js +11 -1
- package/dist/extensions/telegram/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/workflow-progress.d.ts +24 -0
- package/dist/extensions/telegram/src/workflow-progress.js +73 -0
- package/dist/extensions/telegram/src/workflow-progress.js.map +1 -0
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +158 -0
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/extensions/weixin/src/plugin.js +11 -1
- package/dist/extensions/weixin/src/plugin.js.map +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.d.ts +26 -0
- package/dist/extensions/weixin/src/workflow-progress.js +99 -0
- package/dist/extensions/weixin/src/workflow-progress.js.map +1 -0
- package/dist/gateway/static/root/assets/agents-D3_-kNlZ.js +222 -0
- package/dist/gateway/static/root/assets/apps-page-D7v7649T.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-nCaMb0a7.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-C1gZBcJV.js +8 -0
- package/dist/gateway/static/root/assets/createLucideIcon-DPHK1VkS.js +1 -0
- package/dist/gateway/static/root/assets/cron-api-CoYK0hlm.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-DeGo-Vjc.js +1 -0
- package/dist/gateway/static/root/assets/dist-BTWC-BTN.js +45 -0
- package/dist/gateway/static/root/assets/{dist-CqNMNhJM.js → dist-DaK4dsss.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-gf2L0kY_.js → extension-debug-page-BZngZWbO.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-D6JSyV27.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-8PZcmWI7.js +1 -0
- package/dist/gateway/static/root/assets/fetch-B2MYHbWg.js +1 -0
- package/dist/gateway/static/root/assets/{field-primitives-DTtlp-l8.js → field-primitives-Zzl22MvN.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-BtIcpG0O.js +1 -0
- package/dist/gateway/static/root/assets/index-D4vM3-P7.js +4700 -0
- package/dist/gateway/static/root/assets/index-ew_2L2We.css +1 -0
- package/dist/gateway/static/root/assets/logs-page-_d4UJ-qQ.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-5N4aF2Wk.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-D_tgb8r2.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-C18xBt4X.js +3 -0
- package/dist/gateway/static/root/assets/share-preview-page-D4EG_vM1.js +2 -0
- package/dist/gateway/static/root/assets/skills-page-sPAXhh8w.js +2 -0
- package/dist/gateway/static/root/assets/theme-store-DryYl3qD.js +1 -0
- package/dist/gateway/static/root/assets/url-BwNL6Rgk.js +3 -0
- package/dist/gateway/static/root/assets/utils-CYO9eTCM.js +1 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-Ds51havm.js +1 -0
- package/dist/gateway/static/root/index.html +7 -6
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +7 -7
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/context/workspace-seed.js +3 -3
- package/dist/src/agent/embedded/map-stream-events.js +6 -0
- package/dist/src/agent/embedded/map-stream-events.js.map +1 -1
- package/dist/src/agent/embedded/subscribe-session.js +24 -0
- package/dist/src/agent/embedded/subscribe-session.js.map +1 -1
- package/dist/src/agent/embedded/types.d.ts +19 -0
- package/dist/src/agent/goals/goal-locale.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/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/startup-context.d.ts +3 -0
- package/dist/src/agent/reply/startup-context.js +25 -2
- package/dist/src/agent/reply/startup-context.js.map +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.d.ts +1 -0
- package/dist/src/agent/service.js +10 -4
- package/dist/src/agent/service.js.map +1 -1
- 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 +3 -3
- 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/create-share-tool.d.ts +27 -0
- package/dist/src/agent/tools/create-share-tool.js +237 -0
- package/dist/src/agent/tools/create-share-tool.js.map +1 -0
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/factory.js +35 -1
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/index.d.ts +2 -0
- package/dist/src/agent/tools/index.js +3 -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.d.ts +41 -0
- package/dist/src/agent/tools/workflow-tool.js +271 -0
- package/dist/src/agent/tools/workflow-tool.js.map +1 -0
- package/dist/src/agent/tools/write.js +1 -1
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +9 -0
- package/dist/src/agent/workflow/builtins/audit-repo.js +115 -0
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -0
- package/dist/src/agent/workflow/builtins/index.d.ts +15 -0
- package/dist/src/agent/workflow/builtins/index.js +28 -0
- package/dist/src/agent/workflow/builtins/index.js.map +1 -0
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +9 -0
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +113 -0
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -0
- package/dist/src/agent/workflow/builtins/research.d.ts +9 -0
- package/dist/src/agent/workflow/builtins/research.js +129 -0
- package/dist/src/agent/workflow/builtins/research.js.map +1 -0
- package/dist/src/agent/workflow/catalog.d.ts +51 -0
- package/dist/src/agent/workflow/catalog.js +155 -0
- package/dist/src/agent/workflow/catalog.js.map +1 -0
- package/dist/src/agent/workflow/channel-capability.d.ts +76 -0
- package/dist/src/agent/workflow/channel-capability.js +1 -0
- package/dist/src/agent/workflow/index.d.ts +11 -0
- package/dist/src/agent/workflow/index.js +10 -0
- package/dist/src/agent/workflow/last-run-memory.d.ts +42 -0
- package/dist/src/agent/workflow/last-run-memory.js +60 -0
- package/dist/src/agent/workflow/last-run-memory.js.map +1 -0
- package/dist/src/agent/workflow/parser.d.ts +20 -0
- package/dist/src/agent/workflow/parser.js +137 -0
- package/dist/src/agent/workflow/parser.js.map +1 -0
- package/dist/src/agent/workflow/progress-broker.d.ts +80 -0
- package/dist/src/agent/workflow/progress-broker.js +263 -0
- package/dist/src/agent/workflow/progress-broker.js.map +1 -0
- package/dist/src/agent/workflow/runtime.d.ts +31 -0
- package/dist/src/agent/workflow/runtime.js +301 -0
- package/dist/src/agent/workflow/runtime.js.map +1 -0
- package/dist/src/agent/workflow/snapshot.d.ts +18 -0
- package/dist/src/agent/workflow/snapshot.js +144 -0
- package/dist/src/agent/workflow/snapshot.js.map +1 -0
- package/dist/src/agent/workflow/structured-output-tool.d.ts +33 -0
- package/dist/src/agent/workflow/structured-output-tool.js +58 -0
- package/dist/src/agent/workflow/structured-output-tool.js.map +1 -0
- package/dist/src/agent/workflow/subagent-runner.d.ts +42 -0
- package/dist/src/agent/workflow/subagent-runner.js +104 -0
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -0
- package/dist/src/agent/workflow/types.d.ts +137 -0
- package/dist/src/agent/workflow/types.js +1 -0
- 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 +4 -4
- 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/builtins/config.js +2 -2
- package/dist/src/chat-commands/builtins/model.js +40 -23
- package/dist/src/chat-commands/builtins/model.js.map +1 -1
- package/dist/src/chat-commands/builtins/system.js +30 -15
- package/dist/src/chat-commands/builtins/system.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.d.ts +18 -0
- package/dist/src/chat-commands/builtins/workflow.js +167 -0
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -0
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/chat-commands/format-output.d.ts +28 -0
- package/dist/src/chat-commands/format-output.js +45 -0
- package/dist/src/chat-commands/format-output.js.map +1 -0
- package/dist/src/chat-commands/index.d.ts +1 -0
- package/dist/src/chat-commands/index.js +3 -1
- package/dist/src/chat-commands/index.js.map +1 -1
- package/dist/src/cli/commands/config.js +2 -2
- 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 +1 -1
- 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/lifecycle.js +10 -4
- package/dist/src/cli/commands/gateway/lifecycle.js.map +1 -1
- package/dist/src/cli/commands/gateway/shared.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 +2 -2
- package/dist/src/cli/commands/tunnel.js +2 -2
- package/dist/src/cli/utils/gateway-client.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +5 -5
- 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/public-url.d.ts +28 -0
- package/dist/src/config/public-url.js +103 -0
- package/dist/src/config/public-url.js.map +1 -0
- package/dist/src/config/schema.d.ts +82 -0
- package/dist/src/config/schema.js +130 -1
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- 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 +3 -3
- package/dist/src/daemon/install-plan.js.map +1 -1
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +38 -1
- package/dist/src/daemon/schtasks.js.map +1 -1
- 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/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/hono/app.js +33 -2
- package/dist/src/gateway/hono/app.js.map +1 -1
- 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/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- 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/shares.js +631 -34
- package/dist/src/gateway/hono/routes/shares.js.map +1 -1
- package/dist/src/gateway/hono/routes/site-shares.d.ts +3 -0
- package/dist/src/gateway/hono/routes/site-shares.js +228 -0
- package/dist/src/gateway/hono/routes/site-shares.js.map +1 -0
- package/dist/src/gateway/hono/routes/tunnel.js +97 -8
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +5 -5
- package/dist/src/gateway/hono/sse.js +2 -2
- package/dist/src/gateway/host.d.ts +3 -1
- package/dist/src/gateway/host.js +3 -1
- package/dist/src/gateway/host.js.map +1 -1
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.d.ts +6 -0
- package/dist/src/gateway/ports.js +38 -2
- package/dist/src/gateway/ports.js.map +1 -1
- package/dist/src/gateway/public-url.d.ts +8 -0
- package/dist/src/gateway/public-url.js +10 -0
- package/dist/src/gateway/public-url.js.map +1 -0
- package/dist/src/gateway/security/origin-check.d.ts +9 -1
- package/dist/src/gateway/security/origin-check.js +4 -0
- package/dist/src/gateway/security/origin-check.js.map +1 -1
- package/dist/src/gateway/server.js +15 -0
- package/dist/src/gateway/server.js.map +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/run-gateway-agent.js +2 -2
- package/dist/src/gateway/service.js +3 -2
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/i18n/goals-bundle.js +1 -1
- package/dist/src/i18n/index.d.ts +1 -0
- package/dist/src/i18n/index.js +2 -1
- package/dist/src/i18n/locales/share-tool.en.js +15 -0
- package/dist/src/i18n/locales/share-tool.en.js.map +1 -0
- package/dist/src/i18n/locales/share-tool.zh.js +15 -0
- package/dist/src/i18n/locales/share-tool.zh.js.map +1 -0
- package/dist/src/i18n/share-tool-bundle.d.ts +20 -0
- package/dist/src/i18n/share-tool-bundle.js +56 -0
- package/dist/src/i18n/share-tool-bundle.js.map +1 -0
- package/dist/src/infra/gateway-processes.js +1 -0
- package/dist/src/infra/gateway-processes.js.map +1 -1
- package/dist/src/infra/restart.js +2 -2
- package/dist/src/infra/update-check.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/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/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/search-index-cache.js +1 -1
- package/dist/src/session/search-index.js +1 -1
- package/dist/src/session/session-title.js +3 -2
- package/dist/src/session/session-title.js.map +1 -1
- package/dist/src/session/store.js +5 -5
- package/dist/src/share/share-auto.d.ts +74 -0
- package/dist/src/share/share-auto.js +247 -0
- package/dist/src/share/share-auto.js.map +1 -0
- package/dist/src/share/share-config.js +63 -4
- package/dist/src/share/share-config.js.map +1 -1
- package/dist/src/share/share-landing.d.ts +28 -2
- package/dist/src/share/share-landing.js +155 -34
- package/dist/src/share/share-landing.js.map +1 -1
- package/dist/src/share/share-store.d.ts +48 -4
- package/dist/src/share/share-store.js +322 -51
- package/dist/src/share/share-store.js.map +1 -1
- package/dist/src/share/share-thumbnail.d.ts +35 -0
- package/dist/src/share/share-thumbnail.js +277 -0
- package/dist/src/share/share-thumbnail.js.map +1 -0
- package/dist/src/share/share-types.d.ts +68 -10
- package/dist/src/share/share-types.js +18 -1
- package/dist/src/share/share-types.js.map +1 -1
- package/dist/src/share/share-url.js +1 -1
- package/dist/src/share/share-zip.d.ts +35 -0
- package/dist/src/share/share-zip.js +303 -0
- package/dist/src/share/share-zip.js.map +1 -0
- package/dist/src/share/site-proxy.d.ts +35 -0
- package/dist/src/share/site-proxy.js +234 -0
- package/dist/src/share/site-proxy.js.map +1 -0
- package/dist/src/share/site-share-config.d.ts +11 -0
- package/dist/src/share/site-share-config.js +103 -0
- package/dist/src/share/site-share-config.js.map +1 -0
- package/dist/src/share/site-share-router.d.ts +23 -0
- package/dist/src/share/site-share-router.js +147 -0
- package/dist/src/share/site-share-router.js.map +1 -0
- package/dist/src/share/site-share-store.d.ts +53 -0
- package/dist/src/share/site-share-store.js +400 -0
- package/dist/src/share/site-share-store.js.map +1 -0
- package/dist/src/share/site-share-types.d.ts +103 -0
- package/dist/src/share/site-share-types.js +41 -0
- package/dist/src/share/site-share-types.js.map +1 -0
- package/dist/src/share/site-static-serve.d.ts +10 -0
- package/dist/src/share/site-static-serve.js +145 -0
- package/dist/src/share/site-static-serve.js.map +1 -0
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-commands.js +18 -0
- package/dist/src/tui/tui-commands.js.map +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-workflow-slash.d.ts +32 -0
- package/dist/src/tui/tui-workflow-slash.js +63 -0
- package/dist/src/tui/tui-workflow-slash.js.map +1 -0
- package/dist/src/tui/tui.js +2 -2
- package/dist/src/tunnel/enable-lan-pairing.js +1 -1
- 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/index.js +2 -2
- package/dist/src/tunnel/pair-context.d.ts +7 -1
- package/dist/src/tunnel/pair-context.js +25 -9
- package/dist/src/tunnel/pair-context.js.map +1 -1
- package/dist/src/tunnel/pair-url.d.ts +14 -1
- package/dist/src/tunnel/pair-url.js +14 -1
- package/dist/src/tunnel/pair-url.js.map +1 -1
- package/dist/src/tunnel/tunnel-service.js +2 -2
- 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/package.json +3 -2
- package/dist/gateway/static/root/assets/agents-tR-nNP04.js +0 -222
- package/dist/gateway/static/root/assets/apps-page-BDw6SP-d.js +0 -1
- package/dist/gateway/static/root/assets/button-KafIU8dx.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-DEFd-jj1.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-DI5FHdGe.js +0 -8
- package/dist/gateway/static/root/assets/cron-api-BSqY8LwW.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-D7lVDjcR.js +0 -1
- package/dist/gateway/static/root/assets/dist-C57OMHW8.js +0 -48
- package/dist/gateway/static/root/assets/extension-page-CQo2Xsmg.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CZf0WoZg.js +0 -1
- package/dist/gateway/static/root/assets/fetch-2iRFmd3n.js +0 -3
- package/dist/gateway/static/root/assets/heartbeat-config-api-B0drdQEJ.js +0 -1
- package/dist/gateway/static/root/assets/index-0Gt3TG4j.js +0 -4693
- package/dist/gateway/static/root/assets/index-BuFldCsB.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-DMuORLfC.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-_UO8g6NN.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-DkmHkknc.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-Cz8FoW_A.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-HrUOxF7H.js +0 -2
- package/dist/gateway/static/root/assets/theme-store-D01dJt95.js +0 -1
- package/dist/gateway/static/root/assets/utils-BFwcR6pL.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-JF8-aqc5.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","names":[],"sources":["../../../../../src/cli/commands/gateway/lifecycle.ts"],"sourcesContent":["/**\n * Gateway lifecycle orchestration — OpenClaw-aligned service + unmanaged fallback.\n */\n\nimport { isRestartEnabled } from '../../../config/commands.flags.js';\nimport { loadConfig } from '../../../config/index.js';\nimport { resolveConfigPath } from '../../../config/paths.js';\nimport { resolveGatewayService } from '../../../daemon/service.js';\nimport {\n findVerifiedGatewayListenerPidsOnPortSync,\n formatGatewayPidList,\n signalVerifiedGatewayPidSync,\n} from '../../../infra/gateway-processes.js';\nimport { authorizeGatewaySigusr1Restart } from '../../../infra/restart.js';\nimport {\n DEFAULT_RESTART_HEALTH_ATTEMPTS,\n DEFAULT_RESTART_HEALTH_DELAY_MS,\n renderGatewayPortHealthDiagnostics,\n waitForGatewayHealthyListener,\n} from './restart-health.js';\nimport {\n parsePortFromArgs,\n renderGatewayServiceStartHints,\n resolveGatewayPortFromConfig,\n} from './shared.js';\nimport {\n runServiceRestart,\n runServiceStop,\n type ServiceRecoveryResult,\n} from './lifecycle-core.js';\n\nconst POST_RESTART_HEALTH_ATTEMPTS = DEFAULT_RESTART_HEALTH_ATTEMPTS;\nconst POST_RESTART_HEALTH_DELAY_MS = DEFAULT_RESTART_HEALTH_DELAY_MS;\n\nasync function resolveGatewayLifecyclePort(service?: Awaited<ReturnType<typeof resolveGatewayService>>): Promise<number> {\n const resolvedService = service ?? (await resolveGatewayService());\n const command = await resolvedService.readCommand(process.env).catch(() => null);\n const portFromArgs = parsePortFromArgs(command?.programArguments);\n return portFromArgs ?? resolveGatewayPortFromConfig();\n}\n\nfunction resolveVerifiedGatewayListenerPids(port: number): number[] {\n return findVerifiedGatewayListenerPidsOnPortSync(port).filter(\n (pid): pid is number => Number.isFinite(pid) && pid > 0,\n );\n}\n\nasync function assertUnmanagedGatewayRestartEnabled(port: number): Promise<void> {\n const config = loadConfig(resolveConfigPath());\n if (!isRestartEnabled(config)) {\n throw new Error(\n 'Gateway restart is disabled in config (commands.restart=false); unmanaged SIGUSR1 restart would be ignored',\n );\n }\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 1000);\n const response = await fetch(`http://127.0.0.1:${port}/api/health`, {\n method: 'GET',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n if (!response.ok) {\n return;\n }\n } catch {\n // Best-effort probe; unmanaged restart may still target a starting gateway.\n }\n}\n\nasync function stopGatewayWithoutServiceManager(port: number): Promise<ServiceRecoveryResult | null> {\n const pids = resolveVerifiedGatewayListenerPids(port);\n if (pids.length === 0) {\n return null;\n }\n for (const pid of pids) {\n signalVerifiedGatewayPidSync(pid, 'SIGTERM');\n }\n return {\n result: 'stopped',\n message: `Gateway stop signal sent to unmanaged process${pids.length === 1 ? '' : 'es'} on port ${port}: ${formatGatewayPidList(pids)}.`,\n };\n}\n\nasync function restartGatewayWithoutServiceManager(port: number): Promise<ServiceRecoveryResult | null> {\n await assertUnmanagedGatewayRestartEnabled(port);\n const pids = resolveVerifiedGatewayListenerPids(port);\n if (pids.length === 0) {\n return null;\n }\n if (pids.length > 1) {\n throw new Error(\n `multiple gateway processes are listening on port ${port}: ${formatGatewayPidList(pids)}; use \"xopc gateway status\" before retrying restart`,\n );\n }\n authorizeGatewaySigusr1Restart();\n
|
|
1
|
+
{"version":3,"file":"lifecycle.js","names":[],"sources":["../../../../../src/cli/commands/gateway/lifecycle.ts"],"sourcesContent":["/**\n * Gateway lifecycle orchestration — OpenClaw-aligned service + unmanaged fallback.\n */\n\nimport { isRestartEnabled } from '../../../config/commands.flags.js';\nimport { loadConfig } from '../../../config/index.js';\nimport { resolveConfigPath } from '../../../config/paths.js';\nimport { resolveGatewayService } from '../../../daemon/service.js';\nimport {\n findVerifiedGatewayListenerPidsOnPortSync,\n formatGatewayPidList,\n signalVerifiedGatewayPidSync,\n} from '../../../infra/gateway-processes.js';\nimport { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from '../../../infra/restart.js';\nimport {\n DEFAULT_RESTART_HEALTH_ATTEMPTS,\n DEFAULT_RESTART_HEALTH_DELAY_MS,\n renderGatewayPortHealthDiagnostics,\n waitForGatewayHealthyListener,\n} from './restart-health.js';\nimport {\n parsePortFromArgs,\n renderGatewayServiceStartHints,\n resolveGatewayPortFromConfig,\n} from './shared.js';\nimport {\n runServiceRestart,\n runServiceStop,\n type ServiceRecoveryResult,\n} from './lifecycle-core.js';\n\nconst POST_RESTART_HEALTH_ATTEMPTS = DEFAULT_RESTART_HEALTH_ATTEMPTS;\nconst POST_RESTART_HEALTH_DELAY_MS = DEFAULT_RESTART_HEALTH_DELAY_MS;\n\nasync function resolveGatewayLifecyclePort(service?: Awaited<ReturnType<typeof resolveGatewayService>>): Promise<number> {\n const resolvedService = service ?? (await resolveGatewayService());\n const command = await resolvedService.readCommand(process.env).catch(() => null);\n const portFromArgs = parsePortFromArgs(command?.programArguments);\n return portFromArgs ?? resolveGatewayPortFromConfig();\n}\n\nfunction resolveVerifiedGatewayListenerPids(port: number): number[] {\n return findVerifiedGatewayListenerPidsOnPortSync(port).filter(\n (pid): pid is number => Number.isFinite(pid) && pid > 0,\n );\n}\n\nasync function assertUnmanagedGatewayRestartEnabled(port: number): Promise<void> {\n const config = loadConfig(resolveConfigPath());\n if (!isRestartEnabled(config)) {\n throw new Error(\n 'Gateway restart is disabled in config (commands.restart=false); unmanaged SIGUSR1 restart would be ignored',\n );\n }\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 1000);\n const response = await fetch(`http://127.0.0.1:${port}/api/health`, {\n method: 'GET',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n if (!response.ok) {\n return;\n }\n } catch {\n // Best-effort probe; unmanaged restart may still target a starting gateway.\n }\n}\n\nasync function stopGatewayWithoutServiceManager(port: number): Promise<ServiceRecoveryResult | null> {\n const pids = resolveVerifiedGatewayListenerPids(port);\n if (pids.length === 0) {\n return null;\n }\n for (const pid of pids) {\n signalVerifiedGatewayPidSync(pid, 'SIGTERM');\n }\n return {\n result: 'stopped',\n message: `Gateway stop signal sent to unmanaged process${pids.length === 1 ? '' : 'es'} on port ${port}: ${formatGatewayPidList(pids)}.`,\n };\n}\n\nasync function restartGatewayWithoutServiceManager(port: number): Promise<ServiceRecoveryResult | null> {\n await assertUnmanagedGatewayRestartEnabled(port);\n const pids = resolveVerifiedGatewayListenerPids(port);\n if (pids.length === 0) {\n return null;\n }\n if (pids.length > 1) {\n throw new Error(\n `multiple gateway processes are listening on port ${port}: ${formatGatewayPidList(pids)}; use \"xopc gateway status\" before retrying restart`,\n );\n }\n const targetPid = pids[0];\n\n if (process.platform === 'win32') {\n // Windows does not support SIGUSR1. Write a restart intent file and send\n // SIGTERM; the gateway run-loop's onSigterm handler checks for the intent\n // and treats it as a restart instead of a stop.\n writeGatewayRestartIntentSync({ targetPid });\n signalVerifiedGatewayPidSync(targetPid, 'SIGTERM');\n } else {\n authorizeGatewaySigusr1Restart();\n signalVerifiedGatewayPidSync(targetPid, 'SIGUSR1');\n }\n\n return {\n result: 'restarted',\n message: `Gateway restart signal sent to unmanaged process on port ${port}: ${targetPid}.`,\n };\n}\n\nexport async function runDaemonStop(options: { json?: boolean; disable?: boolean } = {}): Promise<void> {\n const service = await resolveGatewayService();\n let gatewayPortPromise: Promise<number> | undefined;\n\n await runServiceStop({\n service,\n opts: options,\n onNotLoaded: async () => {\n gatewayPortPromise ??= resolveGatewayLifecyclePort(service);\n return stopGatewayWithoutServiceManager(await gatewayPortPromise);\n },\n });\n}\n\nexport async function runDaemonRestart(options: {\n json?: boolean;\n wait?: string;\n} = {}): Promise<void> {\n const service = await resolveGatewayService();\n let restartedWithoutServiceManager = false;\n const restartPort = await resolveGatewayLifecyclePort(service);\n const restartHealthAttempts = POST_RESTART_HEALTH_ATTEMPTS;\n const restartWaitSeconds = Math.round(\n (restartHealthAttempts * POST_RESTART_HEALTH_DELAY_MS) / 1000,\n );\n\n await runServiceRestart({\n service,\n opts: options,\n renderStartHints: renderGatewayServiceStartHints,\n checkTokenDrift: true,\n onNotLoaded: async () => {\n const handled = await restartGatewayWithoutServiceManager(restartPort);\n if (handled) {\n restartedWithoutServiceManager = true;\n }\n return handled;\n },\n postRestartCheck: async ({ options: opts, fail }) => {\n if (!restartedWithoutServiceManager) {\n return;\n }\n const health = await waitForGatewayHealthyListener({\n port: restartPort,\n attempts: restartHealthAttempts,\n delayMs: POST_RESTART_HEALTH_DELAY_MS,\n });\n if (health.healthy) {\n return;\n }\n const diagnostics = renderGatewayPortHealthDiagnostics(health);\n fail(\n `Gateway restart timed out after ${restartWaitSeconds}s waiting for health checks.`,\n ['xopc gateway status', 'xopc doctor'],\n diagnostics,\n opts,\n );\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;YAM6D;AAyB7D,MAAM,+BAA+B;AACrC,MAAM,+BAAA;AAEN,eAAe,4BAA4B,SAA8E;AAIvH,QADqB,mBAAkB,OAFf,WAAY,MAAM,uBAAuB,EAC3B,YAAY,QAAQ,IAAI,CAAC,YAAY,KAAK,GAChC,iBAC7B,IAAI,8BAA8B;;AAGvD,SAAS,mCAAmC,MAAwB;AAClE,QAAO,0CAA0C,KAAK,CAAC,QACpD,QAAuB,OAAO,SAAS,IAAI,IAAI,MAAM,EACvD;;AAGH,eAAe,qCAAqC,MAA6B;AAE/E,KAAI,CAAC,iBADU,WAAW,mBAAmB,CACjB,CAAC,CAC3B,OAAM,IAAI,MACR,6GACD;AAGH,KAAI;EACF,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,UAAU,iBAAiB,WAAW,OAAO,EAAE,IAAK;EAC1D,MAAM,WAAW,MAAM,MAAM,oBAAoB,KAAK,cAAc;GAClE,QAAQ;GACR,QAAQ,WAAW;GACpB,CAAC;AACF,eAAa,QAAQ;AACrB,MAAI,CAAC,SAAS,GACZ;SAEI;;AAKV,eAAe,iCAAiC,MAAqD;CACnG,MAAM,OAAO,mCAAmC,KAAK;AACrD,KAAI,KAAK,WAAW,EAClB,QAAO;AAET,MAAK,MAAM,OAAO,KAChB,8BAA6B,KAAK,UAAU;AAE9C,QAAO;EACL,QAAQ;EACR,SAAS,gDAAgD,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,KAAK,IAAI,qBAAqB,KAAK,CAAC;EACvI;;AAGH,eAAe,oCAAoC,MAAqD;AACtG,OAAM,qCAAqC,KAAK;CAChD,MAAM,OAAO,mCAAmC,KAAK;AACrD,KAAI,KAAK,WAAW,EAClB,QAAO;AAET,KAAI,KAAK,SAAS,EAChB,OAAM,IAAI,MACR,oDAAoD,KAAK,IAAI,qBAAqB,KAAK,CAAC,qDACzF;CAEH,MAAM,YAAY,KAAK;AAEvB,KAAI,QAAQ,aAAa,SAAS;AAIhC,gCAA8B,EAAE,WAAW,CAAC;AAC5C,+BAA6B,WAAW,UAAU;QAC7C;AACL,kCAAgC;AAChC,+BAA6B,WAAW,UAAU;;AAGpD,QAAO;EACL,QAAQ;EACR,SAAS,4DAA4D,KAAK,IAAI,UAAU;EACzF;;AAGH,eAAsB,cAAc,UAAiD,EAAE,EAAiB;CACtG,MAAM,UAAU,MAAM,uBAAuB;CAC7C,IAAI;AAEJ,OAAM,eAAe;EACnB;EACA,MAAM;EACN,aAAa,YAAY;AACvB,0BAAuB,4BAA4B,QAAQ;AAC3D,UAAO,iCAAiC,MAAM,mBAAmB;;EAEpE,CAAC;;AAGJ,eAAsB,iBAAiB,UAGnC,EAAE,EAAiB;CACrB,MAAM,UAAU,MAAM,uBAAuB;CAC7C,IAAI,iCAAiC;CACrC,MAAM,cAAc,MAAM,4BAA4B,QAAQ;CAC9D,MAAM,wBAAwB;CAC9B,MAAM,qBAAqB,KAAK,MAC7B,wBAAwB,+BAAgC,IAC1D;AAED,OAAM,kBAAkB;EACtB;EACA,MAAM;EACN,kBAAkB;EAClB,iBAAiB;EACjB,aAAa,YAAY;GACvB,MAAM,UAAU,MAAM,oCAAoC,YAAY;AACtE,OAAI,QACF,kCAAiC;AAEnC,UAAO;;EAET,kBAAkB,OAAO,EAAE,SAAS,MAAM,WAAW;AACnD,OAAI,CAAC,+BACH;GAEF,MAAM,SAAS,MAAM,8BAA8B;IACjD,MAAM;IACN,UAAU;IACV,SAAS;IACV,CAAC;AACF,OAAI,OAAO,QACT;GAEF,MAAM,cAAc,mCAAmC,OAAO;AAC9D,QACE,mCAAmC,mBAAmB,+BACtD,CAAC,uBAAuB,cAAc,EACtC,aACA,KACD;;EAEJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { init_paths, resolveConfigPath } from "../../../config/paths.js";
|
|
2
2
|
import { loadConfig } from "../../../config/loader.js";
|
|
3
|
-
import "../../../config/index.js";
|
|
4
3
|
import { resolveGatewayLaunchAgentLabel, resolveGatewaySystemdServiceName, resolveGatewayWindowsTaskName } from "../../../daemon/constants.js";
|
|
4
|
+
import "../../../config/index.js";
|
|
5
5
|
//#region src/cli/commands/gateway/shared.ts
|
|
6
6
|
init_paths();
|
|
7
7
|
function parsePortFromArgs(programArguments) {
|
|
@@ -8,8 +8,8 @@ import { formatExamples, register } from "../registry.js";
|
|
|
8
8
|
import { getContextWithOpts } from "../context.js";
|
|
9
9
|
import "../../agent/image/index.js";
|
|
10
10
|
import { colors } from "../utils/colors.js";
|
|
11
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
12
11
|
import { join, resolve } from "node:path";
|
|
12
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
13
13
|
import { Command } from "commander";
|
|
14
14
|
//#region src/cli/commands/image.ts
|
|
15
15
|
init_loader();
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
|
|
2
|
-
import { createLogger } from "../../utils/logger/index.js";
|
|
3
|
-
import { init_logger } from "../../utils/logger.js";
|
|
4
1
|
import { resolveStateDir } from "../../config/paths-state.js";
|
|
5
2
|
import { resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
|
|
3
|
+
import { createLogger } from "../../utils/logger/index.js";
|
|
4
|
+
import { init_logger } from "../../utils/logger.js";
|
|
6
5
|
import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAgentProfileDir, resolveBinDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveExtensionsDir, resolveInboxDir, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogsDir, resolveSessionsDir, resolveSkillsDir, resolveToolsDir, resolveWorkspaceStateDir, resolveWorkspaceStatePath } from "../../config/paths.js";
|
|
6
|
+
import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
|
|
7
7
|
import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
|
|
8
8
|
import { formatExamples, register } from "../registry.js";
|
|
9
|
-
import { mkdir, writeFile } from "fs/promises";
|
|
10
9
|
import { join } from "path";
|
|
11
10
|
import { existsSync } from "fs";
|
|
11
|
+
import { mkdir, writeFile } from "fs/promises";
|
|
12
12
|
import { Command } from "commander";
|
|
13
13
|
//#region src/cli/commands/init.ts
|
|
14
14
|
init_write_file_atomic();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
1
2
|
import { init_agent_scope, resolveAgentProfileDir, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
2
3
|
import { WORKSPACE_FILES, init_paths } from "../../config/paths.js";
|
|
3
|
-
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
4
4
|
import { saveConfig } from "../../config/loader.js";
|
|
5
|
+
import { resolveGatewayLocalClientHost } from "../../config/gateway-bind.js";
|
|
5
6
|
import { isWeixinOnboardConfigured } from "../../../extensions/weixin/src/adapters/onboard-cli.js";
|
|
6
7
|
import { formatExamples, register } from "../registry.js";
|
|
7
8
|
import "../../config/index.js";
|
|
8
|
-
import { resolveGatewayLocalClientHost } from "../../config/gateway-bind.js";
|
|
9
9
|
import { seedMainAgentProfileMarkdown } from "../../agent/context/workspace-seed.js";
|
|
10
10
|
import { colors } from "../utils/colors.js";
|
|
11
11
|
import { initWorkspace } from "../utils/init-workspace.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { loadConfig, saveConfig } from "../../config/loader.js";
|
|
4
|
+
import { resolveGatewayEffectiveHost } from "../../config/gateway-bind.js";
|
|
5
|
+
import { loadTunnelState } from "../../tunnel/tunnel-state.js";
|
|
4
6
|
import { formatExamples, register } from "../registry.js";
|
|
5
7
|
import "../../config/index.js";
|
|
6
|
-
import { resolveGatewayEffectiveHost } from "../../config/gateway-bind.js";
|
|
7
8
|
import { TUNNEL_RISK_SUMMARY_LINES, TunnelConsentError, assertTunnelMayStart, hasValidTunnelConsent } from "../../tunnel/consent.js";
|
|
8
9
|
import { resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret } from "../../tunnel/env.js";
|
|
9
10
|
import { ensureFrpcBinary } from "../../tunnel/frpc-binary.js";
|
|
10
|
-
import { loadTunnelState } from "../../tunnel/tunnel-state.js";
|
|
11
11
|
import { getTunnelService } from "../../tunnel/tunnel-service.js";
|
|
12
12
|
import { resolveFrpSubdomainHost } from "../../tunnel/frp-subdomain-host.js";
|
|
13
13
|
import { applyTunnelConsentToConfig, mergeTunnelConfigPatch, setTunnelEnabledInConfig } from "../../tunnel/tunnel-config.js";
|
|
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { init_paths, resolveConfigPath } from "../../config/paths.js";
|
|
4
4
|
import { loadConfig } from "../../config/loader.js";
|
|
5
|
-
import "../../config/index.js";
|
|
6
5
|
import { resolveGatewayEffectiveHost } from "../../config/gateway-bind.js";
|
|
6
|
+
import "../../config/index.js";
|
|
7
7
|
import { assertSecureGatewayHttpUrl } from "../../gateway/ws-security.js";
|
|
8
8
|
import { addGatewayClientOptions, parseGatewayClientOptions } from "./gateway-client-options.js";
|
|
9
9
|
//#region src/cli/utils/gateway-client.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
2
2
|
import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
|
|
3
|
-
import { randomBytes } from "node:crypto";
|
|
4
|
-
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
5
3
|
import { dirname, join } from "node:path";
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
5
|
+
import { randomBytes } from "node:crypto";
|
|
6
6
|
//#region src/cli/utils/init-workspace-core.ts
|
|
7
7
|
init_schema();
|
|
8
8
|
init_loader();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { init_agent_scope, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
2
1
|
import { getAgentDefaultModelRef, init_schema } from "./schema.js";
|
|
2
|
+
import { init_agent_scope, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
3
3
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
4
4
|
import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
5
5
|
//#region src/config/agent-profile.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getTailnetIPv4Sync } from "../infra/tailscale.js";
|
|
2
2
|
import { isLoopbackHost } from "../gateway/host.js";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
3
|
import net from "node:net";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
5
|
//#region src/config/gateway-bind.ts
|
|
6
6
|
function resolveGatewayBindMode(cfg, bindOverride) {
|
|
7
7
|
if (bindOverride) return bindOverride;
|
package/dist/src/config/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
2
|
+
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
3
|
+
import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
4
|
+
import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
|
|
1
5
|
import { ENV_VARS, resolveHomeDir, resolveStateDir } from "./paths-state.js";
|
|
2
6
|
import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
|
|
3
7
|
import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
4
8
|
import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir, resolveSessionsDir as resolveSessionsDir$1 } from "../agent/agent-scope.js";
|
|
9
|
+
import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
5
10
|
import { resolveSessionFilePath, resolveSessionTranscriptPathInDir } from "../session/parity/transcript-paths.js";
|
|
6
11
|
import { FILENAMES, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSessionTranscriptPath, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsMapPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
7
|
-
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
8
|
-
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
9
|
-
import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
10
12
|
import { init_loader, loadConfig, registerChannelConfigValidator, saveConfig } from "./loader.js";
|
|
11
|
-
import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
|
|
12
|
-
import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
13
13
|
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
14
14
|
import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
15
15
|
import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ConfigSchema, init_schema } from "./schema.js";
|
|
3
3
|
import { createLogger } from "../utils/logger/index.js";
|
|
4
4
|
import { init_logger } from "../utils/logger.js";
|
|
5
5
|
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
6
|
-
import {
|
|
6
|
+
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
7
7
|
import { dirname } from "path";
|
|
8
8
|
import { existsSync, mkdirSync, promises, readFileSync } from "fs";
|
|
9
9
|
import { config } from "dotenv";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
|
|
3
2
|
import { init_paths, resolveModelsJsonPath } from "./paths.js";
|
|
4
|
-
import {
|
|
3
|
+
import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
|
|
5
4
|
import { z } from "zod";
|
|
5
|
+
import { existsSync, readFileSync } from "fs";
|
|
6
6
|
//#region src/config/models-json.ts
|
|
7
7
|
/**
|
|
8
8
|
* Models.json configuration types and schema
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { join } from "node:path";
|
|
3
2
|
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
4
|
//#region src/config/paths-state.ts
|
|
5
5
|
function resolveHomeDir(env = process.env) {
|
|
6
6
|
return env[ENV_VARS.HOME] || homedir();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { ENV_VARS, init_paths_state, resolveHomeDir } from "./paths-state.js";
|
|
1
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { ENV_VARS, init_paths_state, resolveHomeDir } from "./paths-state.js";
|
|
4
|
-
import { mkdir, readdir, rm, stat } from "fs/promises";
|
|
5
4
|
import { join } from "path";
|
|
6
5
|
import { existsSync } from "fs";
|
|
6
|
+
import { mkdir, readdir, rm, stat } from "fs/promises";
|
|
7
7
|
//#region src/config/profile.ts
|
|
8
8
|
init_logger();
|
|
9
9
|
init_paths_state();
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation + normalization helpers for `gateway.publicUrl`.
|
|
3
|
+
*
|
|
4
|
+
* The publicUrl is a user-deployed reverse-proxy origin (e.g.
|
|
5
|
+
* `https://gateway.example.com`). We accept it as both a config field and as
|
|
6
|
+
* a one-off candidate (auto-detected from `window.location.origin`), so the
|
|
7
|
+
* validator must run in identical shape on both surfaces.
|
|
8
|
+
*/
|
|
9
|
+
export type PublicUrlIssueCode = 'invalid_url' | 'invalid_scheme' | 'has_userinfo' | 'has_path' | 'has_query_or_fragment' | 'requires_https';
|
|
10
|
+
export type PublicUrlValidation = {
|
|
11
|
+
ok: true;
|
|
12
|
+
url: string;
|
|
13
|
+
protocol: 'http:' | 'https:';
|
|
14
|
+
hostname: string;
|
|
15
|
+
} | {
|
|
16
|
+
ok: false;
|
|
17
|
+
code: PublicUrlIssueCode;
|
|
18
|
+
message: string;
|
|
19
|
+
};
|
|
20
|
+
/** Lowercase RFC1918 / loopback / link-local / `.local` host match. */
|
|
21
|
+
export declare function isPrivateOrLocalHostname(hostname: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Validate a candidate publicUrl. Strict by design — we reject anything that
|
|
24
|
+
* looks ambiguous so the QR payload is always a clean origin.
|
|
25
|
+
*/
|
|
26
|
+
export declare function validatePublicUrl(raw: string): PublicUrlValidation;
|
|
27
|
+
/** Convenience: return the normalized origin or `null` when invalid. */
|
|
28
|
+
export declare function normalizePublicUrlOrNull(raw: string | null | undefined): string | null;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import net from "node:net";
|
|
3
|
+
//#region src/config/public-url.ts
|
|
4
|
+
/**
|
|
5
|
+
* Validation + normalization helpers for `gateway.publicUrl`.
|
|
6
|
+
*
|
|
7
|
+
* The publicUrl is a user-deployed reverse-proxy origin (e.g.
|
|
8
|
+
* `https://gateway.example.com`). We accept it as both a config field and as
|
|
9
|
+
* a one-off candidate (auto-detected from `window.location.origin`), so the
|
|
10
|
+
* validator must run in identical shape on both surfaces.
|
|
11
|
+
*/
|
|
12
|
+
/** Lowercase RFC1918 / loopback / link-local / `.local` host match. */
|
|
13
|
+
function isPrivateOrLocalHostname(hostname) {
|
|
14
|
+
const host = hostname.trim().toLowerCase();
|
|
15
|
+
if (!host) return false;
|
|
16
|
+
if (host === "localhost" || host.endsWith(".localhost")) return true;
|
|
17
|
+
if (host.endsWith(".local")) return true;
|
|
18
|
+
if (host === "::1" || host === "[::1]") return true;
|
|
19
|
+
if (host.startsWith("fe80:") || host.startsWith("[fe80:")) return true;
|
|
20
|
+
if (host.startsWith("fc") || host.startsWith("fd")) {
|
|
21
|
+
if (net.isIPv6(host.replace(/^\[|\]$/g, ""))) return true;
|
|
22
|
+
}
|
|
23
|
+
if (net.isIPv4(host)) {
|
|
24
|
+
const parts = host.split(".").map((p) => Number.parseInt(p, 10));
|
|
25
|
+
if (parts.length !== 4 || parts.some((n) => !Number.isFinite(n))) return false;
|
|
26
|
+
const [a, b] = parts;
|
|
27
|
+
if (a === 10) return true;
|
|
28
|
+
if (a === 127) return true;
|
|
29
|
+
if (a === 169 && b === 254) return true;
|
|
30
|
+
if (a === 172 && b >= 16 && b <= 31) return true;
|
|
31
|
+
if (a === 192 && b === 168) return true;
|
|
32
|
+
if (a === 100 && b >= 64 && b <= 127) return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validate a candidate publicUrl. Strict by design — we reject anything that
|
|
38
|
+
* looks ambiguous so the QR payload is always a clean origin.
|
|
39
|
+
*/
|
|
40
|
+
function validatePublicUrl(raw) {
|
|
41
|
+
const trimmed = (raw ?? "").trim();
|
|
42
|
+
if (!trimmed) return {
|
|
43
|
+
ok: false,
|
|
44
|
+
code: "invalid_url",
|
|
45
|
+
message: "publicUrl is empty"
|
|
46
|
+
};
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = new URL(trimmed);
|
|
50
|
+
} catch {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
code: "invalid_url",
|
|
54
|
+
message: "publicUrl is not a valid URL"
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const protocol = parsed.protocol.toLowerCase();
|
|
58
|
+
if (protocol !== "https:" && protocol !== "http:") return {
|
|
59
|
+
ok: false,
|
|
60
|
+
code: "invalid_scheme",
|
|
61
|
+
message: "publicUrl must use http(s)"
|
|
62
|
+
};
|
|
63
|
+
if (parsed.username || parsed.password) return {
|
|
64
|
+
ok: false,
|
|
65
|
+
code: "has_userinfo",
|
|
66
|
+
message: "publicUrl must not contain userinfo"
|
|
67
|
+
};
|
|
68
|
+
const path = parsed.pathname;
|
|
69
|
+
if (path && path !== "/" && path !== "") return {
|
|
70
|
+
ok: false,
|
|
71
|
+
code: "has_path",
|
|
72
|
+
message: "publicUrl must not contain a path"
|
|
73
|
+
};
|
|
74
|
+
if (parsed.search || parsed.hash) return {
|
|
75
|
+
ok: false,
|
|
76
|
+
code: "has_query_or_fragment",
|
|
77
|
+
message: "publicUrl must not contain query or fragment"
|
|
78
|
+
};
|
|
79
|
+
const hostname = parsed.hostname.toLowerCase();
|
|
80
|
+
if (protocol === "http:" && !isPrivateOrLocalHostname(hostname)) return {
|
|
81
|
+
ok: false,
|
|
82
|
+
code: "requires_https",
|
|
83
|
+
message: "publicUrl must use https for public hostnames (http is only allowed for RFC1918 / .local)"
|
|
84
|
+
};
|
|
85
|
+
return {
|
|
86
|
+
ok: true,
|
|
87
|
+
url: `${protocol}//${parsed.host.toLowerCase()}`,
|
|
88
|
+
protocol,
|
|
89
|
+
hostname
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** Convenience: return the normalized origin or `null` when invalid. */
|
|
93
|
+
function normalizePublicUrlOrNull(raw) {
|
|
94
|
+
if (!raw) return null;
|
|
95
|
+
const result = validatePublicUrl(raw);
|
|
96
|
+
return result.ok ? result.url : null;
|
|
97
|
+
}
|
|
98
|
+
var init_public_url = __esmMin((() => {}));
|
|
99
|
+
//#endregion
|
|
100
|
+
init_public_url();
|
|
101
|
+
export { init_public_url, isPrivateOrLocalHostname, normalizePublicUrlOrNull, validatePublicUrl };
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=public-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-url.js","names":[],"sources":["../../../src/config/public-url.ts"],"sourcesContent":["/**\n * Validation + normalization helpers for `gateway.publicUrl`.\n *\n * The publicUrl is a user-deployed reverse-proxy origin (e.g.\n * `https://gateway.example.com`). We accept it as both a config field and as\n * a one-off candidate (auto-detected from `window.location.origin`), so the\n * validator must run in identical shape on both surfaces.\n */\n\nimport net from 'node:net';\n\nexport type PublicUrlIssueCode =\n | 'invalid_url'\n | 'invalid_scheme'\n | 'has_userinfo'\n | 'has_path'\n | 'has_query_or_fragment'\n | 'requires_https';\n\nexport type PublicUrlValidation =\n | { ok: true; url: string; protocol: 'http:' | 'https:'; hostname: string }\n | { ok: false; code: PublicUrlIssueCode; message: string };\n\n/** Lowercase RFC1918 / loopback / link-local / `.local` host match. */\nexport function isPrivateOrLocalHostname(hostname: string): boolean {\n const host = hostname.trim().toLowerCase();\n if (!host) return false;\n if (host === 'localhost' || host.endsWith('.localhost')) return true;\n if (host.endsWith('.local')) return true;\n // IPv6 loopback / link-local\n if (host === '::1' || host === '[::1]') return true;\n if (host.startsWith('fe80:') || host.startsWith('[fe80:')) return true;\n if (host.startsWith('fc') || host.startsWith('fd')) {\n // fc00::/7 ULA\n if (net.isIPv6(host.replace(/^\\[|\\]$/g, ''))) return true;\n }\n // IPv4 private + loopback ranges\n if (net.isIPv4(host)) {\n const parts = host.split('.').map((p) => Number.parseInt(p, 10));\n if (parts.length !== 4 || parts.some((n) => !Number.isFinite(n))) return false;\n const [a, b] = parts;\n if (a === 10) return true;\n if (a === 127) return true;\n if (a === 169 && b === 254) return true; // link-local\n if (a === 172 && b >= 16 && b <= 31) return true;\n if (a === 192 && b === 168) return true;\n if (a === 100 && b >= 64 && b <= 127) return true; // CGNAT — common for tailnet / mesh\n }\n return false;\n}\n\n/**\n * Validate a candidate publicUrl. Strict by design — we reject anything that\n * looks ambiguous so the QR payload is always a clean origin.\n */\nexport function validatePublicUrl(raw: string): PublicUrlValidation {\n const trimmed = (raw ?? '').trim();\n if (!trimmed) {\n return { ok: false, code: 'invalid_url', message: 'publicUrl is empty' };\n }\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n return { ok: false, code: 'invalid_url', message: 'publicUrl is not a valid URL' };\n }\n const protocol = parsed.protocol.toLowerCase();\n if (protocol !== 'https:' && protocol !== 'http:') {\n return { ok: false, code: 'invalid_scheme', message: 'publicUrl must use http(s)' };\n }\n if (parsed.username || parsed.password) {\n return { ok: false, code: 'has_userinfo', message: 'publicUrl must not contain userinfo' };\n }\n // pathname may be \"/\" (trailing slash) but nothing else\n const path = parsed.pathname;\n if (path && path !== '/' && path !== '') {\n return { ok: false, code: 'has_path', message: 'publicUrl must not contain a path' };\n }\n if (parsed.search || parsed.hash) {\n return {\n ok: false,\n code: 'has_query_or_fragment',\n message: 'publicUrl must not contain query or fragment',\n };\n }\n const hostname = parsed.hostname.toLowerCase();\n if (protocol === 'http:' && !isPrivateOrLocalHostname(hostname)) {\n return {\n ok: false,\n code: 'requires_https',\n message:\n 'publicUrl must use https for public hostnames (http is only allowed for RFC1918 / .local)',\n };\n }\n // Normalize: drop trailing slash, lowercase host.\n const normalized = `${protocol}//${parsed.host.toLowerCase()}`;\n return {\n ok: true,\n url: normalized,\n protocol: protocol as 'http:' | 'https:',\n hostname,\n };\n}\n\n/** Convenience: return the normalized origin or `null` when invalid. */\nexport function normalizePublicUrlOrNull(raw: string | null | undefined): string | null {\n if (!raw) return null;\n const result = validatePublicUrl(raw);\n return result.ok ? result.url : null;\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,SAAgB,yBAAyB,UAA2B;CAClE,MAAM,OAAO,SAAS,MAAM,CAAC,aAAa;AAC1C,KAAI,CAAC,KAAM,QAAO;AAClB,KAAI,SAAS,eAAe,KAAK,SAAS,aAAa,CAAE,QAAO;AAChE,KAAI,KAAK,SAAS,SAAS,CAAE,QAAO;AAEpC,KAAI,SAAS,SAAS,SAAS,QAAS,QAAO;AAC/C,KAAI,KAAK,WAAW,QAAQ,IAAI,KAAK,WAAW,SAAS,CAAE,QAAO;AAClE,KAAI,KAAK,WAAW,KAAK,IAAI,KAAK,WAAW,KAAK;MAE5C,IAAI,OAAO,KAAK,QAAQ,YAAY,GAAG,CAAC,CAAE,QAAO;;AAGvD,KAAI,IAAI,OAAO,KAAK,EAAE;EACpB,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,OAAO,SAAS,GAAG,GAAG,CAAC;AAChE,MAAI,MAAM,WAAW,KAAK,MAAM,MAAM,MAAM,CAAC,OAAO,SAAS,EAAE,CAAC,CAAE,QAAO;EACzE,MAAM,CAAC,GAAG,KAAK;AACf,MAAI,MAAM,GAAI,QAAO;AACrB,MAAI,MAAM,IAAK,QAAO;AACtB,MAAI,MAAM,OAAO,MAAM,IAAK,QAAO;AACnC,MAAI,MAAM,OAAO,KAAK,MAAM,KAAK,GAAI,QAAO;AAC5C,MAAI,MAAM,OAAO,MAAM,IAAK,QAAO;AACnC,MAAI,MAAM,OAAO,KAAK,MAAM,KAAK,IAAK,QAAO;;AAE/C,QAAO;;;;;;AAOT,SAAgB,kBAAkB,KAAkC;CAClE,MAAM,WAAW,OAAO,IAAI,MAAM;AAClC,KAAI,CAAC,QACH,QAAO;EAAE,IAAI;EAAO,MAAM;EAAe,SAAS;EAAsB;CAE1E,IAAI;AACJ,KAAI;AACF,WAAS,IAAI,IAAI,QAAQ;SACnB;AACN,SAAO;GAAE,IAAI;GAAO,MAAM;GAAe,SAAS;GAAgC;;CAEpF,MAAM,WAAW,OAAO,SAAS,aAAa;AAC9C,KAAI,aAAa,YAAY,aAAa,QACxC,QAAO;EAAE,IAAI;EAAO,MAAM;EAAkB,SAAS;EAA8B;AAErF,KAAI,OAAO,YAAY,OAAO,SAC5B,QAAO;EAAE,IAAI;EAAO,MAAM;EAAgB,SAAS;EAAuC;CAG5F,MAAM,OAAO,OAAO;AACpB,KAAI,QAAQ,SAAS,OAAO,SAAS,GACnC,QAAO;EAAE,IAAI;EAAO,MAAM;EAAY,SAAS;EAAqC;AAEtF,KAAI,OAAO,UAAU,OAAO,KAC1B,QAAO;EACL,IAAI;EACJ,MAAM;EACN,SAAS;EACV;CAEH,MAAM,WAAW,OAAO,SAAS,aAAa;AAC9C,KAAI,aAAa,WAAW,CAAC,yBAAyB,SAAS,CAC7D,QAAO;EACL,IAAI;EACJ,MAAM;EACN,SACE;EACH;AAIH,QAAO;EACL,IAAI;EACJ,KAAK,GAHe,SAAS,IAAI,OAAO,KAAK,aAAa;EAIhD;EACV;EACD;;;AAIH,SAAgB,yBAAyB,KAA+C;AACtF,KAAI,CAAC,IAAK,QAAO;CACjB,MAAM,SAAS,kBAAkB,IAAI;AACrC,QAAO,OAAO,KAAK,OAAO,MAAM"}
|
|
@@ -220,6 +220,12 @@ export declare const AgentDefaultsSchema: z.ZodObject<{
|
|
|
220
220
|
executeCode: z.ZodOptional<z.ZodObject<{
|
|
221
221
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
222
222
|
}, z.core.$strip>>;
|
|
223
|
+
workflow: z.ZodOptional<z.ZodObject<{
|
|
224
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
225
|
+
maxConcurrency: z.ZodDefault<z.ZodNumber>;
|
|
226
|
+
maxSubagents: z.ZodDefault<z.ZodNumber>;
|
|
227
|
+
defaultTimeoutSec: z.ZodDefault<z.ZodNumber>;
|
|
228
|
+
}, z.core.$strip>>;
|
|
223
229
|
systemPromptOverride: z.ZodOptional<z.ZodString>;
|
|
224
230
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
225
231
|
tools: z.ZodOptional<z.ZodObject<{
|
|
@@ -470,6 +476,12 @@ export declare const AgentsConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
470
476
|
executeCode: z.ZodOptional<z.ZodObject<{
|
|
471
477
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
472
478
|
}, z.core.$strip>>;
|
|
479
|
+
workflow: z.ZodOptional<z.ZodObject<{
|
|
480
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
481
|
+
maxConcurrency: z.ZodDefault<z.ZodNumber>;
|
|
482
|
+
maxSubagents: z.ZodDefault<z.ZodNumber>;
|
|
483
|
+
defaultTimeoutSec: z.ZodDefault<z.ZodNumber>;
|
|
484
|
+
}, z.core.$strip>>;
|
|
473
485
|
systemPromptOverride: z.ZodOptional<z.ZodString>;
|
|
474
486
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
475
487
|
tools: z.ZodOptional<z.ZodObject<{
|
|
@@ -965,6 +977,7 @@ export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
965
977
|
}, z.core.$strip>>>;
|
|
966
978
|
maxSseConnections: z.ZodOptional<z.ZodNumber>;
|
|
967
979
|
corsOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
980
|
+
publicUrl: z.ZodOptional<z.ZodString>;
|
|
968
981
|
dangerouslyAllowHostHeaderOriginFallback: z.ZodOptional<z.ZodBoolean>;
|
|
969
982
|
trustedProxies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
970
983
|
allowRealIpFallback: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -987,6 +1000,37 @@ export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
987
1000
|
maxActiveShares: z.ZodDefault<z.ZodNumber>;
|
|
988
1001
|
maxFileSize: z.ZodDefault<z.ZodNumber>;
|
|
989
1002
|
inlinePreviewMimes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
1003
|
+
directory: z.ZodDefault<z.ZodObject<{
|
|
1004
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1005
|
+
maxFolderSize: z.ZodDefault<z.ZodNumber>;
|
|
1006
|
+
maxFileCount: z.ZodDefault<z.ZodNumber>;
|
|
1007
|
+
maxDepth: z.ZodDefault<z.ZodNumber>;
|
|
1008
|
+
listingCacheMs: z.ZodDefault<z.ZodNumber>;
|
|
1009
|
+
zipConcurrency: z.ZodDefault<z.ZodNumber>;
|
|
1010
|
+
}, z.core.$strip>>;
|
|
1011
|
+
}, z.core.$strip>>;
|
|
1012
|
+
siteShare: z.ZodOptional<z.ZodObject<{
|
|
1013
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1014
|
+
publicHostSuffix: z.ZodDefault<z.ZodString>;
|
|
1015
|
+
defaultTtlMs: z.ZodDefault<z.ZodNumber>;
|
|
1016
|
+
maxTtlMs: z.ZodDefault<z.ZodNumber>;
|
|
1017
|
+
maxActiveSites: z.ZodDefault<z.ZodNumber>;
|
|
1018
|
+
static: z.ZodDefault<z.ZodObject<{
|
|
1019
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1020
|
+
maxRootDirSize: z.ZodDefault<z.ZodNumber>;
|
|
1021
|
+
maxFileCount: z.ZodDefault<z.ZodNumber>;
|
|
1022
|
+
rewriteEnabledByDefault: z.ZodDefault<z.ZodBoolean>;
|
|
1023
|
+
}, z.core.$strip>>;
|
|
1024
|
+
proxy: z.ZodDefault<z.ZodObject<{
|
|
1025
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1026
|
+
allowedUpstreamHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
1027
|
+
allowedUpstreamPorts: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
|
|
1028
|
+
forwardWebSocket: z.ZodDefault<z.ZodBoolean>;
|
|
1029
|
+
bodySizeLimit: z.ZodDefault<z.ZodNumber>;
|
|
1030
|
+
requestTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
1031
|
+
wsIdleTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
1032
|
+
rewriteSetCookiePath: z.ZodDefault<z.ZodBoolean>;
|
|
1033
|
+
}, z.core.$strip>>;
|
|
990
1034
|
}, z.core.$strip>>;
|
|
991
1035
|
}, z.core.$strip>>;
|
|
992
1036
|
export declare const CronConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
@@ -1709,6 +1753,12 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
1709
1753
|
executeCode: z.ZodOptional<z.ZodObject<{
|
|
1710
1754
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
1711
1755
|
}, z.core.$strip>>;
|
|
1756
|
+
workflow: z.ZodOptional<z.ZodObject<{
|
|
1757
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1758
|
+
maxConcurrency: z.ZodDefault<z.ZodNumber>;
|
|
1759
|
+
maxSubagents: z.ZodDefault<z.ZodNumber>;
|
|
1760
|
+
defaultTimeoutSec: z.ZodDefault<z.ZodNumber>;
|
|
1761
|
+
}, z.core.$strip>>;
|
|
1712
1762
|
systemPromptOverride: z.ZodOptional<z.ZodString>;
|
|
1713
1763
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1714
1764
|
tools: z.ZodOptional<z.ZodObject<{
|
|
@@ -1871,6 +1921,7 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
1871
1921
|
}, z.core.$strip>>>;
|
|
1872
1922
|
maxSseConnections: z.ZodOptional<z.ZodNumber>;
|
|
1873
1923
|
corsOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1924
|
+
publicUrl: z.ZodOptional<z.ZodString>;
|
|
1874
1925
|
dangerouslyAllowHostHeaderOriginFallback: z.ZodOptional<z.ZodBoolean>;
|
|
1875
1926
|
trustedProxies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1876
1927
|
allowRealIpFallback: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -1893,6 +1944,37 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
1893
1944
|
maxActiveShares: z.ZodDefault<z.ZodNumber>;
|
|
1894
1945
|
maxFileSize: z.ZodDefault<z.ZodNumber>;
|
|
1895
1946
|
inlinePreviewMimes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
1947
|
+
directory: z.ZodDefault<z.ZodObject<{
|
|
1948
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1949
|
+
maxFolderSize: z.ZodDefault<z.ZodNumber>;
|
|
1950
|
+
maxFileCount: z.ZodDefault<z.ZodNumber>;
|
|
1951
|
+
maxDepth: z.ZodDefault<z.ZodNumber>;
|
|
1952
|
+
listingCacheMs: z.ZodDefault<z.ZodNumber>;
|
|
1953
|
+
zipConcurrency: z.ZodDefault<z.ZodNumber>;
|
|
1954
|
+
}, z.core.$strip>>;
|
|
1955
|
+
}, z.core.$strip>>;
|
|
1956
|
+
siteShare: z.ZodOptional<z.ZodObject<{
|
|
1957
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1958
|
+
publicHostSuffix: z.ZodDefault<z.ZodString>;
|
|
1959
|
+
defaultTtlMs: z.ZodDefault<z.ZodNumber>;
|
|
1960
|
+
maxTtlMs: z.ZodDefault<z.ZodNumber>;
|
|
1961
|
+
maxActiveSites: z.ZodDefault<z.ZodNumber>;
|
|
1962
|
+
static: z.ZodDefault<z.ZodObject<{
|
|
1963
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1964
|
+
maxRootDirSize: z.ZodDefault<z.ZodNumber>;
|
|
1965
|
+
maxFileCount: z.ZodDefault<z.ZodNumber>;
|
|
1966
|
+
rewriteEnabledByDefault: z.ZodDefault<z.ZodBoolean>;
|
|
1967
|
+
}, z.core.$strip>>;
|
|
1968
|
+
proxy: z.ZodDefault<z.ZodObject<{
|
|
1969
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1970
|
+
allowedUpstreamHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
1971
|
+
allowedUpstreamPorts: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
|
|
1972
|
+
forwardWebSocket: z.ZodDefault<z.ZodBoolean>;
|
|
1973
|
+
bodySizeLimit: z.ZodDefault<z.ZodNumber>;
|
|
1974
|
+
requestTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
1975
|
+
wsIdleTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
1976
|
+
rewriteSetCookiePath: z.ZodDefault<z.ZodBoolean>;
|
|
1977
|
+
}, z.core.$strip>>;
|
|
1896
1978
|
}, z.core.$strip>>;
|
|
1897
1979
|
}, z.core.$strip>>;
|
|
1898
1980
|
tunnel: z.ZodOptional<z.ZodDefault<z.ZodObject<{
|