@xopcai/xopc 0.0.220 → 0.0.222
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-DeKZ36Jy.js → activity-store-NItGQmvR.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-D0hZfdkn.js → agent-avatar-dicebear-DsR_2U9-.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DijFbC4G.js +68 -0
- package/dist/gateway/static/root/assets/{api-yLnYUedB.js → api-53ZXsuyr.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-C2kZNEHz.js → app-management-settings-panel-BCzVX09V.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DQ7H35sN.js → appearance-settings-DgSpwqQI.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-Tty2xaUG.js → apps-page-BFAmf9hq.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-CBArbTPH.js → archive-plugin-D8o8CP9Y.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-oc6DRj4G.js → attachment-load-BQHcAR6J.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-CHPEUpz8.js → automations-page-CswK3HFb.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-B8us5JBf.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BRBd0X7_.js → binary-plugins-BlpyTJ1b.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-ZgM-Z4Qv.js → block-editor-C3mwGsms.js} +4 -4
- package/dist/gateway/static/root/assets/browser-settings-page-BeBd17-3.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-DxD74a4c.js → browser-workflow-inputs-Bi6RSSpD.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-Dpc7NqZf.js → browser-workflows-page-CZNOOQY4.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Bv0z3KRq.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-B9ID97j6.js → capability-presets-api-pC2fno7r.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-BczD-pWE.js +3 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-DCNn6MWL.js → channel-recipient-api-B5Szgu_z.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-D4YcKMtf.js → channels-settings-2KQYq6xl.js} +1 -1
- package/dist/gateway/static/root/assets/channels-status-swr-ByRbxC6z.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-MvNpjcUs.js → chat-terminal-dock-2fpzufzt.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-PB1boaNy.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-BSXX9uY0.js → cron-expression-VePLfPUR.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-CiHNkkIS.js → date-picker-CJegmPTJ.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-DQyh2ZXE.js → dependency-picker-B2o9unBk.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DnAHU-zA.js → desktop-pet-BH4Np-ay.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-DUdhIBBB.js → desktop-pet-settings-Duu3ctxD.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-B3gFQt8x.js → directory-picker-path-field-BBCUZOg2.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-Lq-gRApw.js → extension-debug-page-DS_o3F97.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-D0ROxJmY.js → extension-page-BTLBZdCq.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-B2tS6mFy.js → extension-settings-page-KTGrYbgk.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-DJqWfVi6.js → gateway-config-api-D3YJVfzY.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-CnwF9Vso.js → gateway-config-swr-BzTbnu4O.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-B3thenPX.js → gateway-settings-B8--s3yC.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DdJJZR8M.js → gateway-startup-retry-B2zpkNvi.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-5YQ5BUwp.js +1 -0
- package/dist/gateway/static/root/assets/home-page-DfIVWJl3.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-Dtt9M5qz.js → image-generation-api-BXRjz-iY.js} +1 -1
- package/dist/gateway/static/root/assets/index-BXGC3VFm.css +2 -0
- package/dist/gateway/static/root/assets/{index-V9g9-SWT.js → index-jqDCfet4.js} +47 -81
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-cJqkmQdP.js → keyboard-shortcuts-settings-D-Ib-suu.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CAb0odzu.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-BiuP2pkl.js → local-apps-page-Bsy1lvAc.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-D3Q2yEAb.js → locale-store-iKjqemWG.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-CFxKbDZl.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-Z1gJUwP_.js → management-settings-D-akydG4.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-DuOmpGgE.js → markdown-split-DHH4Cu2i.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-WYArkdrc.js → markdown-view-DYkxMtJA.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DKPh3Mud.js → media-plugins-BwHtUXkj.js} +1 -1
- package/dist/gateway/static/root/assets/messages-kx5W39dO.js +3 -0
- package/dist/gateway/static/root/assets/{notes-api-DMEon7Zv.js → notes-api-DJizatxh.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-BG4gV8WG.js → notes-page-BxM1p6hz.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-BGjEC89c.js +4 -0
- package/dist/gateway/static/root/assets/pcm-capture-worklet-uW_SEACy.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-BjJf4QOB.js → product-open-page-DrfWH1ir.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-Dj9kEQwg.js +1 -0
- package/dist/gateway/static/root/assets/{projects-page-Di7W-Fg8.js → projects-page-CBRy5Ezz.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-DRyvynb5.js → registry-api-Cx3JxXSL.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DSwz9RBh.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DC6t_-db.js → runtime-tools-settings-panel-DF7syQRd.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DSTWtpjp.js → schema-form-BQ_qRIsM.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-WtattyVX.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CNAz_q1F.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-ZzEMNLYS.js → settings-form-section-BBHGOQHU.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-D7-bkbcW.js → settings-loading-skeleton-CiwjP2-b.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-PaTpLbmi.js → settings-page-Rl9waapk.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-CNo4Ajhn.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-Cxcw0ksa.js → share-preview-page-B7PI3yZ6.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DpOH0zWB.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-BOf4xCat.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-Dby4iAYe.js → skills-page-YbtR_zEU.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-nlzJ5Y1V.js → skills-page.utils-DTmx2Zza.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-vOsgnzDl.js → system-settings-panel-BZDJcKdS.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-DrMX5Yhj.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-CvnEHGyP.js → theme-store-BOD2D0dJ.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BTNZHulv.js → use-autosave-Be9aR9qA.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-ewIK2ddC.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DDJ2-3Tx.js → voice-api-key-field-IMc3Ua6C.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-DV_qiKSD.js → work-discovery-overlay-TC-xQenr.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel--AcvRw1w.js → workflow-run-setup-panel-B2auxcRv.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-Bdn82kFQ.js +5 -0
- package/dist/gateway/static/root/index.html +11 -11
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +1 -1
- package/dist/src/agent/memory/create-memory-manager.js +1 -1
- package/dist/src/agent-runtime/index.js +1 -1
- package/dist/src/agent-runtime/runtime-profile.js +1 -1
- package/dist/src/channels/attachments/voice-stt-webchat.js +20 -3
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/connectors/learning-coordinator.js +3 -19
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/hono/routes/voice.js +8 -1
- package/dist/src/gateway/hono/routes/workflows.js +2 -2
- package/dist/src/gateway/service.js +6 -6
- package/dist/src/voice/audio/normalize.d.ts +7 -0
- package/dist/src/voice/audio/normalize.js +30 -4
- package/dist/src/voice/local/runtime-worker.js +26 -6
- package/package.json +8 -14
- package/dist/gateway/static/root/assets/agents-Bu0NfWuh.js +0 -68
- package/dist/gateway/static/root/assets/automations-workspace-9uYkHmdI.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BT3mEm00.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DHlfRj4M.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-D2FkREUX.js +0 -3
- package/dist/gateway/static/root/assets/channels-status-swr-B8XWrzKM.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-Bd6K9bDk.js +0 -2
- package/dist/gateway/static/root/assets/heartbeat-settings-C_g-ZGSE.js +0 -1
- package/dist/gateway/static/root/assets/home-page-Cgwx66kc.js +0 -1
- package/dist/gateway/static/root/assets/index-Cf0qTkBK.css +0 -2
- package/dist/gateway/static/root/assets/local-app-workbench-page-CmjLMdly.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-BTlxGPho.js +0 -2
- package/dist/gateway/static/root/assets/messages-BQHpB4VI.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-D3LMBO2X.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-C59tYJG-.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BYOKveWT.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-CJMNQsxK.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-FJxZw08y.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Bnpim6NY.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DBqmV7ZY.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-UgLQaWoz.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-CRy8Wl5g.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-BT8F4mh5.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-CwvskVvU.js +0 -5
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260713-1" />
|
|
12
12
|
<link rel="manifest" href="/site.webmanifest?v=20260713-1" />
|
|
13
13
|
<title>XOPC — Keep what matters moving.</title>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-jqDCfet4.js"></script>
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/download-Dk-ZjtO6.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/plus-Q2yW6OE7.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/x-B_N4OPjy.js">
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/messages-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/locale-store-
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/messages-kx5W39dO.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/locale-store-iKjqemWG.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/cn-JdwAhgNB.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/schemas-zIBW3wiV.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/product-delivery-tRr-7IxY.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-view-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-view-DYkxMtJA.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/dist-DY4Af0fY.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/check-DUBLcKHA.js">
|
|
@@ -44,25 +44,25 @@
|
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assets/eye-CABVeTq0.js">
|
|
45
45
|
<link rel="modulepreload" crossorigin href="/assets/file-code-corner-byQA1VfD.js">
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/globe-DSSGFWFn.js">
|
|
47
|
-
<link rel="modulepreload" crossorigin href="/assets/notes-api-
|
|
47
|
+
<link rel="modulepreload" crossorigin href="/assets/notes-api-DJizatxh.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/loader-circle-CifKLtgG.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/rotate-cw-LIg3Am9S.js">
|
|
50
50
|
<link rel="modulepreload" crossorigin href="/assets/search-DA7gz22f.js">
|
|
51
51
|
<link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
|
|
52
52
|
<link rel="modulepreload" crossorigin href="/assets/tool-activity-R8V9l6nk.js">
|
|
53
53
|
<link rel="modulepreload" crossorigin href="/assets/button-CSEbl4zT.js">
|
|
54
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-
|
|
55
|
-
<link rel="modulepreload" crossorigin href="/assets/registry-api-
|
|
54
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-B2zpkNvi.js">
|
|
55
|
+
<link rel="modulepreload" crossorigin href="/assets/registry-api-Cx3JxXSL.js">
|
|
56
56
|
<link rel="modulepreload" crossorigin href="/assets/config-reload-event-Bjh2zoKp.js">
|
|
57
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-
|
|
57
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-BzTbnu4O.js">
|
|
58
58
|
<link rel="modulepreload" crossorigin href="/assets/electron-env-DH5wF8X8.js">
|
|
59
59
|
<link rel="modulepreload" crossorigin href="/assets/form-field-width-DJw_jULe.js">
|
|
60
60
|
<link rel="modulepreload" crossorigin href="/assets/interaction-BmQogeqz.js">
|
|
61
61
|
<link rel="modulepreload" crossorigin href="/assets/is-masked-secret-DOkL5b_X.js">
|
|
62
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-store-
|
|
63
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
62
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-store-NItGQmvR.js">
|
|
63
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-BOD2D0dJ.js">
|
|
64
64
|
<link rel="stylesheet" crossorigin href="/assets/markdown-view-DD_PgVue.css">
|
|
65
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
65
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BXGC3VFm.css">
|
|
66
66
|
</head>
|
|
67
67
|
<body>
|
|
68
68
|
<div id="root"></div>
|
package/dist/package.js
CHANGED
|
@@ -4,7 +4,6 @@ import { init_logger } from "../utils/logger.js";
|
|
|
4
4
|
import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
|
|
5
5
|
import { getSessionConfig } from "../storage/sqlite/config-repository.js";
|
|
6
6
|
import "../storage/sqlite/index.js";
|
|
7
|
-
import { checkBoundary } from "../agent-runtime/boundary-guard.js";
|
|
8
7
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
9
8
|
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
10
9
|
import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
|
|
@@ -39,6 +38,7 @@ import { UserContextCoordinator } from "./memory/user-context-coordinator.js";
|
|
|
39
38
|
import { WorkspaceRuntimeRegistry } from "./workspace-runtime/registry.js";
|
|
40
39
|
import { BackgroundReviewCoordinator } from "./background-review/coordinator.js";
|
|
41
40
|
import { maybeRequestChannelExecApproval } from "../channels/exec-approval-runtime.js";
|
|
41
|
+
import { checkBoundary } from "../agent-runtime/boundary-guard.js";
|
|
42
42
|
import { SkillFilesystemWatcher } from "./skills/filesystem-watcher.js";
|
|
43
43
|
import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
|
|
44
44
|
import { basename, resolve, sep } from "node:path";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { buildMemoryRuntime } from "../../agent-runtime/memory-runtime.js";
|
|
2
1
|
import { isMemorySubsystemEnabled } from "./memory-config.js";
|
|
3
2
|
import { BuiltinMemoryProvider } from "./builtin-provider.js";
|
|
4
3
|
import { MemoryManager } from "./manager.js";
|
|
5
4
|
import { loadMemoryPluginProviders } from "./plugin-discovery.js";
|
|
5
|
+
import { buildMemoryRuntime } from "../../agent-runtime/memory-runtime.js";
|
|
6
6
|
//#region src/agent/memory/create-memory-manager.ts
|
|
7
7
|
function createMemoryManagerFromConfig(config) {
|
|
8
8
|
const routing = resolveMemoryManagerOptions(config);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { buildMemoryRuntime } from "./memory-runtime.js";
|
|
1
2
|
import { checkBoundary } from "./boundary-guard.js";
|
|
2
3
|
import { resolveModelRole } from "./model-router.js";
|
|
3
4
|
import { buildRuntimeToolRegistry } from "./tool-registry.js";
|
|
4
|
-
import { buildMemoryRuntime } from "./memory-runtime.js";
|
|
5
5
|
import { resolveWorkflow, validateWorkflowForRuntime } from "./workflow-runtime.js";
|
|
6
6
|
import { buildAgentRuntimeProfile } from "./runtime-profile.js";
|
|
7
7
|
import { appendAgentRunEvent, createAgentRunTrace, finishAgentRunTrace, hashEffectiveManifest } from "./run-trace.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { buildAgentManifestPromptSection } from "../agent-manifest/prompt.js";
|
|
2
2
|
import "../agent-manifest/index.js";
|
|
3
|
+
import { buildMemoryRuntime } from "./memory-runtime.js";
|
|
3
4
|
import { checkBoundary } from "./boundary-guard.js";
|
|
4
5
|
import { resolveModelRole } from "./model-router.js";
|
|
5
6
|
import { buildRuntimeToolRegistry } from "./tool-registry.js";
|
|
6
|
-
import { buildMemoryRuntime } from "./memory-runtime.js";
|
|
7
7
|
import { resolveWorkflow, validateWorkflowForRuntime } from "./workflow-runtime.js";
|
|
8
8
|
//#region src/agent-runtime/runtime-profile.ts
|
|
9
9
|
function buildAgentRuntimeProfile(params) {
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { createLogger } from "../../utils/logger/index.js";
|
|
2
|
+
import { init_logger } from "../../utils/logger.js";
|
|
1
3
|
import { decodeInboundAttachmentBase64, readInboundAttachmentBuffer } from "./inbound-persist.js";
|
|
2
4
|
import { transcribe } from "../../voice/stt/transcribe-core.js";
|
|
3
5
|
import { isSTTAvailable } from "../../voice/stt/availability.js";
|
|
4
6
|
import "../../voice/stt/index.js";
|
|
5
7
|
//#region src/channels/attachments/voice-stt-webchat.ts
|
|
8
|
+
init_logger();
|
|
6
9
|
const STT_MAX_BYTES = 25 * 1024 * 1024;
|
|
10
|
+
const log = createLogger("VoiceAttachmentSTT");
|
|
7
11
|
function isVoiceLikeAttachment(att) {
|
|
8
12
|
if (att.type === "voice") return true;
|
|
9
13
|
return (att.mimeType?.toLowerCase() ?? "").startsWith("audio/");
|
|
@@ -52,10 +56,23 @@ async function mergeVoiceTranscriptsIntoUserText(prepared, userText, sttConfig,
|
|
|
52
56
|
continue;
|
|
53
57
|
}
|
|
54
58
|
try {
|
|
55
|
-
const r = await transcribe(buf, sttConfig, {
|
|
59
|
+
const r = await transcribe(buf, sttConfig, {
|
|
60
|
+
language: sttConfig.provider === "alibaba" ? "zh" : void 0,
|
|
61
|
+
mime: att.mimeType,
|
|
62
|
+
fileName: att.name
|
|
63
|
+
});
|
|
56
64
|
transcripts.push(r.text.trim() || "[Voice: no speech detected]");
|
|
57
|
-
} catch {
|
|
58
|
-
|
|
65
|
+
} catch (error) {
|
|
66
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
67
|
+
log.error({
|
|
68
|
+
...error instanceof Error ? { err: error } : { errorMessage },
|
|
69
|
+
fileName: att.name,
|
|
70
|
+
mimeType: att.mimeType,
|
|
71
|
+
size: buf.length,
|
|
72
|
+
phase: "inbound_transcribe"
|
|
73
|
+
}, `Inbound voice transcription failed: ${errorMessage}`);
|
|
74
|
+
const decoderUnavailable = /ffmpeg|audio decoder|unsupported_audio_codec/i.test(errorMessage);
|
|
75
|
+
transcripts.push(decoderUnavailable ? "[STT failed: audio decoder unavailable]" : "[STT failed]");
|
|
59
76
|
}
|
|
60
77
|
}
|
|
61
78
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
1
2
|
import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
2
3
|
import "../agent-manifest/index.js";
|
|
3
|
-
import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
4
4
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
5
5
|
import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
6
6
|
//#region src/config/agent-profile.ts
|
|
@@ -10,7 +10,7 @@ import { connectorIdentityKey, normalizeConnectorIdentity } from "./connector-id
|
|
|
10
10
|
import { ComposioSessionsAdapter } from "./composio-sessions.js";
|
|
11
11
|
import { buildConnectorLearningArguments, getConnectorLearningPlan } from "./learning-recipes.js";
|
|
12
12
|
import { getConnectorDefinition } from "./catalog.js";
|
|
13
|
-
import { createUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceRuns, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant
|
|
13
|
+
import { createUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceRuns, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
|
|
14
14
|
import { claimRegisteredExtraction } from "../user-context/extraction/registry.js";
|
|
15
15
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
16
16
|
import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
|
|
@@ -227,20 +227,10 @@ function startConnectorLearningCoordinator(options) {
|
|
|
227
227
|
};
|
|
228
228
|
if (structuralExtraction.shouldExecute) try {
|
|
229
229
|
understanding = await new ConnectedUnderstandingPipeline(options.getMemoryManager()).process(job.agentId, structuralExtraction.run.id);
|
|
230
|
-
const structuralFocuses = understanding.createdRecords.filter((item) => item.kind === "project_context").map((record) => upsertUserFocus({
|
|
231
|
-
canonicalKey: `connector-focus:${job.accountId}:${record.id}`,
|
|
232
|
-
title: record.content.slice(0, 120),
|
|
233
|
-
summary: record.content,
|
|
234
|
-
horizon: "ongoing",
|
|
235
|
-
status: "candidate",
|
|
236
|
-
confidence: .72,
|
|
237
|
-
evidenceRefs: [`connector-account:${job.accountId}`],
|
|
238
|
-
sourceRunId: sourceRun.id
|
|
239
|
-
}));
|
|
240
230
|
finishContextExtractionRun({
|
|
241
231
|
runId: structuralExtraction.run.id,
|
|
242
232
|
status: "completed",
|
|
243
|
-
outputs:
|
|
233
|
+
outputs: (understanding.writeOutputs ?? []).map((output) => ({
|
|
244
234
|
candidateKey: output.candidateKey,
|
|
245
235
|
...output.objectId ? {
|
|
246
236
|
objectType: "understanding",
|
|
@@ -248,13 +238,7 @@ function startConnectorLearningCoordinator(options) {
|
|
|
248
238
|
} : {},
|
|
249
239
|
...output.versionId ? { versionId: output.versionId } : {},
|
|
250
240
|
outcome: output.outcome
|
|
251
|
-
}))
|
|
252
|
-
candidateKey: focus.canonicalKey,
|
|
253
|
-
objectType: "focus",
|
|
254
|
-
objectId: focus.id,
|
|
255
|
-
versionId: focus.versionId,
|
|
256
|
-
outcome: "created"
|
|
257
|
-
}))]
|
|
241
|
+
}))
|
|
258
242
|
});
|
|
259
243
|
} catch (error) {
|
|
260
244
|
finishContextExtractionRun({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { resolveCapabilityPresetLayer, resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
2
1
|
import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
|
|
2
|
+
import { resolveCapabilityPresetLayer, resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
3
3
|
import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
|
|
4
4
|
import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
|
|
5
5
|
import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
|
|
@@ -5,6 +5,7 @@ import { isTTSAvailable, resolveSpeechProvider } from "../../../voice/tts/factor
|
|
|
5
5
|
import { speak } from "../../../voice/tts/speak-core.js";
|
|
6
6
|
import { mergeTtsConfigFromAppConfig } from "../../../voice/tts/merge-config.js";
|
|
7
7
|
import { getLocalVoiceRuntimeClient } from "../../../voice/local/runtime-client.js";
|
|
8
|
+
import { getAudioDecoderStatus } from "../../../voice/audio/normalize.js";
|
|
8
9
|
import { resolveSttProviderConfigSlice } from "../../../voice/stt/config-slice.js";
|
|
9
10
|
import { STTTranscriptionError, transcribe } from "../../../voice/stt/transcribe-core.js";
|
|
10
11
|
import { isSTTAvailable } from "../../../voice/stt/availability.js";
|
|
@@ -200,9 +201,13 @@ function registerVoiceRoutes(authenticated, deps) {
|
|
|
200
201
|
});
|
|
201
202
|
});
|
|
202
203
|
authenticated.get("/api/voice/local/status", async (c) => {
|
|
204
|
+
const config = service.currentConfig;
|
|
205
|
+
const sttConfig = mergeSttConfigFromAppConfig(config.tools?.media?.audio, config.tools?.media);
|
|
206
|
+
const modelId = typeof sttConfig.providers?.["xopc-local"]?.model === "string" ? sttConfig.providers["xopc-local"].model : "sensevoice-small";
|
|
203
207
|
const models = await listLocalVoiceModelStatuses();
|
|
208
|
+
const decoder = getAudioDecoderStatus();
|
|
204
209
|
try {
|
|
205
|
-
const runtime = await getLocalVoiceRuntimeClient().request("health", {}, {
|
|
210
|
+
const runtime = await getLocalVoiceRuntimeClient().request("health", { modelId }, {
|
|
206
211
|
timeoutMs: 1e4,
|
|
207
212
|
stopOnTimeout: false
|
|
208
213
|
});
|
|
@@ -213,6 +218,7 @@ function registerVoiceRoutes(authenticated, deps) {
|
|
|
213
218
|
...runtime,
|
|
214
219
|
ready: true
|
|
215
220
|
},
|
|
221
|
+
decoder,
|
|
216
222
|
models
|
|
217
223
|
}
|
|
218
224
|
});
|
|
@@ -225,6 +231,7 @@ function registerVoiceRoutes(authenticated, deps) {
|
|
|
225
231
|
ready: false,
|
|
226
232
|
error: message
|
|
227
233
|
},
|
|
234
|
+
decoder,
|
|
228
235
|
models
|
|
229
236
|
}
|
|
230
237
|
});
|
|
@@ -7,10 +7,10 @@ import { messagesToClientHistory } from "../../../session/client-history.js";
|
|
|
7
7
|
import "../../../workflows/domain/index.js";
|
|
8
8
|
import { resolveWorkflowRunArtifactsDir } from "../../../workflows/store/paths.js";
|
|
9
9
|
import { WorkflowDraftService } from "../../../workflows/draft/workflow-draft-service.js";
|
|
10
|
-
import { WorkflowDraftConflictError, WorkflowDraftStore } from "../../../workflows/authoring/workflow-draft-store.js";
|
|
11
|
-
import "../../../workflows/authoring/index.js";
|
|
12
10
|
import "../../../workflows/draft/index.js";
|
|
13
11
|
import { ProjectWorkflowPresetRepository } from "../../../workflows/project-presets/project-workflow-preset-repository.js";
|
|
12
|
+
import { WorkflowDraftConflictError, WorkflowDraftStore } from "../../../workflows/authoring/workflow-draft-store.js";
|
|
13
|
+
import "../../../workflows/authoring/index.js";
|
|
14
14
|
import { basename, join } from "node:path";
|
|
15
15
|
import { readFile, stat } from "node:fs/promises";
|
|
16
16
|
//#region src/gateway/hono/routes/workflows.ts
|
|
@@ -50,18 +50,18 @@ import { registerClarifyBridge } from "./clarify-runtime.js";
|
|
|
50
50
|
import { ChannelManager } from "../channels/manager.js";
|
|
51
51
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
52
52
|
import "../config/index.js";
|
|
53
|
-
import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
|
|
54
|
-
import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
|
|
55
|
-
import "../knowledge/index.js";
|
|
56
|
-
import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
|
|
57
|
-
import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
|
|
58
|
-
import { startConnectorSupervisor } from "../connectors/supervisor.js";
|
|
59
53
|
import { DiscussionService } from "../discussions/service.js";
|
|
60
54
|
import { DiscussionOrganizer } from "../discussions/organizer.js";
|
|
61
55
|
import { DiscussionLiveWorker } from "../discussions/live-worker.js";
|
|
62
56
|
import { DiscussionOrganizerWorker } from "../discussions/organizer-worker.js";
|
|
63
57
|
import { DiscussionSealer } from "../discussions/sealer.js";
|
|
64
58
|
import "../discussions/index.js";
|
|
59
|
+
import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
|
|
60
|
+
import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
|
|
61
|
+
import "../knowledge/index.js";
|
|
62
|
+
import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
|
|
63
|
+
import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
|
|
64
|
+
import { startConnectorSupervisor } from "../connectors/supervisor.js";
|
|
65
65
|
import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
|
|
66
66
|
import "../endpoint-tools/index.js";
|
|
67
67
|
import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
|
|
@@ -4,6 +4,13 @@ export declare class AudioNormalizationError extends Error {
|
|
|
4
4
|
readonly code = "unsupported_audio_codec";
|
|
5
5
|
constructor(message: string, options?: ErrorOptions);
|
|
6
6
|
}
|
|
7
|
+
export interface AudioDecoderStatus {
|
|
8
|
+
available: boolean;
|
|
9
|
+
command: string;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Reports whether compressed browser/mobile recordings can be decoded on this host. */
|
|
13
|
+
export declare function getAudioDecoderStatus(): AudioDecoderStatus;
|
|
7
14
|
export declare function detectAudioFormat(buffer: Buffer): AudioFormat;
|
|
8
15
|
export declare function decodeAudioToMonoFloat32(input: {
|
|
9
16
|
buffer: Buffer;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { UnsupportedWavEncodingError, decodeWavToMonoFloat32 } from "../local/wav.js";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { spawn } from "node:child_process";
|
|
4
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
5
5
|
import { mkdtemp, readFile, readdir, rm } from "node:fs/promises";
|
|
6
6
|
//#region src/voice/audio/normalize.ts
|
|
7
7
|
const TARGET_SAMPLE_RATE = 16e3;
|
|
@@ -15,6 +15,31 @@ var AudioNormalizationError = class extends Error {
|
|
|
15
15
|
this.name = "AudioNormalizationError";
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
|
+
function ffmpegCommand() {
|
|
19
|
+
return process.env.XOPC_FFMPEG_PATH?.trim() || "ffmpeg";
|
|
20
|
+
}
|
|
21
|
+
/** Reports whether compressed browser/mobile recordings can be decoded on this host. */
|
|
22
|
+
function getAudioDecoderStatus() {
|
|
23
|
+
const command = ffmpegCommand();
|
|
24
|
+
const result = spawnSync(command, ["-version"], {
|
|
25
|
+
encoding: "utf8",
|
|
26
|
+
stdio: [
|
|
27
|
+
"ignore",
|
|
28
|
+
"ignore",
|
|
29
|
+
"pipe"
|
|
30
|
+
],
|
|
31
|
+
timeout: 5e3
|
|
32
|
+
});
|
|
33
|
+
if (!result.error && result.status === 0) return {
|
|
34
|
+
available: true,
|
|
35
|
+
command
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
available: false,
|
|
39
|
+
command,
|
|
40
|
+
error: `Audio decoder is unavailable (${command}): ${result.error instanceof Error ? result.error.message : result.stderr?.trim() || `decoder exited with status ${String(result.status)}`}. Install ffmpeg or set XOPC_FFMPEG_PATH.`
|
|
41
|
+
};
|
|
42
|
+
}
|
|
18
43
|
function detectAudioFormat(buffer) {
|
|
19
44
|
if (buffer.length >= 12 && buffer.toString("ascii", 0, 4) === "RIFF" && buffer.toString("ascii", 8, 12) === "WAVE") return "wav";
|
|
20
45
|
if (buffer.length >= 4 && buffer.subarray(0, 4).equals(Buffer.from([
|
|
@@ -32,7 +57,8 @@ function detectAudioFormat(buffer) {
|
|
|
32
57
|
function runFfmpeg(args, options = {}) {
|
|
33
58
|
options.signal?.throwIfAborted();
|
|
34
59
|
return new Promise((resolve, reject) => {
|
|
35
|
-
const
|
|
60
|
+
const command = ffmpegCommand();
|
|
61
|
+
const child = spawn(command, [
|
|
36
62
|
"-hide_banner",
|
|
37
63
|
"-loglevel",
|
|
38
64
|
"error",
|
|
@@ -75,7 +101,7 @@ function runFfmpeg(args, options = {}) {
|
|
|
75
101
|
errorBytes += bounded.length;
|
|
76
102
|
});
|
|
77
103
|
child.once("error", (error) => {
|
|
78
|
-
finish(new AudioNormalizationError(error.code === "ENOENT" ?
|
|
104
|
+
finish(new AudioNormalizationError(error.code === "ENOENT" ? `Audio decoder is unavailable (${command}); install ffmpeg or set XOPC_FFMPEG_PATH to transcribe this format` : `Audio decoder failed to start: ${error.message}`, { cause: error }));
|
|
79
105
|
});
|
|
80
106
|
child.once("close", (code) => {
|
|
81
107
|
if (settled) return;
|
|
@@ -172,4 +198,4 @@ async function forEachNormalizedAudioSegment(input, consume) {
|
|
|
172
198
|
}
|
|
173
199
|
}
|
|
174
200
|
//#endregion
|
|
175
|
-
export { AudioNormalizationError, decodeAudioToMonoFloat32, detectAudioFormat, forEachNormalizedAudioSegment };
|
|
201
|
+
export { AudioNormalizationError, decodeAudioToMonoFloat32, detectAudioFormat, forEachNormalizedAudioSegment, getAudioDecoderStatus };
|
|
@@ -7,6 +7,18 @@ import { createInterface } from "node:readline";
|
|
|
7
7
|
//#region src/voice/local/runtime-worker.ts
|
|
8
8
|
const pipelines = /* @__PURE__ */ new Map();
|
|
9
9
|
const sherpaRecognizers = /* @__PURE__ */ new Map();
|
|
10
|
+
async function assertLocalVoiceEngineAvailable(modelId) {
|
|
11
|
+
const model = getLocalVoiceModel(modelId);
|
|
12
|
+
if (model.engine === "sherpa-onnx") {
|
|
13
|
+
const imported = await import("sherpa-onnx-node").catch((cause) => {
|
|
14
|
+
throw new Error("The sherpa-onnx local voice engine is not installed. Install sherpa-onnx-node@1.13.4 alongside @xopcai/xopc.", { cause });
|
|
15
|
+
});
|
|
16
|
+
if (typeof (imported.default ?? imported).OfflineRecognizer !== "function") throw new Error("The sherpa-onnx local voice engine did not expose OfflineRecognizer");
|
|
17
|
+
} else await import("@huggingface/transformers").catch((cause) => {
|
|
18
|
+
throw new Error("The Transformers.js local voice engine is not installed. Install @huggingface/transformers@3.8.1 alongside @xopcai/xopc.", { cause });
|
|
19
|
+
});
|
|
20
|
+
return model.engine;
|
|
21
|
+
}
|
|
10
22
|
const networkAgent = new RetryAgent(new EnvHttpProxyAgent(), {
|
|
11
23
|
maxRetries: 4,
|
|
12
24
|
minTimeout: 500,
|
|
@@ -161,12 +173,20 @@ async function transcribeWithSherpa(modelId, audio, language) {
|
|
|
161
173
|
}
|
|
162
174
|
async function handle(request) {
|
|
163
175
|
const params = request.params ?? {};
|
|
164
|
-
if (request.method === "health")
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
176
|
+
if (request.method === "health") {
|
|
177
|
+
const modelId = typeof params.modelId === "string" && params.modelId ? params.modelId : void 0;
|
|
178
|
+
const selectedEngine = modelId ? await assertLocalVoiceEngineAvailable(modelId) : void 0;
|
|
179
|
+
return {
|
|
180
|
+
ok: true,
|
|
181
|
+
protocolVersion: 2,
|
|
182
|
+
engine: "transformers.js+sherpa-onnx",
|
|
183
|
+
engines: ["transformers.js", "sherpa-onnx"],
|
|
184
|
+
...modelId ? {
|
|
185
|
+
modelId,
|
|
186
|
+
selectedEngine
|
|
187
|
+
} : {}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
170
190
|
if (request.method === "model.install") {
|
|
171
191
|
const modelId = String(params.modelId ?? "");
|
|
172
192
|
const modelDir = resolve(resolveLocalVoiceModelDir(modelId));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xopcai/xopc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.222",
|
|
4
4
|
"description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -108,27 +108,22 @@
|
|
|
108
108
|
"zod": "^4.4.3"
|
|
109
109
|
},
|
|
110
110
|
"peerDependencies": {
|
|
111
|
-
"@huggingface/transformers": "3.8.1",
|
|
112
111
|
"@larksuiteoapi/node-sdk": "^1.66.0",
|
|
113
|
-
"playwright-core": "^1.60.0"
|
|
114
|
-
"sherpa-onnx-node": "1.13.4"
|
|
112
|
+
"playwright-core": "^1.60.0"
|
|
115
113
|
},
|
|
116
114
|
"peerDependenciesMeta": {
|
|
117
|
-
"@huggingface/transformers": {
|
|
118
|
-
"optional": true
|
|
119
|
-
},
|
|
120
115
|
"@larksuiteoapi/node-sdk": {
|
|
121
116
|
"optional": true
|
|
122
117
|
},
|
|
123
118
|
"playwright-core": {
|
|
124
119
|
"optional": true
|
|
125
|
-
},
|
|
126
|
-
"sherpa-onnx-node": {
|
|
127
|
-
"optional": true
|
|
128
120
|
}
|
|
129
121
|
},
|
|
130
|
-
"
|
|
122
|
+
"optionalDependencies": {
|
|
131
123
|
"@huggingface/transformers": "3.8.1",
|
|
124
|
+
"sherpa-onnx-node": "1.13.4"
|
|
125
|
+
},
|
|
126
|
+
"devDependencies": {
|
|
132
127
|
"@larksuiteoapi/node-sdk": "^1.66.0",
|
|
133
128
|
"@resvg/resvg-js": "^2.6.2",
|
|
134
129
|
"@tailwindcss/vite": "^4.3.0",
|
|
@@ -152,7 +147,6 @@
|
|
|
152
147
|
"onnxruntime-common": "1.21.0",
|
|
153
148
|
"node-pty": "1.1.0",
|
|
154
149
|
"playwright-core": "^1.60.0",
|
|
155
|
-
"sherpa-onnx-node": "1.13.4",
|
|
156
150
|
"svgo": "4.0.2",
|
|
157
151
|
"tailwindcss": "^4.3.0",
|
|
158
152
|
"tsdown": "0.21.10",
|
|
@@ -165,8 +159,8 @@
|
|
|
165
159
|
"vue": "^3.5.35",
|
|
166
160
|
"@xopcai/endpoint-tools-protocol": "0.0.0",
|
|
167
161
|
"@xopcai/realtime-protocol": "0.0.0",
|
|
168
|
-
"@xopcai/
|
|
169
|
-
"@xopcai/
|
|
162
|
+
"@xopcai/gateway-contract": "0.0.0",
|
|
163
|
+
"@xopcai/realtime-client": "0.0.0"
|
|
170
164
|
},
|
|
171
165
|
"scripts": {
|
|
172
166
|
"assets:brand": "node scripts/generate-brand-assets.mjs",
|