@xopcai/xopc 0.0.265 → 0.0.267

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 (148) hide show
  1. package/dist/browser-ext/dist/assets/{auth-CknJ00ae.js → auth-D_IL6naL.js} +603 -203
  2. package/dist/browser-ext/dist/assets/sidepanel-CEPaVLjr.css +155 -0
  3. package/dist/browser-ext/dist/background.js +698 -169
  4. package/dist/browser-ext/dist/sidepanel.html +3 -3
  5. package/dist/browser-ext/dist/sidepanel.js +148 -391
  6. package/dist/browser-ext/manifest.json +3 -6
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DRTTU2H3.js → agent-avatar-dicebear-ZrSAMchm.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-BsXF7LVi.js → agent-defaults-settings-panel-DiNFN8qS.js} +1 -1
  10. package/dist/gateway/static/root/assets/{agents-DpjWfxYx.js → agents-Bu6Hf59K.js} +1 -1
  11. package/dist/gateway/static/root/assets/{app-management-settings-panel-33Mc81h2.js → app-management-settings-panel-D-L6yjS7.js} +1 -1
  12. package/dist/gateway/static/root/assets/{appearance-settings-C8JECSiJ.js → appearance-settings-BW5eb53j.js} +1 -1
  13. package/dist/gateway/static/root/assets/{apps-page-t64FcxIZ.js → apps-page-CiQIdz3N.js} +1 -1
  14. package/dist/gateway/static/root/assets/{archive-plugin-PzZ6SzfY.js → archive-plugin-DwXvu1p9.js} +1 -1
  15. package/dist/gateway/static/root/assets/{attachment-load-OhLL6K__.js → attachment-load-DqU2BYBp.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automations-page-BpAYwuvx.js → automations-page-C7qoj9Sd.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automations-workspace-B6aTT5IC.js → automations-workspace-CIARTLHO.js} +1 -1
  18. package/dist/gateway/static/root/assets/{binary-plugins-B5XpGsHg.js → binary-plugins-CfplDak2.js} +1 -1
  19. package/dist/gateway/static/root/assets/{block-editor-BgEhoTnN.js → block-editor-CzLs38ru.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-automations-page-CBLunDRH.js → browser-automations-page-_SKi8s9b.js} +1 -1
  21. package/dist/gateway/static/root/assets/browser-settings-page-DTdx66sX.js +8 -0
  22. package/dist/gateway/static/root/assets/{capabilities-settings-panel-DftNnICK.js → capabilities-settings-panel-Ck9U0Olx.js} +1 -1
  23. package/dist/gateway/static/root/assets/{channels-settings-CpuWa5qu.js → channels-settings-I_vDpbnl.js} +1 -1
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-mnPsS_GJ.js → chat-terminal-dock-snvAu3hJ.js} +1 -1
  25. package/dist/gateway/static/root/assets/{connectors-page-D3nHGnNV.js → connectors-page-BmKTnzo1.js} +1 -1
  26. package/dist/gateway/static/root/assets/{cron-expression-NcGBvIfe.js → cron-expression-BhGZSbT6.js} +1 -1
  27. package/dist/gateway/static/root/assets/{date-picker-BrVcl7H5.js → date-picker-Cep5f9b-.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dependency-picker--edd48Y9.js → dependency-picker-BzSEBQku.js} +1 -1
  29. package/dist/gateway/static/root/assets/{desktop-pet-vuyyb6I6.js → desktop-pet-BwX_6Gah.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-DWredJwO.js → desktop-pet-settings-WrbVsU2b.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-debug-page-CtBW4ebj.js → extension-debug-page-BdXSwtAZ.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-CsUrmtW7.js → extension-page-I95ukbRb.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-BUd31AuK.js → extension-settings-page-8zUisBay.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-settings-C6FQv7op.js → gateway-settings-DGj5b9Yv.js} +1 -1
  35. package/dist/gateway/static/root/assets/{heartbeat-settings-CDo1Gjp2.js → heartbeat-settings-BGQxU-Ug.js} +1 -1
  36. package/dist/gateway/static/root/assets/{home-page-D3_uvVJY.js → home-page-BZPpK0A3.js} +1 -1
  37. package/dist/gateway/static/root/assets/{index-Dpu7EKTm.js → index-D2OtD9Wa.js} +8 -8
  38. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CNVmrCrV.js → keyboard-shortcuts-settings-BUe_om99.js} +1 -1
  39. package/dist/gateway/static/root/assets/{local-app-workbench-page-B0IVDvs-.js → local-app-workbench-page-CbQnffS9.js} +1 -1
  40. package/dist/gateway/static/root/assets/{local-apps-page-DvkarvLt.js → local-apps-page-BZaLzfms.js} +1 -1
  41. package/dist/gateway/static/root/assets/{logs-page-BknY0vZf.js → logs-page-WWCHqW_x.js} +1 -1
  42. package/dist/gateway/static/root/assets/{management-settings-DW6hJINQ.js → management-settings-Duf8w-Bl.js} +1 -1
  43. package/dist/gateway/static/root/assets/{media-plugins-DYautOWY.js → media-plugins-2-QfzHmg.js} +1 -1
  44. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-Dgu03cv-.js → mobile-pairing-wizard-DRaVIAt1.js} +1 -1
  45. package/dist/gateway/static/root/assets/{note-detail-panel-Cv9uH6Jq.js → note-detail-panel-BT-fWGxX.js} +3 -3
  46. package/dist/gateway/static/root/assets/{notes-page-DcIAiYJn.js → notes-page-C4705PzN.js} +1 -1
  47. package/dist/gateway/static/root/assets/{page-tabs-DF6Q5XvA.js → page-tabs-DaZ7QpNO.js} +1 -1
  48. package/dist/gateway/static/root/assets/{preview-open-alternatives-CQJH_jAN.js → preview-open-alternatives-CWEuqCmv.js} +1 -1
  49. package/dist/gateway/static/root/assets/{project-detail-page-D65JfNSw.js → project-detail-page-BZegJ6an.js} +1 -1
  50. package/dist/gateway/static/root/assets/{projects-page-BfWF7Sz-.js → projects-page-B7hUHeLI.js} +1 -1
  51. package/dist/gateway/static/root/assets/{remote-access-hub-DA1g4CUD.js → remote-access-hub-BE9hZpdh.js} +1 -1
  52. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-0-bFSBB8.js → runtime-tools-settings-panel-CslkSM-m.js} +1 -1
  53. package/dist/gateway/static/root/assets/{schema-form-csGbhTUr.js → schema-form-B2gvVrBq.js} +1 -1
  54. package/dist/gateway/static/root/assets/{sessions-page-DXPBNhrZ.js → sessions-page-DmAAPMo1.js} +1 -1
  55. package/dist/gateway/static/root/assets/settings-advanced-gate-CvBocGDA.js +1 -0
  56. package/dist/gateway/static/root/assets/{settings-form-section-YdrdY8B3.js → settings-form-section-CmlnuSO3.js} +1 -1
  57. package/dist/gateway/static/root/assets/{settings-page-Cv9waRn3.js → settings-page-DWWgyelT.js} +1 -1
  58. package/dist/gateway/static/root/assets/{setup-status-panel-DPf-_05Z.js → setup-status-panel-CJrN3m1o.js} +1 -1
  59. package/dist/gateway/static/root/assets/{share-preview-page-DBoEHTPn.js → share-preview-page-C12oyIKk.js} +1 -1
  60. package/dist/gateway/static/root/assets/{shares-settings-BQP5yNcO.js → shares-settings-D4BtSiLq.js} +1 -1
  61. package/dist/gateway/static/root/assets/{skill-reload-api-B5T8cgjq.js → skill-reload-api-CzKGn056.js} +1 -1
  62. package/dist/gateway/static/root/assets/{skills-page-D1G8h2Lt.js → skills-page-yhW7LLqk.js} +1 -1
  63. package/dist/gateway/static/root/assets/{skills-page.utils-BNZYTop7.js → skills-page.utils-FaTlq8t-.js} +1 -1
  64. package/dist/gateway/static/root/assets/{system-settings-panel-ByuppbHi.js → system-settings-panel-CMrkoJLN.js} +1 -1
  65. package/dist/gateway/static/root/assets/{task-detail-page-DNmkrF6y.js → task-detail-page-BUaO62cy.js} +1 -1
  66. package/dist/gateway/static/root/assets/{tunnel-api-CxWGpbwr.js → tunnel-api-C2tAZaJz.js} +1 -1
  67. package/dist/gateway/static/root/assets/{use-autosave-B0l4qubU.js → use-autosave-BsDRt4QI.js} +1 -1
  68. package/dist/gateway/static/root/assets/{user-model-page-DMsI6YI7.js → user-model-page-Dy8h1SSJ.js} +1 -1
  69. package/dist/gateway/static/root/assets/{voice-api-key-field-Bcz7boJg.js → voice-api-key-field-CS5heYMP.js} +1 -1
  70. package/dist/gateway/static/root/assets/{work-discovery-overlay-Dujq1j_u.js → work-discovery-overlay-BeSz5Th5.js} +1 -1
  71. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CxNYbLNB.js → workflow-run-setup-panel-BebW0CDK.js} +1 -1
  72. package/dist/gateway/static/root/assets/{workflows-page-Dk1jK2nv.js → workflows-page-CU8jFgPF.js} +1 -1
  73. package/dist/gateway/static/root/index.html +1 -1
  74. package/dist/package.js +1 -1
  75. package/dist/packages/browser-control-contract/src/index.js +30 -1
  76. package/dist/src/agent/agent-manager.js +4 -4
  77. package/dist/src/agent/background-review/run-background-review.js +1 -1
  78. package/dist/src/agent/embedded/model-runtime.js +1 -1
  79. package/dist/src/agent/embedded/run-for-session.js +1 -1
  80. package/dist/src/agent/external-tools/endpoint-provider.js +3 -1
  81. package/dist/src/agent/image/tool-model-config.js +1 -1
  82. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  83. package/dist/src/agent/service.js +2 -2
  84. package/dist/src/agent/session/session-inspector.js +1 -1
  85. package/dist/src/agent/skills/hub-lock.js +1 -1
  86. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  87. package/dist/src/agent/tools/factory.js +1 -1
  88. package/dist/src/ai-assist/text-assist.js +1 -1
  89. package/dist/src/auth/credentials.js +2 -2
  90. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  91. package/dist/src/auth/profiles/store.js +1 -1
  92. package/dist/src/auth/sync-provider-auth.js +2 -2
  93. package/dist/src/browser/automations/runtime-service.d.ts +2 -0
  94. package/dist/src/browser/automations/runtime-service.js +1 -1
  95. package/dist/src/browser/drivers/create-driver.d.ts +2 -1
  96. package/dist/src/browser/drivers/create-driver.js +4 -6
  97. package/dist/src/browser/drivers/extension-driver.d.ts +7 -2
  98. package/dist/src/browser/enrollment.d.ts +8 -0
  99. package/dist/src/browser/enrollment.js +25 -0
  100. package/dist/src/browser/extension-identity.d.ts +2 -0
  101. package/dist/src/browser/extension-identity.js +5 -0
  102. package/dist/src/browser/native-messaging-host.d.ts +6 -3
  103. package/dist/src/browser/native-messaging-host.js +23 -5
  104. package/dist/src/browser/providers/browser-ext-install.d.ts +4 -1
  105. package/dist/src/browser/providers/browser-ext-install.js +47 -8
  106. package/dist/src/browser/providers/extension.js +1 -1
  107. package/dist/src/browser/providers/realtime-extension.d.ts +29 -0
  108. package/dist/src/browser/providers/realtime-extension.js +83 -0
  109. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  110. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  111. package/dist/src/cli/commands/models.js +1 -1
  112. package/dist/src/config/index.js +4 -4
  113. package/dist/src/config/loader.js +2 -2
  114. package/dist/src/config/models-json.js +1 -1
  115. package/dist/src/endpoint-tools/policy.js +10 -3
  116. package/dist/src/extensions/lockfile.js +1 -1
  117. package/dist/src/gateway/agents-admin.js +1 -1
  118. package/dist/src/gateway/file-path-classifier.js +1 -1
  119. package/dist/src/gateway/hono/app.js +6 -1
  120. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  121. package/dist/src/gateway/hono/routes/browser.js +20 -30
  122. package/dist/src/gateway/hono/routes/models.js +1 -1
  123. package/dist/src/gateway/security/origin-check.js +5 -0
  124. package/dist/src/gateway/service/config-coordinator.d.ts +0 -2
  125. package/dist/src/gateway/service/config-coordinator.js +1 -3
  126. package/dist/src/gateway/service.d.ts +0 -11
  127. package/dist/src/gateway/service.js +5 -83
  128. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  129. package/dist/src/providers/index.js +2 -2
  130. package/dist/src/providers/model-registry.js +1 -1
  131. package/dist/src/providers/register-runtime-providers.js +1 -1
  132. package/dist/src/storage/sqlite/device-pairing-approval.js +24 -3
  133. package/dist/src/storage/sqlite/device-pairing-repository.d.ts +10 -1
  134. package/dist/src/storage/sqlite/device-pairing-repository.js +6 -5
  135. package/dist/src/storage/sqlite/migrations/157_browser_endpoint_principals.sql +50 -0
  136. package/dist/src/storage/sqlite/migrations/158_browser_native_enrollment.sql +4 -0
  137. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  138. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  139. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  140. package/dist/src/storage/sqlite/schema.js +1 -1
  141. package/dist/src/tui/tui-startup-resources.js +1 -1
  142. package/dist/src/tui/tui.js +1 -1
  143. package/dist/src/work-discovery/service.js +1 -1
  144. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  145. package/package.json +3 -3
  146. package/dist/browser-ext/dist/assets/sidepanel-C69P3v9u.css +0 -113
  147. package/dist/gateway/static/root/assets/browser-settings-page-CSfpPCuD.js +0 -8
  148. package/dist/gateway/static/root/assets/settings-advanced-gate-DxeZm67O.js +0 -1
@@ -0,0 +1,155 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI", Roboto, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif;
4
+
5
+ /* Keep the extension aligned with the Gateway's default Calm Intelligence theme. */
6
+ --surface-base: #f7f8fa;
7
+ --surface-panel: #ffffff;
8
+ --surface-hover: #e8ecf1;
9
+ --surface-active: #dfe5ec;
10
+ --fg: #111111;
11
+ --fg-muted: #666666;
12
+ --fg-subtle: #999999;
13
+ --fg-disabled: #b8b8b8;
14
+ --edge-subtle: #f2f2f2;
15
+ --edge: #ececec;
16
+ --edge-strong: #d8dce8;
17
+ --accent: #3a6bff;
18
+ --accent-hover: #315ce6;
19
+ --accent-soft: #eef3ff;
20
+ --accent-fg: #2f5ef6;
21
+ --success: #2ccb7f;
22
+ --success-soft: #e7fbf1;
23
+ --danger: #ff5d5d;
24
+ --danger-soft: #fff0f0;
25
+ --warning: #ffb84d;
26
+ --warning-soft: #fff7e8;
27
+ --shadow-surface: 0 1px 2px rgb(17 17 17 / 4%), 0 6px 18px rgb(17 17 17 / 4%);
28
+ --shadow-popover: 0 10px 32px rgb(17 17 17 / 10%), 0 2px 10px rgb(17 17 17 / 6%);
29
+
30
+ background: var(--surface-base);
31
+ color: var(--fg);
32
+ }
33
+
34
+ :root[data-theme='dark'] {
35
+ --surface-base: #14171c;
36
+ --surface-panel: #1b1f26;
37
+ --surface-hover: #242933;
38
+ --surface-active: #2e3440;
39
+ --fg: #f4f6f8;
40
+ --fg-muted: #b8bec8;
41
+ --fg-subtle: #87909d;
42
+ --fg-disabled: #626b78;
43
+ --edge-subtle: #252932;
44
+ --edge: #323844;
45
+ --edge-strong: #465061;
46
+ --accent: #3a6bff;
47
+ --accent-hover: #6f91ff;
48
+ --accent-soft: rgb(58 107 255 / 0.2);
49
+ --accent-fg: #adc0ff;
50
+ --success: #2ccb7f;
51
+ --success-soft: rgb(44 203 127 / 0.16);
52
+ --danger: #ff5d5d;
53
+ --danger-soft: rgb(255 93 93 / 0.16);
54
+ --warning: #ffb84d;
55
+ --warning-soft: rgb(255 184 77 / 0.16);
56
+ --shadow-surface: 0 0 0 1px rgb(255 255 255 / 4.5%);
57
+ --shadow-popover: 0 18px 54px rgb(0 0 0 / 38%), 0 0 0 1px rgb(255 255 255 / 5%);
58
+ }
59
+
60
+ * { box-sizing: border-box; }
61
+ html, body, #root { height: 100%; margin: 0; }
62
+ html { background: var(--surface-base); color: var(--fg); -webkit-font-smoothing: antialiased; }
63
+ body { overflow: hidden; }
64
+ button, input, textarea, select { font: inherit; }
65
+ button { cursor: pointer; color: inherit; }
66
+ button:disabled { cursor: default; }
67
+ button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
68
+ input::placeholder, textarea::placeholder { color: var(--fg-disabled); }
69
+
70
+ .shell { min-height: 100%; display: flex; flex-direction: column; background: var(--surface-base); }
71
+ .header { height: 56px; padding: 0 16px; display: flex; align-items: center; gap: 10px; border-bottom: 1px solid var(--edge); background: var(--surface-panel); }
72
+ .brand { font-size: 17px; font-weight: 650; flex: 1; }
73
+ .status { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--fg-muted); }
74
+ .status-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--fg-subtle); }
75
+ .status-dot.online { background: var(--success); }
76
+ .status-dot.error { background: var(--danger); }
77
+ .center { flex: 1; display: grid; place-items: center; padding: 24px; }
78
+ .card { width: min(100%, 420px); border: 1px solid var(--edge); border-radius: 14px; padding: 20px; background: var(--surface-panel); box-shadow: var(--shadow-surface); }
79
+ .card h1 { margin: 0 0 8px; font-size: 20px; }
80
+ .muted { color: var(--fg-muted); line-height: 1.5; font-size: 13px; }
81
+ .field { display: grid; gap: 6px; margin-top: 14px; font-size: 13px; }
82
+ .field input, .field textarea { width: 100%; border: 1px solid var(--edge-strong); border-radius: 8px; padding: 10px 12px; background: var(--surface-panel); color: var(--fg); }
83
+ .primary { border: 0; border-radius: 8px; background: var(--accent); color: #fff; padding: 10px 14px; font-weight: 600; transition: background-color 150ms ease; }
84
+ .primary:hover:not(:disabled) { background: var(--accent-hover); }
85
+ .primary:disabled { background: var(--surface-active); color: var(--fg-disabled); }
86
+ .secondary { border: 1px solid var(--edge-strong); border-radius: 8px; background: var(--surface-panel); padding: 8px 12px; }
87
+ .secondary:hover { background: var(--surface-hover); }
88
+ .actions { display: flex; gap: 8px; margin-top: 16px; }
89
+ .local-connect { width: 100%; margin-top: 12px; }
90
+ .pairing-divider { display: flex; align-items: center; gap: 8px; margin-top: 16px; color: var(--fg-subtle); font-size: 11px; }
91
+ .pairing-divider::before, .pairing-divider::after { content: ""; height: 1px; flex: 1; background: var(--edge); }
92
+ .error-text { color: var(--danger); font-size: 13px; margin-top: 10px; }
93
+ .approval-code { font: 700 28px ui-monospace, "SF Mono", monospace; letter-spacing: 5px; margin: 18px 0; color: var(--accent-fg); }
94
+ .disconnect-link { position: absolute; top: 17px; right: 96px; border: 0; background: transparent; color: var(--fg-muted); font-size: 11px; }
95
+ .disconnect-link:hover { color: var(--fg); }
96
+ .chat { min-height: 0; flex: 1; display: flex; flex-direction: column; position: relative; background: var(--surface-base); }
97
+ .chat-toolbar { height: 52px; border-bottom: 1px solid var(--edge); display: flex; align-items: center; padding: 0 12px; gap: 8px; background: var(--surface-panel); }
98
+ .session-trigger { flex: 1; display: flex; justify-content: center; gap: 7px; border: 0; background: transparent; font-weight: 600; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
99
+ .icon-button { width: 32px; height: 32px; border-radius: 8px; border: 1px solid var(--edge); background: var(--surface-panel); }
100
+ .icon-button:hover { background: var(--surface-hover); }
101
+ .session-menu { position: absolute; z-index: 5; top: 108px; left: 12px; right: 12px; max-height: min(60vh, 500px); border: 1px solid var(--edge-strong); border-radius: 12px; background: var(--surface-panel); padding: 10px; box-shadow: var(--shadow-popover); }
102
+ .session-menu > input { width: 100%; border: 0; border-bottom: 1px solid var(--edge); padding: 9px; outline: none; background: transparent; color: var(--fg); }
103
+ .session-list { overflow: auto; max-height: 380px; padding-top: 5px; }
104
+ .session-list button { width: 100%; border: 0; background: transparent; border-radius: 7px; display: flex; justify-content: space-between; gap: 12px; padding: 9px; text-align: left; }
105
+ .session-list button:hover { background: var(--surface-hover); }
106
+ .session-list span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
107
+ .session-list small { color: var(--fg-subtle); }
108
+ .messages { flex: 1; overflow-y: auto; padding: 18px 16px 150px; }
109
+ .empty-chat { height: 100%; display: grid; place-content: center; text-align: center; color: var(--fg-muted); }
110
+ .mark { font-size: 40px; color: var(--fg-subtle); }
111
+ .message { margin: 0 0 20px; line-height: 1.55; color: var(--fg); }
112
+ .message.user { margin-left: 15%; background: color-mix(in srgb, var(--surface-hover) 80%, transparent); border-radius: 14px; padding: 10px 12px; }
113
+ .message-role { font-size: 11px; font-weight: 700; color: var(--fg-muted); margin-bottom: 4px; text-transform: uppercase; letter-spacing: .04em; }
114
+ .message-content { white-space: pre-wrap; overflow-wrap: anywhere; }
115
+ .source-badge { display: inline-block; max-width: 100%; margin-bottom: 6px; border: 1px solid color-mix(in srgb, var(--accent) 32%, transparent); border-radius: 999px; padding: 3px 8px; color: var(--accent-fg); background: var(--accent-soft); font-size: 11px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
116
+ .caret { display: inline-block; width: 6px; height: 1em; margin-left: 2px; vertical-align: -2px; background: var(--accent); animation: blink 1s steps(1) infinite; }
117
+ @keyframes blink { 50% { opacity: 0; } }
118
+ .composer { position: absolute; left: 12px; right: 12px; bottom: 12px; border: 1px solid var(--edge); border-radius: 16px; background: var(--surface-panel); padding: 10px; box-shadow: var(--shadow-surface); }
119
+ .composer textarea { width: 100%; resize: none; border: 0; outline: none; background: transparent; color: var(--fg); }
120
+ .tab-mention-menu { position: absolute; z-index: 6; left: 0; right: 0; bottom: calc(100% + 8px); max-height: min(45vh, 320px); overflow-y: auto; border: 1px solid var(--edge-strong); border-radius: 12px; background: var(--surface-panel); padding: 5px; box-shadow: var(--shadow-popover); }
121
+ .tab-mention-menu button { width: 100%; display: grid; gap: 2px; border: 0; border-radius: 8px; padding: 8px 10px; background: transparent; color: inherit; text-align: left; }
122
+ .tab-mention-menu button:hover, .tab-mention-menu button.selected { background: var(--accent-soft); }
123
+ .tab-mention-menu span, .tab-mention-menu small { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
124
+ .tab-mention-menu span { font-size: 12px; font-weight: 600; }
125
+ .tab-mention-menu small, .tab-mention-empty { color: var(--fg-muted); font-size: 11px; }
126
+ .tab-mention-empty { padding: 10px; }
127
+ .composer-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px; margin-top: 5px; }
128
+ .composer-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 0; }
129
+ .composer-tools button { border: 0; background: transparent; padding: 3px; color: var(--fg-muted); font-size: 11px; }
130
+ .composer-tools button:hover { color: var(--fg); }
131
+ .context-chip { display: flex; align-items: center; gap: 5px; margin-bottom: 7px; border: 1px solid color-mix(in srgb, var(--accent) 32%, transparent); border-radius: 8px; padding: 6px 7px; color: var(--accent-fg); background: var(--accent-soft); font-size: 11px; }
132
+ .context-chip span { min-width: 0; flex: 1; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
133
+ .context-chip button { border: 0; background: transparent; color: inherit; padding: 2px 4px; }
134
+ .context-chip.stale { border-color: color-mix(in srgb, var(--warning) 55%, var(--edge)); background: var(--warning-soft); color: color-mix(in srgb, var(--warning) 70%, var(--fg)); }
135
+ .attachment-chip { display: flex; align-items: center; gap: 5px; margin-bottom: 7px; border: 1px solid var(--edge-strong); border-radius: 8px; padding: 6px 7px; color: var(--fg-muted); background: var(--surface-base); font-size: 11px; }
136
+ .attachment-chip span { min-width: 0; flex: 1; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
137
+ .attachment-chip button { border: 0; background: transparent; color: inherit; }
138
+ .file-input { display: none; }
139
+ .connection-label { color: var(--fg-subtle); font-size: 11px; }
140
+ .model-controls { display: flex; align-items: center; gap: 4px; margin-left: auto; }
141
+ .model-controls select { min-width: 0; max-width: 120px; border: 0; background: transparent; color: var(--fg-muted); font-size: 11px; }
142
+ .send-button, .stop-button { border: 0; border-radius: 999px; min-width: 34px; height: 34px; background: var(--accent); color: #fff; font-weight: 700; transition: background-color 150ms ease; }
143
+ .send-button:hover:not(:disabled), .stop-button:hover:not(:disabled) { background: var(--accent-hover); }
144
+ .send-button:disabled { background: var(--surface-active); color: var(--fg-disabled); }
145
+ .stop-button { padding: 0 13px; }
146
+ .composer-error { color: var(--danger); font-size: 12px; margin-bottom: 6px; }
147
+ .clarification { margin: 0 0 10px; border: 1px solid color-mix(in srgb, var(--accent) 32%, transparent); border-radius: 11px; padding: 10px; background: var(--accent-soft); }
148
+ .clarification strong { display: block; font-size: 12px; color: var(--accent-fg); }
149
+ .clarification p { margin: 6px 0 8px; font-size: 13px; line-height: 1.45; }
150
+ .clarification > button, .clarification-actions button, .clarification-answer button { margin: 0 6px 6px 0; border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--edge)); border-radius: 7px; padding: 5px 8px; background: var(--surface-panel); color: var(--accent-fg); font-size: 12px; }
151
+ .clarification > button:hover, .clarification-actions button:hover, .clarification-answer button:hover { background: var(--surface-hover); }
152
+ .clarification-answer { display: flex; gap: 6px; }
153
+ .clarification-answer input { min-width: 0; flex: 1; border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--edge)); border-radius: 7px; padding: 6px 8px; background: var(--surface-panel); color: var(--fg); }
154
+ .clarification-actions { margin-top: 3px; }
155
+ .clarification-actions button { border-color: transparent; background: transparent; color: var(--fg-muted); }