@xopcai/xopc 0.0.266 → 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 (115) 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-Qrp5ALCF.js → agent-avatar-dicebear-ZrSAMchm.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-DwinST48.js → agent-defaults-settings-panel-DiNFN8qS.js} +1 -1
  10. package/dist/gateway/static/root/assets/{agents-Dlr0YyNt.js → agents-Bu6Hf59K.js} +1 -1
  11. package/dist/gateway/static/root/assets/{app-management-settings-panel-bLNvz93c.js → app-management-settings-panel-D-L6yjS7.js} +1 -1
  12. package/dist/gateway/static/root/assets/{appearance-settings-D5qgIepF.js → appearance-settings-BW5eb53j.js} +1 -1
  13. package/dist/gateway/static/root/assets/{apps-page-BQVlXhIb.js → apps-page-CiQIdz3N.js} +1 -1
  14. package/dist/gateway/static/root/assets/{archive-plugin-BEA7VAA4.js → archive-plugin-DwXvu1p9.js} +1 -1
  15. package/dist/gateway/static/root/assets/{attachment-load-B1RyF3uu.js → attachment-load-DqU2BYBp.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automations-page-BfH0FdKa.js → automations-page-C7qoj9Sd.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automations-workspace-C37AlD3E.js → automations-workspace-CIARTLHO.js} +1 -1
  18. package/dist/gateway/static/root/assets/{binary-plugins-EU884ZXi.js → binary-plugins-CfplDak2.js} +1 -1
  19. package/dist/gateway/static/root/assets/{block-editor-Bjr3naHb.js → block-editor-CzLs38ru.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-automations-page-CDrYrNGy.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-slt1o04n.js → capabilities-settings-panel-Ck9U0Olx.js} +1 -1
  23. package/dist/gateway/static/root/assets/{channels-settings-oHTTX6Jy.js → channels-settings-I_vDpbnl.js} +1 -1
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-DEYQdv6n.js → chat-terminal-dock-snvAu3hJ.js} +1 -1
  25. package/dist/gateway/static/root/assets/{connectors-page-olrbxHIT.js → connectors-page-BmKTnzo1.js} +1 -1
  26. package/dist/gateway/static/root/assets/{cron-expression-DFrbDWpP.js → cron-expression-BhGZSbT6.js} +1 -1
  27. package/dist/gateway/static/root/assets/{date-picker-CYriYKpH.js → date-picker-Cep5f9b-.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dependency-picker-XY3qUErs.js → dependency-picker-BzSEBQku.js} +1 -1
  29. package/dist/gateway/static/root/assets/{desktop-pet-Dsc__ynA.js → desktop-pet-BwX_6Gah.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-EpuX3C08.js → desktop-pet-settings-WrbVsU2b.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-debug-page-B_NeLV4K.js → extension-debug-page-BdXSwtAZ.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-D3JC6mLB.js → extension-page-I95ukbRb.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-CXTQt1lp.js → extension-settings-page-8zUisBay.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-settings-yeYm_UPE.js → gateway-settings-DGj5b9Yv.js} +1 -1
  35. package/dist/gateway/static/root/assets/{heartbeat-settings-coh1LFsg.js → heartbeat-settings-BGQxU-Ug.js} +1 -1
  36. package/dist/gateway/static/root/assets/{home-page-CAgoBZqp.js → home-page-BZPpK0A3.js} +1 -1
  37. package/dist/gateway/static/root/assets/{index-Cn__9Un2.js → index-D2OtD9Wa.js} +7 -7
  38. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Cu1bI3Bg.js → keyboard-shortcuts-settings-BUe_om99.js} +1 -1
  39. package/dist/gateway/static/root/assets/{local-app-workbench-page-C9s2lFaI.js → local-app-workbench-page-CbQnffS9.js} +1 -1
  40. package/dist/gateway/static/root/assets/{local-apps-page-CJ03Umjr.js → local-apps-page-BZaLzfms.js} +1 -1
  41. package/dist/gateway/static/root/assets/{logs-page-CY_DQKJ2.js → logs-page-WWCHqW_x.js} +1 -1
  42. package/dist/gateway/static/root/assets/{management-settings-YPEemeMo.js → management-settings-Duf8w-Bl.js} +1 -1
  43. package/dist/gateway/static/root/assets/{media-plugins-BjT6jlrA.js → media-plugins-2-QfzHmg.js} +1 -1
  44. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-A8eLtV6v.js → mobile-pairing-wizard-DRaVIAt1.js} +1 -1
  45. package/dist/gateway/static/root/assets/{note-detail-panel-DHT2QksJ.js → note-detail-panel-BT-fWGxX.js} +3 -3
  46. package/dist/gateway/static/root/assets/{notes-page-BRFQiivM.js → notes-page-C4705PzN.js} +1 -1
  47. package/dist/gateway/static/root/assets/{page-tabs-DNUwulnl.js → page-tabs-DaZ7QpNO.js} +1 -1
  48. package/dist/gateway/static/root/assets/{preview-open-alternatives-B33KsKkJ.js → preview-open-alternatives-CWEuqCmv.js} +1 -1
  49. package/dist/gateway/static/root/assets/{project-detail-page-CItEFVt9.js → project-detail-page-BZegJ6an.js} +1 -1
  50. package/dist/gateway/static/root/assets/{projects-page-Bmy-c_lL.js → projects-page-B7hUHeLI.js} +1 -1
  51. package/dist/gateway/static/root/assets/{remote-access-hub-H6B1cA2V.js → remote-access-hub-BE9hZpdh.js} +1 -1
  52. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BsCovC39.js → runtime-tools-settings-panel-CslkSM-m.js} +1 -1
  53. package/dist/gateway/static/root/assets/{schema-form-NsPb_Vam.js → schema-form-B2gvVrBq.js} +1 -1
  54. package/dist/gateway/static/root/assets/{sessions-page-CyYLSXk_.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-BzPIPe1-.js → settings-form-section-CmlnuSO3.js} +1 -1
  57. package/dist/gateway/static/root/assets/{settings-page-4idpMhsw.js → settings-page-DWWgyelT.js} +1 -1
  58. package/dist/gateway/static/root/assets/{setup-status-panel-D2ds_TTD.js → setup-status-panel-CJrN3m1o.js} +1 -1
  59. package/dist/gateway/static/root/assets/{share-preview-page-Djo3VTaC.js → share-preview-page-C12oyIKk.js} +1 -1
  60. package/dist/gateway/static/root/assets/{shares-settings-fhRzNfRp.js → shares-settings-D4BtSiLq.js} +1 -1
  61. package/dist/gateway/static/root/assets/{skill-reload-api-Ct8tUju_.js → skill-reload-api-CzKGn056.js} +1 -1
  62. package/dist/gateway/static/root/assets/{skills-page-riM7FytZ.js → skills-page-yhW7LLqk.js} +1 -1
  63. package/dist/gateway/static/root/assets/{skills-page.utils-B3G8LBb-.js → skills-page.utils-FaTlq8t-.js} +1 -1
  64. package/dist/gateway/static/root/assets/{system-settings-panel-CW91jjnB.js → system-settings-panel-CMrkoJLN.js} +1 -1
  65. package/dist/gateway/static/root/assets/{task-detail-page-BBXKvl0k.js → task-detail-page-BUaO62cy.js} +1 -1
  66. package/dist/gateway/static/root/assets/{tunnel-api-DILER0Yb.js → tunnel-api-C2tAZaJz.js} +1 -1
  67. package/dist/gateway/static/root/assets/{use-autosave-GxnP8vLO.js → use-autosave-BsDRt4QI.js} +1 -1
  68. package/dist/gateway/static/root/assets/{user-model-page-I1H4XRfA.js → user-model-page-Dy8h1SSJ.js} +1 -1
  69. package/dist/gateway/static/root/assets/{voice-api-key-field-CI3sXyl4.js → voice-api-key-field-CS5heYMP.js} +1 -1
  70. package/dist/gateway/static/root/assets/{work-discovery-overlay-DZC9Exn3.js → work-discovery-overlay-BeSz5Th5.js} +1 -1
  71. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CaBaQER2.js → workflow-run-setup-panel-BebW0CDK.js} +1 -1
  72. package/dist/gateway/static/root/assets/{workflows-page-C-_Dxihw.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/external-tools/endpoint-provider.js +3 -1
  77. package/dist/src/agent/tools/factory.js +1 -1
  78. package/dist/src/browser/automations/runtime-service.d.ts +2 -0
  79. package/dist/src/browser/automations/runtime-service.js +1 -1
  80. package/dist/src/browser/drivers/create-driver.d.ts +2 -1
  81. package/dist/src/browser/drivers/create-driver.js +4 -6
  82. package/dist/src/browser/drivers/extension-driver.d.ts +7 -2
  83. package/dist/src/browser/enrollment.d.ts +8 -0
  84. package/dist/src/browser/enrollment.js +25 -0
  85. package/dist/src/browser/extension-identity.d.ts +2 -0
  86. package/dist/src/browser/extension-identity.js +5 -0
  87. package/dist/src/browser/native-messaging-host.d.ts +6 -3
  88. package/dist/src/browser/native-messaging-host.js +23 -5
  89. package/dist/src/browser/providers/browser-ext-install.d.ts +4 -1
  90. package/dist/src/browser/providers/browser-ext-install.js +46 -7
  91. package/dist/src/browser/providers/extension.js +1 -1
  92. package/dist/src/browser/providers/realtime-extension.d.ts +29 -0
  93. package/dist/src/browser/providers/realtime-extension.js +83 -0
  94. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  95. package/dist/src/endpoint-tools/policy.js +10 -3
  96. package/dist/src/gateway/hono/app.js +6 -1
  97. package/dist/src/gateway/hono/routes/browser.js +20 -30
  98. package/dist/src/gateway/security/origin-check.js +5 -0
  99. package/dist/src/gateway/service/config-coordinator.d.ts +0 -2
  100. package/dist/src/gateway/service/config-coordinator.js +0 -2
  101. package/dist/src/gateway/service.d.ts +0 -11
  102. package/dist/src/gateway/service.js +7 -85
  103. package/dist/src/storage/sqlite/device-pairing-approval.js +24 -3
  104. package/dist/src/storage/sqlite/device-pairing-repository.d.ts +10 -1
  105. package/dist/src/storage/sqlite/device-pairing-repository.js +6 -5
  106. package/dist/src/storage/sqlite/migrations/157_browser_endpoint_principals.sql +50 -0
  107. package/dist/src/storage/sqlite/migrations/158_browser_native_enrollment.sql +4 -0
  108. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  109. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  110. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  111. package/dist/src/storage/sqlite/schema.js +1 -1
  112. package/package.json +3 -3
  113. package/dist/browser-ext/dist/assets/sidepanel-C69P3v9u.css +0 -113
  114. package/dist/gateway/static/root/assets/browser-settings-page-DOmUkj2k.js +0 -8
  115. package/dist/gateway/static/root/assets/settings-advanced-gate-3T4rPk4A.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); }