@xopcai/xopc 0.0.253 → 0.0.255
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/dist/background.js +59 -13
- package/dist/browser-ext/dist/content.js +0 -5
- package/dist/browser-ext/manifest.json +2 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-CeS1bgXP.js → activity-store-DvjK5FEm.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BdF3HhCW.js → agent-avatar-dicebear-Cqspzbf_.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CL3Mi-uM.js +1 -0
- package/dist/gateway/static/root/assets/agents-odqXmGhA.js +1 -0
- package/dist/gateway/static/root/assets/{api-zMPeC0yU.js → api-CsYi3heY.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BaAFln8W.js → app-management-settings-panel-Gd4a5hdE.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-CXvsoBlw.js → appearance-settings-CZ6KOnbd.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DyBDoCam.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-C0o_mVQI.js → archive-plugin-y82Rwhjm.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B5Ry3tGL.js → attachment-load-D46SGNpv.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-DY5QAEQd.js → automations-page-wilciIZ1.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-8U86Umig.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BydpEgBA.js → binary-plugins-CuMkNNCe.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-D0CpUOMo.js → block-editor-DFnPsrxI.js} +44 -44
- package/dist/gateway/static/root/assets/{browser-automation-inputs-DzbTsGI6.js → browser-automation-inputs-hlmcSp4p.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-D7fZYjni.js → browser-automations-page-OjZvbARU.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-DOUG84qV.js +8 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CG73Mwi8.js +7 -0
- package/dist/gateway/static/root/assets/channels-settings-MDywEWWM.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-BGGRTkn6.js → channels-status-swr-D1HHFzkE.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-_CP4nvlg.js → chat-terminal-dock-Ce_T9BPq.js} +2 -2
- package/dist/gateway/static/root/assets/connectors-page-D29p6Zvm.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-g2U8Rllf.js → cron-expression-BRrCwYyD.js} +1 -1
- package/dist/gateway/static/root/assets/date-picker-C35RuuWW.js +1 -0
- package/dist/gateway/static/root/assets/{dependency-picker-D-0gcbbM.js → dependency-picker-4pNXVcRM.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-D7kvWQ9H.js → desktop-pet-settings-BvV1UA5g.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-Cl3JRIu6.js → desktop-pet-z91GYnPf.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DtP2tJHY.js → extension-debug-page-CkVF5HvV.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CphZDdoT.js → extension-page-DW0zQGaB.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CsxVLV4-.js → extension-settings-page-BLQhizZ3.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-BW3Bx-aV.js → gateway-config-swr-02BBC1mK.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-DxBZ05dX.js → gateway-settings-rAXx8FGP.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DAq74TZe.js → gateway-startup-retry-XZnY6621.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-BaW_r1t9.js +1 -0
- package/dist/gateway/static/root/assets/home-page-BoTS8-Z9.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-MPuaXDRs.js → image-generation-api-CIcKz4Xs.js} +1 -1
- package/dist/gateway/static/root/assets/index-DsonmRCH.css +2 -0
- package/dist/gateway/static/root/assets/index-PksHo9hS.js +74 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CfhaTqgE.js → keyboard-shortcuts-settings-yfaGz6SE.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CR6asX7L.js → local-app-workbench-page-B3flRQH1.js} +2 -2
- package/dist/gateway/static/root/assets/{local-apps-page-g01W3kEK.js → local-apps-page-Cp-nEtgV.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BkeaPZpn.js → locale-store-VsboRLD7.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DkqsRCri.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-DeGxJF_Z.js → management-settings-24_JyDPk.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-Ca7BRBLL.js → markdown-view-CPXhy6nh.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-FmOhmzlD.js → media-plugins-CwLvIb9r.js} +1 -1
- package/dist/gateway/static/root/assets/messages-DngsF_Kx.js +3 -0
- package/dist/gateway/static/root/assets/{mobile-pairing-wizard-BXNbn05L.js → mobile-pairing-wizard-BbJCDv57.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-OklYXK7y.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-BjfgJIQw.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-pyukZ1PJ.js → page-tabs-0YXn9Gkl.js} +1 -1
- package/dist/gateway/static/root/assets/popover-select-CKBYnT3c.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-slFHoMUe.js → preview-open-alternatives-2jVV5kfZ.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-CXa3FNNk.js → product-open-page-D7p0NfTK.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-rLNM2mP0.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-D6jY2ZWl.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-CviQoUBf.js → registry-api-DlTWbXQA.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CZZg0kXc.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-O9D9o7-O.js → runtime-tools-settings-panel-B-NDgmJ4.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-8FesicnL.js → schema-form-DZYeBS1v.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-BvuxJegi.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BAQHP4mB.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CBic9TFH.js → settings-form-section-zy5UMvPk.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-Xz66_Mjg.js → settings-page-CTuipbJq.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BkWoc5j5.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page--JpjwB58.js → share-preview-page-D3Uawo_h.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-B2doziIn.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-D2ymjqG5.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-fVKExKv5.js → skills-page-DDbabz7p.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-Yv9u3uJp.js → skills-page.utils-DkGhbiMa.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CCWjVdc2.js → system-settings-panel-Fc-WbX6-.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-7w7eB9nB.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-BtkaVpMm.js → theme-store-vdB57bTn.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-C__W9BaN.js → tunnel-api-DZ0evABj.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-Dow9RRcq.js → use-autosave-Ckof_m7e.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-CcNCyrXZ.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-CvF3lEyx.js → voice-api-key-field-CnmtpWlq.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-BEUVAyM6.js → voice-config-api-OA04c71t.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-B9PDfReq.js → work-discovery-overlay-sxvsDIC3.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-CUCfBpPF.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-Bp-nvnLa.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 +4 -4
- 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 +1 -1
- 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 +2 -2
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/tasks/task-judge-service.js +3 -3
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +17 -2
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +85 -1
- package/dist/src/agent/tools/browser/tool/schemas.js +212 -5
- package/dist/src/agent/tools/create-share-tool.js +39 -1
- package/dist/src/agent/tools/xopc-use-tool.js +2 -2
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/oauth/xopc-cloud.js +1 -1
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/browser/drivers/extension-driver.d.ts +4 -4
- package/dist/src/browser/drivers/extension-driver.js +20 -8
- package/dist/src/browser/drivers/playwright-driver.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +3 -0
- package/dist/src/browser/providers/browser-ext-install.js +19 -4
- package/dist/src/browser/providers/extension.d.ts +14 -1
- package/dist/src/browser/providers/extension.js +89 -11
- package/dist/src/browser/providers/playwright-install.js +8 -12
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/tunnel.js +3 -3
- 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/extensions/lockfile.js +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/device-routes.js +1 -1
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- package/dist/src/gateway/hono/routes/browser.js +149 -27
- package/dist/src/gateway/hono/routes/lazy-bundles.js +3 -3
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +1 -1
- package/dist/src/gateway/hono/routes/shares.js +404 -7
- package/dist/src/gateway/hono/routes/site-shares.js +19 -13
- package/dist/src/gateway/hono/routes/tunnel.js +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +2 -2
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/sessions-api.js +1 -1
- package/dist/src/gateway/service.js +13 -13
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/model-thinking.js +57 -20
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/remote-access/exposure-manager.js +1 -1
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/store.js +1 -1
- package/dist/src/share/hosted-note-publication.d.ts +22 -0
- package/dist/src/share/hosted-note-publication.js +96 -0
- package/dist/src/share/hosted-session-share.d.ts +86 -7
- package/dist/src/share/hosted-session-share.js +72 -15
- package/dist/src/share/hosted-static-site-publication.d.ts +16 -0
- package/dist/src/share/hosted-static-site-publication.js +108 -0
- package/dist/src/share/hosted-static-site-publish.d.ts +23 -0
- package/dist/src/share/hosted-static-site-publish.js +53 -0
- package/dist/src/share/note-share-service.d.ts +1 -0
- package/dist/src/share/note-share-service.js +4 -4
- package/dist/src/share/share-url.d.ts +1 -1
- package/dist/src/share/share-url.js +14 -9
- package/dist/src/tasks/home-query-service.js +2 -2
- package/dist/src/tui/backends/embedded-backend.js +2 -2
- package/dist/src/tui/tui-agent-events.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/tunnel/index.js +1 -1
- package/dist/src/tunnel/tunnel-service.js +1 -1
- package/dist/src/voice/realtime/agentEngine.js +17 -0
- package/dist/src/voice/realtime/memory-context.js +1 -1
- package/dist/src/voice/realtime/playback-echo.d.ts +2 -0
- package/dist/src/voice/realtime/playback-echo.js +15 -0
- package/dist/src/work-discovery/service.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +2 -2
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +0 -1
- package/dist/gateway/static/root/assets/agents-DARlgjTm.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BhgvfBJT.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BBdMqxl0.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +0 -2
- package/dist/gateway/static/root/assets/date-picker-SmVlhtj_.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-DWcKsIoZ.js +0 -1
- package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +0 -1
- package/dist/gateway/static/root/assets/index-C7RDs6S-.js +0 -74
- package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +0 -2
- package/dist/gateway/static/root/assets/logs-page-ZP4QTWoC.js +0 -2
- package/dist/gateway/static/root/assets/messages-C72stReU.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +0 -8
- package/dist/gateway/static/root/assets/popover-select-C-Hj-nXR.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-CovcdHSC.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-I8hueJnG.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +0 -2
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-kWGFkhjz.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +0 -5
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { PACKAGE_VERSION, init_package_version } from "../../package-version.js";
|
|
2
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../../utils/logger.js";
|
|
4
|
-
import { init_paths, resolveBinDir } from "../../config/paths.js";
|
|
5
4
|
import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
|
|
5
|
+
import { init_paths, resolveBinDir } from "../../config/paths.js";
|
|
6
6
|
import { assertCacheDir } from "../cache-dir-policy.js";
|
|
7
7
|
import { resolvePackageRoot } from "../../infra/update-check.js";
|
|
8
8
|
import { dirname, join } from "node:path";
|
|
9
9
|
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
10
10
|
import { fileURLToPath } from "node:url";
|
|
11
11
|
import { spawn } from "node:child_process";
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
12
13
|
import { readFile, readdir, rm } from "node:fs/promises";
|
|
13
14
|
//#region src/browser/providers/browser-ext-install.ts
|
|
14
15
|
/**
|
|
@@ -42,6 +43,14 @@ function moduleDir() {
|
|
|
42
43
|
function validateBrowserExtLayout(dir) {
|
|
43
44
|
return BROWSER_EXT_REQUIRED_FILES.every((rel) => existsSync(join(dir, rel)));
|
|
44
45
|
}
|
|
46
|
+
function browserExtContentHash(dir) {
|
|
47
|
+
const hash = createHash("sha256");
|
|
48
|
+
for (const relativePath of BROWSER_EXT_REQUIRED_FILES) {
|
|
49
|
+
hash.update(relativePath);
|
|
50
|
+
hash.update(readFileSync(join(dir, relativePath)));
|
|
51
|
+
}
|
|
52
|
+
return hash.digest("hex");
|
|
53
|
+
}
|
|
45
54
|
function readManifestVersion(dir) {
|
|
46
55
|
try {
|
|
47
56
|
const raw = readFileSync(join(dir, "manifest.json"), "utf8");
|
|
@@ -55,7 +64,7 @@ async function readMeta(metaPath) {
|
|
|
55
64
|
try {
|
|
56
65
|
const raw = await readFile(metaPath, "utf8");
|
|
57
66
|
const parsed = JSON.parse(raw);
|
|
58
|
-
if (parsed && typeof parsed === "object" && typeof parsed.xopcVersion === "string") return parsed;
|
|
67
|
+
if (parsed && typeof parsed === "object" && typeof parsed.xopcVersion === "string" && typeof parsed.manifestVersion === "string" && typeof parsed.contentHash === "string" && parsed.source === "bundled" && typeof parsed.installPath === "string") return parsed;
|
|
59
68
|
return null;
|
|
60
69
|
} catch {
|
|
61
70
|
return null;
|
|
@@ -121,7 +130,8 @@ function computeNeedsRefresh(params) {
|
|
|
121
130
|
if (!params.installedPath || !validateBrowserExtLayout(params.installedPath)) return true;
|
|
122
131
|
const installedManifest = readManifestVersion(params.installedPath);
|
|
123
132
|
if (!installedManifest || installedManifest !== params.bundledManifestVersion) return true;
|
|
124
|
-
if (
|
|
133
|
+
if (browserExtContentHash(params.installedPath) !== params.bundledContentHash) return true;
|
|
134
|
+
if (!params.meta || params.meta.xopcVersion !== PACKAGE_VERSION || params.meta.contentHash !== params.bundledContentHash) return true;
|
|
125
135
|
return false;
|
|
126
136
|
}
|
|
127
137
|
async function cleanupStaleStaging(root) {
|
|
@@ -192,11 +202,13 @@ async function browserExtDoctor(opts) {
|
|
|
192
202
|
const cacheDir = (opts?.cacheDir?.trim() ? assertCacheDir(opts.cacheDir) : resolveBinDir()) || resolveBinDir();
|
|
193
203
|
const bundled = await resolveBundledBrowserExtDir();
|
|
194
204
|
const bundledManifestVersion = bundled ? readManifestVersion(bundled.dir) : void 0;
|
|
205
|
+
const bundledContentHash = bundled ? browserExtContentHash(bundled.dir) : void 0;
|
|
195
206
|
const meta = await readMeta(resolveMetaPath(cacheDir));
|
|
196
207
|
const installedPath = resolveInstalledExtensionPath(cacheDir, meta);
|
|
197
208
|
const needsRefresh = bundled ? computeNeedsRefresh({
|
|
198
209
|
force: false,
|
|
199
210
|
bundledManifestVersion: bundledManifestVersion ?? PACKAGE_VERSION,
|
|
211
|
+
bundledContentHash,
|
|
200
212
|
installedPath,
|
|
201
213
|
meta
|
|
202
214
|
}) : false;
|
|
@@ -224,6 +236,7 @@ async function ensureBrowserExtensionArtifacts(opts) {
|
|
|
224
236
|
const bundled = await resolveBundledBrowserExtDir();
|
|
225
237
|
if (!bundled) throw new Error("Bundled browser extension not found. Reinstall xopc or run from a built checkout (pnpm run build).");
|
|
226
238
|
const bundledManifestVersion = readManifestVersion(bundled.dir) ?? PACKAGE_VERSION;
|
|
239
|
+
const bundledContentHash = browserExtContentHash(bundled.dir);
|
|
227
240
|
const root = browserExtRoot(cacheDir);
|
|
228
241
|
mkdirSync(root, { recursive: true });
|
|
229
242
|
await cleanupStaleStaging(root);
|
|
@@ -232,6 +245,7 @@ async function ensureBrowserExtensionArtifacts(opts) {
|
|
|
232
245
|
const needsRefresh = computeNeedsRefresh({
|
|
233
246
|
force: opts?.force,
|
|
234
247
|
bundledManifestVersion,
|
|
248
|
+
bundledContentHash,
|
|
235
249
|
installedPath,
|
|
236
250
|
meta
|
|
237
251
|
});
|
|
@@ -251,6 +265,7 @@ async function ensureBrowserExtensionArtifacts(opts) {
|
|
|
251
265
|
const nextMeta = {
|
|
252
266
|
xopcVersion: PACKAGE_VERSION,
|
|
253
267
|
manifestVersion: bundledManifestVersion,
|
|
268
|
+
contentHash: bundledContentHash,
|
|
254
269
|
source: "bundled",
|
|
255
270
|
bundledFrom: bundled.bundledFrom,
|
|
256
271
|
installedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -351,4 +366,4 @@ async function openBrowserExtensionInstallUi(opts) {
|
|
|
351
366
|
};
|
|
352
367
|
}
|
|
353
368
|
//#endregion
|
|
354
|
-
export { BROWSER_EXT_REQUIRED_FILES, browserExtDoctor, computeNeedsRefresh, ensureBrowserExtensionArtifacts, ensureBrowserExtensionOnStartup, openBrowserExtensionInstallUi, readInstalledExtensionDir, resolveBundledBrowserExtDir, resolveInstalledExtensionPath, resolveWindowsExtensionManager, validateBrowserExtLayout };
|
|
369
|
+
export { BROWSER_EXT_REQUIRED_FILES, browserExtContentHash, browserExtDoctor, computeNeedsRefresh, ensureBrowserExtensionArtifacts, ensureBrowserExtensionOnStartup, openBrowserExtensionInstallUi, readInstalledExtensionDir, resolveBundledBrowserExtDir, resolveInstalledExtensionPath, resolveWindowsExtensionManager, validateBrowserExtLayout };
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* The xopc process starts a WebSocket server; the Chrome Extension connects as a client.
|
|
5
5
|
* Commands are sent over the WS connection and results are returned asynchronously.
|
|
6
6
|
*/
|
|
7
|
-
import type
|
|
7
|
+
import { type BrowserActionInput, type BrowserWireResult } from '@xopcai/browser-control-contract';
|
|
8
8
|
export interface ExtensionProviderConfig {
|
|
9
9
|
/** WebSocket server port. Default: 19820. */
|
|
10
10
|
port?: number;
|
|
@@ -26,7 +26,11 @@ export declare class ExtensionBrowserProvider {
|
|
|
26
26
|
private clientWs;
|
|
27
27
|
private pending;
|
|
28
28
|
private commandCounter;
|
|
29
|
+
private socketConnected;
|
|
30
|
+
private handshakeReceived;
|
|
29
31
|
private connected;
|
|
32
|
+
private extensionProtocolVersion;
|
|
33
|
+
private extensionVersion;
|
|
30
34
|
private readonly config;
|
|
31
35
|
private connectionWaiters;
|
|
32
36
|
constructor(config?: ExtensionProviderConfig);
|
|
@@ -38,7 +42,16 @@ export declare class ExtensionBrowserProvider {
|
|
|
38
42
|
send(input: BrowserActionInput, timeoutMs?: number, visualFallback?: boolean): Promise<BrowserWireResult>;
|
|
39
43
|
/** Whether the extension is currently connected. */
|
|
40
44
|
isConnected(): boolean;
|
|
45
|
+
getConnectionStatus(): {
|
|
46
|
+
socketConnected: boolean;
|
|
47
|
+
connected: boolean;
|
|
48
|
+
protocolVersion: number | null;
|
|
49
|
+
expectedProtocolVersion: number;
|
|
50
|
+
extensionVersion: string | null;
|
|
51
|
+
};
|
|
52
|
+
private protocolMismatchMessage;
|
|
41
53
|
/** Shutdown the WebSocket server. */
|
|
42
54
|
shutdown(): Promise<void>;
|
|
43
55
|
private _handleMessage;
|
|
44
56
|
}
|
|
57
|
+
export declare function isBrowserWireResult(value: unknown): value is BrowserWireResult;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
//#region src/browser/providers/extension.ts
|
|
4
|
+
/**
|
|
5
|
+
* Extension browser provider — connects to the xopc Chrome Extension via WebSocket.
|
|
6
|
+
*
|
|
7
|
+
* The xopc process starts a WebSocket server; the Chrome Extension connects as a client.
|
|
8
|
+
* Commands are sent over the WS connection and results are returned asynchronously.
|
|
9
|
+
*/
|
|
4
10
|
init_logger();
|
|
5
11
|
const log = createLogger("ExtensionProvider");
|
|
6
12
|
const DEFAULT_PORT = 19820;
|
|
@@ -18,7 +24,11 @@ var ExtensionBrowserProvider = class {
|
|
|
18
24
|
clientWs = null;
|
|
19
25
|
pending = /* @__PURE__ */ new Map();
|
|
20
26
|
commandCounter = 0;
|
|
27
|
+
socketConnected = false;
|
|
28
|
+
handshakeReceived = false;
|
|
21
29
|
connected = false;
|
|
30
|
+
extensionProtocolVersion = null;
|
|
31
|
+
extensionVersion = null;
|
|
22
32
|
config;
|
|
23
33
|
connectionWaiters = [];
|
|
24
34
|
constructor(config) {
|
|
@@ -45,7 +55,7 @@ var ExtensionBrowserProvider = class {
|
|
|
45
55
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
46
56
|
res.end(JSON.stringify({
|
|
47
57
|
ok: true,
|
|
48
|
-
|
|
58
|
+
...this.getConnectionStatus()
|
|
49
59
|
}));
|
|
50
60
|
});
|
|
51
61
|
this.wss = new WebSocketServer({
|
|
@@ -54,17 +64,32 @@ var ExtensionBrowserProvider = class {
|
|
|
54
64
|
});
|
|
55
65
|
this.wss.on("connection", (ws) => {
|
|
56
66
|
log.info("Chrome Extension connected");
|
|
67
|
+
const previousClient = this.clientWs;
|
|
57
68
|
this.clientWs = ws;
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
this.
|
|
69
|
+
this.socketConnected = true;
|
|
70
|
+
this.handshakeReceived = false;
|
|
71
|
+
this.connected = false;
|
|
72
|
+
this.extensionProtocolVersion = null;
|
|
73
|
+
this.extensionVersion = null;
|
|
74
|
+
if (previousClient && previousClient !== ws) try {
|
|
75
|
+
previousClient.close();
|
|
76
|
+
} catch {}
|
|
61
77
|
ws.on("message", (data) => {
|
|
62
|
-
this._handleMessage(data.toString());
|
|
78
|
+
this._handleMessage(data.toString(), ws);
|
|
63
79
|
});
|
|
64
|
-
ws.on("close", () => {
|
|
65
|
-
|
|
80
|
+
ws.on("close", (code, reason) => {
|
|
81
|
+
if (this.clientWs !== ws) return;
|
|
82
|
+
log.warn({
|
|
83
|
+
code,
|
|
84
|
+
reason: reason.toString(),
|
|
85
|
+
pendingCount: this.pending.size
|
|
86
|
+
}, "Chrome Extension disconnected");
|
|
66
87
|
this.clientWs = null;
|
|
88
|
+
this.socketConnected = false;
|
|
89
|
+
this.handshakeReceived = false;
|
|
67
90
|
this.connected = false;
|
|
91
|
+
this.extensionProtocolVersion = null;
|
|
92
|
+
this.extensionVersion = null;
|
|
68
93
|
for (const [id, req] of this.pending) {
|
|
69
94
|
clearTimeout(req.timer);
|
|
70
95
|
req.reject(/* @__PURE__ */ new Error("Extension disconnected"));
|
|
@@ -120,6 +145,7 @@ var ExtensionBrowserProvider = class {
|
|
|
120
145
|
/** Wait for the Chrome Extension to connect. */
|
|
121
146
|
async waitForConnection(timeoutMs) {
|
|
122
147
|
if (this.connected) return;
|
|
148
|
+
if (this.socketConnected && this.handshakeReceived && this.extensionProtocolVersion !== 3) throw new Error(this.protocolMismatchMessage());
|
|
123
149
|
const timeout = timeoutMs ?? this.config.connectionTimeout;
|
|
124
150
|
return new Promise((resolve, reject) => {
|
|
125
151
|
const timer = setTimeout(() => {
|
|
@@ -141,10 +167,14 @@ var ExtensionBrowserProvider = class {
|
|
|
141
167
|
}
|
|
142
168
|
/** Send one Browser Control v2 action to the extension. */
|
|
143
169
|
async send(input, timeoutMs, visualFallback = true) {
|
|
144
|
-
if (!this.connected || !this.clientWs)
|
|
170
|
+
if (!this.connected || !this.clientWs) {
|
|
171
|
+
const detail = this.socketConnected ? this.protocolMismatchMessage() : "Extension not connected. Ensure the Chrome Extension is installed and connected.";
|
|
172
|
+
throw new Error(detail);
|
|
173
|
+
}
|
|
145
174
|
const id = `cmd_${++this.commandCounter}_${Date.now()}`;
|
|
146
175
|
const cmd = {
|
|
147
176
|
id,
|
|
177
|
+
protocolVersion: 3,
|
|
148
178
|
input,
|
|
149
179
|
timeoutMs: timeoutMs ?? this.config.commandTimeout,
|
|
150
180
|
visualFallback
|
|
@@ -172,6 +202,18 @@ var ExtensionBrowserProvider = class {
|
|
|
172
202
|
isConnected() {
|
|
173
203
|
return this.connected;
|
|
174
204
|
}
|
|
205
|
+
getConnectionStatus() {
|
|
206
|
+
return {
|
|
207
|
+
socketConnected: this.socketConnected,
|
|
208
|
+
connected: this.connected,
|
|
209
|
+
protocolVersion: this.extensionProtocolVersion,
|
|
210
|
+
expectedProtocolVersion: 3,
|
|
211
|
+
extensionVersion: this.extensionVersion
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
protocolMismatchMessage() {
|
|
215
|
+
return `Browser extension protocol mismatch (expected 3, received ${this.extensionProtocolVersion ?? "unknown"}). Reload the extension in Chrome.`;
|
|
216
|
+
}
|
|
175
217
|
/** Shutdown the WebSocket server. */
|
|
176
218
|
async shutdown() {
|
|
177
219
|
for (const waiter of this.connectionWaiters) waiter.reject(/* @__PURE__ */ new Error("Provider shutting down"));
|
|
@@ -200,15 +242,39 @@ var ExtensionBrowserProvider = class {
|
|
|
200
242
|
this.server = null;
|
|
201
243
|
}
|
|
202
244
|
this.connected = false;
|
|
245
|
+
this.socketConnected = false;
|
|
246
|
+
this.handshakeReceived = false;
|
|
247
|
+
this.extensionProtocolVersion = null;
|
|
248
|
+
this.extensionVersion = null;
|
|
203
249
|
log.info("Extension provider shut down");
|
|
204
250
|
}
|
|
205
|
-
_handleMessage(raw) {
|
|
251
|
+
_handleMessage(raw, sourceWs) {
|
|
252
|
+
if (sourceWs !== this.clientWs) return;
|
|
206
253
|
try {
|
|
207
254
|
const msg = JSON.parse(raw);
|
|
208
255
|
if (msg.type === "status") {
|
|
209
|
-
|
|
256
|
+
const status = msg;
|
|
257
|
+
this.handshakeReceived = true;
|
|
258
|
+
this.extensionProtocolVersion = typeof status.protocolVersion === "number" ? status.protocolVersion : null;
|
|
259
|
+
this.extensionVersion = typeof status.extensionVersion === "string" ? status.extensionVersion : null;
|
|
260
|
+
this.connected = status.protocolVersion === 3;
|
|
261
|
+
if (this.connected) {
|
|
262
|
+
for (const waiter of this.connectionWaiters) waiter.resolve();
|
|
263
|
+
this.connectionWaiters = [];
|
|
264
|
+
log.debug(msg, "Compatible browser extension connected");
|
|
265
|
+
} else {
|
|
266
|
+
const error = new Error(this.protocolMismatchMessage());
|
|
267
|
+
for (const waiter of this.connectionWaiters) waiter.reject(error);
|
|
268
|
+
this.connectionWaiters = [];
|
|
269
|
+
log.warn({
|
|
270
|
+
expectedProtocolVersion: 3,
|
|
271
|
+
extensionProtocolVersion: this.extensionProtocolVersion,
|
|
272
|
+
extensionVersion: this.extensionVersion
|
|
273
|
+
}, "Browser extension protocol mismatch; reload the extension");
|
|
274
|
+
}
|
|
210
275
|
return;
|
|
211
276
|
}
|
|
277
|
+
if (isBrowserWireKeepAlive(msg)) return;
|
|
212
278
|
if (msg.type === "network_event") {
|
|
213
279
|
log.debug({
|
|
214
280
|
listenerId: msg.listenerId,
|
|
@@ -221,6 +287,10 @@ var ExtensionBrowserProvider = class {
|
|
|
221
287
|
if (pending) {
|
|
222
288
|
clearTimeout(pending.timer);
|
|
223
289
|
this.pending.delete(id);
|
|
290
|
+
if (!isBrowserWireResult(msg)) {
|
|
291
|
+
pending.reject(/* @__PURE__ */ new Error("Browser extension returned an incompatible response. Reload the extension in Chrome."));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
224
294
|
pending.resolve(msg);
|
|
225
295
|
}
|
|
226
296
|
} catch (e) {
|
|
@@ -228,5 +298,13 @@ var ExtensionBrowserProvider = class {
|
|
|
228
298
|
}
|
|
229
299
|
}
|
|
230
300
|
};
|
|
301
|
+
function isBrowserWireResult(value) {
|
|
302
|
+
if (!value || typeof value !== "object") return false;
|
|
303
|
+
const result = value.result;
|
|
304
|
+
return typeof value.id === "string" && Boolean(result) && typeof result === "object" && typeof result.ok === "boolean";
|
|
305
|
+
}
|
|
306
|
+
function isBrowserWireKeepAlive(value) {
|
|
307
|
+
return Boolean(value) && typeof value === "object" && value.type === "keepalive" && typeof value.timestamp === "number";
|
|
308
|
+
}
|
|
231
309
|
//#endregion
|
|
232
|
-
export { ExtensionBrowserProvider };
|
|
310
|
+
export { ExtensionBrowserProvider, isBrowserWireResult };
|
|
@@ -60,23 +60,19 @@ async function runPlaywrightChromiumInstallWithProgress(opts) {
|
|
|
60
60
|
};
|
|
61
61
|
let stdoutBuf = "";
|
|
62
62
|
let stderrBuf = "";
|
|
63
|
+
const drainLines = (source, buffer) => {
|
|
64
|
+
const lines = buffer.split(/\r\n|\r|\n/);
|
|
65
|
+
const remainder = lines.pop() ?? "";
|
|
66
|
+
for (const line of lines) emitLine(source, line);
|
|
67
|
+
return remainder;
|
|
68
|
+
};
|
|
63
69
|
child.stdout?.on("data", (chunk) => {
|
|
64
70
|
stdoutBuf += chunk.toString();
|
|
65
|
-
|
|
66
|
-
while ((idx = stdoutBuf.indexOf("\n")) !== -1) {
|
|
67
|
-
const line = stdoutBuf.slice(0, idx);
|
|
68
|
-
stdoutBuf = stdoutBuf.slice(idx + 1);
|
|
69
|
-
emitLine("stdout", line);
|
|
70
|
-
}
|
|
71
|
+
stdoutBuf = drainLines("stdout", stdoutBuf);
|
|
71
72
|
});
|
|
72
73
|
child.stderr?.on("data", (chunk) => {
|
|
73
74
|
stderrBuf += chunk.toString();
|
|
74
|
-
|
|
75
|
-
while ((idx = stderrBuf.indexOf("\n")) !== -1) {
|
|
76
|
-
const line = stderrBuf.slice(0, idx);
|
|
77
|
-
stderrBuf = stderrBuf.slice(idx + 1);
|
|
78
|
-
emitLine("stderr", line);
|
|
79
|
-
}
|
|
75
|
+
stderrBuf = drainLines("stderr", stderrBuf);
|
|
80
76
|
});
|
|
81
77
|
child.once("error", (err) => {
|
|
82
78
|
clearTimeout(timer);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getAgentDefaultModelRef, init_schema, parseModelRef } from "../../../../config/schema.js";
|
|
2
|
-
import { init_loader, loadConfig } from "../../../../config/loader.js";
|
|
3
2
|
import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "../../../../providers/env-keys.js";
|
|
3
|
+
import { init_loader, loadConfig } from "../../../../config/loader.js";
|
|
4
4
|
import { existsSync } from "node:fs";
|
|
5
5
|
//#region src/cli/commands/doctor/checks/provider-auth.ts
|
|
6
6
|
init_loader();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
2
|
-
import { loadConfig, saveConfig } from "../../config/loader.js";
|
|
3
2
|
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
3
|
+
import { loadConfig, saveConfig } from "../../config/loader.js";
|
|
4
4
|
import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
|
|
5
5
|
import { formatExamples, register } from "../registry.js";
|
|
6
6
|
import { getContextWithOpts } from "../context.js";
|
|
@@ -2,12 +2,12 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { loadConfig, saveConfig } from "../../config/loader.js";
|
|
4
4
|
import { resolveGatewayEffectiveHost } from "../../config/gateway-bind.js";
|
|
5
|
-
import { loadTunnelState } from "../../tunnel/tunnel-state.js";
|
|
6
|
-
import { formatExamples, register } from "../registry.js";
|
|
7
|
-
import "../../config/index.js";
|
|
8
5
|
import { ensureFrpcBinary } from "../../tunnel/frpc-binary.js";
|
|
9
6
|
import { resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret } from "../../tunnel/env.js";
|
|
7
|
+
import { loadTunnelState } from "../../tunnel/tunnel-state.js";
|
|
10
8
|
import { getTunnelService } from "../../tunnel/tunnel-service.js";
|
|
9
|
+
import { formatExamples, register } from "../registry.js";
|
|
10
|
+
import "../../config/index.js";
|
|
11
11
|
import { TUNNEL_RISK_SUMMARY_LINES, TunnelConsentError, assertTunnelMayStart, hasValidTunnelConsent } from "../../tunnel/consent.js";
|
|
12
12
|
import { resolveFrpSubdomainHost } from "../../tunnel/frp-subdomain-host.js";
|
|
13
13
|
import { applyTunnelConsentToConfig, mergeTunnelConfigPatch, setTunnelEnabledInConfig } from "../../tunnel/tunnel-config.js";
|
package/dist/src/config/index.js
CHANGED
|
@@ -2,15 +2,15 @@ import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXop
|
|
|
2
2
|
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
3
3
|
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
4
4
|
import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpOAuthConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
5
|
-
import {
|
|
5
|
+
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
6
6
|
import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
|
|
7
7
|
import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
8
8
|
import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
9
|
-
import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
10
9
|
import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMcpOAuthPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
11
|
-
import { init_loader, loadConfig, saveConfig } from "./loader.js";
|
|
12
|
-
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
13
10
|
import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
11
|
+
import { init_loader, loadConfig, saveConfig } from "./loader.js";
|
|
12
|
+
import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
|
|
13
|
+
import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
14
14
|
import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
|
|
15
15
|
import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
|
|
16
16
|
import { getWorkspacePath } from "./workspace-path-helpers.js";
|
|
@@ -2,10 +2,10 @@ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../utils/logger.js";
|
|
4
4
|
import { ConfigSchema, init_schema } from "./schema.js";
|
|
5
|
-
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
6
5
|
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
7
|
-
import {
|
|
6
|
+
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
8
7
|
import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
|
|
8
|
+
import { assertChannelPluginConfigs, init_validate_channel_configs } from "./validate-channel-configs.js";
|
|
9
9
|
import { dirname } from "path";
|
|
10
10
|
import { existsSync, mkdirSync, promises, readFileSync } from "fs";
|
|
11
11
|
import { config } from "dotenv";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { init_paths, resolveModelsJsonPath } from "./paths.js";
|
|
3
2
|
import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
|
|
3
|
+
import { init_paths, resolveModelsJsonPath } from "./paths.js";
|
|
4
4
|
import { existsSync, readFileSync } from "fs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/config/models-json.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
|
|
4
3
|
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
4
|
+
import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
|
|
5
5
|
import { dirname, join } from "path";
|
|
6
6
|
import { existsSync } from "fs";
|
|
7
7
|
import { mkdir, readFile } from "fs/promises";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
|
|
2
|
-
import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
|
|
3
2
|
import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
|
|
3
|
+
import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
|
|
4
4
|
import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
|
|
5
5
|
import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
|
|
6
6
|
import { seedAgentProfileMarkdownFiles } from "../agent/context/workspace-seed.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { getTunnelService } from "../tunnel/tunnel-service.js";
|
|
1
2
|
import { resolveReverseProxyPublicUrl } from "./public-url.js";
|
|
2
3
|
import { getTailscaleExposureState } from "./tailscale-lifecycle.js";
|
|
3
|
-
import { getTunnelService } from "../tunnel/tunnel-service.js";
|
|
4
4
|
import crypto from "node:crypto";
|
|
5
5
|
//#region src/gateway/device-routes.ts
|
|
6
6
|
function secureUrl(value) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
|
|
2
2
|
import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
|
|
3
|
-
import { extractProfileAgentId } from "../config/agent-profile.js";
|
|
4
3
|
import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
|
|
4
|
+
import { extractProfileAgentId } from "../config/agent-profile.js";
|
|
5
5
|
import { isBareProfileMarkdownFileName, resolveProfileMarkdownPathIfBareName } from "../agent/tools/tool-paths.js";
|
|
6
6
|
import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
|
|
7
7
|
import { basename, isAbsolute, resolve } from "node:path";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { shouldSilence, stripHeartbeatToken } from "../../heartbeat/tokens.js";
|
|
4
|
-
import { appendCronEventLines } from "../../heartbeat/event-prompt.js";
|
|
5
4
|
import { isWithinActiveHours } from "../../heartbeat/active-hours.js";
|
|
6
5
|
import { isHeartbeatContentEmpty } from "../../heartbeat/content-check.js";
|
|
6
|
+
import { appendCronEventLines } from "../../heartbeat/event-prompt.js";
|
|
7
7
|
import { createHeartbeatWake } from "../../heartbeat/wake.js";
|
|
8
8
|
import { resolveHeartbeatMdPath } from "../workspace-heartbeat-path.js";
|
|
9
9
|
import { readFile } from "fs/promises";
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConfigSchema, init_config } from "../../../user-context/config.js";
|
|
2
2
|
import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
|
|
3
3
|
import { resolveModelsJsonPath } from "../../../config/paths.js";
|
|
4
|
-
import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getChannelSetupStatus, init_channel_catalog_service } from "../../../channels/catalog/channel-catalog-service.js";
|
|
5
4
|
import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
|
|
6
5
|
import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
|
|
6
|
+
import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getChannelSetupStatus, init_channel_catalog_service } from "../../../channels/catalog/channel-catalog-service.js";
|
|
7
7
|
import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
|
|
8
8
|
import { getAllProviders, init_providers, isProviderConfigured } from "../../../providers/index.js";
|
|
9
9
|
import { normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
|
|
10
10
|
import { resolveShareConfig } from "../../../share/share-config.js";
|
|
11
|
+
import { maskTunnelSecretForWeb } from "../../../tunnel/env.js";
|
|
11
12
|
import { resolveSessionConfigForWeb, resolveUpdateConfigForWeb } from "../../../config/web-patch.js";
|
|
12
13
|
import { GENERIC_MASKED_SECRET, maskSecretLength } from "./mask-secret-length.js";
|
|
13
14
|
import { safeToolsWebForGet } from "../../config-tools-web.js";
|
|
14
|
-
import { maskTunnelSecretForWeb } from "../../../tunnel/env.js";
|
|
15
15
|
import { buildSafeProvidersConfigForWeb } from "./safe-providers-config.js";
|
|
16
16
|
import { maskRealtimeVoiceConfigForWeb, maskSttConfigForWeb, maskTtsConfigForWeb } from "./safe-voice-config.js";
|
|
17
17
|
//#region src/gateway/hono/lib/config-payload.ts
|