@xopcai/xopc 0.0.98 → 0.0.100
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/account-manager.d.ts +3 -3
- package/dist/extensions/telegram/src/account-manager.js +8 -8
- package/dist/extensions/telegram/src/account-manager.js.map +1 -1
- package/dist/extensions/telegram/src/actions/message-actions.d.ts +4 -0
- package/dist/extensions/telegram/src/actions/message-actions.js +71 -0
- package/dist/extensions/telegram/src/actions/message-actions.js.map +1 -0
- package/dist/extensions/telegram/src/adapters/config-adapter.js +9 -1
- package/dist/extensions/telegram/src/adapters/config-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/config-surface.js +1 -1
- package/dist/extensions/telegram/src/adapters/config-surface.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/outbound-adapter.d.ts +2 -1
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js +18 -4
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/security-adapter.js +2 -1
- package/dist/extensions/telegram/src/adapters/security-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +90 -6
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/types.d.ts +9 -1
- package/dist/extensions/telegram/src/api-root.d.ts +4 -0
- package/dist/extensions/telegram/src/api-root.js +42 -0
- package/dist/extensions/telegram/src/api-root.js.map +1 -0
- package/dist/extensions/telegram/src/approval-delivery.d.ts +9 -0
- package/dist/extensions/telegram/src/approval-delivery.js +36 -0
- package/dist/extensions/telegram/src/approval-delivery.js.map +1 -0
- package/dist/extensions/telegram/src/approval-store.d.ts +25 -0
- package/dist/extensions/telegram/src/approval-store.js +61 -0
- package/dist/extensions/telegram/src/approval-store.js.map +1 -0
- package/dist/extensions/telegram/src/config-schema.d.ts +185 -35
- package/dist/extensions/telegram/src/config-schema.js +67 -45
- package/dist/extensions/telegram/src/config-schema.js.map +1 -1
- package/dist/extensions/telegram/src/conversation-id.d.ts +6 -0
- package/dist/extensions/telegram/src/conversation-id.js +18 -0
- package/dist/extensions/telegram/src/conversation-id.js.map +1 -0
- package/dist/extensions/telegram/src/doctor.d.ts +5 -0
- package/dist/extensions/telegram/src/doctor.js +80 -0
- package/dist/extensions/telegram/src/doctor.js.map +1 -0
- package/dist/extensions/telegram/src/exec-approval-handler.d.ts +7 -0
- package/dist/extensions/telegram/src/exec-approval-handler.js +36 -0
- package/dist/extensions/telegram/src/exec-approval-handler.js.map +1 -0
- package/dist/extensions/telegram/src/exec-approvals.d.ts +8 -0
- package/dist/extensions/telegram/src/exec-approvals.js +20 -0
- package/dist/extensions/telegram/src/exec-approvals.js.map +1 -0
- package/dist/extensions/telegram/src/focus-handler.d.ts +12 -0
- package/dist/extensions/telegram/src/focus-handler.js +55 -0
- package/dist/extensions/telegram/src/focus-handler.js.map +1 -0
- package/dist/extensions/telegram/src/group-config-resolver.d.ts +12 -0
- package/dist/extensions/telegram/src/group-config-resolver.js +17 -0
- package/dist/extensions/telegram/src/group-config-resolver.js.map +1 -0
- package/dist/extensions/telegram/src/inbound-coalescer.d.ts +15 -0
- package/dist/extensions/telegram/src/inbound-coalescer.js +107 -0
- package/dist/extensions/telegram/src/inbound-coalescer.js.map +1 -0
- package/dist/extensions/telegram/src/inbound-processor.d.ts +1 -0
- package/dist/extensions/telegram/src/inbound-processor.js +41 -4
- package/dist/extensions/telegram/src/inbound-processor.js.map +1 -1
- package/dist/extensions/telegram/src/network-errors.d.ts +2 -0
- package/dist/extensions/telegram/src/network-errors.js +23 -0
- package/dist/extensions/telegram/src/network-errors.js.map +1 -0
- package/dist/extensions/telegram/src/plugin.d.ts +11 -0
- package/dist/extensions/telegram/src/plugin.js +192 -58
- package/dist/extensions/telegram/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/src/polling-session.d.ts +17 -0
- package/dist/extensions/telegram/src/polling-session.js +112 -0
- package/dist/extensions/telegram/src/polling-session.js.map +1 -0
- package/dist/extensions/telegram/src/proxy-fetch.d.ts +2 -0
- package/dist/extensions/telegram/src/proxy-fetch.js +14 -0
- package/dist/extensions/telegram/src/proxy-fetch.js.map +1 -0
- package/dist/extensions/telegram/src/reactions.d.ts +14 -0
- package/dist/extensions/telegram/src/reactions.js +48 -0
- package/dist/extensions/telegram/src/reactions.js.map +1 -0
- package/dist/extensions/telegram/src/reply-params.d.ts +15 -0
- package/dist/extensions/telegram/src/reply-params.js +28 -0
- package/dist/extensions/telegram/src/reply-params.js.map +1 -0
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/startup-errors.d.ts +3 -0
- package/dist/extensions/telegram/src/startup-errors.js +27 -0
- package/dist/extensions/telegram/src/startup-errors.js.map +1 -0
- package/dist/extensions/telegram/src/telegram-actions.d.ts +25 -0
- package/dist/extensions/telegram/src/telegram-actions.js +65 -0
- package/dist/extensions/telegram/src/telegram-actions.js.map +1 -0
- package/dist/extensions/telegram/src/thread-bindings.d.ts +15 -0
- package/dist/extensions/telegram/src/thread-bindings.js +22 -0
- package/dist/extensions/telegram/src/thread-bindings.js.map +1 -0
- package/dist/extensions/telegram/src/token-resolver.d.ts +8 -0
- package/dist/extensions/telegram/src/token-resolver.js +34 -0
- package/dist/extensions/telegram/src/token-resolver.js.map +1 -0
- package/dist/extensions/telegram/src/update-offset-store.d.ts +9 -0
- package/dist/extensions/telegram/src/update-offset-store.js +66 -0
- package/dist/extensions/telegram/src/update-offset-store.js.map +1 -0
- 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-NI7FFR-h.js → agents-C5jtBK-H.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BB4iSCrJ.js → apps-page-smJl-qf_.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-CH6KgFK6.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CV70xvY7.js +8 -0
- package/dist/gateway/static/root/assets/{cron-api-1dHoVFEA.js → cron-api-CgBO8B7I.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-CVX6FPfb.js → cron-page-Be0cW1cR.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-BZnl4G4p.js → dist-P8HRGUuh.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DwQp_4Qv.js → extension-debug-page-BowuycYu.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-l9crxSvM.js → extension-page-27-Zpv8O.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CXzLbq9B.js → extension-settings-page-DDFa_rIq.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-BLLOP2CM.js → fetch-drJUxxKP.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-BRnEyxSl.js → field-primitives-BWLssxEb.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-eMo0k381.js → heartbeat-config-api-BVuYNYT_.js} +1 -1
- package/dist/gateway/static/root/assets/index-CRDAmr3W.js +4840 -0
- package/dist/gateway/static/root/assets/index-DjNDHzwG.css +1 -0
- package/dist/gateway/static/root/assets/{logs-page-BvTEevBZ.js → logs-page-BDX8IrDQ.js} +1 -1
- package/dist/gateway/static/root/assets/{note-detail-page-Dl3jhcWg.js → note-detail-page-BmQ9KeiA.js} +1 -1
- package/dist/gateway/static/root/assets/{note-time-D8Tlyotb.js → note-time-14I9Sgqh.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-BWILOitx.js → notes-page-BMfP0FFf.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-3EJRugZg.js → sessions-page-C3scyChq.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-advanced-gate-CZ5wlM_q.js → settings-advanced-gate-2ODuCjHP.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-C6RYGnKK.js → settings-form-section-DUoGKAiW.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-0egNvAMr.js → settings-page-CttAfOWV.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-BVJtaSoK.js → share-preview-page-B77xqiiI.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-DVnRQ5Mo.js → skills-page-B_bAZGzB.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-e2q2yjs4.js → theme-store-BgCPrmxU.js} +1 -1
- package/dist/gateway/static/root/assets/url-q28QhI7l.js +3 -0
- package/dist/gateway/static/root/assets/{utils-Bl-94YzI.js → utils-CCGejlcX.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-B53JA8qW.js → voice-api-key-field-DZzzihcY.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-page.utils-ontUT7yL.js → workflow-page.utils-D5RMAmT4.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-Bz7YRTdp.js → workflows-page-DEYpC6Bv.js} +1 -1
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +4 -0
- package/dist/src/agent/agent-manager.js +75 -11
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/child-agent-factory.d.ts +1 -0
- package/dist/src/agent/child-agent-factory.js +13 -10
- package/dist/src/agent/child-agent-factory.js.map +1 -1
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/context/workspace-state.js +1 -1
- package/dist/src/agent/embedded/run-for-session.d.ts +1 -0
- package/dist/src/agent/embedded/run-for-session.js +1 -0
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/embedded/run-turn.js +1 -17
- package/dist/src/agent/embedded/run-turn.js.map +1 -1
- package/dist/src/agent/embedded/session-runner.js +3 -1
- package/dist/src/agent/embedded/session-runner.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.d.ts +1 -0
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -0
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
- 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/inbound/attachment-pipeline.d.ts +37 -0
- package/dist/src/agent/inbound/attachment-pipeline.js +169 -0
- package/dist/src/agent/inbound/attachment-pipeline.js.map +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +3 -5
- package/dist/src/agent/inbound/turn-dispatcher.js +1 -2
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
- 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-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- 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/index.d.ts +2 -0
- package/dist/src/agent/memory/index.js +2 -1
- package/dist/src/agent/memory/memory-flush.d.ts +27 -0
- package/dist/src/agent/memory/memory-flush.js +124 -0
- package/dist/src/agent/memory/memory-flush.js.map +1 -0
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/messaging/outbound-coordinator.js +2 -1
- package/dist/src/agent/messaging/outbound-coordinator.js.map +1 -1
- package/dist/src/agent/messaging/stream-manager.d.ts +2 -0
- package/dist/src/agent/messaging/stream-manager.js +3 -0
- package/dist/src/agent/messaging/stream-manager.js.map +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +40 -107
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/prompt/contribution.d.ts +9 -0
- package/dist/src/agent/prompt/contribution.js +1 -0
- package/dist/src/agent/prompt/safety.js +0 -10
- package/dist/src/agent/prompt/safety.js.map +1 -1
- package/dist/src/agent/prompt/sanitize-for-prompt.d.ts +6 -0
- package/dist/src/agent/prompt/sanitize-for-prompt.js +13 -0
- package/dist/src/agent/prompt/sanitize-for-prompt.js.map +1 -0
- package/dist/src/agent/prompt/sections/behavior.d.ts +5 -0
- package/dist/src/agent/prompt/sections/behavior.js +50 -0
- package/dist/src/agent/prompt/sections/behavior.js.map +1 -0
- package/dist/src/agent/prompt/sections/memory-skills.d.ts +9 -0
- package/dist/src/agent/prompt/sections/memory-skills.js +59 -0
- package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -0
- package/dist/src/agent/prompt/sections/messaging-runtime.d.ts +16 -0
- package/dist/src/agent/prompt/sections/messaging-runtime.js +69 -0
- package/dist/src/agent/prompt/sections/messaging-runtime.js.map +1 -0
- package/dist/src/agent/prompt/sections/project-context.d.ts +16 -0
- package/dist/src/agent/prompt/sections/project-context.js +58 -0
- package/dist/src/agent/prompt/sections/project-context.js.map +1 -0
- package/dist/src/agent/prompt/sections/tooling.d.ts +5 -0
- package/dist/src/agent/prompt/sections/tooling.js +119 -0
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -0
- package/dist/src/agent/prompt/sections/workspace-runtime.d.ts +11 -0
- package/dist/src/agent/prompt/sections/workspace-runtime.js +32 -0
- package/dist/src/agent/prompt/sections/workspace-runtime.js.map +1 -0
- package/dist/src/agent/prompt/service-prompt-builder.d.ts +13 -0
- package/dist/src/agent/prompt/service-prompt-builder.js +56 -15
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/subagent-context.d.ts +15 -0
- package/dist/src/agent/prompt/subagent-context.js +68 -0
- package/dist/src/agent/prompt/subagent-context.js.map +1 -0
- package/dist/src/agent/prompt/system-prompt-params.d.ts +53 -0
- package/dist/src/agent/prompt/system-prompt-params.js +74 -0
- package/dist/src/agent/prompt/system-prompt-params.js.map +1 -0
- package/dist/src/agent/prompt/system-prompt.d.ts +22 -11
- package/dist/src/agent/prompt/system-prompt.js +79 -193
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/prompt/types.d.ts +3 -0
- 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.d.ts +5 -21
- package/dist/src/agent/service/build-direct-message-content.js +11 -64
- package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +7 -0
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -3
- package/dist/src/agent/service/process-direct-one-shot.js +22 -17
- package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +6 -20
- package/dist/src/agent/service/process-direct-streaming.js +39 -40
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/webchat-tts.d.ts +4 -9
- package/dist/src/agent/service/webchat-tts.js +9 -20
- package/dist/src/agent/service/webchat-tts.js.map +1 -1
- package/dist/src/agent/service.d.ts +8 -19
- package/dist/src/agent/service.js +57 -15
- 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 +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 +3 -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 +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/media-read-tool.d.ts +2 -0
- package/dist/src/agent/tools/media-read-tool.js +89 -0
- package/dist/src/agent/tools/media-read-tool.js.map +1 -0
- 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/attachment-classifiers.d.ts +8 -0
- package/dist/src/channels/attachments/attachment-classifiers.js +11 -0
- package/dist/src/channels/attachments/attachment-classifiers.js.map +1 -0
- package/dist/src/channels/attachments/inbound-persist.d.ts +13 -34
- package/dist/src/channels/attachments/inbound-persist.js +34 -102
- package/dist/src/channels/attachments/inbound-persist.js.map +1 -1
- package/dist/src/channels/attachments/inbound-types.d.ts +13 -0
- package/dist/src/channels/attachments/inbound-types.js +30 -0
- package/dist/src/channels/attachments/inbound-types.js.map +1 -0
- package/dist/src/channels/attachments/outbound-tts-persist.d.ts +3 -12
- package/dist/src/channels/attachments/outbound-tts-persist.js +28 -48
- package/dist/src/channels/attachments/outbound-tts-persist.js.map +1 -1
- package/dist/src/channels/attachments/voice-stt-webchat.d.ts +3 -3
- package/dist/src/channels/attachments/voice-stt-webchat.js +8 -14
- package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
- package/dist/src/channels/channel-domain.d.ts +30 -2
- package/dist/src/channels/exec-approval-runtime.d.ts +29 -0
- package/dist/src/channels/exec-approval-runtime.js +30 -0
- package/dist/src/channels/exec-approval-runtime.js.map +1 -0
- package/dist/src/channels/index.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/channels/plugin-types.d.ts +1 -0
- package/dist/src/channels/transport-types.d.ts +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/commands/channels.js +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/database-schema.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/database-schema.js +62 -0
- package/dist/src/cli/commands/doctor/checks/database-schema.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.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/doctor/flow.js +2 -0
- package/dist/src/cli/commands/doctor/flow.js.map +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 +5 -60
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.js +1 -1
- package/dist/src/cli/commands/setup.js +6 -5
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -3
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- 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.js +7 -7
- 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/paths.d.ts +0 -13
- package/dist/src/config/paths.js +1 -20
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/profile.js +2 -2
- package/dist/src/config/rules.js +1 -1
- package/dist/src/config/schema.d.ts +24 -0
- package/dist/src/config/schema.js +33 -2
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/cron/executor.js +4 -4
- package/dist/src/cron/persistence.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/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- 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/channels.js +3 -3
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +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/media.d.ts +3 -0
- package/dist/src/gateway/hono/routes/media.js +50 -0
- package/dist/src/gateway/hono/routes/media.js.map +1 -0
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +6 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +3 -89
- package/dist/src/gateway/hono/routes/workspace.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/sessions-api.js +3 -0
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/gateway/service.js +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/heartbeat/index.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/media/index.d.ts +5 -0
- package/dist/src/media/index.js +5 -0
- package/dist/src/media/media-reference.d.ts +23 -0
- package/dist/src/media/media-reference.js +34 -0
- package/dist/src/media/media-reference.js.map +1 -0
- package/dist/src/media/paths.d.ts +5 -0
- package/dist/src/media/paths.js +20 -0
- package/dist/src/media/paths.js.map +1 -0
- package/dist/src/media/session-references.d.ts +8 -0
- package/dist/src/media/session-references.js +45 -0
- package/dist/src/media/session-references.js.map +1 -0
- package/dist/src/media/store.d.ts +19 -0
- package/dist/src/media/store.js +131 -0
- package/dist/src/media/store.js.map +1 -0
- package/dist/src/media/types.d.ts +34 -0
- package/dist/src/media/types.js +1 -0
- package/dist/src/media/uri.d.ts +15 -0
- package/dist/src/media/uri.js +51 -0
- package/dist/src/media/uri.js.map +1 -0
- package/dist/src/notes/store.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/init-session-turn.js +2 -2
- package/dist/src/session/resolve-session.js +3 -3
- package/dist/src/session/session-title.js +8 -5
- package/dist/src/session/session-title.js.map +1 -1
- package/dist/src/session/store.js +3 -3
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/types.d.ts +12 -7
- package/dist/src/session/types.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/storage/sqlite/connection.js +2 -2
- package/dist/src/storage/sqlite/index.d.ts +4 -1
- package/dist/src/storage/sqlite/index.js +6 -2
- package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
- package/dist/src/storage/sqlite/migrations/002_add_flush_columns.sql +3 -0
- package/dist/src/storage/sqlite/migrations/discover.d.ts +4 -0
- package/dist/src/storage/sqlite/migrations/discover.js +38 -0
- package/dist/src/storage/sqlite/migrations/discover.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/discover.ts +52 -0
- package/dist/src/storage/sqlite/migrations/errors.d.ts +11 -0
- package/dist/src/storage/sqlite/migrations/errors.js +27 -0
- package/dist/src/storage/sqlite/migrations/errors.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/errors.ts +32 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +22 -0
- package/dist/src/storage/sqlite/migrations/runner.js +97 -0
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/runner.ts +153 -0
- package/dist/src/storage/sqlite/migrations/types.d.ts +12 -0
- package/dist/src/storage/sqlite/migrations/types.js +1 -0
- package/dist/src/storage/sqlite/migrations/types.ts +13 -0
- package/dist/src/storage/sqlite/row-mappers.d.ts +4 -0
- package/dist/src/storage/sqlite/row-mappers.js +4 -0
- package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
- package/dist/src/storage/sqlite/schema-version.d.ts +6 -0
- package/dist/src/storage/sqlite/schema-version.js +29 -0
- package/dist/src/storage/sqlite/schema-version.js.map +1 -0
- package/dist/src/storage/sqlite/schema.d.ts +5 -3
- package/dist/src/storage/sqlite/schema.js +25 -29
- package/dist/src/storage/sqlite/schema.js.map +1 -1
- package/dist/src/storage/sqlite/schema.sql +2 -0
- package/dist/src/storage/sqlite/session-metadata.js +1 -0
- package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
- package/dist/src/storage/sqlite/session-repository.js +7 -3
- package/dist/src/storage/sqlite/session-repository.js.map +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 +1 -1
- package/dist/gateway/static/root/assets/channels-settings-BmN5udFV.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-LXGc1lXo.js +0 -8
- package/dist/gateway/static/root/assets/index-BJDmBCSl.css +0 -1
- package/dist/gateway/static/root/assets/index-DsmZjtSc.js +0 -4707
- package/dist/gateway/static/root/assets/url-DpFBIyN9.js +0 -3
- package/dist/src/cli/commands/onboard/workspace.d.ts +0 -14
- package/dist/src/cli/commands/onboard/workspace.js +0 -33
- package/dist/src/cli/commands/onboard/workspace.js.map +0 -1
- package/dist/src/cli/utils/workspace.d.ts +0 -35
- package/dist/src/cli/utils/workspace.js +0 -72
- package/dist/src/cli/utils/workspace.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { DEFAULT_AGENT_ID, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
|
|
2
|
-
import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
|
|
3
1
|
import { init_localized_text, normalizeLocalizedText, resolveLocalizedText } from "../config/localized-text.js";
|
|
2
|
+
import { DEFAULT_AGENT_ID, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
|
|
4
3
|
import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
|
|
4
|
+
import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
|
|
5
5
|
import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES } from "../agent/context/workspace.js";
|
|
6
6
|
import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
|
|
7
7
|
import { applyAgentConfig, findAgentEntryIndex, pruneAgentConfig, removeAgentDirsFromDisk } from "../commands/agents.config.js";
|
|
8
8
|
import { GATEWAY_BUILTIN_TOOL_IDS } from "./agent-builtin-tools.js";
|
|
9
9
|
import { seedAgentProfileMarkdownFiles } from "../agent/context/workspace-seed.js";
|
|
10
|
-
import { cp, mkdir, readFile, readdir, realpath, stat, unlink, writeFile } from "node:fs/promises";
|
|
11
10
|
import { join, resolve } from "node:path";
|
|
11
|
+
import { cp, mkdir, readFile, readdir, realpath, stat, unlink, writeFile } from "node:fs/promises";
|
|
12
12
|
//#region src/gateway/agents-admin.ts
|
|
13
13
|
/**
|
|
14
14
|
* Gateway REST helpers for multi-agent management.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
|
|
2
2
|
import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
|
|
3
|
-
import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
|
|
4
3
|
import { extractProfileAgentId } from "../config/agent-profile.js";
|
|
4
|
+
import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
|
|
5
5
|
import { isBareProfileMarkdownFileName, resolveProfileMarkdownPathIfBareName } from "../agent/tools/tool-paths.js";
|
|
6
6
|
import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
|
|
7
|
-
import { stat } from "node:fs/promises";
|
|
8
7
|
import { basename, isAbsolute, resolve } from "node:path";
|
|
8
|
+
import { stat } from "node:fs/promises";
|
|
9
9
|
//#region src/gateway/file-path-classifier.ts
|
|
10
10
|
init_agent_scope();
|
|
11
11
|
init_paths();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { shouldSilence, stripHeartbeatToken } from "../../heartbeat/tokens.js";
|
|
4
|
+
import { appendCronEventLines } from "../../heartbeat/event-prompt.js";
|
|
4
5
|
import { isWithinActiveHours } from "../../heartbeat/active-hours.js";
|
|
5
6
|
import { isHeartbeatContentEmpty } from "../../heartbeat/content-check.js";
|
|
6
|
-
import { appendCronEventLines } from "../../heartbeat/event-prompt.js";
|
|
7
7
|
import { createHeartbeatWake } from "../../heartbeat/wake.js";
|
|
8
8
|
import { resolveHeartbeatMdPath } from "../workspace-heartbeat-path.js";
|
|
9
9
|
import { readFile } from "fs/promises";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
|
|
2
2
|
import { resolveModelsJsonPath } from "../../../config/paths.js";
|
|
3
|
-
import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
|
|
4
3
|
import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
|
|
4
|
+
import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
|
|
5
5
|
import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
|
|
6
6
|
import { getAllProviders, init_providers, isProviderConfigured } from "../../../providers/index.js";
|
|
7
7
|
import { resolveShareConfig } from "../../../share/share-config.js";
|
|
8
|
+
import { listChannelPlugins, syncChannelPluginsFromManager } from "../../../channels/plugins/registry.js";
|
|
8
9
|
import { normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
|
|
9
10
|
import { bundledChannelPlugins } from "../../../generated/bundled-channel-plugins.js";
|
|
10
|
-
import { listChannelPlugins, syncChannelPluginsFromManager } from "../../../channels/plugins/registry.js";
|
|
11
11
|
import { resolveCronConfigForWeb, resolveGoalsConfigForWeb, resolveSessionConfigForWeb, resolveUpdateConfigForWeb } from "../../../config/web-patch.js";
|
|
12
12
|
import { GENERIC_MASKED_SECRET, maskSecretLength } from "./mask-secret-length.js";
|
|
13
13
|
import { safeToolsWebForGet } from "../../config-tools-web.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { init_write_file_atomic, writeTextAtomic } from "../../../infra/write-file-atomic.js";
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
|
-
import { join } from "node:path";
|
|
4
2
|
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { readFile } from "node:fs/promises";
|
|
5
5
|
//#region src/gateway/hono/lib/extension-store.ts
|
|
6
6
|
init_write_file_atomic();
|
|
7
7
|
/** Extension UI: write-through JSON KV per namespace under ~/.xopc/extensions/{namespace}/storage.json */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
3
1
|
import { dirname, resolve } from "node:path";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
//#region src/gateway/hono/lib/static-ui.ts
|
|
6
6
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
2
|
-
import { anthropicOAuthProvider } from "../../auth/oauth/anthropic.js";
|
|
3
2
|
import { getProviderAuthState, init_providers, isProviderConfigured } from "../../providers/index.js";
|
|
3
|
+
import { anthropicOAuthProvider } from "../../auth/oauth/anthropic.js";
|
|
4
4
|
import { minimaxOAuthProvider } from "../../auth/oauth/minimax.js";
|
|
5
5
|
import { minimaxCnOAuthProvider } from "../../auth/oauth/minimax-cn.js";
|
|
6
6
|
import { kimiCodingOAuthProvider } from "../../auth/oauth/kimi-coding.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { init_agent_scope, normalizeAgentId } from "../../../agent/agent-scope.js";
|
|
2
1
|
import { init_localized_text, normalizeLocalizedText } from "../../../config/localized-text.js";
|
|
3
2
|
import { init_schema, parseModelRef } from "../../../config/schema.js";
|
|
3
|
+
import { init_agent_scope, normalizeAgentId } from "../../../agent/agent-scope.js";
|
|
4
4
|
import { init_providers, isProviderConfigured, resolveModel } from "../../../providers/index.js";
|
|
5
5
|
import { getVoiceModelsConfig } from "../../../config/voice.js";
|
|
6
6
|
import { deleteAgentAvatarFile, finalizeCreateAgentDirs, listAgentProfileFiles, listGatewayAgents, prepareCreateAgent, prepareCreateAgentsBatch, prepareDeleteAgent, prepareUpdateAgent, readAgentAvatarFile, readAgentProfileFile, runAfterDeletePurge, writeAgentAvatarFromBase64, writeAgentProfileFile } from "../../agents-admin.js";
|
|
@@ -7,8 +7,8 @@ import { createOAuthHandler } from "../oauth.js";
|
|
|
7
7
|
import { createOAuthAsyncHandler } from "../oauth-async.js";
|
|
8
8
|
import { extensionAssetMimeType } from "../lib/extension-assets.js";
|
|
9
9
|
import { loadExtensionStore, saveExtensionStore } from "../lib/extension-store.js";
|
|
10
|
-
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
11
10
|
import { relative, resolve } from "node:path";
|
|
11
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
12
12
|
//#region src/gateway/hono/routes/auth-registry-extensions.ts
|
|
13
13
|
init_providers();
|
|
14
14
|
const EXTENSION_ASSET_CSP = "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'none'; frame-ancestors 'self'; frame-src 'none'; base-uri 'none'; object-src 'none'; form-action 'none'";
|
|
@@ -22,12 +22,12 @@ function applyChannelsPatch(config, body) {
|
|
|
22
22
|
groupPolicy: "open",
|
|
23
23
|
replyToMode: "off",
|
|
24
24
|
historyLimit: 50,
|
|
25
|
-
textChunkLimit: 4e3
|
|
26
|
-
streamMode: "partial"
|
|
25
|
+
textChunkLimit: 4e3
|
|
27
26
|
} },
|
|
28
27
|
dmPolicy: "pairing",
|
|
29
28
|
groupPolicy: "open",
|
|
30
29
|
replyToMode: "off",
|
|
30
|
+
streaming: { mode: "partial" },
|
|
31
31
|
historyLimit: 50,
|
|
32
32
|
textChunkLimit: 4e3
|
|
33
33
|
} };
|
|
@@ -41,7 +41,7 @@ function applyChannelsPatch(config, body) {
|
|
|
41
41
|
else tg.apiRoot = String(ar).trim();
|
|
42
42
|
}
|
|
43
43
|
if (bodyTg.debug !== void 0) tg.debug = bodyTg.debug;
|
|
44
|
-
if (bodyTg.
|
|
44
|
+
if (bodyTg.streaming !== void 0) tg.streaming = bodyTg.streaming;
|
|
45
45
|
if ("groupAllowFrom" in bodyTg) {
|
|
46
46
|
const ga = bodyTg.groupAllowFrom;
|
|
47
47
|
if (ga === null || Array.isArray(ga) && ga.length === 0) delete tg.groupAllowFrom;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","names":[],"sources":["../../../../../../src/gateway/hono/routes/config-patch/channels.ts"],"sourcesContent":["/**\n * `PATCH /api/config` — `body.channels.{telegram,weixin,feishu}` section.\n *\n * Uses `in patchChannels` / `null` semantics so the web UI can remove a\n * provider with `{ weixin: null }` — `if (ch.weixin)` would silently drop\n * those clears.\n *\n * Each provider has its own first-init template (so a brand-new install gets\n * sane account / policy defaults), then field-by-field overlay.\n */\nimport type { Config } from '../../../../config/schema.js';\n\nexport function applyChannelsPatch(config: Config, body: any): void {\n const patchChannels = body.channels;\n if (patchChannels == null || typeof patchChannels !== 'object' || Array.isArray(patchChannels)) {\n return;\n }\n\n if ('telegram' in patchChannels) {\n const tgRaw = patchChannels.telegram;\n if (tgRaw === null) {\n if (config.channels) delete config.channels.telegram;\n } else if (typeof tgRaw === 'object' && !Array.isArray(tgRaw)) {\n const bodyTg = tgRaw as Record<string, unknown>;\n if (!config.channels) {\n config.channels = {\n telegram: {\n enabled: false,\n allowFrom: [],\n groupAllowFrom: [],\n debug: false,\n accounts: {\n default: {\n accountId: 'default',\n enabled: true,\n botToken: '',\n allowFrom: [],\n dmPolicy: 'pairing' as const,\n groupPolicy: 'open' as const,\n replyToMode: 'off' as const,\n historyLimit: 50,\n textChunkLimit: 4000,\n streamMode: 'partial' as const,\n },\n },\n dmPolicy: 'pairing' as const,\n groupPolicy: 'open' as const,\n replyToMode: 'off' as const,\n historyLimit: 50,\n textChunkLimit: 4000,\n },\n };\n }\n if (!config.channels.telegram) config.channels.telegram = {} as any;\n const tg = config.channels.telegram as Record<string, unknown>;\n\n if (bodyTg.enabled !== undefined) {\n tg.enabled = bodyTg.enabled;\n }\n if (bodyTg.allowFrom !== undefined) {\n tg.allowFrom = bodyTg.allowFrom;\n }\n if ('apiRoot' in bodyTg) {\n const ar = bodyTg.apiRoot;\n if (ar === null || ar === undefined || (typeof ar === 'string' && !ar.trim())) {\n delete tg.apiRoot;\n } else {\n tg.apiRoot = String(ar).trim();\n }\n }\n if (bodyTg.debug !== undefined) {\n tg.debug = bodyTg.debug;\n }\n if (bodyTg.streamMode !== undefined) {\n tg.streamMode = bodyTg.streamMode;\n }\n if ('groupAllowFrom' in bodyTg) {\n const ga = bodyTg.groupAllowFrom;\n if (ga === null || (Array.isArray(ga) && ga.length === 0)) {\n delete tg.groupAllowFrom;\n } else {\n tg.groupAllowFrom = ga;\n }\n }\n if (bodyTg.dmPolicy !== undefined) {\n tg.dmPolicy = bodyTg.dmPolicy;\n }\n if (bodyTg.groupPolicy !== undefined) {\n tg.groupPolicy = bodyTg.groupPolicy;\n }\n if (bodyTg.replyToMode !== undefined) {\n tg.replyToMode = bodyTg.replyToMode;\n }\n if (bodyTg.historyLimit !== undefined) {\n tg.historyLimit = bodyTg.historyLimit;\n }\n if (bodyTg.textChunkLimit !== undefined) {\n tg.textChunkLimit = bodyTg.textChunkLimit;\n }\n if ('proxy' in bodyTg) {\n const pr = bodyTg.proxy;\n if (pr === null || pr === undefined || (typeof pr === 'string' && !pr.trim())) {\n delete tg.proxy;\n } else {\n tg.proxy = String(pr).trim();\n }\n }\n if (bodyTg.accounts !== undefined) {\n tg.accounts = bodyTg.accounts;\n }\n }\n }\n\n if ('weixin' in patchChannels) {\n const wxRaw = patchChannels.weixin;\n if (wxRaw === null) {\n if (config.channels) delete config.channels.weixin;\n } else if (typeof wxRaw === 'object' && !Array.isArray(wxRaw)) {\n const wx = wxRaw as Record<string, unknown>;\n if (!config.channels) config.channels = {} as any;\n if (!config.channels.weixin) {\n config.channels.weixin = {\n enabled: false,\n dmPolicy: 'open',\n allowFrom: [],\n debug: false,\n historyLimit: 50,\n textChunkLimit: 4000,\n };\n }\n const wxTarget = config.channels.weixin as Record<string, unknown>;\n if (wx.enabled !== undefined) wxTarget.enabled = wx.enabled;\n if (wx.dmPolicy !== undefined) wxTarget.dmPolicy = wx.dmPolicy;\n if (wx.allowFrom !== undefined) wxTarget.allowFrom = wx.allowFrom;\n if (wx.debug !== undefined) wxTarget.debug = wx.debug;\n if (wx.streamMode !== undefined) wxTarget.streamMode = wx.streamMode;\n if (wx.historyLimit !== undefined) wxTarget.historyLimit = wx.historyLimit;\n if (wx.textChunkLimit !== undefined) wxTarget.textChunkLimit = wx.textChunkLimit;\n if ('routeTag' in wx) {\n const rt = wx.routeTag;\n if (rt === null || rt === undefined || rt === '') {\n delete wxTarget.routeTag;\n } else {\n wxTarget.routeTag = rt as string | number;\n }\n }\n if (wx.accounts !== undefined) wxTarget.accounts = wx.accounts;\n }\n }\n\n if ('feishu' in patchChannels) {\n const fsRaw = patchChannels.feishu;\n if (fsRaw === null) {\n if (config.channels) delete config.channels.feishu;\n } else if (typeof fsRaw === 'object' && !Array.isArray(fsRaw)) {\n const fs = fsRaw as Record<string, unknown>;\n if (!config.channels) config.channels = {} as any;\n if (!config.channels.feishu) {\n config.channels.feishu = {\n enabled: false,\n appId: '',\n appSecret: '',\n domain: 'feishu',\n connectionMode: 'websocket',\n dmPolicy: 'open',\n groupPolicy: 'allowlist',\n allowFrom: [],\n groupAllowFrom: [],\n requireMention: true,\n historyLimit: 50,\n textChunkLimit: 4000,\n accounts: {},\n };\n }\n const fsTarget = config.channels.feishu as Record<string, unknown>;\n\n if (fs.enabled !== undefined) fsTarget.enabled = fs.enabled;\n if (fs.defaultAccount !== undefined) {\n const da = fs.defaultAccount;\n if (da === null || da === '') delete fsTarget.defaultAccount;\n else fsTarget.defaultAccount = String(da);\n }\n if (fs.appId !== undefined) fsTarget.appId = fs.appId;\n if ('appSecret' in fs) {\n const v = fs.appSecret;\n if (v === null || (typeof v === 'string' && !String(v).trim())) {\n delete fsTarget.appSecret;\n } else {\n fsTarget.appSecret = v;\n }\n }\n if (fs.domain !== undefined) fsTarget.domain = fs.domain;\n if (fs.connectionMode !== undefined) fsTarget.connectionMode = fs.connectionMode;\n if (fs.verificationToken !== undefined) {\n const v = fs.verificationToken;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.verificationToken;\n else fsTarget.verificationToken = v;\n }\n if (fs.encryptKey !== undefined) {\n const v = fs.encryptKey;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.encryptKey;\n else fsTarget.encryptKey = v;\n }\n if (fs.webhookHost !== undefined) {\n const v = fs.webhookHost;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.webhookHost;\n else fsTarget.webhookHost = v;\n }\n if (fs.webhookPort !== undefined) fsTarget.webhookPort = fs.webhookPort;\n if (fs.webhookPath !== undefined) {\n const v = fs.webhookPath;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.webhookPath;\n else fsTarget.webhookPath = v;\n }\n if (fs.dmPolicy !== undefined) fsTarget.dmPolicy = fs.dmPolicy;\n if (fs.groupPolicy !== undefined) fsTarget.groupPolicy = fs.groupPolicy;\n if (fs.allowFrom !== undefined) fsTarget.allowFrom = fs.allowFrom;\n if (fs.groupAllowFrom !== undefined) {\n const ga = fs.groupAllowFrom;\n if (ga === null || (Array.isArray(ga) && ga.length === 0)) delete fsTarget.groupAllowFrom;\n else fsTarget.groupAllowFrom = ga;\n }\n if (fs.requireMention !== undefined) fsTarget.requireMention = fs.requireMention;\n if (fs.historyLimit !== undefined) fsTarget.historyLimit = fs.historyLimit;\n if (fs.textChunkLimit !== undefined) fsTarget.textChunkLimit = fs.textChunkLimit;\n if (fs.renderMode !== undefined) fsTarget.renderMode = fs.renderMode;\n if (fs.streaming !== undefined) fsTarget.streaming = fs.streaming;\n if (fs.reactionNotifications !== undefined) {\n fsTarget.reactionNotifications = fs.reactionNotifications;\n }\n if (fs.tools !== undefined) fsTarget.tools = fs.tools;\n if (fs.actions !== undefined) fsTarget.actions = fs.actions;\n if (fs.accounts !== undefined) fsTarget.accounts = fs.accounts;\n }\n }\n}\n"],"mappings":";AAYA,SAAgB,mBAAmB,QAAgB,MAAiB;CAClE,MAAM,gBAAgB,KAAK;AAC3B,KAAI,iBAAiB,QAAQ,OAAO,kBAAkB,YAAY,MAAM,QAAQ,cAAc,CAC5F;AAGF,KAAI,cAAc,eAAe;EAC/B,MAAM,QAAQ,cAAc;AAC5B,MAAI,UAAU;OACR,OAAO,SAAU,QAAO,OAAO,SAAS;aACnC,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAE;GAC7D,MAAM,SAAS;AACf,OAAI,CAAC,OAAO,SACV,QAAO,WAAW,EAChB,UAAU;IACR,SAAS;IACT,WAAW,EAAE;IACb,gBAAgB,EAAE;IAClB,OAAO;IACP,UAAU,EACR,SAAS;KACP,WAAW;KACX,SAAS;KACT,UAAU;KACV,WAAW,EAAE;KACb,UAAU;KACV,aAAa;KACb,aAAa;KACb,cAAc;KACd,gBAAgB;KAChB,YAAY;KACb,EACF;IACD,UAAU;IACV,aAAa;IACb,aAAa;IACb,cAAc;IACd,gBAAgB;IACjB,EACF;AAEH,OAAI,CAAC,OAAO,SAAS,SAAU,QAAO,SAAS,WAAW,EAAE;GAC5D,MAAM,KAAK,OAAO,SAAS;AAE3B,OAAI,OAAO,YAAY,KAAA,EACrB,IAAG,UAAU,OAAO;AAEtB,OAAI,OAAO,cAAc,KAAA,EACvB,IAAG,YAAY,OAAO;AAExB,OAAI,aAAa,QAAQ;IACvB,MAAM,KAAK,OAAO;AAClB,QAAI,OAAO,QAAQ,OAAO,KAAA,KAAc,OAAO,OAAO,YAAY,CAAC,GAAG,MAAM,CAC1E,QAAO,GAAG;QAEV,IAAG,UAAU,OAAO,GAAG,CAAC,MAAM;;AAGlC,OAAI,OAAO,UAAU,KAAA,EACnB,IAAG,QAAQ,OAAO;AAEpB,OAAI,OAAO,eAAe,KAAA,EACxB,IAAG,aAAa,OAAO;AAEzB,OAAI,oBAAoB,QAAQ;IAC9B,MAAM,KAAK,OAAO;AAClB,QAAI,OAAO,QAAS,MAAM,QAAQ,GAAG,IAAI,GAAG,WAAW,EACrD,QAAO,GAAG;QAEV,IAAG,iBAAiB;;AAGxB,OAAI,OAAO,aAAa,KAAA,EACtB,IAAG,WAAW,OAAO;AAEvB,OAAI,OAAO,gBAAgB,KAAA,EACzB,IAAG,cAAc,OAAO;AAE1B,OAAI,OAAO,gBAAgB,KAAA,EACzB,IAAG,cAAc,OAAO;AAE1B,OAAI,OAAO,iBAAiB,KAAA,EAC1B,IAAG,eAAe,OAAO;AAE3B,OAAI,OAAO,mBAAmB,KAAA,EAC5B,IAAG,iBAAiB,OAAO;AAE7B,OAAI,WAAW,QAAQ;IACrB,MAAM,KAAK,OAAO;AAClB,QAAI,OAAO,QAAQ,OAAO,KAAA,KAAc,OAAO,OAAO,YAAY,CAAC,GAAG,MAAM,CAC1E,QAAO,GAAG;QAEV,IAAG,QAAQ,OAAO,GAAG,CAAC,MAAM;;AAGhC,OAAI,OAAO,aAAa,KAAA,EACtB,IAAG,WAAW,OAAO;;;AAK3B,KAAI,YAAY,eAAe;EAC7B,MAAM,QAAQ,cAAc;AAC5B,MAAI,UAAU;OACR,OAAO,SAAU,QAAO,OAAO,SAAS;aACnC,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAE;GAC7D,MAAM,KAAK;AACX,OAAI,CAAC,OAAO,SAAU,QAAO,WAAW,EAAE;AAC1C,OAAI,CAAC,OAAO,SAAS,OACnB,QAAO,SAAS,SAAS;IACvB,SAAS;IACT,UAAU;IACV,WAAW,EAAE;IACb,OAAO;IACP,cAAc;IACd,gBAAgB;IACjB;GAEH,MAAM,WAAW,OAAO,SAAS;AACjC,OAAI,GAAG,YAAY,KAAA,EAAW,UAAS,UAAU,GAAG;AACpD,OAAI,GAAG,aAAa,KAAA,EAAW,UAAS,WAAW,GAAG;AACtD,OAAI,GAAG,cAAc,KAAA,EAAW,UAAS,YAAY,GAAG;AACxD,OAAI,GAAG,UAAU,KAAA,EAAW,UAAS,QAAQ,GAAG;AAChD,OAAI,GAAG,eAAe,KAAA,EAAW,UAAS,aAAa,GAAG;AAC1D,OAAI,GAAG,iBAAiB,KAAA,EAAW,UAAS,eAAe,GAAG;AAC9D,OAAI,GAAG,mBAAmB,KAAA,EAAW,UAAS,iBAAiB,GAAG;AAClE,OAAI,cAAc,IAAI;IACpB,MAAM,KAAK,GAAG;AACd,QAAI,OAAO,QAAQ,OAAO,KAAA,KAAa,OAAO,GAC5C,QAAO,SAAS;QAEhB,UAAS,WAAW;;AAGxB,OAAI,GAAG,aAAa,KAAA,EAAW,UAAS,WAAW,GAAG;;;AAI1D,KAAI,YAAY,eAAe;EAC7B,MAAM,QAAQ,cAAc;AAC5B,MAAI,UAAU;OACR,OAAO,SAAU,QAAO,OAAO,SAAS;aACnC,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAE;GAC7D,MAAM,KAAK;AACX,OAAI,CAAC,OAAO,SAAU,QAAO,WAAW,EAAE;AAC1C,OAAI,CAAC,OAAO,SAAS,OACnB,QAAO,SAAS,SAAS;IACvB,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,UAAU;IACV,aAAa;IACb,WAAW,EAAE;IACb,gBAAgB,EAAE;IAClB,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,UAAU,EAAE;IACb;GAEH,MAAM,WAAW,OAAO,SAAS;AAEjC,OAAI,GAAG,YAAY,KAAA,EAAW,UAAS,UAAU,GAAG;AACpD,OAAI,GAAG,mBAAmB,KAAA,GAAW;IACnC,MAAM,KAAK,GAAG;AACd,QAAI,OAAO,QAAQ,OAAO,GAAI,QAAO,SAAS;QACzC,UAAS,iBAAiB,OAAO,GAAG;;AAE3C,OAAI,GAAG,UAAU,KAAA,EAAW,UAAS,QAAQ,GAAG;AAChD,OAAI,eAAe,IAAI;IACrB,MAAM,IAAI,GAAG;AACb,QAAI,MAAM,QAAS,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,CAC3D,QAAO,SAAS;QAEhB,UAAS,YAAY;;AAGzB,OAAI,GAAG,WAAW,KAAA,EAAW,UAAS,SAAS,GAAG;AAClD,OAAI,GAAG,mBAAmB,KAAA,EAAW,UAAS,iBAAiB,GAAG;AAClE,OAAI,GAAG,sBAAsB,KAAA,GAAW;IACtC,MAAM,IAAI,GAAG;AACb,QAAI,MAAM,QAAS,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,CAAG,QAAO,SAAS;QAC3E,UAAS,oBAAoB;;AAEpC,OAAI,GAAG,eAAe,KAAA,GAAW;IAC/B,MAAM,IAAI,GAAG;AACb,QAAI,MAAM,QAAS,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,CAAG,QAAO,SAAS;QAC3E,UAAS,aAAa;;AAE7B,OAAI,GAAG,gBAAgB,KAAA,GAAW;IAChC,MAAM,IAAI,GAAG;AACb,QAAI,MAAM,QAAS,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,CAAG,QAAO,SAAS;QAC3E,UAAS,cAAc;;AAE9B,OAAI,GAAG,gBAAgB,KAAA,EAAW,UAAS,cAAc,GAAG;AAC5D,OAAI,GAAG,gBAAgB,KAAA,GAAW;IAChC,MAAM,IAAI,GAAG;AACb,QAAI,MAAM,QAAS,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,CAAG,QAAO,SAAS;QAC3E,UAAS,cAAc;;AAE9B,OAAI,GAAG,aAAa,KAAA,EAAW,UAAS,WAAW,GAAG;AACtD,OAAI,GAAG,gBAAgB,KAAA,EAAW,UAAS,cAAc,GAAG;AAC5D,OAAI,GAAG,cAAc,KAAA,EAAW,UAAS,YAAY,GAAG;AACxD,OAAI,GAAG,mBAAmB,KAAA,GAAW;IACnC,MAAM,KAAK,GAAG;AACd,QAAI,OAAO,QAAS,MAAM,QAAQ,GAAG,IAAI,GAAG,WAAW,EAAI,QAAO,SAAS;QACtE,UAAS,iBAAiB;;AAEjC,OAAI,GAAG,mBAAmB,KAAA,EAAW,UAAS,iBAAiB,GAAG;AAClE,OAAI,GAAG,iBAAiB,KAAA,EAAW,UAAS,eAAe,GAAG;AAC9D,OAAI,GAAG,mBAAmB,KAAA,EAAW,UAAS,iBAAiB,GAAG;AAClE,OAAI,GAAG,eAAe,KAAA,EAAW,UAAS,aAAa,GAAG;AAC1D,OAAI,GAAG,cAAc,KAAA,EAAW,UAAS,YAAY,GAAG;AACxD,OAAI,GAAG,0BAA0B,KAAA,EAC/B,UAAS,wBAAwB,GAAG;AAEtC,OAAI,GAAG,UAAU,KAAA,EAAW,UAAS,QAAQ,GAAG;AAChD,OAAI,GAAG,YAAY,KAAA,EAAW,UAAS,UAAU,GAAG;AACpD,OAAI,GAAG,aAAa,KAAA,EAAW,UAAS,WAAW,GAAG"}
|
|
1
|
+
{"version":3,"file":"channels.js","names":[],"sources":["../../../../../../src/gateway/hono/routes/config-patch/channels.ts"],"sourcesContent":["/**\n * `PATCH /api/config` — `body.channels.{telegram,weixin,feishu}` section.\n *\n * Uses `in patchChannels` / `null` semantics so the web UI can remove a\n * provider with `{ weixin: null }` — `if (ch.weixin)` would silently drop\n * those clears.\n *\n * Each provider has its own first-init template (so a brand-new install gets\n * sane account / policy defaults), then field-by-field overlay.\n */\nimport type { Config } from '../../../../config/schema.js';\n\nexport function applyChannelsPatch(config: Config, body: any): void {\n const patchChannels = body.channels;\n if (patchChannels == null || typeof patchChannels !== 'object' || Array.isArray(patchChannels)) {\n return;\n }\n\n if ('telegram' in patchChannels) {\n const tgRaw = patchChannels.telegram;\n if (tgRaw === null) {\n if (config.channels) delete config.channels.telegram;\n } else if (typeof tgRaw === 'object' && !Array.isArray(tgRaw)) {\n const bodyTg = tgRaw as Record<string, unknown>;\n if (!config.channels) {\n config.channels = {\n telegram: {\n enabled: false,\n allowFrom: [],\n groupAllowFrom: [],\n debug: false,\n accounts: {\n default: {\n accountId: 'default',\n enabled: true,\n botToken: '',\n allowFrom: [],\n dmPolicy: 'pairing' as const,\n groupPolicy: 'open' as const,\n replyToMode: 'off' as const,\n historyLimit: 50,\n textChunkLimit: 4000,\n },\n },\n dmPolicy: 'pairing' as const,\n groupPolicy: 'open' as const,\n replyToMode: 'off' as const,\n streaming: { mode: 'partial' as const },\n historyLimit: 50,\n textChunkLimit: 4000,\n },\n };\n }\n if (!config.channels.telegram) config.channels.telegram = {} as any;\n const tg = config.channels.telegram as Record<string, unknown>;\n\n if (bodyTg.enabled !== undefined) {\n tg.enabled = bodyTg.enabled;\n }\n if (bodyTg.allowFrom !== undefined) {\n tg.allowFrom = bodyTg.allowFrom;\n }\n if ('apiRoot' in bodyTg) {\n const ar = bodyTg.apiRoot;\n if (ar === null || ar === undefined || (typeof ar === 'string' && !ar.trim())) {\n delete tg.apiRoot;\n } else {\n tg.apiRoot = String(ar).trim();\n }\n }\n if (bodyTg.debug !== undefined) {\n tg.debug = bodyTg.debug;\n }\n if (bodyTg.streaming !== undefined) {\n tg.streaming = bodyTg.streaming;\n }\n if ('groupAllowFrom' in bodyTg) {\n const ga = bodyTg.groupAllowFrom;\n if (ga === null || (Array.isArray(ga) && ga.length === 0)) {\n delete tg.groupAllowFrom;\n } else {\n tg.groupAllowFrom = ga;\n }\n }\n if (bodyTg.dmPolicy !== undefined) {\n tg.dmPolicy = bodyTg.dmPolicy;\n }\n if (bodyTg.groupPolicy !== undefined) {\n tg.groupPolicy = bodyTg.groupPolicy;\n }\n if (bodyTg.replyToMode !== undefined) {\n tg.replyToMode = bodyTg.replyToMode;\n }\n if (bodyTg.historyLimit !== undefined) {\n tg.historyLimit = bodyTg.historyLimit;\n }\n if (bodyTg.textChunkLimit !== undefined) {\n tg.textChunkLimit = bodyTg.textChunkLimit;\n }\n if ('proxy' in bodyTg) {\n const pr = bodyTg.proxy;\n if (pr === null || pr === undefined || (typeof pr === 'string' && !pr.trim())) {\n delete tg.proxy;\n } else {\n tg.proxy = String(pr).trim();\n }\n }\n if (bodyTg.accounts !== undefined) {\n tg.accounts = bodyTg.accounts;\n }\n }\n }\n\n if ('weixin' in patchChannels) {\n const wxRaw = patchChannels.weixin;\n if (wxRaw === null) {\n if (config.channels) delete config.channels.weixin;\n } else if (typeof wxRaw === 'object' && !Array.isArray(wxRaw)) {\n const wx = wxRaw as Record<string, unknown>;\n if (!config.channels) config.channels = {} as any;\n if (!config.channels.weixin) {\n config.channels.weixin = {\n enabled: false,\n dmPolicy: 'open',\n allowFrom: [],\n debug: false,\n historyLimit: 50,\n textChunkLimit: 4000,\n };\n }\n const wxTarget = config.channels.weixin as Record<string, unknown>;\n if (wx.enabled !== undefined) wxTarget.enabled = wx.enabled;\n if (wx.dmPolicy !== undefined) wxTarget.dmPolicy = wx.dmPolicy;\n if (wx.allowFrom !== undefined) wxTarget.allowFrom = wx.allowFrom;\n if (wx.debug !== undefined) wxTarget.debug = wx.debug;\n if (wx.streamMode !== undefined) wxTarget.streamMode = wx.streamMode;\n if (wx.historyLimit !== undefined) wxTarget.historyLimit = wx.historyLimit;\n if (wx.textChunkLimit !== undefined) wxTarget.textChunkLimit = wx.textChunkLimit;\n if ('routeTag' in wx) {\n const rt = wx.routeTag;\n if (rt === null || rt === undefined || rt === '') {\n delete wxTarget.routeTag;\n } else {\n wxTarget.routeTag = rt as string | number;\n }\n }\n if (wx.accounts !== undefined) wxTarget.accounts = wx.accounts;\n }\n }\n\n if ('feishu' in patchChannels) {\n const fsRaw = patchChannels.feishu;\n if (fsRaw === null) {\n if (config.channels) delete config.channels.feishu;\n } else if (typeof fsRaw === 'object' && !Array.isArray(fsRaw)) {\n const fs = fsRaw as Record<string, unknown>;\n if (!config.channels) config.channels = {} as any;\n if (!config.channels.feishu) {\n config.channels.feishu = {\n enabled: false,\n appId: '',\n appSecret: '',\n domain: 'feishu',\n connectionMode: 'websocket',\n dmPolicy: 'open',\n groupPolicy: 'allowlist',\n allowFrom: [],\n groupAllowFrom: [],\n requireMention: true,\n historyLimit: 50,\n textChunkLimit: 4000,\n accounts: {},\n };\n }\n const fsTarget = config.channels.feishu as Record<string, unknown>;\n\n if (fs.enabled !== undefined) fsTarget.enabled = fs.enabled;\n if (fs.defaultAccount !== undefined) {\n const da = fs.defaultAccount;\n if (da === null || da === '') delete fsTarget.defaultAccount;\n else fsTarget.defaultAccount = String(da);\n }\n if (fs.appId !== undefined) fsTarget.appId = fs.appId;\n if ('appSecret' in fs) {\n const v = fs.appSecret;\n if (v === null || (typeof v === 'string' && !String(v).trim())) {\n delete fsTarget.appSecret;\n } else {\n fsTarget.appSecret = v;\n }\n }\n if (fs.domain !== undefined) fsTarget.domain = fs.domain;\n if (fs.connectionMode !== undefined) fsTarget.connectionMode = fs.connectionMode;\n if (fs.verificationToken !== undefined) {\n const v = fs.verificationToken;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.verificationToken;\n else fsTarget.verificationToken = v;\n }\n if (fs.encryptKey !== undefined) {\n const v = fs.encryptKey;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.encryptKey;\n else fsTarget.encryptKey = v;\n }\n if (fs.webhookHost !== undefined) {\n const v = fs.webhookHost;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.webhookHost;\n else fsTarget.webhookHost = v;\n }\n if (fs.webhookPort !== undefined) fsTarget.webhookPort = fs.webhookPort;\n if (fs.webhookPath !== undefined) {\n const v = fs.webhookPath;\n if (v === null || (typeof v === 'string' && !String(v).trim())) delete fsTarget.webhookPath;\n else fsTarget.webhookPath = v;\n }\n if (fs.dmPolicy !== undefined) fsTarget.dmPolicy = fs.dmPolicy;\n if (fs.groupPolicy !== undefined) fsTarget.groupPolicy = fs.groupPolicy;\n if (fs.allowFrom !== undefined) fsTarget.allowFrom = fs.allowFrom;\n if (fs.groupAllowFrom !== undefined) {\n const ga = fs.groupAllowFrom;\n if (ga === null || (Array.isArray(ga) && ga.length === 0)) delete fsTarget.groupAllowFrom;\n else fsTarget.groupAllowFrom = ga;\n }\n if (fs.requireMention !== undefined) fsTarget.requireMention = fs.requireMention;\n if (fs.historyLimit !== undefined) fsTarget.historyLimit = fs.historyLimit;\n if (fs.textChunkLimit !== undefined) fsTarget.textChunkLimit = fs.textChunkLimit;\n if (fs.renderMode !== undefined) fsTarget.renderMode = fs.renderMode;\n if (fs.streaming !== undefined) fsTarget.streaming = fs.streaming;\n if (fs.reactionNotifications !== undefined) {\n fsTarget.reactionNotifications = fs.reactionNotifications;\n }\n if (fs.tools !== undefined) fsTarget.tools = fs.tools;\n if (fs.actions !== undefined) fsTarget.actions = fs.actions;\n if (fs.accounts !== undefined) fsTarget.accounts = fs.accounts;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
|
|
2
1
|
import { BindingsConfigSchema, McpConfigSchema, init_schema } from "../../../../config/schema.js";
|
|
2
|
+
import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
|
|
3
3
|
import { canonicalizeConfiguredMcpServer } from "../../../../config/mcp-config-normalize.js";
|
|
4
4
|
import { mergeCronConfigPatch, mergeGatewaySkillsMarketplacePatch, mergeGoalsConfigPatch, mergeSessionConfigPatch, mergeUpdateConfigPatch } from "../../../../config/web-patch.js";
|
|
5
5
|
import { assertGatewayAuthConfigured, resolveGatewayAuth } from "../../../auth.js";
|
|
@@ -5,8 +5,8 @@ import { getWorkspacePath } from "../../../config/workspace-path-helpers.js";
|
|
|
5
5
|
import { parseDreamingLastRunFile } from "../../../agent/memory/dreaming/last-run.js";
|
|
6
6
|
import { readDreamingEvents } from "../../../agent/memory/dreaming/events.js";
|
|
7
7
|
import { previewDreamingDeepPromotion } from "../../../agent/memory/dreaming/preview.js";
|
|
8
|
-
import fs from "node:fs/promises";
|
|
9
8
|
import path from "node:path";
|
|
9
|
+
import fs from "node:fs/promises";
|
|
10
10
|
//#region src/gateway/hono/routes/dreaming.ts
|
|
11
11
|
function isRecord(v) {
|
|
12
12
|
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createGatewayRouteLogger } from "../lib/route-logger.js";
|
|
2
|
-
import { readdir, realpath, stat } from "node:fs/promises";
|
|
3
|
-
import * as path$1 from "node:path";
|
|
4
2
|
import * as os$1 from "node:os";
|
|
3
|
+
import * as path$1 from "node:path";
|
|
4
|
+
import { readdir, realpath, stat } from "node:fs/promises";
|
|
5
5
|
//#region src/gateway/hono/routes/host-fs.ts
|
|
6
6
|
const log = createGatewayRouteLogger("HostFs");
|
|
7
7
|
function jsonError(status, message) {
|
|
@@ -3,6 +3,14 @@ function startsWithAny(path, prefixes) {
|
|
|
3
3
|
return prefixes.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));
|
|
4
4
|
}
|
|
5
5
|
const AUTHENTICATED_LAZY_ROUTE_BUNDLES = [
|
|
6
|
+
{
|
|
7
|
+
id: "media",
|
|
8
|
+
match: (path) => startsWithAny(path, ["/api/media"]),
|
|
9
|
+
load: async () => {
|
|
10
|
+
const { registerMediaRoutes } = await import("./media.js");
|
|
11
|
+
return { register: registerMediaRoutes };
|
|
12
|
+
}
|
|
13
|
+
},
|
|
6
14
|
{
|
|
7
15
|
id: "workspace",
|
|
8
16
|
match: (path) => startsWithAny(path, ["/api/workspace"]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-bundles.js","names":[],"sources":["../../../../../src/gateway/hono/routes/lazy-bundles.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport type { GatewayService } from '../../service.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nexport type AuthenticatedLazyRouteBundle = {\n id: string;\n match: (path: string) => boolean;\n load: () => Promise<{ register: (authenticated: Hono, deps: AuthenticatedRouteDeps) => void }>;\n};\n\nexport type AppLazyRouteBundle = {\n id: string;\n prefixes: readonly string[];\n match: (path: string) => boolean;\n load: () => Promise<{\n registerOnApp: (app: Hono, service: GatewayService) => void;\n }>;\n};\n\nfunction startsWithAny(path: string, prefixes: readonly string[]): boolean {\n return prefixes.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));\n}\n\nexport const AUTHENTICATED_LAZY_ROUTE_BUNDLES: readonly AuthenticatedLazyRouteBundle[] = [\n {\n id: 'workspace',\n match: (path) => startsWithAny(path, ['/api/workspace']),\n load: async () => {\n const { registerWorkspaceRoutes } = await import('./workspace.js');\n return { register: registerWorkspaceRoutes };\n },\n },\n {\n id: 'host-fs',\n match: (path) => startsWithAny(path, ['/api/host/fs']),\n load: async () => {\n const { registerHostFsRoutes } = await import('./host-fs.js');\n return { register: registerHostFsRoutes };\n },\n },\n {\n id: 'channels',\n match: (path) => startsWithAny(path, ['/api/channels']),\n load: async () => {\n const { registerChannelRoutes } = await import('./channels.js');\n return { register: registerChannelRoutes };\n },\n },\n {\n id: 'browser-install',\n match: (path) =>\n path === '/api/browser/playwright/install/stream' ||\n path === '/api/browser/cloakbrowser/install/stream',\n load: async () => {\n const { registerBrowserInstallRoutes } = await import('./browser-install.js');\n return { register: registerBrowserInstallRoutes };\n },\n },\n {\n id: 'browser',\n // `browser-install` above already matched the SSE install streams; this\n // catches the remaining /api/browser/* handlers (extension, cdp,\n // cloakbrowser doctor/launch/install, playwright doctor/install, cloud).\n match: (path) => startsWithAny(path, ['/api/browser']),\n load: async () => {\n const { registerBrowserRoutes } = await import('./browser.js');\n return { register: registerBrowserRoutes };\n },\n },\n {\n id: 'config',\n match: (path) =>\n startsWithAny(path, [\n '/api/config',\n '/api/heartbeat/trigger',\n // Secret reveal handlers live in config routes but use /api/gateway and\n // /api/tools paths; without these prefixes the extension-gateway bundle\n // matches first and returns 404 (no handler for multi-segment paths).\n '/api/gateway/reveal-auth-secret',\n '/api/tools/web/reveal-search-api-key',\n ]),\n load: async () => {\n const { registerConfigRoutes } = await import('./config.js');\n return { register: registerConfigRoutes };\n },\n },\n {\n id: 'doctor',\n match: (path) => startsWithAny(path, ['/api/doctor']),\n load: async () => {\n const { registerDoctorRoutes } = await import('./doctor.js');\n return { register: registerDoctorRoutes };\n },\n },\n {\n id: 'dreaming',\n match: (path) => startsWithAny(path, ['/api/dreaming']),\n load: async () => {\n const { registerDreamingRoutes } = await import('./dreaming.js');\n return { register: registerDreamingRoutes };\n },\n },\n {\n id: 'agents',\n match: (path) => startsWithAny(path, ['/api/agents', '/api/voice/models']),\n load: async () => {\n const { registerAgentsRoutes } = await import('./agents.js');\n return { register: registerAgentsRoutes };\n },\n },\n {\n id: 'auth-registry-extensions',\n match: (path) =>\n startsWithAny(path, [\n '/api/auth',\n '/api/registry',\n '/api/extensions',\n '/api/context',\n '/api/marketplace',\n ]),\n load: async () => {\n const { registerAuthRegistryExtensionsRoutes } = await import('./auth-registry-extensions.js');\n return { register: registerAuthRegistryExtensionsRoutes };\n },\n },\n {\n id: 'models',\n match: (path) =>\n startsWithAny(path, ['/api/models', '/api/models-json', '/api/providers', '/api/image']),\n load: async () => {\n const { registerModelsRoutes } = await import('./models.js');\n return { register: registerModelsRoutes };\n },\n },\n {\n id: 'commands-skills',\n match: (path) => startsWithAny(path, ['/api/commands', '/api/skills']),\n load: async () => {\n const { registerCommandsSkillsRoutes } = await import('./commands-skills.js');\n return { register: registerCommandsSkillsRoutes };\n },\n },\n {\n id: 'cron',\n match: (path) => startsWithAny(path, ['/api/cron']),\n load: async () => {\n const { registerCronRoutes } = await import('./cron.js');\n return { register: registerCronRoutes };\n },\n },\n {\n id: 'goals',\n match: (path) => startsWithAny(path, ['/api/goals']),\n load: async () => {\n const { registerGoalsRoutes } = await import('./goals.js');\n return { register: registerGoalsRoutes };\n },\n },\n {\n id: 'notes',\n match: (path) => startsWithAny(path, ['/api/notes']),\n load: async () => {\n const { registerNotesRoutes } = await import('./notes.js');\n return { register: registerNotesRoutes };\n },\n },\n {\n id: 'home',\n match: (path) => startsWithAny(path, ['/api/home']),\n load: async () => {\n const { registerHomeRoutes } = await import('./home.js');\n return { register: registerHomeRoutes };\n },\n },\n {\n id: 'workflows',\n match: (path) => startsWithAny(path, ['/api/workflows']),\n load: async () => {\n const { registerWorkflowRoutes } = await import('./workflows.js');\n return { register: registerWorkflowRoutes };\n },\n },\n {\n id: 'logs',\n match: (path) => startsWithAny(path, ['/api/logs']),\n load: async () => {\n const { registerLogsRoutes } = await import('./logs.js');\n return { register: registerLogsRoutes };\n },\n },\n {\n id: 'shares',\n match: (path) => startsWithAny(path, ['/api/shares']),\n load: async () => {\n const { registerShareRoutes } = await import('./shares.js');\n return { register: registerShareRoutes };\n },\n },\n {\n id: 'site-shares',\n match: (path) => startsWithAny(path, ['/api/site-shares']),\n load: async () => {\n const { registerSiteShareRoutes } = await import('./site-shares.js');\n return { register: registerSiteShareRoutes };\n },\n },\n {\n id: 'tunnel',\n match: (path) => startsWithAny(path, ['/api/tunnel']),\n load: async () => {\n const { registerTunnelRoutes } = await import('./tunnel.js');\n return { register: registerTunnelRoutes };\n },\n },\n {\n id: 'exposure',\n match: (path) => startsWithAny(path, ['/api/exposure']),\n load: async () => {\n const { registerExposureRoutes } = await import('./exposure.js');\n return { register: registerExposureRoutes };\n },\n },\n {\n id: 'extension-gateway',\n match: (path) => startsWithAny(path, ['/api/gateway']),\n load: async () => {\n const { registerExtensionGatewayRoutes } = await import('./extension-gateway.js');\n return { register: registerExtensionGatewayRoutes };\n },\n },\n {\n id: 'update',\n match: (path) => startsWithAny(path, ['/api/update']),\n load: async () => {\n const { registerUpdateRoutes } = await import('./update.js');\n return { register: registerUpdateRoutes };\n },\n },\n {\n id: 'voice',\n match: (path) => startsWithAny(path, ['/api/voice']) && path !== '/api/voice/models',\n load: async () => {\n const { registerVoiceRoutes } = await import('./voice.js');\n return { register: registerVoiceRoutes };\n },\n },\n {\n id: 'connectors',\n match: (path) => startsWithAny(path, ['/api/connectors']),\n load: async () => {\n const { registerConnectorRoutes } = await import('./connectors.js');\n return { register: registerConnectorRoutes };\n },\n },\n {\n id: 'mcp',\n match: (path) => startsWithAny(path, ['/api/mcp']),\n load: async () => {\n const { registerMcpRoutes } = await import('./mcp.js');\n return { register: registerMcpRoutes };\n },\n },\n];\n\nexport const APP_LAZY_ROUTE_BUNDLES: readonly AppLazyRouteBundle[] = [\n {\n id: 'shares-public',\n prefixes: ['/s'],\n match: (path) => startsWithAny(path, ['/s']),\n load: async () => {\n const { registerSharePublicRoutes } = await import('./shares.js');\n return { registerOnApp: registerSharePublicRoutes };\n },\n },\n {\n id: 'tunnel-public',\n prefixes: [\n '/api/tunnel/pair/ping',\n '/api/tunnel/pair/validate-url',\n '/api/tunnel/exchange-token',\n ],\n match: (path) =>\n path === '/api/tunnel/exchange-token' ||\n path === '/api/tunnel/pair/ping' ||\n path === '/api/tunnel/pair/validate-url',\n load: async () => {\n const { registerTunnelPublicRoutes } = await import('./tunnel.js');\n return { registerOnApp: registerTunnelPublicRoutes };\n },\n },\n];\n\nexport function findAuthenticatedLazyRouteBundle(path: string): AuthenticatedLazyRouteBundle | undefined {\n return AUTHENTICATED_LAZY_ROUTE_BUNDLES.find((bundle) => bundle.match(path));\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lazy-bundles.js","names":[],"sources":["../../../../../src/gateway/hono/routes/lazy-bundles.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport type { GatewayService } from '../../service.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nexport type AuthenticatedLazyRouteBundle = {\n id: string;\n match: (path: string) => boolean;\n load: () => Promise<{ register: (authenticated: Hono, deps: AuthenticatedRouteDeps) => void }>;\n};\n\nexport type AppLazyRouteBundle = {\n id: string;\n prefixes: readonly string[];\n match: (path: string) => boolean;\n load: () => Promise<{\n registerOnApp: (app: Hono, service: GatewayService) => void;\n }>;\n};\n\nfunction startsWithAny(path: string, prefixes: readonly string[]): boolean {\n return prefixes.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));\n}\n\nexport const AUTHENTICATED_LAZY_ROUTE_BUNDLES: readonly AuthenticatedLazyRouteBundle[] = [\n {\n id: 'media',\n match: (path) => startsWithAny(path, ['/api/media']),\n load: async () => {\n const { registerMediaRoutes } = await import('./media.js');\n return { register: registerMediaRoutes };\n },\n },\n {\n id: 'workspace',\n match: (path) => startsWithAny(path, ['/api/workspace']),\n load: async () => {\n const { registerWorkspaceRoutes } = await import('./workspace.js');\n return { register: registerWorkspaceRoutes };\n },\n },\n {\n id: 'host-fs',\n match: (path) => startsWithAny(path, ['/api/host/fs']),\n load: async () => {\n const { registerHostFsRoutes } = await import('./host-fs.js');\n return { register: registerHostFsRoutes };\n },\n },\n {\n id: 'channels',\n match: (path) => startsWithAny(path, ['/api/channels']),\n load: async () => {\n const { registerChannelRoutes } = await import('./channels.js');\n return { register: registerChannelRoutes };\n },\n },\n {\n id: 'browser-install',\n match: (path) =>\n path === '/api/browser/playwright/install/stream' ||\n path === '/api/browser/cloakbrowser/install/stream',\n load: async () => {\n const { registerBrowserInstallRoutes } = await import('./browser-install.js');\n return { register: registerBrowserInstallRoutes };\n },\n },\n {\n id: 'browser',\n // `browser-install` above already matched the SSE install streams; this\n // catches the remaining /api/browser/* handlers (extension, cdp,\n // cloakbrowser doctor/launch/install, playwright doctor/install, cloud).\n match: (path) => startsWithAny(path, ['/api/browser']),\n load: async () => {\n const { registerBrowserRoutes } = await import('./browser.js');\n return { register: registerBrowserRoutes };\n },\n },\n {\n id: 'config',\n match: (path) =>\n startsWithAny(path, [\n '/api/config',\n '/api/heartbeat/trigger',\n // Secret reveal handlers live in config routes but use /api/gateway and\n // /api/tools paths; without these prefixes the extension-gateway bundle\n // matches first and returns 404 (no handler for multi-segment paths).\n '/api/gateway/reveal-auth-secret',\n '/api/tools/web/reveal-search-api-key',\n ]),\n load: async () => {\n const { registerConfigRoutes } = await import('./config.js');\n return { register: registerConfigRoutes };\n },\n },\n {\n id: 'doctor',\n match: (path) => startsWithAny(path, ['/api/doctor']),\n load: async () => {\n const { registerDoctorRoutes } = await import('./doctor.js');\n return { register: registerDoctorRoutes };\n },\n },\n {\n id: 'dreaming',\n match: (path) => startsWithAny(path, ['/api/dreaming']),\n load: async () => {\n const { registerDreamingRoutes } = await import('./dreaming.js');\n return { register: registerDreamingRoutes };\n },\n },\n {\n id: 'agents',\n match: (path) => startsWithAny(path, ['/api/agents', '/api/voice/models']),\n load: async () => {\n const { registerAgentsRoutes } = await import('./agents.js');\n return { register: registerAgentsRoutes };\n },\n },\n {\n id: 'auth-registry-extensions',\n match: (path) =>\n startsWithAny(path, [\n '/api/auth',\n '/api/registry',\n '/api/extensions',\n '/api/context',\n '/api/marketplace',\n ]),\n load: async () => {\n const { registerAuthRegistryExtensionsRoutes } = await import('./auth-registry-extensions.js');\n return { register: registerAuthRegistryExtensionsRoutes };\n },\n },\n {\n id: 'models',\n match: (path) =>\n startsWithAny(path, ['/api/models', '/api/models-json', '/api/providers', '/api/image']),\n load: async () => {\n const { registerModelsRoutes } = await import('./models.js');\n return { register: registerModelsRoutes };\n },\n },\n {\n id: 'commands-skills',\n match: (path) => startsWithAny(path, ['/api/commands', '/api/skills']),\n load: async () => {\n const { registerCommandsSkillsRoutes } = await import('./commands-skills.js');\n return { register: registerCommandsSkillsRoutes };\n },\n },\n {\n id: 'cron',\n match: (path) => startsWithAny(path, ['/api/cron']),\n load: async () => {\n const { registerCronRoutes } = await import('./cron.js');\n return { register: registerCronRoutes };\n },\n },\n {\n id: 'goals',\n match: (path) => startsWithAny(path, ['/api/goals']),\n load: async () => {\n const { registerGoalsRoutes } = await import('./goals.js');\n return { register: registerGoalsRoutes };\n },\n },\n {\n id: 'notes',\n match: (path) => startsWithAny(path, ['/api/notes']),\n load: async () => {\n const { registerNotesRoutes } = await import('./notes.js');\n return { register: registerNotesRoutes };\n },\n },\n {\n id: 'home',\n match: (path) => startsWithAny(path, ['/api/home']),\n load: async () => {\n const { registerHomeRoutes } = await import('./home.js');\n return { register: registerHomeRoutes };\n },\n },\n {\n id: 'workflows',\n match: (path) => startsWithAny(path, ['/api/workflows']),\n load: async () => {\n const { registerWorkflowRoutes } = await import('./workflows.js');\n return { register: registerWorkflowRoutes };\n },\n },\n {\n id: 'logs',\n match: (path) => startsWithAny(path, ['/api/logs']),\n load: async () => {\n const { registerLogsRoutes } = await import('./logs.js');\n return { register: registerLogsRoutes };\n },\n },\n {\n id: 'shares',\n match: (path) => startsWithAny(path, ['/api/shares']),\n load: async () => {\n const { registerShareRoutes } = await import('./shares.js');\n return { register: registerShareRoutes };\n },\n },\n {\n id: 'site-shares',\n match: (path) => startsWithAny(path, ['/api/site-shares']),\n load: async () => {\n const { registerSiteShareRoutes } = await import('./site-shares.js');\n return { register: registerSiteShareRoutes };\n },\n },\n {\n id: 'tunnel',\n match: (path) => startsWithAny(path, ['/api/tunnel']),\n load: async () => {\n const { registerTunnelRoutes } = await import('./tunnel.js');\n return { register: registerTunnelRoutes };\n },\n },\n {\n id: 'exposure',\n match: (path) => startsWithAny(path, ['/api/exposure']),\n load: async () => {\n const { registerExposureRoutes } = await import('./exposure.js');\n return { register: registerExposureRoutes };\n },\n },\n {\n id: 'extension-gateway',\n match: (path) => startsWithAny(path, ['/api/gateway']),\n load: async () => {\n const { registerExtensionGatewayRoutes } = await import('./extension-gateway.js');\n return { register: registerExtensionGatewayRoutes };\n },\n },\n {\n id: 'update',\n match: (path) => startsWithAny(path, ['/api/update']),\n load: async () => {\n const { registerUpdateRoutes } = await import('./update.js');\n return { register: registerUpdateRoutes };\n },\n },\n {\n id: 'voice',\n match: (path) => startsWithAny(path, ['/api/voice']) && path !== '/api/voice/models',\n load: async () => {\n const { registerVoiceRoutes } = await import('./voice.js');\n return { register: registerVoiceRoutes };\n },\n },\n {\n id: 'connectors',\n match: (path) => startsWithAny(path, ['/api/connectors']),\n load: async () => {\n const { registerConnectorRoutes } = await import('./connectors.js');\n return { register: registerConnectorRoutes };\n },\n },\n {\n id: 'mcp',\n match: (path) => startsWithAny(path, ['/api/mcp']),\n load: async () => {\n const { registerMcpRoutes } = await import('./mcp.js');\n return { register: registerMcpRoutes };\n },\n },\n];\n\nexport const APP_LAZY_ROUTE_BUNDLES: readonly AppLazyRouteBundle[] = [\n {\n id: 'shares-public',\n prefixes: ['/s'],\n match: (path) => startsWithAny(path, ['/s']),\n load: async () => {\n const { registerSharePublicRoutes } = await import('./shares.js');\n return { registerOnApp: registerSharePublicRoutes };\n },\n },\n {\n id: 'tunnel-public',\n prefixes: [\n '/api/tunnel/pair/ping',\n '/api/tunnel/pair/validate-url',\n '/api/tunnel/exchange-token',\n ],\n match: (path) =>\n path === '/api/tunnel/exchange-token' ||\n path === '/api/tunnel/pair/ping' ||\n path === '/api/tunnel/pair/validate-url',\n load: async () => {\n const { registerTunnelPublicRoutes } = await import('./tunnel.js');\n return { registerOnApp: registerTunnelPublicRoutes };\n },\n },\n];\n\nexport function findAuthenticatedLazyRouteBundle(path: string): AuthenticatedLazyRouteBundle | undefined {\n return AUTHENTICATED_LAZY_ROUTE_BUNDLES.find((bundle) => bundle.match(path));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { parseMediaUri } from "../../../media/uri.js";
|
|
2
|
+
import { mimeTypeFromMediaPath } from "../../../media/store.js";
|
|
3
|
+
import { readMediaReference } from "../../../media/media-reference.js";
|
|
4
|
+
import { pendingTranscriptReferencesMediaUri } from "../../../agent/inbound/attachment-pipeline.js";
|
|
5
|
+
import { messagesReferenceMediaUri } from "../../../media/session-references.js";
|
|
6
|
+
import { createGatewayRouteLogger } from "../lib/route-logger.js";
|
|
7
|
+
//#region src/gateway/hono/routes/media.ts
|
|
8
|
+
const log = createGatewayRouteLogger("Media");
|
|
9
|
+
function registerMediaRoutes(authenticated, deps) {
|
|
10
|
+
authenticated.get("/api/media/read", async (c) => {
|
|
11
|
+
const uriRaw = c.req.query("uri");
|
|
12
|
+
if (!uriRaw || typeof uriRaw !== "string") return c.json({
|
|
13
|
+
ok: false,
|
|
14
|
+
error: { message: "Missing uri" }
|
|
15
|
+
}, 400);
|
|
16
|
+
const sessionKey = c.req.query("sessionKey");
|
|
17
|
+
if (!sessionKey || typeof sessionKey !== "string") return c.json({
|
|
18
|
+
ok: false,
|
|
19
|
+
error: { message: "Missing sessionKey" }
|
|
20
|
+
}, 400);
|
|
21
|
+
try {
|
|
22
|
+
const parsed = parseMediaUri(uriRaw.trim());
|
|
23
|
+
if (!messagesReferenceMediaUri(await deps.service.sessionIndexInstance.loadMessages(sessionKey), parsed.uri) && !pendingTranscriptReferencesMediaUri(sessionKey, parsed.uri)) return c.json({
|
|
24
|
+
ok: false,
|
|
25
|
+
error: { message: "Not found" }
|
|
26
|
+
}, 404);
|
|
27
|
+
const { buffer, path } = await readMediaReference(parsed.uri);
|
|
28
|
+
const contentType = mimeTypeFromMediaPath(path);
|
|
29
|
+
return new Response(buffer, { headers: {
|
|
30
|
+
"Content-Type": contentType,
|
|
31
|
+
"Cache-Control": "private, max-age=3600"
|
|
32
|
+
} });
|
|
33
|
+
} catch (err) {
|
|
34
|
+
const em = err instanceof Error ? err.message : String(err);
|
|
35
|
+
log.warn({
|
|
36
|
+
err,
|
|
37
|
+
uri: uriRaw,
|
|
38
|
+
errorMessage: em
|
|
39
|
+
}, `Media read failed: ${em}`);
|
|
40
|
+
return c.json({
|
|
41
|
+
ok: false,
|
|
42
|
+
error: { message: "Not found" }
|
|
43
|
+
}, 404);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { registerMediaRoutes };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","names":[],"sources":["../../../../../src/gateway/hono/routes/media.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { pendingTranscriptReferencesMediaUri } from '../../../agent/inbound/attachment-pipeline.js';\nimport { readMediaReference } from '../../../media/media-reference.js';\nimport { messagesReferenceMediaUri } from '../../../media/session-references.js';\nimport { parseMediaUri } from '../../../media/uri.js';\nimport { mimeTypeFromMediaPath } from '../../../media/store.js';\nimport { createGatewayRouteLogger } from '../lib/route-logger.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nconst log = createGatewayRouteLogger('Media');\n\nexport function registerMediaRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n authenticated.get('/api/media/read', async (c) => {\n const uriRaw = c.req.query('uri');\n if (!uriRaw || typeof uriRaw !== 'string') {\n return c.json({ ok: false, error: { message: 'Missing uri' } }, 400);\n }\n const sessionKey = c.req.query('sessionKey');\n if (!sessionKey || typeof sessionKey !== 'string') {\n return c.json({ ok: false, error: { message: 'Missing sessionKey' } }, 400);\n }\n try {\n const parsed = parseMediaUri(uriRaw.trim());\n const messages = await deps.service.sessionIndexInstance.loadMessages(sessionKey);\n if (\n !messagesReferenceMediaUri(messages, parsed.uri) &&\n !pendingTranscriptReferencesMediaUri(sessionKey, parsed.uri)\n ) {\n return c.json({ ok: false, error: { message: 'Not found' } }, 404);\n }\n const { buffer, path } = await readMediaReference(parsed.uri);\n const contentType = mimeTypeFromMediaPath(path);\n return new Response(buffer, {\n headers: {\n 'Content-Type': contentType,\n 'Cache-Control': 'private, max-age=3600',\n },\n });\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n log.warn({ err, uri: uriRaw, errorMessage: em }, `Media read failed: ${em}`);\n return c.json({ ok: false, error: { message: 'Not found' } }, 404);\n }\n });\n}\n"],"mappings":";;;;;;;AAUA,MAAM,MAAM,yBAAyB,QAAQ;AAE7C,SAAgB,oBAAoB,eAAqB,MAAoC;AAC3F,eAAc,IAAI,mBAAmB,OAAO,MAAM;EAChD,MAAM,SAAS,EAAE,IAAI,MAAM,MAAM;AACjC,MAAI,CAAC,UAAU,OAAO,WAAW,SAC/B,QAAO,EAAE,KAAK;GAAE,IAAI;GAAO,OAAO,EAAE,SAAS,eAAe;GAAE,EAAE,IAAI;EAEtE,MAAM,aAAa,EAAE,IAAI,MAAM,aAAa;AAC5C,MAAI,CAAC,cAAc,OAAO,eAAe,SACvC,QAAO,EAAE,KAAK;GAAE,IAAI;GAAO,OAAO,EAAE,SAAS,sBAAsB;GAAE,EAAE,IAAI;AAE7E,MAAI;GACF,MAAM,SAAS,cAAc,OAAO,MAAM,CAAC;AAE3C,OACE,CAAC,0BAA0B,MAFN,KAAK,QAAQ,qBAAqB,aAAa,WAAW,EAE1C,OAAO,IAAI,IAChD,CAAC,oCAAoC,YAAY,OAAO,IAAI,CAE5D,QAAO,EAAE,KAAK;IAAE,IAAI;IAAO,OAAO,EAAE,SAAS,aAAa;IAAE,EAAE,IAAI;GAEpE,MAAM,EAAE,QAAQ,SAAS,MAAM,mBAAmB,OAAO,IAAI;GAC7D,MAAM,cAAc,sBAAsB,KAAK;AAC/C,UAAO,IAAI,SAAS,QAAQ,EAC1B,SAAS;IACP,gBAAgB;IAChB,iBAAiB;IAClB,EACF,CAAC;WACK,KAAK;GACZ,MAAM,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC3D,OAAI,KAAK;IAAE;IAAK,KAAK;IAAQ,cAAc;IAAI,EAAE,sBAAsB,KAAK;AAC5E,UAAO,EAAE,KAAK;IAAE,IAAI;IAAO,OAAO,EAAE,SAAS,aAAa;IAAE,EAAE,IAAI;;GAEpE"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { resolveModelsJsonPath } from "../../../config/paths.js";
|
|
2
|
-
import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
|
|
3
2
|
import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
|
|
4
3
|
import { init_models_json, loadModelsJson, saveModelsJson, validateModelsConfig } from "../../../config/models-json.js";
|
|
5
4
|
import { getModelRegistry } from "../../../providers/model-registry.js";
|
|
5
|
+
import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
|
|
6
6
|
import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
|
|
7
7
|
import { PROVIDER_META, getAllModels, getAllProviders, getAvailableModels, getProviderAuthState, init_providers, isProviderConfigured } from "../../../providers/index.js";
|
|
8
8
|
import { getImageGenerationProvider } from "../../../agent/image/generation/provider-registry.js";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { buildSessionKey, init_session_key, parseSessionKey } from "../../../routing/session-key.js";
|
|
2
2
|
import { agentExists, getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-route.js";
|
|
3
3
|
import { messagesToClientHistory } from "../../../session/client-history.js";
|
|
4
|
+
import { deleteMediaUrisNoLongerReferenced } from "../../../media/session-references.js";
|
|
4
5
|
import { createGatewayRouteLogger, logRouteError } from "../lib/route-logger.js";
|
|
5
6
|
import { computeUserRoundDeleteRange } from "../../../session/user-round-delete.js";
|
|
6
7
|
import { respondStartupUnavailable } from "../lib/startup-unavailable.js";
|
|
@@ -330,8 +331,13 @@ function registerSessionsRoutes(authenticated, deps) {
|
|
|
330
331
|
if (startIndex < 0 || count <= 0) return c.json({ error: "Invalid startIndex or count" }, 400);
|
|
331
332
|
if (startIndex >= loaded.length) return c.json({ error: "Index out of range" }, 400);
|
|
332
333
|
const deleteCount = Math.min(count, loaded.length - startIndex);
|
|
334
|
+
const removed = loaded.slice(startIndex, startIndex + deleteCount);
|
|
333
335
|
const next = loaded.slice(0, startIndex).concat(loaded.slice(startIndex + deleteCount));
|
|
334
336
|
await service.sessionIndexInstance.saveMessages(key, next);
|
|
337
|
+
await deleteMediaUrisNoLongerReferenced({
|
|
338
|
+
removed,
|
|
339
|
+
remaining: next
|
|
340
|
+
});
|
|
335
341
|
return c.json({
|
|
336
342
|
ok: true,
|
|
337
343
|
deleted: deleteCount
|