@xopcai/xopc 0.0.229 → 0.0.231
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/{agent-avatar-dicebear-CsFAJTIN.js → agent-avatar-dicebear-CBqUnlvL.js} +1 -1
- package/dist/gateway/static/root/assets/agents-7YO6znTT.js +68 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-7KcMWuah.js → app-management-settings-panel-DP7YVRPn.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Cqlw7Fif.js → appearance-settings-CVQ5n7y6.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-CsnhdGZ2.js → apps-page-DSCia0DT.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-q4pDpqkF.js → attachment-load-mmr_mHRr.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BuTqjKGX.js → automations-page-DfY-T6Ga.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BpvD54D6.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-DUce1Bsc.js → binary-plugins-CO9QMEh2.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-D8Ejp-QR.js → block-editor-CE14CVOy.js} +3 -3
- package/dist/gateway/static/root/assets/browser-settings-page-CeESA4Oj.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflows-page-BDvZbR9v.js → browser-workflows-page-1wgXyoSO.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-B_OXTojB.js +7 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-D5nZecxV.js +3 -0
- package/dist/gateway/static/root/assets/channels-settings-BzmnWx6X.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-h1CKexNz.js → chat-terminal-dock-CdRW6Euc.js} +2 -2
- package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-DX6OkwFQ.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-DlaQQOId.js → cron-expression-DYSMZsms.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-8R1sXJKb.js → date-picker-DGCfX4tK.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-CWur0821.js → dependency-picker-DHDa4ht1.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-Knl-zNDU.js → desktop-pet-CMO-J3cG.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CAQMLVtd.js → desktop-pet-settings-MmOR4A3u.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-Caaz4Rw5.js → directory-picker-path-field-B9qoxDcn.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-B965Mc15.js → extension-debug-page-DdH0dG2_.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C0UnkBi5.js → extension-page-Clg-KktN.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BUSIAZCR.js → extension-settings-page-eP3fJ2M6.js} +1 -1
- package/dist/gateway/static/root/assets/files-Dp8_uGTO.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-DkH0eEgy.js → gateway-config-api-DEHnF4Wm.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-BBgLDm6I.js → gateway-settings-DKkEXXj9.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-BtEHVXWD.js → heartbeat-settings-DlBPNubY.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-BnOrLRfs.js +1 -0
- package/dist/gateway/static/root/assets/index-0xQO5B_Q.js +70 -0
- package/dist/gateway/static/root/assets/index-CCyIdGuQ.css +2 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CsRz8NrS.js → keyboard-shortcuts-settings-BvpEeHnm.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-Ch1rdUo8.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CTBNUG4a.js → local-apps-page-Bzvn99eH.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-zxx2ExlY.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-YqUAEwQo.js → management-settings-BQaeyOYm.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-dxpSCXb8.js → markdown-split-D9tmIiEm.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-B1bGSQqt.css +1 -0
- package/dist/gateway/static/root/assets/{media-plugins-CJ00i1Lg.js → media-plugins-D8I7OGnT.js} +1 -1
- package/dist/gateway/static/root/assets/models-hub-cache-0RjEwafI.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-BFsOGYkd.js → notes-api-EpgG-OQc.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-DEnbnkIt.js → notes-page-CCvjGMhN.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-9cgh77VH.js +4 -0
- package/dist/gateway/static/root/assets/oauth-api-BwNLwbI8.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-BHxo9U95.js → product-open-page-MmMswmOU.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-hf6pmH4p.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-By2U-Wdh.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-CUcpp7CQ.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BpQ2GI-0.js → runtime-tools-settings-panel-Dx6o7sLu.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-HE1G26Lx.js → schema-form-Cdd9c4vt.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-ByI82xS1.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BCoI5IJ8.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CXAn0Xhy.js → settings-form-section-D0YxMnhm.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-DsFu7Bcv.js → settings-loading-skeleton-y53gEKsF.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-C4iib9nO.js → settings-page-BoE_tToG.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-BA83Wr1d.js → setup-status-panel-BQmyb5KC.js} +1 -1
- package/dist/gateway/static/root/assets/share-preview-page-DiqBn-oE.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-Bf3VpZ-R.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CXHlbuGS.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-CdaFtNw9.js → skills-page-CZwhWiRl.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-DYaAddUL.js → skills-page.utils-kBGr8opZ.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-Co7gilRd.js → system-settings-panel-CPBs6lWi.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-Bo0KSZ2v.js +1 -0
- package/dist/gateway/static/root/assets/theme-store-Qgvo0Ga7.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-DnnZtMpA.js → use-autosave-C4YcEiP9.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-Cnj7gMX2.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-wetUpi3i.js → voice-api-key-field-BML8zCwZ.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-tbTWASJJ.js → work-discovery-overlay-CKIdPEen.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-Dy0fDs8w.js → workflow-run-setup-panel-BK44Vm5W.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-CB98MTwG.js +5 -0
- package/dist/gateway/static/root/index.html +10 -6
- package/dist/package.js +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.js +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +4 -1
- package/dist/src/agent/service/webchat-tts.d.ts +2 -0
- package/dist/src/agent/service/webchat-tts.js +15 -2
- package/dist/src/agent/service.d.ts +1 -0
- package/dist/src/agent/service.js +5 -2
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/tools/tts-tool.js +19 -13
- package/dist/src/agent/tools/write.js +9 -12
- package/dist/src/agent/tools/xopc-use-tool.js +2 -2
- package/dist/src/auth/oauth/index.js +2 -2
- package/dist/src/auth/oauth/registry.d.ts +1 -1
- package/dist/src/auth/oauth/registry.js +5 -1
- package/dist/src/auth/oauth/xopc-cloud.d.ts +1 -0
- package/dist/src/auth/oauth/xopc-cloud.js +8 -2
- package/dist/src/files/file-service.d.ts +36 -0
- package/dist/src/files/file-service.js +282 -0
- package/dist/src/gateway/chat-stream/mapper.js +11 -0
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/app.js +2 -2
- package/dist/src/gateway/hono/routes/files.d.ts +3 -0
- package/dist/src/gateway/hono/routes/files.js +172 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/projects.js +0 -508
- package/dist/src/gateway/hono/routes/shares.js +410 -21
- package/dist/src/gateway/hono/routes/workspace.js +15 -974
- package/dist/src/gateway/service.js +9 -9
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/share/hosted-session-share.d.ts +104 -0
- package/dist/src/share/hosted-session-share.js +276 -0
- package/dist/src/share/note-share-service.js +4 -24
- package/dist/src/share/session-share-projector.d.ts +31 -0
- package/dist/src/share/session-share-projector.js +79 -0
- package/dist/src/share/session-share-service.d.ts +89 -0
- package/dist/src/share/session-share-service.js +325 -0
- package/dist/src/share/share-asset-ticket.d.ts +7 -0
- package/dist/src/share/share-asset-ticket.js +30 -0
- package/dist/src/share/share-landing.d.ts +4 -3
- package/dist/src/share/share-landing.js +5 -5
- package/dist/src/share/share-store.d.ts +27 -2
- package/dist/src/share/share-store.js +71 -8
- package/dist/src/share/share-types.d.ts +17 -2
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/dist/src/tui/backends/gateway-realtime-backend.js +11 -3
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/agents-DA4b6_0C.js +0 -68
- package/dist/gateway/static/root/assets/automations-workspace-CD0E2ThS.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-CY1k3MMd.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-D1VfotHQ.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-DXHqRLpU.js +0 -3
- package/dist/gateway/static/root/assets/channels-settings-DrFL57M_.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DUAyfFCF.js +0 -2
- package/dist/gateway/static/root/assets/home-page-5SU2TNJj.js +0 -1
- package/dist/gateway/static/root/assets/index-BNWhgmjs.js +0 -70
- package/dist/gateway/static/root/assets/index-D_hrEKXM.css +0 -2
- package/dist/gateway/static/root/assets/local-app-workbench-page-DYPEUgpP.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-B0P7rG2B.js +0 -2
- package/dist/gateway/static/root/assets/markdown-view-CLzTdVLW.css +0 -1
- package/dist/gateway/static/root/assets/notes-workbench-DmVYu_Oc.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-DV2nGmsq.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BNIFwFfc.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DLXqKiA_.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DWaXf_25.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-JFCbnCL2.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-BOGl3s6M.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Q2MdGaBi.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-cFtfVeFU.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-5B1pswu8.js +0 -1
- package/dist/gateway/static/root/assets/theme-store-DOdCjyuw.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-Dr1FKjXv.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-IVP3GSkI.js +0 -5
- package/dist/src/gateway/file-path-classifier.d.ts +0 -30
- package/dist/src/gateway/file-path-classifier.js +0 -105
- package/dist/src/gateway/file-reference-errors.d.ts +0 -6
- package/dist/src/gateway/file-reference-errors.js +0 -21
- package/dist/src/gateway/file-reference-registry.d.ts +0 -34
- package/dist/src/gateway/file-reference-registry.js +0 -45
- /package/dist/gateway/static/root/assets/{markdown-view-DvM5PWEH.js → markdown-view-RxNHwlNo.js} +0 -0
|
@@ -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-0xQO5B_Q.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">
|
|
@@ -31,13 +31,14 @@
|
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/schemas-zIBW3wiV.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/product-delivery-tRr-7IxY.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-view-
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-view-RxNHwlNo.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/dist-J_ySZvz0.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/check-DUBLcKHA.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/settings-shell-dialog-layer-BU3UuiJr.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/popover-select-CccGri5Y.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="/assets/circle-check-C23XjkUj.js">
|
|
41
|
+
<link rel="modulepreload" crossorigin href="/assets/cloud-C4-yfnnk.js">
|
|
41
42
|
<link rel="modulepreload" crossorigin href="/assets/copy-Dv6d4Dvw.js">
|
|
42
43
|
<link rel="modulepreload" crossorigin href="/assets/ellipsis-0k4rZLoy.js">
|
|
43
44
|
<link rel="modulepreload" crossorigin href="/assets/external-link-DjqjBmc3.js">
|
|
@@ -45,25 +46,28 @@
|
|
|
45
46
|
<link rel="modulepreload" crossorigin href="/assets/eye-CABVeTq0.js">
|
|
46
47
|
<link rel="modulepreload" crossorigin href="/assets/file-code-corner-byQA1VfD.js">
|
|
47
48
|
<link rel="modulepreload" crossorigin href="/assets/globe-DSSGFWFn.js">
|
|
48
|
-
<link rel="modulepreload" crossorigin href="/assets/notes-api-
|
|
49
|
+
<link rel="modulepreload" crossorigin href="/assets/notes-api-EpgG-OQc.js">
|
|
49
50
|
<link rel="modulepreload" crossorigin href="/assets/loader-circle-CifKLtgG.js">
|
|
50
51
|
<link rel="modulepreload" crossorigin href="/assets/rotate-cw-LIg3Am9S.js">
|
|
51
52
|
<link rel="modulepreload" crossorigin href="/assets/search-DA7gz22f.js">
|
|
52
53
|
<link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
|
|
54
|
+
<link rel="modulepreload" crossorigin href="/assets/files-Dp8_uGTO.js">
|
|
53
55
|
<link rel="modulepreload" crossorigin href="/assets/tool-activity-R8V9l6nk.js">
|
|
54
56
|
<link rel="modulepreload" crossorigin href="/assets/button-CSEbl4zT.js">
|
|
55
57
|
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-B_zrtccP.js">
|
|
56
58
|
<link rel="modulepreload" crossorigin href="/assets/registry-api-BFZrVYfy.js">
|
|
57
59
|
<link rel="modulepreload" crossorigin href="/assets/config-reload-event-Bjh2zoKp.js">
|
|
58
60
|
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-BWGjnmDl.js">
|
|
61
|
+
<link rel="modulepreload" crossorigin href="/assets/models-hub-cache-0RjEwafI.js">
|
|
59
62
|
<link rel="modulepreload" crossorigin href="/assets/electron-env-DH5wF8X8.js">
|
|
63
|
+
<link rel="modulepreload" crossorigin href="/assets/oauth-api-BwNLwbI8.js">
|
|
60
64
|
<link rel="modulepreload" crossorigin href="/assets/form-field-width-DJw_jULe.js">
|
|
61
65
|
<link rel="modulepreload" crossorigin href="/assets/interaction-BmQogeqz.js">
|
|
62
66
|
<link rel="modulepreload" crossorigin href="/assets/is-masked-secret-DOkL5b_X.js">
|
|
63
67
|
<link rel="modulepreload" crossorigin href="/assets/activity-store-M0nAY5XB.js">
|
|
64
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
65
|
-
<link rel="stylesheet" crossorigin href="/assets/markdown-view-
|
|
66
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
68
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-Qgvo0Ga7.js">
|
|
69
|
+
<link rel="stylesheet" crossorigin href="/assets/markdown-view-B1bGSQqt.css">
|
|
70
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CCyIdGuQ.css">
|
|
67
71
|
</head>
|
|
68
72
|
<body>
|
|
69
73
|
<div id="root"></div>
|
package/dist/package.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { queueEmbeddedSteer } from "../embedded/runs.js";
|
|
2
2
|
import { buildDirectUserMessageContent } from "../service/build-direct-message-content.js";
|
|
3
|
+
import { maybeEmitWebchatTts } from "../service/webchat-tts.js";
|
|
3
4
|
import { runProcessDirectStreaming } from "../service/process-direct-streaming.js";
|
|
4
5
|
import { runProcessDirect } from "../service/process-direct-one-shot.js";
|
|
5
|
-
import { maybeEmitWebchatTts } from "../service/webchat-tts.js";
|
|
6
6
|
//#region src/agent/inbound/turn-dispatcher.ts
|
|
7
7
|
var TurnDispatcher = class {
|
|
8
8
|
cfg;
|
|
@@ -13,6 +13,7 @@ import { isSessionSourceBinding, summarizeSourceContext } from "../source-contex
|
|
|
13
13
|
import { injectSourceContextsIntoUserMessage } from "../source-context/injector.js";
|
|
14
14
|
import { AsyncQueue, AsyncQueueOverflowError } from "./async-queue.js";
|
|
15
15
|
import { hydratePerTurnState, runDirectAgentTurn, tryRunSlashCommand } from "./direct-turn-helpers.js";
|
|
16
|
+
import { isSuccessfulWebchatTtsToolEvent } from "./webchat-tts.js";
|
|
16
17
|
//#region src/agent/service/process-direct-streaming.ts
|
|
17
18
|
const MAX_BUFFERED_STREAM_EVENTS = 512;
|
|
18
19
|
const LOSSY_STREAM_EVENT_TYPES = new Set([
|
|
@@ -151,6 +152,7 @@ async function* runProcessDirectStreaming(deps, input) {
|
|
|
151
152
|
let userAborted = false;
|
|
152
153
|
let abortHandled = false;
|
|
153
154
|
let inboundVoice = false;
|
|
155
|
+
let explicitTtsEmitted = false;
|
|
154
156
|
let ranSlashCommand = false;
|
|
155
157
|
let mergedUserText = input.content;
|
|
156
158
|
let webchatSlashReceipt;
|
|
@@ -299,6 +301,7 @@ async function* runProcessDirectStreaming(deps, input) {
|
|
|
299
301
|
runId: input.runId,
|
|
300
302
|
onEvent: (embeddedEvent) => {
|
|
301
303
|
const event = { ...embeddedEvent };
|
|
304
|
+
if (isSuccessfulWebchatTtsToolEvent(event)) explicitTtsEmitted = true;
|
|
302
305
|
if (event.type === "error" && typeof event.content === "string") event.content = formatStreamError(event.content);
|
|
303
306
|
pushVisible(event);
|
|
304
307
|
}
|
|
@@ -329,7 +332,7 @@ async function* runProcessDirectStreaming(deps, input) {
|
|
|
329
332
|
sessionKey,
|
|
330
333
|
droppedEvents: queue.droppedCount
|
|
331
334
|
}, "Coalesced stream progress events because the consumer fell behind");
|
|
332
|
-
if (!userAborted && !streamOverflowed && channel === "webchat") try {
|
|
335
|
+
if (!userAborted && !streamOverflowed && channel === "webchat" && !explicitTtsEmitted) try {
|
|
333
336
|
const ttsAudioEvent = await deps.maybeEmitWebchatTts(sessionKey, inboundVoice);
|
|
334
337
|
if (ttsAudioEvent) queue.push(ttsAudioEvent);
|
|
335
338
|
} catch (ttsErr) {
|
|
@@ -15,6 +15,8 @@ export type WebchatTtsDeps = {
|
|
|
15
15
|
warn: (obj: Record<string, unknown>, msg: string) => void;
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
|
+
/** True when the explicit TTS tool already produced durable Webchat audio. */
|
|
19
|
+
export declare function isSuccessfulWebchatTtsToolEvent(event: unknown): boolean;
|
|
18
20
|
/**
|
|
19
21
|
* Generate TTS for webchat when config allows; persist under `{stateDir}/media/tts/`.
|
|
20
22
|
*/
|
|
@@ -3,9 +3,22 @@ import { speak } from "../../voice/tts/speak-core.js";
|
|
|
3
3
|
import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
|
|
4
4
|
import { getChannelOutputFormat, shouldUseTTS } from "../../voice/tts/service.js";
|
|
5
5
|
import { compressAudio } from "../../voice/tts/audio.js";
|
|
6
|
-
import "../../voice/tts/index.js";
|
|
7
6
|
import { persistOutboundTtsAudio } from "../../channels/attachments/outbound-tts-persist.js";
|
|
7
|
+
import "../../voice/tts/index.js";
|
|
8
8
|
//#region src/agent/service/webchat-tts.ts
|
|
9
|
+
/** True when the explicit TTS tool already produced durable Webchat audio. */
|
|
10
|
+
function isSuccessfulWebchatTtsToolEvent(event) {
|
|
11
|
+
if (!event || typeof event !== "object" || Array.isArray(event)) return false;
|
|
12
|
+
const row = event;
|
|
13
|
+
if (row.type !== "tool_execution_end" || row.toolName !== "text_to_speech" || row.isError === true) return false;
|
|
14
|
+
const result = row.result && typeof row.result === "object" && !Array.isArray(row.result) ? row.result : null;
|
|
15
|
+
const details = result?.details && typeof result.details === "object" && !Array.isArray(result.details) ? result.details : null;
|
|
16
|
+
return Array.isArray(details?.media) && details.media.some((item) => {
|
|
17
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) return false;
|
|
18
|
+
const media = item;
|
|
19
|
+
return typeof media.uri === "string" && media.uri.trim().length > 0;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
9
22
|
/**
|
|
10
23
|
* Generate TTS for webchat when config allows; persist under `{stateDir}/media/tts/`.
|
|
11
24
|
*/
|
|
@@ -57,4 +70,4 @@ async function appendMediaToLastAssistant(sessionStore, sessionKey, ref) {
|
|
|
57
70
|
}
|
|
58
71
|
}
|
|
59
72
|
//#endregion
|
|
60
|
-
export { appendMediaToLastAssistant, maybeEmitWebchatTts };
|
|
73
|
+
export { appendMediaToLastAssistant, isSuccessfulWebchatTtsToolEvent, maybeEmitWebchatTts };
|
|
@@ -108,6 +108,7 @@ export declare class AgentService {
|
|
|
108
108
|
getAgentSkillAvailability(agentId: string): AgentSkillAvailabilityPayload;
|
|
109
109
|
getSessionSkillAvailability(sessionKey: string): Promise<AgentSkillAvailabilityPayload>;
|
|
110
110
|
getSessionWorkspaceTrust(sessionKey: string): Promise<WorkspaceTrustState>;
|
|
111
|
+
getResolvedWorkspaceForSession(sessionKey: string): string;
|
|
111
112
|
setSessionWorkspaceTrust(sessionKey: string, trusted: boolean): Promise<WorkspaceTrustState>;
|
|
112
113
|
getWorkspaceTrust(workspacePath: string): WorkspaceTrustState;
|
|
113
114
|
setWorkspaceTrust(workspacePath: string, trusted: boolean): WorkspaceTrustState;
|
|
@@ -10,12 +10,12 @@ import { init_providers, resolveModel } from "../providers/index.js";
|
|
|
10
10
|
import { extractTextContent } from "./context/workspace.js";
|
|
11
11
|
import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
|
|
12
12
|
import { getProjectForSession } from "../projects/workspace.js";
|
|
13
|
-
import { resolveAgentTurnTimeoutMs } from "./orchestration/run-agent-turn-with-timeout.js";
|
|
14
|
-
import { resolveResponseLanguageForSession } from "./prompt/response-language.js";
|
|
15
13
|
import { resolveWorkspaceSkillsDir, resolveWorkspaceSkillsLockPath } from "./skills/workspace-skills-dir.js";
|
|
16
14
|
import { removeSkillsLockEntry } from "./skills/hub-lock.js";
|
|
17
15
|
import { installSkillFromZip } from "./skills/managed-store.js";
|
|
18
16
|
import { pullSkillFromSource } from "./skills/hub-pull.js";
|
|
17
|
+
import { resolveAgentTurnTimeoutMs } from "./orchestration/run-agent-turn-with-timeout.js";
|
|
18
|
+
import { resolveResponseLanguageForSession } from "./prompt/response-language.js";
|
|
19
19
|
import { normalizeSkillInstallTarget } from "./skills/install-target.js";
|
|
20
20
|
import { onSessionTranscriptUpdate } from "../session/transcript-events.js";
|
|
21
21
|
import { persistInboundAttachments } from "../channels/attachments/inbound-persist.js";
|
|
@@ -509,6 +509,9 @@ var AgentService = class {
|
|
|
509
509
|
await this.sessionHydrator.workspace(sessionKey);
|
|
510
510
|
return this.agentManager.getSessionWorkspaceTrust(sessionKey);
|
|
511
511
|
}
|
|
512
|
+
getResolvedWorkspaceForSession(sessionKey) {
|
|
513
|
+
return this.agentManager.getResolvedWorkspaceForSession(sessionKey);
|
|
514
|
+
}
|
|
512
515
|
async setSessionWorkspaceTrust(sessionKey, trusted) {
|
|
513
516
|
await this.sessionHydrator.workspace(sessionKey);
|
|
514
517
|
return this.agentManager.setSessionWorkspaceTrust(sessionKey, trusted);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { init_paths, resolveSkillsDir } from "../../config/paths.js";
|
|
2
2
|
import { parseFrontmatter } from "../../markdown/frontmatter.js";
|
|
3
|
-
import { fuzzyFindText, normalizeForFuzzyMatch, normalizeToLF, restoreLineEndings } from "../tools/edit-diff.js";
|
|
4
3
|
import { resolveWorkspaceSkillsDir } from "./workspace-skills-dir.js";
|
|
5
4
|
import { formatScanSummary, scanSkillDirectory } from "./scanner.js";
|
|
5
|
+
import { fuzzyFindText, normalizeForFuzzyMatch, normalizeToLF, restoreLineEndings } from "../tools/edit-diff.js";
|
|
6
6
|
import { join, resolve, sep } from "path";
|
|
7
7
|
import { existsSync, realpathSync } from "fs";
|
|
8
8
|
import { mkdir, writeFile } from "fs/promises";
|
|
@@ -4,6 +4,7 @@ import { speak } from "../../voice/tts/speak-core.js";
|
|
|
4
4
|
import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
|
|
5
5
|
import { getChannelOutputFormat } from "../../voice/tts/service.js";
|
|
6
6
|
import { compressAudio } from "../../voice/tts/audio.js";
|
|
7
|
+
import { persistOutboundTtsAudio } from "../../channels/attachments/outbound-tts-persist.js";
|
|
7
8
|
import { Type } from "@sinclair/typebox";
|
|
8
9
|
//#region src/agent/tools/tts-tool.ts
|
|
9
10
|
init_logger();
|
|
@@ -72,30 +73,35 @@ function createTextToSpeechTool(deps) {
|
|
|
72
73
|
});
|
|
73
74
|
const wavTarget = outFmt.format === "mp3" ? "mp3" : "opus";
|
|
74
75
|
const { buffer: compressedAudio, format: compressedFormat } = await compressAudio(Buffer.from(result.audio), result.format, wavTarget);
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
76
|
+
const mimeType = compressedFormat === "opus" ? "audio/ogg" : compressedFormat === "mp3" || compressedFormat === "mpeg" ? "audio/mpeg" : `audio/${compressedFormat}`;
|
|
77
|
+
const media = ctx.channel === "webchat" ? await persistOutboundTtsAudio(compressedAudio, compressedFormat) : void 0;
|
|
78
|
+
if (!media) {
|
|
79
|
+
const msg = {
|
|
80
|
+
channel: ctx.channel,
|
|
81
|
+
chat_id: ctx.chatId,
|
|
82
|
+
content: "",
|
|
83
|
+
mediaUrl: `data:${mimeType};base64,${compressedAudio.toString("base64")}`,
|
|
84
|
+
mediaType: "audio",
|
|
85
|
+
audioAsVoice: outFmt.voiceCompatible
|
|
86
|
+
};
|
|
87
|
+
await deps.bus.publishOutbound(msg);
|
|
88
|
+
}
|
|
85
89
|
log.info({
|
|
86
90
|
provider: result.provider,
|
|
87
91
|
format: compressedFormat,
|
|
92
|
+
channel: ctx.channel,
|
|
88
93
|
textLength: params.text.length,
|
|
89
94
|
audioSize: compressedAudio.length
|
|
90
|
-
}, "TTS tool sent audio");
|
|
95
|
+
}, ctx.channel === "webchat" ? "TTS tool attached audio" : "TTS tool sent audio");
|
|
91
96
|
return {
|
|
92
97
|
content: [{
|
|
93
98
|
type: "text",
|
|
94
|
-
text: `✅ Sent voice message (${result.provider}, ${compressedFormat}).`
|
|
99
|
+
text: ctx.channel === "webchat" ? `✅ Attached voice message (${result.provider}, ${compressedFormat}).` : `✅ Sent voice message (${result.provider}, ${compressedFormat}).`
|
|
95
100
|
}],
|
|
96
101
|
details: {
|
|
97
102
|
provider: result.provider,
|
|
98
|
-
format: compressedFormat
|
|
103
|
+
format: compressedFormat,
|
|
104
|
+
...media ? { media: [media] } : {}
|
|
99
105
|
}
|
|
100
106
|
};
|
|
101
107
|
} catch (error) {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { checkFileSafety } from "../prompt/safety.js";
|
|
2
2
|
import { isBareProfileMarkdownFileName, resolvePathUnderWorkspace, resolveProfileMarkdownPathIfBareName } from "./tool-paths.js";
|
|
3
3
|
import { appendProductDeliveryText } from "../../../packages/gateway-contract/src/product-delivery.js";
|
|
4
|
+
import { fileResourceId, fileSpaceId } from "../../files/file-service.js";
|
|
4
5
|
import { evaluateFilePolicy } from "../sandbox/exec-policy.js";
|
|
5
|
-
import { basename, dirname } from "path";
|
|
6
|
-
import { mkdir, writeFile } from "fs/promises";
|
|
6
|
+
import { basename, dirname, relative, sep } from "path";
|
|
7
|
+
import { mkdir, realpath, writeFile } from "fs/promises";
|
|
7
8
|
import { Type } from "@sinclair/typebox";
|
|
8
9
|
//#region src/agent/tools/write.ts
|
|
9
10
|
const MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
@@ -59,30 +60,26 @@ function createWriteFileTool(workspace, options) {
|
|
|
59
60
|
const target = writesProfileFile ? resolveProfileMarkdownPathIfBareName(p.path, options.profileMarkdownRoot) : resolvePathUnderWorkspace(p.path, workspace);
|
|
60
61
|
await mkdir(dirname(target), { recursive: true });
|
|
61
62
|
await writeFile(target, p.content, "utf-8");
|
|
62
|
-
const delivery = {
|
|
63
|
+
const delivery = writesProfileFile ? void 0 : await Promise.all([realpath(workspace), realpath(target)]).then(([root, canonicalTarget]) => ({
|
|
63
64
|
version: 1,
|
|
64
65
|
operation: "updated",
|
|
65
66
|
primary: {
|
|
66
67
|
kind: "file",
|
|
67
|
-
id:
|
|
68
|
+
id: fileResourceId(fileSpaceId(root), relative(root, canonicalTarget).split(sep).join("/")),
|
|
68
69
|
title: basename(target),
|
|
69
70
|
summary: `${contentBytes} bytes written`,
|
|
70
|
-
capabilities: [
|
|
71
|
-
"preview",
|
|
72
|
-
"reveal",
|
|
73
|
-
"share"
|
|
74
|
-
]
|
|
71
|
+
capabilities: ["preview", "share"]
|
|
75
72
|
}
|
|
76
|
-
};
|
|
73
|
+
}));
|
|
77
74
|
return {
|
|
78
75
|
content: [{
|
|
79
76
|
type: "text",
|
|
80
|
-
text: appendProductDeliveryText(`File written: ${target}`, delivery)
|
|
77
|
+
text: delivery ? appendProductDeliveryText(`File written: ${target}`, delivery) : `File written: ${target}`
|
|
81
78
|
}],
|
|
82
79
|
details: {
|
|
83
80
|
size: contentBytes,
|
|
84
81
|
path: target,
|
|
85
|
-
delivery
|
|
82
|
+
...delivery ? { delivery } : {}
|
|
86
83
|
}
|
|
87
84
|
};
|
|
88
85
|
} catch (error) {
|
|
@@ -11,10 +11,10 @@ import { TaskRunRepository } from "../../tasks/task-run-repository.js";
|
|
|
11
11
|
import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
|
|
12
12
|
import { TaskCommandSchema, TaskContextInputSchema } from "../../../packages/gateway-contract/src/tasks.js";
|
|
13
13
|
import { appendProductDeliveryText } from "../../../packages/gateway-contract/src/product-delivery.js";
|
|
14
|
-
import { CreateAutomationSchema, UpdateAutomationSchema } from "../../automations/domain/validation.js";
|
|
15
|
-
import "../../automations/index.js";
|
|
16
14
|
import { isValidProjectAgentId, normalizeProjectAgentId, resolveProjectAgentId } from "../../projects/project-agent.js";
|
|
17
15
|
import "../../projects/index.js";
|
|
16
|
+
import { CreateAutomationSchema, UpdateAutomationSchema } from "../../automations/domain/validation.js";
|
|
17
|
+
import "../../automations/index.js";
|
|
18
18
|
import { TaskContextRepository } from "../../tasks/task-context-repository.js";
|
|
19
19
|
import { TaskDependencyError, TaskDependencyService } from "../../tasks/task-dependency-service.js";
|
|
20
20
|
import { TaskApplicationService } from "../../tasks/task-application-service.js";
|
|
@@ -8,7 +8,7 @@ import { init_kimi_coding, kimiCodingOAuthProvider } from "./kimi-coding.js";
|
|
|
8
8
|
import { init_minimax_cn, minimaxCnOAuthProvider } from "./minimax-cn.js";
|
|
9
9
|
import { init_minimax, minimaxOAuthProvider } from "./minimax.js";
|
|
10
10
|
import { init_openai_codex, loginOpenAICodex, openaiCodexOAuthProvider, refreshOpenAICodexToken } from "./openai-codex.js";
|
|
11
|
-
import { init_xopc_cloud, xopcCloudOAuthProvider, xopcTunnelOAuthProvider } from "./xopc-cloud.js";
|
|
11
|
+
import { init_xopc_cloud, xopcCloudOAuthProvider, xopcShareOAuthProvider, xopcTunnelOAuthProvider } from "./xopc-cloud.js";
|
|
12
12
|
import { OAUTH_PROVIDER_DEFINITIONS, getModelOAuthProviderIds, getOAuthProviderDefinition, getOAuthProviderIds, getOAuthProviderInterfaces, init_registry, isOAuthOnlyProvider } from "./registry.js";
|
|
13
13
|
//#region src/auth/oauth/index.ts
|
|
14
14
|
init_anthropic();
|
|
@@ -22,4 +22,4 @@ init_openai_codex();
|
|
|
22
22
|
init_xopc_cloud();
|
|
23
23
|
init_registry();
|
|
24
24
|
//#endregion
|
|
25
|
-
export { OAUTH_PROVIDER_DEFINITIONS, anthropicOAuthProvider, getModelOAuthProviderIds, getOAuthProviderDefinition, getOAuthProviderIds, getOAuthProviderInterfaces, githubCopilotOAuthProvider, antigravityOAuthProvider as googleAntigravityOAuthProvider, geminiCliOAuthProvider as googleGeminiCliOAuthProvider, isOAuthOnlyProvider, kimiCodingOAuthProvider, loginAnthropic, loginAntigravity, loginGeminiCli, loginOpenAICodex, minimaxCnOAuthProvider, minimaxOAuthProvider, openaiCodexOAuthProvider, refreshAnthropicToken, refreshAntigravityToken, refreshGoogleCloudToken, refreshOpenAICodexToken, xopcCloudOAuthProvider, xopcTunnelOAuthProvider };
|
|
25
|
+
export { OAUTH_PROVIDER_DEFINITIONS, anthropicOAuthProvider, getModelOAuthProviderIds, getOAuthProviderDefinition, getOAuthProviderIds, getOAuthProviderInterfaces, githubCopilotOAuthProvider, antigravityOAuthProvider as googleAntigravityOAuthProvider, geminiCliOAuthProvider as googleGeminiCliOAuthProvider, isOAuthOnlyProvider, kimiCodingOAuthProvider, loginAnthropic, loginAntigravity, loginGeminiCli, loginOpenAICodex, minimaxCnOAuthProvider, minimaxOAuthProvider, openaiCodexOAuthProvider, refreshAnthropicToken, refreshAntigravityToken, refreshGoogleCloudToken, refreshOpenAICodexToken, xopcCloudOAuthProvider, xopcShareOAuthProvider, xopcTunnelOAuthProvider };
|
|
@@ -2,7 +2,7 @@ import type { OAuthProviderInterface } from './types.js';
|
|
|
2
2
|
export interface OAuthProviderDefinition {
|
|
3
3
|
displayName: string;
|
|
4
4
|
oauthOnly?: boolean;
|
|
5
|
-
purpose: 'models' | 'tunnel';
|
|
5
|
+
purpose: 'models' | 'tunnel' | 'share';
|
|
6
6
|
provider: OAuthProviderInterface;
|
|
7
7
|
profileId: string;
|
|
8
8
|
urlPrompt: string;
|
|
@@ -9,7 +9,7 @@ import { init_kimi_coding, kimiCodingOAuthProvider } from "./kimi-coding.js";
|
|
|
9
9
|
import { init_minimax_cn, minimaxCnOAuthProvider } from "./minimax-cn.js";
|
|
10
10
|
import { init_minimax, minimaxOAuthProvider } from "./minimax.js";
|
|
11
11
|
import { init_openai_codex, openaiCodexOAuthProvider } from "./openai-codex.js";
|
|
12
|
-
import { init_xopc_cloud, xopcCloudOAuthProvider, xopcTunnelOAuthProvider } from "./xopc-cloud.js";
|
|
12
|
+
import { init_xopc_cloud, xopcCloudOAuthProvider, xopcShareOAuthProvider, xopcTunnelOAuthProvider } from "./xopc-cloud.js";
|
|
13
13
|
//#region src/auth/oauth/registry.ts
|
|
14
14
|
function definition(provider, purpose, displayName = provider.name) {
|
|
15
15
|
return {
|
|
@@ -55,6 +55,10 @@ var init_registry = __esmMin((() => {
|
|
|
55
55
|
...definition(xopcTunnelOAuthProvider, "tunnel"),
|
|
56
56
|
oauthOnly: true
|
|
57
57
|
},
|
|
58
|
+
"xopc-share": {
|
|
59
|
+
...definition(xopcShareOAuthProvider, "share"),
|
|
60
|
+
oauthOnly: true
|
|
61
|
+
},
|
|
58
62
|
anthropic: definition(anthropicOAuthProvider, "models", "Anthropic (Claude)"),
|
|
59
63
|
minimax: definition(minimaxOAuthProvider, "models", "MiniMax (幂维智能)"),
|
|
60
64
|
"minimax-cn": {
|
|
@@ -388,13 +388,14 @@ function createXopcOAuthProvider(options) {
|
|
|
388
388
|
getApiKey: (value) => value.access
|
|
389
389
|
};
|
|
390
390
|
}
|
|
391
|
-
var CLIENT_ID, DEFAULT_CONSOLE_URL, MODEL_SERVICE_SCOPE, TUNNEL_REGISTRATION_SCOPE, CALLBACK_PATH, AUTHORIZATION_TIMEOUT_MS, xopcCloudOAuthProvider, xopcTunnelOAuthProvider;
|
|
391
|
+
var CLIENT_ID, DEFAULT_CONSOLE_URL, MODEL_SERVICE_SCOPE, TUNNEL_REGISTRATION_SCOPE, HOSTED_SHARE_SCOPE, CALLBACK_PATH, AUTHORIZATION_TIMEOUT_MS, xopcCloudOAuthProvider, xopcTunnelOAuthProvider, xopcShareOAuthProvider;
|
|
392
392
|
var init_xopc_cloud = __esmMin((() => {
|
|
393
393
|
init_pkce();
|
|
394
394
|
CLIENT_ID = "xopc-native";
|
|
395
395
|
DEFAULT_CONSOLE_URL = "https://console.xopc.ai";
|
|
396
396
|
MODEL_SERVICE_SCOPE = "models:read models:invoke account:usage connectors:read connectors:manage connectors:execute offline_access";
|
|
397
397
|
TUNNEL_REGISTRATION_SCOPE = "tunnel:register";
|
|
398
|
+
HOSTED_SHARE_SCOPE = "shares:read shares:write offline_access";
|
|
398
399
|
CALLBACK_PATH = "/oauth/callback";
|
|
399
400
|
AUTHORIZATION_TIMEOUT_MS = 5 * 6e4;
|
|
400
401
|
xopcCloudOAuthProvider = createXopcOAuthProvider({
|
|
@@ -407,7 +408,12 @@ var init_xopc_cloud = __esmMin((() => {
|
|
|
407
408
|
name: "XOPC Public Tunnel",
|
|
408
409
|
scope: TUNNEL_REGISTRATION_SCOPE
|
|
409
410
|
});
|
|
411
|
+
xopcShareOAuthProvider = createXopcOAuthProvider({
|
|
412
|
+
id: "xopc-share",
|
|
413
|
+
name: "XOPC Hosted Share",
|
|
414
|
+
scope: HOSTED_SHARE_SCOPE
|
|
415
|
+
});
|
|
410
416
|
}));
|
|
411
417
|
//#endregion
|
|
412
418
|
init_xopc_cloud();
|
|
413
|
-
export { init_xopc_cloud, xopcCloudOAuthProvider, xopcTunnelOAuthProvider };
|
|
419
|
+
export { init_xopc_cloud, xopcCloudOAuthProvider, xopcShareOAuthProvider, xopcTunnelOAuthProvider };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FileResource, FileSpace } from '@xopcai/gateway-contract';
|
|
2
|
+
import type { Config } from '../config/schema.js';
|
|
3
|
+
import { type ProjectService } from '../projects/index.js';
|
|
4
|
+
export type ResolvedFileSpace = FileSpace & {
|
|
5
|
+
root: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function fileSpaceId(root: string): string;
|
|
8
|
+
export declare function fileResourceId(spaceId: string, relativePath: string): string;
|
|
9
|
+
export declare function parseFileResourceId(id: string): {
|
|
10
|
+
spaceId: string;
|
|
11
|
+
relativePath: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function resolveFilePath(root: string, path: string, mustExist?: boolean): Promise<string>;
|
|
14
|
+
export declare class FileServiceError extends Error {
|
|
15
|
+
readonly status: 400 | 403 | 404 | 409;
|
|
16
|
+
constructor(status: 400 | 403 | 404 | 409, message: string);
|
|
17
|
+
}
|
|
18
|
+
export declare function fileResourceFromPath(space: ResolvedFileSpace, absolutePath: string): Promise<FileResource>;
|
|
19
|
+
export declare class FileSpaceService {
|
|
20
|
+
private readonly getConfig;
|
|
21
|
+
private readonly projects;
|
|
22
|
+
private readonly resolveSessionWorkspace;
|
|
23
|
+
private readonly dynamicSpaces;
|
|
24
|
+
private cache;
|
|
25
|
+
constructor(getConfig: () => Config, projects: ProjectService, resolveSessionWorkspace: (sessionKey: string) => string);
|
|
26
|
+
private createSpace;
|
|
27
|
+
list(): Promise<ResolvedFileSpace[]>;
|
|
28
|
+
forContext(kind: 'agent' | 'project' | 'session', id: string): Promise<ResolvedFileSpace>;
|
|
29
|
+
get(id: string): Promise<ResolvedFileSpace>;
|
|
30
|
+
resource(id: string): Promise<{
|
|
31
|
+
space: ResolvedFileSpace;
|
|
32
|
+
resource: FileResource;
|
|
33
|
+
absolutePath: string;
|
|
34
|
+
}>;
|
|
35
|
+
children(spaceId: string, path?: string): Promise<FileResource[]>;
|
|
36
|
+
}
|