@xopcai/xopc 0.0.264 → 0.0.266

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.
Files changed (209) hide show
  1. package/dist/browser-ext/dist/assets/auth-CknJ00ae.js +5844 -0
  2. package/dist/browser-ext/dist/assets/sidepanel-C69P3v9u.css +113 -0
  3. package/dist/browser-ext/dist/background.js +200 -68
  4. package/dist/browser-ext/dist/sidepanel.html +14 -0
  5. package/dist/browser-ext/dist/sidepanel.js +18832 -0
  6. package/dist/browser-ext/manifest.json +20 -20
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/gateway/static/root/assets/{activity-store-BYBCpt7_.js → activity-store-Bhyy6ENz.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-D20aBHPJ.js → agent-avatar-dicebear-Qrp5ALCF.js} +1 -1
  10. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-BZvMqNrU.js → agent-defaults-settings-panel-DwinST48.js} +1 -1
  11. package/dist/gateway/static/root/assets/{agents-6foBELwt.js → agents-Dlr0YyNt.js} +1 -1
  12. package/dist/gateway/static/root/assets/{api-YbtjDbuG.js → api-B2y7ZjZk.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-4ps1RrDU.js → app-management-settings-panel-bLNvz93c.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-C7nBHnkG.js → appearance-settings-D5qgIepF.js} +1 -1
  15. package/dist/gateway/static/root/assets/{apps-page-B_g-rL5b.js → apps-page-BQVlXhIb.js} +1 -1
  16. package/dist/gateway/static/root/assets/{archive-plugin-DfKK1iJO.js → archive-plugin-BEA7VAA4.js} +1 -1
  17. package/dist/gateway/static/root/assets/{attachment-load-BOU1pdnQ.js → attachment-load-B1RyF3uu.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-BePzexAH.js → automations-page-BfH0FdKa.js} +1 -1
  19. package/dist/gateway/static/root/assets/{automations-workspace-7-m5pBEZ.js → automations-workspace-C37AlD3E.js} +1 -1
  20. package/dist/gateway/static/root/assets/{binary-plugins-Cly8XDyt.js → binary-plugins-EU884ZXi.js} +1 -1
  21. package/dist/gateway/static/root/assets/{block-editor-DzSu62js.js → block-editor-Bjr3naHb.js} +1 -1
  22. package/dist/gateway/static/root/assets/{browser-automation-inputs-8bHj7Fv2.js → browser-automation-inputs-s5I78Iko.js} +1 -1
  23. package/dist/gateway/static/root/assets/{browser-automations-page-CzL7Aj2k.js → browser-automations-page-CDrYrNGy.js} +1 -1
  24. package/dist/gateway/static/root/assets/{browser-settings-page-Dum3mTiz.js → browser-settings-page-DOmUkj2k.js} +1 -1
  25. package/dist/gateway/static/root/assets/{capabilities-settings-panel-Ci6qVS-O.js → capabilities-settings-panel-slt1o04n.js} +2 -2
  26. package/dist/gateway/static/root/assets/{channels-settings-BOGEZnSv.js → channels-settings-oHTTX6Jy.js} +1 -1
  27. package/dist/gateway/static/root/assets/{channels-status-swr-BR8oQ_eP.js → channels-status-swr-_OsWr_vS.js} +1 -1
  28. package/dist/gateway/static/root/assets/{chat-terminal-dock-BF9ZXa5Z.js → chat-terminal-dock-DEYQdv6n.js} +1 -1
  29. package/dist/gateway/static/root/assets/{connectors-page-DBvEvupa.js → connectors-page-olrbxHIT.js} +1 -1
  30. package/dist/gateway/static/root/assets/{cron-expression-BszT_gjK.js → cron-expression-DFrbDWpP.js} +1 -1
  31. package/dist/gateway/static/root/assets/{date-picker-D2MKBJ0G.js → date-picker-CYriYKpH.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-DqigBx-G.js → dependency-picker-XY3qUErs.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-CapspBGG.js → desktop-pet-Dsc__ynA.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-settings-DMPk4CaK.js → desktop-pet-settings-EpuX3C08.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-debug-page-CXLsDtrW.js → extension-debug-page-B_NeLV4K.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-B2j87ROw.js → extension-page-D3JC6mLB.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-t1BApw-u.js → extension-settings-page-CXTQt1lp.js} +1 -1
  38. package/dist/gateway/static/root/assets/{files-BArWTfr7.js → files-Be5viEFY.js} +1 -1
  39. package/dist/gateway/static/root/assets/{gateway-config-swr-BFSesvAC.js → gateway-config-swr-OObCK8jM.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-settings-BFAecoGy.js → gateway-settings-yeYm_UPE.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-startup-retry-D1giYgI-.js → gateway-startup-retry-D_TxKN_A.js} +1 -1
  42. package/dist/gateway/static/root/assets/{heartbeat-settings-CyD9zDcU.js → heartbeat-settings-coh1LFsg.js} +1 -1
  43. package/dist/gateway/static/root/assets/{home-page-uItZMiBE.js → home-page-CAgoBZqp.js} +1 -1
  44. package/dist/gateway/static/root/assets/{image-generation-api-BeB-OPqO.js → image-generation-api-fPU9yGsw.js} +1 -1
  45. package/dist/gateway/static/root/assets/index-Cn__9Un2.js +74 -0
  46. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Q_CM-ZCs.js → keyboard-shortcuts-settings-Cu1bI3Bg.js} +1 -1
  47. package/dist/gateway/static/root/assets/{local-app-workbench-page-DaiBWfOt.js → local-app-workbench-page-C9s2lFaI.js} +1 -1
  48. package/dist/gateway/static/root/assets/{local-apps-page-BALMNCSp.js → local-apps-page-CJ03Umjr.js} +1 -1
  49. package/dist/gateway/static/root/assets/{locale-store-RJHYFoq9.js → locale-store-DFQX9kTl.js} +1 -1
  50. package/dist/gateway/static/root/assets/{logs-page-C-TS7oFg.js → logs-page-CY_DQKJ2.js} +1 -1
  51. package/dist/gateway/static/root/assets/{management-settings-BajkJeYl.js → management-settings-YPEemeMo.js} +1 -1
  52. package/dist/gateway/static/root/assets/{markdown-view-BxoQJqHx.js → markdown-view-D-5jHRWg.js} +1 -1
  53. package/dist/gateway/static/root/assets/{media-plugins-C_8Hl6KG.js → media-plugins-BjT6jlrA.js} +1 -1
  54. package/dist/gateway/static/root/assets/{messages-Cf1h5WXB.js → messages-Dj8QuS6e.js} +2 -2
  55. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-CsWIZrZW.js → mobile-pairing-wizard-A8eLtV6v.js} +1 -1
  56. package/dist/gateway/static/root/assets/{note-detail-panel-CCbPg_GP.js → note-detail-panel-DHT2QksJ.js} +3 -3
  57. package/dist/gateway/static/root/assets/{notes-page-BdxxcUKa.js → notes-page-BRFQiivM.js} +1 -1
  58. package/dist/gateway/static/root/assets/{page-tabs-BMYQef5D.js → page-tabs-DNUwulnl.js} +1 -1
  59. package/dist/gateway/static/root/assets/{preview-open-alternatives-CKZ-H5hJ.js → preview-open-alternatives-B33KsKkJ.js} +1 -1
  60. package/dist/gateway/static/root/assets/{product-delivery-CV4pDOtG.js → product-delivery-CCC4FJ3Y.js} +1 -1
  61. package/dist/gateway/static/root/assets/{product-open-page-zXJIptXs.js → product-open-page-CIGLPFm7.js} +1 -1
  62. package/dist/gateway/static/root/assets/{project-detail-page-DRhhxhZB.js → project-detail-page-CItEFVt9.js} +1 -1
  63. package/dist/gateway/static/root/assets/{projects-page-Wt7gF3Sx.js → projects-page-Bmy-c_lL.js} +1 -1
  64. package/dist/gateway/static/root/assets/{registry-api-BSfFaxVN.js → registry-api-CsZLatKo.js} +1 -1
  65. package/dist/gateway/static/root/assets/{remote-access-hub-B6de5Zrb.js → remote-access-hub-H6B1cA2V.js} +1 -1
  66. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DcUB5h1f.js → runtime-tools-settings-panel-BsCovC39.js} +1 -1
  67. package/dist/gateway/static/root/assets/{schema-form-CquWhe7r.js → schema-form-NsPb_Vam.js} +1 -1
  68. package/dist/gateway/static/root/assets/{schemas-BHS7bo06.js → schemas-BaskVM5g.js} +2 -2
  69. package/dist/gateway/static/root/assets/{sessions-page-BNWO2EVF.js → sessions-page-CyYLSXk_.js} +1 -1
  70. package/dist/gateway/static/root/assets/settings-advanced-gate-3T4rPk4A.js +1 -0
  71. package/dist/gateway/static/root/assets/{settings-form-section-DwswAefc.js → settings-form-section-BzPIPe1-.js} +1 -1
  72. package/dist/gateway/static/root/assets/{settings-page-CoAVmjjs.js → settings-page-4idpMhsw.js} +1 -1
  73. package/dist/gateway/static/root/assets/{setup-status-panel-C9EIcWtH.js → setup-status-panel-D2ds_TTD.js} +1 -1
  74. package/dist/gateway/static/root/assets/{share-preview-page-DWwy_4zh.js → share-preview-page-Djo3VTaC.js} +1 -1
  75. package/dist/gateway/static/root/assets/{shares-settings-CIUvq27-.js → shares-settings-fhRzNfRp.js} +1 -1
  76. package/dist/gateway/static/root/assets/skill-reload-api-Ct8tUju_.js +1 -0
  77. package/dist/gateway/static/root/assets/{skills-page-CqsgVtVh.js → skills-page-riM7FytZ.js} +1 -1
  78. package/dist/gateway/static/root/assets/{skills-page.utils-B-N73248.js → skills-page.utils-B3G8LBb-.js} +1 -1
  79. package/dist/gateway/static/root/assets/{system-settings-panel-BndjXuBZ.js → system-settings-panel-CW91jjnB.js} +1 -1
  80. package/dist/gateway/static/root/assets/{task-detail-page-CG6Ha9t7.js → task-detail-page-BBXKvl0k.js} +1 -1
  81. package/dist/gateway/static/root/assets/{theme-store-C5ssn64t.js → theme-store-zRT6vaZc.js} +1 -1
  82. package/dist/gateway/static/root/assets/{tunnel-api-BxZdcp3h.js → tunnel-api-DILER0Yb.js} +1 -1
  83. package/dist/gateway/static/root/assets/{use-autosave-mj9CUuz1.js → use-autosave-GxnP8vLO.js} +1 -1
  84. package/dist/gateway/static/root/assets/{user-model-page-DKeHMXI4.js → user-model-page-I1H4XRfA.js} +1 -1
  85. package/dist/gateway/static/root/assets/{voice-api-key-field-CzxVMYlr.js → voice-api-key-field-CI3sXyl4.js} +1 -1
  86. package/dist/gateway/static/root/assets/{voice-config-api-COA0V1cK.js → voice-config-api-DpJEu2RQ.js} +1 -1
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-DMiPK8dp.js → work-discovery-overlay-DZC9Exn3.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C82OXCJK.js → workflow-run-setup-panel-CaBaQER2.js} +1 -1
  89. package/dist/gateway/static/root/assets/{workflows-page-HLCUV3rQ.js → workflows-page-C-_Dxihw.js} +1 -1
  90. package/dist/gateway/static/root/index.html +12 -12
  91. package/dist/package.js +1 -1
  92. package/dist/packages/browser-control-contract/src/index.js +14 -0
  93. package/dist/packages/endpoint-tools-protocol/src/index.js +2 -1
  94. package/dist/packages/gateway-contract/src/browser-page-context.js +43 -0
  95. package/dist/packages/gateway-contract/src/browser-tab-binding.js +29 -0
  96. package/dist/packages/gateway-contract/src/device-pairing.js +18 -2
  97. package/dist/packages/realtime-protocol/src/index.js +1 -0
  98. package/dist/packages/realtime-protocol/src/voice-audio.js +70 -9
  99. package/dist/packages/realtime-protocol/src/voice.js +65 -17
  100. package/dist/src/agent/agent-manager.js +4 -4
  101. package/dist/src/agent/background-review/run-background-review.js +1 -1
  102. package/dist/src/agent/embedded/model-runtime.js +1 -1
  103. package/dist/src/agent/embedded/run-for-session.js +1 -1
  104. package/dist/src/agent/image/tool-model-config.js +1 -1
  105. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  106. package/dist/src/agent/service.js +2 -2
  107. package/dist/src/agent/session/session-inspector.js +1 -1
  108. package/dist/src/agent/skills/hub-lock.js +1 -1
  109. package/dist/src/agent/source-context/browser-page.d.ts +3 -0
  110. package/dist/src/agent/source-context/browser-page.js +39 -0
  111. package/dist/src/agent/source-context/injector.js +9 -2
  112. package/dist/src/agent/source-context/types.d.ts +7 -1
  113. package/dist/src/agent/source-context/types.js +4 -1
  114. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  115. package/dist/src/agent/tools/factory.js +9 -1
  116. package/dist/src/ai-assist/text-assist.js +1 -1
  117. package/dist/src/auth/credentials.js +2 -2
  118. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  119. package/dist/src/auth/profiles/store.js +1 -1
  120. package/dist/src/auth/sync-provider-auth.js +2 -2
  121. package/dist/src/browser/automations/schema.d.ts +1 -1
  122. package/dist/src/browser/automations/service.d.ts +1 -1
  123. package/dist/src/browser/native-messaging-host.d.ts +15 -0
  124. package/dist/src/browser/native-messaging-host.js +105 -0
  125. package/dist/src/browser/providers/browser-ext-install.d.ts +17 -1
  126. package/dist/src/browser/providers/browser-ext-install.js +82 -16
  127. package/dist/src/browser/providers/extension.d.ts +4 -0
  128. package/dist/src/browser/providers/extension.js +104 -38
  129. package/dist/src/browser/runtime/browser-runtime.d.ts +2 -1
  130. package/dist/src/browser/runtime/browser-runtime.js +6 -2
  131. package/dist/src/cli/commands/browser.js +13 -3
  132. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  133. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  134. package/dist/src/cli/commands/models.js +1 -1
  135. package/dist/src/config/index.js +4 -4
  136. package/dist/src/config/loader.js +2 -2
  137. package/dist/src/config/models-json.js +1 -1
  138. package/dist/src/endpoint-tools/runtime.js +2 -0
  139. package/dist/src/extensions/lockfile.js +1 -1
  140. package/dist/src/gateway/agents-admin.js +1 -1
  141. package/dist/src/gateway/chat-stream/mapper.js +3 -2
  142. package/dist/src/gateway/file-path-classifier.js +1 -1
  143. package/dist/src/gateway/hono/app.js +19 -3
  144. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  145. package/dist/src/gateway/hono/middleware/auth.d.ts +4 -1
  146. package/dist/src/gateway/hono/middleware/auth.js +12 -1
  147. package/dist/src/gateway/hono/routes/browser-install.js +1 -1
  148. package/dist/src/gateway/hono/routes/browser.js +106 -7
  149. package/dist/src/gateway/hono/routes/devices.js +36 -3
  150. package/dist/src/gateway/hono/routes/endpoint-tools.js +15 -0
  151. package/dist/src/gateway/hono/routes/models.js +1 -1
  152. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +20 -2
  153. package/dist/src/gateway/hono/routes/session-input-handler.js +18 -0
  154. package/dist/src/gateway/hono/routes/sessions.js +12 -6
  155. package/dist/src/gateway/hono/routes/voice.js +5 -4
  156. package/dist/src/gateway/security/gateway-scopes.d.ts +1 -0
  157. package/dist/src/gateway/security/gateway-scopes.js +10 -1
  158. package/dist/src/gateway/security/origin-check.d.ts +1 -0
  159. package/dist/src/gateway/security/origin-check.js +5 -1
  160. package/dist/src/gateway/service/agent-runner.js +2 -1
  161. package/dist/src/gateway/service/config-coordinator.js +1 -1
  162. package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -0
  163. package/dist/src/gateway/service/session-input-coordinator.js +5 -4
  164. package/dist/src/gateway/service.js +22 -21
  165. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  166. package/dist/src/providers/index.js +2 -2
  167. package/dist/src/providers/model-registry.js +1 -1
  168. package/dist/src/providers/register-runtime-providers.js +1 -1
  169. package/dist/src/realtime/runtime.js +2 -1
  170. package/dist/src/session/client-history.d.ts +4 -1
  171. package/dist/src/session/client-history.js +6 -3
  172. package/dist/src/storage/sqlite/browser-tab-binding-repository.d.ts +7 -0
  173. package/dist/src/storage/sqlite/browser-tab-binding-repository.js +60 -0
  174. package/dist/src/storage/sqlite/device-access-repository.d.ts +3 -1
  175. package/dist/src/storage/sqlite/device-access-repository.js +4 -3
  176. package/dist/src/storage/sqlite/device-pairing-approval.js +6 -4
  177. package/dist/src/storage/sqlite/device-pairing-repository.d.ts +1 -1
  178. package/dist/src/storage/sqlite/index.d.ts +1 -0
  179. package/dist/src/storage/sqlite/index.js +2 -1
  180. package/dist/src/storage/sqlite/migrations/155_browser_extension.sql +120 -0
  181. package/dist/src/storage/sqlite/migrations/156_browser_tab_bindings.sql +14 -0
  182. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  183. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  184. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  185. package/dist/src/storage/sqlite/schema.js +1 -1
  186. package/dist/src/tui/tui-startup-resources.js +1 -1
  187. package/dist/src/tui/tui.js +1 -1
  188. package/dist/src/voice/realtime/agentBroker.d.ts +54 -0
  189. package/dist/src/voice/realtime/agentBroker.js +116 -0
  190. package/dist/src/voice/realtime/agentEngine.js +62 -15
  191. package/dist/src/voice/realtime/engine.d.ts +2 -1
  192. package/dist/src/voice/realtime/omniEngine.js +36 -7
  193. package/dist/src/voice/realtime/pcmFrameBuffer.d.ts +6 -0
  194. package/dist/src/voice/realtime/pcmFrameBuffer.js +29 -0
  195. package/dist/src/voice/realtime/runtime.js +97 -21
  196. package/dist/src/voice/realtime/runtime.types.d.ts +5 -21
  197. package/dist/src/voice/realtime/turnPolicy.d.ts +36 -0
  198. package/dist/src/voice/realtime/turnPolicy.js +134 -0
  199. package/dist/src/work-discovery/service.js +1 -1
  200. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  201. package/package.json +2 -2
  202. package/dist/browser-ext/dist/content.js +0 -191
  203. package/dist/browser-ext/dist/popup.js +0 -32
  204. package/dist/browser-ext/popup.html +0 -37
  205. package/dist/gateway/static/root/assets/index-DQtjs2x3.js +0 -74
  206. package/dist/gateway/static/root/assets/settings-advanced-gate-DK1yTYE4.js +0 -1
  207. package/dist/gateway/static/root/assets/skill-reload-api-DfE3zFVw.js +0 -1
  208. package/dist/src/voice/realtime/conversationTurn.d.ts +0 -20
  209. package/dist/src/voice/realtime/conversationTurn.js +0 -83
@@ -1,191 +0,0 @@
1
- const OVERLAY_HOST_ID = "xopc-overlay-host";
2
- let overlayHost = null;
3
- let overlayInner = null;
4
- let completedTimer = null;
5
- function ensureOverlay() {
6
- if (overlayHost?.isConnected && overlayInner) return;
7
- removeOverlay();
8
- const existing = document.getElementById(OVERLAY_HOST_ID);
9
- if (existing) existing.remove();
10
- overlayHost = document.createElement("div");
11
- overlayHost.id = OVERLAY_HOST_ID;
12
- const shadow = overlayHost.attachShadow({ mode: "open" });
13
- const style = document.createElement("style");
14
- style.textContent = `
15
- :host { all: initial; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 2147483647; pointer-events: none; }
16
- .overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; }
17
- .overlay.operating { border: 2px solid rgba(59, 130, 246, 0.6); animation: pulse 2s ease-in-out infinite; }
18
- .overlay.completed { border: 2px solid rgba(34, 197, 94, 0.6); }
19
- .badge { position: fixed; top: 8px; right: 8px; padding: 4px 12px; border-radius: 12px; font: 500 12px -apple-system, sans-serif; color: white; opacity: 0; transform: translateY(-8px); animation: badge-in 0.3s ease forwards; }
20
- .badge.operating { background: rgba(59, 130, 246, 0.85); backdrop-filter: blur(8px); }
21
- .badge.completed { background: rgba(34, 197, 94, 0.85); backdrop-filter: blur(8px); }
22
- .dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: white; margin-right: 6px; vertical-align: middle; }
23
- .badge.operating .dot { animation: dot-pulse 1.2s ease-in-out infinite; }
24
- @keyframes pulse { 0%, 100% { border-color: rgba(59, 130, 246, 0.3); } 50% { border-color: rgba(59, 130, 246, 0.8); } }
25
- @keyframes badge-in { to { opacity: 1; transform: translateY(0); } }
26
- @keyframes dot-pulse { 0%, 100% { opacity: 0.4; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1.2); } }
27
- `;
28
- shadow.appendChild(style);
29
- overlayInner = document.createElement("div");
30
- overlayInner.className = "overlay";
31
- shadow.appendChild(overlayInner);
32
- document.documentElement.appendChild(overlayHost);
33
- }
34
- function removeOverlay() {
35
- if (completedTimer) {
36
- clearTimeout(completedTimer);
37
- completedTimer = null;
38
- }
39
- overlayInner = null;
40
- if (overlayHost) {
41
- overlayHost.remove();
42
- overlayHost = null;
43
- }
44
- document.documentElement.style.cursor = "";
45
- }
46
- function showOverlay(status) {
47
- if (completedTimer) {
48
- clearTimeout(completedTimer);
49
- completedTimer = null;
50
- }
51
- if (status === "hidden") {
52
- removeOverlay();
53
- return;
54
- }
55
- ensureOverlay();
56
- if (!overlayInner) return;
57
- overlayInner.innerHTML = "";
58
- overlayInner.className = `overlay ${status}`;
59
- const badge = document.createElement("div");
60
- badge.className = `badge ${status}`;
61
- const dot = document.createElement("span");
62
- dot.className = "dot";
63
- badge.appendChild(dot);
64
- badge.appendChild(document.createTextNode(status === "operating" ? "🤖 xopc" : "✅ Done"));
65
- overlayInner.appendChild(badge);
66
- document.documentElement.style.cursor = status === "operating" ? "not-allowed" : "";
67
- if (status === "completed") {
68
- completedTimer = setTimeout(removeOverlay, 2e3);
69
- }
70
- }
71
- function showClickRipple(x, y) {
72
- if (!document.getElementById("xopc-ripple-style")) {
73
- const s = document.createElement("style");
74
- s.id = "xopc-ripple-style";
75
- s.textContent = `@keyframes xopc-ripple { 0% { transform: scale(0.3); opacity: 1; } 100% { transform: scale(2.5); opacity: 0; } }`;
76
- document.head.appendChild(s);
77
- }
78
- const el = document.createElement("div");
79
- Object.assign(el.style, {
80
- position: "fixed",
81
- left: `${x - 15}px`,
82
- top: `${y - 15}px`,
83
- width: "30px",
84
- height: "30px",
85
- borderRadius: "50%",
86
- background: "rgba(59, 130, 246, 0.4)",
87
- border: "2px solid rgba(59, 130, 246, 0.7)",
88
- pointerEvents: "none",
89
- zIndex: "2147483646",
90
- animation: "xopc-ripple 0.6s ease-out forwards"
91
- });
92
- document.body.appendChild(el);
93
- setTimeout(() => el.remove(), 600);
94
- }
95
- function showHoverHighlight(selector) {
96
- const element = document.querySelector(selector);
97
- if (!element) return;
98
- const rect = element.getBoundingClientRect();
99
- const el = document.createElement("div");
100
- Object.assign(el.style, {
101
- position: "fixed",
102
- left: `${rect.left - 2}px`,
103
- top: `${rect.top - 2}px`,
104
- width: `${rect.width + 4}px`,
105
- height: `${rect.height + 4}px`,
106
- border: "2px solid rgba(59, 130, 246, 0.6)",
107
- borderRadius: "4px",
108
- background: "rgba(59, 130, 246, 0.08)",
109
- pointerEvents: "none",
110
- zIndex: "2147483645",
111
- transition: "opacity 0.3s ease",
112
- opacity: "1"
113
- });
114
- document.body.appendChild(el);
115
- setTimeout(() => {
116
- el.style.opacity = "0";
117
- setTimeout(() => el.remove(), 300);
118
- }, 800);
119
- }
120
- function showInputFlash(selector) {
121
- const el = document.querySelector(selector);
122
- if (!el) return;
123
- const orig = el.style.backgroundColor;
124
- el.style.transition = "background-color 0.15s ease";
125
- el.style.backgroundColor = "rgba(34, 197, 94, 0.15)";
126
- setTimeout(() => {
127
- el.style.backgroundColor = orig;
128
- }, 300);
129
- }
130
- function showScrollIndicator(direction) {
131
- const el = document.createElement("div");
132
- Object.assign(el.style, {
133
- position: "fixed",
134
- right: "20px",
135
- [direction === "down" ? "bottom" : "top"]: "20px",
136
- width: "36px",
137
- height: "36px",
138
- borderRadius: "50%",
139
- background: "rgba(59, 130, 246, 0.85)",
140
- color: "white",
141
- display: "flex",
142
- alignItems: "center",
143
- justifyContent: "center",
144
- fontSize: "18px",
145
- fontWeight: "bold",
146
- pointerEvents: "none",
147
- zIndex: "2147483646",
148
- opacity: "0",
149
- transform: `translateY(${direction === "down" ? "10px" : "-10px"})`,
150
- transition: "opacity 0.2s ease, transform 0.2s ease"
151
- });
152
- el.textContent = direction === "down" ? "↓" : "↑";
153
- document.body.appendChild(el);
154
- requestAnimationFrame(() => {
155
- el.style.opacity = "1";
156
- el.style.transform = "translateY(0)";
157
- });
158
- setTimeout(() => {
159
- el.style.opacity = "0";
160
- setTimeout(() => el.remove(), 200);
161
- }, 600);
162
- }
163
- chrome.runtime.onMessage.addListener(
164
- (message, _sender, sendResponse) => {
165
- switch (message.type) {
166
- case "content/show-overlay":
167
- showOverlay(message.status);
168
- break;
169
- case "content/hide-overlay":
170
- removeOverlay();
171
- break;
172
- case "content/show-click-ripple":
173
- showClickRipple(message.x, message.y);
174
- break;
175
- case "content/show-hover-highlight":
176
- showHoverHighlight(message.selector);
177
- break;
178
- case "content/show-input-flash":
179
- showInputFlash(message.selector);
180
- break;
181
- case "content/show-scroll-indicator":
182
- showScrollIndicator(message.direction);
183
- break;
184
- default:
185
- sendResponse({ ok: false });
186
- return true;
187
- }
188
- sendResponse({ ok: true });
189
- return true;
190
- }
191
- );
@@ -1,32 +0,0 @@
1
- function updateUI(status) {
2
- const dot = document.getElementById("status-dot");
3
- const label = document.getElementById("status-label");
4
- const urlEl = document.getElementById("server-url");
5
- const connectBtn = document.getElementById("btn-connect");
6
- const disconnectBtn = document.getElementById("btn-disconnect");
7
- if (status.connected) {
8
- dot.className = "dot connected";
9
- label.textContent = "Connected";
10
- connectBtn.classList.add("hidden");
11
- disconnectBtn.classList.remove("hidden");
12
- } else {
13
- dot.className = "dot disconnected";
14
- label.textContent = "Disconnected";
15
- connectBtn.classList.remove("hidden");
16
- disconnectBtn.classList.add("hidden");
17
- }
18
- urlEl.textContent = status.url ?? "ws://127.0.0.1:19820/browser-ext";
19
- }
20
- async function getStatus() {
21
- const response = await chrome.runtime.sendMessage({ type: "popup/get-status" });
22
- updateUI(response);
23
- }
24
- document.getElementById("btn-connect")?.addEventListener("click", async () => {
25
- await chrome.runtime.sendMessage({ type: "popup/connect" });
26
- setTimeout(getStatus, 500);
27
- });
28
- document.getElementById("btn-disconnect")?.addEventListener("click", async () => {
29
- await chrome.runtime.sendMessage({ type: "popup/disconnect" });
30
- setTimeout(getStatus, 200);
31
- });
32
- getStatus();
@@ -1,37 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <style>
6
- * { margin: 0; padding: 0; box-sizing: border-box; }
7
- body { width: 280px; padding: 16px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 13px; color: #1e293b; background: #fff; }
8
- h1 { font-size: 14px; font-weight: 600; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
9
- h1 .logo { width: 20px; height: 20px; flex-shrink: 0; }
10
- .status-row { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; padding: 8px 10px; background: #f8fafc; border-radius: 6px; border: 1px solid #e2e8f0; }
11
- .dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
12
- .dot.connected { background: #22c55e; box-shadow: 0 0 4px rgba(34, 197, 94, 0.4); }
13
- .dot.disconnected { background: #ef4444; }
14
- .server-url { font-size: 11px; color: #64748b; margin-top: 4px; word-break: break-all; }
15
- .actions { display: flex; gap: 8px; margin-top: 12px; }
16
- button { flex: 1; padding: 6px 12px; border-radius: 6px; border: 1px solid #e2e8f0; background: #f8fafc; font-size: 12px; cursor: pointer; transition: all 0.15s; }
17
- button:hover { background: #e2e8f0; }
18
- button.primary { background: #3b82f6; color: white; border-color: #3b82f6; }
19
- button.primary:hover { background: #2563eb; }
20
- button.danger { color: #ef4444; }
21
- .hidden { display: none; }
22
- </style>
23
- </head>
24
- <body>
25
- <h1><img class="logo" src="icons/icon-32.png" width="20" height="20" alt="" /> xopc Browser Bridge</h1>
26
- <div class="status-row">
27
- <span id="status-dot" class="dot disconnected"></span>
28
- <span id="status-label">Checking...</span>
29
- </div>
30
- <div class="server-url" id="server-url">ws://127.0.0.1:19820/browser-ext</div>
31
- <div class="actions">
32
- <button id="btn-connect" class="primary hidden">Connect</button>
33
- <button id="btn-disconnect" class="danger hidden">Disconnect</button>
34
- </div>
35
- <script type="module" src="dist/popup.js"></script>
36
- </body>
37
- </html>