@xopcai/xopc 0.0.362 → 0.0.364
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-_2aJ4ozN.js → activity-store-GvR2gZ0T.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CSIn4ghK.js → agent-avatar-dicebear-7Ct-ZlfL.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-DBNFaHYa.js → agent-defaults-settings-panel-wYj-iyqv.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-DJkGbMVg.js → agent-plugin-dialog-C9HYMhnJ.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-admin-api-Dl0V7UQq.js → agents-admin-api-BkXb7VEZ.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-CuQayYYr.js → agents-hPkFQ81z.js} +3 -3
- package/dist/gateway/static/root/assets/{app-management-settings-panel-CSczq9QV.js → app-management-settings-panel-CjfsIn9A.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-W0vc1J1Q.js → appearance-settings-qqHZ15GU.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-esnvb3hh.js → apps-page-Ba2VkQk6.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-CBR91gHK.js → archive-plugin-CKe3qAaL.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-B9RdzKUS.js → automations-page-Bt8Q58ut.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-workspace-U9TEZd_t.js → automations-workspace-Ch0ViAJW.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-C9KIjPph.js → binary-plugins-J51oS7-D.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-C0bammwh.js → block-editor-ClRFbHP7.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automation-inputs-D2E0co_S.js → browser-automation-inputs-5B3qAdmb.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-8kqdhAOz.js → browser-automations-page-BjMub7JM.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-Dl4idi13.js → browser-settings-page-CYrPA-Fp.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-Bfktn_7E.js → capabilities-BKu9BqPe.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-BmMMlNmY.js → capabilities-CT_ZW9fT.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-page-3ImhKPBx.js → capabilities-page-dW6FXtOy.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-4VDEB_ob.js → capabilities-settings-panel-gZ8auLwa.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-header-actions-D1gxCGi8.js → capability-header-actions-L1NvoOUG.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-Drbr2JR-.js → channels-Dx5T2G73.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-CSkksCaa.js → chat-terminal-dock-DsCpKPBe.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-BIXpOJAk.js → computer-settings-page-6FWwxYLe.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-CTnlVEE1.js → connector-service-page-mtH9mEBf.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-BluT2l4d.js → connectors-page-DgDLaws0.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-Bw-CydDe.js → date-picker-BDcwEaIx.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-CgHzhtAc.js → dependency-picker-B_fPQBTM.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-YahEnyfd.js → desktop-pet-CJrO9Vd_.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-47Z4bqJr.js → desktop-pet-settings-DYAfri9w.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-C3aPEEaM.js → device-pairing-wizard-CqRys2R8.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-DH_ok92y.js → directory-picker-path-field-D7_qSxNZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-t1TiLQrR.js → extension-debug-page-BGyJpRv4.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BeV-7G1h.js → extension-page-D1zBmd8F.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-CFCxzqna.js → extension-provider-F9JzOWZ3.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DCODJHOu.js → extension-settings-page-CTR8AjCG.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-CJzvASNV.js → fallback-models-Chhv4Nfv.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-B3LfyXpc.js → gateway-config-swr-CoRoOG1l.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-CWxXXAe_.js → gateway-realtime-D0ygm6bc.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-DBvCRclh.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-settings-Q5NFzAJ_.js → gateway-settings-BVfz4Tla.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BzQP02wp.js → gateway-startup-retry-FDS6S6qa.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-DndTkAw8.js → home-page-BF_9C9yW.js} +1 -1
- package/dist/gateway/static/root/assets/{image-generation-api-BO-Xs__S.js → image-generation-api-BPd76jW5.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-Bb6Gm30L.js → imports-page-9EnECtcl.js} +1 -1
- package/dist/gateway/static/root/assets/{index-qOHWhsEK.js → index-BpXej9jJ.js} +7 -7
- package/dist/gateway/static/root/assets/index-CbJNcWAn.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-D2u6sk5l.js → keyboard-shortcuts-settings-MC7mG2h2.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CHeMfXrB.js → local-app-workbench-page-CytNu0-_.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-BanU1SLr.js → local-apps-page-c3HncHZ3.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-DLZQBcZY.js → local-session-drafts-gbemPamv.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BbwWB0ra.js → locale-store-DId6-v2R.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-CQdHKCL0.js → logs-page-D4aXtitd.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-D0V5kCx0.js → management-settings-CRzWi_iJ.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-DIBLXsPm.js → markdown-view-DQZ51j9e.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-XPzvDZPz.js → media-plugins-XLewwq2q.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-B4AhAW4B.js → messages-BHvpZNe9.js} +2 -2
- package/dist/gateway/static/root/assets/models-hub-cache-B9SKjidc.js +1 -0
- package/dist/gateway/static/root/assets/{note-detail-panel-CodeKI_W.js → note-detail-panel-BgbByI-4.js} +3 -3
- package/dist/gateway/static/root/assets/{notes-api-CLn4r03Z.js → notes-api-Byt65v3r.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-liRQoHbF.js → notes-page-R2BX5XCE.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-api-D9zkd42J.js → oauth-api-BYsCbyGZ.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-DO6DB9pi.js → page-context-capture-button-RBp1QK0F.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-page-DdfdwOv5.js → personal-page-F0jTBWva.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-C9a3sm6Z.js → product-open-page-BtDK68qb.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-BVe5R-Nj.js → project-detail-page-DmQEm0yH.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-D_rCwi7w.js → projects-page-CrLQvkHX.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-BFxQTbXQ.js → registry-api-7F2WNEZC.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-B3imt2du.js → remote-access-hub-C25_hQAd.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-C9WC8hJM.js → runtime-tools-settings-panel-B0c120iI.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-DL95V1UP.js → scenes-page-DM64yMnx.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CDgGmgrq.js → schema-form-DQpQc9tH.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-tkAQXGBG.js → send-session-input-D1oc6BC6.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-9X7qep91.js → session-api-N3N37MrR.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-Dy22bbJT.js → session-manager-CMGUwtbN.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-CeeKIVsM.js → sessions-page-DvDO8LtA.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BNhgbmcX.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-xmUGYSOG.js → settings-page-GgBEp6O7.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-CmjT9Q4P.js → setup-status-panel-10bMi6yL.js} +1 -1
- package/dist/gateway/static/root/assets/{share-link-dialog-DeOe9qfQ.js → share-link-dialog-TBBGJPfT.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-Ck27gozJ.js → share-preview-page-DyRLPsPv.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-D-GuMkPu.js → shares-api-DU0fHP2G.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-DpvM2OyO.js → shares-settings-DJ1ME-XM.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-api-BpD02td8.js → skill-api-1Puv6wOz.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-CezAwYxM.js → skill-reload-api-ClyFqHk7.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-BCgbVI-P.js → skills-page-D52pEr5x.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-UODcpzsP.js → system-settings-panel--yV67a8L.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-BbqQnNes.js → task-detail-page-D-tcS2bS.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-6IK2Ik2J.js → theme-store-OhcbFEUR.js} +1 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-DoBJ0TYY.js +1 -0
- package/dist/gateway/static/root/assets/{tunnel-api-Eey2aZIz.js → tunnel-api-COLdiP_E.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-BrWj5mk3.js → usage-page-CtM5IfrL.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-B-3BJbnn.js → use-autosave-veoM0dHn.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-ByAHuR8v.js → use-composer-attachments-DB0bBGzZ.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-CXVwWJeP.js → use-file-preview-expanded-Bope6MW6.js} +2 -2
- package/dist/gateway/static/root/assets/{user-model-page-Cg-oM8nY.js → user-model-page-CSh61kZ5.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-BtffIKZD.js → voice-api-key-field-CwD6a3KQ.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-BMm9dSKX.js → voice-config-api-Daexehmc.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-ByHhF_4r.js → work-discovery-overlay-C9u7tuEc.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DfNn5VTy.js → workflow-run-setup-panel-BMOBbf33.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-B67D-7Wt.js → workflows-page-BrD9vXqO.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-api-TAD7LYsc.js → workspace-api-Cs4sjV2A.js} +2 -2
- package/dist/gateway/static/root/index.html +28 -28
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +11 -7
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +28 -3
- package/dist/src/agent/embedded/run-turn.js +18 -3
- package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
- package/dist/src/agent/service.js +6 -4
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/index.js +1 -1
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/tools/xopc-use-tool.js +2 -2
- package/dist/src/agent-catalog/capabilities.js +2 -2
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/oauth-provider-lock.js +1 -1
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/automations/capabilities/drafts.js +1 -1
- package/dist/src/bootstrap/application-state.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/capabilities/runtime/dispatcher.js +1 -1
- package/dist/src/capabilities/runtime/product.js +1 -1
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/agents.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/image-providers.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/models.js +2 -2
- package/dist/src/cli/commands/onboard/model.js +4 -4
- package/dist/src/cli/utils/init-workspace-core.js +1 -1
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +2 -2
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/reload.d.ts +1 -0
- package/dist/src/config/reload.js +4 -0
- package/dist/src/config/rules.js +5 -0
- package/dist/src/config/schema.d.ts +23 -0
- package/dist/src/config/schema.js +6 -3
- package/dist/src/extensions/activation-context.js +1 -1
- package/dist/src/extensions/agent-plugins/validation.js +1 -1
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- package/dist/src/gateway/hono/routes/config-patch/misc.js +3 -3
- package/dist/src/gateway/hono/routes/connectors.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/models.js +2 -2
- package/dist/src/gateway/hono/routes/notes.js +2 -2
- package/dist/src/gateway/hono/routes/observability.d.ts +3 -0
- package/dist/src/gateway/hono/routes/observability.js +106 -0
- package/dist/src/gateway/hono/routes/projects.js +2 -2
- package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
- package/dist/src/gateway/hono/routes/tasks.js +1 -1
- package/dist/src/gateway/image-generation-setup.js +2 -2
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/security/gateway-scopes.js +1 -0
- package/dist/src/gateway/service/config-coordinator.d.ts +0 -25
- package/dist/src/gateway/service/config-coordinator.js +31 -0
- package/dist/src/gateway/service.js +18 -8
- package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/local-apps/service.js +1 -1
- package/dist/src/observability/config.d.ts +40 -0
- package/dist/src/observability/config.js +31 -0
- package/dist/src/observability/langfuse.d.ts +31 -0
- package/dist/src/observability/langfuse.js +180 -0
- package/dist/src/observability/runtime.d.ts +57 -0
- package/dist/src/observability/runtime.js +404 -0
- package/dist/src/observability/sanitize.d.ts +3 -0
- package/dist/src/observability/sanitize.js +74 -0
- package/dist/src/observability/store.d.ts +20 -0
- package/dist/src/observability/store.js +128 -0
- package/dist/src/observability/storeWorker.d.ts +2 -0
- package/dist/src/observability/storeWorker.js +155 -0
- package/dist/src/observability/types.d.ts +21 -0
- package/dist/src/observability/types.js +1 -0
- package/dist/src/personal-agent/communication.js +1 -1
- package/dist/src/personal-agent/reply-composer.d.ts +22 -0
- package/dist/src/personal-agent/reply-composer.js +276 -0
- package/dist/src/personal-agent/reply-style.d.ts +2 -0
- package/dist/src/personal-agent/reply-style.js +14 -0
- package/dist/src/personal-agent/request-delivery.d.ts +1 -1
- package/dist/src/personal-agent/request-delivery.js +18 -4
- package/dist/src/personal-agent/request-service.js +1 -1
- package/dist/src/personal-agent/service.js +10 -2
- package/dist/src/platform/index.js +1 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +3 -3
- package/dist/src/providers/model-call.js +19 -5
- package/dist/src/providers/model-catalog-persistence.js +1 -1
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/provider-disconnect-core.js +1 -1
- package/dist/src/providers/xopc-cloud-catalog-coordinator.js +1 -1
- package/dist/src/storage/sqlite/ai-usage-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/ai-usage-repository.js +4 -2
- package/dist/src/storage/sqlite/migrations/233_observability_usage_links.sql +3 -0
- package/dist/src/storage/sqlite/migrations/234_task_result_reply.sql +14 -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/tasks/capabilities/read.js +2 -2
- package/dist/src/tasks/task-result-delivery-service.js +20 -4
- package/dist/src/tui/backends/embedded-backend.js +3 -3
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/usage/recorder.d.ts +4 -2
- package/dist/src/usage/recorder.js +54 -26
- package/dist/src/usage/types.d.ts +3 -0
- package/dist/src/utils/logger/context.d.ts +1 -1
- package/dist/src/utils/logger/context.js +4 -1
- package/dist/src/utils/logger/types.d.ts +3 -0
- package/dist/src/voice/realtime/agentBroker.js +11 -2
- package/dist/src/voice/realtime/agentEngine.js +18 -10
- package/dist/src/voice/realtime/omniEngine.js +11 -2
- package/dist/src/voice/realtime/persona-context.js +1 -1
- package/dist/src/voice/realtime/playback-echo.d.ts +7 -0
- package/dist/src/voice/realtime/playback-echo.js +23 -1
- package/package.json +7 -4
- package/dist/gateway/static/root/assets/gateway-realtime-store-DS4WzQyF.js +0 -1
- package/dist/gateway/static/root/assets/index-Byk2QKIS.css +0 -1
- package/dist/gateway/static/root/assets/models-hub-cache-DN5MnhL8.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DuvJrDU2.js +0 -1
|
@@ -70,7 +70,12 @@ var DurableVoiceAgentBroker = class {
|
|
|
70
70
|
return {
|
|
71
71
|
taskId: row.id,
|
|
72
72
|
runId,
|
|
73
|
-
events: this.events(row.id, runId, afterSeq, input.signal
|
|
73
|
+
events: this.events(row.id, runId, afterSeq, input.signal, [
|
|
74
|
+
"completed",
|
|
75
|
+
"cancelled",
|
|
76
|
+
"failed",
|
|
77
|
+
"interrupted"
|
|
78
|
+
].includes(row.status))
|
|
74
79
|
};
|
|
75
80
|
}
|
|
76
81
|
async cancel(taskId) {
|
|
@@ -80,7 +85,7 @@ var DurableVoiceAgentBroker = class {
|
|
|
80
85
|
this.runByTask.delete(taskId);
|
|
81
86
|
return true;
|
|
82
87
|
}
|
|
83
|
-
async *events(taskId, runId, afterSeq, signal) {
|
|
88
|
+
async *events(taskId, runId, afterSeq, signal, ended) {
|
|
84
89
|
const queued = [];
|
|
85
90
|
let wake;
|
|
86
91
|
const push = (event) => {
|
|
@@ -96,6 +101,10 @@ var DurableVoiceAgentBroker = class {
|
|
|
96
101
|
};
|
|
97
102
|
signal.addEventListener("abort", abort, { once: true });
|
|
98
103
|
try {
|
|
104
|
+
if (ended && !subscription.initial.some((delivery) => {
|
|
105
|
+
const event = eventData(delivery);
|
|
106
|
+
return event?.type === "run_end" || event?.type === "stream_end";
|
|
107
|
+
})) throw new Error("Completed voice task event history is unavailable");
|
|
99
108
|
while (!signal.aborted) {
|
|
100
109
|
if (!queued.length) await new Promise((resolve) => {
|
|
101
110
|
wake = resolve;
|
|
@@ -3,7 +3,7 @@ import { init_logger } from "../../utils/logger.js";
|
|
|
3
3
|
import { speakStream } from "../tts/speak-core.js";
|
|
4
4
|
import { AudioPlaybackWindow } from "./audio-playback-window.js";
|
|
5
5
|
import { TurnCoordinator } from "./turnPolicy.js";
|
|
6
|
-
import {
|
|
6
|
+
import { PlaybackEchoCandidates } from "./playback-echo.js";
|
|
7
7
|
import { PcmFrameBuffer } from "./pcmFrameBuffer.js";
|
|
8
8
|
import { SpeakableSegmenter } from "./speakable-segmenter.js";
|
|
9
9
|
import crypto from "node:crypto";
|
|
@@ -36,6 +36,7 @@ function createAgentVoiceEngine(options) {
|
|
|
36
36
|
let finalCount = 0;
|
|
37
37
|
let committing = false;
|
|
38
38
|
let recentPlayback;
|
|
39
|
+
const echoCandidates = new PlaybackEchoCandidates();
|
|
39
40
|
const finalizedUtterances = /* @__PURE__ */ new Set();
|
|
40
41
|
let pendingTurn;
|
|
41
42
|
let taskUpdateQueued = false;
|
|
@@ -89,6 +90,11 @@ function createAgentVoiceEngine(options) {
|
|
|
89
90
|
function cancelActiveResponse(reason) {
|
|
90
91
|
const response = activeResponse;
|
|
91
92
|
if (!response) return false;
|
|
93
|
+
if (response.audioStarted && response.audibleText) recentPlayback = {
|
|
94
|
+
responseId: response.id,
|
|
95
|
+
text: response.audibleText,
|
|
96
|
+
expiresAt: Date.now() + PLAYBACK_ECHO_TAIL_MS
|
|
97
|
+
};
|
|
92
98
|
activeResponse = void 0;
|
|
93
99
|
response.abortController.abort(reason);
|
|
94
100
|
send("response.cancelled", {
|
|
@@ -267,13 +273,11 @@ function createAgentVoiceEngine(options) {
|
|
|
267
273
|
conversationId: claim.request.conversationId,
|
|
268
274
|
expectedTranscriptId: claim.conversationSessionId,
|
|
269
275
|
signal: response.abortController.signal,
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
276
|
-
} : {}
|
|
276
|
+
clientMessageId: updateClientMessageId ?? `voice:${claim.conversationSessionId}:${claim.sessionId}:${inputGeneration}:${turnId}`,
|
|
277
|
+
...updateClientMessageId ? { origin: {
|
|
278
|
+
type: "system",
|
|
279
|
+
source: "task_update"
|
|
280
|
+
} } : {}
|
|
277
281
|
});
|
|
278
282
|
response.taskId = task.taskId;
|
|
279
283
|
send("task.created", {
|
|
@@ -438,6 +442,7 @@ function createAgentVoiceEngine(options) {
|
|
|
438
442
|
if (event.type === "ready" || event.type === "usage") return;
|
|
439
443
|
if (event.type === "error") {
|
|
440
444
|
turn.reset();
|
|
445
|
+
echoCandidates.clear();
|
|
441
446
|
log.warn({
|
|
442
447
|
err: event.error,
|
|
443
448
|
sessionId: claim.sessionId,
|
|
@@ -454,6 +459,7 @@ function createAgentVoiceEngine(options) {
|
|
|
454
459
|
if (muted || finalizedUtterances.has(event.utteranceId)) return;
|
|
455
460
|
if (event.type === "speech_started") {
|
|
456
461
|
lastUserSpeechAt = Date.now();
|
|
462
|
+
echoCandidates.remember(event.utteranceId, activeResponse?.audioStarted ? activeResponse.audibleText : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback.text : void 0);
|
|
457
463
|
if (claim.request.purpose === "conversation") {
|
|
458
464
|
if (pendingTurn) {
|
|
459
465
|
pendingTurn.cancelled = true;
|
|
@@ -490,11 +496,11 @@ function createAgentVoiceEngine(options) {
|
|
|
490
496
|
responseId: activeResponse.id,
|
|
491
497
|
text: activeResponse.audibleText
|
|
492
498
|
} : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback : void 0;
|
|
493
|
-
if (claim.request.purpose === "conversation" &&
|
|
499
|
+
if (claim.request.purpose === "conversation" && echoCandidates.matches(event.utteranceId, text, playback?.text)) {
|
|
494
500
|
bufferFinal(event.utteranceId, "");
|
|
495
501
|
log.debug({
|
|
496
502
|
sessionId: claim.sessionId,
|
|
497
|
-
responseId: playback
|
|
503
|
+
responseId: playback?.responseId,
|
|
498
504
|
transcriptCharacters: text.length
|
|
499
505
|
}, "Ignored finalized transcription matching recent voice playback");
|
|
500
506
|
return;
|
|
@@ -517,6 +523,7 @@ function createAgentVoiceEngine(options) {
|
|
|
517
523
|
}
|
|
518
524
|
function discardInput() {
|
|
519
525
|
turn.reset();
|
|
526
|
+
echoCandidates.clear();
|
|
520
527
|
pendingTurn = void 0;
|
|
521
528
|
inputGeneration += 1;
|
|
522
529
|
queuedTurns = 0;
|
|
@@ -623,6 +630,7 @@ function createAgentVoiceEngine(options) {
|
|
|
623
630
|
if (closing) return closing;
|
|
624
631
|
closed = true;
|
|
625
632
|
turn.reset();
|
|
633
|
+
echoCandidates.clear();
|
|
626
634
|
cancelActiveResponse("session_closed");
|
|
627
635
|
sttAbort.abort("session_closed");
|
|
628
636
|
sttSession?.abort("session_closed");
|
|
@@ -2,7 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { AudioPlaybackWindow } from "./audio-playback-window.js";
|
|
4
4
|
import { TurnCoordinator } from "./turnPolicy.js";
|
|
5
|
-
import {
|
|
5
|
+
import { PlaybackEchoCandidates } from "./playback-echo.js";
|
|
6
6
|
import { PcmFrameBuffer } from "./pcmFrameBuffer.js";
|
|
7
7
|
import crypto from "node:crypto";
|
|
8
8
|
import WebSocket from "ws";
|
|
@@ -45,6 +45,7 @@ function createOmniVoiceEngine(options) {
|
|
|
45
45
|
let failed = false;
|
|
46
46
|
let platformRequestId;
|
|
47
47
|
let active;
|
|
48
|
+
const echoCandidates = new PlaybackEchoCandidates();
|
|
48
49
|
let recentPlayback;
|
|
49
50
|
let waitingForCancellation;
|
|
50
51
|
let responseCreateQueued = false;
|
|
@@ -147,6 +148,10 @@ function createOmniVoiceEngine(options) {
|
|
|
147
148
|
const cancel = (reason) => {
|
|
148
149
|
const response = active;
|
|
149
150
|
if (!response) return false;
|
|
151
|
+
if (response.audio && response.text) recentPlayback = {
|
|
152
|
+
text: response.text,
|
|
153
|
+
expiresAt: Date.now() + PLAYBACK_ECHO_TAIL_MS
|
|
154
|
+
};
|
|
150
155
|
active = void 0;
|
|
151
156
|
response.abort.abort(reason);
|
|
152
157
|
response.release();
|
|
@@ -234,6 +239,7 @@ function createOmniVoiceEngine(options) {
|
|
|
234
239
|
failed = true;
|
|
235
240
|
clearTimeout(responseStartTimer);
|
|
236
241
|
turn.reset();
|
|
242
|
+
echoCandidates.clear();
|
|
237
243
|
responseCreateQueued = false;
|
|
238
244
|
log.warn({
|
|
239
245
|
sessionId: options.callId,
|
|
@@ -259,6 +265,7 @@ function createOmniVoiceEngine(options) {
|
|
|
259
265
|
function discardInput() {
|
|
260
266
|
clearTimeout(responseStartTimer);
|
|
261
267
|
turn.reset();
|
|
268
|
+
echoCandidates.clear();
|
|
262
269
|
responseCreateQueued = false;
|
|
263
270
|
speaking.clear();
|
|
264
271
|
turnSettled = false;
|
|
@@ -358,6 +365,7 @@ function createOmniVoiceEngine(options) {
|
|
|
358
365
|
return;
|
|
359
366
|
}
|
|
360
367
|
if (recorded.has(String(event.item_id)) || pendingInputs.has(String(event.item_id))) return;
|
|
368
|
+
echoCandidates.remember(String(event.item_id), active?.audio ? active.text : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback.text : void 0);
|
|
361
369
|
inputBlocked = false;
|
|
362
370
|
pendingInputs.add(String(event.item_id));
|
|
363
371
|
clearTimeout(responseStartTimer);
|
|
@@ -381,7 +389,7 @@ function createOmniVoiceEngine(options) {
|
|
|
381
389
|
speaking.delete(event.item_id);
|
|
382
390
|
const text = event.transcript.trim();
|
|
383
391
|
const playbackText = active?.audio ? active.text : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback.text : void 0;
|
|
384
|
-
if (
|
|
392
|
+
if (echoCandidates.matches(event.item_id, text, playbackText)) {
|
|
385
393
|
turn.final(event.item_id, "");
|
|
386
394
|
log.debug({
|
|
387
395
|
sessionId: options.callId,
|
|
@@ -582,6 +590,7 @@ function createOmniVoiceEngine(options) {
|
|
|
582
590
|
clearTimeout(uploadTimer);
|
|
583
591
|
clearTimeout(responseStartTimer);
|
|
584
592
|
turn.reset();
|
|
593
|
+
echoCandidates.clear();
|
|
585
594
|
speaking.clear();
|
|
586
595
|
inputQueue = [];
|
|
587
596
|
queuedInputBytes = 0;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init_agent_scope, resolveAgentProfileDir } from "../../agent/agent-scope.js";
|
|
2
|
-
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
3
2
|
import { DEFAULT_SOUL_FILENAME } from "../../agent/context/workspace.js";
|
|
3
|
+
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
4
4
|
import { loadProfileBootstrapFiles } from "../../agent/bootstrap/load-bootstrap-files.js";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { statSync } from "node:fs";
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
/** Conservatively identifies finalized ASR that is already in audible assistant output. */
|
|
2
2
|
export declare function isLikelyPlaybackEcho(transcript: string, assistantText: string): boolean;
|
|
3
|
+
/** Retains the playback at speech onset while a provider finishes delayed ASR. */
|
|
4
|
+
export declare class PlaybackEchoCandidates {
|
|
5
|
+
private readonly candidates;
|
|
6
|
+
remember(utteranceId: string, text: string | undefined): void;
|
|
7
|
+
matches(utteranceId: string, transcript: string, currentPlayback?: string): boolean;
|
|
8
|
+
clear(): void;
|
|
9
|
+
}
|
|
@@ -28,5 +28,27 @@ function isLikelyPlaybackEcho(transcript, assistantText) {
|
|
|
28
28
|
if (heard.length < (containsCjk ? 6 : 10)) return false;
|
|
29
29
|
return closestSubstringEditDistance(heard, spoken) / Array.from(heard).length <= .22;
|
|
30
30
|
}
|
|
31
|
+
/** Retains the playback at speech onset while a provider finishes delayed ASR. */
|
|
32
|
+
var PlaybackEchoCandidates = class {
|
|
33
|
+
candidates = /* @__PURE__ */ new Map();
|
|
34
|
+
remember(utteranceId, text) {
|
|
35
|
+
if (!text || this.candidates.has(utteranceId)) return;
|
|
36
|
+
const now = Date.now();
|
|
37
|
+
for (const [id, candidate] of this.candidates) if (candidate.expiresAt < now) this.candidates.delete(id);
|
|
38
|
+
if (this.candidates.size >= 256) this.candidates.delete(this.candidates.keys().next().value);
|
|
39
|
+
this.candidates.set(utteranceId, {
|
|
40
|
+
text: text.slice(-8e3),
|
|
41
|
+
expiresAt: now + 3e4
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
matches(utteranceId, transcript, currentPlayback) {
|
|
45
|
+
const candidate = this.candidates.get(utteranceId);
|
|
46
|
+
this.candidates.delete(utteranceId);
|
|
47
|
+
return Boolean(currentPlayback && isLikelyPlaybackEcho(transcript, currentPlayback) || candidate && candidate.expiresAt >= Date.now() && isLikelyPlaybackEcho(transcript, candidate.text));
|
|
48
|
+
}
|
|
49
|
+
clear() {
|
|
50
|
+
this.candidates.clear();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
31
53
|
//#endregion
|
|
32
|
-
export { isLikelyPlaybackEcho };
|
|
54
|
+
export { PlaybackEchoCandidates, isLikelyPlaybackEcho };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xopcai/xopc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.364",
|
|
4
4
|
"description": "Local-first personal AI for the one-person company, with durable context, tasks, workflows, automations, and local or cloud models.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -75,6 +75,9 @@
|
|
|
75
75
|
"@inquirer/prompts": "^8.5.0",
|
|
76
76
|
"@modelcontextprotocol/sdk": "1.32.1",
|
|
77
77
|
"@mozilla/readability": "^0.6.0",
|
|
78
|
+
"@opentelemetry/api": "^1.9.1",
|
|
79
|
+
"@opentelemetry/context-async-hooks": "^2.12.0",
|
|
80
|
+
"@opentelemetry/sdk-trace-base": "^2.12.0",
|
|
78
81
|
"@sinclair/typebox": "^0.34.49",
|
|
79
82
|
"@trycua/cua-driver": "0.28.2",
|
|
80
83
|
"@vscode/ripgrep": "^1.18.0",
|
|
@@ -158,12 +161,12 @@
|
|
|
158
161
|
"vitepress": "^1.6.4",
|
|
159
162
|
"vitest": "4.1.5",
|
|
160
163
|
"vue": "^3.5.35",
|
|
161
|
-
"@xopcai/endpoint-tools-client": "0.0.0",
|
|
162
164
|
"@xopcai/browser-control-contract": "0.1.0",
|
|
163
|
-
"@xopcai/
|
|
165
|
+
"@xopcai/endpoint-tools-client": "0.0.0",
|
|
164
166
|
"@xopcai/endpoint-tools-protocol": "0.0.0",
|
|
165
|
-
"@xopcai/
|
|
167
|
+
"@xopcai/computer-control-contract": "0.1.0",
|
|
166
168
|
"@xopcai/realtime-client": "0.0.0",
|
|
169
|
+
"@xopcai/gateway-contract": "0.0.0",
|
|
167
170
|
"@xopcai/realtime-protocol": "0.0.0"
|
|
168
171
|
},
|
|
169
172
|
"scripts": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{p as e}from"./locale-store-BbwWB0ra.js";var t=e(()=>({connectionState:`idle`,error:null}));function n(e){t.setState(e)}export{t as n,n as t};
|