@xopcai/xopc 0.0.324 → 0.0.329
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/README.md +4 -3
- package/README.zh-CN.md +4 -3
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B-Gczr_A.js → agent-avatar-dicebear-Bs1qnnhD.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DHJyAT7t.js +1 -0
- package/dist/gateway/static/root/assets/agent-plugin-dialog-DLKj_iIh.js +1 -0
- package/dist/gateway/static/root/assets/agents-SXZ5O0g4.js +70 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BwWdVRlb.js → app-management-settings-panel-BrIji9B5.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-EoXNDO1j.js → appearance-settings-Uts-MQ7K.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DcclVdxW.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-B_T0uMvL.js → archive-plugin-_EzRfBuI.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-D9DDwxd2.js → attachment-load-CHg7_XFl.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-jI9vNr2r.js → automations-page-CGMErk_w.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-Cc4yqiF6.js +7 -0
- package/dist/gateway/static/root/assets/{binary-plugins-Dzsxh9OL.js → binary-plugins-D3WB-tVn.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CWUUgWWk.js → block-editor-Cm1W-14I.js} +53 -53
- package/dist/gateway/static/root/assets/box-DvYoGszj.js +1 -0
- package/dist/gateway/static/root/assets/braces-Cfmtagno.js +1 -0
- package/dist/gateway/static/root/assets/{browser-automation-inputs-DSWXq9lI.js → browser-automation-inputs-VnvK-GQP.js} +1 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CZYCvSSU.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-DDz9PE6m.js +3 -0
- package/dist/gateway/static/root/assets/calendar-clock-D-quYVPe.js +1 -0
- package/dist/gateway/static/root/assets/capabilities-page-DH3aDk53.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-C8jMZAJl.js +8 -0
- package/dist/gateway/static/root/assets/capability-discover-page-CgGvsf3t.js +1 -0
- package/dist/gateway/static/root/assets/capability-header-actions-C3chJDQu.js +1 -0
- package/dist/gateway/static/root/assets/capability-icon-BYm2-nS-.js +1 -0
- package/dist/gateway/static/root/assets/channels-CuVS_KsY.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-WXZrEB3K.js → chat-terminal-dock-ClbmjCL2.js} +2 -2
- package/dist/gateway/static/root/assets/chevron-left-DqFhpbvK.js +1 -0
- package/dist/gateway/static/root/assets/clock-3-DnrAnuyZ.js +1 -0
- package/dist/gateway/static/root/assets/computer-settings-page-BfZaf516.js +1 -0
- package/dist/gateway/static/root/assets/connector-service-page-F-fYNIx8.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-B4SLpvSL.js +2 -0
- package/dist/gateway/static/root/assets/date-picker-DXQTsUJn.js +1 -0
- package/dist/gateway/static/root/assets/dependency-picker-B_z3zihW.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DPVPqFlh.js → desktop-pet-C1TZzKS3.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-B5JGIfqn.js +1 -0
- package/dist/gateway/static/root/assets/device-pairing-wizard-DFYK_Ywf.js +1 -0
- package/dist/gateway/static/root/assets/directory-picker-path-field-BfxaNwMB.js +1 -0
- package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-cuG5Lnwf.js → extension-debug-page-Bs8_FYCm.js} +1 -1
- package/dist/gateway/static/root/assets/extension-marketplace-api-DqV4YRYs.js +1 -0
- package/dist/gateway/static/root/assets/{extension-page-BCTAXdyE.js → extension-page-DH5vFbBw.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-kadW_icu.js → extension-settings-page-hGKovxxC.js} +1 -1
- package/dist/gateway/static/root/assets/external-link-DjqjBmc3.js +1 -0
- package/dist/gateway/static/root/assets/eye-CABVeTq0.js +1 -0
- package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-swr-CoQVulMd.js → gateway-config-swr-BYMrbKZE.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-BIsiP-JI.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-B5GJ-CQV.js → gateway-startup-retry-DMqYXHAn.js} +1 -1
- package/dist/gateway/static/root/assets/gauge-C78eD2BA.js +1 -0
- package/dist/gateway/static/root/assets/git-branch-Dh9uxTot.js +1 -0
- package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +1 -0
- package/dist/gateway/static/root/assets/home-page-CoBivEvx.js +1 -0
- package/dist/gateway/static/root/assets/image-Cwyalflz.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-DvWDkbk1.js → image-generation-api-D1sQGaJz.js} +1 -1
- package/dist/gateway/static/root/assets/imports-page-rssb4rjP.js +1 -0
- package/dist/gateway/static/root/assets/inbox-DNoSz682.js +1 -0
- package/dist/gateway/static/root/assets/index-C4QN4gCi.css +1 -0
- package/dist/gateway/static/root/assets/index-Cr4SINLG.js +121 -0
- package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C1fKIjz4.js → keyboard-shortcuts-settings-CMitbles.js} +1 -1
- package/dist/gateway/static/root/assets/layout-grid-CEVZdVFU.js +1 -0
- package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +1 -0
- package/dist/gateway/static/root/assets/list-BBGUdmkF.js +1 -0
- package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-Di82Oacm.js +1 -0
- package/dist/gateway/static/root/assets/local-apps-page-CCvA9d9L.js +1 -0
- package/dist/gateway/static/root/assets/{locale-store-BPZR8x9b.js → locale-store-BSkKhYkc.js} +1 -1
- package/dist/gateway/static/root/assets/lock-keyhole-DEK5kH0u.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-BK8ol1q0.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-CebXkEtB.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-Dft8ASFD.js → markdown-view-DXubGEic.js} +2 -2
- package/dist/gateway/static/root/assets/{media-plugins-Cjj-fidX.js → media-plugins-DLJrmU9J.js} +1 -1
- package/dist/gateway/static/root/assets/message-circle-Badhj-4D.js +1 -0
- package/dist/gateway/static/root/assets/message-square-fVE7Ghj1.js +1 -0
- package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +1 -0
- package/dist/gateway/static/root/assets/messages-D0G_sZvA.js +3 -0
- package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +1 -0
- package/dist/gateway/static/root/assets/models-hub-cache-B0EUPwTv.js +1 -0
- package/dist/gateway/static/root/assets/network-BUQLY1BV.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-xsKDIJdK.js +5 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-1qg2v-9j.js +1 -0
- package/dist/gateway/static/root/assets/notes-page-BFm7XnWH.js +8 -0
- package/dist/gateway/static/root/assets/page-context-capture-button-C3JiQEKD.js +1 -0
- package/dist/gateway/static/root/assets/paperclip-f1HujQY1.js +1 -0
- package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +1 -0
- package/dist/gateway/static/root/assets/power-ZI-pBczI.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-buk_gdip.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-DlpCi5zT.js → product-open-page-DwEEO0Ak.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CRQGCRSU.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DcqylysA.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-DWWO6ajd.js → registry-api-tx8XCHOs.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Cq5MaiRW.js +1 -0
- package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BT_ANpaT.js → runtime-tools-settings-panel-De7HmmBu.js} +2 -2
- package/dist/gateway/static/root/assets/scenes-page-GXJ-b3dO.js +2 -0
- package/dist/gateway/static/root/assets/{schema-form-BcqsqSsV.js → schema-form-DPMEuj5D.js} +1 -1
- package/dist/gateway/static/root/assets/search-DA7gz22f.js +1 -0
- package/dist/gateway/static/root/assets/server-BlHCBjiE.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-C6FwYIRA.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BEyQiZs0.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-DM0D-BQ_.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-B65vii9U.js → settings-page-CWS9yOH3.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-layout-X1x-2Cp9.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-BhGKiTPf.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-BS8o58NJ.js → share-preview-page-CcRi2yGy.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DNmcCBfX.js +1 -0
- package/dist/gateway/static/root/assets/skill-api-BCAV_F1P.js +1 -0
- package/dist/gateway/static/root/assets/skill-card-icon-BrrpZ3Mw.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-BEV2WXGk.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-C8zOGpKw.js +2 -0
- package/dist/gateway/static/root/assets/star-BUWJqJ5c.js +1 -0
- package/dist/gateway/static/root/assets/stethoscope-DRqTAtjD.js +1 -0
- package/dist/gateway/static/root/assets/store-SzD1Jvgm.js +1 -0
- package/dist/gateway/static/root/assets/system-settings-panel-C_lajq9u.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-Dk8Bmlhw.js +1 -0
- package/dist/gateway/static/root/assets/tunnel-api-CYvKiE_f.js +1 -0
- package/dist/gateway/static/root/assets/upload-rrb46c3c.js +1 -0
- package/dist/gateway/static/root/assets/use-autosave-ZTHe1zCM.js +1 -0
- package/dist/gateway/static/root/assets/user-model-page-C_SPNZbP.js +2 -0
- package/dist/gateway/static/root/assets/user-round-C9jxPhMR.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DJV-qERt.js → voice-api-key-field-C8Kpkct-.js} +1 -1
- package/dist/gateway/static/root/assets/voice-config-api-BvzxINUk.js +1 -0
- package/dist/gateway/static/root/assets/wand-sparkles-DWuJz5ya.js +1 -0
- package/dist/gateway/static/root/assets/{work-discovery-overlay-DcHhy54L.js → work-discovery-overlay-ClB6T-dm.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-X0Cyh2AR.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-BrL6dzf0.js +6 -0
- package/dist/gateway/static/root/connector-icons/SOURCES.md +1 -0
- package/dist/gateway/static/root/connector-icons/wecom.svg +9 -0
- package/dist/gateway/static/root/index.html +26 -8
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-instance-gateway.d.ts +2 -2
- package/dist/src/agent/agent-manager.d.ts +4 -2
- package/dist/src/agent/agent-manager.js +58 -19
- package/dist/src/agent/background-review/coordinator.d.ts +2 -7
- package/dist/src/agent/background-review/coordinator.js +17 -34
- package/dist/src/agent/background-review/prompts.d.ts +13 -5
- package/dist/src/agent/background-review/prompts.js +17 -12
- package/dist/src/agent/background-review/run-background-review.d.ts +3 -3
- package/dist/src/agent/background-review/run-background-review.js +58 -43
- package/dist/src/agent/context/execution-context.js +5 -2
- package/dist/src/agent/mcp/index.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +2 -2
- package/dist/src/agent/mcp/oauth/index.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +2 -2
- package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +3 -0
- package/dist/src/agent/service/direct-turn-helpers.js +1 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +12 -0
- package/dist/src/agent/tools/user-context-tool.js +29 -4
- package/dist/src/automations/domain/types.d.ts +7 -1
- package/dist/src/automations/service/action-executor.d.ts +2 -2
- package/dist/src/automations/service/action-executor.js +36 -13
- package/dist/src/automations/service/automation-service.js +2 -1
- package/dist/src/browser/automations/index.js +2 -2
- package/dist/src/browser/automations/service.d.ts +11 -2
- package/dist/src/browser/automations/service.js +19 -5
- package/dist/src/capabilities/readiness/from-config.d.ts +0 -1
- package/dist/src/capabilities/readiness/from-config.js +2 -4
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-agent-plugin.js +2 -1
- package/dist/src/config/schema.js +4 -4
- package/dist/src/connectors/china-catalog.js +5 -1
- package/dist/src/connectors/connected-source-ingestion.js +6 -1
- package/dist/src/connectors/connected-source-observations.d.ts +10 -0
- package/dist/src/connectors/connected-source-observations.js +80 -0
- package/dist/src/connectors/connected-source-understanding.js +198 -8
- package/dist/src/connectors/learning-coordinator.js +63 -26
- package/dist/src/connectors/learning-recipes.js +19 -2
- package/dist/src/discussions/audio-repair.d.ts +1 -1
- package/dist/src/discussions/live-worker.js +1 -3
- package/dist/src/discussions/recording.js +2 -2
- package/dist/src/discussions/sealer.js +2 -2
- package/dist/src/extensions/agent-plugins/auth.d.ts +2 -2
- package/dist/src/extensions/agent-plugins/auth.js +6 -35
- package/dist/src/extensions/agent-plugins/credentials.d.ts +2 -0
- package/dist/src/extensions/agent-plugins/credentials.js +37 -0
- package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +1 -0
- package/dist/src/extensions/agent-plugins/plugin-oauth-scope.js +8 -0
- package/dist/src/extensions/marketplace.d.ts +4 -0
- package/dist/src/extensions/marketplace.js +4 -0
- package/dist/src/gateway/file-space-service.d.ts +9 -2
- package/dist/src/gateway/hono/routes/agent-plugins.js +2 -1
- package/dist/src/gateway/hono/routes/config.js +0 -3
- package/dist/src/gateway/hono/routes/connectors.js +3 -10
- package/dist/src/gateway/hono/routes/context-sources.d.ts +0 -1
- package/dist/src/gateway/hono/routes/context-sources.js +12 -15
- package/dist/src/gateway/hono/routes/status.js +0 -1
- package/dist/src/gateway/hono/routes/user-model.js +21 -3
- package/dist/src/gateway/hono/routes/voice.js +0 -67
- package/dist/src/gateway/service.js +6 -4
- package/dist/src/media-understanding/types.d.ts +1 -1
- package/dist/src/memory-maintenance/service.d.ts +1 -0
- package/dist/src/memory-maintenance/service.js +13 -0
- package/dist/src/migrations/retired-local-stt.d.ts +2 -0
- package/dist/src/migrations/retired-local-stt.js +52 -0
- package/dist/src/migrations/runner.js +2 -1
- package/dist/src/session/turn-outcome-projector.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -0
- package/dist/src/storage/sqlite/migrations/207_user_model_policy_contract.sql +121 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/sql-assets.d.ts +1 -0
- package/dist/src/storage/sqlite/sql-assets.js +7 -4
- package/dist/src/tasks/index.js +2 -2
- package/dist/src/tasks/task-application-service.d.ts +1 -0
- package/dist/src/tasks/task-application-service.js +4 -2
- package/dist/src/tasks/task-context-assembler.js +10 -1
- package/dist/src/tasks/task-run-dispatcher.d.ts +1 -0
- package/dist/src/tasks/task-run-dispatcher.js +15 -2
- package/dist/src/user-context/sources/consent-repository.d.ts +7 -0
- package/dist/src/user-context/sources/consent-repository.js +81 -0
- package/dist/src/user-context/sources/index.d.ts +1 -0
- package/dist/src/user-context/sources/index.js +2 -1
- package/dist/src/user-context/sources/repository.js +73 -1
- package/dist/src/user-context/sources/types.d.ts +16 -0
- package/dist/src/user-model/action-rule-suggestions.d.ts +11 -0
- package/dist/src/user-model/action-rule-suggestions.js +29 -0
- package/dist/src/user-model/bootstrap.js +1 -1
- package/dist/src/user-model/capture/executor.js +83 -7
- package/dist/src/user-model/capture/semantic.d.ts +5 -2
- package/dist/src/user-model/capture/semantic.js +27 -11
- package/dist/src/user-model/domain.d.ts +26 -0
- package/dist/src/user-model/domain.js +40 -2
- package/dist/src/user-model/index.d.ts +2 -0
- package/dist/src/user-model/index.js +6 -4
- package/dist/src/user-model/maintenance-policy.d.ts +1 -0
- package/dist/src/user-model/maintenance-policy.js +13 -0
- package/dist/src/user-model/observation-repository.d.ts +48 -0
- package/dist/src/user-model/observation-repository.js +100 -0
- package/dist/src/user-model/repository.d.ts +5 -0
- package/dist/src/user-model/repository.js +121 -10
- package/dist/src/user-model/usage-policy.d.ts +5 -2
- package/dist/src/user-model/usage-policy.js +2 -2
- package/dist/src/voice/audio/normalize.d.ts +1 -1
- package/dist/src/voice/audio/normalize.js +1 -1
- package/dist/src/voice/{local → audio}/wav.js +1 -1
- package/dist/src/voice/language-profile.js +10 -16
- package/dist/src/voice/metadata/builtin.js +0 -46
- package/dist/src/voice/stt/providers/index.d.ts +0 -1
- package/dist/src/voice/stt/providers/index.js +1 -2
- package/dist/src/voice/stt/types.js +3 -4
- package/dist/src/voice/tts/merge-config.js +1 -1
- package/dist/src/voice/tts/speech-registry.d.ts +1 -1
- package/dist/src/voice/tts/types.d.ts +1 -1
- package/dist/src/work-discovery/analyzer.js +6 -5
- package/dist/src/work-discovery/service.js +2 -2
- package/dist/src/work-discovery/types.d.ts +1 -1
- package/dist/src/workflows/context/workflow-context.js +5 -1
- package/dist/src/workflows/index.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +13 -4
- package/package.json +13 -17
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CxcIHW_Z.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-CNuqJcHQ.js +0 -1
- package/dist/gateway/static/root/assets/agents-CPpmkx7O.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-6xEgLDv8.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-rztQnZDk.js +0 -7
- package/dist/gateway/static/root/assets/browser-automations-page-D96o3bDY.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-DUQzQ3ic.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CKWtXof8.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-C8ducWB7.js +0 -1
- package/dist/gateway/static/root/assets/computer-settings-page-uy9YDwxJ.js +0 -1
- package/dist/gateway/static/root/assets/connector-service-page-BpF0SjB9.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-eZTfIMWI.js +0 -2
- package/dist/gateway/static/root/assets/date-picker-Do1dl0La.js +0 -1
- package/dist/gateway/static/root/assets/dependency-picker-BhS8s080.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-Dv3vG9HZ.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-DdvO1O6W.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CLZyN-u9.js +0 -1
- package/dist/gateway/static/root/assets/home-page-BSqg-JE9.js +0 -1
- package/dist/gateway/static/root/assets/imports-page-_pddpuej.js +0 -1
- package/dist/gateway/static/root/assets/index-BKL5tg2f.css +0 -1
- package/dist/gateway/static/root/assets/index-CJuypaNt.js +0 -121
- package/dist/gateway/static/root/assets/local-app-workbench-page-DXFnYiA0.js +0 -1
- package/dist/gateway/static/root/assets/local-apps-page-CkXKS5xe.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-C33z-ife.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-8eDZb0uS.js +0 -1
- package/dist/gateway/static/root/assets/messages-kFWhF6_t.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-C95RtLuL.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-kFxknjMR.js +0 -8
- package/dist/gateway/static/root/assets/page-context-capture-button-OUL3fEYh.js +0 -1
- package/dist/gateway/static/root/assets/page-tabs-CVbY7_N5.js +0 -1
- package/dist/gateway/static/root/assets/preview-open-alternatives-CKiIby0r.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-LPAxUszX.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-Cbyb4hyy.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BtDFZc6g.js +0 -1
- package/dist/gateway/static/root/assets/scenes-page-CJlc-mg1.js +0 -2
- package/dist/gateway/static/root/assets/sessions-page-CUo6-iV2.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-XeSxPjP7.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-Dol9j_pF.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-layout-eqTUTW2L.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BCt__prc.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-BsjSqEnw.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-evN7gs0S.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BifYwEhe.js +0 -2
- package/dist/gateway/static/root/assets/skills-page.utils-DOk-iOvN.js +0 -1
- package/dist/gateway/static/root/assets/system-settings-panel-CcSvoHfY.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-pCRG7Jb3.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-DDGMf44u.js +0 -1
- package/dist/gateway/static/root/assets/use-autosave-DiIkxIq7.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-CvYeM0Ml.js +0 -2
- package/dist/gateway/static/root/assets/voice-config-api-BaxITrwZ.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-DbVtLh0R.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-CT8ouKcB.js +0 -6
- package/dist/src/voice/local/model-files.d.ts +0 -14
- package/dist/src/voice/local/model-files.js +0 -92
- package/dist/src/voice/local/model-manager.d.ts +0 -18
- package/dist/src/voice/local/model-manager.js +0 -133
- package/dist/src/voice/local/models.d.ts +0 -28
- package/dist/src/voice/local/models.js +0 -99
- package/dist/src/voice/local/provider-switch.d.ts +0 -4
- package/dist/src/voice/local/provider-switch.js +0 -36
- package/dist/src/voice/local/runtime-client.d.ts +0 -28
- package/dist/src/voice/local/runtime-client.js +0 -183
- package/dist/src/voice/local/runtime-worker.d.ts +0 -1
- package/dist/src/voice/local/runtime-worker.js +0 -271
- package/dist/src/voice/stt/providers/local-transcription.d.ts +0 -2
- package/dist/src/voice/stt/providers/local-transcription.js +0 -53
- /package/dist/src/voice/{local → audio}/wav.d.ts +0 -0
|
@@ -67,6 +67,10 @@ async function fetchExtensionCatalogFromStore() {
|
|
|
67
67
|
npmPackage: name,
|
|
68
68
|
version: typeof it.latestVersion === "string" ? it.latestVersion : void 0,
|
|
69
69
|
author,
|
|
70
|
+
...typeof it.branding?.iconUrl === "string" && typeof it.branding.iconSha256 === "string" ? { branding: {
|
|
71
|
+
iconUrl: it.branding.iconUrl,
|
|
72
|
+
iconSha256: it.branding.iconSha256
|
|
73
|
+
} } : {},
|
|
70
74
|
verified: author === "xopcai"
|
|
71
75
|
});
|
|
72
76
|
}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { FileSpaceService } from '../files/file-service.js';
|
|
2
|
-
|
|
2
|
+
type GatewayFileSpaceHost = {
|
|
3
|
+
currentConfig: ConstructorParameters<typeof FileSpaceService>[0] extends () => infer T ? T : never;
|
|
4
|
+
projects: ConstructorParameters<typeof FileSpaceService>[1];
|
|
5
|
+
sessions: {
|
|
6
|
+
getEffectiveWorkspacePath(conversationId: string): Promise<string>;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
3
9
|
/** Share the file registry, including session-specific spaces, across gateway routes. */
|
|
4
|
-
export declare function getGatewayFileSpaceService(service:
|
|
10
|
+
export declare function getGatewayFileSpaceService(service: GatewayFileSpaceHost): FileSpaceService;
|
|
11
|
+
export {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { AgentPluginStore } from "../../../extensions/agent-plugins/store.js";
|
|
2
|
-
import {
|
|
2
|
+
import { savePluginAuthBinding } from "../../../extensions/agent-plugins/auth.js";
|
|
3
3
|
import { disposeAllSessionMcpRuntimes } from "../../../agent/mcp/bundle-mcp-runtime.js";
|
|
4
4
|
import { withAgentPluginSource } from "../../../extensions/agent-plugins/sources.js";
|
|
5
5
|
import { agentPluginInventoryRow } from "../../../extensions/agent-plugins/inventory.js";
|
|
6
|
+
import { removePluginCredentials } from "../../../extensions/agent-plugins/credentials.js";
|
|
6
7
|
import { z } from "zod";
|
|
7
8
|
//#region src/gateway/hono/routes/agent-plugins.ts
|
|
8
9
|
const sourceBody = z.strictObject({
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { enumerateLanGatewayCandidates } from "../../host.js";
|
|
2
2
|
import { getTunnelService } from "../../../tunnel/tunnel-service.js";
|
|
3
|
-
import { prepareLocalVoiceModelAfterProviderSwitch } from "../../../voice/local/provider-switch.js";
|
|
4
3
|
import { buildSafeWebConfigPayload } from "../lib/config-payload.js";
|
|
5
4
|
import { applyChannelsPatch } from "./config-patch/channels.js";
|
|
6
5
|
import { applyGatewayPatch } from "./config-patch/gateway.js";
|
|
@@ -37,7 +36,6 @@ function registerConfigRoutes(authenticated, deps) {
|
|
|
37
36
|
authenticated.patch("/api/config", strictRateLimitMiddleware, async (c) => {
|
|
38
37
|
const body = await c.req.json();
|
|
39
38
|
const config = service.currentConfig;
|
|
40
|
-
const previousSttProvider = config.tools?.media?.audio?.provider;
|
|
41
39
|
applyChannelsPatch(config, body);
|
|
42
40
|
const gatewayResult = applyGatewayPatch(config, body);
|
|
43
41
|
if (gatewayResult.ok === false) return c.json({
|
|
@@ -68,7 +66,6 @@ function registerConfigRoutes(authenticated, deps) {
|
|
|
68
66
|
ok: false,
|
|
69
67
|
error: result.error
|
|
70
68
|
}, 500);
|
|
71
|
-
prepareLocalVoiceModelAfterProviderSwitch(previousSttProvider, service.currentConfig);
|
|
72
69
|
const safeConfig = await buildSafeWebConfigPayload(service, { locale: localeFromRequest(c) });
|
|
73
70
|
return c.json({
|
|
74
71
|
ok: true,
|
|
@@ -28,12 +28,11 @@ import { composioLogoResponse } from "../../../connectors/composio-logo.js";
|
|
|
28
28
|
import { inspectManagedComposioStatus } from "../../../connectors/composio-managed-client.js";
|
|
29
29
|
import { appendComposioTriggerEvent, listComposioTriggerEvents } from "../../../connectors/composio-triggers.js";
|
|
30
30
|
import { ingestLocalFolderSource } from "../../../connectors/connected-source-ingestion.js";
|
|
31
|
-
import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
|
|
32
31
|
import { listUnderstandingSourceGrants, revokeUnderstandingSourceGrant } from "../../../user-context/sources/repository.js";
|
|
32
|
+
import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
|
|
33
33
|
import { setConnectorEnabled } from "../../../connectors/lifecycle.js";
|
|
34
34
|
import { projectComposioConnectionStatus } from "../../../connectors/runtime-status.js";
|
|
35
35
|
import { getGatewayPrincipal } from "../../security/gateway-principal.js";
|
|
36
|
-
import { markContextSourceAssertionsForReview } from "./context-sources.js";
|
|
37
36
|
import { registerCliConnectorRoutes } from "./cli-connectors.js";
|
|
38
37
|
//#region src/gateway/hono/routes/connectors.ts
|
|
39
38
|
init_logger();
|
|
@@ -289,10 +288,7 @@ function registerConnectorRoutes(authenticated, deps) {
|
|
|
289
288
|
if (connectionId && !policy.scanEnabled) {
|
|
290
289
|
service.setConnectorLearningPaused(connectionId, true);
|
|
291
290
|
const grant = listUnderstandingSourceGrants().find((item) => item.sourceKey === `connector-account:${account.id}`);
|
|
292
|
-
if (grant)
|
|
293
|
-
markContextSourceAssertionsForReview(grant.id);
|
|
294
|
-
revokeUnderstandingSourceGrant(grant.id);
|
|
295
|
-
}
|
|
291
|
+
if (grant) revokeUnderstandingSourceGrant(grant.id);
|
|
296
292
|
} else if (connectionId && previous?.scanEnabled === false) {
|
|
297
293
|
if (service.setConnectorLearningPaused(connectionId, false) === 0) service.requestConnectorLearning(connectionId, {
|
|
298
294
|
mode: "incremental",
|
|
@@ -381,10 +377,7 @@ function registerConnectorRoutes(authenticated, deps) {
|
|
|
381
377
|
await revokeComposioConnection(connectionId);
|
|
382
378
|
if (connection?.accountId) {
|
|
383
379
|
const grant = listUnderstandingSourceGrants().find((item) => item.sourceKey === `connector-account:${connection.accountId}`);
|
|
384
|
-
if (grant)
|
|
385
|
-
markContextSourceAssertionsForReview(grant.id);
|
|
386
|
-
revokeUnderstandingSourceGrant(grant.id);
|
|
387
|
-
}
|
|
380
|
+
if (grant) revokeUnderstandingSourceGrant(grant.id);
|
|
388
381
|
}
|
|
389
382
|
return c.json({
|
|
390
383
|
ok: true,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { Hono } from 'hono';
|
|
2
2
|
import type { AuthenticatedRouteDeps } from './deps.js';
|
|
3
|
-
export declare function markContextSourceAssertionsForReview(grantId: string): number;
|
|
4
3
|
export declare function registerContextSourceRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
|
|
@@ -3,10 +3,11 @@ import { getConnectorAccount } from "../../../storage/sqlite/connector-account-r
|
|
|
3
3
|
import { countKnowledgeSourceItems, deleteKnowledgeSourceItems } from "../../../storage/sqlite/knowledge-repository.js";
|
|
4
4
|
import { init_sqlite } from "../../../storage/sqlite/index.js";
|
|
5
5
|
import { init_agent_scope, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
|
|
6
|
-
import {
|
|
6
|
+
import { listUserModelObservations } from "../../../user-model/observation-repository.js";
|
|
7
7
|
import "../../../user-model/index.js";
|
|
8
|
-
import {
|
|
8
|
+
import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
|
|
9
9
|
import { getUnderstandingSourceGrant, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantPolicies } from "../../../user-context/sources/repository.js";
|
|
10
|
+
import { listConnectedContentCandidates, readConnectedContent } from "../../../connectors/content-enrichment.js";
|
|
10
11
|
import { listUnderstandingSourceDefinitions } from "../../../user-context/sources/catalog.js";
|
|
11
12
|
//#region src/gateway/hono/routes/context-sources.ts
|
|
12
13
|
init_agent_scope();
|
|
@@ -27,16 +28,6 @@ function assertionIdsForSource(instanceId) {
|
|
|
27
28
|
FROM user_assertion_evidence ae JOIN context_evidence e ON e.evidence_id = ae.evidence_id
|
|
28
29
|
WHERE e.source_instance_id = ?`).all(instanceId).map((row) => row.assertion_id);
|
|
29
30
|
}
|
|
30
|
-
function markContextSourceAssertionsForReview(grantId) {
|
|
31
|
-
const grant = getUnderstandingSourceGrant(grantId);
|
|
32
|
-
const instanceId = grant ? sourceInstanceId(grant) : void 0;
|
|
33
|
-
const ids = instanceId ? assertionIdsForSource(instanceId) : [];
|
|
34
|
-
for (const id of ids) setAssertionStatus(id, "needs_review", {
|
|
35
|
-
actor: "runtime",
|
|
36
|
-
reason: "Its context source was revoked."
|
|
37
|
-
});
|
|
38
|
-
return ids.length;
|
|
39
|
-
}
|
|
40
31
|
function registerContextSourceRoutes(authenticated, deps) {
|
|
41
32
|
const service = deps.service.workDiscovery;
|
|
42
33
|
const limited = deps.strictRateLimitMiddleware;
|
|
@@ -49,6 +40,7 @@ function registerContextSourceRoutes(authenticated, deps) {
|
|
|
49
40
|
const grants = listUnderstandingSourceGrants({ includeRevoked: c.req.query("includeRevoked") === "true" });
|
|
50
41
|
return c.json({
|
|
51
42
|
grants,
|
|
43
|
+
consents: Object.fromEntries(grants.map((grant) => [grant.id, getActiveUnderstandingConsent(grant.id)])),
|
|
52
44
|
latestRuns: Object.fromEntries(grants.flatMap((grant) => {
|
|
53
45
|
const run = listUnderstandingSourceRuns(grant.id, 1)[0];
|
|
54
46
|
return run ? [[grant.id, run]] : [];
|
|
@@ -79,15 +71,20 @@ function registerContextSourceRoutes(authenticated, deps) {
|
|
|
79
71
|
const current = getUnderstandingSourceGrant(c.req.param("grantId"));
|
|
80
72
|
if (!current) return c.json({ error: "Context source not found" }, 404);
|
|
81
73
|
const instanceId = sourceInstanceId(current);
|
|
82
|
-
const affectedAssertions =
|
|
74
|
+
const affectedAssertions = instanceId ? assertionIdsForSource(instanceId).length : 0;
|
|
83
75
|
const rawDeleted = c.req.query("deleteRaw") === "true" && instanceId ? deleteKnowledgeSourceItems(instanceId) : 0;
|
|
76
|
+
const observationsDeleted = listUserModelObservations({
|
|
77
|
+
sourceGrantId: current.id,
|
|
78
|
+
limit: 2e3
|
|
79
|
+
}).length;
|
|
84
80
|
const accountId = typeof current.config.accountId === "string" ? current.config.accountId : void 0;
|
|
85
81
|
const connectionId = accountId ? getConnectorAccount(accountId)?.currentConnectionId : void 0;
|
|
86
82
|
if (connectionId) deps.service.setConnectorLearningPaused(connectionId, true);
|
|
87
83
|
return c.json({
|
|
88
84
|
grant: revokeUnderstandingSourceGrant(current.id),
|
|
89
85
|
affectedAssertions,
|
|
90
|
-
rawDeleted
|
|
86
|
+
rawDeleted,
|
|
87
|
+
observationsDeleted
|
|
91
88
|
});
|
|
92
89
|
});
|
|
93
90
|
authenticated.get("/api/context-sources/content-candidates", (c) => c.json({ candidates: listConnectedContentCandidates({ agentId: resolveDefaultAgentId() }) }));
|
|
@@ -134,4 +131,4 @@ function registerContextSourceRoutes(authenticated, deps) {
|
|
|
134
131
|
});
|
|
135
132
|
}
|
|
136
133
|
//#endregion
|
|
137
|
-
export {
|
|
134
|
+
export { registerContextSourceRoutes };
|
|
@@ -82,7 +82,6 @@ function buildStatusPayload(service) {
|
|
|
82
82
|
sttAvailable: sttConfig ? isSTTAvailable(sttConfig) : false,
|
|
83
83
|
sttEnabled: sttConfig?.enabled === true,
|
|
84
84
|
sttProvider: sttConfig?.provider ?? null,
|
|
85
|
-
localModelId: sttConfig?.provider === "xopc-local" && typeof sttConfig.providers?.["xopc-local"]?.model === "string" ? sttConfig.providers["xopc-local"].model : null,
|
|
86
85
|
refineAvailable: isRefineAvailable(config)
|
|
87
86
|
}
|
|
88
87
|
};
|
|
@@ -2,8 +2,10 @@ import { init_transaction, runSqliteWriteTransaction } from "../../../storage/sq
|
|
|
2
2
|
import { createCollaborationRule, getCollaborationRule, init_collaboration_rule_repository, listCollaborationRules, setCollaborationRuleStatus } from "../../../storage/sqlite/collaboration-rule-repository.js";
|
|
3
3
|
import { KnowledgeReviewConflictError, deleteKnowledgeItem, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
|
|
4
4
|
import "../../../knowledge-memory/index.js";
|
|
5
|
-
import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "../../../user-model/goals.js";
|
|
6
5
|
import { deleteUserAssertion, getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "../../../user-model/repository.js";
|
|
6
|
+
import { listActionRuleSuggestions } from "../../../user-model/action-rule-suggestions.js";
|
|
7
|
+
import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "../../../user-model/goals.js";
|
|
8
|
+
import { listUserAssertionEdges, listUserModelObservations } from "../../../user-model/observation-repository.js";
|
|
7
9
|
import { applyUserProfilePatch, getUserProfileSnapshot } from "../../../user-model/profile.js";
|
|
8
10
|
import { bootstrapUserModel } from "../../../user-model/bootstrap.js";
|
|
9
11
|
import { canUseAssertion } from "../../../user-model/usage-policy.js";
|
|
@@ -11,6 +13,7 @@ import "../../../user-model/index.js";
|
|
|
11
13
|
import { listMemoryMaintenanceRuns } from "../../../memory-maintenance/service.js";
|
|
12
14
|
import "../../../memory-maintenance/index.js";
|
|
13
15
|
import { getExecutionContextAudit, recordExecutionContextFeedback } from "../../../agent/context/audit.js";
|
|
16
|
+
import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
|
|
14
17
|
import { listUnderstandingSourceGrants } from "../../../user-context/sources/repository.js";
|
|
15
18
|
import { userInfo } from "node:os";
|
|
16
19
|
//#region src/gateway/hono/routes/user-model.ts
|
|
@@ -122,7 +125,10 @@ function assertionView(assertion, sources = listUserAssertionSources([assertion.
|
|
|
122
125
|
subject: slot.subject,
|
|
123
126
|
scope: slot.scope,
|
|
124
127
|
sources,
|
|
125
|
-
usable: canUseAssertion(assertion)
|
|
128
|
+
usable: canUseAssertion(assertion, Date.now(), {
|
|
129
|
+
use: "answer",
|
|
130
|
+
...assertion.allowedAgentIds?.[0] ? { agentId: assertion.allowedAgentIds[0] } : {}
|
|
131
|
+
})
|
|
126
132
|
};
|
|
127
133
|
}
|
|
128
134
|
function registerUserModelRoutes(authenticated, deps) {
|
|
@@ -153,13 +159,17 @@ function registerUserModelRoutes(authenticated, deps) {
|
|
|
153
159
|
adapterId: source.adapterId,
|
|
154
160
|
category: source.category,
|
|
155
161
|
displayName: source.displayName,
|
|
156
|
-
...source.lastCollectedAt ? { lastCollectedAt: source.lastCollectedAt } : {}
|
|
162
|
+
...source.lastCollectedAt ? { lastCollectedAt: source.lastCollectedAt } : {},
|
|
163
|
+
consent: getActiveUnderstandingConsent(source.id)
|
|
157
164
|
}));
|
|
158
165
|
return c.json({
|
|
159
166
|
assertions,
|
|
167
|
+
assertionEdges: listUserAssertionEdges(assertions.map((item) => item.id)),
|
|
168
|
+
observations: listUserModelObservations({ limit: 500 }),
|
|
160
169
|
goals,
|
|
161
170
|
priorities,
|
|
162
171
|
rules: listCollaborationRules(),
|
|
172
|
+
ruleSuggestions: listActionRuleSuggestions(),
|
|
163
173
|
knowledge,
|
|
164
174
|
maintenance: { lastRun: listMemoryMaintenanceRuns(1)[0] ?? null },
|
|
165
175
|
profile,
|
|
@@ -311,9 +321,17 @@ function registerUserModelRoutes(authenticated, deps) {
|
|
|
311
321
|
volatility: current.volatility,
|
|
312
322
|
sensitivity: current.sensitivity,
|
|
313
323
|
disclosurePolicy: current.disclosurePolicy,
|
|
324
|
+
domain: current.domain,
|
|
325
|
+
layer: current.layer,
|
|
326
|
+
sensitivityCategories: current.sensitivityCategories,
|
|
327
|
+
purposeIds: current.purposeIds,
|
|
328
|
+
allowedUses: current.allowedUses,
|
|
329
|
+
allowedAgentIds: current.allowedAgentIds,
|
|
330
|
+
deleteAfter: current.deleteAfter,
|
|
314
331
|
applicability: current.applicability,
|
|
315
332
|
...current.validFrom === void 0 ? {} : { validFrom: current.validFrom },
|
|
316
333
|
...current.validTo === void 0 ? {} : { validTo: current.validTo },
|
|
334
|
+
...current.reviewAt === void 0 ? {} : { reviewAt: current.reviewAt },
|
|
317
335
|
observedAt: Date.now(),
|
|
318
336
|
createdBy: "user",
|
|
319
337
|
correctionOfAssertionId: current.id
|
|
@@ -2,8 +2,6 @@ import { voiceSelectionSchema } from "../../../../packages/realtime-protocol/src
|
|
|
2
2
|
import { createVoiceSessionRequestSchema, init_voice } from "../../../../packages/realtime-protocol/src/voice.js";
|
|
3
3
|
import { getDefaultModelSync, init_providers, resolveModel } from "../../../providers/index.js";
|
|
4
4
|
import { completeWithResolvedCredentials } from "../../../providers/model-call.js";
|
|
5
|
-
import { getLocalVoiceRuntimeClient } from "../../../voice/local/runtime-client.js";
|
|
6
|
-
import { getAudioDecoderStatus } from "../../../voice/audio/normalize.js";
|
|
7
5
|
import { resolveSttProviderConfigSlice } from "../../../voice/stt/config-slice.js";
|
|
8
6
|
import { STTTranscriptionError, transcribe } from "../../../voice/stt/transcribe-core.js";
|
|
9
7
|
import { isSTTAvailable } from "../../../voice/stt/availability.js";
|
|
@@ -21,7 +19,6 @@ import { VoiceSessionCreationError, resolveStreamingStt, resolveStreamingTts } f
|
|
|
21
19
|
import { getGatewayPrincipal } from "../../security/gateway-principal.js";
|
|
22
20
|
import { createGatewayRouteLogger } from "../lib/route-logger.js";
|
|
23
21
|
import { selectPlatformVoice, voiceSettingsCatalog } from "../../../voice/platform-settings.js";
|
|
24
|
-
import { listLocalVoiceModelStatuses, removeLocalVoiceModel, startLocalVoiceModelInstall } from "../../../voice/local/model-manager.js";
|
|
25
22
|
import { listTtsProvidersForApi } from "../../../voice/tts/list-providers.js";
|
|
26
23
|
import { z } from "zod";
|
|
27
24
|
//#region src/gateway/hono/routes/voice.ts
|
|
@@ -410,70 +407,6 @@ function registerVoiceRoutes(authenticated, deps) {
|
|
|
410
407
|
payload
|
|
411
408
|
});
|
|
412
409
|
});
|
|
413
|
-
authenticated.get("/api/voice/local/status", async (c) => {
|
|
414
|
-
const config = service.currentConfig;
|
|
415
|
-
const sttConfig = mergeSttConfigFromAppConfig(config.tools?.media?.audio, config.tools?.media);
|
|
416
|
-
const modelId = typeof sttConfig.providers?.["xopc-local"]?.model === "string" ? sttConfig.providers["xopc-local"].model : "sensevoice-small";
|
|
417
|
-
const models = await listLocalVoiceModelStatuses();
|
|
418
|
-
const decoder = getAudioDecoderStatus();
|
|
419
|
-
try {
|
|
420
|
-
const runtime = await getLocalVoiceRuntimeClient().request("health", { modelId }, {
|
|
421
|
-
timeoutMs: 1e4,
|
|
422
|
-
stopOnTimeout: false
|
|
423
|
-
});
|
|
424
|
-
return c.json({
|
|
425
|
-
ok: true,
|
|
426
|
-
payload: {
|
|
427
|
-
runtime: {
|
|
428
|
-
...runtime,
|
|
429
|
-
ready: true
|
|
430
|
-
},
|
|
431
|
-
decoder,
|
|
432
|
-
models
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
} catch (error) {
|
|
436
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
437
|
-
return c.json({
|
|
438
|
-
ok: true,
|
|
439
|
-
payload: {
|
|
440
|
-
runtime: {
|
|
441
|
-
ready: false,
|
|
442
|
-
error: message
|
|
443
|
-
},
|
|
444
|
-
decoder,
|
|
445
|
-
models
|
|
446
|
-
}
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
});
|
|
450
|
-
authenticated.post("/api/voice/local/models/:modelId/install", strictRateLimitMiddleware, (c) => {
|
|
451
|
-
try {
|
|
452
|
-
const status = startLocalVoiceModelInstall(c.req.param("modelId"));
|
|
453
|
-
return c.json({
|
|
454
|
-
ok: true,
|
|
455
|
-
payload: { model: status }
|
|
456
|
-
}, 202);
|
|
457
|
-
} catch (error) {
|
|
458
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
459
|
-
return c.json({
|
|
460
|
-
ok: false,
|
|
461
|
-
error: { message }
|
|
462
|
-
}, 400);
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
authenticated.delete("/api/voice/local/models/:modelId", strictRateLimitMiddleware, async (c) => {
|
|
466
|
-
try {
|
|
467
|
-
await removeLocalVoiceModel(c.req.param("modelId"));
|
|
468
|
-
return c.json({ ok: true });
|
|
469
|
-
} catch (error) {
|
|
470
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
471
|
-
return c.json({
|
|
472
|
-
ok: false,
|
|
473
|
-
error: { message }
|
|
474
|
-
}, 400);
|
|
475
|
-
}
|
|
476
|
-
});
|
|
477
410
|
/**
|
|
478
411
|
* POST /api/voice/reveal-api-key — return plaintext voice provider apiKey from config file only.
|
|
479
412
|
* Body: `{ kind: 'stt' | 'tts', provider: string }`
|
|
@@ -699,7 +699,7 @@ var GatewayService = class {
|
|
|
699
699
|
prepareAgentSession: (input) => prepareAutomationAgentSession(this.sessionIndex.getStore(), this.projects, input),
|
|
700
700
|
workflowRunService: this.createWorkflowRunService(),
|
|
701
701
|
browserAutomationService: this.browserAutomations,
|
|
702
|
-
executeTaskCommand: ({ taskId, idempotencyKey, command }) => {
|
|
702
|
+
executeTaskCommand: ({ taskId, idempotencyKey, command, triggerEvent }) => {
|
|
703
703
|
const task = new TaskRepository().get(taskId);
|
|
704
704
|
if (!task) return {
|
|
705
705
|
ok: false,
|
|
@@ -713,7 +713,8 @@ var GatewayService = class {
|
|
|
713
713
|
actor: {
|
|
714
714
|
kind: "system",
|
|
715
715
|
id: "automation"
|
|
716
|
-
}
|
|
716
|
+
},
|
|
717
|
+
...triggerEvent ? { triggerContext: { automationTrigger: triggerEvent } } : {}
|
|
717
718
|
});
|
|
718
719
|
if (result.ok && result.runId) this.dispatchTaskRuns();
|
|
719
720
|
if (result.ok === false) return {
|
|
@@ -1206,7 +1207,7 @@ var GatewayService = class {
|
|
|
1206
1207
|
prepareAgentSession: (input) => prepareAutomationAgentSession(this.sessionIndex.getStore(), this.projects, input),
|
|
1207
1208
|
workflowRunService: this.createWorkflowRunService(),
|
|
1208
1209
|
browserAutomationService: this.browserAutomations,
|
|
1209
|
-
executeTaskCommand: ({ taskId, idempotencyKey, command }) => {
|
|
1210
|
+
executeTaskCommand: ({ taskId, idempotencyKey, command, triggerEvent }) => {
|
|
1210
1211
|
const task = new TaskRepository().get(taskId);
|
|
1211
1212
|
if (!task) return {
|
|
1212
1213
|
ok: false,
|
|
@@ -1220,7 +1221,8 @@ var GatewayService = class {
|
|
|
1220
1221
|
actor: {
|
|
1221
1222
|
kind: "system",
|
|
1222
1223
|
id: "automation"
|
|
1223
|
-
}
|
|
1224
|
+
},
|
|
1225
|
+
...triggerEvent ? { triggerContext: { automationTrigger: triggerEvent } } : {}
|
|
1224
1226
|
});
|
|
1225
1227
|
if (result.ok && result.runId) this.dispatchTaskRuns();
|
|
1226
1228
|
if (result.ok === false) return {
|
|
@@ -228,7 +228,7 @@ export interface MediaUnderstandingProvider {
|
|
|
228
228
|
* Defaults to true.
|
|
229
229
|
*/
|
|
230
230
|
requiresApiKey?: boolean;
|
|
231
|
-
/** Optional runtime readiness check for
|
|
231
|
+
/** Optional runtime readiness check for providers whose backing service may be unavailable. */
|
|
232
232
|
isConfigured?: (options?: {
|
|
233
233
|
model?: string;
|
|
234
234
|
}) => boolean;
|
|
@@ -12,6 +12,7 @@ function emptyMetrics() {
|
|
|
12
12
|
needsReview: 0,
|
|
13
13
|
activated: 0,
|
|
14
14
|
expiredPriorities: 0,
|
|
15
|
+
expiredObservations: 0,
|
|
15
16
|
archived: 0,
|
|
16
17
|
repairedIndexes: 0
|
|
17
18
|
};
|
|
@@ -33,6 +34,17 @@ function addDecision(db, runId, objectType, objectId, action, reason, before, af
|
|
|
33
34
|
decision_id, run_id, object_type, object_id, action, reason, before_json, after_json, created_at
|
|
34
35
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(randomUUID(), runId, objectType, objectId, action, reason, before === void 0 ? null : JSON.stringify(before), after === void 0 ? null : JSON.stringify(after), now);
|
|
35
36
|
}
|
|
37
|
+
function purgeExpiredObservations(db, runId, principalId, now, limit, metrics) {
|
|
38
|
+
const rows = db.prepare(`SELECT observation_id, delete_after FROM user_model_observations
|
|
39
|
+
WHERE principal_id = ? AND delete_after IS NOT NULL AND delete_after <= ?
|
|
40
|
+
ORDER BY delete_after, observation_id LIMIT ?`).all(principalId, now, limit);
|
|
41
|
+
metrics.scanned += rows.length;
|
|
42
|
+
for (const row of rows) {
|
|
43
|
+
db.prepare("DELETE FROM user_model_observations WHERE observation_id = ?").run(row.observation_id);
|
|
44
|
+
addDecision(db, runId, "evidence", row.observation_id, "deleted", "observation_retention_expired", row, void 0, now);
|
|
45
|
+
metrics.expiredObservations += 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
36
48
|
function transitionAssertions(db, runId, principalId, now, limit, metrics) {
|
|
37
49
|
const rows = db.prepare(`SELECT a.assertion_id, a.status FROM user_assertions a
|
|
38
50
|
JOIN user_assertion_slots s ON s.slot_id = a.slot_id
|
|
@@ -211,6 +223,7 @@ function runMemoryMaintenance(input) {
|
|
|
211
223
|
transitionAssertions(db, runId, principalId, now, limit, metrics);
|
|
212
224
|
transitionPriorities(db, runId, principalId, now, limit, metrics);
|
|
213
225
|
transitionKnowledge(db, runId, principalId, now, limit, metrics);
|
|
226
|
+
purgeExpiredObservations(db, runId, principalId, now, limit, metrics);
|
|
214
227
|
if (input.jobType === "daily_reconciliation" || input.jobType === "manual_repair") {
|
|
215
228
|
reconcileEvidence(db, runId, principalId, now, limit, evidenceThreshold, metrics);
|
|
216
229
|
activateKnowledge(db, runId, principalId, now, limit, metrics);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isGatewayConfigLockedByAnotherProcessSync } from "../gateway/lock.js";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
//#region src/migrations/retired-local-stt.ts
|
|
4
|
+
const id = "retire-builtin-local-stt";
|
|
5
|
+
function migratedConfig(ctx) {
|
|
6
|
+
if (!existsSync(ctx.configPath)) return null;
|
|
7
|
+
const config = JSON.parse(readFileSync(ctx.configPath, "utf8"));
|
|
8
|
+
const tools = config.tools;
|
|
9
|
+
if (!tools || typeof tools !== "object" || Array.isArray(tools)) return null;
|
|
10
|
+
const media = tools.media;
|
|
11
|
+
if (!media || typeof media !== "object" || Array.isArray(media)) return null;
|
|
12
|
+
const audio = media.audio;
|
|
13
|
+
if (!audio || typeof audio !== "object" || Array.isArray(audio)) return null;
|
|
14
|
+
const stt = audio;
|
|
15
|
+
if (stt.provider !== "xopc-local" && stt.provider !== "local") return null;
|
|
16
|
+
stt.enabled = false;
|
|
17
|
+
stt.provider = "openai";
|
|
18
|
+
stt.fallback = {
|
|
19
|
+
enabled: false,
|
|
20
|
+
order: []
|
|
21
|
+
};
|
|
22
|
+
return config;
|
|
23
|
+
}
|
|
24
|
+
function item(status) {
|
|
25
|
+
return {
|
|
26
|
+
id,
|
|
27
|
+
title: "Retire built-in local speech recognition",
|
|
28
|
+
kind: "config",
|
|
29
|
+
safety: "auto",
|
|
30
|
+
status,
|
|
31
|
+
message: "Disable the removed xopc-local STT provider. Select an installed STT extension or another provider before enabling voice input again."
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const retiredLocalSttMigration = {
|
|
35
|
+
id,
|
|
36
|
+
kind: "config",
|
|
37
|
+
safety: "auto",
|
|
38
|
+
detect: (ctx) => migratedConfig(ctx) ? item("planned") : null,
|
|
39
|
+
apply: (ctx) => {
|
|
40
|
+
if (isGatewayConfigLockedByAnotherProcessSync(ctx.configPath)) return {
|
|
41
|
+
...item("skipped"),
|
|
42
|
+
message: "Deferred local STT retirement until the running gateway restarts."
|
|
43
|
+
};
|
|
44
|
+
const config = migratedConfig(ctx);
|
|
45
|
+
return config ? {
|
|
46
|
+
...item("applied"),
|
|
47
|
+
details: { config }
|
|
48
|
+
} : item("not_needed");
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { retiredLocalSttMigration };
|
|
@@ -3,6 +3,7 @@ import { init_logger } from "../utils/logger.js";
|
|
|
3
3
|
import { ConfigSchema, init_schema } from "../config/schema.js";
|
|
4
4
|
import { listRegisteredMigrations } from "./registry.js";
|
|
5
5
|
import { memoryConfigMigration } from "./memory-config.js";
|
|
6
|
+
import { retiredLocalSttMigration } from "./retired-local-stt.js";
|
|
6
7
|
import { dirname, join } from "node:path";
|
|
7
8
|
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
8
9
|
//#region src/migrations/runner.ts
|
|
@@ -11,7 +12,7 @@ init_logger();
|
|
|
11
12
|
const log = createLogger("Migrations");
|
|
12
13
|
const MIGRATION_LEDGER_FILENAME = "migrations.json";
|
|
13
14
|
const CONFIG_BACKUP_COUNT = 10;
|
|
14
|
-
const CORE_MIGRATIONS = [memoryConfigMigration];
|
|
15
|
+
const CORE_MIGRATIONS = [memoryConfigMigration, retiredLocalSttMigration];
|
|
15
16
|
function listAllMigrations() {
|
|
16
17
|
return [...CORE_MIGRATIONS, ...listRegisteredMigrations().map((entry) => entry.migration)];
|
|
17
18
|
}
|
|
@@ -90,7 +90,7 @@ function projectTurnOutcome(params) {
|
|
|
90
90
|
}) : [];
|
|
91
91
|
for (const item of explicit) deliverables.set(item.artifactId, item);
|
|
92
92
|
const delivery = parseProductDeliveryEnvelope(details.delivery);
|
|
93
|
-
if (delivery) for (const reference of [delivery.primary, ...delivery.related ?? []]) {
|
|
93
|
+
if (delivery && delivery.operation !== "opened") for (const reference of [delivery.primary, ...delivery.related ?? []]) {
|
|
94
94
|
if (!reference) continue;
|
|
95
95
|
const item = fileDeliverable(reference, delivery.operation === "failed");
|
|
96
96
|
if (item) deliverables.set(item.artifactId, item);
|
|
@@ -142,6 +142,7 @@ function configureSqliteConnectionPragmas(db, options = {}) {
|
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
144
|
function ensureDatabasePermissions(pathname) {
|
|
145
|
+
if (pathname === ":memory:") return;
|
|
145
146
|
const dir = pathname.slice(0, Math.max(pathname.lastIndexOf("/"), pathname.lastIndexOf("\\")));
|
|
146
147
|
if (dir) {
|
|
147
148
|
fs.mkdirSync(dir, { recursive: true });
|