@juspay/shooter 1.16.0 → 1.18.0

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 (175) hide show
  1. package/.claude/hooks/codex-hooks.example.json +75 -0
  2. package/.claude/hooks/notifier.cjs +158 -8
  3. package/build/client/_app/immutable/assets/{0.DEfoFaGR.css → 0.NV8k8wxG.css} +1 -1
  4. package/build/client/_app/immutable/assets/0.NV8k8wxG.css.br +0 -0
  5. package/build/client/_app/immutable/assets/0.NV8k8wxG.css.gz +0 -0
  6. package/build/client/_app/immutable/chunks/8lO1IL7u.js +1 -0
  7. package/build/client/_app/immutable/chunks/8lO1IL7u.js.br +0 -0
  8. package/build/client/_app/immutable/chunks/8lO1IL7u.js.gz +0 -0
  9. package/build/client/_app/immutable/chunks/B9WQy_3X.js +1 -0
  10. package/build/client/_app/immutable/chunks/B9WQy_3X.js.br +0 -0
  11. package/build/client/_app/immutable/chunks/B9WQy_3X.js.gz +0 -0
  12. package/build/client/_app/immutable/chunks/BdtLzPpO.js +1 -0
  13. package/build/client/_app/immutable/chunks/BdtLzPpO.js.br +0 -0
  14. package/build/client/_app/immutable/chunks/BdtLzPpO.js.gz +0 -0
  15. package/build/client/_app/immutable/chunks/{DlS3abGJ.js → DJvX78LW.js} +1 -1
  16. package/build/client/_app/immutable/chunks/DJvX78LW.js.br +0 -0
  17. package/build/client/_app/immutable/chunks/DJvX78LW.js.gz +0 -0
  18. package/build/client/_app/immutable/chunks/nWG9RHyB.js +3 -0
  19. package/build/client/_app/immutable/chunks/nWG9RHyB.js.br +0 -0
  20. package/build/client/_app/immutable/chunks/nWG9RHyB.js.gz +0 -0
  21. package/build/client/_app/immutable/entry/{app.CSJG7N9H.js → app.f46Ko1hu.js} +2 -2
  22. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.br +0 -0
  23. package/build/client/_app/immutable/entry/app.f46Ko1hu.js.gz +0 -0
  24. package/build/client/_app/immutable/entry/start.BVDjNnXt.js +1 -0
  25. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.br +2 -0
  26. package/build/client/_app/immutable/entry/start.BVDjNnXt.js.gz +0 -0
  27. package/build/client/_app/immutable/nodes/{0.qOL7xtFn.js → 0.D_9EwVmq.js} +1 -1
  28. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.br +0 -0
  29. package/build/client/_app/immutable/nodes/0.D_9EwVmq.js.gz +0 -0
  30. package/build/client/_app/immutable/nodes/{1.Di708Ago.js → 1.C4eFlqSB.js} +1 -1
  31. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.br +0 -0
  32. package/build/client/_app/immutable/nodes/1.C4eFlqSB.js.gz +0 -0
  33. package/build/client/_app/immutable/nodes/{2.DSM1znqa.js → 2.CdC092Za.js} +1 -1
  34. package/build/client/_app/immutable/nodes/2.CdC092Za.js.br +0 -0
  35. package/build/client/_app/immutable/nodes/2.CdC092Za.js.gz +0 -0
  36. package/build/client/_app/immutable/nodes/{3.BPa5fh75.js → 3.Dhf4ZWW0.js} +1 -1
  37. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.br +0 -0
  38. package/build/client/_app/immutable/nodes/3.Dhf4ZWW0.js.gz +0 -0
  39. package/build/client/_app/immutable/nodes/6.B3SEB_li.js +1 -0
  40. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.br +0 -0
  41. package/build/client/_app/immutable/nodes/6.B3SEB_li.js.gz +0 -0
  42. package/build/client/_app/immutable/nodes/{7.B7UJd8GQ.js → 7.DV8cJ1lX.js} +3 -3
  43. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.br +0 -0
  44. package/build/client/_app/immutable/nodes/7.DV8cJ1lX.js.gz +0 -0
  45. package/build/client/_app/immutable/nodes/8.Bs362gyb.js +2 -0
  46. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.br +0 -0
  47. package/build/client/_app/immutable/nodes/8.Bs362gyb.js.gz +0 -0
  48. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js +2 -0
  49. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.br +0 -0
  50. package/build/client/_app/immutable/nodes/9.Cf7_3uqT.js.gz +0 -0
  51. package/build/client/_app/version.json +1 -1
  52. package/build/client/_app/version.json.br +0 -0
  53. package/build/client/_app/version.json.gz +0 -0
  54. package/build/server/chunks/{0-D8uPamNd.js → 0-Cd7jY0a7.js} +3 -3
  55. package/build/server/chunks/{0-D8uPamNd.js.map → 0-Cd7jY0a7.js.map} +1 -1
  56. package/build/server/chunks/{1-DhtioHbs.js → 1-C4BOGoJY.js} +2 -2
  57. package/build/server/chunks/{1-DhtioHbs.js.map → 1-C4BOGoJY.js.map} +1 -1
  58. package/build/server/chunks/{2-Cgh7ZFgE.js → 2-Ba0mNwJ6.js} +2 -2
  59. package/build/server/chunks/{2-Cgh7ZFgE.js.map → 2-Ba0mNwJ6.js.map} +1 -1
  60. package/build/server/chunks/{3-I6hnjssH.js → 3-Pg8t1uJU.js} +2 -2
  61. package/build/server/chunks/{3-I6hnjssH.js.map → 3-Pg8t1uJU.js.map} +1 -1
  62. package/build/server/chunks/{6-bPDbH1_W.js → 6-D8xbnTSo.js} +2 -2
  63. package/build/server/chunks/6-D8xbnTSo.js.map +1 -0
  64. package/build/server/chunks/{7-CpBrOkxQ.js → 7-CkVK06S0.js} +2 -2
  65. package/build/server/chunks/7-CkVK06S0.js.map +1 -0
  66. package/build/server/chunks/{8-BRGAVfze.js → 8-C8qVhrds.js} +2 -2
  67. package/build/server/chunks/8-C8qVhrds.js.map +1 -0
  68. package/build/server/chunks/{9-C6xuAb_Y.js → 9-fL5zqN0T.js} +2 -2
  69. package/build/server/chunks/9-fL5zqN0T.js.map +1 -0
  70. package/build/server/chunks/{_server.ts-BrRZXr-8.js → _server.ts-BA_uWcPw.js} +9 -9
  71. package/build/server/chunks/_server.ts-BA_uWcPw.js.map +1 -0
  72. package/build/server/chunks/{_server.ts-C6xbNz6d.js → _server.ts-Bu3s5hfv.js} +3 -3
  73. package/build/server/chunks/{_server.ts-C6xbNz6d.js.map → _server.ts-Bu3s5hfv.js.map} +1 -1
  74. package/build/server/chunks/{_server.ts-Cq9_scaV.js → _server.ts-CwAjt91u.js} +18 -18
  75. package/build/server/chunks/_server.ts-CwAjt91u.js.map +1 -0
  76. package/build/server/chunks/{_server.ts-CFX-S_8q.js → _server.ts-DZ5naqSL.js} +2 -2
  77. package/build/server/chunks/{_server.ts-CFX-S_8q.js.map → _server.ts-DZ5naqSL.js.map} +1 -1
  78. package/build/server/chunks/{_server.ts-Dekgb6Hx.js → _server.ts-DZP2lhaY.js} +3 -3
  79. package/build/server/chunks/{_server.ts-Dekgb6Hx.js.map → _server.ts-DZP2lhaY.js.map} +1 -1
  80. package/build/server/chunks/_server.ts-DZgfQKiH.js +81 -0
  81. package/build/server/chunks/_server.ts-DZgfQKiH.js.map +1 -0
  82. package/build/server/chunks/{_server.ts-CjK0g9dO.js → _server.ts-MbnroWEF.js} +25 -16
  83. package/build/server/chunks/_server.ts-MbnroWEF.js.map +1 -0
  84. package/build/server/chunks/{pty-manager-aFpChJah.js → pty-manager-DmNSCKAr.js} +99 -2
  85. package/build/server/chunks/pty-manager-DmNSCKAr.js.map +1 -0
  86. package/build/server/chunks/qwen-reader-DGfUbKaJ.js +2112 -0
  87. package/build/server/chunks/qwen-reader-DGfUbKaJ.js.map +1 -0
  88. package/build/server/chunks/{_server.ts-D--_NXt2.js → registry-Kcw2UCMv.js} +132 -106
  89. package/build/server/chunks/registry-Kcw2UCMv.js.map +1 -0
  90. package/build/server/index.js +1 -1
  91. package/build/server/index.js.map +1 -1
  92. package/build/server/manifest.js +16 -16
  93. package/build/server/manifest.js.map +1 -1
  94. package/package.json +2 -2
  95. package/scripts/e2e-all-features.sh +165 -0
  96. package/scripts/e2e-cross-terminal.sh +168 -0
  97. package/server.ts +12 -0
  98. package/src/lib/modules/client/common/index.ts +1 -1
  99. package/src/lib/modules/client/common/provider.ts +11 -0
  100. package/src/lib/modules/client/terminal/ChatView.svelte +9 -2
  101. package/src/lib/modules/client/terminal/LaunchSheet.svelte +4 -0
  102. package/src/lib/modules/server/sessions/amp-reader.ts +439 -0
  103. package/src/lib/modules/server/sessions/codex-reader.ts +34 -33
  104. package/src/lib/modules/server/sessions/copilot-reader.ts +542 -0
  105. package/src/lib/modules/server/sessions/cursor-reader.ts +634 -0
  106. package/src/lib/modules/server/sessions/gemini-reader.ts +594 -0
  107. package/src/lib/modules/server/sessions/opencode-db-path.ts +19 -10
  108. package/src/lib/modules/server/sessions/opencode-reader.ts +13 -12
  109. package/src/lib/modules/server/sessions/process-detector.ts +39 -18
  110. package/src/lib/modules/server/sessions/provider-paths.ts +173 -0
  111. package/src/lib/modules/server/sessions/qwen-reader.ts +336 -0
  112. package/src/lib/modules/server/sessions/registry.ts +178 -0
  113. package/src/lib/modules/server/terminal/codex-watcher.ts +4 -1
  114. package/src/lib/modules/server/terminal/generic-session-watcher.ts +163 -0
  115. package/src/lib/modules/server/terminal/pty-manager.ts +51 -0
  116. package/src/lib/modules/server/ws/session-handler.ts +34 -20
  117. package/src/lib/theme.css +32 -0
  118. package/src/lib/types/gemini.ts +100 -0
  119. package/src/lib/types/generated/Sessions.ts +17 -1
  120. package/src/lib/types/index.ts +1 -0
  121. package/src/lib/types/server.ts +23 -6
  122. package/src/lib/types/sessions.ts +14 -2
  123. package/src/routes/api/sessions/+server.ts +5 -52
  124. package/src/routes/api/sessions/connect/+server.ts +18 -11
  125. package/src/routes/api/terminals/+server.ts +7 -5
  126. package/src/routes/terminals/+page.svelte +7 -2
  127. package/src/routes/terminals/[id]/+page.svelte +1 -2
  128. package/build/client/_app/immutable/assets/0.DEfoFaGR.css.br +0 -0
  129. package/build/client/_app/immutable/assets/0.DEfoFaGR.css.gz +0 -0
  130. package/build/client/_app/immutable/chunks/Bkqjn62J.js +0 -1
  131. package/build/client/_app/immutable/chunks/Bkqjn62J.js.br +0 -1
  132. package/build/client/_app/immutable/chunks/Bkqjn62J.js.gz +0 -0
  133. package/build/client/_app/immutable/chunks/DOHhmtDH.js +0 -3
  134. package/build/client/_app/immutable/chunks/DOHhmtDH.js.br +0 -0
  135. package/build/client/_app/immutable/chunks/DOHhmtDH.js.gz +0 -0
  136. package/build/client/_app/immutable/chunks/DlS3abGJ.js.br +0 -0
  137. package/build/client/_app/immutable/chunks/DlS3abGJ.js.gz +0 -0
  138. package/build/client/_app/immutable/chunks/Pw0jDB7M.js +0 -1
  139. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.br +0 -0
  140. package/build/client/_app/immutable/chunks/Pw0jDB7M.js.gz +0 -0
  141. package/build/client/_app/immutable/entry/app.CSJG7N9H.js.br +0 -0
  142. package/build/client/_app/immutable/entry/app.CSJG7N9H.js.gz +0 -0
  143. package/build/client/_app/immutable/entry/start.CTt1901T.js +0 -1
  144. package/build/client/_app/immutable/entry/start.CTt1901T.js.br +0 -2
  145. package/build/client/_app/immutable/entry/start.CTt1901T.js.gz +0 -0
  146. package/build/client/_app/immutable/nodes/0.qOL7xtFn.js.br +0 -0
  147. package/build/client/_app/immutable/nodes/0.qOL7xtFn.js.gz +0 -0
  148. package/build/client/_app/immutable/nodes/1.Di708Ago.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/1.Di708Ago.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/2.DSM1znqa.js.br +0 -0
  151. package/build/client/_app/immutable/nodes/2.DSM1znqa.js.gz +0 -0
  152. package/build/client/_app/immutable/nodes/3.BPa5fh75.js.br +0 -0
  153. package/build/client/_app/immutable/nodes/3.BPa5fh75.js.gz +0 -0
  154. package/build/client/_app/immutable/nodes/6.B1LwwEF-.js +0 -1
  155. package/build/client/_app/immutable/nodes/6.B1LwwEF-.js.br +0 -0
  156. package/build/client/_app/immutable/nodes/6.B1LwwEF-.js.gz +0 -0
  157. package/build/client/_app/immutable/nodes/7.B7UJd8GQ.js.br +0 -0
  158. package/build/client/_app/immutable/nodes/7.B7UJd8GQ.js.gz +0 -0
  159. package/build/client/_app/immutable/nodes/8.CG0mrgBU.js +0 -2
  160. package/build/client/_app/immutable/nodes/8.CG0mrgBU.js.br +0 -0
  161. package/build/client/_app/immutable/nodes/8.CG0mrgBU.js.gz +0 -0
  162. package/build/client/_app/immutable/nodes/9.KwzWaMHj.js +0 -2
  163. package/build/client/_app/immutable/nodes/9.KwzWaMHj.js.br +0 -0
  164. package/build/client/_app/immutable/nodes/9.KwzWaMHj.js.gz +0 -0
  165. package/build/server/chunks/6-bPDbH1_W.js.map +0 -1
  166. package/build/server/chunks/7-CpBrOkxQ.js.map +0 -1
  167. package/build/server/chunks/8-BRGAVfze.js.map +0 -1
  168. package/build/server/chunks/9-C6xuAb_Y.js.map +0 -1
  169. package/build/server/chunks/_server.ts-BrRZXr-8.js.map +0 -1
  170. package/build/server/chunks/_server.ts-CjK0g9dO.js.map +0 -1
  171. package/build/server/chunks/_server.ts-Cq9_scaV.js.map +0 -1
  172. package/build/server/chunks/_server.ts-D--_NXt2.js.map +0 -1
  173. package/build/server/chunks/opencode-db-path-CRgzBK5U.js +0 -402
  174. package/build/server/chunks/opencode-db-path-CRgzBK5U.js.map +0 -1
  175. package/build/server/chunks/pty-manager-aFpChJah.js.map +0 -1
@@ -0,0 +1,75 @@
1
+ {
2
+ "_comment": "Copy to ~/.codex/hooks.json (global) or <project>/.codex/hooks.json (per-project).",
3
+ "_comment2": "Replace /ABSOLUTE/PATH/TO/PROJECT with the real absolute path to this repository.",
4
+ "_comment3": "Set SHOOTER_USE_LOCAL=true and SHOOTER_LOCAL_PORT=54007 if the server runs locally,",
5
+ "_comment4": "or set SHOOTER_API_URL=https://<your-tunnel>.trycloudflare.com for remote access.",
6
+ "hooks": {
7
+ "SessionStart": [
8
+ {
9
+ "matcher": "",
10
+ "hooks": [
11
+ {
12
+ "type": "command",
13
+ "command": "SHOOTER_USE_LOCAL=true SHOOTER_LOCAL_PORT=${SHOOTER_LOCAL_PORT:-54007} API_KEY=$API_KEY node /ABSOLUTE/PATH/TO/PROJECT/.claude/hooks/notifier.cjs codex SessionStart"
14
+ }
15
+ ]
16
+ }
17
+ ],
18
+ "UserPromptSubmit": [
19
+ {
20
+ "matcher": "",
21
+ "hooks": [
22
+ {
23
+ "type": "command",
24
+ "command": "SHOOTER_USE_LOCAL=true SHOOTER_LOCAL_PORT=${SHOOTER_LOCAL_PORT:-54007} API_KEY=$API_KEY node /ABSOLUTE/PATH/TO/PROJECT/.claude/hooks/notifier.cjs codex UserPromptSubmit"
25
+ }
26
+ ]
27
+ }
28
+ ],
29
+ "PreToolUse": [
30
+ {
31
+ "matcher": "",
32
+ "hooks": [
33
+ {
34
+ "type": "command",
35
+ "command": "SHOOTER_USE_LOCAL=true SHOOTER_LOCAL_PORT=${SHOOTER_LOCAL_PORT:-54007} API_KEY=$API_KEY node /ABSOLUTE/PATH/TO/PROJECT/.claude/hooks/notifier.cjs codex PreToolUse"
36
+ }
37
+ ]
38
+ }
39
+ ],
40
+ "PostToolUse": [
41
+ {
42
+ "matcher": "",
43
+ "hooks": [
44
+ {
45
+ "type": "command",
46
+ "command": "SHOOTER_USE_LOCAL=true SHOOTER_LOCAL_PORT=${SHOOTER_LOCAL_PORT:-54007} API_KEY=$API_KEY node /ABSOLUTE/PATH/TO/PROJECT/.claude/hooks/notifier.cjs codex PostToolUse"
47
+ }
48
+ ]
49
+ }
50
+ ],
51
+ "Stop": [
52
+ {
53
+ "matcher": "",
54
+ "hooks": [
55
+ {
56
+ "type": "command",
57
+ "command": "SHOOTER_USE_LOCAL=true SHOOTER_LOCAL_PORT=${SHOOTER_LOCAL_PORT:-54007} API_KEY=$API_KEY node /ABSOLUTE/PATH/TO/PROJECT/.claude/hooks/notifier.cjs codex Stop"
58
+ }
59
+ ]
60
+ }
61
+ ],
62
+ "PermissionRequest": [
63
+ {
64
+ "matcher": "",
65
+ "hooks": [
66
+ {
67
+ "type": "command",
68
+ "command": "SHOOTER_USE_LOCAL=true SHOOTER_LOCAL_PORT=${SHOOTER_LOCAL_PORT:-54007} API_KEY=$API_KEY node /ABSOLUTE/PATH/TO/PROJECT/.claude/hooks/notifier.cjs codex PermissionRequest",
69
+ "timeout": 180
70
+ }
71
+ ]
72
+ }
73
+ ]
74
+ }
75
+ }
@@ -24,12 +24,17 @@ const path = require('path');
24
24
  // ============================================
25
25
 
26
26
  // Detect runtime environment
27
+ // Codex mode: invoked as `node notifier.cjs codex <HookEventName>`
28
+ const IS_CODEX =
29
+ require.main === module &&
30
+ process.argv[2] === 'codex';
27
31
  const IS_OPENCODE =
28
- typeof process.env.OPENCODE_VERSION !== 'undefined' ||
29
- require.main !== module ||
30
- process.argv[1]?.includes('opencode');
31
- const IS_CLAUDE_CODE = !IS_OPENCODE && require.main === module;
32
- const RUNTIME = IS_OPENCODE ? 'opencode' : 'claude-code';
32
+ !IS_CODEX &&
33
+ (typeof process.env.OPENCODE_VERSION !== 'undefined' ||
34
+ require.main !== module ||
35
+ process.argv[1]?.includes('opencode'));
36
+ const IS_CLAUDE_CODE = !IS_OPENCODE && !IS_CODEX && require.main === module;
37
+ const RUNTIME = IS_OPENCODE ? 'opencode' : IS_CODEX ? 'codex' : 'claude-code';
33
38
 
34
39
  // Environment configuration
35
40
  const USE_LOCAL = process.env.SHOOTER_USE_LOCAL === 'true';
@@ -58,8 +63,8 @@ const API_KEY = process.env.API_KEY || process.env.SHOOTER_API_KEY;
58
63
  const DEVICE_TOKEN = process.env.SHOOTER_DEVICE_TOKEN || null;
59
64
  const AUTH_KEY = API_KEY || '';
60
65
 
61
- // Validate required environment variables ONLY for Claude Code CLI mode
62
- if (IS_CLAUDE_CODE && !API_KEY) {
66
+ // Validate required environment variables for Claude Code and Codex CLI modes
67
+ if ((IS_CLAUDE_CODE || IS_CODEX) && !API_KEY) {
63
68
  console.error('API_KEY environment variable is required');
64
69
  process.exit(1);
65
70
  }
@@ -421,6 +426,97 @@ function adaptOpenCodeEvent(hookEventType, hookData = {}) {
421
426
  return createCommonEvent('opencode', eventType, data);
422
427
  }
423
428
 
429
+ /**
430
+ * Adapter: Codex CLI hooks.json hook payload -> Common Event Format
431
+ *
432
+ * Codex delivers a JSON payload via stdin with at minimum:
433
+ * { hook_event_name, session_id, turn_id, transcript_path,
434
+ * model, permission_mode, cwd }
435
+ *
436
+ * The second CLI arg (`process.argv[3]`) is the HookEventName and
437
+ * duplicates `hook_event_name` in the payload — either works for routing.
438
+ *
439
+ * Event name mapping (Codex → common vocabulary):
440
+ * SessionStart → session.start
441
+ * UserPromptSubmit → user.prompt
442
+ * PreToolUse → tool.before
443
+ * PostToolUse → tool.after
444
+ * Stop → session.idle
445
+ * PermissionRequest → permission
446
+ * SubagentStart → subagent.start
447
+ * SubagentStop → subagent.stop
448
+ * PreCompact → context.compact
449
+ * (unknown) → unknown
450
+ */
451
+ function adaptCodexEvent(stdinData) {
452
+ // Prefer the payload field; fall back to the CLI arg (argv[3]).
453
+ const hookEventName =
454
+ (stdinData && stdinData.hook_event_name) ||
455
+ process.argv[3] ||
456
+ 'Unknown';
457
+
458
+ const data = {};
459
+ data.sessionId = stdinData?.session_id || '';
460
+ data.turnId = stdinData?.turn_id || '';
461
+ data.cwd = stdinData?.cwd || process.cwd();
462
+ data.model = stdinData?.model || '';
463
+ data.permissionMode = stdinData?.permission_mode || '';
464
+ data.transcriptPath = stdinData?.transcript_path || '';
465
+
466
+ switch (hookEventName) {
467
+ case 'SessionStart':
468
+ data.source = stdinData?.source || '';
469
+ return createCommonEvent('codex', 'session.start', data);
470
+
471
+ case 'UserPromptSubmit':
472
+ data.message = stdinData?.prompt || '';
473
+ return createCommonEvent('codex', 'user.prompt', data);
474
+
475
+ case 'PreToolUse':
476
+ data.tool = stdinData?.tool_name || 'Unknown';
477
+ data.toolInput = stdinData?.tool_input || {};
478
+ data.command = data.toolInput.command || data.toolInput.cmd || '';
479
+ data.filePath = data.toolInput.file_path || '';
480
+ return createCommonEvent('codex', 'tool.before', data);
481
+
482
+ case 'PostToolUse':
483
+ data.tool = stdinData?.tool_name || 'Unknown';
484
+ data.toolInput = stdinData?.tool_input || {};
485
+ data.command = data.toolInput.command || data.toolInput.cmd || '';
486
+ data.filePath = data.toolInput.file_path || '';
487
+ data.toolResponse = stdinData?.tool_response || '';
488
+ return createCommonEvent('codex', 'tool.after', data);
489
+
490
+ case 'PermissionRequest':
491
+ data.tool = stdinData?.tool_name || 'Unknown';
492
+ data.toolInput = stdinData?.tool_input || {};
493
+ data.command = data.toolInput.command || data.toolInput.cmd || '';
494
+ data.filePath = data.toolInput.file_path || '';
495
+ data.description = data.toolInput.description || '';
496
+ return createCommonEvent('codex', 'permission', data);
497
+
498
+ case 'Stop':
499
+ data.lastAssistantMessage = stdinData?.last_assistant_message || '';
500
+ return createCommonEvent('codex', 'session.idle', data);
501
+
502
+ case 'SubagentStart':
503
+ data.agentType = stdinData?.agent_type || 'unknown';
504
+ data.source = stdinData?.source || '';
505
+ return createCommonEvent('codex', 'subagent.start', data);
506
+
507
+ case 'SubagentStop':
508
+ data.agentType = stdinData?.agent_type || 'unknown';
509
+ return createCommonEvent('codex', 'subagent.stop', data);
510
+
511
+ case 'PreCompact':
512
+ return createCommonEvent('codex', 'context.compact', data);
513
+
514
+ default:
515
+ data.rawHookEventName = hookEventName;
516
+ return createCommonEvent('codex', 'unknown', data);
517
+ }
518
+ }
519
+
424
520
  // ============================================
425
521
  // SECTION 5: Project / Session Identification
426
522
  // ============================================
@@ -1069,7 +1165,16 @@ function toolVerb(toolName) {
1069
1165
  * intentionally omitted — `data.environment` carries it for debug consumers.
1070
1166
  */
1071
1167
  function buildFooter(source) {
1072
- const runtime = source === 'opencode' ? 'opencode' : 'claude code';
1168
+ let runtime;
1169
+ if (source === 'opencode') {
1170
+ runtime = 'opencode';
1171
+ } else if (source === 'codex') {
1172
+ runtime = 'codex cli';
1173
+ } else if (source === 'gemini') {
1174
+ runtime = 'gemini cli';
1175
+ } else {
1176
+ runtime = 'claude code';
1177
+ }
1073
1178
  return `— ${runtime}`;
1074
1179
  }
1075
1180
 
@@ -1947,6 +2052,36 @@ const OpenCodePlugin = async (ctx) => {
1947
2052
  };
1948
2053
  };
1949
2054
 
2055
+ // ============================================
2056
+ // 11C: Codex CLI Entry Point
2057
+ // ============================================
2058
+
2059
+ async function codexMain() {
2060
+ if (!USE_LOCAL && !REMOTE_BASE_URL) {
2061
+ console.error(
2062
+ 'SHOOTER_API_URL environment variable is required when SHOOTER_USE_LOCAL is not true'
2063
+ );
2064
+ process.exit(1);
2065
+ }
2066
+
2067
+ const hookEventName = process.argv[3] || 'Unknown';
2068
+
2069
+ debugLog(`Shooter Notifier Codex CLI invoked: ${hookEventName}`);
2070
+ debugLog(` Runtime: ${RUNTIME}`);
2071
+ debugLog(` Environment: ${USE_LOCAL ? 'LOCAL' : 'REMOTE'}`);
2072
+
2073
+ const stdinData = await readStdin();
2074
+ if (stdinData) {
2075
+ debugLog(` Stdin data received: ${JSON.stringify(stdinData).substring(0, 500)}`);
2076
+ } else {
2077
+ debugLog(` No stdin data`);
2078
+ }
2079
+
2080
+ const event = adaptCodexEvent(stdinData);
2081
+
2082
+ await processEvent(event);
2083
+ }
2084
+
1950
2085
  // ============================================
1951
2086
  // Exports and Main Execution
1952
2087
  // ============================================
@@ -1971,6 +2106,8 @@ if (typeof module !== 'undefined' && module.exports) {
1971
2106
  module.exports.categoryForOptionCount = categoryForOptionCount;
1972
2107
  module.exports.extractAskUserQuestionOptions = extractAskUserQuestionOptions;
1973
2108
  module.exports.extractElicitationChoices = extractElicitationChoices;
2109
+ // Codex adapter (tests + wiring).
2110
+ module.exports.adaptCodexEvent = adaptCodexEvent;
1974
2111
  }
1975
2112
 
1976
2113
  // Run main() when called directly from CLI (Claude Code)
@@ -1986,3 +2123,16 @@ if (IS_CLAUDE_CODE) {
1986
2123
 
1987
2124
  claudeCodeMain();
1988
2125
  }
2126
+
2127
+ // Run Codex main when invoked as `node notifier.cjs codex <HookEventName>`
2128
+ if (IS_CODEX) {
2129
+ process.on('SIGINT', () => {
2130
+ process.exit(0);
2131
+ });
2132
+
2133
+ process.on('SIGTERM', () => {
2134
+ process.exit(0);
2135
+ });
2136
+
2137
+ codexMain();
2138
+ }
@@ -1 +1 @@
1
- :root{--ds-background-100: #0a0a0a;--ds-background-200: #000000;--ds-gray-100: #1a1a1a;--ds-gray-200: #1f1f1f;--ds-gray-300: #292929;--ds-gray-400: #2e2e2e;--ds-gray-500: #454545;--ds-gray-600: #878787;--ds-gray-700: #8f8f8f;--ds-gray-800: #7d7d7d;--ds-gray-900: #a1a1a1;--ds-gray-1000: #ededed;--ds-gray-alpha-100: rgba(255, 255, 255, .06);--ds-gray-alpha-200: rgba(255, 255, 255, .09);--ds-gray-alpha-300: rgba(255, 255, 255, .13);--ds-gray-alpha-400: rgba(255, 255, 255, .14);--ds-blue-100: #0d1d33;--ds-blue-700: #0070f3;--ds-blue-900: #52a8ff;--ds-red-100: #2a1314;--ds-red-700: #e5484d;--ds-red-900: #ff6166;--ds-green-100: #0d1f12;--ds-green-alpha-200: rgba(34, 197, 94, .15);--ds-green-alpha-400: rgba(34, 197, 94, .3);--ds-green-500: #4ade80;--ds-green-700: #46a758;--ds-green-900: #62c073;--ds-amber-100: #271700;--ds-amber-700: #f5a623;--ds-amber-900: #ffb224;--background: var(--ds-background-100);--background-secondary: var(--ds-background-200);--component-bg: var(--ds-gray-100);--component-bg-hover: var(--ds-gray-200);--component-bg-active: var(--ds-gray-300);--border: var(--ds-gray-400);--border-hover: var(--ds-gray-500);--border-active: var(--ds-gray-600);--text-primary: var(--ds-gray-1000);--text-secondary: var(--ds-gray-900);--text-tertiary: var(--ds-gray-800);--font-sans: "Geist", -apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-mono: "Geist Mono", "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", monospace;--text-xs: 12px;--text-sm: 13px;--text-base: 14px;--text-md: 15px;--text-lg: 16px;--text-xl: 20px;--text-2xl: 24px;--text-3xl: 32px;--text-4xl: 40px;--leading-none: 1;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.625;--tracking-tighter: -.04em;--tracking-tight: -.02em;--tracking-normal: 0;--space-0: 0;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--radius-full: 9999px;--transition-fast: .15s ease;--transition-normal: .2s ease;--max-width: 1100px;--header-height: 64px}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal);background:var(--background);color:var(--text-primary);min-height:100vh}.app{height:100vh;display:flex;flex-direction:column;overflow:hidden}.header{height:var(--header-height);background:var(--background);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100}.header-content{max-width:var(--max-width);height:100%;margin:0 auto;padding:0 var(--space-6);display:flex;justify-content:space-between;align-items:center}.logo{display:flex;align-items:center;gap:var(--space-3);text-decoration:none;color:inherit}.logo-icon{width:24px;height:24px;flex-shrink:0}.logo-text{font-size:var(--text-md);font-weight:500;letter-spacing:var(--tracking-tight);color:var(--text-primary)}.nav{display:flex;align-items:center;gap:var(--space-1)}.nav-link{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--text-sm);font-weight:400;color:var(--text-secondary);text-decoration:none;background:transparent;border:none;cursor:pointer;transition:color var(--transition-fast),background var(--transition-fast)}.nav-link:hover{color:var(--text-primary);background:var(--component-bg)}.nav-link.active{color:var(--text-primary)}.main{flex:1;max-width:var(--max-width);width:100%;margin:0 auto;padding:var(--space-8) var(--space-6)}.page-header{margin-bottom:var(--space-8)}.page-title{font-size:var(--text-2xl);font-weight:600;letter-spacing:var(--tracking-tighter);color:var(--text-primary);line-height:var(--leading-tight);margin-bottom:var(--space-2)}.page-description{font-size:var(--text-sm);color:var(--text-secondary);line-height:var(--leading-normal)}.page-header-content{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4)}.page-actions{display:flex;gap:var(--space-2);flex-shrink:0}@media(max-width:768px){.page-header-content{flex-direction:column;gap:var(--space-4)}}@media(max-width:480px){.page-actions{width:100%}.page-actions>*{flex:1}}.status-dot-active{width:8px;height:8px;border-radius:50%;background:var(--ds-green-500);animation:activity-pulse .6s ease-in-out infinite}.status-dot-idle,.status-dot-static{width:8px;height:8px;border-radius:50%;background:var(--ds-gray-600)}@keyframes activity-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.7}}.connection-dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.connection-dot.connected{background:var(--ds-green-500)}.connection-dot.reconnecting{background:var(--ds-amber-700);animation:pulse-dot 1.5s ease-in-out infinite}.connection-dot.disconnected{background:var(--ds-red-700)}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}.card{background:var(--component-bg);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.card-header{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--ds-gray-alpha-200)}.card-title{font-size:var(--text-sm);font-weight:500;color:var(--text-primary);line-height:var(--leading-tight)}.card-description{font-size:var(--text-sm);color:var(--text-tertiary);margin-top:var(--space-1);line-height:var(--leading-normal)}.card-content{padding:var(--space-5)}.status-badge{display:inline-flex;align-items:center;gap:var(--space-2);height:26px;padding:0 var(--space-3);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.02em}.status-badge.online{background:var(--ds-green-100);color:var(--ds-green-900)}.status-badge.offline{background:var(--ds-red-100);color:var(--ds-red-900)}.status-badge.degraded{background:var(--ds-amber-100);color:var(--ds-amber-900)}.status-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--space-16) var(--space-6)}@media(max-width:768px){.empty-state{padding:var(--space-8) var(--space-4)}}@media(max-width:480px){.empty-state{padding:var(--space-6) var(--space-3)}}.empty-state-icon{width:48px;height:48px;margin:0 auto var(--space-5);background:var(--component-bg);border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center}.empty-state-icon svg{width:24px;height:24px;color:var(--text-tertiary)}.empty-state-title{font-size:var(--text-lg);font-weight:600;color:var(--text-primary);margin-bottom:var(--space-2)}.empty-state-description{font-size:var(--text-sm);color:var(--text-secondary);max-width:320px;margin:0 auto var(--space-6);line-height:var(--leading-relaxed)}.list{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.list-item{display:flex;align-items:center;padding:var(--space-4) var(--space-5);background:var(--component-bg);border-bottom:1px solid var(--ds-gray-alpha-200);transition:background var(--transition-fast)}.list-item:last-child{border-bottom:none}.list-item:hover{background:var(--component-bg-hover)}.code{font-family:var(--font-mono);font-size:var(--text-xs);background:var(--component-bg);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);color:var(--text-secondary)}.divider{height:1px;background:var(--border);margin:var(--space-6) 0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:768px){:root{--header-height: 56px}.header-content{padding:0 var(--space-4)}.main{padding:var(--space-6) var(--space-4)}.page-title{font-size:var(--text-xl)}.hide-mobile{display:none}}@media(max-width:480px){:root{--header-height: 48px}.main{padding:var(--space-4) var(--space-3)}.header-content{padding:0 var(--space-3)}.logo{gap:var(--space-2)}.logo-text{font-size:var(--text-sm)}.nav{gap:0}.nav-link{padding:var(--space-3) var(--space-2);font-size:13px;min-height:44px;display:inline-flex;align-items:center}.btn{min-height:44px;height:auto;padding:10px 16px}.btn-sm,.input{min-height:44px;height:auto;padding:10px 12px}}.btn:focus-visible,.input:focus-visible,.nav-link:focus-visible{outline:2px solid var(--ds-blue-700);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}::selection{background:var(--ds-blue-700);color:#fff}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--ds-gray-400);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--ds-gray-500)}.session-card{background:linear-gradient(135deg,#141414e6,#1c1c20e6);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-lg, 14px);padding:var(--space-5, 1.25rem) var(--space-5, 1.25rem);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden;min-width:0;gap:var(--space-3, .75rem);position:relative;text-decoration:none;box-shadow:0 1px 3px #0000004d,0 0 0 1px #ffffff08 inset}.session-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,#22c55e,#16a34a);border-radius:3px 0 0 3px;opacity:.7;transition:opacity .25s}.session-card:hover{border-color:#22c55e4d;background:linear-gradient(135deg,#19191cf2,#202026f2);transform:translateY(-1px);box-shadow:0 4px 12px #0006,0 0 0 1px #22c55e26 inset}.session-card:hover:before{opacity:1}.session-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3, .75rem);min-width:0;overflow:hidden}.session-card-header>div:first-child{min-width:0;overflow:hidden}.session-card-title{font-size:1.05rem;font-weight:700;color:#f0f0f0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em}.session-card-subtitle{font-size:.78rem;color:#a3a3a3b3;font-family:var(--font-mono, monospace);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.session-stats{display:flex;gap:var(--space-4, 1rem);font-size:.82rem;color:var(--text-secondary, #a3a3a3);align-items:center}.session-stats strong{color:#22c55e;font-weight:700;font-size:.95rem}.session-tools{display:flex;flex-wrap:wrap;gap:6px}.session-tool-pill{padding:3px 8px;border-radius:4px;font-size:.7rem;font-weight:600;font-family:var(--font-mono, monospace);border:1px solid}.session-tool-pill[data-tool=Bash]{background:#f59e0b26;color:#f59e0b;border-color:#f59e0b4d}.session-tool-pill[data-tool=Edit]{background:#3b82f626;color:#3b82f6;border-color:#3b82f64d}.session-tool-pill[data-tool=Write]{background:#8b5cf626;color:#8b5cf6;border-color:#8b5cf64d}.session-tool-pill[data-tool=Read]{background:#10b98126;color:#10b981;border-color:#10b9814d}.session-tool-pill[data-tool=Agent]{background:#ef444426;color:#ef4444;border-color:#ef44444d}.session-tool-pill[data-tool=Build]{background:#06b6d426;color:#06b6d4;border-color:#06b6d44d}.session-tool-pill[data-tool=Test]{background:#ec489926;color:#ec4899;border-color:#ec48994d}.session-tool-pill-default{background:#6b728026;color:#9ca3af;border-color:#6b72804d}.session-tool-more{padding:3px 8px;border-radius:4px;font-size:.7rem;color:var(--text-tertiary, #737373);background:#ffffff0d}.session-duration{font-size:.75rem;color:var(--text-tertiary, #737373)}.session-chevron{color:var(--text-tertiary, #737373);font-size:1.2rem;align-self:center}.session-detail-header{display:flex;align-items:center;gap:var(--space-3, .75rem);margin-bottom:var(--space-4, 1rem)}.session-back-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-md, 8px);background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);color:var(--text-secondary, #a3a3a3);cursor:pointer;transition:all var(--transition-fast, .15s);text-decoration:none;font-size:1.1rem}.session-back-btn:hover{background:var(--bg-tertiary, #1a1a1a);color:var(--text-primary, #fafafa);border-color:var(--gray-600, #525252)}.session-info-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border, #2a2a2a);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-lg, 12px);overflow:hidden;margin-bottom:var(--space-5, 1.25rem)}.session-info-item{background:var(--bg-secondary, #141414);padding:var(--space-3, .75rem) var(--space-4, 1rem)}.session-info-label{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-tertiary, #737373);margin-bottom:4px}.session-info-value{font-size:.9rem;font-weight:500;color:var(--text-primary, #fafafa)}.session-events-list{display:flex;flex-direction:column;gap:0}.session-event{display:grid;grid-template-columns:60px auto 1fr;gap:var(--space-3, .75rem);padding:var(--space-3, .75rem) 0;border-bottom:1px solid var(--border, #2a2a2a);align-items:start}.session-event:last-child{border-bottom:none}.session-event-time{font-family:var(--font-mono, monospace);font-size:.8rem;color:var(--text-tertiary, #737373);padding-top:2px}.session-event-tool{padding:3px 8px;border-radius:4px;font-size:.7rem;font-weight:600;font-family:var(--font-mono, monospace);text-align:center;min-width:50px;border:1px solid}.session-event-content{min-width:0}.session-event-title{font-size:.9rem;color:var(--text-primary, #fafafa);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-event-message{font-size:.8rem;color:var(--text-tertiary, #737373);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-footer{display:flex;justify-content:space-between;align-items:center;padding-top:var(--space-4, 1rem);margin-top:var(--space-3, .75rem);border-top:1px solid var(--border, #2a2a2a);font-size:.8rem;color:var(--text-secondary, #a3a3a3)}@media(max-width:768px){.session-card{padding:var(--space-3, .75rem)}.session-card-header{flex-direction:column;gap:var(--space-2, .5rem)}.session-badge{align-self:flex-start}.session-stats{flex-wrap:wrap;gap:var(--space-2, .5rem)}.session-info-bar{grid-template-columns:1fr 1fr}.session-event{grid-template-columns:50px auto 1fr;gap:var(--space-2, .5rem)}.session-event-title{white-space:normal}.session-footer{flex-direction:column;gap:var(--space-2, .5rem);align-items:flex-start}}@media(max-width:480px){.session-info-bar{grid-template-columns:1fr}.session-event{grid-template-columns:1fr;gap:var(--space-1, .25rem)}.session-event-time{font-size:.7rem}.session-card{padding:10px 12px;gap:var(--space-2)}.session-card-subtitle{font-size:.7rem}.session-stats{gap:var(--space-1);font-size:.75rem}}.chat-container{display:flex;flex-direction:column;gap:var(--space-4, 1rem);padding:var(--space-4, 1rem) 0;overflow-y:auto;flex:1;min-height:0}.chat-message{display:flex;gap:var(--space-3, .75rem);max-width:85%;animation:fadeInUp .2s ease-out}@keyframes fadeInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.chat-message-user{align-self:flex-end;flex-direction:row-reverse}.chat-message-assistant{align-self:flex-start}.chat-message-system{align-self:center;max-width:90%}.chat-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;flex-shrink:0;margin-top:4px}.chat-avatar-user{background:#3b82f633;color:#60a5fa;border:1px solid rgba(59,130,246,.3)}.chat-avatar-assistant{background:#f9731633;color:#fb923c;border:1px solid rgba(249,115,22,.3)}.chat-bubble{border-radius:var(--radius-lg, 12px);padding:var(--space-3, .75rem) var(--space-4, 1rem);line-height:1.5;font-size:.9rem;word-break:break-word;overflow-wrap:break-word;min-width:0;overflow:hidden}.chat-bubble-user{background:#1e293b;border:1px solid #334155;color:var(--text-primary, #fafafa);border-bottom-right-radius:4px}.chat-bubble-assistant{background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);color:var(--text-primary, #fafafa);border-bottom-left-radius:4px}.chat-bubble p{margin:0 0 .5rem}.chat-bubble p:last-child{margin-bottom:0}.chat-bubble code{background:#ffffff14;padding:2px 6px;border-radius:4px;font-family:var(--font-mono, monospace);font-size:.85em}.chat-bubble pre{background:#0000004d;border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-md, 8px);padding:var(--space-3, .75rem);overflow-x:auto;margin:.5rem 0;font-size:.8rem}@media(max-width:768px){.chat-bubble pre{max-width:calc(100vw - 120px)}}.chat-bubble pre code{background:none;padding:0}.chat-bubble h1,.chat-bubble h2,.chat-bubble h3,.chat-bubble h4{margin:.75rem 0 .25rem;font-weight:600;line-height:1.3;color:var(--text-primary, #fafafa)}.chat-bubble h1{font-size:1.15em}.chat-bubble h2{font-size:1.05em}.chat-bubble h3{font-size:.95em}.chat-bubble h4{font-size:.9em}.chat-bubble h1:first-child,.chat-bubble h2:first-child,.chat-bubble h3:first-child{margin-top:0}.chat-bubble ul,.chat-bubble ol{margin:.4rem 0;padding-left:1.4rem}.chat-bubble li{margin-bottom:.2rem;line-height:1.5}.chat-bubble li>ul,.chat-bubble li>ol{margin:.1rem 0}.chat-bubble blockquote{border-left:3px solid var(--gray-600, #525252);margin:.5rem 0;padding:.25rem .75rem;color:var(--text-secondary, #a3a3a3);font-style:italic}.chat-bubble table{border-collapse:collapse;width:100%;margin:.5rem 0;font-size:.85em}.chat-bubble th,.chat-bubble td{border:1px solid var(--border, #2a2a2a);padding:.35rem .6rem;text-align:left}.chat-bubble th{background:#ffffff0a;font-weight:600}.chat-bubble hr{border:none;border-top:1px solid var(--border, #2a2a2a);margin:.75rem 0}.chat-bubble a{color:#60a5fa;text-decoration:none}.chat-bubble a:hover{text-decoration:underline}.chat-bubble strong{font-weight:600;color:var(--text-primary, #fafafa)}.chat-bubble em{font-style:italic}.chat-bubble img{max-width:100%;border-radius:var(--radius-md, 8px)}.chat-timestamp{font-size:.7rem;color:var(--text-tertiary, #737373);margin-top:4px;padding:0 4px}.chat-message-user .chat-timestamp{text-align:right}.chat-tool-card{background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-md, 8px);overflow:hidden;margin:var(--space-2, .5rem) 0;max-width:90%;align-self:flex-start}.chat-tool-header{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-2, .5rem) var(--space-3, .75rem);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--transition-fast, .15s)}.chat-tool-header:hover{background:#ffffff08}.chat-tool-chevron{font-size:.7rem;color:var(--text-tertiary, #737373);transition:transform .2s ease}.chat-tool-chevron.expanded{transform:rotate(90deg)}.chat-tool-name{font-family:var(--font-mono, monospace);font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:4px;border:1px solid}.chat-tool-name[data-tool=Bash]{background:#f59e0b26;color:#f59e0b;border-color:#f59e0b4d}.chat-tool-name[data-tool=Edit]{background:#3b82f626;color:#3b82f6;border-color:#3b82f64d}.chat-tool-name[data-tool=Write]{background:#8b5cf626;color:#8b5cf6;border-color:#8b5cf64d}.chat-tool-name[data-tool=Read]{background:#10b98126;color:#10b981;border-color:#10b9814d}.chat-tool-name[data-tool=Agent]{background:#ef444426;color:#ef4444;border-color:#ef44444d}.chat-tool-name[data-tool=Grep]{background:#06b6d426;color:#06b6d4;border-color:#06b6d44d}.chat-tool-name[data-tool=Glob]{background:#ec489926;color:#ec4899;border-color:#ec48994d}.chat-tool-name[data-tool=Skill]{background:#a855f726;color:#a855f7;border-color:#a855f74d}.chat-tool-description{font-size:.8rem;color:var(--text-secondary, #a3a3a3);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-tool-body{border-top:1px solid var(--border, #2a2a2a);padding:var(--space-3, .75rem);font-family:var(--font-mono, monospace);font-size:.75rem;color:var(--text-secondary, #a3a3a3);max-height:300px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.chat-tool-result{border-top:1px solid var(--border, #2a2a2a);padding:var(--space-3, .75rem);font-family:var(--font-mono, monospace);font-size:.75rem;max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.chat-tool-result-success{color:#10b981;background:#10b9810d}.chat-tool-result-error{color:#ef4444;background:#ef44440d}.chat-thinking{background:#a855f70d;border:1px dashed rgba(168,85,247,.2);border-radius:var(--radius-md, 8px);padding:var(--space-2, .5rem) var(--space-3, .75rem);margin:var(--space-2, .5rem) 0;max-width:90%;align-self:flex-start}.chat-thinking-header{display:flex;align-items:center;gap:var(--space-2, .5rem);cursor:pointer;font-size:.75rem;color:#a855f7;font-weight:500}.chat-thinking-body{font-size:.8rem;color:var(--text-tertiary, #737373);margin-top:var(--space-2, .5rem);line-height:1.5;max-height:200px;overflow-y:auto}.back-link{display:inline-flex;align-items:center;gap:var(--space-2, .5rem);font-size:.85rem;color:var(--text-secondary, #a3a3a3);text-decoration:none;margin-bottom:var(--space-3, .75rem);transition:color var(--transition-fast, .15s);min-height:44px;padding:8px 4px}.back-link:hover{color:var(--text-primary, #fafafa)}.chat-session-header{background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-lg, 12px);padding:var(--space-4, 1rem) var(--space-5, 1.25rem);margin-bottom:var(--space-4, 1rem)}.chat-session-title{font-size:1.1rem;font-weight:600;color:var(--text-primary, #fafafa);margin-bottom:var(--space-1, .25rem)}.chat-session-meta{display:flex;flex-wrap:wrap;gap:var(--space-3, .75rem);font-size:.8rem;color:var(--text-tertiary, #737373)}.chat-session-meta-item{display:flex;align-items:center;gap:4px}@media(max-width:768px){.chat-container{overflow-x:hidden}.chat-message{max-width:95%;min-width:0}.chat-tool-card,.chat-thinking{max-width:95%}.chat-avatar{width:24px;height:24px;font-size:.65rem}.chat-bubble{padding:var(--space-2, .5rem) var(--space-3, .75rem);font-size:.85rem;overflow-wrap:break-word;word-break:break-word;min-width:0}.chat-bubble pre{overflow-x:auto;max-width:100%}.chat-bubble table{display:block;overflow-x:auto;max-width:100%}.chat-tool-description{max-width:200px}.chat-tool-body{max-width:100%;overflow-x:auto}.chat-session-meta{flex-direction:column;gap:var(--space-1, .25rem)}}@media(max-width:480px){.chat-message{max-width:100%}.chat-message-user,.chat-message-assistant{align-self:stretch}.chat-tool-card,.chat-thinking{max-width:100%}.chat-tool-description{max-width:150px}}.skeleton{background:linear-gradient(90deg,var(--bg-secondary, #1a1a2e) 25%,var(--bg-tertiary, #252540) 50%,var(--bg-secondary, #1a1a2e) 75%);background-size:200% 100%;animation:skeleton-pulse 1.5s ease-in-out infinite;border-radius:var(--radius-sm, 4px)}@keyframes skeleton-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.loading-container{display:flex;flex-direction:column;gap:var(--space-3, .75rem);padding:var(--space-4, 1rem) 0}.terminal-topbar{display:flex;align-items:center;gap:var(--space-3, .75rem);padding:var(--space-2, .5rem) var(--space-4, 1rem);background:#111827;border-bottom:1px solid #1e293b;min-height:48px;flex-shrink:0}.terminal-topbar .btn{flex-shrink:0}.terminal-body{flex:1;background:#0a0a0f;overflow:hidden;position:relative;min-height:0}.terminal-input{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-2, .5rem) var(--space-3, .75rem);background:#111827;border-top:1px solid #1e293b;flex-shrink:0}.terminal-input input{flex:1;height:40px;padding:0 var(--space-3, .75rem);background:#0a0a0f;border:1px solid #1e293b;border-radius:var(--radius-md, 6px);color:var(--text-primary, #ededed);font-family:var(--font-mono);font-size:var(--text-sm, 13px);outline:none;transition:border-color var(--transition-fast, .15s)}.terminal-input input:focus{border-color:#334155}.terminal-input input::placeholder{color:var(--text-tertiary, #7d7d7d)}.term-toggle{display:inline-flex;align-items:center;background:#1e293b;border-radius:var(--radius-full, 9999px);padding:2px;flex-shrink:0}.term-toggle button{height:28px;padding:0 var(--space-3, .75rem);border:none;border-radius:var(--radius-full, 9999px);background:transparent;color:var(--text-tertiary, #7d7d7d);font-family:var(--font-sans);font-size:var(--text-xs, 12px);font-weight:500;cursor:pointer;transition:background var(--transition-fast, .15s),color var(--transition-fast, .15s)}.term-toggle button.active{background:#334155;color:var(--text-primary, #ededed)}.term-toggle button:hover:not(.active){color:var(--text-secondary, #a1a1a1)}.badge-ai{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#a78bfa26;color:#a78bfa;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.badge-shell{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#22c55e26;color:#22c55e;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.badge-live{display:inline-flex;align-items:center;gap:6px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#22c55e26;color:#22c55e;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.badge-live:before{content:"";width:6px;height:6px;border-radius:50%;background:#22c55e;animation:pulse-dot 2s ease-in-out infinite}.badge-ended{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#6b728026;color:#9ca3af;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.connection-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.connection-status.connected .connection-status-dot{background:#22c55e}.connection-status.reconnecting .connection-status-dot{background:#f59e0b;animation:pulse-dot 1s ease-in-out infinite}.connection-status.disconnected .connection-status-dot{background:#ef4444}.connection-status.connected{color:#22c55e}.connection-status.reconnecting{color:#f59e0b}.connection-status.disconnected{color:#ef4444}.chat-input-bar{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-3, .75rem) var(--space-4, 1rem);padding-bottom:calc(var(--space-3, .75rem) + env(safe-area-inset-bottom,0px));background:#111827;border-top:1px solid #1e293b;flex-shrink:0}.chat-input-bar input{flex:1;height:44px;padding:0 var(--space-4, 1rem);background:#0a0a0f;border:1px solid #1e293b;border-radius:var(--radius-lg, 8px);color:var(--text-primary, #ededed);font-family:var(--font-sans);font-size:var(--text-base, 14px);outline:none;transition:border-color var(--transition-fast, .15s)}.chat-input-bar input:focus{border-color:#334155}.chat-input-bar input::placeholder{color:var(--text-tertiary, #7d7d7d)}.chat-input-bar button{height:44px;min-width:44px;padding:0 var(--space-4, 1rem);background:#22c55e;border:none;border-radius:var(--radius-lg, 8px);color:#0a0a0f;font-family:var(--font-sans);font-size:var(--text-sm, 13px);font-weight:600;cursor:pointer;flex-shrink:0;transition:background var(--transition-fast, .15s),opacity var(--transition-fast, .15s)}.chat-input-bar button:hover{background:#16a34a}.chat-input-bar button:disabled{opacity:.4;cursor:not-allowed}.chat-permission-inline{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-3, .75rem) var(--space-4, 1rem);background:#f59e0b14;border:1px solid rgba(245,158,11,.2);border-radius:var(--radius-lg, 8px);margin:var(--space-2, .5rem) 0}.chat-permission-inline .permission-label{flex:1;font-size:var(--text-sm, 13px);color:#f59e0b;font-weight:500}.chat-permission-inline .btn-allow{height:34px;padding:0 var(--space-4, 1rem);background:#22c55e;border:none;border-radius:var(--radius-md, 6px);color:#0a0a0f;font-size:var(--text-sm, 13px);font-weight:600;cursor:pointer;transition:background var(--transition-fast, .15s)}.chat-permission-inline .btn-allow:hover{background:#16a34a}.chat-permission-inline .btn-deny{height:34px;padding:0 var(--space-4, 1rem);background:transparent;border:1px solid #ef4444;border-radius:var(--radius-md, 6px);color:#ef4444;font-size:var(--text-sm, 13px);font-weight:600;cursor:pointer;transition:background var(--transition-fast, .15s),color var(--transition-fast, .15s)}.chat-permission-inline .btn-deny:hover{background:#ef444426}@media(max-width:768px){.terminal-topbar{padding:var(--space-2, .5rem) var(--space-3, .75rem);gap:var(--space-2, .5rem);min-height:44px}.terminal-input input,.chat-input-bar input{min-width:0}.chat-permission-inline{flex-wrap:wrap}.chat-permission-inline .permission-label{width:100%;margin-bottom:var(--space-1, .25rem)}}:root{--button-font-family: var(--font-sans);--button-font-size: var(--text-sm);--button-font-weight: 500;--button-color: var(--ds-blue-700);--button-text-color: #fff;--button-padding: 8px 16px;--button-border-radius: var(--radius-md);--button-border: 1px solid transparent;--button-hover-color: var(--ds-blue-900);--button-hover-text-color: #fff;--button-content-gap: 8px;--input-background: var(--ds-gray-100);--input-font-family: var(--font-sans);--input-font-size: var(--text-base);--input-font-weight: 400;--input-radius: var(--radius-md);--input-padding: 10px 12px;--input-height: 40px;--input-width: 100%;--input-margin: 0;--input-box-shadow: none;--input-border: 1px solid var(--border);--input-focus-border: 1px solid var(--ds-blue-700);--input-text-color: var(--text-primary);--input-placeholder-color: var(--text-tertiary);--input-label-msg-text-color: var(--text-secondary);--input-label-msg-text-size: var(--text-sm);--input-label-msg-text-weight: 400;--input-label-msg-margin: 0 0 var(--space-2) 0;--input-error-msg-text-color: var(--ds-red-700);--input-error-msg-text-size: var(--text-xs);--input-info-msg-text-color: var(--text-tertiary);--input-info-msg-text-size: var(--text-xs);--input-info-msg-margin: var(--space-2) 0 0 0;--input-container-margin: 0 0 var(--space-5) 0;--banner-background: var(--ds-gray-100);--banner-color: var(--text-secondary);--banner-font-family: var(--font-sans);--banner-font-size: var(--text-sm);--banner-font-weight: 500;--banner-padding: 12px 16px;--banner-gap: 10px;--banner-justify-content: flex-start;--banner-icon-size: 16px;--banner-link-color: var(--ds-blue-900);--banner-cursor: default;--banner-position: relative;--banner-z-index: auto;--banner-dismiss-hover-background: var(--ds-gray-alpha-200);--banner-dismiss-color: var(--text-tertiary);--pill-background: var(--ds-gray-300);--pill-color: var(--text-secondary);--pill-font-family: var(--font-sans);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 4px 10px;--pill-border-radius: var(--radius-full);--pill-border: none;--pill-hover-background: var(--ds-gray-400);--pill-hover-color: var(--text-primary);--badge-background: var(--ds-gray-500);--badge-color: #fff;--badge-font-family: var(--font-sans);--badge-font-size: var(--text-xs);--badge-padding: 2px 6px;--badge-border-radius: var(--radius-full);--badge-border: none;--badge-wrap-margin: 0;--badge-wrap-padding: 0;--badge-img-width: 24px;--badge-img-height: 24px;--badge-img-border-radius: var(--radius-sm);--badge-img-icon-shadow: none;--badge-min-width: 6px;--badge-min-height: 6px;--tabs-bar-background: transparent;--tabs-bar-padding: 0;--tabs-bar-gap: 0;--tabs-bar-border-bottom: 1px solid var(--border);--tabs-item-padding: 10px 16px;--tabs-item-font-size: var(--text-sm);--tabs-item-font-weight: 500;--tabs-item-font-family: var(--font-sans);--tabs-item-color: var(--text-tertiary);--tabs-item-background: transparent;--tabs-active-color: var(--text-primary);--tabs-active-font-weight: 600;--tabs-indicator-color: var(--ds-blue-700);--tabs-indicator-height: 2px;--tabs-hover-color: var(--text-secondary);--tabs-hover-background: var(--ds-gray-alpha-100);--tabs-transition: color .15s ease, background .15s ease;--sheet-overlay-background: rgba(0, 0, 0, .6);--sheet-background: var(--ds-gray-100);--sheet-box-shadow: -4px 0 16px rgba(0, 0, 0, .3);--sheet-border: none;--sheet-header-padding: 16px 20px;--sheet-header-background: var(--ds-gray-100);--sheet-header-border-bottom: 1px solid var(--border);--sheet-title-font-size: var(--text-lg);--sheet-title-font-weight: 600;--sheet-title-font-family: var(--font-sans);--sheet-title-color: var(--text-primary);--sheet-close-button-color: var(--text-tertiary);--sheet-close-button-hover-background: var(--ds-gray-300);--sheet-content-padding: 20px;--sheet-footer-padding: 16px 20px;--sheet-footer-background: var(--ds-gray-100);--sheet-footer-border-top: 1px solid var(--border);--select-bgcolor: var(--ds-gray-100);--select-font-family: var(--font-sans);--select-font-size: var(--text-base);--select-radius: var(--radius-md);--select-box-shadow: none;--select-border: 1px solid var(--border);--select-color: var(--text-primary);--select-hover-color: var(--text-primary);--select-hover-bgcolor: var(--ds-gray-200);--item-padding: 10px 12px;--item-background-color: var(--ds-gray-100);--non-selected-hover-bg: var(--ds-gray-200);--non-selected-hover-color: var(--text-primary);--non-selected-item-bgcolor: var(--ds-gray-100);--non-selected-item-color: var(--text-secondary);--non-selected-items-border-radius: var(--radius-md);--selected-item-background-color: var(--ds-gray-200);--selected-item-padding: 10px 12px;--selected-color: var(--text-primary);--selected-hover-bg: var(--ds-gray-200);--label-text-color: var(--text-secondary);--label-text-size: var(--text-xs);--label-text-weight: 500;--shimmer-background: var(--ds-gray-200);--shimmer-highlight: rgba(255, 255, 255, .04);--shimmer-border-radius: var(--radius-md);--shimmer-duration: 1.5s;--avatar-background: var(--ds-gray-300);--avatar-text-color: var(--text-secondary);--avatar-font-family: var(--font-sans);--avatar-border: none;--avatar-small-width: 28px;--avatar-small-height: 28px;--avatar-medium-width: 36px;--avatar-medium-height: 36px;--avatar-large-width: 48px;--avatar-large-height: 48px;--avatar-small-font-size: 11px;--avatar-medium-font-size: 13px;--avatar-large-font-size: 18px;--choicebox-background: var(--ds-gray-100);--choicebox-border: 2px solid var(--border);--choicebox-border-radius: var(--radius-lg);--choicebox-padding: 16px;--choicebox-gap: 12px;--choicebox-hover-border-color: var(--border-hover);--choicebox-hover-background: var(--ds-gray-200);--choicebox-selected-border-color: var(--ds-blue-700);--choicebox-selected-background: var(--ds-blue-100);--choicebox-title-color: var(--text-primary);--choicebox-title-font-size: var(--text-base);--choicebox-title-font-weight: 500;--choicebox-title-font-family: var(--font-sans);--choicebox-description-color: var(--text-tertiary);--choicebox-description-font-size: var(--text-sm);--choicebox-indicator-border: 2px solid var(--ds-gray-500);--choicebox-indicator-selected-color: var(--ds-blue-700);--choicebox-focus-ring: 0 0 0 3px rgba(0, 112, 243, .2);--toast-font-family: var(--font-sans);--toast-font-size: var(--text-sm);--toast-border-radius: var(--radius-lg);--toast-padding: 12px 16px;--toast-background-color: var(--ds-gray-200);--toast-z-index: 1000;--toast-success-background-color: var(--ds-green-100);--toast-success-text: var(--ds-green-900);--toast-error-background-color: var(--ds-red-100);--toast-error-text: var(--ds-red-900);--toast-info-background-color: var(--ds-blue-100);--toast-info-text: var(--ds-blue-900);--toast-warn-background-color: var(--ds-amber-100);--toast-warn-text: var(--ds-amber-900);--background-color: rgba(0, 0, 0, .6);--modal-content-background-color: var(--ds-gray-100);--modal-border-radius: var(--radius-xl);--modal-scrollbar-width: none;--modal-header-background-color: var(--ds-gray-100);--modal-header-padding: 16px 20px;--modal-header-border-bottom: 1px solid var(--border);--modal-footer-background-color: var(--ds-gray-100);--modal-footer-padding: 16px 20px;--modal-footer-border-top: 1px solid var(--border)}.btn-primary{--button-color: var(--ds-gray-1000);--button-text-color: var(--ds-background-100);--button-border: 1px solid var(--ds-gray-1000);--button-hover-color: #fff;--button-hover-text-color: var(--ds-background-100);--button-hover-border: 1px solid #fff}.btn-secondary{--button-color: var(--ds-background-100);--button-text-color: var(--ds-gray-1000);--button-border: 1px solid var(--ds-gray-400);--button-hover-color: var(--ds-gray-100);--button-hover-text-color: var(--ds-gray-1000);--button-hover-border: 1px solid var(--ds-gray-400)}.btn-ghost{--button-color: transparent;--button-text-color: var(--ds-gray-1000);--button-hover-color: var(--ds-gray-alpha-100);--button-hover-text-color: var(--ds-gray-1000)}.btn-danger{--button-color: #d93036;--button-text-color: #fff;--button-hover-color: #ff6166;--button-hover-text-color: #fff}.btn-warning{--button-color: #ff990a;--button-text-color: var(--ds-background-100);--button-hover-color: #ffb224;--button-hover-text-color: var(--ds-background-100)}.btn-connect{--button-color: #0d9488;--button-text-color: #fff;--button-hover-color: #14b8a6;--button-hover-text-color: #fff;--button-border: 1px solid #0d9488;--button-hover-border: 1px solid #14b8a6}.btn-resume{--button-color: transparent;--button-text-color: var(--ds-gray-900);--button-border: 1px solid var(--ds-gray-400);--button-hover-color: var(--ds-gray-100);--button-hover-text-color: var(--ds-gray-1000);--button-hover-border: 1px solid var(--ds-gray-600)}.btn-sm{--button-height: 32px;--button-padding: 0 10px;--button-font-size: var(--text-base)}.btn-xs{--button-height: 28px;--button-padding: 0 8px;--button-font-size: var(--text-xs);--button-border-radius: var(--radius-sm)}.btn-lg{--button-height: 48px;--button-padding: 0 20px;--button-font-size: var(--text-lg);--button-border-radius: var(--radius-lg)}.banner-alert{border-radius:var(--radius-md)}.banner-success{--banner-background: var(--ds-green-100);--banner-color: var(--ds-green-900);--banner-icon-color: var(--ds-green-900);border-radius:var(--radius-md)}.banner-error{--banner-background: var(--ds-red-100);--banner-color: var(--ds-red-900);--banner-icon-color: var(--ds-red-900);border-radius:var(--radius-md)}.banner-warning{--banner-background: var(--ds-amber-100);--banner-color: var(--ds-amber-900);--banner-icon-color: var(--ds-amber-900);border-radius:var(--radius-md)}.banner-info{--banner-background: var(--ds-blue-100);--banner-color: var(--ds-blue-900);--banner-icon-color: var(--ds-blue-900);border-radius:var(--radius-md)}.input-mono{--input-font-family: var(--font-mono);--input-font-size: var(--text-sm)}.avatar-user{--avatar-background: var(--ds-blue-100);--avatar-text-color: var(--ds-blue-900)}.avatar-assistant{--avatar-background: var(--ds-green-100);--avatar-text-color: var(--ds-green-900)}.btn-remove{--button-height: 24px;--button-width: 24px;--button-padding: 0;--button-font-size: 16px;--button-border-radius: var(--radius-sm)}.pill-session-time{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: var(--text-xs);--pill-padding: 4px 10px;--pill-hover-background: var(--ds-green-100);--pill-hover-color: var(--ds-green-900);--pill-cursor: inherit}.pill-tool-name{--pill-background: var(--ds-gray-300);--pill-color: var(--text-primary);--pill-font-size: var(--text-xs);--pill-font-family: var(--font-mono);--pill-padding: 2px 8px;--pill-hover-background: var(--ds-gray-300);--pill-cursor: inherit}.pill-tool-success{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: var(--text-xs);--pill-padding: 2px 8px;--pill-hover-background: var(--ds-green-100);--pill-cursor: inherit}.pill-tool-error{--pill-background: var(--ds-red-100);--pill-color: var(--ds-red-900);--pill-font-size: var(--text-xs);--pill-padding: 2px 8px;--pill-hover-background: var(--ds-red-100);--pill-cursor: inherit}.pill-live{--pill-background: var(--ds-green-alpha-200);--pill-color: var(--ds-green-700);--pill-border: 1px solid var(--ds-green-alpha-400);--pill-font-size: .7rem;--pill-padding: 2px 10px;--pill-hover-background: var(--ds-green-alpha-200);--pill-hover-color: var(--ds-green-700);--pill-cursor: default;font-weight:700;letter-spacing:.05em}.pill-badge-ai{--pill-background: var(--ds-blue-100);--pill-color: var(--ds-blue-900);--pill-font-size: 9px;--pill-padding: 2px 6px;--pill-hover-background: var(--ds-blue-100);--pill-cursor: inherit;font-weight:700;letter-spacing:.05em}.pill-badge-shell{--pill-background: var(--ds-gray-300);--pill-color: var(--text-secondary);--pill-font-size: 9px;--pill-padding: 2px 6px;--pill-hover-background: var(--ds-gray-300);--pill-cursor: inherit;font-weight:700;letter-spacing:.05em}.pill-badge-ended{--pill-background: var(--ds-gray-alpha-200);--pill-color: var(--text-tertiary);--pill-font-size: 9px;--pill-padding: 2px 6px;--pill-hover-background: var(--ds-gray-alpha-200);--pill-cursor: inherit;font-weight:700;letter-spacing:.05em}.pill-exit-ok{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: 10px;--pill-font-family: var(--font-mono);--pill-padding: 2px 6px;--pill-hover-background: var(--ds-green-100);--pill-cursor: inherit}.pill-exit-error{--pill-background: var(--ds-red-100);--pill-color: var(--ds-red-900);--pill-font-size: 10px;--pill-font-family: var(--font-mono);--pill-padding: 2px 6px;--pill-hover-background: var(--ds-red-100);--pill-cursor: inherit}.pill-source-claude-code{--pill-background: var(--ds-blue-100);--pill-color: var(--ds-blue-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-blue-100);--pill-hover-color: var(--ds-blue-900);--pill-cursor: inherit}.pill-source-opencode{--pill-background: var(--ds-amber-100);--pill-color: var(--ds-amber-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-amber-100);--pill-hover-color: var(--ds-amber-900);--pill-cursor: inherit}.pill-source-codex{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-green-100);--pill-hover-color: var(--ds-green-900);--pill-cursor: inherit}.pill-source-gemini{--pill-background: var(--ds-gray-100);--pill-color: var(--ds-gray-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-gray-100);--pill-hover-color: var(--ds-gray-900);--pill-cursor: inherit}.icon-14{--icon-width: 14px;--icon-height: 14px;--icon-padding: 0;--icon-container-paddding: 0}.icon-16{--icon-width: 16px;--icon-height: 16px;--icon-padding: 0;--icon-container-paddding: 0}.icon-18{--icon-width: 18px;--icon-height: 18px;--icon-padding: 0;--icon-container-paddding: 0}.icon-24{--icon-width: 24px;--icon-height: 24px;--icon-padding: 0;--icon-container-paddding: 0}.icon-26{--icon-width: 26px;--icon-height: 26px;--icon-padding: 0;--icon-container-paddding: 0}.terminal-time{--relative-time-font-size: var(--text-xs);--relative-time-color: var(--text-tertiary);--relative-time-font-weight: 400;white-space:nowrap;flex-shrink:0}.pill-status-online{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-green-100);--pill-hover-color: var(--ds-green-900);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-offline{--pill-background: var(--ds-red-100);--pill-color: var(--ds-red-900);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-red-100);--pill-hover-color: var(--ds-red-900);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-degraded{--pill-background: var(--ds-amber-100);--pill-color: var(--ds-amber-900);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-amber-100);--pill-hover-color: var(--ds-amber-900);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-unknown{--pill-background: var(--ds-gray-300);--pill-color: var(--text-secondary);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-gray-300);--pill-hover-color: var(--text-secondary);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-online:before,.pill-status-offline:before,.pill-status-degraded:before,.pill-status-unknown:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:currentcolor;flex-shrink:0}.shimmer{width:var(--shimmer-width, 100%);height:var(--shimmer-height, 16px);border-radius:var(--shimmer-border-radius, 4px);background-color:var(--shimmer-background, var(--ds-gray-alpha-200, #e0e0e0));opacity:var(--shimmer-opacity, 1);overflow:hidden;position:relative}.shimmer:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--shimmer-highlight, rgba(255, 255, 255, .08)),transparent);animation:shimmer var(--shimmer-duration, 1.5s) infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.shimmer-header{--shimmer-height: 80px;--shimmer-border-radius: var(--radius-lg);margin-bottom:1rem}.shimmer-card{--shimmer-height: 120px;--shimmer-border-radius: var(--radius-lg)}.shimmer-bubble{--shimmer-height: 60px;--shimmer-border-radius: var(--radius-lg);margin-bottom:var(--space-3)}.shimmer-bubble-user{--shimmer-width: 60%;margin-left:auto}.shimmer-bubble-assistant{--shimmer-width: 75%}.shimmer-bubble-user-short{--shimmer-width: 50%;margin-left:auto}.shimmer-bubble-assistant-wide{--shimmer-width: 80%}.shimmer-bubble-assistant-short{--shimmer-width: 40%}@media(max-width:768px){.shimmer-card{--shimmer-height: 90px}.btn-xs{min-height:36px;padding:6px 12px}}.nav-right.svelte-12qhfyh{display:flex;align-items:center;gap:var(--space-2)}.btn-gear{--button-color: transparent;--button-text-color: var(--text-muted);--button-border: none;--button-padding: 0;--button-height: 36px;--button-width: 36px;--button-border-radius: var(--radius-md);--button-hover-color: var(--component-bg);--button-hover-text-color: var(--text-primary)}.btn-gear:focus-visible{outline:2px solid var(--ds-green-700);outline-offset:2px}.btn-gear-active{--button-color: var(--component-bg);--button-text-color: var(--text-primary)}.content-area.svelte-12qhfyh{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:env(safe-area-inset-bottom,0px)}.bottom-tabs.svelte-12qhfyh{height:64px;background:var(--background);border-top:1px solid var(--border);flex-shrink:0;z-index:100;padding-bottom:env(safe-area-inset-bottom,0)}.bottom-tabs-inner.svelte-12qhfyh{max-width:600px;margin:0 auto;padding:6px var(--space-4) 4px;display:flex;align-items:center;justify-content:space-around;height:100%;box-sizing:border-box}.tab-item.svelte-12qhfyh{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--text-muted);font-size:11px;font-weight:500;text-decoration:none;padding:6px 36px;border-radius:var(--radius-md);transition:color var(--transition-fast);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;min-height:48px}.tab-item.svelte-12qhfyh:hover{color:var(--text-secondary)}.tab-item.active.svelte-12qhfyh{color:var(--ds-green-700)}.tab-item.svelte-12qhfyh .icon{flex-shrink:0}@media(max-width:480px){.btn-gear{--button-height: 44px;--button-width: 44px}.bottom-tabs.svelte-12qhfyh{height:60px}.tab-item.svelte-12qhfyh{padding:6px 28px;font-size:10px;gap:3px;min-height:44px}.pill-status-online,.pill-status-offline,.pill-status-degraded,.pill-status-unknown{font-size:10px;height:22px}.page-header{flex-direction:column!important;gap:var(--space-3)!important}.page-header .btn-group{width:100%}.page-header .btn-group .btn{flex:1;justify-content:center}}
1
+ :root{--ds-background-100: #0a0a0a;--ds-background-200: #000000;--ds-gray-100: #1a1a1a;--ds-gray-200: #1f1f1f;--ds-gray-300: #292929;--ds-gray-400: #2e2e2e;--ds-gray-500: #454545;--ds-gray-600: #878787;--ds-gray-700: #8f8f8f;--ds-gray-800: #7d7d7d;--ds-gray-900: #a1a1a1;--ds-gray-1000: #ededed;--ds-gray-alpha-100: rgba(255, 255, 255, .06);--ds-gray-alpha-200: rgba(255, 255, 255, .09);--ds-gray-alpha-300: rgba(255, 255, 255, .13);--ds-gray-alpha-400: rgba(255, 255, 255, .14);--ds-blue-100: #0d1d33;--ds-blue-700: #0070f3;--ds-blue-900: #52a8ff;--ds-red-100: #2a1314;--ds-red-700: #e5484d;--ds-red-900: #ff6166;--ds-green-100: #0d1f12;--ds-green-alpha-200: rgba(34, 197, 94, .15);--ds-green-alpha-400: rgba(34, 197, 94, .3);--ds-green-500: #4ade80;--ds-green-700: #46a758;--ds-green-900: #62c073;--ds-amber-100: #271700;--ds-amber-700: #f5a623;--ds-amber-900: #ffb224;--background: var(--ds-background-100);--background-secondary: var(--ds-background-200);--component-bg: var(--ds-gray-100);--component-bg-hover: var(--ds-gray-200);--component-bg-active: var(--ds-gray-300);--border: var(--ds-gray-400);--border-hover: var(--ds-gray-500);--border-active: var(--ds-gray-600);--text-primary: var(--ds-gray-1000);--text-secondary: var(--ds-gray-900);--text-tertiary: var(--ds-gray-800);--font-sans: "Geist", -apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-mono: "Geist Mono", "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", monospace;--text-xs: 12px;--text-sm: 13px;--text-base: 14px;--text-md: 15px;--text-lg: 16px;--text-xl: 20px;--text-2xl: 24px;--text-3xl: 32px;--text-4xl: 40px;--leading-none: 1;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.625;--tracking-tighter: -.04em;--tracking-tight: -.02em;--tracking-normal: 0;--space-0: 0;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--radius-full: 9999px;--transition-fast: .15s ease;--transition-normal: .2s ease;--max-width: 1100px;--header-height: 64px}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal);background:var(--background);color:var(--text-primary);min-height:100vh}.app{height:100vh;display:flex;flex-direction:column;overflow:hidden}.header{height:var(--header-height);background:var(--background);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100}.header-content{max-width:var(--max-width);height:100%;margin:0 auto;padding:0 var(--space-6);display:flex;justify-content:space-between;align-items:center}.logo{display:flex;align-items:center;gap:var(--space-3);text-decoration:none;color:inherit}.logo-icon{width:24px;height:24px;flex-shrink:0}.logo-text{font-size:var(--text-md);font-weight:500;letter-spacing:var(--tracking-tight);color:var(--text-primary)}.nav{display:flex;align-items:center;gap:var(--space-1)}.nav-link{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--text-sm);font-weight:400;color:var(--text-secondary);text-decoration:none;background:transparent;border:none;cursor:pointer;transition:color var(--transition-fast),background var(--transition-fast)}.nav-link:hover{color:var(--text-primary);background:var(--component-bg)}.nav-link.active{color:var(--text-primary)}.main{flex:1;max-width:var(--max-width);width:100%;margin:0 auto;padding:var(--space-8) var(--space-6)}.page-header{margin-bottom:var(--space-8)}.page-title{font-size:var(--text-2xl);font-weight:600;letter-spacing:var(--tracking-tighter);color:var(--text-primary);line-height:var(--leading-tight);margin-bottom:var(--space-2)}.page-description{font-size:var(--text-sm);color:var(--text-secondary);line-height:var(--leading-normal)}.page-header-content{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4)}.page-actions{display:flex;gap:var(--space-2);flex-shrink:0}@media(max-width:768px){.page-header-content{flex-direction:column;gap:var(--space-4)}}@media(max-width:480px){.page-actions{width:100%}.page-actions>*{flex:1}}.status-dot-active{width:8px;height:8px;border-radius:50%;background:var(--ds-green-500);animation:activity-pulse .6s ease-in-out infinite}.status-dot-idle,.status-dot-static{width:8px;height:8px;border-radius:50%;background:var(--ds-gray-600)}@keyframes activity-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.7}}.connection-dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.connection-dot.connected{background:var(--ds-green-500)}.connection-dot.reconnecting{background:var(--ds-amber-700);animation:pulse-dot 1.5s ease-in-out infinite}.connection-dot.disconnected{background:var(--ds-red-700)}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}.card{background:var(--component-bg);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.card-header{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--ds-gray-alpha-200)}.card-title{font-size:var(--text-sm);font-weight:500;color:var(--text-primary);line-height:var(--leading-tight)}.card-description{font-size:var(--text-sm);color:var(--text-tertiary);margin-top:var(--space-1);line-height:var(--leading-normal)}.card-content{padding:var(--space-5)}.status-badge{display:inline-flex;align-items:center;gap:var(--space-2);height:26px;padding:0 var(--space-3);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.02em}.status-badge.online{background:var(--ds-green-100);color:var(--ds-green-900)}.status-badge.offline{background:var(--ds-red-100);color:var(--ds-red-900)}.status-badge.degraded{background:var(--ds-amber-100);color:var(--ds-amber-900)}.status-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--space-16) var(--space-6)}@media(max-width:768px){.empty-state{padding:var(--space-8) var(--space-4)}}@media(max-width:480px){.empty-state{padding:var(--space-6) var(--space-3)}}.empty-state-icon{width:48px;height:48px;margin:0 auto var(--space-5);background:var(--component-bg);border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center}.empty-state-icon svg{width:24px;height:24px;color:var(--text-tertiary)}.empty-state-title{font-size:var(--text-lg);font-weight:600;color:var(--text-primary);margin-bottom:var(--space-2)}.empty-state-description{font-size:var(--text-sm);color:var(--text-secondary);max-width:320px;margin:0 auto var(--space-6);line-height:var(--leading-relaxed)}.list{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.list-item{display:flex;align-items:center;padding:var(--space-4) var(--space-5);background:var(--component-bg);border-bottom:1px solid var(--ds-gray-alpha-200);transition:background var(--transition-fast)}.list-item:last-child{border-bottom:none}.list-item:hover{background:var(--component-bg-hover)}.code{font-family:var(--font-mono);font-size:var(--text-xs);background:var(--component-bg);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);color:var(--text-secondary)}.divider{height:1px;background:var(--border);margin:var(--space-6) 0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:768px){:root{--header-height: 56px}.header-content{padding:0 var(--space-4)}.main{padding:var(--space-6) var(--space-4)}.page-title{font-size:var(--text-xl)}.hide-mobile{display:none}}@media(max-width:480px){:root{--header-height: 48px}.main{padding:var(--space-4) var(--space-3)}.header-content{padding:0 var(--space-3)}.logo{gap:var(--space-2)}.logo-text{font-size:var(--text-sm)}.nav{gap:0}.nav-link{padding:var(--space-3) var(--space-2);font-size:13px;min-height:44px;display:inline-flex;align-items:center}.btn{min-height:44px;height:auto;padding:10px 16px}.btn-sm,.input{min-height:44px;height:auto;padding:10px 12px}}.btn:focus-visible,.input:focus-visible,.nav-link:focus-visible{outline:2px solid var(--ds-blue-700);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}::selection{background:var(--ds-blue-700);color:#fff}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--ds-gray-400);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--ds-gray-500)}.session-card{background:linear-gradient(135deg,#141414e6,#1c1c20e6);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-lg, 14px);padding:var(--space-5, 1.25rem) var(--space-5, 1.25rem);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden;min-width:0;gap:var(--space-3, .75rem);position:relative;text-decoration:none;box-shadow:0 1px 3px #0000004d,0 0 0 1px #ffffff08 inset}.session-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,#22c55e,#16a34a);border-radius:3px 0 0 3px;opacity:.7;transition:opacity .25s}.session-card:hover{border-color:#22c55e4d;background:linear-gradient(135deg,#19191cf2,#202026f2);transform:translateY(-1px);box-shadow:0 4px 12px #0006,0 0 0 1px #22c55e26 inset}.session-card:hover:before{opacity:1}.session-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3, .75rem);min-width:0;overflow:hidden}.session-card-header>div:first-child{min-width:0;overflow:hidden}.session-card-title{font-size:1.05rem;font-weight:700;color:#f0f0f0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em}.session-card-subtitle{font-size:.78rem;color:#a3a3a3b3;font-family:var(--font-mono, monospace);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.session-stats{display:flex;gap:var(--space-4, 1rem);font-size:.82rem;color:var(--text-secondary, #a3a3a3);align-items:center}.session-stats strong{color:#22c55e;font-weight:700;font-size:.95rem}.session-tools{display:flex;flex-wrap:wrap;gap:6px}.session-tool-pill{padding:3px 8px;border-radius:4px;font-size:.7rem;font-weight:600;font-family:var(--font-mono, monospace);border:1px solid}.session-tool-pill[data-tool=Bash]{background:#f59e0b26;color:#f59e0b;border-color:#f59e0b4d}.session-tool-pill[data-tool=Edit]{background:#3b82f626;color:#3b82f6;border-color:#3b82f64d}.session-tool-pill[data-tool=Write]{background:#8b5cf626;color:#8b5cf6;border-color:#8b5cf64d}.session-tool-pill[data-tool=Read]{background:#10b98126;color:#10b981;border-color:#10b9814d}.session-tool-pill[data-tool=Agent]{background:#ef444426;color:#ef4444;border-color:#ef44444d}.session-tool-pill[data-tool=Build]{background:#06b6d426;color:#06b6d4;border-color:#06b6d44d}.session-tool-pill[data-tool=Test]{background:#ec489926;color:#ec4899;border-color:#ec48994d}.session-tool-pill-default{background:#6b728026;color:#9ca3af;border-color:#6b72804d}.session-tool-more{padding:3px 8px;border-radius:4px;font-size:.7rem;color:var(--text-tertiary, #737373);background:#ffffff0d}.session-duration{font-size:.75rem;color:var(--text-tertiary, #737373)}.session-chevron{color:var(--text-tertiary, #737373);font-size:1.2rem;align-self:center}.session-detail-header{display:flex;align-items:center;gap:var(--space-3, .75rem);margin-bottom:var(--space-4, 1rem)}.session-back-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-md, 8px);background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);color:var(--text-secondary, #a3a3a3);cursor:pointer;transition:all var(--transition-fast, .15s);text-decoration:none;font-size:1.1rem}.session-back-btn:hover{background:var(--bg-tertiary, #1a1a1a);color:var(--text-primary, #fafafa);border-color:var(--gray-600, #525252)}.session-info-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border, #2a2a2a);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-lg, 12px);overflow:hidden;margin-bottom:var(--space-5, 1.25rem)}.session-info-item{background:var(--bg-secondary, #141414);padding:var(--space-3, .75rem) var(--space-4, 1rem)}.session-info-label{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-tertiary, #737373);margin-bottom:4px}.session-info-value{font-size:.9rem;font-weight:500;color:var(--text-primary, #fafafa)}.session-events-list{display:flex;flex-direction:column;gap:0}.session-event{display:grid;grid-template-columns:60px auto 1fr;gap:var(--space-3, .75rem);padding:var(--space-3, .75rem) 0;border-bottom:1px solid var(--border, #2a2a2a);align-items:start}.session-event:last-child{border-bottom:none}.session-event-time{font-family:var(--font-mono, monospace);font-size:.8rem;color:var(--text-tertiary, #737373);padding-top:2px}.session-event-tool{padding:3px 8px;border-radius:4px;font-size:.7rem;font-weight:600;font-family:var(--font-mono, monospace);text-align:center;min-width:50px;border:1px solid}.session-event-content{min-width:0}.session-event-title{font-size:.9rem;color:var(--text-primary, #fafafa);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-event-message{font-size:.8rem;color:var(--text-tertiary, #737373);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-footer{display:flex;justify-content:space-between;align-items:center;padding-top:var(--space-4, 1rem);margin-top:var(--space-3, .75rem);border-top:1px solid var(--border, #2a2a2a);font-size:.8rem;color:var(--text-secondary, #a3a3a3)}@media(max-width:768px){.session-card{padding:var(--space-3, .75rem)}.session-card-header{flex-direction:column;gap:var(--space-2, .5rem)}.session-badge{align-self:flex-start}.session-stats{flex-wrap:wrap;gap:var(--space-2, .5rem)}.session-info-bar{grid-template-columns:1fr 1fr}.session-event{grid-template-columns:50px auto 1fr;gap:var(--space-2, .5rem)}.session-event-title{white-space:normal}.session-footer{flex-direction:column;gap:var(--space-2, .5rem);align-items:flex-start}}@media(max-width:480px){.session-info-bar{grid-template-columns:1fr}.session-event{grid-template-columns:1fr;gap:var(--space-1, .25rem)}.session-event-time{font-size:.7rem}.session-card{padding:10px 12px;gap:var(--space-2)}.session-card-subtitle{font-size:.7rem}.session-stats{gap:var(--space-1);font-size:.75rem}}.chat-container{display:flex;flex-direction:column;gap:var(--space-4, 1rem);padding:var(--space-4, 1rem) 0;overflow-y:auto;flex:1;min-height:0}.chat-message{display:flex;gap:var(--space-3, .75rem);max-width:85%;animation:fadeInUp .2s ease-out}@keyframes fadeInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.chat-message-user{align-self:flex-end;flex-direction:row-reverse}.chat-message-assistant{align-self:flex-start}.chat-message-system{align-self:center;max-width:90%}.chat-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;flex-shrink:0;margin-top:4px}.chat-avatar-user{background:#3b82f633;color:#60a5fa;border:1px solid rgba(59,130,246,.3)}.chat-avatar-assistant{background:#f9731633;color:#fb923c;border:1px solid rgba(249,115,22,.3)}.chat-bubble{border-radius:var(--radius-lg, 12px);padding:var(--space-3, .75rem) var(--space-4, 1rem);line-height:1.5;font-size:.9rem;word-break:break-word;overflow-wrap:break-word;min-width:0;overflow:hidden}.chat-bubble-user{background:#1e293b;border:1px solid #334155;color:var(--text-primary, #fafafa);border-bottom-right-radius:4px}.chat-bubble-assistant{background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);color:var(--text-primary, #fafafa);border-bottom-left-radius:4px}.chat-bubble p{margin:0 0 .5rem}.chat-bubble p:last-child{margin-bottom:0}.chat-bubble code{background:#ffffff14;padding:2px 6px;border-radius:4px;font-family:var(--font-mono, monospace);font-size:.85em}.chat-bubble pre{background:#0000004d;border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-md, 8px);padding:var(--space-3, .75rem);overflow-x:auto;margin:.5rem 0;font-size:.8rem}@media(max-width:768px){.chat-bubble pre{max-width:calc(100vw - 120px)}}.chat-bubble pre code{background:none;padding:0}.chat-bubble h1,.chat-bubble h2,.chat-bubble h3,.chat-bubble h4{margin:.75rem 0 .25rem;font-weight:600;line-height:1.3;color:var(--text-primary, #fafafa)}.chat-bubble h1{font-size:1.15em}.chat-bubble h2{font-size:1.05em}.chat-bubble h3{font-size:.95em}.chat-bubble h4{font-size:.9em}.chat-bubble h1:first-child,.chat-bubble h2:first-child,.chat-bubble h3:first-child{margin-top:0}.chat-bubble ul,.chat-bubble ol{margin:.4rem 0;padding-left:1.4rem}.chat-bubble li{margin-bottom:.2rem;line-height:1.5}.chat-bubble li>ul,.chat-bubble li>ol{margin:.1rem 0}.chat-bubble blockquote{border-left:3px solid var(--gray-600, #525252);margin:.5rem 0;padding:.25rem .75rem;color:var(--text-secondary, #a3a3a3);font-style:italic}.chat-bubble table{border-collapse:collapse;width:100%;margin:.5rem 0;font-size:.85em}.chat-bubble th,.chat-bubble td{border:1px solid var(--border, #2a2a2a);padding:.35rem .6rem;text-align:left}.chat-bubble th{background:#ffffff0a;font-weight:600}.chat-bubble hr{border:none;border-top:1px solid var(--border, #2a2a2a);margin:.75rem 0}.chat-bubble a{color:#60a5fa;text-decoration:none}.chat-bubble a:hover{text-decoration:underline}.chat-bubble strong{font-weight:600;color:var(--text-primary, #fafafa)}.chat-bubble em{font-style:italic}.chat-bubble img{max-width:100%;border-radius:var(--radius-md, 8px)}.chat-timestamp{font-size:.7rem;color:var(--text-tertiary, #737373);margin-top:4px;padding:0 4px}.chat-message-user .chat-timestamp{text-align:right}.chat-tool-card{background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-md, 8px);overflow:hidden;margin:var(--space-2, .5rem) 0;max-width:90%;align-self:flex-start}.chat-tool-header{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-2, .5rem) var(--space-3, .75rem);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--transition-fast, .15s)}.chat-tool-header:hover{background:#ffffff08}.chat-tool-chevron{font-size:.7rem;color:var(--text-tertiary, #737373);transition:transform .2s ease}.chat-tool-chevron.expanded{transform:rotate(90deg)}.chat-tool-name{font-family:var(--font-mono, monospace);font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:4px;border:1px solid}.chat-tool-name[data-tool=Bash]{background:#f59e0b26;color:#f59e0b;border-color:#f59e0b4d}.chat-tool-name[data-tool=Edit]{background:#3b82f626;color:#3b82f6;border-color:#3b82f64d}.chat-tool-name[data-tool=Write]{background:#8b5cf626;color:#8b5cf6;border-color:#8b5cf64d}.chat-tool-name[data-tool=Read]{background:#10b98126;color:#10b981;border-color:#10b9814d}.chat-tool-name[data-tool=Agent]{background:#ef444426;color:#ef4444;border-color:#ef44444d}.chat-tool-name[data-tool=Grep]{background:#06b6d426;color:#06b6d4;border-color:#06b6d44d}.chat-tool-name[data-tool=Glob]{background:#ec489926;color:#ec4899;border-color:#ec48994d}.chat-tool-name[data-tool=Skill]{background:#a855f726;color:#a855f7;border-color:#a855f74d}.chat-tool-description{font-size:.8rem;color:var(--text-secondary, #a3a3a3);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-tool-body{border-top:1px solid var(--border, #2a2a2a);padding:var(--space-3, .75rem);font-family:var(--font-mono, monospace);font-size:.75rem;color:var(--text-secondary, #a3a3a3);max-height:300px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.chat-tool-result{border-top:1px solid var(--border, #2a2a2a);padding:var(--space-3, .75rem);font-family:var(--font-mono, monospace);font-size:.75rem;max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.chat-tool-result-success{color:#10b981;background:#10b9810d}.chat-tool-result-error{color:#ef4444;background:#ef44440d}.chat-thinking{background:#a855f70d;border:1px dashed rgba(168,85,247,.2);border-radius:var(--radius-md, 8px);padding:var(--space-2, .5rem) var(--space-3, .75rem);margin:var(--space-2, .5rem) 0;max-width:90%;align-self:flex-start}.chat-thinking-header{display:flex;align-items:center;gap:var(--space-2, .5rem);cursor:pointer;font-size:.75rem;color:#a855f7;font-weight:500}.chat-thinking-body{font-size:.8rem;color:var(--text-tertiary, #737373);margin-top:var(--space-2, .5rem);line-height:1.5;max-height:200px;overflow-y:auto}.back-link{display:inline-flex;align-items:center;gap:var(--space-2, .5rem);font-size:.85rem;color:var(--text-secondary, #a3a3a3);text-decoration:none;margin-bottom:var(--space-3, .75rem);transition:color var(--transition-fast, .15s);min-height:44px;padding:8px 4px}.back-link:hover{color:var(--text-primary, #fafafa)}.chat-session-header{background:var(--bg-secondary, #141414);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius-lg, 12px);padding:var(--space-4, 1rem) var(--space-5, 1.25rem);margin-bottom:var(--space-4, 1rem)}.chat-session-title{font-size:1.1rem;font-weight:600;color:var(--text-primary, #fafafa);margin-bottom:var(--space-1, .25rem)}.chat-session-meta{display:flex;flex-wrap:wrap;gap:var(--space-3, .75rem);font-size:.8rem;color:var(--text-tertiary, #737373)}.chat-session-meta-item{display:flex;align-items:center;gap:4px}@media(max-width:768px){.chat-container{overflow-x:hidden}.chat-message{max-width:95%;min-width:0}.chat-tool-card,.chat-thinking{max-width:95%}.chat-avatar{width:24px;height:24px;font-size:.65rem}.chat-bubble{padding:var(--space-2, .5rem) var(--space-3, .75rem);font-size:.85rem;overflow-wrap:break-word;word-break:break-word;min-width:0}.chat-bubble pre{overflow-x:auto;max-width:100%}.chat-bubble table{display:block;overflow-x:auto;max-width:100%}.chat-tool-description{max-width:200px}.chat-tool-body{max-width:100%;overflow-x:auto}.chat-session-meta{flex-direction:column;gap:var(--space-1, .25rem)}}@media(max-width:480px){.chat-message{max-width:100%}.chat-message-user,.chat-message-assistant{align-self:stretch}.chat-tool-card,.chat-thinking{max-width:100%}.chat-tool-description{max-width:150px}}.skeleton{background:linear-gradient(90deg,var(--bg-secondary, #1a1a2e) 25%,var(--bg-tertiary, #252540) 50%,var(--bg-secondary, #1a1a2e) 75%);background-size:200% 100%;animation:skeleton-pulse 1.5s ease-in-out infinite;border-radius:var(--radius-sm, 4px)}@keyframes skeleton-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.loading-container{display:flex;flex-direction:column;gap:var(--space-3, .75rem);padding:var(--space-4, 1rem) 0}.terminal-topbar{display:flex;align-items:center;gap:var(--space-3, .75rem);padding:var(--space-2, .5rem) var(--space-4, 1rem);background:#111827;border-bottom:1px solid #1e293b;min-height:48px;flex-shrink:0}.terminal-topbar .btn{flex-shrink:0}.terminal-body{flex:1;background:#0a0a0f;overflow:hidden;position:relative;min-height:0}.terminal-input{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-2, .5rem) var(--space-3, .75rem);background:#111827;border-top:1px solid #1e293b;flex-shrink:0}.terminal-input input{flex:1;height:40px;padding:0 var(--space-3, .75rem);background:#0a0a0f;border:1px solid #1e293b;border-radius:var(--radius-md, 6px);color:var(--text-primary, #ededed);font-family:var(--font-mono);font-size:var(--text-sm, 13px);outline:none;transition:border-color var(--transition-fast, .15s)}.terminal-input input:focus{border-color:#334155}.terminal-input input::placeholder{color:var(--text-tertiary, #7d7d7d)}.term-toggle{display:inline-flex;align-items:center;background:#1e293b;border-radius:var(--radius-full, 9999px);padding:2px;flex-shrink:0}.term-toggle button{height:28px;padding:0 var(--space-3, .75rem);border:none;border-radius:var(--radius-full, 9999px);background:transparent;color:var(--text-tertiary, #7d7d7d);font-family:var(--font-sans);font-size:var(--text-xs, 12px);font-weight:500;cursor:pointer;transition:background var(--transition-fast, .15s),color var(--transition-fast, .15s)}.term-toggle button.active{background:#334155;color:var(--text-primary, #ededed)}.term-toggle button:hover:not(.active){color:var(--text-secondary, #a1a1a1)}.badge-ai{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#a78bfa26;color:#a78bfa;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.badge-shell{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#22c55e26;color:#22c55e;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.badge-live{display:inline-flex;align-items:center;gap:6px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#22c55e26;color:#22c55e;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.badge-live:before{content:"";width:6px;height:6px;border-radius:50%;background:#22c55e;animation:pulse-dot 2s ease-in-out infinite}.badge-ended{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full, 9999px);background:#6b728026;color:#9ca3af;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-xs, 12px);font-weight:500;white-space:nowrap}.connection-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.connection-status.connected .connection-status-dot{background:#22c55e}.connection-status.reconnecting .connection-status-dot{background:#f59e0b;animation:pulse-dot 1s ease-in-out infinite}.connection-status.disconnected .connection-status-dot{background:#ef4444}.connection-status.connected{color:#22c55e}.connection-status.reconnecting{color:#f59e0b}.connection-status.disconnected{color:#ef4444}.chat-input-bar{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-3, .75rem) var(--space-4, 1rem);padding-bottom:calc(var(--space-3, .75rem) + env(safe-area-inset-bottom,0px));background:#111827;border-top:1px solid #1e293b;flex-shrink:0}.chat-input-bar input{flex:1;height:44px;padding:0 var(--space-4, 1rem);background:#0a0a0f;border:1px solid #1e293b;border-radius:var(--radius-lg, 8px);color:var(--text-primary, #ededed);font-family:var(--font-sans);font-size:var(--text-base, 14px);outline:none;transition:border-color var(--transition-fast, .15s)}.chat-input-bar input:focus{border-color:#334155}.chat-input-bar input::placeholder{color:var(--text-tertiary, #7d7d7d)}.chat-input-bar button{height:44px;min-width:44px;padding:0 var(--space-4, 1rem);background:#22c55e;border:none;border-radius:var(--radius-lg, 8px);color:#0a0a0f;font-family:var(--font-sans);font-size:var(--text-sm, 13px);font-weight:600;cursor:pointer;flex-shrink:0;transition:background var(--transition-fast, .15s),opacity var(--transition-fast, .15s)}.chat-input-bar button:hover{background:#16a34a}.chat-input-bar button:disabled{opacity:.4;cursor:not-allowed}.chat-permission-inline{display:flex;align-items:center;gap:var(--space-2, .5rem);padding:var(--space-3, .75rem) var(--space-4, 1rem);background:#f59e0b14;border:1px solid rgba(245,158,11,.2);border-radius:var(--radius-lg, 8px);margin:var(--space-2, .5rem) 0}.chat-permission-inline .permission-label{flex:1;font-size:var(--text-sm, 13px);color:#f59e0b;font-weight:500}.chat-permission-inline .btn-allow{height:34px;padding:0 var(--space-4, 1rem);background:#22c55e;border:none;border-radius:var(--radius-md, 6px);color:#0a0a0f;font-size:var(--text-sm, 13px);font-weight:600;cursor:pointer;transition:background var(--transition-fast, .15s)}.chat-permission-inline .btn-allow:hover{background:#16a34a}.chat-permission-inline .btn-deny{height:34px;padding:0 var(--space-4, 1rem);background:transparent;border:1px solid #ef4444;border-radius:var(--radius-md, 6px);color:#ef4444;font-size:var(--text-sm, 13px);font-weight:600;cursor:pointer;transition:background var(--transition-fast, .15s),color var(--transition-fast, .15s)}.chat-permission-inline .btn-deny:hover{background:#ef444426}@media(max-width:768px){.terminal-topbar{padding:var(--space-2, .5rem) var(--space-3, .75rem);gap:var(--space-2, .5rem);min-height:44px}.terminal-input input,.chat-input-bar input{min-width:0}.chat-permission-inline{flex-wrap:wrap}.chat-permission-inline .permission-label{width:100%;margin-bottom:var(--space-1, .25rem)}}:root{--button-font-family: var(--font-sans);--button-font-size: var(--text-sm);--button-font-weight: 500;--button-color: var(--ds-blue-700);--button-text-color: #fff;--button-padding: 8px 16px;--button-border-radius: var(--radius-md);--button-border: 1px solid transparent;--button-hover-color: var(--ds-blue-900);--button-hover-text-color: #fff;--button-content-gap: 8px;--input-background: var(--ds-gray-100);--input-font-family: var(--font-sans);--input-font-size: var(--text-base);--input-font-weight: 400;--input-radius: var(--radius-md);--input-padding: 10px 12px;--input-height: 40px;--input-width: 100%;--input-margin: 0;--input-box-shadow: none;--input-border: 1px solid var(--border);--input-focus-border: 1px solid var(--ds-blue-700);--input-text-color: var(--text-primary);--input-placeholder-color: var(--text-tertiary);--input-label-msg-text-color: var(--text-secondary);--input-label-msg-text-size: var(--text-sm);--input-label-msg-text-weight: 400;--input-label-msg-margin: 0 0 var(--space-2) 0;--input-error-msg-text-color: var(--ds-red-700);--input-error-msg-text-size: var(--text-xs);--input-info-msg-text-color: var(--text-tertiary);--input-info-msg-text-size: var(--text-xs);--input-info-msg-margin: var(--space-2) 0 0 0;--input-container-margin: 0 0 var(--space-5) 0;--banner-background: var(--ds-gray-100);--banner-color: var(--text-secondary);--banner-font-family: var(--font-sans);--banner-font-size: var(--text-sm);--banner-font-weight: 500;--banner-padding: 12px 16px;--banner-gap: 10px;--banner-justify-content: flex-start;--banner-icon-size: 16px;--banner-link-color: var(--ds-blue-900);--banner-cursor: default;--banner-position: relative;--banner-z-index: auto;--banner-dismiss-hover-background: var(--ds-gray-alpha-200);--banner-dismiss-color: var(--text-tertiary);--pill-background: var(--ds-gray-300);--pill-color: var(--text-secondary);--pill-font-family: var(--font-sans);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 4px 10px;--pill-border-radius: var(--radius-full);--pill-border: none;--pill-hover-background: var(--ds-gray-400);--pill-hover-color: var(--text-primary);--badge-background: var(--ds-gray-500);--badge-color: #fff;--badge-font-family: var(--font-sans);--badge-font-size: var(--text-xs);--badge-padding: 2px 6px;--badge-border-radius: var(--radius-full);--badge-border: none;--badge-wrap-margin: 0;--badge-wrap-padding: 0;--badge-img-width: 24px;--badge-img-height: 24px;--badge-img-border-radius: var(--radius-sm);--badge-img-icon-shadow: none;--badge-min-width: 6px;--badge-min-height: 6px;--tabs-bar-background: transparent;--tabs-bar-padding: 0;--tabs-bar-gap: 0;--tabs-bar-border-bottom: 1px solid var(--border);--tabs-item-padding: 10px 16px;--tabs-item-font-size: var(--text-sm);--tabs-item-font-weight: 500;--tabs-item-font-family: var(--font-sans);--tabs-item-color: var(--text-tertiary);--tabs-item-background: transparent;--tabs-active-color: var(--text-primary);--tabs-active-font-weight: 600;--tabs-indicator-color: var(--ds-blue-700);--tabs-indicator-height: 2px;--tabs-hover-color: var(--text-secondary);--tabs-hover-background: var(--ds-gray-alpha-100);--tabs-transition: color .15s ease, background .15s ease;--sheet-overlay-background: rgba(0, 0, 0, .6);--sheet-background: var(--ds-gray-100);--sheet-box-shadow: -4px 0 16px rgba(0, 0, 0, .3);--sheet-border: none;--sheet-header-padding: 16px 20px;--sheet-header-background: var(--ds-gray-100);--sheet-header-border-bottom: 1px solid var(--border);--sheet-title-font-size: var(--text-lg);--sheet-title-font-weight: 600;--sheet-title-font-family: var(--font-sans);--sheet-title-color: var(--text-primary);--sheet-close-button-color: var(--text-tertiary);--sheet-close-button-hover-background: var(--ds-gray-300);--sheet-content-padding: 20px;--sheet-footer-padding: 16px 20px;--sheet-footer-background: var(--ds-gray-100);--sheet-footer-border-top: 1px solid var(--border);--select-bgcolor: var(--ds-gray-100);--select-font-family: var(--font-sans);--select-font-size: var(--text-base);--select-radius: var(--radius-md);--select-box-shadow: none;--select-border: 1px solid var(--border);--select-color: var(--text-primary);--select-hover-color: var(--text-primary);--select-hover-bgcolor: var(--ds-gray-200);--item-padding: 10px 12px;--item-background-color: var(--ds-gray-100);--non-selected-hover-bg: var(--ds-gray-200);--non-selected-hover-color: var(--text-primary);--non-selected-item-bgcolor: var(--ds-gray-100);--non-selected-item-color: var(--text-secondary);--non-selected-items-border-radius: var(--radius-md);--selected-item-background-color: var(--ds-gray-200);--selected-item-padding: 10px 12px;--selected-color: var(--text-primary);--selected-hover-bg: var(--ds-gray-200);--label-text-color: var(--text-secondary);--label-text-size: var(--text-xs);--label-text-weight: 500;--shimmer-background: var(--ds-gray-200);--shimmer-highlight: rgba(255, 255, 255, .04);--shimmer-border-radius: var(--radius-md);--shimmer-duration: 1.5s;--avatar-background: var(--ds-gray-300);--avatar-text-color: var(--text-secondary);--avatar-font-family: var(--font-sans);--avatar-border: none;--avatar-small-width: 28px;--avatar-small-height: 28px;--avatar-medium-width: 36px;--avatar-medium-height: 36px;--avatar-large-width: 48px;--avatar-large-height: 48px;--avatar-small-font-size: 11px;--avatar-medium-font-size: 13px;--avatar-large-font-size: 18px;--choicebox-background: var(--ds-gray-100);--choicebox-border: 2px solid var(--border);--choicebox-border-radius: var(--radius-lg);--choicebox-padding: 16px;--choicebox-gap: 12px;--choicebox-hover-border-color: var(--border-hover);--choicebox-hover-background: var(--ds-gray-200);--choicebox-selected-border-color: var(--ds-blue-700);--choicebox-selected-background: var(--ds-blue-100);--choicebox-title-color: var(--text-primary);--choicebox-title-font-size: var(--text-base);--choicebox-title-font-weight: 500;--choicebox-title-font-family: var(--font-sans);--choicebox-description-color: var(--text-tertiary);--choicebox-description-font-size: var(--text-sm);--choicebox-indicator-border: 2px solid var(--ds-gray-500);--choicebox-indicator-selected-color: var(--ds-blue-700);--choicebox-focus-ring: 0 0 0 3px rgba(0, 112, 243, .2);--toast-font-family: var(--font-sans);--toast-font-size: var(--text-sm);--toast-border-radius: var(--radius-lg);--toast-padding: 12px 16px;--toast-background-color: var(--ds-gray-200);--toast-z-index: 1000;--toast-success-background-color: var(--ds-green-100);--toast-success-text: var(--ds-green-900);--toast-error-background-color: var(--ds-red-100);--toast-error-text: var(--ds-red-900);--toast-info-background-color: var(--ds-blue-100);--toast-info-text: var(--ds-blue-900);--toast-warn-background-color: var(--ds-amber-100);--toast-warn-text: var(--ds-amber-900);--background-color: rgba(0, 0, 0, .6);--modal-content-background-color: var(--ds-gray-100);--modal-border-radius: var(--radius-xl);--modal-scrollbar-width: none;--modal-header-background-color: var(--ds-gray-100);--modal-header-padding: 16px 20px;--modal-header-border-bottom: 1px solid var(--border);--modal-footer-background-color: var(--ds-gray-100);--modal-footer-padding: 16px 20px;--modal-footer-border-top: 1px solid var(--border)}.btn-primary{--button-color: var(--ds-gray-1000);--button-text-color: var(--ds-background-100);--button-border: 1px solid var(--ds-gray-1000);--button-hover-color: #fff;--button-hover-text-color: var(--ds-background-100);--button-hover-border: 1px solid #fff}.btn-secondary{--button-color: var(--ds-background-100);--button-text-color: var(--ds-gray-1000);--button-border: 1px solid var(--ds-gray-400);--button-hover-color: var(--ds-gray-100);--button-hover-text-color: var(--ds-gray-1000);--button-hover-border: 1px solid var(--ds-gray-400)}.btn-ghost{--button-color: transparent;--button-text-color: var(--ds-gray-1000);--button-hover-color: var(--ds-gray-alpha-100);--button-hover-text-color: var(--ds-gray-1000)}.btn-danger{--button-color: #d93036;--button-text-color: #fff;--button-hover-color: #ff6166;--button-hover-text-color: #fff}.btn-warning{--button-color: #ff990a;--button-text-color: var(--ds-background-100);--button-hover-color: #ffb224;--button-hover-text-color: var(--ds-background-100)}.btn-connect{--button-color: #0d9488;--button-text-color: #fff;--button-hover-color: #14b8a6;--button-hover-text-color: #fff;--button-border: 1px solid #0d9488;--button-hover-border: 1px solid #14b8a6}.btn-resume{--button-color: transparent;--button-text-color: var(--ds-gray-900);--button-border: 1px solid var(--ds-gray-400);--button-hover-color: var(--ds-gray-100);--button-hover-text-color: var(--ds-gray-1000);--button-hover-border: 1px solid var(--ds-gray-600)}.btn-sm{--button-height: 32px;--button-padding: 0 10px;--button-font-size: var(--text-base)}.btn-xs{--button-height: 28px;--button-padding: 0 8px;--button-font-size: var(--text-xs);--button-border-radius: var(--radius-sm)}.btn-lg{--button-height: 48px;--button-padding: 0 20px;--button-font-size: var(--text-lg);--button-border-radius: var(--radius-lg)}.banner-alert{border-radius:var(--radius-md)}.banner-success{--banner-background: var(--ds-green-100);--banner-color: var(--ds-green-900);--banner-icon-color: var(--ds-green-900);border-radius:var(--radius-md)}.banner-error{--banner-background: var(--ds-red-100);--banner-color: var(--ds-red-900);--banner-icon-color: var(--ds-red-900);border-radius:var(--radius-md)}.banner-warning{--banner-background: var(--ds-amber-100);--banner-color: var(--ds-amber-900);--banner-icon-color: var(--ds-amber-900);border-radius:var(--radius-md)}.banner-info{--banner-background: var(--ds-blue-100);--banner-color: var(--ds-blue-900);--banner-icon-color: var(--ds-blue-900);border-radius:var(--radius-md)}.input-mono{--input-font-family: var(--font-mono);--input-font-size: var(--text-sm)}.avatar-user{--avatar-background: var(--ds-blue-100);--avatar-text-color: var(--ds-blue-900)}.avatar-assistant{--avatar-background: var(--ds-green-100);--avatar-text-color: var(--ds-green-900)}.btn-remove{--button-height: 24px;--button-width: 24px;--button-padding: 0;--button-font-size: 16px;--button-border-radius: var(--radius-sm)}.pill-session-time{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: var(--text-xs);--pill-padding: 4px 10px;--pill-hover-background: var(--ds-green-100);--pill-hover-color: var(--ds-green-900);--pill-cursor: inherit}.pill-tool-name{--pill-background: var(--ds-gray-300);--pill-color: var(--text-primary);--pill-font-size: var(--text-xs);--pill-font-family: var(--font-mono);--pill-padding: 2px 8px;--pill-hover-background: var(--ds-gray-300);--pill-cursor: inherit}.pill-tool-success{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: var(--text-xs);--pill-padding: 2px 8px;--pill-hover-background: var(--ds-green-100);--pill-cursor: inherit}.pill-tool-error{--pill-background: var(--ds-red-100);--pill-color: var(--ds-red-900);--pill-font-size: var(--text-xs);--pill-padding: 2px 8px;--pill-hover-background: var(--ds-red-100);--pill-cursor: inherit}.pill-live{--pill-background: var(--ds-green-alpha-200);--pill-color: var(--ds-green-700);--pill-border: 1px solid var(--ds-green-alpha-400);--pill-font-size: .7rem;--pill-padding: 2px 10px;--pill-hover-background: var(--ds-green-alpha-200);--pill-hover-color: var(--ds-green-700);--pill-cursor: default;font-weight:700;letter-spacing:.05em}.pill-badge-ai{--pill-background: var(--ds-blue-100);--pill-color: var(--ds-blue-900);--pill-font-size: 9px;--pill-padding: 2px 6px;--pill-hover-background: var(--ds-blue-100);--pill-cursor: inherit;font-weight:700;letter-spacing:.05em}.pill-badge-shell{--pill-background: var(--ds-gray-300);--pill-color: var(--text-secondary);--pill-font-size: 9px;--pill-padding: 2px 6px;--pill-hover-background: var(--ds-gray-300);--pill-cursor: inherit;font-weight:700;letter-spacing:.05em}.pill-badge-ended{--pill-background: var(--ds-gray-alpha-200);--pill-color: var(--text-tertiary);--pill-font-size: 9px;--pill-padding: 2px 6px;--pill-hover-background: var(--ds-gray-alpha-200);--pill-cursor: inherit;font-weight:700;letter-spacing:.05em}.pill-exit-ok{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: 10px;--pill-font-family: var(--font-mono);--pill-padding: 2px 6px;--pill-hover-background: var(--ds-green-100);--pill-cursor: inherit}.pill-exit-error{--pill-background: var(--ds-red-100);--pill-color: var(--ds-red-900);--pill-font-size: 10px;--pill-font-family: var(--font-mono);--pill-padding: 2px 6px;--pill-hover-background: var(--ds-red-100);--pill-cursor: inherit}.pill-source-claude-code{--pill-background: var(--ds-blue-100);--pill-color: var(--ds-blue-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-blue-100);--pill-hover-color: var(--ds-blue-900);--pill-cursor: inherit}.pill-source-opencode{--pill-background: var(--ds-amber-100);--pill-color: var(--ds-amber-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-amber-100);--pill-hover-color: var(--ds-amber-900);--pill-cursor: inherit}.pill-source-codex{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-green-100);--pill-hover-color: var(--ds-green-900);--pill-cursor: inherit}.pill-source-gemini{--pill-background: var(--ds-gray-100);--pill-color: var(--ds-gray-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-gray-100);--pill-hover-color: var(--ds-gray-900);--pill-cursor: inherit}.pill-source-qwen{--pill-background: var(--ds-red-100);--pill-color: var(--ds-red-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-red-100);--pill-hover-color: var(--ds-red-900);--pill-cursor: inherit}.pill-source-cursor{--pill-background: var(--ds-blue-100);--pill-color: var(--ds-blue-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-blue-100);--pill-hover-color: var(--ds-blue-900);--pill-cursor: inherit}.pill-source-copilot,.pill-source-amp{--pill-background: var(--ds-amber-100);--pill-color: var(--ds-amber-900);--pill-font-size: 10px;--pill-padding: 2px 8px;--pill-hover-background: var(--ds-amber-100);--pill-hover-color: var(--ds-amber-900);--pill-cursor: inherit}.icon-14{--icon-width: 14px;--icon-height: 14px;--icon-padding: 0;--icon-container-paddding: 0}.icon-16{--icon-width: 16px;--icon-height: 16px;--icon-padding: 0;--icon-container-paddding: 0}.icon-18{--icon-width: 18px;--icon-height: 18px;--icon-padding: 0;--icon-container-paddding: 0}.icon-24{--icon-width: 24px;--icon-height: 24px;--icon-padding: 0;--icon-container-paddding: 0}.icon-26{--icon-width: 26px;--icon-height: 26px;--icon-padding: 0;--icon-container-paddding: 0}.terminal-time{--relative-time-font-size: var(--text-xs);--relative-time-color: var(--text-tertiary);--relative-time-font-weight: 400;white-space:nowrap;flex-shrink:0}.pill-status-online{--pill-background: var(--ds-green-100);--pill-color: var(--ds-green-900);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-green-100);--pill-hover-color: var(--ds-green-900);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-offline{--pill-background: var(--ds-red-100);--pill-color: var(--ds-red-900);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-red-100);--pill-hover-color: var(--ds-red-900);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-degraded{--pill-background: var(--ds-amber-100);--pill-color: var(--ds-amber-900);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-amber-100);--pill-hover-color: var(--ds-amber-900);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-unknown{--pill-background: var(--ds-gray-300);--pill-color: var(--text-secondary);--pill-font-size: var(--text-xs);--pill-font-weight: 500;--pill-padding: 0 var(--space-3);--pill-border-radius: var(--radius-full);--pill-hover-background: var(--ds-gray-300);--pill-hover-color: var(--text-secondary);--pill-cursor: default;height:26px;text-transform:uppercase;letter-spacing:.02em}.pill-status-online:before,.pill-status-offline:before,.pill-status-degraded:before,.pill-status-unknown:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:currentcolor;flex-shrink:0}.shimmer{width:var(--shimmer-width, 100%);height:var(--shimmer-height, 16px);border-radius:var(--shimmer-border-radius, 4px);background-color:var(--shimmer-background, var(--ds-gray-alpha-200, #e0e0e0));opacity:var(--shimmer-opacity, 1);overflow:hidden;position:relative}.shimmer:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--shimmer-highlight, rgba(255, 255, 255, .08)),transparent);animation:shimmer var(--shimmer-duration, 1.5s) infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.shimmer-header{--shimmer-height: 80px;--shimmer-border-radius: var(--radius-lg);margin-bottom:1rem}.shimmer-card{--shimmer-height: 120px;--shimmer-border-radius: var(--radius-lg)}.shimmer-bubble{--shimmer-height: 60px;--shimmer-border-radius: var(--radius-lg);margin-bottom:var(--space-3)}.shimmer-bubble-user{--shimmer-width: 60%;margin-left:auto}.shimmer-bubble-assistant{--shimmer-width: 75%}.shimmer-bubble-user-short{--shimmer-width: 50%;margin-left:auto}.shimmer-bubble-assistant-wide{--shimmer-width: 80%}.shimmer-bubble-assistant-short{--shimmer-width: 40%}@media(max-width:768px){.shimmer-card{--shimmer-height: 90px}.btn-xs{min-height:36px;padding:6px 12px}}.nav-right.svelte-12qhfyh{display:flex;align-items:center;gap:var(--space-2)}.btn-gear{--button-color: transparent;--button-text-color: var(--text-muted);--button-border: none;--button-padding: 0;--button-height: 36px;--button-width: 36px;--button-border-radius: var(--radius-md);--button-hover-color: var(--component-bg);--button-hover-text-color: var(--text-primary)}.btn-gear:focus-visible{outline:2px solid var(--ds-green-700);outline-offset:2px}.btn-gear-active{--button-color: var(--component-bg);--button-text-color: var(--text-primary)}.content-area.svelte-12qhfyh{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:env(safe-area-inset-bottom,0px)}.bottom-tabs.svelte-12qhfyh{height:64px;background:var(--background);border-top:1px solid var(--border);flex-shrink:0;z-index:100;padding-bottom:env(safe-area-inset-bottom,0)}.bottom-tabs-inner.svelte-12qhfyh{max-width:600px;margin:0 auto;padding:6px var(--space-4) 4px;display:flex;align-items:center;justify-content:space-around;height:100%;box-sizing:border-box}.tab-item.svelte-12qhfyh{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--text-muted);font-size:11px;font-weight:500;text-decoration:none;padding:6px 36px;border-radius:var(--radius-md);transition:color var(--transition-fast);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;min-height:48px}.tab-item.svelte-12qhfyh:hover{color:var(--text-secondary)}.tab-item.active.svelte-12qhfyh{color:var(--ds-green-700)}.tab-item.svelte-12qhfyh .icon{flex-shrink:0}@media(max-width:480px){.btn-gear{--button-height: 44px;--button-width: 44px}.bottom-tabs.svelte-12qhfyh{height:60px}.tab-item.svelte-12qhfyh{padding:6px 28px;font-size:10px;gap:3px;min-height:44px}.pill-status-online,.pill-status-offline,.pill-status-degraded,.pill-status-unknown{font-size:10px;height:22px}.page-header{flex-direction:column!important;gap:var(--space-3)!important}.page-header .btn-group{width:100%}.page-header .btn-group .btn{flex:1;justify-content:center}}
@@ -0,0 +1 @@
1
+ import{s as r,p as e}from"./nWG9RHyB.js";const a={get params(){return e.params},get url(){return e.url}};r.updated.check;const s=a;export{s as p};
@@ -0,0 +1 @@
1
+ import{p as ge,a as r,f as i,d as kt,i as g,g as bt,h as yt,s as K,j as O,b as R}from"./Cg3dlX05.js";import{c as s,O as wt,r as a,t as A,p as Et,s as Se,q as St,F as Tt,g as e,P as It,d as o,b as pe,w as Dt,B as Me,A as P,x as u}from"./DYuMZGL5.js";import{a as zt,s as ce,P as be,B as Ge,e as ye,i as He,A as Ve,I as Ct,h as Te}from"./DZvnhU_8.js";import{r as Ie}from"./BDcFu3l7.js";import{S as Ye}from"./C_9BZILB.js";var Pt=i('<div><div class="accordion-content svelte-14pncvc"><!></div></div>');function De(B,n){let $=ge(n,"expand",3,!1);var ee=Pt();let te;var we=s(ee),ze=s(we);zt(ze,()=>n.children??wt),a(we),a(ee),A(()=>te=ce(ee,1,`accordion ${n.classes??""??""}`,"svelte-14pncvc",te,{expanded:$()})),r(B,ee)}function At(B,n){return B==="Bash"?n.command||n.description||"":B==="Read"||B==="Edit"||B==="Write"?n.file_path||"":B==="Grep"||B==="Glob"?n.pattern||"":B==="Agent"?n.description||n.prompt?.slice(0,50)||"":JSON.stringify(n).slice(0,60)}var Bt=i('<div class="chatview-header svelte-1tpzk7f"><div class="chatview-header-left svelte-1tpzk7f"><!> <span class="chatview-title svelte-1tpzk7f">Session</span></div> <div class="chatview-header-right svelte-1tpzk7f"><span><span class="connection-status-dot"></span> </span> <!></div></div>'),Gt=i('<div class="chatview-empty svelte-1tpzk7f"><p class="chatview-empty-text svelte-1tpzk7f">Waiting for session messages...</p></div>'),Ht=i('<div class="chat-bubble chat-bubble-user"></div>'),Nt=i('<div class="chat-message chat-message-user"><div><!> <div class="chat-timestamp"> </div></div> <!></div>'),Ot=i('<div class="chat-tool-body"> </div>'),Ut=i('<div class="chat-tool-card svelte-1tpzk7f"><div class="chat-tool-header" role="button" tabindex="0"><span>&#9654;</span> <!> <span class="chat-tool-description"> </span></div> <!></div>'),Ft=i('<div class="chat-tool-group-body svelte-1tpzk7f"></div>'),Kt=i('<div class="chat-tool-group svelte-1tpzk7f"><div class="chat-tool-group-header svelte-1tpzk7f" role="button" tabindex="0"><span>&#9654;</span> <span class="chat-tool-group-summary svelte-1tpzk7f"> </span></div> <!></div>'),Rt=i('<div class="chat-bubble chat-bubble-assistant"></div>'),Lt=i('<div class="chat-tool-body"> </div>'),Wt=i('<div class="chat-tool-card"><div class="chat-tool-header" role="button" tabindex="0"><span>&#9654;</span> <!> <span class="chat-tool-description"> </span></div> <!></div>'),jt=i('<div class="chat-thinking-body"></div>'),qt=i('<div class="chat-thinking"><div class="chat-thinking-header" role="button" tabindex="0"> </div> <!></div>'),Jt=i('<div class="chat-message chat-message-assistant"><!> <div><!> <div class="chat-timestamp"> </div></div></div>'),Mt=i("<div> </div>"),Vt=i('<div class="chat-message chat-message-system"><div class="chat-tool-card"><div class="chat-tool-header" role="button" tabindex="0"><span>&#9654;</span> <!></div> <!></div></div>'),Yt=i('<div class="chat-message chat-message-system"><div class="chat-bubble chat-bubble-system"></div></div>'),Qt=i('<div class="chatview-ended svelte-1tpzk7f"><!> <span>Session has ended</span></div>'),Xt=i('<div class="chatview-details-toggle svelte-1tpzk7f"><!></div> <!> <!>',1),Zt=i('<div class="chat-input-bar"><!> <!></div>'),$t=i('<div class="chatview-wrapper svelte-1tpzk7f"><!> <div class="chat-container chatview-scroll svelte-1tpzk7f"><!></div> <!></div>');function oa(B,n){Et(n,!0);const $=ge(n,"connectionState",3,"idle"),ee=ge(n,"newestFirst",3,!1),te=ge(n,"sessionEnded",3,!1),we=ge(n,"showHeader",3,!1),ze=ge(n,"showInput",3,!0),Ne=u(()=>te()||(n.sendDisabled!==void 0?n.sendDisabled:$()!=="connected"));let me=Se(""),q=Se(null),Ce=Se(!0);const ae=new Ye,Ee=new Ye,Oe="shooter:chatview:showDetails";let D=Se(St(localStorage.getItem(Oe)==="true"));function Qe(){pe(D,!e(D)),localStorage.setItem(Oe,String(e(D)))}function Xe(t,l){const _=[];let k=[],z=0;function G(){if(k.length!==0){if(k.length===1)_.push(k[0]);else{const L=k.map(C=>C.toolName),E=[...new Set(L)],v=`Used ${k.length} tools: ${E.join(", ")}`;_.push({groupId:`toolgroup-${l}-${z}`,summary:v,tools:k,type:"tool_group"}),z++}k=[]}}for(const L of t)L.type==="tool_use"?k.push(L):(G(),_.push(L));return G(),_}function Ze(t){return t.type==="tool_group"}function $e(t){return t.parts.every(l=>l.type==="tool_result")}Tt(()=>{n.messages,et()});async function et(){!e(Ce)||!e(q)||(await It(),ee()?e(q).scrollTop=0:e(q).scrollTop=e(q).scrollHeight)}function tt(){if(!e(q))return;const{clientHeight:t,scrollHeight:l,scrollTop:_}=e(q);ee()?pe(Ce,_<100):pe(Ce,l-_-t<100)}function Ue(){const t=e(me).trim();t&&(pe(me,""),n.onSendInput?.(t))}function at(t){t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),Ue())}function J(t){ae.has(t)?ae.delete(t):ae.add(t)}function Fe(t){Ee.has(t)?Ee.delete(t):Ee.add(t)}function Ke(t){if(!t)return"";const l=new Date(t);return Number.isNaN(l.getTime())?"":l.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}function Re(t){return At(t.toolName,t.input)}function Le(t){return JSON.stringify(t,null,2)}function st(t){return t.type==="tool_use"}var Pe=$t(),We=s(Pe);{var rt=t=>{var l=Bt(),_=s(l),k=s(_);be(k,{text:"LIVE",classes:"pill-live"}),Me(2),a(_);var z=o(_,2),G=s(z),L=o(s(G));a(G);var E=o(G,2);{var v=C=>{Ge(C,{classes:"btn-danger btn-sm",onclick:()=>{n.onCancel()},text:"Cancel"})};g(E,C=>{!te()&&n.onCancel&&C(v)})}a(z),a(l),A(()=>{ce(G,1,`connection-status ${$()??""}`,"svelte-1tpzk7f"),K(L,` ${$()==="connected"?"Connected":$()==="connecting"||$()==="reconnecting"?"Connecting...":"Disconnected"}`)}),r(t,l)};g(We,t=>{we()&&t(rt)})}var xe=o(We,2),nt=s(xe);{var ot=t=>{var l=Gt();r(t,l)},it=t=>{var l=Xt(),_=P(l),k=s(_);{let E=u(()=>e(D)?"active":""),v=u(()=>e(D)?"▼":"▶"),C=u(()=>e(D)?"Hide details":"Show details");Ge(k,{get classes(){return`chatview-details-btn ${e(E)??""}`},onclick:Qe,get text(){return`${e(v)??""} ${e(C)??""}`}})}a(_);var z=o(_,2);ye(z,17,()=>n.messages,E=>E.id,(E,v)=>{var C=O(),dt=P(C);{var ct=W=>{var U=Nt(),M=s(U),se=s(M);ye(se,17,()=>e(v).parts,He,(j,c)=>{var m=O(),_e=P(m);{var ke=ne=>{var oe=Ht();Te(oe,()=>Ie(e(c).content),!0),a(oe),r(ne,oe)};g(_e,ne=>{e(c).type==="text"&&ne(ke)})}r(j,m)});var re=o(se,2),V=s(re,!0);a(re),a(M);var ue=o(M,2);Ve(ue,{alt:"User",name:"User",size:"small",classes:"avatar-user"}),a(U),A(j=>K(V,j),[()=>Ke(e(v).timestamp)]),r(W,U)},ut=W=>{var U=Jt(),M=s(U);Ve(M,{alt:"Claude",name:"Claude",size:"small",classes:"avatar-assistant"});var se=o(M,2),re=s(se);ye(re,17,()=>Xe(e(v).parts,e(v).id),He,(j,c)=>{var m=O(),_e=P(m);{var ke=b=>{const f=u(()=>e(D)||Ee.has(e(c).groupId));var x=Kt(),p=s(x),h=s(p);let F;var S=o(h,2),T=s(S,!0);a(S),a(p);var X=o(p,2);{var Z=I=>{var d=Ft();ye(d,21,()=>e(c).tools,H=>H.id,(H,y)=>{const ie=u(()=>e(y).id),le=u(()=>e(D)||ae.has(e(ie)));var N=Ut(),w=s(N),ve=s(w);let he;var je=o(ve,2);be(je,{get text(){return e(y).toolName},classes:"pill-tool-name"});var qe=o(je,2),ft=s(qe,!0);a(qe),a(w);var ht=o(w,2);De(ht,{get expand(){return e(le)},children:(de,ea)=>{var Je=O(),pt=P(Je);{var gt=Ae=>{var Be=Ot(),mt=s(Be,!0);a(Be),A(xt=>K(mt,xt),[()=>Le(e(y).input)]),r(Ae,Be)};g(pt,Ae=>{e(le)&&Ae(gt)})}r(de,Je)},$$slots:{default:!0}}),a(N),A(de=>{he=ce(ve,1,"chat-tool-chevron",null,he,{expanded:e(le)}),K(ft,de)},[()=>Re(e(y))]),R("click",w,()=>{J(e(ie))}),R("keydown",w,de=>{(de.key==="Enter"||de.key===" ")&&(de.preventDefault(),J(e(ie)))}),r(H,N)}),a(d),r(I,d)};g(X,I=>{e(f)&&I(Z)})}a(x),A(()=>{F=ce(h,1,"chat-tool-group-chevron svelte-1tpzk7f",null,F,{expanded:e(f)}),K(T,e(c).summary)}),R("click",p,()=>{Fe(e(c).groupId)}),R("keydown",p,I=>{(I.key==="Enter"||I.key===" ")&&(I.preventDefault(),Fe(e(c).groupId))}),r(b,x)},ne=u(()=>Ze(e(c))),oe=b=>{var f=Rt();Te(f,()=>Ie(e(c).content),!0),a(f),r(b,f)},Y=b=>{const f=u(()=>e(c).id),x=u(()=>e(D)||ae.has(e(f)));var p=Wt(),h=s(p),F=s(h);let S;var T=o(F,2);be(T,{get text(){return e(c).toolName},classes:"pill-tool-name"});var X=o(T,2),Z=s(X,!0);a(X),a(h);var I=o(h,2);De(I,{get expand(){return e(x)},children:(d,H)=>{var y=O(),ie=P(y);{var le=N=>{var w=Lt(),ve=s(w,!0);a(w),A(he=>K(ve,he),[()=>Le(e(c).input)]),r(N,w)};g(ie,N=>{e(x)&&N(le)})}r(d,y)},$$slots:{default:!0}}),a(p),A(d=>{S=ce(F,1,"chat-tool-chevron",null,S,{expanded:e(x)}),K(Z,d)},[()=>Re(e(c))]),R("click",h,()=>{J(e(f))}),R("keydown",h,d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),J(e(f)))}),r(b,p)},Q=u(()=>st(e(c))),fe=b=>{const f=u(()=>`thinking-${e(v).id}`),x=u(()=>e(D)||ae.has(e(f)));var p=qt(),h=s(p),F=s(h);a(h);var S=o(h,2);De(S,{get expand(){return e(x)},children:(T,X)=>{var Z=O(),I=P(Z);{var d=H=>{var y=jt();Te(y,()=>Ie(e(c).content),!0),a(y),r(H,y)};g(I,H=>{e(x)&&H(d)})}r(T,Z)},$$slots:{default:!0}}),a(p),A(()=>K(F,`💭 Thinking... ${e(x)?"▼":"▶"}`)),R("click",h,()=>{J(e(f))}),R("keydown",h,T=>{(T.key==="Enter"||T.key===" ")&&(T.preventDefault(),J(e(f)))}),r(b,p)};g(_e,b=>{e(ne)?b(ke):e(c).type==="text"?b(oe,1):e(Q)?b(Y,2):e(c).type==="thinking"&&b(fe,3)})}r(j,m)});var V=o(re,2),ue=s(V,!0);a(V),a(se),a(U),A(j=>K(ue,j),[()=>Ke(e(v).timestamp)]),r(W,U)},_t=W=>{var U=O(),M=P(U);{var se=V=>{var ue=O(),j=P(ue);ye(j,17,()=>e(v).parts,He,(c,m)=>{var _e=O(),ke=P(_e);{var ne=Y=>{var Q=O(),fe=P(Q);{var b=f=>{const x=u(()=>`result-${e(m).toolUseId}`),p=u(()=>ae.has(e(x)));var h=Vt(),F=s(h),S=s(F),T=s(S);let X;var Z=o(T,2);{let d=u(()=>e(m).isError?"❌ Tool Error":"✅ Tool Result"),H=u(()=>e(m).isError?"pill-tool-error":"pill-tool-success");be(Z,{get text(){return e(d)},get classes(){return e(H)}})}a(S);var I=o(S,2);De(I,{get expand(){return e(p)},children:(d,H)=>{var y=O(),ie=P(y);{var le=N=>{var w=Mt();let ve;var he=s(w,!0);a(w),A(()=>{ve=ce(w,1,"chat-tool-result",null,ve,{"chat-tool-result-success":!e(m).isError,"chat-tool-result-error":e(m).isError}),K(he,e(m).output)}),r(N,w)};g(ie,N=>{e(p)&&N(le)})}r(d,y)},$$slots:{default:!0}}),a(F),a(h),A(()=>X=ce(T,1,"chat-tool-chevron",null,X,{expanded:e(p)})),R("click",S,()=>{J(e(x))}),R("keydown",S,d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),J(e(x)))}),r(f,h)};g(fe,f=>{e(D)&&f(b)})}r(Y,Q)},oe=Y=>{var Q=Yt(),fe=s(Q);Te(fe,()=>Ie(e(m).content),!0),a(fe),a(Q),r(Y,Q)};g(ke,Y=>{e(m).type==="tool_result"?Y(ne):e(m).type==="text"&&Y(oe,1)})}r(c,_e)}),r(V,ue)},re=u(()=>e(D)||!$e(e(v)));g(M,V=>{e(re)&&V(se)})}r(W,U)};g(dt,W=>{e(v).role==="user"?W(ct):e(v).role==="assistant"?W(ut,1):e(v).role==="system"&&W(_t,2)})}r(E,C)});var G=o(z,2);{var L=E=>{var v=Qt(),C=s(v);be(C,{text:"ENDED",classes:"pill-badge-ended"}),Me(2),a(v),r(E,v)};g(G,E=>{te()&&E(L)})}r(t,l)};g(nt,t=>{n.messages.length===0?t(ot):t(it,-1)})}a(xe),bt(xe,t=>pe(q,t),()=>e(q));var lt=o(xe,2);{var vt=t=>{var l=Zt(),_=s(l);{let z=u(()=>te()?"Session ended":"Send a message... (Shift+Enter for new line)");Ct(_,{dataType:"text",useTextArea:!0,get placeholder(){return e(z)},get disable(){return e(Ne)},onKeyDown:at,classes:"chat-input-field",get value(){return e(me)},set value(G){pe(me,G,!0)}})}var k=o(_,2);{let z=u(()=>e(Ne)||!e(me).trim());Ge(k,{classes:"btn-primary btn-sm",get disabled(){return e(z)},onclick:Ue,text:"Send"})}a(l),r(t,l)};g(lt,t=>{ze()&&t(vt)})}a(Pe),yt("scroll",xe,tt),r(B,Pe),Dt()}kt(["click","keydown"]);export{oa as C};
@@ -0,0 +1 @@
1
+ const o={amp:"amp","claude-code":"claude",codex:"codex",copilot:"copilot",cursor:"cursor-agent",gemini:"gemini",opencode:"opencode",qwen:"qwen"},c={amp:"Amp","claude-code":"Claude Code",codex:"Codex",copilot:"Copilot",cursor:"Cursor",gemini:"Gemini",opencode:"OpenCode",qwen:"Qwen"},n=Object.values(o);function d(e){return c[e]??"Claude Code"}function a(e){return o[e]??"claude"}export{n as A,d as a,a as s};
@@ -1 +1 @@
1
- import{s as e}from"./DOHhmtDH.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
1
+ import{s as e}from"./nWG9RHyB.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};