@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,9 +1,52 @@
|
|
|
1
1
|
import { decideBrowserApproval, listBrowserApprovals } from "../../../browser/policy/approval-store.js";
|
|
2
|
+
import { createBrowserDriver } from "../../../browser/drivers/create-driver.js";
|
|
3
|
+
import { checkBrowserReadiness } from "../../../browser/readiness.js";
|
|
2
4
|
import { isLoopbackClientIp } from "../../security/loopback.js";
|
|
3
5
|
import { getConnInfo } from "@hono/node-server/conninfo";
|
|
4
6
|
//#region src/gateway/hono/routes/browser.ts
|
|
5
7
|
/** Browser Control status, approvals, and driver diagnostics. */
|
|
6
8
|
const EXTENSION_ENDPOINT = "http://127.0.0.1:19820/";
|
|
9
|
+
async function extensionStatus() {
|
|
10
|
+
const { getExtensionBrowserServerSnapshot } = await import("../../../browser/providers/extension-ws-acquire.js");
|
|
11
|
+
const snapshot = getExtensionBrowserServerSnapshot();
|
|
12
|
+
let running = snapshot.active;
|
|
13
|
+
let socketConnected = false;
|
|
14
|
+
let connected = false;
|
|
15
|
+
let protocolVersion = null;
|
|
16
|
+
let expectedProtocolVersion = null;
|
|
17
|
+
let extensionVersion = null;
|
|
18
|
+
try {
|
|
19
|
+
const payload = await (await fetch(EXTENSION_ENDPOINT, { signal: AbortSignal.timeout(2e3) })).json();
|
|
20
|
+
running ||= payload.ok === true;
|
|
21
|
+
socketConnected = payload.socketConnected ?? payload.connected === true;
|
|
22
|
+
connected = payload.connected === true;
|
|
23
|
+
protocolVersion = typeof payload.protocolVersion === "number" ? payload.protocolVersion : null;
|
|
24
|
+
expectedProtocolVersion = typeof payload.expectedProtocolVersion === "number" ? payload.expectedProtocolVersion : null;
|
|
25
|
+
extensionVersion = typeof payload.extensionVersion === "string" ? payload.extensionVersion : null;
|
|
26
|
+
} catch {}
|
|
27
|
+
const { browserExtDoctor } = await import("../../../browser/providers/browser-ext-install.js");
|
|
28
|
+
const doctor = await browserExtDoctor({ runtimeExtensionVersion: extensionVersion ?? void 0 });
|
|
29
|
+
return {
|
|
30
|
+
running,
|
|
31
|
+
socketConnected,
|
|
32
|
+
connected,
|
|
33
|
+
driverKind: "extension",
|
|
34
|
+
protocolVersion,
|
|
35
|
+
expectedProtocolVersion,
|
|
36
|
+
extensionVersion,
|
|
37
|
+
artifacts: {
|
|
38
|
+
installed: doctor.installed,
|
|
39
|
+
bundledAvailable: doctor.bundledAvailable,
|
|
40
|
+
extensionDir: doctor.extensionDir,
|
|
41
|
+
xopcVersion: doctor.xopcVersion,
|
|
42
|
+
installedVersion: doctor.installedVersion,
|
|
43
|
+
needsRefresh: doctor.needsRefresh,
|
|
44
|
+
needsChromeReload: doctor.needsChromeReload || socketConnected && !connected
|
|
45
|
+
},
|
|
46
|
+
bridgeHeld: snapshot.active,
|
|
47
|
+
refCount: snapshot.refCount
|
|
48
|
+
};
|
|
49
|
+
}
|
|
7
50
|
function isLocalOwnerRequest(c, service) {
|
|
8
51
|
if (service.currentConfig.gateway?.bind === "loopback") return true;
|
|
9
52
|
try {
|
|
@@ -15,37 +58,116 @@ function isLocalOwnerRequest(c, service) {
|
|
|
15
58
|
function registerBrowserRoutes(authenticated, deps) {
|
|
16
59
|
const { service, strictRateLimitMiddleware } = deps;
|
|
17
60
|
authenticated.get("/api/browser/extension-status", async (c) => {
|
|
18
|
-
const { getExtensionBrowserServerSnapshot } = await import("../../../browser/providers/extension-ws-acquire.js");
|
|
19
|
-
const snapshot = getExtensionBrowserServerSnapshot();
|
|
20
|
-
let running = snapshot.active;
|
|
21
|
-
let connected = false;
|
|
22
61
|
try {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
62
|
+
return c.json(await extensionStatus());
|
|
63
|
+
} catch (error) {
|
|
64
|
+
return c.json({
|
|
65
|
+
running: false,
|
|
66
|
+
connected: false,
|
|
67
|
+
driverKind: "extension",
|
|
68
|
+
error: error instanceof Error ? error.message : String(error)
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
authenticated.get("/api/browser/status", async (c) => {
|
|
73
|
+
const config = service.currentConfig.browser;
|
|
74
|
+
if (!config.enabled) return c.json({
|
|
75
|
+
ok: true,
|
|
76
|
+
payload: {
|
|
77
|
+
enabled: false,
|
|
78
|
+
driverKind: config.driver.kind,
|
|
79
|
+
state: "disabled"
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const readiness = await checkBrowserReadiness(service.currentConfig);
|
|
83
|
+
const driverStatus = config.driver.kind === "extension" ? await extensionStatus().catch((error) => ({ error: error instanceof Error ? error.message : String(error) })) : config.driver.kind === "playwright" ? await import("../../../browser/providers/playwright-doctor.js").then(({ playwrightChromiumDoctor }) => playwrightChromiumDoctor()) : void 0;
|
|
84
|
+
const extensionConnected = config.driver.kind === "extension" ? driverStatus.connected === true : true;
|
|
85
|
+
const extensionProtocolDetail = config.driver.kind === "extension" && "socketConnected" in driverStatus && driverStatus.socketConnected && !driverStatus.connected ? `Chrome extension protocol ${driverStatus.protocolVersion ?? "unknown"} does not match ${driverStatus.expectedProtocolVersion ?? "the gateway"}. Reload the extension in Chrome.` : void 0;
|
|
40
86
|
return c.json({
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
87
|
+
ok: true,
|
|
88
|
+
payload: {
|
|
89
|
+
enabled: true,
|
|
90
|
+
driverKind: config.driver.kind,
|
|
91
|
+
state: !readiness && extensionConnected ? "ready" : "needs_attention",
|
|
92
|
+
reason: readiness?.hint.reason ?? (extensionConnected ? void 0 : "extension_not_connected"),
|
|
93
|
+
detail: readiness?.hint.detail ?? extensionProtocolDetail,
|
|
94
|
+
driverStatus
|
|
95
|
+
}
|
|
47
96
|
});
|
|
48
97
|
});
|
|
98
|
+
authenticated.post("/api/browser/test", strictRateLimitMiddleware, async (c) => {
|
|
99
|
+
if (!isLocalOwnerRequest(c, service)) return c.json({
|
|
100
|
+
ok: false,
|
|
101
|
+
error: "Local owner access required."
|
|
102
|
+
}, 403);
|
|
103
|
+
if (!service.currentConfig.browser.enabled) return c.json({
|
|
104
|
+
ok: false,
|
|
105
|
+
error: "Browser Control is disabled."
|
|
106
|
+
}, 400);
|
|
107
|
+
const startedAt = Date.now();
|
|
108
|
+
let driver;
|
|
109
|
+
try {
|
|
110
|
+
driver = await createBrowserDriver(service.currentConfig.browser);
|
|
111
|
+
await driver.connect();
|
|
112
|
+
return c.json({
|
|
113
|
+
ok: true,
|
|
114
|
+
payload: {
|
|
115
|
+
driverKind: service.currentConfig.browser.driver.kind,
|
|
116
|
+
durationMs: Date.now() - startedAt
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
} catch (error) {
|
|
120
|
+
return c.json({
|
|
121
|
+
ok: false,
|
|
122
|
+
error: error instanceof Error ? error.message : String(error)
|
|
123
|
+
}, 400);
|
|
124
|
+
} finally {
|
|
125
|
+
await driver?.disconnect().catch(() => {});
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
authenticated.post("/api/browser/extension/install", strictRateLimitMiddleware, async (c) => {
|
|
129
|
+
if (!isLocalOwnerRequest(c, service)) return c.json({
|
|
130
|
+
ok: false,
|
|
131
|
+
error: "Local owner access required."
|
|
132
|
+
}, 403);
|
|
133
|
+
const body = await c.req.json().catch(() => ({}));
|
|
134
|
+
try {
|
|
135
|
+
const { browserExtDoctor, ensureBrowserExtensionArtifacts } = await import("../../../browser/providers/browser-ext-install.js");
|
|
136
|
+
const result = await ensureBrowserExtensionArtifacts({ force: body.force === true });
|
|
137
|
+
return c.json({
|
|
138
|
+
ok: true,
|
|
139
|
+
payload: {
|
|
140
|
+
...result,
|
|
141
|
+
doctor: await browserExtDoctor()
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
} catch (error) {
|
|
145
|
+
return c.json({
|
|
146
|
+
ok: false,
|
|
147
|
+
error: error instanceof Error ? error.message : String(error)
|
|
148
|
+
}, 500);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
authenticated.post("/api/browser/extension/open", strictRateLimitMiddleware, async (c) => {
|
|
152
|
+
if (!isLocalOwnerRequest(c, service)) return c.json({
|
|
153
|
+
ok: false,
|
|
154
|
+
error: "Local owner access required."
|
|
155
|
+
}, 403);
|
|
156
|
+
const body = await c.req.json().catch(() => ({}));
|
|
157
|
+
const action = body.action === "chrome" || body.action === "folder" || body.action === "both" ? body.action : "both";
|
|
158
|
+
try {
|
|
159
|
+
const { openBrowserExtensionInstallUi } = await import("../../../browser/providers/browser-ext-install.js");
|
|
160
|
+
return c.json({
|
|
161
|
+
ok: true,
|
|
162
|
+
payload: await openBrowserExtensionInstallUi({ action })
|
|
163
|
+
});
|
|
164
|
+
} catch (error) {
|
|
165
|
+
return c.json({
|
|
166
|
+
ok: false,
|
|
167
|
+
error: error instanceof Error ? error.message : String(error)
|
|
168
|
+
}, 400);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
49
171
|
authenticated.get("/api/browser/approvals", (c) => {
|
|
50
172
|
if (!isLocalOwnerRequest(c, service)) return c.json({
|
|
51
173
|
ok: false,
|
|
@@ -53,7 +53,7 @@ const AUTHENTICATED_LAZY_ROUTE_BUNDLES = [
|
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
id: "browser-install",
|
|
56
|
-
match: (path) => path === "/api/browser/playwright/install/stream",
|
|
56
|
+
match: (path) => path === "/api/browser/playwright/install/stream" || path === "/api/browser/playwright/install/cancel",
|
|
57
57
|
load: async () => {
|
|
58
58
|
const { registerBrowserInstallRoutes } = await import("./browser-install.js");
|
|
59
59
|
return { register: registerBrowserInstallRoutes };
|
|
@@ -192,7 +192,7 @@ const AUTHENTICATED_LAZY_ROUTE_BUNDLES = [
|
|
|
192
192
|
},
|
|
193
193
|
{
|
|
194
194
|
id: "notes",
|
|
195
|
-
match: (path) => startsWithAny(path, ["/api/notes"]),
|
|
195
|
+
match: (path) => startsWithAny(path, ["/api/notes"]) && !/^\/api\/notes\/[^/]+\/hosted-publications(?:\/.*)?$/.test(path),
|
|
196
196
|
load: async () => {
|
|
197
197
|
const { registerNotesRoutes } = await import("./notes.js");
|
|
198
198
|
return { register: registerNotesRoutes };
|
|
@@ -224,7 +224,7 @@ const AUTHENTICATED_LAZY_ROUTE_BUNDLES = [
|
|
|
224
224
|
},
|
|
225
225
|
{
|
|
226
226
|
id: "shares",
|
|
227
|
-
match: (path) => startsWithAny(path, ["/api/shares"]) || /^\/api\/sessions\/[^/]+\/(?:share-preview|shares|hosted-shares)(?:\/.*)?$/.test(path),
|
|
227
|
+
match: (path) => startsWithAny(path, ["/api/shares", "/api/hosted-publications"]) || /^\/api\/notes\/[^/]+\/hosted-publications(?:\/.*)?$/.test(path) || /^\/api\/sessions\/[^/]+\/(?:share-preview|shares|hosted-shares)(?:\/.*)?$/.test(path),
|
|
228
228
|
load: async () => {
|
|
229
229
|
const { registerShareRoutes } = await import("./shares.js");
|
|
230
230
|
return { register: registerShareRoutes };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { resolveModelsJsonPath } from "../../../config/paths.js";
|
|
2
1
|
import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
|
|
2
|
+
import { resolveModelsJsonPath } from "../../../config/paths.js";
|
|
3
3
|
import { init_models_json, loadModelsJson, saveModelsJson, validateModelsConfig } from "../../../config/models-json.js";
|
|
4
4
|
import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
|
|
5
5
|
import { getModelRegistry } from "../../../providers/model-registry.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { buildSessionKey, init_session_key } from "../../../routing/session-key.js";
|
|
2
2
|
import { resolveProjectAgentId } from "../../../projects/project-agent.js";
|
|
3
3
|
import "../../../projects/index.js";
|
|
4
|
+
import { messagesToClientHistory } from "../../../session/client-history.js";
|
|
4
5
|
import { evictEmbeddedSessionRunner } from "../../../agent/embedded/session-runner.js";
|
|
5
6
|
import { SessionEnvironmentService } from "../../../execution-environments/session-environment-service.js";
|
|
6
|
-
import { messagesToClientHistory } from "../../../session/client-history.js";
|
|
7
7
|
import { deleteMediaUrisNoLongerReferenced } from "../../../media/session-references.js";
|
|
8
8
|
import { getGatewayPrincipal } from "../../security/gateway-principal.js";
|
|
9
9
|
import { createGatewayRouteLogger, logRouteError } from "../lib/route-logger.js";
|