@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.
- package/LICENSE +21 -0
- package/dist/adapter.d.ts +18 -3
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +62 -0
- package/dist/adapter.js.map +1 -1
- package/dist/command-builders.d.ts +35 -0
- package/dist/command-builders.d.ts.map +1 -0
- package/dist/command-builders.js +75 -0
- package/dist/command-builders.js.map +1 -0
- package/dist/connection-status.d.ts +42 -0
- package/dist/connection-status.d.ts.map +1 -0
- package/dist/connection-status.js +52 -0
- package/dist/connection-status.js.map +1 -0
- package/dist/d200h-layout.d.ts +131 -0
- package/dist/d200h-layout.d.ts.map +1 -0
- package/dist/d200h-layout.js +627 -0
- package/dist/d200h-layout.js.map +1 -0
- package/dist/design-tokens.d.ts +259 -0
- package/dist/design-tokens.d.ts.map +1 -0
- package/dist/design-tokens.js +156 -0
- package/dist/design-tokens.js.map +1 -0
- package/dist/eval-schema.d.ts +235 -0
- package/dist/eval-schema.d.ts.map +1 -0
- package/dist/eval-schema.js +23 -0
- package/dist/eval-schema.js.map +1 -0
- package/dist/format-utils.d.ts +52 -0
- package/dist/format-utils.d.ts.map +1 -0
- package/dist/format-utils.js +165 -0
- package/dist/format-utils.js.map +1 -0
- package/dist/gateway-protocol.d.ts +391 -0
- package/dist/gateway-protocol.d.ts.map +1 -0
- package/dist/gateway-protocol.js +19 -0
- package/dist/gateway-protocol.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/llm-settings.d.ts +52 -0
- package/dist/llm-settings.d.ts.map +1 -0
- package/dist/llm-settings.js +118 -0
- package/dist/llm-settings.js.map +1 -0
- package/dist/net-utils.d.ts +2 -1
- package/dist/net-utils.d.ts.map +1 -1
- package/dist/net-utils.js +100 -3
- package/dist/net-utils.js.map +1 -1
- package/dist/pricing.d.ts +45 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +93 -0
- package/dist/pricing.js.map +1 -0
- package/dist/protocol.d.ts +496 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +30 -1
- package/dist/protocol.js.map +1 -1
- package/dist/sample.d.ts +152 -0
- package/dist/sample.d.ts.map +1 -0
- package/dist/sample.js +22 -0
- package/dist/sample.js.map +1 -0
- package/dist/session-utils.d.ts +142 -0
- package/dist/session-utils.d.ts.map +1 -0
- package/dist/session-utils.js +304 -0
- package/dist/session-utils.js.map +1 -0
- package/dist/state-colors.d.ts +16 -0
- package/dist/state-colors.d.ts.map +1 -0
- package/dist/state-colors.js +48 -0
- package/dist/state-colors.js.map +1 -0
- package/dist/states.d.ts +2 -0
- package/dist/states.d.ts.map +1 -1
- package/dist/states.js +6 -1
- package/dist/states.js.map +1 -1
- package/dist/svg-renderers/agent-logos.d.ts +45 -0
- package/dist/svg-renderers/agent-logos.d.ts.map +1 -0
- package/dist/svg-renderers/agent-logos.js +238 -0
- package/dist/svg-renderers/agent-logos.js.map +1 -0
- package/dist/svg-renderers/index.d.ts +4 -0
- package/dist/svg-renderers/index.d.ts.map +1 -0
- package/dist/svg-renderers/index.js +4 -0
- package/dist/svg-renderers/index.js.map +1 -0
- package/dist/svg-renderers/session-slot-renderer.d.ts +78 -0
- package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -0
- package/dist/svg-renderers/session-slot-renderer.js +506 -0
- package/dist/svg-renderers/session-slot-renderer.js.map +1 -0
- package/dist/svg-renderers/text-utils.d.ts +29 -0
- package/dist/svg-renderers/text-utils.d.ts.map +1 -0
- package/dist/svg-renderers/text-utils.js +122 -0
- package/dist/svg-renderers/text-utils.js.map +1 -0
- package/dist/telemetry-envelope.d.ts +108 -0
- package/dist/telemetry-envelope.d.ts.map +1 -0
- package/dist/telemetry-envelope.js +34 -0
- package/dist/telemetry-envelope.js.map +1 -0
- package/dist/timeline-icons.d.ts +70 -0
- package/dist/timeline-icons.d.ts.map +1 -0
- package/dist/timeline-icons.js +161 -0
- package/dist/timeline-icons.js.map +1 -0
- package/dist/timeline-label.d.ts +38 -0
- package/dist/timeline-label.d.ts.map +1 -0
- package/dist/timeline-label.js +95 -0
- package/dist/timeline-label.js.map +1 -0
- package/dist/timeline-markdown.d.ts +80 -0
- package/dist/timeline-markdown.d.ts.map +1 -0
- package/dist/timeline-markdown.js +221 -0
- package/dist/timeline-markdown.js.map +1 -0
- package/dist/timeline-summarizer.d.ts +37 -0
- package/dist/timeline-summarizer.d.ts.map +1 -0
- package/dist/timeline-summarizer.js +125 -0
- package/dist/timeline-summarizer.js.map +1 -0
- package/dist/timeline.d.ts +135 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +633 -0
- package/dist/timeline.js.map +1 -0
- package/dist/voice-paths.d.ts +4 -0
- package/dist/voice-paths.d.ts.map +1 -1
- package/dist/voice-paths.js +5 -0
- package/dist/voice-paths.js.map +1 -1
- 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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"}
|