@xopcai/xopc 0.0.191 → 0.0.192
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/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-DstnJCS5.js → activity-store-B-tzXpDD.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DvEkT222.js → agent-avatar-dicebear-xOu0qNwc.js} +1 -1
- package/dist/gateway/static/root/assets/agents-CxuwvDk0.js +68 -0
- package/dist/gateway/static/root/assets/{api-BTL9kayv.js → api-fMItZb-h.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-COpP_pKN.js → app-management-settings-panel-D6Rv3OWI.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DTVNUEDq.js → appearance-settings-CKoNCwco.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-wAb5dnHZ.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-IpX6VA0o.js → archive-plugin-BokNQBwH.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CKVFNUi1.js → attachment-load-Dx1HglsM.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-Drgazevs.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BrfvfOS4.js → binary-plugins-CPYAflIG.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-D9sEfg32.js → block-editor-BFLgl8SS.js} +47 -47
- package/dist/gateway/static/root/assets/browser-settings-page-DmYlFJW7.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-BixZ5lCR.js → browser-workflow-inputs-CqLnqA9z.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-YEFuodJI.js → browser-workflows-page-Db5v3HtE.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-D7Z8T0o5.js +7 -0
- package/dist/gateway/static/root/assets/capability-presets-api-lov0J9A2.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-COjnwO0U.js +3 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-BThDGiO3.js → channel-recipient-api-DSJznouK.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-DcRYBNN7.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-C2UYdebT.js +1 -0
- package/dist/gateway/static/root/assets/{code-editor-D4_k-6QN.js → code-editor-dFzqyDXS.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-api-BMMqC0_9.js → connectors-api-3ccRyS3L.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-FVmvBG9H.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-Bm8koRoD.js → cron-expression-C9hhCiuo.js} +1 -1
- package/dist/gateway/static/root/assets/dependency-picker-CTtZFZug.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-CMG3mcaJ.js → desktop-pet-DOUeNVmC.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-D8aaPb0x.js → desktop-pet-settings-D4704vtl.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-C95yW03b.js → directory-picker-path-field-DJDXeA1B.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DsG7Z9lV.js → extension-debug-page-C0n2NMF1.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CUAXEbAt.js → extension-page-vG-xxRNs.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CtuY2THd.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-DL70Nakc.js → gateway-config-api-CZra7GuI.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-BgDxQ08c.js → gateway-settings-Cz33jRkR.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-EO9mKvzE.js → gateway-startup-retry-BbVV0udv.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-BX7q55uZ.js → heartbeat-settings-D2XMlA_U.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-CPrHkPN6.js +3 -0
- package/dist/gateway/static/root/assets/html-workspace-editor-bXK5tq64.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-Bu7PyVSh.js → image-generation-api-BgrOvhaJ.js} +1 -1
- package/dist/gateway/static/root/assets/index-Cg7Xnlu3.css +1 -0
- package/dist/gateway/static/root/assets/index-DzmbmOGA.js +150 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Dt6wS5zW.js → keyboard-shortcuts-settings-BfyAEG1G.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-Clz47vSr.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-DcD3-N00.js → local-apps-page-BYalcRSY.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-deR2zRaE.js → locale-store-VOY1wMO9.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-Cxq9WMf5.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-B6EVkJQy.js → management-settings-BQf-6s32.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-editor-BvUebh3C.js → markdown-editor-TWGaF7Xa.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-CHUjCnBh.js → markdown-split-Cy_2SN1Q.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DRrtI2O0.js → media-plugins-CkDupqb2.js} +1 -1
- package/dist/gateway/static/root/assets/messages-DMJ-6-1m.js +3 -0
- package/dist/gateway/static/root/assets/{notes-page-fermYvpI.js → notes-page-kiGRR9jo.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-DkYkPGyB.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-BO262zuu.js → page-tabs-CvzSdYVj.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-yZYTy-2e.js → preview-open-alternatives-kZ0nco7e.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-Dgy8XWhR.js → product-open-page-DgoieqQC.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CeSjJd-N.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-fZ1rm4b9.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-CbYI6KC8.js +1 -0
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bud_NTEZ.js +5 -0
- package/dist/gateway/static/root/assets/{schema-form-DdE4gtw_.js → schema-form-GlbsCBmv.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-sOJ_TnLm.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BI0u77dt.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CiYU8AvV.js → settings-form-section-CKLns16d.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bv03cWib.js → settings-loading-skeleton-BDzpxgk0.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-BH0pF7QB.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-t_Ox1slk.js → settings-page-layout-J793iqfm.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-HRG_lK4_.js → setup-status-panel-CGsml89P.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DF8gW6bo.js → share-preview-page-UTm_7r0l.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-BM--lgUS.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CGCOC-rV.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-iLyaOl48.js +2 -0
- package/dist/gateway/static/root/assets/skills-page.utils-Bwid1TGB.js +1 -0
- package/dist/gateway/static/root/assets/style-TIDOdKy0.js +7 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-Bv7GXFc6.js → system-settings-panel-BcB3p1e3.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-DQYEf08v.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-DnBOcGXi.js → theme-store-GVZOImyb.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-4XBsLEuv.js → typed-models-lib-CT2c85Ju.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BN2QgFGn.js → use-autosave-CcvY7DTh.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-CGI41bfO.js +1 -0
- package/dist/gateway/static/root/assets/{vendor-codemirror--gTq3YAI.js → vendor-codemirror-DRr7hFaD.js} +16 -16
- package/dist/gateway/static/root/assets/voice-api-key-field-Ricc3QGo.js +1 -0
- package/dist/gateway/static/root/assets/{work-discovery-overlay-nmEAafFl.js → work-discovery-overlay-BoomfqhX.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-C5Kwe_bc.js → work-discovery-page-mbnepbQk.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-DSWG2xqL.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DtV0ruyk.js +5 -0
- package/dist/gateway/static/root/index.html +7 -7
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +76 -0
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +1 -1
- package/dist/src/agent/background-review/run-background-review.js +3 -12
- package/dist/src/agent/embedded/run-for-session.js +3 -0
- package/dist/src/agent/embedded/run-turn.js +4 -1
- package/dist/src/agent/embedded/session-runner.js +3 -4
- package/dist/src/agent/embedded/types.d.ts +10 -1
- package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -2
- package/dist/src/agent/external-tools/mcp-provider.d.ts +1 -0
- package/dist/src/agent/external-tools/mcp-provider.js +21 -6
- package/dist/src/agent/image/generation/provider-registry.js +1 -0
- package/dist/src/agent/image/generation/providers/dashscope.js +20 -0
- package/dist/src/agent/image/generation/providers/fal.d.ts +1 -1
- package/dist/src/agent/image/generation/providers/fal.js +12 -6
- package/dist/src/agent/image/generation/providers/google.js +8 -0
- package/dist/src/agent/image/generation/providers/minimax.js +20 -0
- package/dist/src/agent/image/generation/providers/openai.js +36 -26
- package/dist/src/agent/image/generation/types.d.ts +13 -0
- package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +1 -0
- package/dist/src/agent/mcp/bundle-mcp-gateway.js +2 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +5 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js +11 -3
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +3 -2
- package/dist/src/agent/mcp/bundle-mcp-types.d.ts +2 -1
- package/dist/src/agent/mcp/index.js +2 -2
- package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.d.ts +2 -1
- package/dist/src/agent/mcp/mcp-transport.js +22 -4
- package/dist/src/agent/memory/compaction.js +19 -17
- package/dist/src/agent/memory/context-budget.js +2 -3
- package/dist/src/agent/memory/understanding/service.d.ts +1 -0
- package/dist/src/agent/memory/understanding/service.js +49 -20
- package/dist/src/agent/memory/understanding/types.d.ts +1 -0
- package/dist/src/agent/memory/user-context-coordinator.js +6 -0
- package/dist/src/agent/orchestration/agent-orchestrator.js +15 -1
- package/dist/src/agent/service/direct-turn-helpers.js +14 -5
- package/dist/src/agent/skills/index.d.ts +1 -1
- package/dist/src/agent/skills/index.js +2 -2
- package/dist/src/agent/skills/installer.d.ts +3 -10
- package/dist/src/agent/skills/installer.js +99 -156
- package/dist/src/agent/skills/marketplace/adapter.types.d.ts +3 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +30 -6
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +21 -4
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +7 -4
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +3 -0
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +7 -1
- package/dist/src/agent/skills/marketplace/search.d.ts +2 -2
- package/dist/src/agent/skills/marketplace/search.js +52 -21
- package/dist/src/agent/skills/skills-marketplace.d.ts +1 -1
- package/dist/src/agent/skills/skills-marketplace.js +2 -2
- package/dist/src/agent/skills/types.d.ts +0 -8
- package/dist/src/agent/tools/exec-command.d.ts +1 -0
- package/dist/src/agent/tools/exec-command.js +2 -1
- package/dist/src/agent/tools/factory.d.ts +1 -0
- package/dist/src/agent/tools/factory.js +17 -2
- package/dist/src/agent/tools/managed-job-tool.d.ts +1 -1
- package/dist/src/agent/tools/managed-job-tool.js +3 -2
- package/dist/src/agent/tools/skill-install-tool.d.ts +2 -2
- package/dist/src/agent/tools/skill-install-tool.js +8 -4
- package/dist/src/agent/tools/skills-marketplace-search-tool.js +3 -2
- package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
- package/dist/src/agent/tools/workflow-tool.js +14 -4
- package/dist/src/agent-manifest/schema.d.ts +20 -0
- package/dist/src/agent-manifest/schema.js +6 -1
- package/dist/src/browser/providers/cloakbrowser.js +1 -1
- package/dist/src/cli/command-loaders.js +1 -0
- package/dist/src/cli/command-manifest.js +4 -0
- package/dist/src/cli/commands/doctor/checks/node-version.js +3 -3
- package/dist/src/cli/commands/doctor/checks/tool-runtimes.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +36 -0
- package/dist/src/cli/commands/doctor/flow.js +2 -0
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/models.js +0 -1
- package/dist/src/cli/commands/onboard/model.d.ts +16 -1
- package/dist/src/cli/commands/onboard/model.js +65 -4
- package/dist/src/cli/commands/onboard.js +13 -1
- package/dist/src/cli/commands/runtime.d.ts +1 -0
- package/dist/src/cli/commands/runtime.js +77 -0
- package/dist/src/cli/commands/setup.js +15 -1
- package/dist/src/cli/commands/skills.js +7 -4
- package/dist/src/cli/commands/update.js +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/schema.d.ts +125 -0
- package/dist/src/config/schema.js +77 -2
- package/dist/src/config/voice.d.ts +6 -0
- package/dist/src/config/voice.js +17 -0
- package/dist/src/extensions/install.js +1 -1
- package/dist/src/extensions/types/providers.d.ts +4 -0
- package/dist/src/gateway/capability-presets-admin.d.ts +9 -0
- package/dist/src/gateway/capability-presets-admin.js +24 -6
- package/dist/src/gateway/chat-stream/mapper.js +8 -4
- package/dist/src/gateway/chat-stream/protocol.d.ts +10 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
- package/dist/src/gateway/hono/routes/commands-skills.js +2 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/local-apps.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +2 -3
- package/dist/src/gateway/hono/routes/runtime-tools.d.ts +3 -0
- package/dist/src/gateway/hono/routes/runtime-tools.js +142 -0
- package/dist/src/gateway/hono/routes/understanding-sources.js +2 -1
- package/dist/src/gateway/hono/routes/update.js +2 -2
- package/dist/src/gateway/hono/routes/voice.js +43 -2
- package/dist/src/gateway/hono/routes/workflows.js +1 -1
- package/dist/src/gateway/hono/routes/you.js +22 -25
- package/dist/src/gateway/image-generation-setup.d.ts +2 -3
- package/dist/src/gateway/image-generation-setup.js +39 -8
- package/dist/src/gateway/index.js +1 -1
- package/dist/src/gateway/run-loop.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +1 -1
- package/dist/src/gateway/service/marketplace-service.js +2 -2
- package/dist/src/gateway/service.js +5 -5
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/gateway-processes.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +2 -2
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/providers/extension-stream-bridge.js +8 -7
- package/dist/src/providers/model-catalog-store.d.ts +24 -4
- package/dist/src/providers/model-catalog-store.js +11 -0
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/prompt-cache-payload.d.ts +13 -0
- package/dist/src/providers/prompt-cache-payload.js +110 -0
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/providers/xopc-cloud-model-source.js +52 -6
- package/dist/src/runtime-tools/archive.d.ts +8 -0
- package/dist/src/runtime-tools/archive.js +99 -0
- package/dist/src/runtime-tools/bootstrap.d.ts +16 -0
- package/dist/src/runtime-tools/bootstrap.js +33 -0
- package/dist/src/runtime-tools/catalog.d.ts +19 -0
- package/dist/src/runtime-tools/catalog.js +59 -0
- package/dist/src/runtime-tools/command.d.ts +15 -0
- package/dist/src/runtime-tools/command.js +59 -0
- package/dist/src/runtime-tools/download-source.d.ts +24 -0
- package/dist/src/runtime-tools/download-source.js +125 -0
- package/dist/src/runtime-tools/downloader.d.ts +21 -0
- package/dist/src/runtime-tools/downloader.js +137 -0
- package/dist/src/runtime-tools/environment.d.ts +20 -0
- package/dist/src/runtime-tools/environment.js +113 -0
- package/dist/src/runtime-tools/errors.d.ts +10 -0
- package/dist/src/runtime-tools/errors.js +14 -0
- package/dist/src/runtime-tools/index.d.ts +7 -0
- package/dist/src/runtime-tools/index.js +7 -0
- package/dist/src/runtime-tools/install-lock.d.ts +1 -0
- package/dist/src/runtime-tools/install-lock.js +50 -0
- package/dist/src/runtime-tools/manager.d.ts +20 -0
- package/dist/src/runtime-tools/manager.js +641 -0
- package/dist/src/runtime-tools/manifest-store.d.ts +3 -0
- package/dist/src/runtime-tools/manifest-store.js +26 -0
- package/dist/src/runtime-tools/network.d.ts +9 -0
- package/dist/src/runtime-tools/network.js +41 -0
- package/dist/src/runtime-tools/offline-bundle.d.ts +16 -0
- package/dist/src/runtime-tools/offline-bundle.js +41 -0
- package/dist/src/runtime-tools/paths.d.ts +7 -0
- package/dist/src/runtime-tools/paths.js +22 -0
- package/dist/src/runtime-tools/probe.d.ts +7 -0
- package/dist/src/runtime-tools/probe.js +71 -0
- package/dist/src/runtime-tools/prune.d.ts +10 -0
- package/dist/src/runtime-tools/prune.js +93 -0
- package/dist/src/runtime-tools/types.d.ts +70 -0
- package/dist/src/runtime-tools/types.js +1 -0
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +42 -20
- package/dist/src/tasks/home-query-service.js +1 -5
- package/dist/src/tasks/index.js +2 -2
- package/dist/src/tasks/project-operating-view-service.d.ts +2 -1
- package/dist/src/tasks/project-operating-view-service.js +6 -4
- package/dist/src/tasks/task-dependency-service.d.ts +2 -1
- package/dist/src/tasks/task-dependency-service.js +15 -0
- package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
- package/dist/src/tunnel/frpc-binary.js +1 -1
- package/dist/src/user-context/domain.d.ts +2 -1
- package/dist/src/user-context/domain.js +12 -1
- package/dist/src/user-context/manual-understanding.js +8 -10
- package/dist/src/user-context/planner.js +1 -6
- package/dist/src/user-context/sources/activity-clustering.d.ts +5 -0
- package/dist/src/user-context/sources/activity-clustering.js +130 -0
- package/dist/src/user-context/sources/catalog.js +26 -0
- package/dist/src/user-context/sources/local-source-contract.d.ts +3 -0
- package/dist/src/user-context/sources/local-source-contract.js +15 -0
- package/dist/src/user-context/sources/repository.js +7 -1
- package/dist/src/user-context/sources/types.d.ts +7 -1
- package/dist/src/user-context/understanding.d.ts +15 -0
- package/dist/src/user-context/understanding.js +24 -0
- package/dist/src/voice/local/model-files.js +1 -1
- package/dist/src/voice/metadata/builtin.js +99 -32
- package/dist/src/voice/metadata/types.d.ts +3 -0
- package/dist/src/voice/stt/availability.js +4 -1
- package/dist/src/voice/stt/config-slice.d.ts +0 -2
- package/dist/src/voice/stt/config-slice.js +1 -6
- package/dist/src/voice/stt/factory.js +2 -2
- package/dist/src/voice/stt/index.d.ts +2 -3
- package/dist/src/voice/stt/list-providers.js +1 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.d.ts +0 -19
- package/dist/src/voice/stt/providers/alibaba-transcription.js +59 -132
- package/dist/src/voice/stt/providers/index.d.ts +1 -0
- package/dist/src/voice/stt/providers/index.js +2 -1
- package/dist/src/voice/stt/providers/openai-transcription.d.ts +2 -2
- package/dist/src/voice/stt/providers/openai-transcription.js +4 -4
- package/dist/src/voice/stt/providers/xopc-cloud-transcription.d.ts +2 -0
- package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +49 -0
- package/dist/src/voice/stt/types.js +2 -2
- package/dist/src/voice/tts/providers/index.d.ts +1 -0
- package/dist/src/voice/tts/providers/index.js +2 -1
- package/dist/src/voice/tts/providers/xopc-cloud-speech.d.ts +2 -0
- package/dist/src/voice/tts/providers/xopc-cloud-speech.js +113 -0
- package/dist/src/voice/tts/types.d.ts +1 -1
- package/dist/src/work-discovery/analyzer.js +9 -4
- package/dist/src/work-discovery/candidate-discovery.d.ts +1 -0
- package/dist/src/work-discovery/candidate-discovery.js +3 -3
- package/dist/src/work-discovery/index.js +2 -2
- package/dist/src/work-discovery/service.d.ts +2 -1
- package/dist/src/work-discovery/service.js +126 -37
- package/dist/src/work-discovery/types.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +8 -0
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agents-CXyivfqY.js +0 -68
- package/dist/gateway/static/root/assets/apps-page-DsE67BSO.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-D0TVev47.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DpZzq8j2.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-B9Cmcuff.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-C_EpuQtk.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-CvzD5qSv.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BKrm7tJ9.js +0 -2
- package/dist/gateway/static/root/assets/extension-settings-page-CsR7QOJo.js +0 -1
- package/dist/gateway/static/root/assets/home-page-C08Nen5T.js +0 -3
- package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +0 -1
- package/dist/gateway/static/root/assets/index-B-_CEvIX.js +0 -150
- package/dist/gateway/static/root/assets/index-D6e3tPL-.css +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-BQVC0tWq.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-D6yvW-E4.js +0 -2
- package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-BVCwabjq.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-CS4Ujor7.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-DMtPC8c4.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BpfHZT88.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BZkyrJBM.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DQlK0A4l.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-C-LdINFj.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-v_iLhxxa.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-S-bjtsXX.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BiNBfaX5.js +0 -2
- package/dist/gateway/static/root/assets/skills-page.utils-DlnGtvAH.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-BhQcOpnx.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-PtcY7BoJ.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DnhJtC5l.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BnNWBDwz.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-Z_qzaohv.js +0 -11
- /package/dist/gateway/static/root/assets/{workflows-page-DLioOiRN.css → style-DLioOiRN.css} +0 -0
|
@@ -1,159 +1,86 @@
|
|
|
1
1
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../../utils/logger.js";
|
|
3
|
-
import {
|
|
4
|
-
import { fetchWithTimeoutGuarded, postJsonRequest, waitProviderOperationPollInterval } from "../../../media-shared/http/provider-http.js";
|
|
3
|
+
import { postJsonRequest } from "../../../media-shared/http/provider-http.js";
|
|
5
4
|
import "../../../media-shared/http/index.js";
|
|
6
5
|
import { registerMediaUnderstandingProvider } from "../../../media-understanding/registry.js";
|
|
7
6
|
//#region src/voice/stt/providers/alibaba-transcription.ts
|
|
8
|
-
/**
|
|
9
|
-
* Alibaba DashScope Paraformer STT — implements MediaUnderstandingProvider.transcribeAudio.
|
|
10
|
-
*
|
|
11
|
-
* DashScope's async API is a 4-step dance:
|
|
12
|
-
* 1. POST /api/v1/services/audio/asr/transcription with `X-DashScope-Async: enable`
|
|
13
|
-
* and `input.file_urls = [data:audio/ogg;base64,...]` → returns task_id
|
|
14
|
-
* 2. Poll GET /api/v1/tasks/{task_id} until task_status === 'SUCCEEDED'
|
|
15
|
-
* 3. The success result contains `transcription_url` pointing at a JSON document
|
|
16
|
-
* 4. Fetch that JSON to extract the actual `transcripts[].text`
|
|
17
|
-
*
|
|
18
|
-
* All HTTP calls go through `fetchWithTimeoutGuarded` so the SSRF guard catches
|
|
19
|
-
* malicious config injection. The transcription_url is a public OSS URL
|
|
20
|
-
* (CDN-hosted); we keep `allowPrivateNetwork: false` so a malicious tenant
|
|
21
|
-
* cannot redirect to an internal address.
|
|
22
|
-
*
|
|
23
|
-
* Polling caps at 60s by default (60 * 1s). The runner's `timeoutMs` controls
|
|
24
|
-
* HTTP timeouts on each individual submit/poll/fetch call, not the overall
|
|
25
|
-
* poll loop ceiling.
|
|
26
|
-
*/
|
|
27
7
|
init_logger();
|
|
28
8
|
const log = createLogger("STT:Alibaba");
|
|
29
|
-
const DEFAULT_MODEL = "
|
|
30
|
-
const DEFAULT_BASE_URL = "https://dashscope.aliyuncs.com/api/v1/services/
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
timeoutMs: params.timeoutMs,
|
|
37
|
-
label: "Alibaba STT submit",
|
|
38
|
-
headers: {
|
|
39
|
-
Authorization: `Bearer ${params.apiKey}`,
|
|
40
|
-
"X-DashScope-Async": "enable"
|
|
41
|
-
},
|
|
42
|
-
body: {
|
|
43
|
-
model: params.model,
|
|
44
|
-
input: { file_urls: [params.audioDataUrl] },
|
|
45
|
-
...params.language ? { parameters: { language_hint: params.language } } : {}
|
|
46
|
-
},
|
|
47
|
-
signal: params.signal
|
|
48
|
-
})).json();
|
|
49
|
-
if (data.code) throw new Error(`Alibaba STT API error: ${data.code} - ${data.message}`);
|
|
50
|
-
if (!data.output?.task_id) {
|
|
51
|
-
log.error({ response: data }, "Alibaba STT API response missing task_id");
|
|
52
|
-
throw new Error(`No task_id returned from Alibaba STT API: ${JSON.stringify(data)}`);
|
|
53
|
-
}
|
|
54
|
-
log.debug({ taskId: data.output.task_id }, "Task submitted");
|
|
55
|
-
return data.output.task_id;
|
|
56
|
-
}
|
|
57
|
-
async function pollTask(params) {
|
|
58
|
-
const startTime = Date.now();
|
|
59
|
-
const url = `${TASKS_BASE_URL}/${params.taskId}`;
|
|
60
|
-
while (Date.now() - startTime < MAX_POLL_MS) {
|
|
61
|
-
const response = await fetchWithTimeoutGuarded(url, {
|
|
62
|
-
timeoutMs: params.timeoutMs,
|
|
63
|
-
label: "Alibaba STT poll",
|
|
64
|
-
signal: params.signal,
|
|
65
|
-
init: {
|
|
66
|
-
method: "GET",
|
|
67
|
-
headers: { Authorization: `Bearer ${params.apiKey}` }
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
if (!response.ok) {
|
|
71
|
-
const errorText = await response.text().catch(() => "");
|
|
72
|
-
throw new ProviderHttpError({
|
|
73
|
-
label: "Alibaba STT poll",
|
|
74
|
-
status: response.status,
|
|
75
|
-
detail: errorText.slice(0, 220) || response.statusText
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
const data = await response.json();
|
|
79
|
-
const status = data.output?.task_status;
|
|
80
|
-
if (status === "SUCCEEDED") {
|
|
81
|
-
const result = data.output?.results?.[0];
|
|
82
|
-
if (!result) throw new Error("Alibaba STT task succeeded but no results found");
|
|
83
|
-
return { text: (await fetchTranscription(result.transcription_url, params.timeoutMs, params.signal)).transcripts.map((t) => t.text).join("\n") };
|
|
84
|
-
}
|
|
85
|
-
if (status === "FAILED") throw new Error("Alibaba STT task failed");
|
|
86
|
-
await waitProviderOperationPollInterval(POLL_INTERVAL_MS, params.signal);
|
|
87
|
-
}
|
|
88
|
-
throw new Error(`Alibaba STT task did not complete within ${MAX_POLL_MS}ms`);
|
|
9
|
+
const DEFAULT_MODEL = "qwen-audio-3.0-asr-flash";
|
|
10
|
+
const DEFAULT_BASE_URL = "https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation";
|
|
11
|
+
function audioFormat(request) {
|
|
12
|
+
const extension = request.fileName.split(".").pop()?.toLowerCase();
|
|
13
|
+
if (extension === "mpeg" || extension === "mpga") return "mp3";
|
|
14
|
+
if (extension === "m4a") return "mp4";
|
|
15
|
+
return extension || "wav";
|
|
89
16
|
}
|
|
90
|
-
async function
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
17
|
+
async function transcribeAudio(request) {
|
|
18
|
+
if (!request.apiKey) throw new Error("Alibaba STT API key is unavailable");
|
|
19
|
+
const startedAt = Date.now();
|
|
20
|
+
const model = request.model ?? DEFAULT_MODEL;
|
|
21
|
+
const audio = `data:${request.mime ?? "application/octet-stream"};base64,${request.buffer.toString("base64")}`;
|
|
22
|
+
const messages = [];
|
|
23
|
+
if (request.prompt) messages.push({
|
|
24
|
+
role: "user",
|
|
25
|
+
content: [{
|
|
26
|
+
type: "input_text",
|
|
27
|
+
text: request.prompt
|
|
28
|
+
}]
|
|
95
29
|
});
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
30
|
+
messages.push({
|
|
31
|
+
role: "user",
|
|
32
|
+
content: [{
|
|
33
|
+
type: "input_audio",
|
|
34
|
+
input_audio: { data: audio }
|
|
35
|
+
}]
|
|
100
36
|
});
|
|
101
|
-
return await response.json();
|
|
102
|
-
}
|
|
103
|
-
async function transcribeAudio(req) {
|
|
104
|
-
const startTime = Date.now();
|
|
105
|
-
const model = req.model ?? DEFAULT_MODEL;
|
|
106
|
-
const baseUrl = req.baseUrl ?? DEFAULT_BASE_URL;
|
|
107
|
-
const base64Audio = req.buffer.toString("base64");
|
|
108
|
-
const audioDataUrl = `data:${req.mime ?? "audio/ogg"};base64,${base64Audio}`;
|
|
109
|
-
log.debug({
|
|
110
|
-
model,
|
|
111
|
-
bufferSize: req.buffer.length,
|
|
112
|
-
language: req.language,
|
|
113
|
-
fileName: req.fileName
|
|
114
|
-
}, "Sending to Alibaba Paraformer");
|
|
115
37
|
try {
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
38
|
+
const data = await (await postJsonRequest(request.baseUrl ?? DEFAULT_BASE_URL, {
|
|
39
|
+
timeoutMs: request.timeoutMs,
|
|
40
|
+
label: "Alibaba STT",
|
|
41
|
+
headers: {
|
|
42
|
+
Authorization: `Bearer ${request.apiKey}`,
|
|
43
|
+
"X-DashScope-SSE": "disable"
|
|
44
|
+
},
|
|
45
|
+
body: {
|
|
46
|
+
model,
|
|
47
|
+
input: { messages },
|
|
48
|
+
parameters: {
|
|
49
|
+
format: audioFormat(request),
|
|
50
|
+
...request.language && request.language !== "auto" ? { language_hints: [request.language] } : {}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
signal: request.signal
|
|
54
|
+
})).json();
|
|
55
|
+
const text = data.output?.text;
|
|
56
|
+
if (typeof text !== "string") throw new Error("Alibaba STT returned an invalid response");
|
|
132
57
|
log.info({
|
|
133
58
|
provider: "alibaba",
|
|
134
|
-
|
|
135
|
-
|
|
59
|
+
model,
|
|
60
|
+
latencyMs: Date.now() - startedAt,
|
|
61
|
+
textLength: text.length
|
|
136
62
|
}, "Transcription completed");
|
|
63
|
+
const durationSeconds = Number(data.usage?.duration);
|
|
137
64
|
return {
|
|
138
|
-
text
|
|
65
|
+
text,
|
|
139
66
|
model,
|
|
140
|
-
...
|
|
141
|
-
durationSeconds
|
|
67
|
+
...request.language ? { language: request.language } : {},
|
|
68
|
+
...Number.isFinite(durationSeconds) && durationSeconds >= 0 ? { durationSeconds } : {}
|
|
142
69
|
};
|
|
143
70
|
} catch (error) {
|
|
144
|
-
if (
|
|
145
|
-
const
|
|
71
|
+
if (request.signal?.aborted) throw error;
|
|
72
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
146
73
|
log.error({
|
|
147
74
|
err: error,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}, `Alibaba transcription failed: ${
|
|
151
|
-
throw new Error(`Alibaba STT failed: ${
|
|
75
|
+
model,
|
|
76
|
+
bufferSize: request.buffer.length
|
|
77
|
+
}, `Alibaba transcription failed: ${message}`);
|
|
78
|
+
throw new Error(`Alibaba STT failed: ${message}`);
|
|
152
79
|
}
|
|
153
80
|
}
|
|
154
81
|
const alibabaTranscriptionProvider = {
|
|
155
82
|
id: "alibaba",
|
|
156
|
-
aliases: ["dashscope"
|
|
83
|
+
aliases: ["dashscope"],
|
|
157
84
|
capabilities: ["audio"],
|
|
158
85
|
envKey: "DASHSCOPE_API_KEY",
|
|
159
86
|
defaultModels: { audio: DEFAULT_MODEL },
|
|
@@ -13,3 +13,4 @@
|
|
|
13
13
|
export { openAiTranscriptionProvider } from './openai-transcription.js';
|
|
14
14
|
export { alibabaTranscriptionProvider } from './alibaba-transcription.js';
|
|
15
15
|
export { localTranscriptionProvider } from './local-transcription.js';
|
|
16
|
+
export { xopcCloudTranscriptionProvider } from './xopc-cloud-transcription.js';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { openAiTranscriptionProvider } from "./openai-transcription.js";
|
|
2
2
|
import { alibabaTranscriptionProvider } from "./alibaba-transcription.js";
|
|
3
3
|
import { localTranscriptionProvider } from "./local-transcription.js";
|
|
4
|
-
|
|
4
|
+
import { xopcCloudTranscriptionProvider } from "./xopc-cloud-transcription.js";
|
|
5
|
+
export { alibabaTranscriptionProvider, localTranscriptionProvider, openAiTranscriptionProvider, xopcCloudTranscriptionProvider };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* OpenAI
|
|
2
|
+
* OpenAI transcription provider — implements MediaUnderstandingProvider.transcribeAudio.
|
|
3
3
|
*
|
|
4
4
|
* Uses the official `openai` SDK rather than the raw HTTP path because the SDK
|
|
5
5
|
* already handles multipart/form-data encoding (`file` field), streaming
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* keep parity with the SDK's own fetch (proxy support, retries, etc.); the
|
|
9
9
|
* only egress is api.openai.com which is HTTPS-only and public.
|
|
10
10
|
*
|
|
11
|
-
* Streaming transcription is not implemented (
|
|
11
|
+
* Streaming transcription is not implemented (the API returns a final text
|
|
12
12
|
* blob). Self-registers with `capabilities: ['audio']` only — the registry's
|
|
13
13
|
* `listProvidersForCapability` filter skips this provider for image/video.
|
|
14
14
|
*/
|
|
@@ -4,7 +4,7 @@ import { registerMediaUnderstandingProvider } from "../../../media-understanding
|
|
|
4
4
|
import OpenAI from "openai";
|
|
5
5
|
//#region src/voice/stt/providers/openai-transcription.ts
|
|
6
6
|
/**
|
|
7
|
-
* OpenAI
|
|
7
|
+
* OpenAI transcription provider — implements MediaUnderstandingProvider.transcribeAudio.
|
|
8
8
|
*
|
|
9
9
|
* Uses the official `openai` SDK rather than the raw HTTP path because the SDK
|
|
10
10
|
* already handles multipart/form-data encoding (`file` field), streaming
|
|
@@ -13,13 +13,13 @@ import OpenAI from "openai";
|
|
|
13
13
|
* keep parity with the SDK's own fetch (proxy support, retries, etc.); the
|
|
14
14
|
* only egress is api.openai.com which is HTTPS-only and public.
|
|
15
15
|
*
|
|
16
|
-
* Streaming transcription is not implemented (
|
|
16
|
+
* Streaming transcription is not implemented (the API returns a final text
|
|
17
17
|
* blob). Self-registers with `capabilities: ['audio']` only — the registry's
|
|
18
18
|
* `listProvidersForCapability` filter skips this provider for image/video.
|
|
19
19
|
*/
|
|
20
20
|
init_logger();
|
|
21
21
|
const log = createLogger("STT:OpenAI");
|
|
22
|
-
const DEFAULT_MODEL = "
|
|
22
|
+
const DEFAULT_MODEL = "gpt-4o-mini-transcribe";
|
|
23
23
|
async function transcribeAudio(req) {
|
|
24
24
|
const startTime = Date.now();
|
|
25
25
|
const model = req.model ?? DEFAULT_MODEL;
|
|
@@ -36,7 +36,7 @@ async function transcribeAudio(req) {
|
|
|
36
36
|
bufferSize: req.buffer.length,
|
|
37
37
|
language: req.language,
|
|
38
38
|
fileName: req.fileName
|
|
39
|
-
}, "Sending to OpenAI
|
|
39
|
+
}, "Sending to OpenAI transcription");
|
|
40
40
|
try {
|
|
41
41
|
const result = await client.audio.transcriptions.create({
|
|
42
42
|
file,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
|
|
2
|
+
import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../../../providers/xopc-cloud-config.js";
|
|
3
|
+
import { getProviderAuthService, init_provider_auth_service } from "../../../providers/provider-auth-service.js";
|
|
4
|
+
import { registerMediaUnderstandingProvider } from "../../../media-understanding/registry.js";
|
|
5
|
+
//#region src/voice/stt/providers/xopc-cloud-transcription.ts
|
|
6
|
+
init_model_catalog_store();
|
|
7
|
+
init_provider_auth_service();
|
|
8
|
+
init_xopc_cloud_config();
|
|
9
|
+
function defaultModel() {
|
|
10
|
+
return getModelCatalogStore().getSource("xopc-cloud")?.models.find((model) => model.availability === "available" && model.kind === "stt")?.id;
|
|
11
|
+
}
|
|
12
|
+
const xopcCloudTranscriptionProvider = {
|
|
13
|
+
id: "xopc-cloud",
|
|
14
|
+
capabilities: ["audio"],
|
|
15
|
+
requiresApiKey: false,
|
|
16
|
+
autoPriority: { audio: 5 },
|
|
17
|
+
isConfigured: () => Boolean(defaultModel()),
|
|
18
|
+
transcribeAudio: async (request) => {
|
|
19
|
+
const model = request.model ?? defaultModel();
|
|
20
|
+
if (!model) throw new Error("No XOPC Cloud speech-to-text model is available");
|
|
21
|
+
const accessToken = await getProviderAuthService().resolveApiKey("xopc-cloud", request.signal);
|
|
22
|
+
if (!accessToken) throw new Error("XOPC Cloud authorization is unavailable");
|
|
23
|
+
const source = getModelCatalogStore().getSource("xopc-cloud");
|
|
24
|
+
const baseUrl = (request.baseUrl ?? source?.baseUrl ?? resolveXopcModelRouterUrl()).replace(/\/+$/, "");
|
|
25
|
+
const form = new FormData();
|
|
26
|
+
form.append("model", model);
|
|
27
|
+
form.append("file", new File([Uint8Array.from(request.buffer)], request.fileName, { type: request.mime ?? "application/octet-stream" }));
|
|
28
|
+
if (request.language) form.append("language", request.language);
|
|
29
|
+
if (request.prompt) form.append("prompt", request.prompt);
|
|
30
|
+
const response = await fetch(`${baseUrl}/audio/transcriptions`, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
headers: { authorization: `Bearer ${accessToken}` },
|
|
33
|
+
body: form,
|
|
34
|
+
signal: request.signal ?? AbortSignal.timeout(request.timeoutMs),
|
|
35
|
+
redirect: "error"
|
|
36
|
+
});
|
|
37
|
+
const body = await response.json().catch(() => null);
|
|
38
|
+
if (!response.ok) throw new Error(typeof body?.error?.message === "string" ? body.error.message : `XOPC Cloud STT failed (${response.status})`);
|
|
39
|
+
if (typeof body?.text !== "string") throw new Error("XOPC Cloud STT returned an invalid response");
|
|
40
|
+
return {
|
|
41
|
+
text: body.text,
|
|
42
|
+
model,
|
|
43
|
+
...request.language ? { language: request.language } : {}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
registerMediaUnderstandingProvider(xopcCloudTranscriptionProvider);
|
|
48
|
+
//#endregion
|
|
49
|
+
export { xopcCloudTranscriptionProvider };
|
|
@@ -4,8 +4,8 @@ const DEFAULT_STT_CONFIG = {
|
|
|
4
4
|
provider: "xopc-local",
|
|
5
5
|
providers: {
|
|
6
6
|
"xopc-local": { model: "sensevoice-small" },
|
|
7
|
-
alibaba: { model: "
|
|
8
|
-
openai: { model: "
|
|
7
|
+
alibaba: { model: "qwen-audio-3.0-asr-flash" },
|
|
8
|
+
openai: { model: "gpt-4o-mini-transcribe" }
|
|
9
9
|
},
|
|
10
10
|
fallback: {
|
|
11
11
|
enabled: false,
|
|
@@ -14,4 +14,5 @@
|
|
|
14
14
|
export { openAiSpeechProvider, OPENAI_TTS_MODELS, OPENAI_TTS_VOICES } from './openai-speech.js';
|
|
15
15
|
export { alibabaSpeechProvider } from './alibaba-speech.js';
|
|
16
16
|
export { edgeSpeechProvider } from './edge-speech.js';
|
|
17
|
+
export { xopcCloudSpeechProvider } from './xopc-cloud-speech.js';
|
|
17
18
|
export { minimaxSpeechProvider, MINIMAX_TTS_MODELS, MINIMAX_TTS_VOICES, } from './minimax-speech.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { OPENAI_TTS_MODELS, OPENAI_TTS_VOICES, openAiSpeechProvider } from "./openai-speech.js";
|
|
2
2
|
import { alibabaSpeechProvider } from "./alibaba-speech.js";
|
|
3
3
|
import { edgeSpeechProvider } from "./edge-speech.js";
|
|
4
|
+
import { xopcCloudSpeechProvider } from "./xopc-cloud-speech.js";
|
|
4
5
|
import { MINIMAX_TTS_MODELS, MINIMAX_TTS_VOICES, minimaxSpeechProvider } from "./minimax-speech.js";
|
|
5
|
-
export { MINIMAX_TTS_MODELS, MINIMAX_TTS_VOICES, OPENAI_TTS_MODELS, OPENAI_TTS_VOICES, alibabaSpeechProvider, edgeSpeechProvider, minimaxSpeechProvider, openAiSpeechProvider };
|
|
6
|
+
export { MINIMAX_TTS_MODELS, MINIMAX_TTS_VOICES, OPENAI_TTS_MODELS, OPENAI_TTS_VOICES, alibabaSpeechProvider, edgeSpeechProvider, minimaxSpeechProvider, openAiSpeechProvider, xopcCloudSpeechProvider };
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
|
|
2
|
+
import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../../../providers/xopc-cloud-config.js";
|
|
3
|
+
import { getProviderAuthService, init_provider_auth_service } from "../../../providers/provider-auth-service.js";
|
|
4
|
+
import { registerSpeechProvider } from "../speech-registry.js";
|
|
5
|
+
//#region src/voice/tts/providers/xopc-cloud-speech.ts
|
|
6
|
+
init_model_catalog_store();
|
|
7
|
+
init_provider_auth_service();
|
|
8
|
+
init_xopc_cloud_config();
|
|
9
|
+
function availableModels() {
|
|
10
|
+
return getModelCatalogStore().getSource("xopc-cloud")?.models.filter((model) => model.availability === "available" && model.kind === "tts") ?? [];
|
|
11
|
+
}
|
|
12
|
+
function readConfig(config) {
|
|
13
|
+
return config;
|
|
14
|
+
}
|
|
15
|
+
function readSpeed(value) {
|
|
16
|
+
if (value === void 0 || value === null || value === "") return void 0;
|
|
17
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < .25 || value > 4) throw new Error("XOPC Cloud TTS speed must be between 0.25 and 4");
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function extension(contentType, fallback) {
|
|
21
|
+
return {
|
|
22
|
+
"audio/mpeg": "mp3",
|
|
23
|
+
"audio/opus": "opus",
|
|
24
|
+
"audio/ogg": "ogg",
|
|
25
|
+
"audio/wav": "wav",
|
|
26
|
+
"audio/flac": "flac",
|
|
27
|
+
"audio/aac": "aac",
|
|
28
|
+
"audio/pcm": "pcm"
|
|
29
|
+
}[contentType?.split(";")[0] ?? ""] ?? fallback;
|
|
30
|
+
}
|
|
31
|
+
const xopcCloudSpeechProvider = {
|
|
32
|
+
id: "xopc-cloud",
|
|
33
|
+
autoSelectOrder: 5,
|
|
34
|
+
resolveConfig: ({ rawConfig }) => {
|
|
35
|
+
const raw = rawConfig["xopc-cloud"];
|
|
36
|
+
const slice = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : {};
|
|
37
|
+
const model = typeof slice.model === "string" ? slice.model : availableModels()[0]?.id;
|
|
38
|
+
const catalogModel = availableModels().find((entry) => entry.id === model);
|
|
39
|
+
return {
|
|
40
|
+
model,
|
|
41
|
+
voice: typeof slice.voice === "string" ? slice.voice : catalogModel?.tts?.defaultVoice,
|
|
42
|
+
speed: readSpeed(slice.speed),
|
|
43
|
+
instructions: typeof slice.instructions === "string" && slice.instructions.trim() ? slice.instructions.trim() : void 0,
|
|
44
|
+
baseUrl: typeof slice.baseUrl === "string" ? slice.baseUrl : getModelCatalogStore().getSource("xopc-cloud")?.baseUrl ?? resolveXopcModelRouterUrl()
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
isConfigured: ({ providerConfig }) => {
|
|
48
|
+
const config = readConfig(providerConfig);
|
|
49
|
+
return Boolean(config.model && config.voice && availableModels().some((model) => model.id === config.model));
|
|
50
|
+
},
|
|
51
|
+
listVoices: async ({ providerConfig }) => {
|
|
52
|
+
const config = readConfig(providerConfig ?? {});
|
|
53
|
+
if (!config.model) return [];
|
|
54
|
+
const token = await getProviderAuthService().resolveApiKey("xopc-cloud");
|
|
55
|
+
if (!token) return [];
|
|
56
|
+
const response = await fetch(`${config.baseUrl.replace(/\/+$/, "")}/audio/voices?model=${encodeURIComponent(config.model)}`, {
|
|
57
|
+
headers: { authorization: `Bearer ${token}` },
|
|
58
|
+
signal: AbortSignal.timeout(3e4),
|
|
59
|
+
redirect: "error"
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) return [];
|
|
62
|
+
return ((await response.json().catch(() => null))?.data ?? []).filter((voice) => typeof voice.id === "string").map((voice) => ({
|
|
63
|
+
id: voice.id,
|
|
64
|
+
...typeof voice.name === "string" ? { name: voice.name } : {}
|
|
65
|
+
}));
|
|
66
|
+
},
|
|
67
|
+
synthesize: async (request) => {
|
|
68
|
+
const config = readConfig(request.providerConfig);
|
|
69
|
+
const model = typeof request.providerOverrides?.model === "string" ? request.providerOverrides.model : config.model;
|
|
70
|
+
const voice = typeof request.providerOverrides?.voice === "string" ? request.providerOverrides.voice : config.voice;
|
|
71
|
+
if (!model || !voice) throw new Error("XOPC Cloud TTS model or voice is unavailable");
|
|
72
|
+
const catalogModel = availableModels().find((entry) => entry.id === model);
|
|
73
|
+
if (!catalogModel) throw new Error(`XOPC Cloud TTS model is unavailable: ${model}`);
|
|
74
|
+
const speed = readSpeed(request.providerOverrides?.speed ?? config.speed);
|
|
75
|
+
const instructions = typeof request.providerOverrides?.instructions === "string" ? request.providerOverrides.instructions.trim() : config.instructions;
|
|
76
|
+
const outputFormat = request.target === "voice-note" && catalogModel.tts?.outputFormats.includes("opus") ? "opus" : catalogModel.tts?.outputFormats.includes("mp3") ? "mp3" : catalogModel.tts?.outputFormats[0] ?? "wav";
|
|
77
|
+
const token = await getProviderAuthService().resolveApiKey("xopc-cloud");
|
|
78
|
+
if (!token) throw new Error("XOPC Cloud authorization is unavailable");
|
|
79
|
+
const response = await fetch(`${config.baseUrl.replace(/\/+$/, "")}/audio/speech`, {
|
|
80
|
+
method: "POST",
|
|
81
|
+
headers: {
|
|
82
|
+
authorization: `Bearer ${token}`,
|
|
83
|
+
"content-type": "application/json"
|
|
84
|
+
},
|
|
85
|
+
body: JSON.stringify({
|
|
86
|
+
model,
|
|
87
|
+
input: request.text,
|
|
88
|
+
voice,
|
|
89
|
+
response_format: outputFormat,
|
|
90
|
+
...speed !== void 0 && catalogModel.tts?.speed ? { speed } : {},
|
|
91
|
+
...instructions && catalogModel.tts?.instructions ? { instructions } : {}
|
|
92
|
+
}),
|
|
93
|
+
signal: AbortSignal.timeout(request.timeoutMs),
|
|
94
|
+
redirect: "error"
|
|
95
|
+
});
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
const body = await response.json().catch(() => null);
|
|
98
|
+
throw new Error(typeof body?.error?.message === "string" ? body.error.message : `XOPC Cloud TTS failed (${response.status})`);
|
|
99
|
+
}
|
|
100
|
+
const audioBuffer = Buffer.from(await response.arrayBuffer());
|
|
101
|
+
if (audioBuffer.length === 0) throw new Error("XOPC Cloud TTS returned empty audio");
|
|
102
|
+
const fileExtension = extension(response.headers.get("content-type"), outputFormat);
|
|
103
|
+
return {
|
|
104
|
+
audioBuffer,
|
|
105
|
+
outputFormat: fileExtension,
|
|
106
|
+
fileExtension,
|
|
107
|
+
voiceCompatible: fileExtension === "opus" || fileExtension === "ogg"
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
registerSpeechProvider(xopcCloudSpeechProvider);
|
|
112
|
+
//#endregion
|
|
113
|
+
export { xopcCloudSpeechProvider };
|
|
@@ -57,7 +57,7 @@ export interface TTSModelOverrideConfig {
|
|
|
57
57
|
export interface TTSConfig {
|
|
58
58
|
enabled: boolean;
|
|
59
59
|
provider: TTSProvider;
|
|
60
|
-
/** Trigger mode
|
|
60
|
+
/** Trigger mode for automatic voice replies. */
|
|
61
61
|
trigger: TTSAutoMode;
|
|
62
62
|
/** Fallback configuration */
|
|
63
63
|
fallback?: {
|
|
@@ -76,7 +76,7 @@ function validateSuggestion(value, allowedPaths) {
|
|
|
76
76
|
verification: strings(item.verification, 4).map((entry) => entry.slice(0, 300))
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
-
function validateProfileCandidate(value) {
|
|
79
|
+
function validateProfileCandidate(value, allowedRefs) {
|
|
80
80
|
if (!value || typeof value !== "object") return null;
|
|
81
81
|
const item = value;
|
|
82
82
|
const category = item.category === "role" || item.category === "focus" || item.category === "technology" || item.category === "workflow" || item.category === "preference" ? item.category : void 0;
|
|
@@ -84,12 +84,15 @@ function validateProfileCandidate(value) {
|
|
|
84
84
|
const statement = item.statement.trim().slice(0, 500);
|
|
85
85
|
if (statement.length < 4) return null;
|
|
86
86
|
const confidence = item.confidence === "high" || item.confidence === "low" ? item.confidence : "medium";
|
|
87
|
+
const evidenceRefs = allowedRefs ? strings(item.evidenceRefs, 12).filter((ref) => allowedRefs.has(ref)) : void 0;
|
|
88
|
+
if (allowedRefs && !evidenceRefs?.length) return null;
|
|
87
89
|
return {
|
|
88
90
|
id: randomUUID(),
|
|
89
91
|
category,
|
|
90
92
|
statement,
|
|
91
93
|
confidence,
|
|
92
94
|
evidence: strings(item.evidence, 4).map((entry) => entry.slice(0, 300)),
|
|
95
|
+
...evidenceRefs?.length ? { evidenceRefs } : {},
|
|
93
96
|
status: "pending"
|
|
94
97
|
};
|
|
95
98
|
}
|
|
@@ -216,7 +219,7 @@ async function analyzeWorkContext(input) {
|
|
|
216
219
|
result: lowConfidenceResult(input.snapshot)
|
|
217
220
|
};
|
|
218
221
|
const primarySuggestion = [...suggestions].sort((a, b) => suggestionScore(b) - suggestionScore(a))[0];
|
|
219
|
-
const profileCandidates = input.candidateContext?.length && Array.isArray(parsed.profileCandidates) ? parsed.profileCandidates.map(validateProfileCandidate).filter((value) => Boolean(value)).slice(0, 6) : [];
|
|
222
|
+
const profileCandidates = input.candidateContext?.length && Array.isArray(parsed.profileCandidates) ? parsed.profileCandidates.map((value) => validateProfileCandidate(value)).filter((value) => Boolean(value)).slice(0, 6) : [];
|
|
220
223
|
const workThreadCandidates = Array.isArray(parsed.workThreads) ? parsed.workThreads.map((value) => validateWorkThreadCandidate(value, allowedThreadRefs)).filter((value) => Boolean(value)).slice(0, 3) : [];
|
|
221
224
|
const projectSummary = typeof parsed.projectSummary === "string" ? parsed.projectSummary.trim() : "";
|
|
222
225
|
const currentState = typeof parsed.currentState === "string" ? parsed.currentState.trim() : "";
|
|
@@ -254,6 +257,7 @@ async function analyzeUnderstandingSources(input) {
|
|
|
254
257
|
endsAt: item.endsAt,
|
|
255
258
|
ownerAttribution: item.ownerAttribution,
|
|
256
259
|
sensitivity: item.sensitivity,
|
|
260
|
+
resourceUri: item.resourceUri,
|
|
257
261
|
text
|
|
258
262
|
}];
|
|
259
263
|
});
|
|
@@ -266,7 +270,8 @@ async function analyzeUnderstandingSources(input) {
|
|
|
266
270
|
"Analyze bounded context from sources the user explicitly chose to connect.",
|
|
267
271
|
"Return only one JSON object with profileCandidates and workThreads.",
|
|
268
272
|
"profileCandidates contains at most 6 stable, useful work-related facts.",
|
|
269
|
-
"Each item has category (role, focus, technology, workflow, or preference), statement, confidence, and
|
|
273
|
+
"Each item has category (role, focus, technology, workflow, or preference), statement, confidence, evidence, and evidenceRefs.",
|
|
274
|
+
"profileCandidates evidenceRefs must contain only supplied refs. Do not create a candidate without direct support.",
|
|
270
275
|
"workThreads contains at most 3 evidence-backed current, ongoing, or long-term work streams.",
|
|
271
276
|
"Each work thread has topicKey, title, summary, status, horizon, confidence, and evidenceRefs.",
|
|
272
277
|
"evidenceRefs must contain only supplied refs. Do not create a thread without direct support.",
|
|
@@ -294,7 +299,7 @@ async function analyzeUnderstandingSources(input) {
|
|
|
294
299
|
const raw = extractText(response.content);
|
|
295
300
|
const parsed = parseJson(raw);
|
|
296
301
|
if (!parsed) throw invalidJsonError("Understanding source analysis", response, raw);
|
|
297
|
-
const profileCandidates = Array.isArray(parsed.profileCandidates) ? parsed.profileCandidates.map(validateProfileCandidate).filter((value) => Boolean(value)).slice(0, 6) : [];
|
|
302
|
+
const profileCandidates = Array.isArray(parsed.profileCandidates) ? parsed.profileCandidates.map((value) => validateProfileCandidate(value, allowedRefs)).filter((value) => Boolean(value)).slice(0, 6) : [];
|
|
298
303
|
const allowedRefs = new Set(items.map((item) => item.ref));
|
|
299
304
|
return {
|
|
300
305
|
modelRef,
|
|
@@ -14,4 +14,5 @@ export interface DiscoverWorkCandidatesOptions {
|
|
|
14
14
|
platform?: NodeJS.Platform;
|
|
15
15
|
environment?: NodeJS.ProcessEnv;
|
|
16
16
|
}
|
|
17
|
+
export declare function resolvePersonalWorkRoots(homeDirectory: string, platform: NodeJS.Platform, environment: NodeJS.ProcessEnv): Promise<string[]>;
|
|
17
18
|
export declare function discoverWorkCandidates(options?: DiscoverWorkCandidatesOptions): Promise<WorkDiscoveryCandidate[]>;
|
|
@@ -187,7 +187,7 @@ function resolveXdgPath(value, homeDirectory) {
|
|
|
187
187
|
const expanded = value.trim().replace(/^"|"$/g, "").replace(/^\$HOME(?=\/|$)|^\$\{HOME\}(?=\/|$)/, homeDirectory);
|
|
188
188
|
return isAbsolute(expanded) ? resolve(expanded) : null;
|
|
189
189
|
}
|
|
190
|
-
async function
|
|
190
|
+
async function resolvePersonalWorkRoots(homeDirectory, platform, environment) {
|
|
191
191
|
const roots = PERSONAL_WORK_ROOT_NAMES.map((name) => join(homeDirectory, name));
|
|
192
192
|
if (platform === "win32") for (const oneDrive of [
|
|
193
193
|
environment.OneDrive,
|
|
@@ -253,7 +253,7 @@ async function discoverWorkCandidates(options = {}) {
|
|
|
253
253
|
rootPath: source.rootPath,
|
|
254
254
|
source: "approved_directory"
|
|
255
255
|
}));
|
|
256
|
-
const [commonInputs, personalInputs] = await Promise.all([commonRootInputs(homeDirectory, options.signal),
|
|
256
|
+
const [commonInputs, personalInputs] = await Promise.all([commonRootInputs(homeDirectory, options.signal), resolvePersonalWorkRoots(homeDirectory, options.platform ?? process.platform, options.environment ?? process.env).then((roots) => personalRootInputs(roots, nowMs, options.signal))]);
|
|
257
257
|
const uniqueInputs = /* @__PURE__ */ new Map();
|
|
258
258
|
for (const input of [
|
|
259
259
|
...existingInputs,
|
|
@@ -276,4 +276,4 @@ async function discoverWorkCandidates(options = {}) {
|
|
|
276
276
|
return [...canonicalCandidates.values()].sort((a, b) => b.score - a.score || (b.lastActiveAt ?? 0) - (a.lastActiveAt ?? 0) || a.rootPath.localeCompare(b.rootPath)).slice(0, 8);
|
|
277
277
|
}
|
|
278
278
|
//#endregion
|
|
279
|
-
export { discoverWorkCandidates };
|
|
279
|
+
export { discoverWorkCandidates, resolvePersonalWorkRoots };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { WORK_DISCOVERY_SCAN_POLICY_VERSION, canonicalWorkDiscoveryRoot, previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, readWorkDiscoveryTextExcerpt, searchWorkDiscoveryText, summarizeWorkContextSnapshot } from "./probe.js";
|
|
2
2
|
import { analyzeUnderstandingSources, analyzeWorkContext, workDiscoveryResultMarkdown } from "./analyzer.js";
|
|
3
|
-
import { discoverWorkCandidates } from "./candidate-discovery.js";
|
|
3
|
+
import { discoverWorkCandidates, resolvePersonalWorkRoots } from "./candidate-discovery.js";
|
|
4
4
|
import { workDiscoveryFingerprintsEqual } from "./incremental.js";
|
|
5
5
|
import { createWorkDiscoveryRun, getWorkDiscoveryOnboardingState, getWorkDiscoveryRun, getWorkDiscoveryRunByIdempotencyKey, setWorkDiscoveryFeedback, setWorkDiscoveryOnboardingState, updateWorkDiscoveryRun } from "./repository.js";
|
|
6
6
|
import { findActiveWorkDiscoverySourceRefresh, listWorkDiscoverySourceRefreshes, recordWorkDiscoverySourceRefresh, updateWorkDiscoverySourceRefreshForRun } from "./incremental-repository.js";
|
|
@@ -10,4 +10,4 @@ import { persistWorkThreadsFromDiscovery } from "./thread-service.js";
|
|
|
10
10
|
import { getWorkDiscoveryDirectorySource, listWorkDiscoveryDirectorySources, revokeWorkDiscoveryDirectorySource, upsertWorkDiscoveryDirectorySource } from "./source-repository.js";
|
|
11
11
|
import { WorkDiscoveryService } from "./service.js";
|
|
12
12
|
import { evaluateWorkUnderstandingCase } from "./evaluation.js";
|
|
13
|
-
export { DEFAULT_WORK_INVESTIGATION_BUDGET, WORK_DISCOVERY_SCAN_POLICY_VERSION, WorkDiscoveryService, analyzeUnderstandingSources, analyzeWorkContext, appendWorkUnderstandingEvidence, canonicalWorkDiscoveryRoot, createWorkDiscoveryRun, createWorkUnderstandingInvestigation, discoverWorkCandidates, evaluateWorkUnderstandingCase, findActiveWorkDiscoverySourceRefresh, getWorkDiscoveryDirectorySource, getWorkDiscoveryOnboardingState, getWorkDiscoveryRun, getWorkDiscoveryRunByIdempotencyKey, getWorkUnderstandingInvestigation, getWorkUnderstandingInvestigationForRun, investigateWorkContext, listWorkDiscoveryDirectorySources, listWorkDiscoverySourceRefreshes, listWorkUnderstandingEvidence, persistWorkThreadsFromDiscovery, previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, readWorkDiscoveryTextExcerpt, recordWorkDiscoverySourceRefresh, resetWorkUnderstandingInvestigation, revokeWorkDiscoveryDirectorySource, searchWorkDiscoveryText, setWorkDiscoveryFeedback, setWorkDiscoveryOnboardingState, summarizeWorkContextSnapshot, updateWorkDiscoveryRun, updateWorkDiscoverySourceRefreshForRun, updateWorkUnderstandingEvidenceObservation, updateWorkUnderstandingInvestigation, upsertWorkDiscoveryDirectorySource, workDiscoveryFingerprintsEqual, workDiscoveryResultMarkdown };
|
|
13
|
+
export { DEFAULT_WORK_INVESTIGATION_BUDGET, WORK_DISCOVERY_SCAN_POLICY_VERSION, WorkDiscoveryService, analyzeUnderstandingSources, analyzeWorkContext, appendWorkUnderstandingEvidence, canonicalWorkDiscoveryRoot, createWorkDiscoveryRun, createWorkUnderstandingInvestigation, discoverWorkCandidates, evaluateWorkUnderstandingCase, findActiveWorkDiscoverySourceRefresh, getWorkDiscoveryDirectorySource, getWorkDiscoveryOnboardingState, getWorkDiscoveryRun, getWorkDiscoveryRunByIdempotencyKey, getWorkUnderstandingInvestigation, getWorkUnderstandingInvestigationForRun, investigateWorkContext, listWorkDiscoveryDirectorySources, listWorkDiscoverySourceRefreshes, listWorkUnderstandingEvidence, persistWorkThreadsFromDiscovery, previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, readWorkDiscoveryTextExcerpt, recordWorkDiscoverySourceRefresh, resetWorkUnderstandingInvestigation, resolvePersonalWorkRoots, revokeWorkDiscoveryDirectorySource, searchWorkDiscoveryText, setWorkDiscoveryFeedback, setWorkDiscoveryOnboardingState, summarizeWorkContextSnapshot, updateWorkDiscoveryRun, updateWorkDiscoverySourceRefreshForRun, updateWorkUnderstandingEvidenceObservation, updateWorkUnderstandingInvestigation, upsertWorkDiscoveryDirectorySource, workDiscoveryFingerprintsEqual, workDiscoveryResultMarkdown };
|
|
@@ -46,7 +46,7 @@ export declare class WorkDiscoveryService {
|
|
|
46
46
|
reused?: undefined;
|
|
47
47
|
}>;
|
|
48
48
|
revokeDirectorySource(id: string): import("./types.js").WorkDiscoveryDirectorySource;
|
|
49
|
-
importUnderstandingSources(rawItems: unknown[], signal?: AbortSignal, runId?: string): Promise<{
|
|
49
|
+
importUnderstandingSources(rawItems: unknown[], signal?: AbortSignal, runId?: string, rawCheckpoints?: Record<string, unknown>): Promise<{
|
|
50
50
|
profileCandidates: {
|
|
51
51
|
status: "rejected" | "pending";
|
|
52
52
|
understandingId: string;
|
|
@@ -55,6 +55,7 @@ export declare class WorkDiscoveryService {
|
|
|
55
55
|
statement: string;
|
|
56
56
|
confidence: "high" | "medium" | "low";
|
|
57
57
|
evidence: string[];
|
|
58
|
+
evidenceRefs?: string[];
|
|
58
59
|
}[];
|
|
59
60
|
workThreads: import("./types.js").WorkUnderstandingThread[];
|
|
60
61
|
focuses: import("../user-context/sources/types.js").UserFocus[];
|