@xopcai/xopc 0.0.273 → 0.0.275
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/_locales/en/messages.json +215 -0
- package/dist/browser-ext/_locales/zh_CN/messages.json +215 -0
- package/dist/browser-ext/dist/assets/{auth-DkwOUI6_.js → auth-ClQTK565.js} +291 -115
- package/dist/browser-ext/dist/assets/{sidepanel-C86O7q5Y.css → sidepanel-CeGqObOa.css} +41 -20
- package/dist/browser-ext/dist/background.js +36 -4
- package/dist/browser-ext/dist/sidepanel.html +2 -2
- package/dist/browser-ext/dist/sidepanel.js +457 -310
- package/dist/browser-ext/manifest.json +6 -4
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-cF7IX2RP.js → activity-store-SJZ5fS17.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BrgxX8nG.js → agent-avatar-dicebear-Dx6x7MXq.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-DvhuRCLA.js → agent-defaults-settings-panel-BuxTpjkf.js} +1 -1
- package/dist/gateway/static/root/assets/agents-_f9HEOol.js +1 -0
- package/dist/gateway/static/root/assets/{api-CYkdUpkx.js → api-CnJAVHBu.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DfoNzWIa.js → app-management-settings-panel-BYKWXcVl.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-czbLdCqj.js → appearance-settings-BmhSJc4X.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DYTnK9lL.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-D14P13mX.js → archive-plugin-BY6ncIeE.js} +1 -1
- package/dist/gateway/static/root/assets/attachment-load-B6cw8KtO.js +1 -0
- package/dist/gateway/static/root/assets/{attachment-preview-renderer-BDTD8YUe.js → attachment-preview-renderer-CfEDFYPE.js} +1 -1
- package/dist/gateway/static/root/assets/attachment-process-heavy-C5CqLCsX.js +5 -0
- package/dist/gateway/static/root/assets/{automations-page-DM7ZEewI.js → automations-page-D1WwsSf3.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-CjF56MI_.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CxNg6InF.js → binary-plugins-CC-wYm0K.js} +2 -2
- package/dist/gateway/static/root/assets/{block-editor-D22VcYnC.js → block-editor-D8rh9KNe.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-automation-inputs-6NWTLEpd.js → browser-automation-inputs-DGCqIPXT.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-BrqySdbW.js → browser-automations-page-CMrffyct.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-1onvP1Se.js +8 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-C9ZSJxjr.js +8 -0
- package/dist/gateway/static/root/assets/{channels-settings-yHsY174W.js → channels-settings-CvLTnI99.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-status-swr-BUZimNmp.js → channels-status-swr-BTT2sIGg.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-CZPBNpMI.js → chat-terminal-dock-F_dUdZ8l.js} +2 -2
- package/dist/gateway/static/root/assets/connectors-page-D7NHV8B2.js +2 -0
- package/dist/gateway/static/root/assets/{date-picker-Da_0QyLe.js → date-picker-MHuajwQ-.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-D_djqzy7.js → dependency-picker-BcMJJI9X.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-Celmbw-T.js → desktop-pet-DlNm_7H0.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CqNNgF45.js → desktop-pet-settings-BI1JQMnE.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-Cp5jO5B_.js +1 -0
- package/dist/gateway/static/root/assets/excel-worksheet-utils-DpdB-DjU.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-ku3kCjvH.js → extension-debug-page-DZr0GkkA.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C7FpHwL4.js → extension-page-QsHoQ6VX.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-OMj2tU2_.js → extension-settings-page-I2YX4Tzb.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-6eb1vKE1.js → gateway-config-swr-cd8owslz.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-GwfQu8rN.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DUFFCU8H.js → gateway-startup-retry-CVTa5HSS.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-CSFzOACM.js → heartbeat-settings-D-hVYXzL.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-SEW_0k8Q.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-C1cHRBRp.js → image-generation-api-DtMRG1oF.js} +1 -1
- package/dist/gateway/static/root/assets/{index-C6OWYFtQ.js → index-DfZZLrWp.js} +35 -35
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BuvD3iv8.js → keyboard-shortcuts-settings-D_I-hiG2.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CaC4-THD.js → local-app-workbench-page-BcY7wIHs.js} +2 -2
- package/dist/gateway/static/root/assets/{local-apps-page-DdJ8zwBp.js → local-apps-page-DniZuXJJ.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BBSCIl4I.js → locale-store-BkJ7g35d.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-BaR2he0K.js → logs-page-DIiOMrJ_.js} +2 -2
- package/dist/gateway/static/root/assets/management-settings-BPw41YX6.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-c5vtnYe8.js → markdown-view-B2IR4E2r.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D_a6GDY6.js → media-plugins-BoP3LSQz.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-DjuBdDCn.js → messages-BGc-OJWg.js} +2 -2
- package/dist/gateway/static/root/assets/note-detail-panel-BI2xr54R.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-CM7Ns8i1.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-C7Le9bSI.js → page-tabs-B21WfV92.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-B2pOxJBK.js → preview-open-alternatives-BZoDpPqV.js} +1 -1
- package/dist/gateway/static/root/assets/{proactive-card-BlQ1vCtV.js → proactive-card-Bw9CbzUX.js} +1 -1
- package/dist/gateway/static/root/assets/{proactive-page-CghKTfYa.js → proactive-page-Czw_CEDB.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-DpjiHgwu.js → product-open-page-DsQcgZkI.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-jOECabbf.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-Ck9j5q0x.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-CyQ4k1Ux.js → registry-api-CTq8EECj.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-2xcpaLTC.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Bl4ArLHf.js → runtime-tools-settings-panel-Bz5gIRjy.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-KQFmfWd4.js → schema-form-CqM0ntNm.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-CE9MK60k.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-D0grhQan.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-Dbnls9ty.js → settings-form-section-LqcDYJ2m.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-CDKirYRG.js → settings-page-BpvBmheO.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-CYuqNzWH.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-F3qhAryJ.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-B4wSoQM3.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-C3LD7fkR.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-Bd0_ED_p.js → skills-page-D9fI548d.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-rA-XT-YG.js → skills-page.utils-DZNmyYqU.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CSkMrHLz.js → system-settings-panel-CMsmFOhV.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-DRwTJ8E0.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-DWpIEWen.js → theme-store-mV6Cm2vj.js} +1 -1
- package/dist/gateway/static/root/assets/tunnel-api-DGaqXwql.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-DkQAIAuB.js → use-autosave-bXCl0Y0j.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-B3RjDSri.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-BrqcH0P-.js → voice-api-key-field-Cx9rl7mP.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-BJ95Z3pT.js → voice-config-api-D3DdcH4H.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-vfTWKm13.js → work-discovery-overlay-ywJpaqKp.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CHdr_ng9.js → workflow-run-setup-panel-DyGukxOL.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-CifIqO2B.js +6 -0
- package/dist/gateway/static/root/index.html +9 -9
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/device-pairing.js +41 -2
- package/dist/src/agent/child-agent-factory.d.ts +3 -0
- package/dist/src/agent/child-agent-factory.js +2 -1
- package/dist/src/agent/external-tools/endpoint-provider.js +1 -1
- package/dist/src/agent/service.js +20 -16
- package/dist/src/agent/tools/factory.d.ts +1 -0
- package/dist/src/agent/tools/factory.js +21 -4
- package/dist/src/agent/workflow/workflow-child-tools.js +2 -0
- package/dist/src/browser/native-messaging-host.d.ts +1 -1
- package/dist/src/browser/native-messaging-host.js +3 -2
- package/dist/src/browser/providers/browser-ext-install.d.ts +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +8 -3
- package/dist/src/browser/providers/realtime-extension.d.ts +4 -1
- package/dist/src/browser/providers/realtime-extension.js +26 -10
- package/dist/src/browser/readiness.d.ts +4 -1
- package/dist/src/browser/readiness.js +11 -5
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/gateway/gateway-workflow-host.types.d.ts +2 -0
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/app.js +5 -2
- package/dist/src/gateway/hono/routes/agent-stream.js +1 -1
- package/dist/src/gateway/hono/routes/browser.js +24 -11
- package/dist/src/gateway/hono/routes/device-pairing-approval.d.ts +9 -2
- package/dist/src/gateway/hono/routes/device-pairing-approval.js +50 -10
- package/dist/src/gateway/hono/routes/devices.d.ts +2 -1
- package/dist/src/gateway/hono/routes/devices.js +33 -16
- package/dist/src/gateway/hono/routes/endpoint-tools.js +9 -0
- package/dist/src/gateway/hono/routes/models.js +6 -0
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +1 -1
- package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
- package/dist/src/gateway/hono/routes/side-chats.js +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +34 -2
- package/dist/src/gateway/hono/routes/voice.js +1 -1
- package/dist/src/gateway/rate-limit/buckets.js +2 -1
- package/dist/src/gateway/service/run-gateway-agent.js +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/providers/model-catalog-persistence.js +4 -0
- package/dist/src/providers/model-catalog-types.d.ts +1 -0
- package/dist/src/providers/xopc-cloud-model-source.js +12 -1
- package/dist/src/storage/sqlite/device-pairing-approval.js +3 -1
- package/dist/src/storage/sqlite/endpoint-session-binding-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/endpoint-session-binding-repository.js +9 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -1
- package/dist/src/storage/sqlite/index.js +2 -2
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/tunnel/xopc-cloud-registration.d.ts +5 -0
- package/dist/src/tunnel/xopc-cloud-registration.js +17 -11
- package/dist/src/workflows/service/workflow-run-service.js +4 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/agents-C0By2FIo.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BSJXKWcE.js +0 -1
- package/dist/gateway/static/root/assets/attachment-load-Dok_B1Gv.js +0 -2
- package/dist/gateway/static/root/assets/attachment-process-heavy-B2_kr5EA.js +0 -11
- package/dist/gateway/static/root/assets/automations-workspace--1TsZf3O.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DOHgQer_.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Bpse_5K-.js +0 -8
- package/dist/gateway/static/root/assets/connectors-page-B_wLKGnH.js +0 -2
- package/dist/gateway/static/root/assets/device-pairing-wizard-B5_w9qlm.js +0 -1
- package/dist/gateway/static/root/assets/excel-worksheet-utils-EyvwNT4X.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CH-6vkgN.js +0 -1
- package/dist/gateway/static/root/assets/home-page-BJebAKB-.js +0 -1
- package/dist/gateway/static/root/assets/management-settings-r-iYWZFY.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-BV6nbgac.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-BmLKoWwi.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-CV8Lh296.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-COweOaJP.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-ChPPGVU5.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DgmHibOK.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DV7kMco2.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-SQmtWoOs.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-DwgLjS1m.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Cs5bUrYw.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DyKrjq7F.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-CEQU-L_G.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-COJcGnEi.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-BQAU55lf.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-hwRJD7vR.js +0 -6
|
@@ -73,12 +73,26 @@ svg { display: block; }
|
|
|
73
73
|
.brand { display: flex; align-items: center; gap: 8px; flex: 1; font-size: 15px; font-weight: 700; letter-spacing: -.01em; }
|
|
74
74
|
.brand-mark { width: 25px; height: 25px; display: grid; place-items: center; border: 1px solid var(--edge); border-radius: 8px; background: var(--surface-panel); color: var(--accent); box-shadow: 0 1px 2px rgb(17 17 17 / 5%); }
|
|
75
75
|
.brand-mark svg { width: 15px; height: 15px; stroke-width: 1.7; }
|
|
76
|
-
.status {
|
|
76
|
+
.status { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; color: var(--fg-muted); }
|
|
77
77
|
.status-dot, .mini-status { width: 7px; height: 7px; flex: 0 0 auto; border-radius: 999px; background: var(--fg-disabled); }
|
|
78
78
|
.status-dot.online, .mini-status.online { background: var(--success); box-shadow: 0 0 0 3px color-mix(in srgb, var(--success) 12%, transparent); }
|
|
79
79
|
.status-dot.error { background: var(--danger); }
|
|
80
|
-
.
|
|
81
|
-
.
|
|
80
|
+
.header-actions { position: relative; flex: 0 0 auto; }
|
|
81
|
+
.header-icon-button { width: 32px; height: 32px; display: grid; place-items: center; border: 1px solid transparent; border-radius: 9px; background: transparent; color: var(--fg-muted); }
|
|
82
|
+
.header-icon-button:hover, .header-icon-button[aria-expanded='true'] { border-color: var(--edge); background: var(--surface-hover); color: var(--fg); }
|
|
83
|
+
.header-icon-button svg { width: 17px; height: 17px; }
|
|
84
|
+
.settings-menu { position: absolute; z-index: 30; top: calc(100% + 8px); right: 0; width: min(260px, calc(100vw - 28px)); overflow: hidden; border: 1px solid var(--edge-strong); border-radius: 13px; padding: 7px; background: var(--surface-panel); box-shadow: var(--shadow-popover); }
|
|
85
|
+
.settings-menu-title { padding: 7px 8px 9px; font-size: 12px; font-weight: 680; }
|
|
86
|
+
.settings-group { border-top: 1px solid var(--edge); padding: 8px 0; }
|
|
87
|
+
.settings-label { display: flex; align-items: center; gap: 7px; padding: 2px 8px 7px; color: var(--fg-subtle); font-size: 10px; font-weight: 650; }
|
|
88
|
+
.settings-label svg { width: 14px; height: 14px; }
|
|
89
|
+
.settings-options { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
|
|
90
|
+
.settings-options button { min-width: 0; height: 34px; display: flex; align-items: center; justify-content: center; gap: 5px; border: 1px solid var(--edge); border-radius: 8px; background: var(--surface-base); color: var(--fg-muted); font-size: 11px; }
|
|
91
|
+
.settings-options button:hover { border-color: var(--edge-strong); background: var(--surface-hover); color: var(--fg); }
|
|
92
|
+
.settings-options button.active { border-color: color-mix(in srgb, var(--accent) 35%, var(--edge)); background: var(--accent-soft); color: var(--accent-fg); font-weight: 650; }
|
|
93
|
+
.settings-options button svg { width: 13px; height: 13px; }
|
|
94
|
+
.settings-disconnect { width: 100%; border: 0; border-top: 1px solid var(--edge); padding: 10px 8px 6px; background: transparent; color: var(--danger); font-size: 11px; text-align: left; }
|
|
95
|
+
.settings-disconnect:hover { color: color-mix(in srgb, var(--danger) 82%, var(--fg)); }
|
|
82
96
|
|
|
83
97
|
.center { flex: 1; display: grid; place-items: center; padding: 24px; overflow: auto; }
|
|
84
98
|
.card { width: min(100%, 420px); border: 1px solid var(--edge); border-radius: 16px; padding: 22px; background: var(--surface-panel); box-shadow: var(--shadow-surface); }
|
|
@@ -211,13 +225,14 @@ svg { display: block; }
|
|
|
211
225
|
@keyframes pulse { 50% { opacity: .35; transform: scale(.8); } }
|
|
212
226
|
@keyframes skeleton { to { background-position: -200% 0; } }
|
|
213
227
|
|
|
214
|
-
.composer { position: relative; flex: 0 0 auto; margin: 0
|
|
215
|
-
.composer:focus-within { border-color:
|
|
216
|
-
.composer.dragging { border-color: var(--accent); box-shadow: 0 0 0
|
|
217
|
-
.file-drop-overlay { position: absolute; z-index: 20; inset: 0; display: flex; align-items: center; justify-content: center; gap: 7px; border-radius:
|
|
228
|
+
.composer { position: relative; flex: 0 0 auto; margin: 0 12px 12px; overflow: visible; border: 1px solid var(--edge); border-radius: 18px; background: var(--surface-panel); padding: 10px 10px 8px; box-shadow: var(--shadow-surface); transition: border-color 120ms ease, box-shadow 120ms ease; }
|
|
229
|
+
.composer:focus-within { border-color: var(--edge-strong); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 7%, transparent), var(--shadow-surface); }
|
|
230
|
+
.composer.dragging { border-color: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 12%, transparent), var(--shadow-surface); }
|
|
231
|
+
.file-drop-overlay { position: absolute; z-index: 20; inset: 0; display: flex; align-items: center; justify-content: center; gap: 7px; border-radius: 17px; background: color-mix(in srgb, var(--accent-soft) 94%, var(--surface-panel)); color: var(--accent-fg); font-size: 12px; font-weight: 650; pointer-events: none; }
|
|
218
232
|
.file-drop-overlay svg { width: 17px; height: 17px; }
|
|
219
|
-
.composer-input-row { min-height:
|
|
220
|
-
.composer textarea { min-width: 0; min-height:
|
|
233
|
+
.composer-input-row { min-height: 58px; display: block; }
|
|
234
|
+
.composer textarea { width: 100%; min-width: 0; min-height: 54px; max-height: 144px; display: block; resize: none; overflow-y: auto; border: 0; padding: 5px 8px 8px; outline: none; background: transparent; color: var(--fg); font-size: 14px; line-height: 1.55; }
|
|
235
|
+
.composer textarea::placeholder { color: var(--fg-disabled); }
|
|
221
236
|
.composer-icon-button { width: 34px; height: 34px; border-color: transparent; color: var(--fg-muted); }
|
|
222
237
|
.tools-anchor { position: relative; flex: 0 0 auto; }
|
|
223
238
|
.tools-menu { position: absolute; z-index: 12; left: -1px; bottom: calc(100% + 9px); width: min(310px, calc(100vw - 38px)); overflow: hidden; border: 1px solid var(--edge-strong); border-radius: 13px; background: var(--surface-panel); padding: 6px; box-shadow: var(--shadow-popover); }
|
|
@@ -232,20 +247,23 @@ svg { display: block; }
|
|
|
232
247
|
.tools-menu button.active-access { background: var(--success-soft); }
|
|
233
248
|
.tools-menu button.active-access > svg { color: var(--success); }
|
|
234
249
|
.tools-menu button.active-access > svg:last-child { width: 13px; height: 13px; color: var(--fg-subtle); }
|
|
235
|
-
.send-button { width: 34px; height: 34px; flex: 0 0 auto; display: grid; place-items: center; border: 0; border-radius:
|
|
250
|
+
.send-button { width: 34px; height: 34px; flex: 0 0 auto; display: grid; place-items: center; border: 0; border-radius: 9px; background: transparent; color: var(--accent-fg); transition: background-color 120ms ease, color 120ms ease, transform 120ms ease; }
|
|
236
251
|
.send-button svg { width: 17px; height: 17px; }
|
|
237
|
-
.send-button:hover:not(:disabled) { background: var(--accent-
|
|
238
|
-
.send-button:disabled { background:
|
|
239
|
-
.stop-button { background: var(--
|
|
240
|
-
.stop-button:hover:not(:disabled) { background: var(--
|
|
241
|
-
.composer-footer { min-height:
|
|
252
|
+
.send-button:hover:not(:disabled) { background: var(--accent-soft); transform: translateY(-1px); }
|
|
253
|
+
.send-button:disabled { background: transparent; color: var(--fg-disabled); }
|
|
254
|
+
.stop-button { background: var(--surface-hover); color: var(--fg-muted); }
|
|
255
|
+
.stop-button:hover:not(:disabled) { background: var(--surface-active); color: var(--fg); }
|
|
256
|
+
.composer-footer { min-height: 36px; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 3px 0 0; }
|
|
257
|
+
.composer-toolbar-start, .composer-toolbar-end { min-width: 0; display: flex; align-items: center; gap: 6px; }
|
|
258
|
+
.composer-toolbar-end { margin-left: auto; }
|
|
242
259
|
.composer-state { min-width: 0; display: flex; align-items: center; gap: 5px; color: var(--fg-subtle); font-size: 9px; }
|
|
260
|
+
.composer-state-label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
|
243
261
|
.access-pill { display: inline-flex; align-items: center; gap: 3px; border-radius: 999px; padding: 2px 5px; background: var(--success-soft); color: color-mix(in srgb, var(--success) 72%, var(--fg)); font-weight: 600; }
|
|
244
262
|
.access-pill svg { width: 10px; height: 10px; }
|
|
245
|
-
.model-controls { min-width: 0;
|
|
246
|
-
.model-controls select { min-width: 0; max-width:
|
|
247
|
-
.model-controls select:hover { background: var(--surface-
|
|
248
|
-
.model-controls select:last-child { max-width:
|
|
263
|
+
.model-controls { min-width: 0; height: 32px; display: flex; align-items: center; gap: 0; border-radius: 9px; padding: 0 2px; background: var(--surface-hover); }
|
|
264
|
+
.model-controls select { min-width: 0; max-width: 118px; height: 28px; border: 0; border-radius: 7px; padding: 4px 5px; outline: none; background: transparent; color: var(--fg-muted); font-size: 10px; font-weight: 560; text-overflow: ellipsis; }
|
|
265
|
+
.model-controls select:hover, .model-controls select:focus { background: var(--surface-active); color: var(--fg); }
|
|
266
|
+
.model-controls select:last-child { max-width: 72px; color: var(--fg-subtle); }
|
|
249
267
|
|
|
250
268
|
.composer-contexts { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 6px; }
|
|
251
269
|
.context-chip, .attachment-chip { min-width: 0; max-width: 100%; display: flex; align-items: center; gap: 5px; border: 1px solid color-mix(in srgb, var(--accent) 24%, var(--edge)); border-radius: 8px; padding: 5px 6px; color: var(--accent-fg); background: var(--accent-soft); font-size: 10px; }
|
|
@@ -290,7 +308,10 @@ svg { display: block; }
|
|
|
290
308
|
.status { margin-right: 68px; }
|
|
291
309
|
.messages { padding-inline: 12px; }
|
|
292
310
|
.message.user { width: 92%; }
|
|
293
|
-
.
|
|
311
|
+
.composer { margin-inline: 8px; }
|
|
312
|
+
.composer-state-label { display: none; }
|
|
313
|
+
.model-controls select { max-width: 82px; }
|
|
314
|
+
.model-controls select:last-child { max-width: 58px; }
|
|
294
315
|
.quick-prompts { gap: 6px; }
|
|
295
316
|
}
|
|
296
317
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as endpointToolContentSchema, E as ENDPOINT_PROTOCOL_VERSION, b as canonicalJson, T as TAB_BINDING_PREFIX, d as captureTabWithPermission, P as PENDING_CONTEXT_KEY, w as t, o as readProfile, q as registerBrowserEndpoint, l as getAccessProfile, R as RealtimeClient, e as createBrowserEndpointHello, k as gatewayFetch } from './assets/auth-ClQTK565.js';
|
|
2
2
|
|
|
3
3
|
const BROWSER_EXTENSION_PROTOCOL_VERSION = 4;
|
|
4
4
|
const BROWSER_CONTROL_ENDPOINT_TOOL_NAME = "browser.control";
|
|
@@ -1143,11 +1143,20 @@ function diff(previous, next) {
|
|
|
1143
1143
|
|
|
1144
1144
|
const log = createLogger("Background");
|
|
1145
1145
|
const BACKGROUND_CLIENT_ID_KEY = "xopc.browser.background-client-id";
|
|
1146
|
+
const RECONNECT_ALARM = "xopc.browser.reconnect";
|
|
1147
|
+
const RECONNECT_DELAY_MINUTES = 1;
|
|
1146
1148
|
let realtime;
|
|
1147
1149
|
let endpointClaim;
|
|
1148
1150
|
let lastConnectionError;
|
|
1149
1151
|
let connectTask;
|
|
1150
1152
|
let connectionGeneration = 0;
|
|
1153
|
+
function clearReconnectAlarm() {
|
|
1154
|
+
void chrome.alarms.clear(RECONNECT_ALARM);
|
|
1155
|
+
}
|
|
1156
|
+
function scheduleReconnectAlarm() {
|
|
1157
|
+
if (endpointClaim) return;
|
|
1158
|
+
chrome.alarms.create(RECONNECT_ALARM, { delayInMinutes: RECONNECT_DELAY_MINUTES });
|
|
1159
|
+
}
|
|
1151
1160
|
const browserToolRegistry = new EndpointToolRegistry([{
|
|
1152
1161
|
descriptor: BROWSER_CONTROL_ENDPOINT_DESCRIPTOR,
|
|
1153
1162
|
execute: async (args) => {
|
|
@@ -1210,7 +1219,11 @@ async function connect(generation) {
|
|
|
1210
1219
|
createWebSocket: (url) => new WebSocket(url),
|
|
1211
1220
|
onStateChange: (state, error) => {
|
|
1212
1221
|
lastConnectionError = error;
|
|
1213
|
-
if (state === "connected")
|
|
1222
|
+
if (state === "connected") {
|
|
1223
|
+
lastConnectionError = void 0;
|
|
1224
|
+
} else {
|
|
1225
|
+
scheduleReconnectAlarm();
|
|
1226
|
+
}
|
|
1214
1227
|
if (error) log.warn("Browser Realtime connection changed", { state, error });
|
|
1215
1228
|
}
|
|
1216
1229
|
});
|
|
@@ -1219,6 +1232,7 @@ async function connect(generation) {
|
|
|
1219
1232
|
onReady: ({ endpointId, turnToken }) => {
|
|
1220
1233
|
endpointClaim = { endpointId, token: turnToken };
|
|
1221
1234
|
lastConnectionError = void 0;
|
|
1235
|
+
clearReconnectAlarm();
|
|
1222
1236
|
endpointHost.connect((message) => client.sendEndpointMessage(message));
|
|
1223
1237
|
void chrome.runtime.sendMessage({ type: "browser/endpoint-ready", claim: endpointClaim }).catch(() => void 0);
|
|
1224
1238
|
log.info("Browser control connected through Gateway Realtime", { endpointId });
|
|
@@ -1229,6 +1243,7 @@ async function connect(generation) {
|
|
|
1229
1243
|
onDisconnected: () => {
|
|
1230
1244
|
endpointClaim = void 0;
|
|
1231
1245
|
endpointHost.disconnect();
|
|
1246
|
+
scheduleReconnectAlarm();
|
|
1232
1247
|
}
|
|
1233
1248
|
});
|
|
1234
1249
|
if (generation !== connectionGeneration || realtime) return;
|
|
@@ -1247,6 +1262,7 @@ function connectWithLogging() {
|
|
|
1247
1262
|
const generation = connectionGeneration;
|
|
1248
1263
|
connectTask = connect(generation).catch((error) => {
|
|
1249
1264
|
lastConnectionError = error instanceof Error ? error.message : String(error);
|
|
1265
|
+
scheduleReconnectAlarm();
|
|
1250
1266
|
log.warn("Could not connect browser Realtime transport", { error: lastConnectionError });
|
|
1251
1267
|
}).finally(() => {
|
|
1252
1268
|
connectTask = void 0;
|
|
@@ -1284,17 +1300,33 @@ chrome.runtime.onInstalled.addListener(() => {
|
|
|
1284
1300
|
chrome.contextMenus.removeAll(() => {
|
|
1285
1301
|
chrome.contextMenus.create({
|
|
1286
1302
|
id: "xopc-ask-selection",
|
|
1287
|
-
title: "
|
|
1303
|
+
title: t("contextMenuAskSelection"),
|
|
1288
1304
|
contexts: ["selection"]
|
|
1289
1305
|
});
|
|
1290
1306
|
});
|
|
1291
1307
|
connectWithLogging();
|
|
1292
1308
|
});
|
|
1293
1309
|
chrome.runtime.onStartup.addListener(connectWithLogging);
|
|
1310
|
+
chrome.alarms.onAlarm.addListener((alarm) => {
|
|
1311
|
+
if (alarm.name !== RECONNECT_ALARM) return;
|
|
1312
|
+
void readProfile().then((profile) => {
|
|
1313
|
+
if (!profile) {
|
|
1314
|
+
clearReconnectAlarm();
|
|
1315
|
+
return;
|
|
1316
|
+
}
|
|
1317
|
+
if (endpointClaim) {
|
|
1318
|
+
clearReconnectAlarm();
|
|
1319
|
+
return;
|
|
1320
|
+
}
|
|
1321
|
+
disconnect();
|
|
1322
|
+
connectWithLogging();
|
|
1323
|
+
});
|
|
1324
|
+
});
|
|
1294
1325
|
chrome.storage.onChanged.addListener((changes, area) => {
|
|
1295
1326
|
if (area === "local" && changes["xopc.browser.profile"]) {
|
|
1296
1327
|
disconnect();
|
|
1297
|
-
connectWithLogging();
|
|
1328
|
+
if (changes["xopc.browser.profile"].newValue) connectWithLogging();
|
|
1329
|
+
else clearReconnectAlarm();
|
|
1298
1330
|
}
|
|
1299
1331
|
});
|
|
1300
1332
|
void chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true });
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>xopc</title>
|
|
7
7
|
<script type="module" crossorigin src="./sidepanel.js"></script>
|
|
8
|
-
<link rel="modulepreload" crossorigin href="./assets/auth-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="./assets/sidepanel-
|
|
8
|
+
<link rel="modulepreload" crossorigin href="./assets/auth-ClQTK565.js">
|
|
9
|
+
<link rel="stylesheet" crossorigin href="./assets/sidepanel-CeGqObOa.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|