@symerian/symi 2.6.32 → 2.6.35

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 (89) hide show
  1. package/dist/{audio-preflight-DHTaS5U1.js → audio-preflight-BVaaZWkg.js} +4 -4
  2. package/dist/build-info.json +3 -3
  3. package/dist/bundled/boot-md/handler.js +6 -6
  4. package/dist/bundled/session-memory/handler.js +6 -6
  5. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  6. package/dist/{chrome-DYZwl5Gv.js → chrome-DkaXoP36.js} +7 -7
  7. package/dist/{command-registry-ajP42kpE.js → command-registry-CrYpGtIt.js} +4 -4
  8. package/dist/{completion-cli-Dui7LK9s.js → completion-cli-BmYBAxqM.js} +1 -1
  9. package/dist/{completion-cli-zokW-yVf.js → completion-cli-GqPGf3Kq.js} +2 -2
  10. package/dist/control-ui/css/style.css +441 -1
  11. package/dist/control-ui/index.html +1 -0
  12. package/dist/control-ui/js/app.js +4 -0
  13. package/dist/control-ui/js/menu.js +41 -1
  14. package/dist/control-ui/js/settings.js +681 -0
  15. package/dist/{deliver-dODxSv3b.js → deliver-C46-vyqg.js} +1 -1
  16. package/dist/{doctor-completion-DaGKVo6p.js → doctor-completion-4SDl6ZEA.js} +1 -1
  17. package/dist/{doctor-completion-kr-VbXG-.js → doctor-completion-CL0NHlCA.js} +1 -1
  18. package/dist/entry.js +1 -1
  19. package/dist/{gateway-cli-DdbomLMt.js → gateway-cli-CqHk7Nfm.js} +10 -4
  20. package/dist/{gateway-cli-7pMi8rn1.js → gateway-cli-D98LL9Yi.js} +10 -4
  21. package/dist/{image-CXu8W39c.js → image-CuzFLQWC.js} +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/llm-slug-generator.js +6 -6
  24. package/dist/{onboard-Dadg5mWZ.js → onboard-Cy_CK0Ng.js} +1 -1
  25. package/dist/{onboard-C4DXGi07.js → onboard-DzfTelta.js} +1 -1
  26. package/dist/{onboarding-Be8-Muma.js → onboarding-B9RTmYiC.js} +1 -1
  27. package/dist/{onboarding-BesMJD5M.js → onboarding-CerjrLp1.js} +1 -1
  28. package/dist/{onboarding.finalize-BdFKvepX.js → onboarding.finalize-CGGB37q-.js} +4 -4
  29. package/dist/{onboarding.finalize-Cbo7t2w6.js → onboarding.finalize-CLQL7PKW.js} +3 -3
  30. package/dist/{pi-embedded-helpers-pubKo8HQ.js → pi-embedded-helpers-CfqDGQ9J.js} +4 -4
  31. package/dist/{program-CqxmOFY5.js → program-B6KpKryX.js} +2 -2
  32. package/dist/{program-context-CWoc-4O6.js → program-context-Dm-BSkOd.js} +6 -6
  33. package/dist/{prompt-select-styled-C5YCowXp.js → prompt-select-styled-Dk8_YofB.js} +1 -1
  34. package/dist/{prompt-select-styled-DKTE77Rw.js → prompt-select-styled-DszNP9MV.js} +1 -1
  35. package/dist/{pw-ai-B5asscAD.js → pw-ai-m0mj2KWK.js} +1 -1
  36. package/dist/{register.maintenance-BhhUMTAr.js → register.maintenance-0L5VAVCA.js} +4 -4
  37. package/dist/{register.maintenance-Ea70NNls.js → register.maintenance-jMmXJ1NK.js} +5 -5
  38. package/dist/{register.onboard-CbGEztLT.js → register.onboard-BN7J8vyx.js} +2 -2
  39. package/dist/{register.onboard-1HGg8A_B.js → register.onboard-pKq2v5Fh.js} +2 -2
  40. package/dist/{register.setup-BRKstpuL.js → register.setup-BKYxHrcB.js} +2 -2
  41. package/dist/{register.setup-8LYTLZMG.js → register.setup-J_GQSh-T.js} +2 -2
  42. package/dist/{register.subclis-FAdASegj.js → register.subclis-DcBHO9E8.js} +3 -3
  43. package/dist/{run-main-DqKSUzps.js → run-main-DkcjdsAo.js} +3 -3
  44. package/dist/{runner-WAG0M5s9.js → runner-CU9l0uJh.js} +1 -1
  45. package/dist/{unified-runner-Dy2eq7ZO.js → unified-runner-Di5Ca6mo.js} +16 -16
  46. package/dist/{update-cli-CfKfjAnO.js → update-cli-B0H4ITiR.js} +4 -4
  47. package/dist/{update-cli-0aSAmmmj.js → update-cli-JS-KTMc8.js} +5 -5
  48. package/dist/{web-CP9nUIj0.js → web-B3oyGSBx.js} +6 -6
  49. package/extensions/bluebubbles/package.json +1 -1
  50. package/extensions/copilot-proxy/package.json +1 -1
  51. package/extensions/diagnostics-otel/package.json +1 -1
  52. package/extensions/discord/package.json +1 -1
  53. package/extensions/feishu/package.json +1 -1
  54. package/extensions/google-antigravity-auth/package.json +1 -1
  55. package/extensions/google-gemini-cli-auth/package.json +1 -1
  56. package/extensions/googlechat/package.json +1 -1
  57. package/extensions/imessage/package.json +1 -1
  58. package/extensions/irc/package.json +1 -1
  59. package/extensions/learning-loop/package.json +1 -1
  60. package/extensions/line/package.json +1 -1
  61. package/extensions/llm-task/package.json +1 -1
  62. package/extensions/matrix/CHANGELOG.md +18 -0
  63. package/extensions/matrix/package.json +1 -1
  64. package/extensions/mattermost/package.json +1 -1
  65. package/extensions/memory-core/package.json +1 -1
  66. package/extensions/memory-lancedb/package.json +1 -1
  67. package/extensions/minimax-portal-auth/package.json +1 -1
  68. package/extensions/msteams/CHANGELOG.md +18 -0
  69. package/extensions/msteams/package.json +1 -1
  70. package/extensions/nextcloud-talk/package.json +1 -1
  71. package/extensions/nostr/CHANGELOG.md +18 -0
  72. package/extensions/nostr/package.json +1 -1
  73. package/extensions/open-prose/package.json +1 -1
  74. package/extensions/outlook/package.json +1 -1
  75. package/extensions/pipeline/package.json +1 -1
  76. package/extensions/signal/package.json +1 -1
  77. package/extensions/slack/package.json +1 -1
  78. package/extensions/telegram/package.json +1 -1
  79. package/extensions/tlon/package.json +1 -1
  80. package/extensions/twitch/CHANGELOG.md +18 -0
  81. package/extensions/twitch/package.json +1 -1
  82. package/extensions/voice-call/CHANGELOG.md +18 -0
  83. package/extensions/voice-call/package.json +1 -1
  84. package/extensions/whatsapp/package.json +1 -1
  85. package/extensions/zalo/CHANGELOG.md +18 -0
  86. package/extensions/zalo/package.json +1 -1
  87. package/extensions/zalouser/CHANGELOG.md +18 -0
  88. package/extensions/zalouser/package.json +1 -1
  89. package/package.json +1 -1
@@ -8,10 +8,10 @@ import "./auth-profiles-DdK1Hxaa.js";
8
8
  import "./env-BDXYbTKj.js";
9
9
  import "./github-copilot-token-cCYzSU9h.js";
10
10
  import "./boolean-CE7i9tBR.js";
11
- import "./pi-embedded-helpers-pubKo8HQ.js";
11
+ import "./pi-embedded-helpers-CfqDGQ9J.js";
12
12
  import "./config-5SdHIcHU.js";
13
13
  import "./manifest-registry-yb7sAlu4.js";
14
- import "./chrome-DYZwl5Gv.js";
14
+ import "./chrome-DkaXoP36.js";
15
15
  import "./frontmatter-CTR5f_Ez.js";
16
16
  import "./skills-Bs0AW1g3.js";
17
17
  import "./redact-BDMXB06K.js";
@@ -27,11 +27,11 @@ import "./accounts-3dCrO3oZ.js";
27
27
  import "./accounts-BuZxOb3B.js";
28
28
  import "./bindings-BsHoBLIE.js";
29
29
  import "./tool-images-SqqWIT22.js";
30
- import "./image-CXu8W39c.js";
30
+ import "./image-CuzFLQWC.js";
31
31
  import "./pi-model-discovery-Bv5YDJc8.js";
32
32
  import "./gemini-auth-Dy12ZAH3.js";
33
33
  import "./local-roots-DhZz0Ybs.js";
34
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-WAG0M5s9.js";
34
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-CU9l0uJh.js";
35
35
 
36
36
  //#region src/media-understanding/audio-preflight.ts
37
37
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.6.32",
3
- "commit": "3a921a700c69af2a281df5a5a26dcc8986d3f4ba",
4
- "builtAt": "2026-04-16T05:32:53.293Z"
2
+ "version": "2.6.35",
3
+ "commit": "ace47bc3a15ad94ac64e4d89650c364288d335b3",
4
+ "builtAt": "2026-04-16T23:04:14.025Z"
5
5
  }
@@ -4,16 +4,16 @@ import { b as isGatewayStartupEvent } from "../../registry-DYq1AYOv.js";
4
4
  import { s as resolveAgentWorkspaceDir, t as listAgentIds } from "../../agent-scope-CpEJ0B88.js";
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "../../subsystem-BjyjJF-d.js";
6
6
  import "../../workspace-DscDraUb.js";
7
- import { a as createDefaultDeps, i as agentCommand } from "../../unified-runner-Dy2eq7ZO.js";
7
+ import { a as createDefaultDeps, i as agentCommand } from "../../unified-runner-Di5Ca6mo.js";
8
8
  import { s as resolveStorePath } from "../../paths-CbQV9WEg.js";
9
9
  import "../../auth-profiles-DdK1Hxaa.js";
10
10
  import "../../env-BDXYbTKj.js";
11
11
  import "../../github-copilot-token-cCYzSU9h.js";
12
12
  import "../../boolean-CE7i9tBR.js";
13
- import { H as loadSessionStore, K as updateSessionStore, xt as resolveMainSessionKey, yt as resolveAgentMainSessionKey } from "../../pi-embedded-helpers-pubKo8HQ.js";
13
+ import { H as loadSessionStore, K as updateSessionStore, xt as resolveMainSessionKey, yt as resolveAgentMainSessionKey } from "../../pi-embedded-helpers-CfqDGQ9J.js";
14
14
  import "../../config-5SdHIcHU.js";
15
15
  import "../../manifest-registry-yb7sAlu4.js";
16
- import "../../chrome-DYZwl5Gv.js";
16
+ import "../../chrome-DkaXoP36.js";
17
17
  import "../../frontmatter-CTR5f_Ez.js";
18
18
  import "../../skills-Bs0AW1g3.js";
19
19
  import "../../redact-BDMXB06K.js";
@@ -31,10 +31,10 @@ import "../../bindings-BsHoBLIE.js";
31
31
  import "../../send-CVMyYPQw.js";
32
32
  import "../../send-CvhXrdgS.js";
33
33
  import "../../tool-images-SqqWIT22.js";
34
- import "../../deliver-dODxSv3b.js";
34
+ import "../../deliver-C46-vyqg.js";
35
35
  import "../../diagnostic-rPhsBoZz.js";
36
36
  import "../../diagnostic-session-state-Zw87xFym.js";
37
- import "../../image-CXu8W39c.js";
37
+ import "../../image-CuzFLQWC.js";
38
38
  import { n as SILENT_REPLY_TOKEN } from "../../tokens-Bux9Y_xD.js";
39
39
  import "../../send-DYj_o4_F.js";
40
40
  import "../../pi-model-discovery-Bv5YDJc8.js";
@@ -50,7 +50,7 @@ import "../../local-roots-DhZz0Ybs.js";
50
50
  import "../../ir-CTiz95Vb.js";
51
51
  import "../../render-CDCvpfhh.js";
52
52
  import "../../commands-registry-Bfc7Uz0o.js";
53
- import "../../runner-WAG0M5s9.js";
53
+ import "../../runner-CU9l0uJh.js";
54
54
  import "../../skill-commands-DcVwOafC.js";
55
55
  import "../../fetch-Bso4i15F.js";
56
56
  import "../../channel-activity-B6G1jnQT.js";
@@ -4,16 +4,16 @@ import "../../registry-DYq1AYOv.js";
4
4
  import { s as resolveAgentWorkspaceDir } from "../../agent-scope-CpEJ0B88.js";
5
5
  import { t as createSubsystemLogger } from "../../subsystem-BjyjJF-d.js";
6
6
  import "../../workspace-DscDraUb.js";
7
- import "../../unified-runner-Dy2eq7ZO.js";
7
+ import "../../unified-runner-Di5Ca6mo.js";
8
8
  import "../../paths-CbQV9WEg.js";
9
9
  import "../../auth-profiles-DdK1Hxaa.js";
10
10
  import "../../env-BDXYbTKj.js";
11
11
  import "../../github-copilot-token-cCYzSU9h.js";
12
12
  import "../../boolean-CE7i9tBR.js";
13
- import { ct as hasInterSessionUserProvenance } from "../../pi-embedded-helpers-pubKo8HQ.js";
13
+ import { ct as hasInterSessionUserProvenance } from "../../pi-embedded-helpers-CfqDGQ9J.js";
14
14
  import "../../config-5SdHIcHU.js";
15
15
  import "../../manifest-registry-yb7sAlu4.js";
16
- import "../../chrome-DYZwl5Gv.js";
16
+ import "../../chrome-DkaXoP36.js";
17
17
  import "../../frontmatter-CTR5f_Ez.js";
18
18
  import "../../skills-Bs0AW1g3.js";
19
19
  import "../../redact-BDMXB06K.js";
@@ -31,10 +31,10 @@ import "../../bindings-BsHoBLIE.js";
31
31
  import "../../send-CVMyYPQw.js";
32
32
  import "../../send-CvhXrdgS.js";
33
33
  import "../../tool-images-SqqWIT22.js";
34
- import "../../deliver-dODxSv3b.js";
34
+ import "../../deliver-C46-vyqg.js";
35
35
  import "../../diagnostic-rPhsBoZz.js";
36
36
  import "../../diagnostic-session-state-Zw87xFym.js";
37
- import "../../image-CXu8W39c.js";
37
+ import "../../image-CuzFLQWC.js";
38
38
  import "../../tokens-Bux9Y_xD.js";
39
39
  import "../../send-DYj_o4_F.js";
40
40
  import "../../pi-model-discovery-Bv5YDJc8.js";
@@ -50,7 +50,7 @@ import "../../local-roots-DhZz0Ybs.js";
50
50
  import "../../ir-CTiz95Vb.js";
51
51
  import "../../render-CDCvpfhh.js";
52
52
  import "../../commands-registry-Bfc7Uz0o.js";
53
- import "../../runner-WAG0M5s9.js";
53
+ import "../../runner-CU9l0uJh.js";
54
54
  import "../../skill-commands-DcVwOafC.js";
55
55
  import "../../fetch-Bso4i15F.js";
56
56
  import "../../channel-activity-B6G1jnQT.js";
@@ -1 +1 @@
1
- 1ef8a03d7981447f100886739cfbd52d6f44f70d5011a568566426cb868978f6
1
+ 96edf5ff2c7c1f9ee2f72b644c1629da8922c673856e252cce5045e5ede21dc0
@@ -10,7 +10,7 @@ import fs$1 from "node:fs/promises";
10
10
  import { execFileSync, spawn } from "node:child_process";
11
11
  import net from "node:net";
12
12
  import { createServer } from "node:http";
13
- import WebSocket, { WebSocketServer } from "ws";
13
+ import WebSocket$1, { WebSocketServer } from "ws";
14
14
  import { Buffer as Buffer$1 } from "node:buffer";
15
15
 
16
16
  //#region src/browser/constants.ts
@@ -178,7 +178,7 @@ async function ensureChromeExtensionRelayServer(opts) {
178
178
  let nextExtensionId = 1;
179
179
  const sendToExtension = async (payload) => {
180
180
  const ws = extensionWs;
181
- if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
181
+ if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
182
182
  ws.send(JSON.stringify(payload));
183
183
  return await new Promise((resolve, reject) => {
184
184
  const timer = setTimeout(() => {
@@ -195,12 +195,12 @@ async function ensureChromeExtensionRelayServer(opts) {
195
195
  const broadcastToCdpClients = (evt) => {
196
196
  const msg = JSON.stringify(evt);
197
197
  for (const ws of cdpClients) {
198
- if (ws.readyState !== WebSocket.OPEN) continue;
198
+ if (ws.readyState !== WebSocket$1.OPEN) continue;
199
199
  ws.send(msg);
200
200
  }
201
201
  };
202
202
  const sendResponseToCdp = (ws, res) => {
203
- if (ws.readyState !== WebSocket.OPEN) return;
203
+ if (ws.readyState !== WebSocket$1.OPEN) return;
204
204
  ws.send(JSON.stringify(res));
205
205
  };
206
206
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -425,7 +425,7 @@ async function ensureChromeExtensionRelayServer(opts) {
425
425
  wssExtension.on("connection", (ws) => {
426
426
  extensionWs = ws;
427
427
  const ping = setInterval(() => {
428
- if (ws.readyState !== WebSocket.OPEN) return;
428
+ if (ws.readyState !== WebSocket$1.OPEN) return;
429
429
  ws.send(JSON.stringify({ method: "ping" }));
430
430
  }, 5e3);
431
431
  ws.on("message", (data) => {
@@ -743,7 +743,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
743
743
  }
744
744
  async function withCdpSocket(wsUrl, fn, opts) {
745
745
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
746
- const ws = new WebSocket(wsUrl, {
746
+ const ws = new WebSocket$1(wsUrl, {
747
747
  handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
748
748
  ...Object.keys(headers).length ? { headers } : {}
749
749
  });
@@ -1637,7 +1637,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1637
1637
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1638
1638
  return await new Promise((resolve) => {
1639
1639
  const headers = getHeadersWithAuth(wsUrl);
1640
- const ws = new WebSocket(wsUrl, {
1640
+ const ws = new WebSocket$1(wsUrl, {
1641
1641
  handshakeTimeout: timeoutMs,
1642
1642
  ...Object.keys(headers).length ? { headers } : {}
1643
1643
  });
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { an as getPrimaryCommand, cn as hasHelpOrVersion } from "./entry.js";
3
- import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-FAdASegj.js";
3
+ import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-DcBHO9E8.js";
4
4
 
5
5
  //#region src/cli/program/command-registry.ts
6
6
  var command_registry_exports = /* @__PURE__ */ __exportAll({
@@ -22,7 +22,7 @@ const coreEntries = [
22
22
  hasSubcommands: false
23
23
  }],
24
24
  register: async ({ program }) => {
25
- (await import("./register.setup-BRKstpuL.js")).registerSetupCommand(program);
25
+ (await import("./register.setup-BKYxHrcB.js")).registerSetupCommand(program);
26
26
  }
27
27
  },
28
28
  {
@@ -32,7 +32,7 @@ const coreEntries = [
32
32
  hasSubcommands: false
33
33
  }],
34
34
  register: async ({ program }) => {
35
- (await import("./register.onboard-CbGEztLT.js")).registerOnboardCommand(program);
35
+ (await import("./register.onboard-BN7J8vyx.js")).registerOnboardCommand(program);
36
36
  }
37
37
  },
38
38
  {
@@ -79,7 +79,7 @@ const coreEntries = [
79
79
  }
80
80
  ],
81
81
  register: async ({ program }) => {
82
- (await import("./register.maintenance-Ea70NNls.js")).registerMaintenanceCommands(program);
82
+ (await import("./register.maintenance-jMmXJ1NK.js")).registerMaintenanceCommands(program);
83
83
  }
84
84
  },
85
85
  {
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
3
3
  import { h as pathExists } from "./utils-B-0b9bGM.js";
4
4
  import { i as routeLogsToStderr } from "./subsystem-D9vIQve0.js";
5
- import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-CWoc-4O6.js";
5
+ import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-Dm-BSkOd.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs/promises";
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { Yt as resolveStateDir, l as routeLogsToStderr, nt as pathExists } from "./entry.js";
3
- import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-FAdASegj.js";
4
- import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-ajP42kpE.js";
3
+ import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-DcBHO9E8.js";
4
+ import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-CrYpGtIt.js";
5
5
  import { t as getProgramContext } from "./program-context-CqzR_m-7.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
@@ -3143,9 +3143,449 @@ body {
3143
3143
  }
3144
3144
 
3145
3145
  /* ══════════════════════════════════════════════════════════════════════════
3146
- CONNECTIONS PANEL
3146
+ NATIVE SETTINGS PANELS (Config, Debug, Logs)
3147
3147
  ══════════════════════════════════════════════════════════════════════════ */
3148
3148
 
3149
+ #native-settings-container {
3150
+ display: none;
3151
+ flex: 1;
3152
+ flex-direction: column;
3153
+ overflow: hidden;
3154
+ }
3155
+
3156
+ .settings-panel {
3157
+ display: flex;
3158
+ flex-direction: column;
3159
+ flex: 1;
3160
+ overflow: hidden;
3161
+ }
3162
+
3163
+ /* ── Toolbar ────────────────────────────────────────────────────────── */
3164
+ .settings-toolbar {
3165
+ display: flex;
3166
+ align-items: center;
3167
+ justify-content: space-between;
3168
+ gap: 12px;
3169
+ padding: 10px 16px;
3170
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
3171
+ background: rgba(10, 12, 20, 0.6);
3172
+ flex-shrink: 0;
3173
+ min-height: 44px;
3174
+ }
3175
+
3176
+ .settings-toolbar-left {
3177
+ display: flex;
3178
+ align-items: center;
3179
+ gap: 10px;
3180
+ }
3181
+
3182
+ .settings-toolbar-label {
3183
+ font-family: var(--font-mono);
3184
+ font-size: 10px;
3185
+ font-weight: 700;
3186
+ letter-spacing: 0.14em;
3187
+ color: rgba(255, 255, 255, 0.45);
3188
+ }
3189
+
3190
+ .settings-toolbar-count {
3191
+ font-family: var(--font-mono);
3192
+ font-size: 10px;
3193
+ color: rgba(139, 92, 246, 0.6);
3194
+ letter-spacing: 0.04em;
3195
+ }
3196
+
3197
+ .settings-toolbar-right {
3198
+ display: flex;
3199
+ align-items: center;
3200
+ gap: 8px;
3201
+ flex-wrap: wrap;
3202
+ }
3203
+
3204
+ /* ── Buttons ────────────────────────────────────────────────────────── */
3205
+ .settings-btn {
3206
+ padding: 4px 12px;
3207
+ height: 28px;
3208
+ background: rgba(255, 255, 255, 0.04);
3209
+ border: 1px solid rgba(255, 255, 255, 0.1);
3210
+ border-radius: 6px;
3211
+ color: rgba(255, 255, 255, 0.6);
3212
+ font-family: var(--font-mono);
3213
+ font-size: 10px;
3214
+ letter-spacing: 0.05em;
3215
+ cursor: pointer;
3216
+ transition: all 0.15s;
3217
+ white-space: nowrap;
3218
+ }
3219
+ .settings-btn:hover {
3220
+ background: rgba(255, 255, 255, 0.08);
3221
+ border-color: rgba(255, 255, 255, 0.2);
3222
+ color: rgba(255, 255, 255, 0.9);
3223
+ }
3224
+ .settings-btn--primary {
3225
+ background: rgba(139, 92, 246, 0.1);
3226
+ border-color: rgba(139, 92, 246, 0.25);
3227
+ color: rgba(139, 92, 246, 0.9);
3228
+ }
3229
+ .settings-btn--primary:hover {
3230
+ background: rgba(139, 92, 246, 0.2);
3231
+ border-color: rgba(139, 92, 246, 0.45);
3232
+ }
3233
+ .settings-btn--active {
3234
+ background: rgba(139, 92, 246, 0.2);
3235
+ border-color: rgba(139, 92, 246, 0.4);
3236
+ }
3237
+ .settings-btn--danger {
3238
+ background: rgba(239, 68, 68, 0.1);
3239
+ border-color: rgba(239, 68, 68, 0.25);
3240
+ color: rgba(239, 68, 68, 0.9);
3241
+ }
3242
+ .settings-btn--danger:hover {
3243
+ background: rgba(239, 68, 68, 0.2);
3244
+ border-color: rgba(239, 68, 68, 0.45);
3245
+ }
3246
+
3247
+ /* ── Search / filter input ──────────────────────────────────────────── */
3248
+ .settings-search {
3249
+ padding: 4px 10px;
3250
+ height: 28px;
3251
+ width: 140px;
3252
+ background: rgba(255, 255, 255, 0.04);
3253
+ border: 1px solid rgba(255, 255, 255, 0.1);
3254
+ border-radius: 6px;
3255
+ color: var(--text);
3256
+ font-family: var(--font-mono);
3257
+ font-size: 10px;
3258
+ outline: none;
3259
+ transition: border-color 0.15s;
3260
+ }
3261
+ .settings-search:focus {
3262
+ border-color: rgba(139, 92, 246, 0.4);
3263
+ }
3264
+ .settings-search::placeholder {
3265
+ color: rgba(255, 255, 255, 0.25);
3266
+ }
3267
+
3268
+ /* ── Checkbox label ─────────────────────────────────────────────────── */
3269
+ .settings-checkbox-label {
3270
+ display: flex;
3271
+ align-items: center;
3272
+ gap: 4px;
3273
+ font-family: var(--font-mono);
3274
+ font-size: 10px;
3275
+ color: rgba(255, 255, 255, 0.5);
3276
+ cursor: pointer;
3277
+ white-space: nowrap;
3278
+ }
3279
+ .settings-checkbox-label input[type="checkbox"] {
3280
+ accent-color: var(--accent-purple);
3281
+ width: 12px;
3282
+ height: 12px;
3283
+ }
3284
+
3285
+ /* ── Content area ───────────────────────────────────────────────────── */
3286
+ .settings-content {
3287
+ flex: 1;
3288
+ overflow-y: auto;
3289
+ padding: 16px;
3290
+ scrollbar-width: thin;
3291
+ scrollbar-color: rgba(139, 92, 246, 0.3) transparent;
3292
+ }
3293
+ .settings-content::-webkit-scrollbar {
3294
+ width: 5px;
3295
+ }
3296
+ .settings-content::-webkit-scrollbar-thumb {
3297
+ background: rgba(139, 92, 246, 0.3);
3298
+ border-radius: 3px;
3299
+ }
3300
+
3301
+ /* ── State messages ─────────────────────────────────────────────────── */
3302
+ .settings-loading,
3303
+ .settings-empty {
3304
+ display: flex;
3305
+ align-items: center;
3306
+ justify-content: center;
3307
+ min-height: 120px;
3308
+ font-family: var(--font-mono);
3309
+ font-size: 11px;
3310
+ color: rgba(255, 255, 255, 0.3);
3311
+ letter-spacing: 0.05em;
3312
+ }
3313
+
3314
+ /* ══════════════════════════════════════════════════════════════════════
3315
+ CONFIG PANEL — tree view
3316
+ ══════════════════════════════════════════════════════════════════════ */
3317
+
3318
+ .settings-section {
3319
+ border: 1px solid rgba(255, 255, 255, 0.06);
3320
+ border-radius: 8px;
3321
+ margin-bottom: 8px;
3322
+ overflow: hidden;
3323
+ transition: border-color 0.15s;
3324
+ }
3325
+ .settings-section:hover {
3326
+ border-color: rgba(255, 255, 255, 0.1);
3327
+ }
3328
+
3329
+ .settings-section-header {
3330
+ display: flex;
3331
+ align-items: center;
3332
+ gap: 8px;
3333
+ padding: 10px 14px;
3334
+ background: rgba(255, 255, 255, 0.02);
3335
+ cursor: pointer;
3336
+ user-select: none;
3337
+ transition: background 0.15s;
3338
+ }
3339
+ .settings-section-header:hover {
3340
+ background: rgba(255, 255, 255, 0.04);
3341
+ }
3342
+
3343
+ .settings-section-arrow {
3344
+ font-size: 10px;
3345
+ color: rgba(255, 255, 255, 0.3);
3346
+ transition: transform 0.15s;
3347
+ width: 10px;
3348
+ text-align: center;
3349
+ }
3350
+ .settings-section.collapsed .settings-section-arrow {
3351
+ transform: rotate(-90deg);
3352
+ }
3353
+
3354
+ .settings-section-key {
3355
+ font-family: var(--font-mono);
3356
+ font-size: 12px;
3357
+ font-weight: 600;
3358
+ color: var(--accent-cyan);
3359
+ letter-spacing: 0.03em;
3360
+ }
3361
+
3362
+ .settings-section-body {
3363
+ padding: 8px 14px 12px;
3364
+ font-family: var(--font-mono);
3365
+ font-size: 11px;
3366
+ line-height: 1.7;
3367
+ overflow-x: auto;
3368
+ }
3369
+ .settings-section.collapsed .settings-section-body {
3370
+ display: none;
3371
+ }
3372
+
3373
+ .cfg-key {
3374
+ color: rgba(0, 212, 255, 0.8);
3375
+ }
3376
+ .cfg-colon {
3377
+ color: rgba(255, 255, 255, 0.3);
3378
+ }
3379
+ .cfg-str {
3380
+ color: rgba(52, 211, 153, 0.9);
3381
+ word-break: break-all;
3382
+ }
3383
+ .cfg-num {
3384
+ color: rgba(244, 114, 182, 0.9);
3385
+ }
3386
+ .cfg-bool {
3387
+ color: rgba(139, 92, 246, 0.9);
3388
+ }
3389
+ .cfg-null {
3390
+ color: rgba(255, 255, 255, 0.3);
3391
+ font-style: italic;
3392
+ }
3393
+ .cfg-bracket {
3394
+ color: rgba(255, 255, 255, 0.25);
3395
+ }
3396
+ .cfg-row {
3397
+ padding-left: 1em;
3398
+ }
3399
+ .cfg-redacted {
3400
+ font-family: var(--font-mono);
3401
+ font-size: 9px;
3402
+ padding: 1px 6px;
3403
+ border-radius: 4px;
3404
+ background: rgba(239, 68, 68, 0.12);
3405
+ border: 1px solid rgba(239, 68, 68, 0.2);
3406
+ color: rgba(239, 68, 68, 0.7);
3407
+ letter-spacing: 0.08em;
3408
+ margin-left: 8px;
3409
+ }
3410
+
3411
+ /* ── Config editor ──────────────────────────────────────────────────── */
3412
+ .config-editor-wrap {
3413
+ display: flex;
3414
+ flex-direction: column;
3415
+ flex: 1;
3416
+ gap: 12px;
3417
+ height: 100%;
3418
+ }
3419
+ .config-editor {
3420
+ flex: 1;
3421
+ min-height: 300px;
3422
+ padding: 14px;
3423
+ background: rgba(0, 0, 0, 0.3);
3424
+ border: 1px solid rgba(255, 255, 255, 0.08);
3425
+ border-radius: 8px;
3426
+ color: var(--text);
3427
+ font-family: var(--font-mono);
3428
+ font-size: 11px;
3429
+ line-height: 1.6;
3430
+ resize: none;
3431
+ outline: none;
3432
+ scrollbar-width: thin;
3433
+ scrollbar-color: rgba(139, 92, 246, 0.3) transparent;
3434
+ tab-size: 2;
3435
+ }
3436
+ .config-editor:focus {
3437
+ border-color: rgba(139, 92, 246, 0.35);
3438
+ }
3439
+ .config-editor-actions {
3440
+ display: flex;
3441
+ align-items: center;
3442
+ justify-content: space-between;
3443
+ gap: 12px;
3444
+ }
3445
+ .config-editor-hint {
3446
+ font-family: var(--font-mono);
3447
+ font-size: 10px;
3448
+ color: rgba(255, 255, 255, 0.3);
3449
+ }
3450
+
3451
+ /* ══════════════════════════════════════════════════════════════════════
3452
+ DEBUG PANEL
3453
+ ══════════════════════════════════════════════════════════════════════ */
3454
+
3455
+ .debug-scroll {
3456
+ padding: 0 !important;
3457
+ }
3458
+
3459
+ .debug-entry-row {
3460
+ display: flex;
3461
+ align-items: baseline;
3462
+ gap: 10px;
3463
+ padding: 5px 16px;
3464
+ font-family: var(--font-mono);
3465
+ font-size: 10px;
3466
+ line-height: 1.5;
3467
+ border-bottom: 1px solid rgba(255, 255, 255, 0.03);
3468
+ transition: background 0.1s;
3469
+ }
3470
+ .debug-entry-row:hover {
3471
+ background: rgba(255, 255, 255, 0.02);
3472
+ }
3473
+
3474
+ .debug-time {
3475
+ color: rgba(255, 255, 255, 0.25);
3476
+ flex-shrink: 0;
3477
+ width: 65px;
3478
+ }
3479
+
3480
+ .debug-type {
3481
+ flex-shrink: 0;
3482
+ width: 60px;
3483
+ font-weight: 600;
3484
+ letter-spacing: 0.04em;
3485
+ }
3486
+ .debug-type--chat { color: var(--accent-cyan); }
3487
+ .debug-type--agent { color: var(--accent-purple); }
3488
+ .debug-type--error { color: #ef4444; }
3489
+ .debug-type--other { color: rgba(255, 255, 255, 0.4); }
3490
+
3491
+ .debug-summary {
3492
+ color: rgba(255, 255, 255, 0.55);
3493
+ overflow: hidden;
3494
+ text-overflow: ellipsis;
3495
+ white-space: nowrap;
3496
+ flex: 1;
3497
+ min-width: 0;
3498
+ }
3499
+
3500
+ /* ══════════════════════════════════════════════════════════════════════
3501
+ LOGS PANEL
3502
+ ══════════════════════════════════════════════════════════════════════ */
3503
+
3504
+ .logs-scroll {
3505
+ padding: 0 !important;
3506
+ }
3507
+
3508
+ .logs-level-filters {
3509
+ display: flex;
3510
+ align-items: center;
3511
+ gap: 4px;
3512
+ }
3513
+
3514
+ .logs-level-chip {
3515
+ display: flex;
3516
+ align-items: center;
3517
+ gap: 3px;
3518
+ padding: 2px 6px;
3519
+ border-radius: 4px;
3520
+ background: rgba(255, 255, 255, 0.03);
3521
+ border: 1px solid rgba(255, 255, 255, 0.06);
3522
+ cursor: pointer;
3523
+ font-family: var(--font-mono);
3524
+ font-size: 9px;
3525
+ font-weight: 600;
3526
+ letter-spacing: 0.06em;
3527
+ transition: all 0.15s;
3528
+ }
3529
+ .logs-level-chip:hover {
3530
+ background: rgba(255, 255, 255, 0.06);
3531
+ border-color: rgba(255, 255, 255, 0.12);
3532
+ }
3533
+ .logs-level-chip input[type="checkbox"] {
3534
+ display: none;
3535
+ }
3536
+ .logs-level-chip:has(input:not(:checked)) {
3537
+ opacity: 0.35;
3538
+ }
3539
+
3540
+ .log-row {
3541
+ display: flex;
3542
+ align-items: baseline;
3543
+ gap: 10px;
3544
+ padding: 3px 16px;
3545
+ font-family: var(--font-mono);
3546
+ font-size: 10px;
3547
+ line-height: 1.5;
3548
+ border-bottom: 1px solid rgba(255, 255, 255, 0.02);
3549
+ }
3550
+ .log-row:hover {
3551
+ background: rgba(255, 255, 255, 0.02);
3552
+ }
3553
+
3554
+ .log-time {
3555
+ color: rgba(255, 255, 255, 0.2);
3556
+ flex-shrink: 0;
3557
+ width: 65px;
3558
+ }
3559
+
3560
+ .log-level {
3561
+ flex-shrink: 0;
3562
+ width: 45px;
3563
+ font-weight: 700;
3564
+ letter-spacing: 0.04em;
3565
+ }
3566
+
3567
+ .log-sub {
3568
+ color: rgba(0, 212, 255, 0.5);
3569
+ flex-shrink: 0;
3570
+ max-width: 120px;
3571
+ overflow: hidden;
3572
+ text-overflow: ellipsis;
3573
+ white-space: nowrap;
3574
+ }
3575
+
3576
+ .log-msg {
3577
+ color: rgba(255, 255, 255, 0.6);
3578
+ overflow: hidden;
3579
+ text-overflow: ellipsis;
3580
+ white-space: nowrap;
3581
+ flex: 1;
3582
+ min-width: 0;
3583
+ }
3584
+
3585
+ /* ══════════════════════════════════════════════════════════════════════
3586
+ CONNECTIONS PANEL
3587
+ ══════════════════════════════════════════════════════════════════════ */
3588
+
3149
3589
  .connections-panel {
3150
3590
  display: flex;
3151
3591
  flex-direction: column;