@agentdeck/shared 0.1.0 → 0.2.3

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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapter.d.ts +18 -3
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js +62 -0
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/command-builders.d.ts +35 -0
  7. package/dist/command-builders.d.ts.map +1 -0
  8. package/dist/command-builders.js +75 -0
  9. package/dist/command-builders.js.map +1 -0
  10. package/dist/connection-status.d.ts +42 -0
  11. package/dist/connection-status.d.ts.map +1 -0
  12. package/dist/connection-status.js +52 -0
  13. package/dist/connection-status.js.map +1 -0
  14. package/dist/d200h-layout.d.ts +131 -0
  15. package/dist/d200h-layout.d.ts.map +1 -0
  16. package/dist/d200h-layout.js +627 -0
  17. package/dist/d200h-layout.js.map +1 -0
  18. package/dist/design-tokens.d.ts +259 -0
  19. package/dist/design-tokens.d.ts.map +1 -0
  20. package/dist/design-tokens.js +156 -0
  21. package/dist/design-tokens.js.map +1 -0
  22. package/dist/eval-schema.d.ts +235 -0
  23. package/dist/eval-schema.d.ts.map +1 -0
  24. package/dist/eval-schema.js +23 -0
  25. package/dist/eval-schema.js.map +1 -0
  26. package/dist/format-utils.d.ts +52 -0
  27. package/dist/format-utils.d.ts.map +1 -0
  28. package/dist/format-utils.js +165 -0
  29. package/dist/format-utils.js.map +1 -0
  30. package/dist/gateway-protocol.d.ts +391 -0
  31. package/dist/gateway-protocol.d.ts.map +1 -0
  32. package/dist/gateway-protocol.js +19 -0
  33. package/dist/gateway-protocol.js.map +1 -0
  34. package/dist/index.d.ts +19 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +19 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/llm-settings.d.ts +52 -0
  39. package/dist/llm-settings.d.ts.map +1 -0
  40. package/dist/llm-settings.js +118 -0
  41. package/dist/llm-settings.js.map +1 -0
  42. package/dist/net-utils.d.ts +2 -1
  43. package/dist/net-utils.d.ts.map +1 -1
  44. package/dist/net-utils.js +100 -3
  45. package/dist/net-utils.js.map +1 -1
  46. package/dist/pricing.d.ts +45 -0
  47. package/dist/pricing.d.ts.map +1 -0
  48. package/dist/pricing.js +93 -0
  49. package/dist/pricing.js.map +1 -0
  50. package/dist/protocol.d.ts +496 -2
  51. package/dist/protocol.d.ts.map +1 -1
  52. package/dist/protocol.js +30 -1
  53. package/dist/protocol.js.map +1 -1
  54. package/dist/sample.d.ts +152 -0
  55. package/dist/sample.d.ts.map +1 -0
  56. package/dist/sample.js +22 -0
  57. package/dist/sample.js.map +1 -0
  58. package/dist/session-utils.d.ts +142 -0
  59. package/dist/session-utils.d.ts.map +1 -0
  60. package/dist/session-utils.js +304 -0
  61. package/dist/session-utils.js.map +1 -0
  62. package/dist/state-colors.d.ts +16 -0
  63. package/dist/state-colors.d.ts.map +1 -0
  64. package/dist/state-colors.js +48 -0
  65. package/dist/state-colors.js.map +1 -0
  66. package/dist/states.d.ts +2 -0
  67. package/dist/states.d.ts.map +1 -1
  68. package/dist/states.js +6 -1
  69. package/dist/states.js.map +1 -1
  70. package/dist/svg-renderers/agent-logos.d.ts +45 -0
  71. package/dist/svg-renderers/agent-logos.d.ts.map +1 -0
  72. package/dist/svg-renderers/agent-logos.js +238 -0
  73. package/dist/svg-renderers/agent-logos.js.map +1 -0
  74. package/dist/svg-renderers/index.d.ts +4 -0
  75. package/dist/svg-renderers/index.d.ts.map +1 -0
  76. package/dist/svg-renderers/index.js +4 -0
  77. package/dist/svg-renderers/index.js.map +1 -0
  78. package/dist/svg-renderers/session-slot-renderer.d.ts +78 -0
  79. package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -0
  80. package/dist/svg-renderers/session-slot-renderer.js +506 -0
  81. package/dist/svg-renderers/session-slot-renderer.js.map +1 -0
  82. package/dist/svg-renderers/text-utils.d.ts +29 -0
  83. package/dist/svg-renderers/text-utils.d.ts.map +1 -0
  84. package/dist/svg-renderers/text-utils.js +122 -0
  85. package/dist/svg-renderers/text-utils.js.map +1 -0
  86. package/dist/telemetry-envelope.d.ts +108 -0
  87. package/dist/telemetry-envelope.d.ts.map +1 -0
  88. package/dist/telemetry-envelope.js +34 -0
  89. package/dist/telemetry-envelope.js.map +1 -0
  90. package/dist/timeline-icons.d.ts +70 -0
  91. package/dist/timeline-icons.d.ts.map +1 -0
  92. package/dist/timeline-icons.js +161 -0
  93. package/dist/timeline-icons.js.map +1 -0
  94. package/dist/timeline-label.d.ts +38 -0
  95. package/dist/timeline-label.d.ts.map +1 -0
  96. package/dist/timeline-label.js +95 -0
  97. package/dist/timeline-label.js.map +1 -0
  98. package/dist/timeline-markdown.d.ts +80 -0
  99. package/dist/timeline-markdown.d.ts.map +1 -0
  100. package/dist/timeline-markdown.js +221 -0
  101. package/dist/timeline-markdown.js.map +1 -0
  102. package/dist/timeline-summarizer.d.ts +37 -0
  103. package/dist/timeline-summarizer.d.ts.map +1 -0
  104. package/dist/timeline-summarizer.js +125 -0
  105. package/dist/timeline-summarizer.js.map +1 -0
  106. package/dist/timeline.d.ts +135 -0
  107. package/dist/timeline.d.ts.map +1 -0
  108. package/dist/timeline.js +633 -0
  109. package/dist/timeline.js.map +1 -0
  110. package/dist/voice-paths.d.ts +4 -0
  111. package/dist/voice-paths.d.ts.map +1 -1
  112. package/dist/voice-paths.js +5 -0
  113. package/dist/voice-paths.js.map +1 -1
  114. package/package.json +9 -3
@@ -0,0 +1,506 @@
1
+ import { stateColor } from '../state-colors.js';
2
+ import { PASSIVE_OFFLINE_LABEL, OPEN_AGENTDECK_LABEL } from '../connection-status.js';
3
+ import { agentLogoIcon } from './agent-logos.js';
4
+ import { wrapTextByWidth, escSvgText } from './text-utils.js';
5
+ const SIZE = 144;
6
+ const BORDER_PERIMETER = 512;
7
+ // Shared sanitizer: strips ANSI/control chars before entity-escaping (a raw
8
+ // control char in interpolated text makes resvg reject the entire SVG).
9
+ const escXml = escSvgText;
10
+ function truncate(s, max) {
11
+ return s.length <= max ? s : s.slice(0, max - 1) + '\u2026';
12
+ }
13
+ /**
14
+ * Compact, readable model strings for narrow surfaces (StreamDeck 144\u00d7144 keys).
15
+ * - claude-sonnet-4-6 \u2192 "sonnet 4.6"
16
+ * - claude-opus-4-7 \u2192 "opus 4.7"
17
+ * - claude-haiku-4-5-20251001 \u2192 "haiku 4.5" (date suffix dropped)
18
+ * - gpt-5-codex / gpt-5 / others \u2192 unchanged (caller still truncates if needed)
19
+ */
20
+ export function aliasModelName(name) {
21
+ const claude = /^claude-([a-z]+)-(\d+)-(\d+)(?:-\d+)?$/i.exec(name);
22
+ if (claude)
23
+ return `${claude[1].toLowerCase()} ${claude[2]}.${claude[3]}`;
24
+ return name;
25
+ }
26
+ function stateLabel(state, agentType) {
27
+ if (!state)
28
+ return PASSIVE_OFFLINE_LABEL;
29
+ if (agentType === 'openclaw') {
30
+ if (state === 'idle')
31
+ return 'STANDBY';
32
+ if (state === 'processing')
33
+ return 'ROUTING';
34
+ }
35
+ switch (state) {
36
+ case 'idle': return 'IDLE';
37
+ case 'processing': return 'WORKING';
38
+ case 'awaiting_option':
39
+ case 'awaiting_permission':
40
+ case 'awaiting_diff':
41
+ return 'AWAITING';
42
+ default: return state.toUpperCase();
43
+ }
44
+ }
45
+ export function formatModelEffort(modelName, effortLevel, maxLen = 14) {
46
+ if (!modelName)
47
+ return '';
48
+ const aliased = aliasModelName(modelName);
49
+ const showEffort = effortLevel && effortLevel !== 'medium' && effortLevel !== 'default';
50
+ if (!showEffort)
51
+ return truncate(aliased, maxLen);
52
+ const combined = `${aliased} · ${effortLevel}`;
53
+ if (combined.length <= maxLen)
54
+ return combined;
55
+ const effortSuffix = ` · ${effortLevel}`;
56
+ const modelBudget = Math.max(4, maxLen - effortSuffix.length);
57
+ return truncate(aliased, modelBudget) + effortSuffix;
58
+ }
59
+ function toneColors(tone = 'info') {
60
+ switch (tone) {
61
+ case 'ready':
62
+ return { bg: '#06160d', panel: '#12331f', icon: '#86efac', accent: '#22c55e', text: '#dcfce7', sub: '#86efac' };
63
+ case 'idle':
64
+ return { bg: '#0b1320', panel: '#172033', icon: '#93c5fd', accent: '#60a5fa', text: '#dbeafe', sub: '#93c5fd' };
65
+ case 'warning':
66
+ return { bg: '#17110a', panel: '#2a1b0c', icon: '#fbbf24', accent: '#f59e0b', text: '#fde68a', sub: '#fbbf24' };
67
+ case 'danger':
68
+ return { bg: '#1c0c0c', panel: '#341312', icon: '#fca5a5', accent: '#ef4444', text: '#fee2e2', sub: '#fca5a5' };
69
+ case 'muted':
70
+ return { bg: '#0a0a0c', panel: '#17171a', icon: '#a1a1aa', accent: '#52525b', text: '#e4e4e7', sub: '#a1a1aa' };
71
+ case 'agent':
72
+ return { bg: '#141016', panel: '#241a2b', icon: '#f0abfc', accent: '#c084fc', text: '#fae8ff', sub: '#d8b4fe' };
73
+ case 'action':
74
+ return { bg: '#07170f', panel: '#12331f', icon: '#bbf7d0', accent: '#22c55e', text: '#dcfce7', sub: '#86efac' };
75
+ case 'brand':
76
+ // Aquarium-tide OFFLINE tone — matches the dark-scrim + cyan AgentDeck mark
77
+ // the macOS/iOS/Android connection overlays and the ESP32 splash draw.
78
+ return { bg: '#071a1e', panel: '#0e2e33', icon: '#3ED6E8', accent: '#3ED6E8', text: '#e6f7fa', sub: '#7fb2bc' };
79
+ case 'purple':
80
+ return { bg: '#120d1d', panel: '#24163a', icon: '#d8b4fe', accent: '#a78bfa', text: '#f3e8ff', sub: '#d8b4fe' };
81
+ case 'info':
82
+ default:
83
+ return { bg: '#0b1626', panel: '#12223a', icon: '#bfdbfe', accent: '#60a5fa', text: '#dbeafe', sub: '#93c5fd' };
84
+ }
85
+ }
86
+ function orbitOffset(animFrame, speedPx, phasePx = 0) {
87
+ return -((animFrame * speedPx + phasePx) % BORDER_PERIMETER);
88
+ }
89
+ function renderOrbitingRect(params) {
90
+ const { x, y, width, height, rx, color, animFrame, speedPx = 18, phasePx = 0, dashPx = 80, gapPx = BORDER_PERIMETER - dashPx, railOpacity = 0.18, glowOpacity = 0.58, coreOpacity = 0.96, railWidth = 1.2, glowWidth = 4.8, coreWidth = 2.2, filterId, } = params;
91
+ const dashOffset = orbitOffset(animFrame, speedPx, phasePx);
92
+ const filterAttr = filterId ? ` filter="url(#${filterId})"` : '';
93
+ const common = `x="${x}" y="${y}" width="${width}" height="${height}" rx="${rx}" fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round"`;
94
+ return [
95
+ `<rect ${common} stroke-width="${railWidth}" opacity="${railOpacity.toFixed(2)}"/>`,
96
+ `<rect ${common} stroke-width="${glowWidth}" stroke-dasharray="${dashPx} ${gapPx}" stroke-dashoffset="${dashOffset}" opacity="${glowOpacity.toFixed(2)}"${filterAttr}/>`,
97
+ `<rect ${common} stroke-width="${coreWidth}" stroke-dasharray="${dashPx} ${gapPx}" stroke-dashoffset="${dashOffset}" opacity="${coreOpacity.toFixed(2)}"/>`,
98
+ ].join('');
99
+ }
100
+ /**
101
+ * AgentDeck product mark — the aquarium dome over a hardware deck (glass dome +
102
+ * waterline + highlight + rounded deck base + three keys + two bubbles). Ported
103
+ * unit-for-unit (0..24 space) from the SwiftUI `AgentDeckLogo` / Compose
104
+ * `AgentDeckMark` so the Stream Deck / D200H offline hero shows the SAME brand
105
+ * mark that the macOS/iOS/Android connection overlays and the ESP32 splash draw.
106
+ * Centered on (x,y); `size` is the mark's width in px. `color` draws the dome/deck
107
+ * strokes + keys; `accent` tints the waterline + bubbles.
108
+ */
109
+ export function renderAgentDeckMark(x, y, size, color, accent = color) {
110
+ const u = size / 24; // unit-space (0..24) → px
111
+ const ax = (p) => +(x + (p - 12) * u).toFixed(2);
112
+ const ay = (p) => +(y + (p - 12) * u).toFixed(2);
113
+ const w = (n) => +(n * u).toFixed(2);
114
+ const cap = 'stroke-linecap="round" stroke-linejoin="round" fill="none"';
115
+ return [
116
+ // glass dome
117
+ `<path d="M${ax(4.7)} ${ay(12.8)} C${ax(5.3)} ${ay(4.9)} ${ax(18.7)} ${ay(4.9)} ${ax(19.3)} ${ay(12.8)}" stroke="${color}" stroke-width="${w(1.6)}" ${cap}/>`,
118
+ // waterline
119
+ `<path d="M${ax(6.1)} ${ay(11.2)} C${ax(8.8)} ${ay(12.5)} ${ax(15.2)} ${ay(12.5)} ${ax(17.9)} ${ay(11.2)}" stroke="${accent}" stroke-width="${w(1.15)}" opacity="0.6" ${cap}/>`,
120
+ // dome highlight
121
+ `<path d="M${ax(8.0)} ${ay(7.7)} C${ax(10.0)} ${ay(5.7)} ${ax(13.2)} ${ay(5.4)} ${ax(15.8)} ${ay(6.1)}" stroke="${color}" stroke-width="${w(0.9)}" opacity="0.34" ${cap}/>`,
122
+ // deck base
123
+ `<rect x="${ax(3.4)}" y="${ay(12.2)}" width="${w(17.2)}" height="${w(7.8)}" rx="${w(2.2)}" stroke="${color}" stroke-width="${w(1.6)}" opacity="0.88" fill="none"/>`,
124
+ // three deck keys
125
+ `<rect x="${ax(6.5)}" y="${ay(15.4)}" width="${w(3.1)}" height="${w(2.0)}" rx="${w(1.0)}" fill="${color}" opacity="0.70"/>`,
126
+ `<rect x="${ax(10.4)}" y="${ay(15.4)}" width="${w(3.1)}" height="${w(2.0)}" rx="${w(1.0)}" fill="${color}" opacity="0.92"/>`,
127
+ `<rect x="${ax(14.3)}" y="${ay(15.4)}" width="${w(3.1)}" height="${w(2.0)}" rx="${w(1.0)}" fill="${color}" opacity="0.70"/>`,
128
+ // interior bubbles
129
+ `<circle cx="${ax(9.6)}" cy="${ay(9.0)}" r="${w(0.95)}" fill="${accent}" opacity="0.62"/>`,
130
+ `<circle cx="${ax(14.8)}" cy="${ay(8.2)}" r="${w(0.6)}" fill="${accent}" opacity="0.42"/>`,
131
+ ].join('');
132
+ }
133
+ function renderGlyphIcon(kind, color, accent, x = 72, y = 43, scale = 1) {
134
+ const s = scale;
135
+ const sx = (n) => x + n * s;
136
+ const sy = (n) => y + n * s;
137
+ const common = `stroke="${color}" stroke-linecap="round" stroke-linejoin="round"`;
138
+ const accentStroke = `stroke="${accent}" stroke-linecap="round" stroke-linejoin="round"`;
139
+ switch (kind) {
140
+ case 'hub':
141
+ return [
142
+ `<circle cx="${x}" cy="${y}" r="${9 * s}" fill="${accent}" opacity="0.18" stroke="${color}" stroke-width="${2.4 * s}"/>`,
143
+ `<circle cx="${sx(-24)}" cy="${sy(17)}" r="${5 * s}" fill="${color}" opacity="0.9"/>`,
144
+ `<circle cx="${sx(24)}" cy="${sy(17)}" r="${5 * s}" fill="${color}" opacity="0.9"/>`,
145
+ `<circle cx="${x}" cy="${sy(-25)}" r="${5 * s}" fill="${color}" opacity="0.9"/>`,
146
+ `<path d="M${sx(-7)} ${sy(7)} L${sx(-20)} ${sy(14)} M${sx(7)} ${sy(7)} L${sx(20)} ${sy(14)} M${x} ${sy(-9)} L${x} ${sy(-20)}" ${accentStroke} stroke-width="${2.6 * s}" opacity="0.72" fill="none"/>`,
147
+ ].join('');
148
+ case 'no-session':
149
+ return [
150
+ `<path d="M${sx(-25)} ${sy(-3)} H${sx(25)} V${sy(21)} Q${sx(25)} ${sy(27)} ${sx(19)} ${sy(27)} H${sx(-19)} Q${sx(-25)} ${sy(27)} ${sx(-25)} ${sy(21)} Z" fill="${accent}" opacity="0.14" stroke="${color}" stroke-width="${2.4 * s}"/>`,
151
+ `<path d="M${sx(-14)} ${sy(-14)} H${sx(14)} M${sx(-7)} ${sy(-24)} H${sx(7)}" ${common} stroke-width="${2.6 * s}" opacity="0.82"/>`,
152
+ `<circle cx="${sx(-10)}" cy="${sy(13)}" r="${2.8 * s}" fill="${color}" opacity="0.55"/><circle cx="${x}" cy="${sy(13)}" r="${2.8 * s}" fill="${color}" opacity="0.38"/><circle cx="${sx(10)}" cy="${sy(13)}" r="${2.8 * s}" fill="${color}" opacity="0.24"/>`,
153
+ ].join('');
154
+ case 'agentdeck':
155
+ // The canonical dome-over-deck brand mark (parity with the native overlays).
156
+ return renderAgentDeckMark(x, y, 54 * s, color, accent);
157
+ case 'tool':
158
+ return `<circle cx="${sx(-18)}" cy="${sy(-13)}" r="${7 * s}" fill="none" stroke="${color}" stroke-width="${2.6 * s}"/><path d="M${sx(-12)} ${sy(-7)} L${sx(4)} ${sy(9)}" ${common} stroke-width="${3.8 * s}" fill="none"/><rect x="${sx(4)}" y="${sy(5)}" width="${22 * s}" height="${12 * s}" rx="${5 * s}" transform="rotate(45 ${sx(15)} ${sy(11)})" fill="${accent}" opacity="0.82"/>`;
159
+ case 'model':
160
+ return `<path d="M${x} ${sy(-27)} L${sx(24)} ${sy(-13)} V${sy(15)} L${x} ${sy(29)} L${sx(-24)} ${sy(15)} V${sy(-13)} Z" fill="${accent}" opacity="0.12" stroke="${color}" stroke-width="${2.4 * s}"/><path d="M${sx(-24)} ${sy(-13)} L${x} ${sy(1)} L${sx(24)} ${sy(-13)} M${x} ${sy(1)} V${sy(29)}" ${common} stroke-width="${2 * s}" opacity="0.7" fill="none"/>`;
161
+ case 'mode':
162
+ return `<path d="M${sx(-24)} ${sy(-18)} H${sx(24)} M${sx(-24)} ${y} H${sx(24)} M${sx(-24)} ${sy(18)} H${sx(24)}" ${common} stroke-width="${2.8 * s}" opacity="0.72"/><circle cx="${sx(-8)}" cy="${sy(-18)}" r="${5 * s}" fill="${accent}" stroke="${color}" stroke-width="${2 * s}"/><circle cx="${sx(13)}" cy="${y}" r="${5 * s}" fill="${accent}" stroke="${color}" stroke-width="${2 * s}"/><circle cx="${sx(-15)}" cy="${sy(18)}" r="${5 * s}" fill="${accent}" stroke="${color}" stroke-width="${2 * s}"/>`;
163
+ case 'ready':
164
+ case 'allow':
165
+ return `<circle cx="${x}" cy="${y}" r="${27 * s}" fill="${accent}" opacity="0.15" stroke="${color}" stroke-width="${2.6 * s}"/><path d="M${sx(-13)} ${sy(0)} L${sx(-3)} ${sy(11)} L${sx(16)} ${sy(-12)}" ${common} stroke-width="${5 * s}" fill="none"/>`;
166
+ case 'activity':
167
+ return `<path d="M${sx(-29)} ${y} H${sx(-18)} L${sx(-10)} ${sy(-16)} L${sx(3)} ${sy(18)} L${sx(12)} ${sy(-4)} H${sx(29)}" ${common} stroke-width="${4 * s}" fill="none"/><circle cx="${sx(29)}" cy="${y}" r="${4 * s}" fill="${accent}"/>`;
168
+ case 'open-app':
169
+ case 'play':
170
+ return `<rect x="${sx(-25)}" y="${sy(-22)}" width="${50 * s}" height="${44 * s}" rx="${9 * s}" fill="${accent}" opacity="0.16" stroke="${color}" stroke-width="${2.2 * s}"/><polygon points="${sx(-7)},${sy(-13)} ${sx(-7)},${sy(13)} ${sx(15)},${y}" fill="${color}"/>`;
171
+ case 'retry':
172
+ return `<path d="M${sx(20)} ${sy(-12)} A${26 * s} ${26 * s} 0 1 0 ${sx(23)} ${sy(13)}" fill="none" ${common} stroke-width="${4.5 * s}"/><path d="M${sx(20)} ${sy(-28)} V${sy(-10)} H${sx(2)}" fill="none" ${common} stroke-width="${4.5 * s}"/>`;
173
+ case 'offline':
174
+ return `<circle cx="${x}" cy="${y}" r="${25 * s}" fill="${accent}" opacity="0.14" stroke="${color}" stroke-width="${2.4 * s}"/><circle cx="${x}" cy="${y}" r="${4.5 * s}" fill="${color}"/><path d="M${x} ${sy(5)} V${sy(17)} M${sx(-16)} ${sy(18)} H${sx(16)}" ${accentStroke} stroke-width="${2.6 * s}" opacity="0.68"/>`;
175
+ case 'back':
176
+ return `<path d="M${sx(21)} ${y} H${sx(-18)} M${sx(-18)} ${y} L${sx(-2)} ${sy(-16)} M${sx(-18)} ${y} L${sx(-2)} ${sy(16)}" ${common} stroke-width="${5 * s}" fill="none"/>`;
177
+ case 'more':
178
+ return `<path d="M${sx(-18)} ${sy(-15)} L${sx(0)} ${y} L${sx(-18)} ${sy(15)} M${sx(3)} ${sy(-15)} L${sx(21)} ${y} L${sx(3)} ${sy(15)}" ${common} stroke-width="${4.5 * s}" fill="none"/>`;
179
+ case 'esc':
180
+ case 'deny':
181
+ return `<circle cx="${x}" cy="${y}" r="${27 * s}" fill="${accent}" opacity="0.14" stroke="${color}" stroke-width="${2.2 * s}"/><path d="M${sx(-12)} ${sy(-12)} L${sx(12)} ${sy(12)} M${sx(12)} ${sy(-12)} L${sx(-12)} ${sy(12)}" ${common} stroke-width="${4.8 * s}" fill="none"/>`;
182
+ case 'stop':
183
+ return `<rect x="${sx(-22)}" y="${sy(-22)}" width="${44 * s}" height="${44 * s}" rx="${8 * s}" fill="${accent}" opacity="0.16" stroke="${color}" stroke-width="${2.2 * s}"/><rect x="${sx(-11)}" y="${sy(-11)}" width="${22 * s}" height="${22 * s}" rx="${3 * s}" fill="${color}"/>`;
184
+ case 'review':
185
+ case 'diff':
186
+ return `<rect x="${sx(-18)}" y="${sy(-25)}" width="${36 * s}" height="${50 * s}" rx="${5 * s}" fill="${accent}" opacity="0.13" stroke="${color}" stroke-width="${2.4 * s}"/><path d="M${sx(-9)} ${sy(-10)} H${sx(10)} M${sx(-9)} ${sy(1)} H${sx(6)} M${sx(-9)} ${sy(12)} H${sx(2)}" ${common} stroke-width="${2.2 * s}" opacity="0.76"/>`;
187
+ case 'commit':
188
+ return `<circle cx="${x}" cy="${sy(-15)}" r="${7 * s}" fill="${color}"/><circle cx="${sx(-21)}" cy="${sy(18)}" r="${7 * s}" fill="${color}"/><circle cx="${sx(21)}" cy="${sy(18)}" r="${7 * s}" fill="${color}"/><path d="M${x} ${sy(-8)} V${sy(7)} M${x} ${sy(7)} H${sx(-21)} V${sy(11)} M${x} ${sy(7)} H${sx(21)} V${sy(11)}" ${accentStroke} stroke-width="${3 * s}" fill="none"/>`;
189
+ case 'clear':
190
+ return `<path d="M${sx(-16)} ${sy(-16)} L${sx(16)} ${sy(16)} M${sx(16)} ${sy(-16)} L${sx(-16)} ${sy(16)}" ${common} stroke-width="${4.5 * s}" fill="none"/>`;
191
+ case 'gateway':
192
+ return `<rect x="${sx(-28)}" y="${sy(-21)}" width="${56 * s}" height="${42 * s}" rx="${6 * s}" fill="${accent}" opacity="0.12" stroke="${color}" stroke-width="${2.2 * s}"/><path d="M${sx(-28)} ${sy(-8)} H${sx(28)} M${sx(-12)} ${sy(7)} H${sx(12)} M${x} ${sy(-5)} V${sy(19)}" ${common} stroke-width="${2.2 * s}" opacity="0.72"/>`;
193
+ case 'status':
194
+ return `<circle cx="${x}" cy="${y}" r="${27 * s}" fill="${accent}" opacity="0.14" stroke="${color}" stroke-width="${2.4 * s}"/><path d="M${x} ${sy(-15)} V${sy(4)}" ${common} stroke-width="${4.4 * s}"/><circle cx="${x}" cy="${sy(17)}" r="${4.5 * s}" fill="${color}"/>`;
195
+ case 'option':
196
+ default:
197
+ return `<rect x="${sx(-25)}" y="${sy(-20)}" width="${50 * s}" height="${40 * s}" rx="${8 * s}" fill="${accent}" opacity="0.13" stroke="${color}" stroke-width="${2.2 * s}"/><circle cx="${sx(-12)}" cy="${y}" r="${4 * s}" fill="${color}"/><circle cx="${x}" cy="${y}" r="${4 * s}" fill="${color}"/><circle cx="${sx(12)}" cy="${y}" r="${4 * s}" fill="${color}"/>`;
198
+ }
199
+ }
200
+ export function renderSessionSlot(session, isActive, animFrame, displayName, options) {
201
+ const isWorking = session.state === 'processing';
202
+ const isAsking = session.state?.startsWith('awaiting') ?? false;
203
+ const isIdle = !isWorking && !isAsking;
204
+ const animated = options?.animated ?? true;
205
+ const agent = session.agentType || 'claude-code';
206
+ const nameForDisplay = displayName ?? session.projectName;
207
+ const modelText = formatModelEffort(session.modelName, session.effortLevel, 15);
208
+ const p1 = agent === 'claude-code' ? '#D97757' : (agent === 'codex-cli' || agent === 'codex-app') ? '#8BA4FF' : agent === 'openclaw' ? '#FF6B6B' : '#F1ECEC';
209
+ const sColor = stateColor(session.state);
210
+ // RUNNING reads as a COOL teal (calm "in progress"); PERM keeps the semantic
211
+ // amber (stateColor → #f59e0b). Previously RUNNING used a gold #F5B942 that
212
+ // collided with awaiting's amber, so the two states looked near-identical.
213
+ const WORKING_COLOR = '#2DD4BF'; // teal — cool, clearly not amber
214
+ const signalColor = isWorking ? WORKING_COLOR : sColor;
215
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
216
+ const stateLbl = isWorking ? 'RUNNING' : isAsking ? 'PERMIT?' : 'IDLE';
217
+ const colorText = isWorking ? '#CCFBF1' : isAsking ? '#FCD34D' : p1;
218
+ const gradId = `sd-bg-${agent}-${session.state || 'idle'}`;
219
+ const filterId = `pg-${animFrame}`;
220
+ let defs = `<linearGradient id="${gradId}" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" stop-color="#1C1C1E"/><stop offset="100%" stop-color="#0C0C0E"/></linearGradient>`;
221
+ const blurDef = `<filter id="${filterId}" x="-10%" y="-10%" width="120%" height="120%"><feGaussianBlur in="SourceGraphic" stdDeviation="2.4"/></filter>`;
222
+ let stateBorder = '';
223
+ let activeRing = '';
224
+ let askDot = '';
225
+ let runBadge = '';
226
+ if (isWorking) {
227
+ // RUNNING: a teal border of marching dashes ORBITING the key — motion that
228
+ // reads as "work travelling around", distinct from PERM's steady breath.
229
+ defs += blurDef;
230
+ const pulseOpacity = animated ? 0.72 + 0.20 * Math.abs(Math.sin(animFrame * 0.12)) : 0.9;
231
+ const borderColor = signalColor;
232
+ const orbitSpeedPx = 22;
233
+ // Anchor the rotation to when this session entered the animated state so
234
+ // sibling buttons that started later orbit out of phase, not in lockstep.
235
+ const startFrame = options?.processingStartFrame ?? animFrame;
236
+ const processingPhasePx = -((startFrame * orbitSpeedPx) % BORDER_PERIMETER);
237
+ stateBorder = animated
238
+ ? renderOrbitingRect({
239
+ x: 8, y: 8, width: 128, height: 128, rx: 12, color: borderColor, animFrame,
240
+ speedPx: orbitSpeedPx, dashPx: 92,
241
+ phasePx: processingPhasePx,
242
+ glowOpacity: pulseOpacity * 0.72, coreOpacity: Math.min(1, pulseOpacity + 0.06), filterId,
243
+ })
244
+ : `<rect x="8" y="8" width="128" height="128" rx="12" fill="none" stroke="${borderColor}" stroke-width="4.5" opacity="${pulseOpacity.toFixed(2)}" filter="url(#${filterId})"/><rect x="8" y="8" width="128" height="128" rx="12" fill="none" stroke="${borderColor}" stroke-width="1.5" opacity="${(pulseOpacity * 0.9).toFixed(2)}"/>`;
245
+ runBadge = `<rect x="99" y="14" width="30" height="16" rx="8" fill="${signalColor}" opacity="0.9" /><text x="114" y="25" font-size="9" font-weight="800" text-anchor="middle" fill="#0C0C0E" font-family="${fontFam}">RUN</text>`;
246
+ }
247
+ else if (isAsking) {
248
+ // PERM / AWAITING: a SOLID amber border that BREATHES (full perimeter, no
249
+ // marching dashes) — a deliberately different motion + hue from RUNNING so
250
+ // "needs you" is unmistakable at a glance. Plus a bold amber PERM badge.
251
+ defs += blurDef;
252
+ const amber = sColor; // #f59e0b
253
+ const breathe = animated ? 0.45 + 0.55 * Math.abs(Math.sin(animFrame * 0.14)) : 1;
254
+ stateBorder = [
255
+ `<rect x="8" y="8" width="128" height="128" rx="12" fill="none" stroke="${amber}" stroke-width="7" opacity="${(breathe * 0.6).toFixed(2)}" filter="url(#${filterId})"/>`,
256
+ `<rect x="8" y="8" width="128" height="128" rx="12" fill="none" stroke="${amber}" stroke-width="3" opacity="0.97"/>`,
257
+ ].join('');
258
+ // Bold filled amber pill — far more legible than the old 5px dot.
259
+ askDot = `<rect x="90" y="12" width="42" height="19" rx="9.5" fill="${amber}"/><text x="111" y="26" font-size="11" font-weight="800" text-anchor="middle" fill="#221500" font-family="${fontFam}">PERM</text>`;
260
+ }
261
+ if (isActive) {
262
+ if (animated && isIdle)
263
+ defs += blurDef;
264
+ activeRing = animated
265
+ ? renderOrbitingRect({
266
+ x: 10.5, y: 10.5, width: 123, height: 123, rx: 10.5, color: '#60A5FA', animFrame,
267
+ speedPx: 16, phasePx: 170, dashPx: isIdle ? 72 : 52,
268
+ railOpacity: isIdle ? 0.20 : 0.10, glowOpacity: isIdle ? 0.42 : 0.24,
269
+ coreOpacity: isIdle ? 0.95 : 0.58, railWidth: 1, glowWidth: isIdle ? 3.6 : 2.6,
270
+ coreWidth: isIdle ? 1.8 : 1.3, filterId: isIdle ? filterId : undefined,
271
+ })
272
+ : `<rect x="10.5" y="10.5" width="123" height="123" rx="10.5" fill="none" stroke="#60A5FA" stroke-width="1.5" opacity="${isIdle ? '0.72' : '0.36'}"/>`;
273
+ }
274
+ const watermark = `<g transform="translate(92, 80)" opacity="${isIdle ? '0.62' : '0.55'}">${agentLogoIcon(agent, 72, 1, 0, 0)}</g>`;
275
+ const badgeObj = isIdle ? `<rect x="100" y="14" width="28" height="16" rx="8" fill="#ffffff" opacity="0.1" /><text x="114" y="25" font-size="10" font-weight="700" text-anchor="middle" fill="#A1A1AA" font-family="${fontFam}">ACT</text>` : '';
276
+ const toolStr = isWorking ? 'Running task' : modelText;
277
+ const elements = [
278
+ `<defs>${defs}</defs>`,
279
+ `<rect width="${SIZE}" height="${SIZE}" rx="16" fill="url(#${gradId})"/>`,
280
+ `<rect x="8" y="8" width="128" height="128" rx="12" fill="#2C2C2E" opacity="0.8"/>`,
281
+ stateBorder, activeRing, watermark, askDot, runBadge, badgeObj,
282
+ `<text x="20" y="32" font-size="17" font-weight="800" text-anchor="start" fill="${colorText}" font-family="${fontFam}">${escXml(stateLbl)}</text>`,
283
+ `<text x="20" y="52" font-size="13" font-weight="600" text-anchor="start" fill="#E2E8F0" font-family="${fontFam}">${escXml(truncate(nameForDisplay, 13))}</text>`,
284
+ `<text x="20" y="120" font-size="${isWorking ? '13' : '14'}" font-weight="500" text-anchor="start" fill="${colorText}" opacity="0.8" font-family="${fontFam}">${escXml(toolStr)}</text>`,
285
+ // Stale overlay: the daemon stopped responding (no pings/state for the
286
+ // stale window) but hasn't yet hit the hard disconnect. Dim the last-known
287
+ // render and flag it so the state on screen isn't mistaken for live.
288
+ options?.isStale
289
+ ? `<rect width="${SIZE}" height="${SIZE}" rx="16" fill="#0C0C0E" opacity="0.5"/>`
290
+ + `<rect x="20" y="62" width="50" height="17" rx="8" fill="#71717A" opacity="0.92"/>`
291
+ + `<text x="45" y="74" font-size="10" font-weight="800" text-anchor="middle" fill="#0C0C0E" font-family="${fontFam}">STALE</text>`
292
+ : '',
293
+ ].join('');
294
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${SIZE}" height="${SIZE}" viewBox="0 0 ${SIZE} ${SIZE}">${elements}</svg>`;
295
+ }
296
+ export function renderEmptySlot() {
297
+ return renderQuietSlot();
298
+ }
299
+ export function renderQuietSlot() {
300
+ return svgFrame('#0a0a0a', '');
301
+ }
302
+ export function renderStatusCard(config) {
303
+ const colors = toneColors(config.tone);
304
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
305
+ const label = truncate(config.label, 14);
306
+ const subtitle = truncate(config.subtitle ?? '', 18);
307
+ const detail = truncate(config.detail ?? '', 17);
308
+ const elements = [
309
+ `<rect x="25" y="18" width="94" height="58" rx="14" fill="${colors.panel}" opacity="0.68" stroke="${colors.accent}" stroke-width="1.2" stroke-opacity="0.28"/>`,
310
+ renderGlyphIcon(config.icon, colors.icon, colors.accent, 72, 43, 0.94),
311
+ `<text x="72" y="${subtitle ? 94 : 103}" text-anchor="middle" font-family="${fontFam}" font-size="${label.length > 11 ? '14' : '16'}" font-weight="800" fill="${colors.text}">${escXml(label)}</text>`,
312
+ subtitle ? `<text x="72" y="112" text-anchor="middle" font-family="${fontFam}" font-size="11" font-weight="650" fill="${colors.sub}" opacity="0.86">${escXml(subtitle)}</text>` : '',
313
+ detail ? `<text x="72" y="127" text-anchor="middle" font-family="${fontFam}" font-size="9" font-weight="600" fill="${colors.sub}" opacity="0.52">${escXml(detail)}</text>` : '',
314
+ ].join('');
315
+ return svgFrame(colors.bg, elements);
316
+ }
317
+ export function renderDisconnectedSlot(config) {
318
+ if (config.kind === 'empty')
319
+ return renderQuietSlot();
320
+ if (config.col !== undefined &&
321
+ config.row !== undefined &&
322
+ config.cols !== undefined &&
323
+ config.rows !== undefined) {
324
+ return renderOpenAppGrid(config.col, config.row, config.cols, config.rows, config.label ?? PASSIVE_OFFLINE_LABEL, config.subtitle ?? OPEN_AGENTDECK_LABEL);
325
+ }
326
+ if (config.quadrant) {
327
+ return renderOpenAppQuadrant(config.quadrant, config.label ?? PASSIVE_OFFLINE_LABEL, config.subtitle ?? OPEN_AGENTDECK_LABEL);
328
+ }
329
+ return renderStatusCard({ icon: 'agentdeck', label: config.label ?? PASSIVE_OFFLINE_LABEL, subtitle: config.subtitle ?? OPEN_AGENTDECK_LABEL, detail: config.detail, tone: 'brand' });
330
+ }
331
+ /**
332
+ * Renders a single 144×144 viewport into a 288×288 cluster hero. Each of the
333
+ * four center keys (tl/tr/bl/br) emits the same logical content offset by its
334
+ * quadrant; viewBox clipping keeps only the relevant 144×144 visible. The
335
+ * cluster reads as one card visually, with the inner panel + glyph + text
336
+ * spanning all four keys while each key keeps its own outer rounded bezel.
337
+ */
338
+ export function renderOpenAppQuadrant(quadrant, label = PASSIVE_OFFLINE_LABEL, subtitle = OPEN_AGENTDECK_LABEL) {
339
+ const colors = toneColors('brand');
340
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
341
+ const offsetX = (quadrant === 'tr' || quadrant === 'br') ? -SIZE : 0;
342
+ const offsetY = (quadrant === 'bl' || quadrant === 'br') ? -SIZE : 0;
343
+ const gradId = `frame-bg-cluster-${quadrant}`;
344
+ // 288×288 cluster content. All coordinates are in the logical cluster space;
345
+ // the per-key viewBox + transform crops to one quadrant.
346
+ const cluster = [
347
+ `<rect x="16" y="16" width="256" height="256" rx="28" fill="${colors.panel}" opacity="0.68" stroke="${colors.accent}" stroke-width="2.4" stroke-opacity="0.28"/>`,
348
+ renderGlyphIcon('agentdeck', colors.icon, colors.accent, 144, 86, 1.88),
349
+ `<text x="144" y="208" text-anchor="middle" font-family="${fontFam}" font-size="36" font-weight="800" fill="${colors.text}">${escXml(truncate(label, 14))}</text>`,
350
+ `<text x="144" y="240" text-anchor="middle" font-family="${fontFam}" font-size="20" font-weight="650" fill="${colors.sub}" opacity="0.86">${escXml(truncate(subtitle, 18))}</text>`,
351
+ ].join('');
352
+ return [
353
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${SIZE}" height="${SIZE}" viewBox="0 0 ${SIZE} ${SIZE}">`,
354
+ `<defs><linearGradient id="${gradId}" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" stop-color="${colors.bg}"/><stop offset="100%" stop-color="#0A0A0E"/></linearGradient></defs>`,
355
+ `<rect width="${SIZE}" height="${SIZE}" rx="16" fill="url(#${gradId})"/>`,
356
+ `<g transform="translate(${offsetX} ${offsetY})">${cluster}</g>`,
357
+ `</svg>`,
358
+ ].join('');
359
+ }
360
+ export function renderBackButton() {
361
+ return renderStatusCard({ icon: 'back', label: 'BACK', subtitle: 'sessions', tone: 'muted' });
362
+ }
363
+ export function renderNextPageButton(pageLabel) {
364
+ return renderStatusCard({ icon: 'more', label: 'MORE', subtitle: pageLabel, tone: 'info' });
365
+ }
366
+ export function renderEscButton(active = true) {
367
+ return renderStatusCard({ icon: 'esc', label: 'ESC', subtitle: active ? 'cancel' : 'idle', tone: active ? 'warning' : 'muted' });
368
+ }
369
+ export function renderStopButton(active = true) {
370
+ return renderStatusCard({ icon: 'stop', label: 'STOP', subtitle: active ? 'interrupt' : 'idle', tone: active ? 'danger' : 'muted' });
371
+ }
372
+ export function renderDetailInfo(session, state, tool, modelName, mode, displayName, effortLevel) {
373
+ if (!session)
374
+ return renderEmptySlot();
375
+ const agent = session.agentType || 'claude-code';
376
+ const nameForDisplay = displayName ?? session.projectName;
377
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
378
+ const effectiveState = state || session.state;
379
+ const sColor = stateColor(effectiveState);
380
+ const stateLbl = stateLabel(effectiveState, agent);
381
+ const gradId = `sd-bg-detail-${agent}`;
382
+ const watermark = `<g transform="translate(92, 80)" opacity="0.42">${agentLogoIcon(agent, 48, 1, 0, 0)}</g>`;
383
+ const badgeObj = `<rect x="100" y="14" width="28" height="16" rx="8" fill="#ffffff" opacity="0.1" /><text x="114" y="25" font-size="10" font-weight="700" text-anchor="middle" fill="#A1A1AA" font-family="${fontFam}">INFO</text>`;
384
+ const toolDisplay = tool ? `▶ ${truncate(tool, 18)}` : stateLbl;
385
+ const elements = [
386
+ `<defs><linearGradient id="${gradId}" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" stop-color="#151720"/><stop offset="100%" stop-color="#0A0B10"/></linearGradient></defs>`,
387
+ `<rect width="${SIZE}" height="${SIZE}" rx="16" fill="url(#${gradId})"/>`,
388
+ `<rect x="8" y="8" width="128" height="128" rx="12" fill="#1C1F2E" opacity="0.8"/>`,
389
+ watermark, badgeObj,
390
+ `<text x="20" y="34" font-size="18" font-weight="800" text-anchor="start" fill="#ffffff" font-family="${fontFam}">${escXml(truncate(nameForDisplay, 10))}</text>`,
391
+ (modelName && agent !== 'openclaw') ? `<text x="20" y="56" font-size="12" font-weight="600" text-anchor="start" fill="#94a3b8" font-family="${fontFam}">${escXml(formatModelEffort(modelName, effortLevel, 17))}</text>` : '',
392
+ (mode && mode !== 'default' && agent !== 'openclaw') ? `<text x="20" y="74" font-size="11" font-weight="700" text-anchor="start" fill="#a78bfa" font-family="${fontFam}">${escXml(mode.toUpperCase())}</text>` : '',
393
+ `<text x="20" y="120" font-size="12" font-weight="700" text-anchor="start" fill="${tool ? '#fbbf24' : sColor}" font-family="${fontFam}">${escXml(toolDisplay)}</text>`,
394
+ ].join('');
395
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${SIZE}" height="${SIZE}" viewBox="0 0 ${SIZE} ${SIZE}">${elements}</svg>`;
396
+ }
397
+ function optionVisual(label) {
398
+ const lower = label.toLowerCase();
399
+ if (lower.includes('diff') || lower.includes('review') || lower.includes('view'))
400
+ return { icon: 'diff', tone: 'info' };
401
+ if (lower.startsWith('yes') || lower.startsWith('allow') || lower.startsWith('apply') || lower.includes("don't ask") || lower.includes('always'))
402
+ return { icon: 'allow', tone: 'ready' };
403
+ if (lower.startsWith('no') || lower.startsWith('deny') || lower.startsWith('reject') || lower.includes('cancel'))
404
+ return { icon: 'deny', tone: 'danger' };
405
+ return { icon: 'option', tone: 'purple' };
406
+ }
407
+ export function renderOptionButton(option, index) {
408
+ const label = option.label || `Option ${index + 1}`;
409
+ const { icon, tone } = optionVisual(label);
410
+ const colors = toneColors(tone);
411
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
412
+ const lines = wrapTextByWidth(label, 112, 13).slice(0, 2);
413
+ const startY = lines.length === 1 ? 103 : 96;
414
+ const slotNum = `<circle cx="119" cy="23" r="12" fill="${colors.panel}" stroke="${colors.accent}" stroke-width="1" opacity="0.9"/><text x="119" y="28" text-anchor="middle" font-family="${fontFam}" font-size="12" font-weight="800" fill="${colors.text}" opacity="0.8">${index + 1}</text>`;
415
+ const textEls = lines.map((line, i) => `<text x="72" y="${startY + i * 17}" text-anchor="middle" font-family="${fontFam}" font-size="${line.length > 13 ? '12' : '13'}" font-weight="800" fill="${colors.text}">${escXml(line)}</text>`).join('');
416
+ return svgFrame(colors.bg, `<rect x="25" y="18" width="94" height="58" rx="14" fill="${colors.panel}" opacity="0.58" stroke="${colors.accent}" stroke-width="1.2" stroke-opacity="0.26"/>`
417
+ + renderGlyphIcon(icon, colors.icon, colors.accent, 72, 43, 0.84)
418
+ + slotNum
419
+ + textEls);
420
+ }
421
+ export function renderPresetButton(label, iconSvg, color, textColor, subtitle, loading) {
422
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
423
+ if (loading) {
424
+ return svgFrame(color, iconSvg + `<text x="72" y="103" text-anchor="middle" font-family="${fontFam}" font-size="13" font-weight="800" fill="${textColor}">SWITCHING</text>`);
425
+ }
426
+ const labelEl = `<text x="72" y="100" text-anchor="middle" font-family="${fontFam}" font-size="16" font-weight="800" fill="${textColor}">${escXml(label)}</text>`;
427
+ const subEl = subtitle ? `<text x="72" y="118" text-anchor="middle" font-family="${fontFam}" font-size="11" font-weight="650" fill="${textColor}" opacity="0.7">${escXml(truncate(subtitle, 14))}</text>` : '';
428
+ return svgFrame(color, iconSvg + labelEl + subEl);
429
+ }
430
+ export function renderInfoSlot(label, subtitle, icon = 'activity', tone = 'info', detail) {
431
+ return renderStatusCard({ icon, label, subtitle, detail, tone });
432
+ }
433
+ export function svgFrame(bgColor, innerElements) {
434
+ const gradId = 'frame-bg-' + Math.floor(Math.random() * 1000000);
435
+ return [
436
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${SIZE}" height="${SIZE}" viewBox="0 0 ${SIZE} ${SIZE}">`,
437
+ `<defs><linearGradient id="${gradId}" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" stop-color="${bgColor}"/><stop offset="100%" stop-color="#0A0A0E"/></linearGradient></defs>`,
438
+ `<rect width="${SIZE}" height="${SIZE}" rx="16" fill="url(#${gradId})"/>`,
439
+ `<rect x="8" y="8" width="128" height="128" rx="12" fill="#2C2C2E" opacity="0.6"/>`,
440
+ innerElements,
441
+ `</svg>`,
442
+ ].join('');
443
+ }
444
+ export function renderOpenAppGrid(col, row, cols, rows, label = PASSIVE_OFFLINE_LABEL, subtitle = OPEN_AGENTDECK_LABEL) {
445
+ const colors = toneColors('brand');
446
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
447
+ const offsetX = -col * SIZE;
448
+ const offsetY = -row * SIZE;
449
+ const gradId = `frame-bg-grid-${col}-${row}`;
450
+ const minDim = Math.min(cols, rows);
451
+ const baseScale = Math.max(1.0, minDim * 0.8);
452
+ const totalW = cols * SIZE;
453
+ const totalH = rows * SIZE;
454
+ const padX = Math.max(8, 16 * cols / 4);
455
+ const padY = Math.max(8, 16 * rows / 2);
456
+ const rectW = totalW - padX * 2;
457
+ const rectH = totalH - padY * 2;
458
+ const rx = Math.max(12, 28 * minDim / 2);
459
+ const glyphX = totalW / 2;
460
+ const glyphY = totalH / 2 - (24 * baseScale);
461
+ const labelY = totalH / 2 + (20 * baseScale);
462
+ const subY = labelY + (28 * baseScale);
463
+ const fontSizeLabel = Math.max(16, Math.round(36 * (minDim / 2)));
464
+ const fontSizeSub = Math.max(11, Math.round(20 * (minDim / 2)));
465
+ const cluster = [
466
+ `<rect x="${padX}" y="${padY}" width="${rectW}" height="${rectH}" rx="${rx}" fill="${colors.panel}" opacity="0.68" stroke="${colors.accent}" stroke-width="${(2.4 * baseScale).toFixed(1)}" stroke-opacity="0.28"/>`,
467
+ renderGlyphIcon('agentdeck', colors.icon, colors.accent, glyphX, glyphY, baseScale),
468
+ `<text x="${totalW / 2}" y="${labelY}" text-anchor="middle" font-family="${fontFam}" font-size="${fontSizeLabel}" font-weight="800" fill="${colors.text}">${escXml(truncate(label, 16))}</text>`,
469
+ `<text x="${totalW / 2}" y="${subY}" text-anchor="middle" font-family="${fontFam}" font-size="${fontSizeSub}" font-weight="650" fill="${colors.sub}" opacity="0.86">${escXml(truncate(subtitle, 24))}</text>`,
470
+ ].join('');
471
+ return [
472
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${SIZE}" height="${SIZE}" viewBox="0 0 ${SIZE} ${SIZE}">`,
473
+ `<defs><linearGradient id="${gradId}" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" stop-color="${colors.bg}"/><stop offset="100%" stop-color="#0A0A0E"/></linearGradient></defs>`,
474
+ `<rect width="${SIZE}" height="${SIZE}" rx="16" fill="url(#${gradId})"/>`,
475
+ `<g transform="translate(${offsetX} ${offsetY})">${cluster}</g>`,
476
+ `</svg>`,
477
+ ].join('');
478
+ }
479
+ export function renderOfflineTouchStrip(index) {
480
+ const fontFam = 'Inter, -apple-system, system-ui, Helvetica Neue, sans-serif';
481
+ const colors = toneColors('brand');
482
+ const W_total = 800;
483
+ const H_total = 100;
484
+ const offsetX = -index * 200;
485
+ const gradId = `touchstrip-offline-bg-${index}`;
486
+ // Entire 800x100 content
487
+ const content = [
488
+ // Background card panel
489
+ `<rect x="15" y="10" width="770" height="80" rx="16" fill="${colors.panel}" opacity="0.68" stroke="${colors.accent}" stroke-width="2" stroke-opacity="0.28"/>`,
490
+ // Left side: AgentDeck brand mark (x=120, y=50)
491
+ renderGlyphIcon('agentdeck', colors.icon, colors.accent, 120, 50, 1.2),
492
+ // Center: Offline text and helper instruction
493
+ `<text x="400" y="44" text-anchor="middle" font-family="${fontFam}" font-size="22" font-weight="800" fill="${colors.text}">AGENTDECK OFFLINE</text>`,
494
+ `<text x="400" y="70" text-anchor="middle" font-family="${fontFam}" font-size="12" font-weight="650" fill="${colors.sub}" opacity="0.86">Open the AgentDeck app — or install: npx @agentdeck/setup</text>`,
495
+ // Right side: offline icon (x=680, y=50)
496
+ renderGlyphIcon('offline', colors.icon, colors.accent, 680, 50, 1.2),
497
+ ].join('');
498
+ return [
499
+ `<svg xmlns="http://www.w3.org/2000/svg" width="200" height="100" viewBox="0 0 200 100">`,
500
+ `<defs><linearGradient id="${gradId}" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" stop-color="${colors.bg}"/><stop offset="100%" stop-color="#0A0A0E"/></linearGradient></defs>`,
501
+ `<rect width="200" height="100" fill="url(#${gradId})"/>`,
502
+ `<g transform="translate(${offsetX} 0)">${content}</g>`,
503
+ `</svg>`
504
+ ].join('');
505
+ }
506
+ //# sourceMappingURL=session-slot-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-slot-renderer.js","sourceRoot":"","sources":["../../src/svg-renderers/session-slot-renderer.ts"],"names":[],"mappings":"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"}