@agentdeck/shared 0.1.0 → 0.2.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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapter.d.ts +16 -3
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js +38 -0
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/command-builders.d.ts +30 -0
  7. package/dist/command-builders.d.ts.map +1 -0
  8. package/dist/command-builders.js +60 -0
  9. package/dist/command-builders.js.map +1 -0
  10. package/dist/eval-schema.d.ts +211 -0
  11. package/dist/eval-schema.d.ts.map +1 -0
  12. package/dist/eval-schema.js +23 -0
  13. package/dist/eval-schema.js.map +1 -0
  14. package/dist/format-utils.d.ts +27 -0
  15. package/dist/format-utils.d.ts.map +1 -0
  16. package/dist/format-utils.js +120 -0
  17. package/dist/format-utils.js.map +1 -0
  18. package/dist/gateway-protocol.d.ts +391 -0
  19. package/dist/gateway-protocol.d.ts.map +1 -0
  20. package/dist/gateway-protocol.js +19 -0
  21. package/dist/gateway-protocol.js.map +1 -0
  22. package/dist/index.d.ts +11 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +11 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/llm-settings.d.ts +52 -0
  27. package/dist/llm-settings.d.ts.map +1 -0
  28. package/dist/llm-settings.js +118 -0
  29. package/dist/llm-settings.js.map +1 -0
  30. package/dist/protocol.d.ts +326 -2
  31. package/dist/protocol.d.ts.map +1 -1
  32. package/dist/protocol.js +19 -0
  33. package/dist/protocol.js.map +1 -1
  34. package/dist/session-utils.d.ts +62 -0
  35. package/dist/session-utils.d.ts.map +1 -0
  36. package/dist/session-utils.js +109 -0
  37. package/dist/session-utils.js.map +1 -0
  38. package/dist/state-colors.d.ts +16 -0
  39. package/dist/state-colors.d.ts.map +1 -0
  40. package/dist/state-colors.js +46 -0
  41. package/dist/state-colors.js.map +1 -0
  42. package/dist/states.d.ts +1 -0
  43. package/dist/states.d.ts.map +1 -1
  44. package/dist/svg-renderers/agent-logos.d.ts +33 -0
  45. package/dist/svg-renderers/agent-logos.d.ts.map +1 -0
  46. package/dist/svg-renderers/agent-logos.js +100 -0
  47. package/dist/svg-renderers/agent-logos.js.map +1 -0
  48. package/dist/svg-renderers/index.d.ts +4 -0
  49. package/dist/svg-renderers/index.d.ts.map +1 -0
  50. package/dist/svg-renderers/index.js +4 -0
  51. package/dist/svg-renderers/index.js.map +1 -0
  52. package/dist/svg-renderers/session-slot-renderer.d.ts +25 -0
  53. package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -0
  54. package/dist/svg-renderers/session-slot-renderer.js +317 -0
  55. package/dist/svg-renderers/session-slot-renderer.js.map +1 -0
  56. package/dist/svg-renderers/text-utils.d.ts +15 -0
  57. package/dist/svg-renderers/text-utils.d.ts.map +1 -0
  58. package/dist/svg-renderers/text-utils.js +88 -0
  59. package/dist/svg-renderers/text-utils.js.map +1 -0
  60. package/dist/telemetry-envelope.d.ts +108 -0
  61. package/dist/telemetry-envelope.d.ts.map +1 -0
  62. package/dist/telemetry-envelope.js +34 -0
  63. package/dist/telemetry-envelope.js.map +1 -0
  64. package/dist/timeline-summarizer.d.ts +13 -0
  65. package/dist/timeline-summarizer.d.ts.map +1 -0
  66. package/dist/timeline-summarizer.js +83 -0
  67. package/dist/timeline-summarizer.js.map +1 -0
  68. package/dist/timeline.d.ts +65 -0
  69. package/dist/timeline.d.ts.map +1 -0
  70. package/dist/timeline.js +456 -0
  71. package/dist/timeline.js.map +1 -0
  72. package/dist/voice-paths.d.ts +4 -0
  73. package/dist/voice-paths.d.ts.map +1 -1
  74. package/dist/voice-paths.js +5 -0
  75. package/dist/voice-paths.js.map +1 -1
  76. package/package.json +9 -3
@@ -1,7 +1,9 @@
1
1
  import { State, PermissionMode, PromptOption } from './states.js';
2
2
  import type { AgentType, AgentCapabilities } from './adapter.js';
3
+ import type { TimelineEntry } from './timeline.js';
3
4
  export type BillingType = 'subscription' | 'api' | 'unknown';
4
5
  export interface ModelCatalogEntry {
6
+ key: string;
5
7
  name: string;
6
8
  role: 'default' | `fallback-${number}` | 'configured';
7
9
  available: boolean;
@@ -14,17 +16,83 @@ export interface OcSessionStatus {
14
16
  sessionId?: string;
15
17
  [key: string]: unknown;
16
18
  }
19
+ export interface ButtonSlotState {
20
+ slot: number;
21
+ title: string;
22
+ subtitle?: string;
23
+ bgColor: string;
24
+ textColor: string;
25
+ enabled: boolean;
26
+ icon?: string;
27
+ badge?: string;
28
+ action?: string;
29
+ dim?: boolean;
30
+ }
31
+ export interface ButtonStateEvent {
32
+ type: 'button_state';
33
+ buttons: ButtonSlotState[];
34
+ }
35
+ export interface EncoderSlotState {
36
+ slot: number;
37
+ encoderType: 'utility' | 'action' | 'usage' | 'voice';
38
+ header: string;
39
+ value?: string;
40
+ icon?: string;
41
+ accentColor: string;
42
+ progress?: number;
43
+ counter?: string;
44
+ detail?: string;
45
+ voiceState?: 'idle' | 'recording' | 'transcribing' | 'error' | 'review';
46
+ recordingMs?: number;
47
+ transcription?: string;
48
+ }
49
+ export interface EncoderStateEvent {
50
+ type: 'encoder_state';
51
+ encoders: EncoderSlotState[];
52
+ takeoverActive: boolean;
53
+ }
54
+ export interface DeckSlotConfig {
55
+ slot: number;
56
+ actionType: string;
57
+ settings?: Record<string, unknown>;
58
+ }
59
+ export interface DeckSlotMapEvent {
60
+ type: 'deck_slot_map';
61
+ buttons: DeckSlotConfig[];
62
+ encoders: DeckSlotConfig[];
63
+ }
64
+ export interface OllamaModel {
65
+ name: string;
66
+ size: number;
67
+ sizeVram: number;
68
+ }
69
+ export interface OllamaStatus {
70
+ available: boolean;
71
+ models: OllamaModel[];
72
+ }
73
+ export interface SubscriptionInfo {
74
+ name: string;
75
+ until?: string;
76
+ }
77
+ export interface AntigravityStatusInfo {
78
+ planName?: string;
79
+ availableCredits?: number;
80
+ minimumCreditAmountForUsage?: number;
81
+ }
17
82
  export interface StateUpdateEvent {
18
83
  type: 'state_update';
19
84
  state: State;
20
85
  permissionMode: PermissionMode;
21
86
  agentType?: AgentType;
87
+ /** Session ID of the focused session (injected by daemon focus relay) */
88
+ sessionId?: string;
22
89
  agentCapabilities?: AgentCapabilities;
23
90
  currentTool?: string;
24
91
  toolInput?: string;
25
92
  toolProgress?: string;
26
93
  projectName?: string;
27
94
  modelName?: string;
95
+ effortLevel?: string;
28
96
  billingType?: BillingType;
29
97
  options?: PromptOption[];
30
98
  promptType?: 'yes_no' | 'yes_no_always' | 'multi_select' | 'diff_review';
@@ -37,6 +105,36 @@ export interface StateUpdateEvent {
37
105
  remoteUrl?: string;
38
106
  /** Authenticated WS URL for remote pairing (ws://ip:port?token=hex) */
39
107
  pairingUrl?: string;
108
+ /** Number of OpenClaw backend worker sessions (multi-agent) */
109
+ workerSessionCount?: number;
110
+ /** Ollama process status + running models */
111
+ ollamaStatus?: OllamaStatus;
112
+ /** MLX local server model list */
113
+ mlxModels?: string[];
114
+ /** Subscription-backed authenticated services */
115
+ subscriptions?: SubscriptionInfo[];
116
+ /** Local Antigravity IDE quota summary, when available */
117
+ antigravityStatus?: AntigravityStatusInfo;
118
+ /** OpenClaw Gateway reachability (port 18789) */
119
+ gatewayAvailable?: boolean;
120
+ /** OpenClaw Gateway authenticated adapter connection */
121
+ gatewayConnected?: boolean;
122
+ /** OpenClaw Gateway has doctor warnings/errors */
123
+ gatewayHasError?: boolean;
124
+ /** OpenClaw Gateway auth/pairing state */
125
+ gatewayAuthStatus?: 'gateway_not_found' | 'gateway_reachable' | 'gateway_token_missing' | 'pairing_required' | 'approval_pending' | 'connected' | 'auth_failed' | 'token_mismatch' | 'device_auth_invalid' | 'unsupported_protocol';
126
+ /** OpenClaw device pairing request id, when Gateway requires approval */
127
+ gatewayAuthRequestId?: string;
128
+ /** Human-readable OpenClaw auth/pairing diagnostic */
129
+ gatewayAuthMessage?: string;
130
+ /** Daemon-owned hardware/module health, intentionally loose for cross-version clients */
131
+ moduleHealth?: Record<string, unknown>;
132
+ /** Voice assistant pipeline state (wake word → STT → LLM → TTS) */
133
+ voiceAssistantState?: VoiceAssistantState;
134
+ /** Transcribed user speech (processing/speaking) */
135
+ voiceAssistantText?: string;
136
+ /** LLM response text (speaking) */
137
+ voiceAssistantResponseText?: string;
40
138
  }
41
139
  export interface PromptOptionsEvent {
42
140
  type: 'prompt_options';
@@ -64,6 +162,20 @@ export interface UsageEvent {
64
162
  extraUsageMonthlyLimit?: number;
65
163
  extraUsageUsedCredits?: number;
66
164
  extraUsageUtilization?: number;
165
+ oauthConnected?: boolean;
166
+ ollamaStatus?: OllamaStatus;
167
+ usageStale?: boolean;
168
+ tokenStatus?: 'valid' | 'expired' | 'missing' | 'unknown';
169
+ codexAuthMode?: string;
170
+ codexWebAuthConnected?: boolean;
171
+ codexPlanType?: string;
172
+ codexAccountId?: string;
173
+ codexSubscriptionActiveUntil?: string;
174
+ codexLastRefreshAt?: string;
175
+ modelCatalog?: ModelCatalogEntry[];
176
+ mlxModels?: string[];
177
+ subscriptions?: SubscriptionInfo[];
178
+ antigravityStatus?: AntigravityStatusInfo;
67
179
  }
68
180
  export interface ConnectionEvent {
69
181
  type: 'connection';
@@ -80,7 +192,147 @@ export interface VoiceStateEvent {
80
192
  text?: string;
81
193
  error?: string;
82
194
  }
83
- export type BridgeEvent = StateUpdateEvent | PromptOptionsEvent | UsageEvent | ConnectionEvent | UserPromptEvent | VoiceStateEvent;
195
+ export type VoiceAssistantState = 'idle' | 'listening' | 'processing' | 'speaking' | 'disabled';
196
+ export interface VoiceAssistantStateEvent {
197
+ type: 'voice_assistant_state';
198
+ state: VoiceAssistantState;
199
+ deviceId?: string;
200
+ /** Transcribed user speech */
201
+ text?: string;
202
+ /** LLM response text */
203
+ responseText?: string;
204
+ }
205
+ export interface WakeWordDetectedEvent {
206
+ type: 'wake_word_detected';
207
+ deviceId: string;
208
+ timestamp: number;
209
+ }
210
+ export interface DisplayStateEvent {
211
+ type: 'display_state';
212
+ displayOn: boolean;
213
+ }
214
+ export interface SessionInfo {
215
+ id: string;
216
+ port: number;
217
+ pid?: number;
218
+ projectName: string;
219
+ agentType?: AgentType;
220
+ alive: boolean;
221
+ state?: string;
222
+ modelName?: string;
223
+ effortLevel?: string;
224
+ startedAt?: string;
225
+ controlMode?: 'managed' | 'observed';
226
+ cwd?: string;
227
+ currentTask?: string;
228
+ contextPercent?: number;
229
+ totalTokens?: number;
230
+ }
231
+ export interface SessionsListEvent {
232
+ type: 'sessions_list';
233
+ sessions: SessionInfo[];
234
+ }
235
+ export interface TimelineEventMsg {
236
+ type: 'timeline_event';
237
+ entry: TimelineEntry;
238
+ upsert?: boolean;
239
+ }
240
+ export interface TimelineHistoryMsg {
241
+ type: 'timeline_history';
242
+ entries: TimelineEntry[];
243
+ }
244
+ /** A single evaluation score on a completed run. */
245
+ export interface ApmeEvalRow {
246
+ layer: 'deterministic' | 'llm_judge' | 'vibe' | 'turn_judge' | 'task_judge';
247
+ metric: string;
248
+ score: number;
249
+ rubricVer?: number;
250
+ judgeModel?: string;
251
+ createdAt: number;
252
+ }
253
+ /** A run that has finished evaluation. */
254
+ export interface ApmeRunSummary {
255
+ runId: string;
256
+ sessionId: string;
257
+ agentType: AgentType;
258
+ modelId?: string;
259
+ projectName?: string;
260
+ taskPrompt?: string;
261
+ taskCategory?: string;
262
+ outcome?: 'committed' | 'abandoned' | 'iterated' | 'ab_winner' | 'ab_loser' | 'interrupted' | 'exploratory' | 'pending';
263
+ compositeScore?: number;
264
+ startedAt: number;
265
+ endedAt?: number;
266
+ inputTokens?: number;
267
+ outputTokens?: number;
268
+ costUsd?: number;
269
+ exitCode?: number;
270
+ overallScore?: number;
271
+ evals: ApmeEvalRow[];
272
+ }
273
+ /** Bridge → clients — fires when a run completes evaluation (layer 1 or 2). */
274
+ export interface ApmeEvalEvent {
275
+ type: 'apme_eval';
276
+ run: ApmeRunSummary;
277
+ }
278
+ export interface ApmeModelScorecard {
279
+ agentType: AgentType;
280
+ modelId: string;
281
+ runs: number;
282
+ avgOverall?: number;
283
+ avgTestsPass?: number;
284
+ totalCost?: number;
285
+ costPerQuality?: number;
286
+ }
287
+ /** Bridge → clients — scorecard refresh (broadcast after eval completes or on demand). */
288
+ export interface ApmeScorecardEvent {
289
+ type: 'apme_scorecard';
290
+ scorecards: ApmeModelScorecard[];
291
+ }
292
+ export interface ApmeRecommendation {
293
+ modelId: string;
294
+ agentType: AgentType;
295
+ expectedScore: number;
296
+ expectedCostUsd: number;
297
+ confidence: number;
298
+ rationale: string;
299
+ }
300
+ /** Bridge → clients — model recommendation for the next task (on-demand / context-aware). */
301
+ export interface ApmeRecommendationEvent {
302
+ type: 'apme_recommendation';
303
+ taskKind?: string;
304
+ candidates: ApmeRecommendation[];
305
+ }
306
+ export interface WifiProvisionMessage {
307
+ type: 'wifi_provision';
308
+ ssid: string;
309
+ password: string;
310
+ bridgeIp: string;
311
+ bridgePort: number;
312
+ authToken: string;
313
+ }
314
+ export interface DeviceInfoMessage {
315
+ type: 'device_info';
316
+ board: string;
317
+ version: string;
318
+ wifiConfigured: boolean;
319
+ wifiConnected: boolean;
320
+ ip?: string;
321
+ }
322
+ export interface WifiProvisionAckMessage {
323
+ type: 'wifi_provision_ack';
324
+ success: boolean;
325
+ ip?: string;
326
+ error?: string;
327
+ }
328
+ export interface WifiStatusMessage {
329
+ type: 'wifi_status';
330
+ connected: boolean;
331
+ ssid?: string;
332
+ ip?: string;
333
+ }
334
+ export type ESP32ToHostMessage = DeviceInfoMessage | WifiProvisionAckMessage | WifiStatusMessage;
335
+ export type BridgeEvent = StateUpdateEvent | PromptOptionsEvent | UsageEvent | ConnectionEvent | UserPromptEvent | VoiceStateEvent | VoiceAssistantStateEvent | WakeWordDetectedEvent | DisplayStateEvent | SessionsListEvent | EncoderStateEvent | DeckSlotMapEvent | ButtonStateEvent | TimelineEventMsg | TimelineHistoryMsg | ApmeEvalEvent | ApmeScorecardEvent | ApmeRecommendationEvent;
84
336
  export interface ResponseCommand {
85
337
  type: 'respond';
86
338
  value: string;
@@ -118,13 +370,85 @@ export interface DiagCommand {
118
370
  type: 'diag';
119
371
  action: 'dump' | 'analyze';
120
372
  }
121
- export type PluginCommand = ResponseCommand | SelectOptionCommand | NavigateOptionCommand | SendPromptCommand | SwitchModeCommand | InterruptCommand | EscapeCommand | VoiceCommand | QueryUsageCommand | DiagCommand;
373
+ export interface UtilityCommand {
374
+ type: 'utility';
375
+ action: 'adjust_volume' | 'toggle_mute' | 'adjust_brightness' | 'media_play_pause' | 'media_next' | 'media_prev';
376
+ value?: number;
377
+ }
378
+ export interface SwitchAgentCommand {
379
+ type: 'switch_agent';
380
+ agent: 'openclaw' | 'claude-code';
381
+ }
382
+ export interface FocusSessionCommand {
383
+ type: 'focus_session';
384
+ sessionId: string;
385
+ }
386
+ /** APME vibe check — user approves or rejects a completed run's output quality. */
387
+ export interface ApmeVibeFeedbackCommand {
388
+ type: 'apme_vibe';
389
+ runId: string;
390
+ verdict: 'approve' | 'reject' | 'neutral';
391
+ note?: string;
392
+ }
393
+ /** Ask bridge/daemon for model recommendation given a task context. */
394
+ export interface ApmeRecommendCommand {
395
+ type: 'apme_recommend';
396
+ taskKind?: string;
397
+ budgetUsd?: number;
398
+ latencyBudgetMs?: number;
399
+ preferLocal?: boolean;
400
+ }
401
+ /**
402
+ * Self-announcement from a rich UI client (Elgato Stream Deck plugin, a
403
+ * future Android companion app, etc.) so the daemon can surface the
404
+ * hardware under its rightful Downstream row instead of treating every
405
+ * WS connection as an anonymous dashboard viewer. Sent once per connect,
406
+ * immediately after the WebSocket opens. Daemon wipes the cached entry
407
+ * when the WS connection closes.
408
+ */
409
+ export interface ClientRegisterCommand {
410
+ type: 'client_register';
411
+ /** Short stable id — "streamdeck-plugin", "android-companion", etc. */
412
+ clientType: string;
413
+ /** Human-readable label for the surface (appears verbatim in diagnostics). */
414
+ clientLabel?: string;
415
+ /** Physical device roster this client is driving, if any. */
416
+ devices?: Array<{
417
+ id: string;
418
+ name: string;
419
+ /** "streamdeck" | "streamdeckplus" | "streamdeckmini" | ... — free-form. */
420
+ family?: string;
421
+ columns?: number;
422
+ rows?: number;
423
+ }>;
424
+ }
425
+ /**
426
+ * Session-scoped command — daemon forwards the inner command to the specified session's bridge.
427
+ * Enables direct control of a specific session from any client (MenuBarExtra, Dashboard, etc.)
428
+ */
429
+ export interface SessionCommand {
430
+ type: 'session_command';
431
+ sessionId: string;
432
+ command: {
433
+ type: string;
434
+ [key: string]: unknown;
435
+ };
436
+ }
437
+ export type PluginCommand = ResponseCommand | SelectOptionCommand | NavigateOptionCommand | SendPromptCommand | SwitchModeCommand | InterruptCommand | EscapeCommand | VoiceCommand | QueryUsageCommand | DiagCommand | UtilityCommand | SwitchAgentCommand | FocusSessionCommand | SessionCommand | ClientRegisterCommand | ApmeVibeFeedbackCommand | ApmeRecommendCommand;
122
438
  export interface HookEvent {
123
439
  event: string;
124
440
  data: Record<string, unknown>;
125
441
  }
442
+ /** Events forwarded to display-only devices (Pixoo64) */
443
+ export declare const DISPLAY_FORWARDED_EVENTS: Set<string>;
444
+ /** Events forwarded to serial devices (ESP32) — display events + timeline */
445
+ export declare const SERIAL_FORWARDED_EVENTS: Set<string>;
126
446
  export declare const BRIDGE_WS_PORT = 9120;
127
447
  export declare const BRIDGE_HTTP_PORT = 9120;
128
448
  export declare const RECONNECT_INTERVAL_MS = 3000;
449
+ /** Plugin reconnect backoff ladder. Advances on each failed attempt, resets on `connected`. */
450
+ export declare const RECONNECT_BACKOFF_MS: readonly number[];
129
451
  export declare const STUCK_TIMEOUT_MS: number;
452
+ export declare const WS_PING_INTERVAL_MS = 15000;
453
+ export declare const WS_ACTIVITY_TIMEOUT_MS = 30000;
130
454
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
package/dist/protocol.js CHANGED
@@ -1,6 +1,25 @@
1
1
  // ===== Constants =====
2
+ /** Events forwarded to display-only devices (Pixoo64) */
3
+ export const DISPLAY_FORWARDED_EVENTS = new Set([
4
+ 'state_update',
5
+ 'usage_update',
6
+ 'sessions_list',
7
+ 'connection',
8
+ 'display_state',
9
+ ]);
10
+ /** Events forwarded to serial devices (ESP32) — display events + timeline */
11
+ export const SERIAL_FORWARDED_EVENTS = new Set([
12
+ ...DISPLAY_FORWARDED_EVENTS,
13
+ 'timeline_event',
14
+ 'timeline_history',
15
+ 'set_orientation',
16
+ ]);
2
17
  export const BRIDGE_WS_PORT = 9120;
3
18
  export const BRIDGE_HTTP_PORT = 9120; // Same port, different path
4
19
  export const RECONNECT_INTERVAL_MS = 3000;
20
+ /** Plugin reconnect backoff ladder. Advances on each failed attempt, resets on `connected`. */
21
+ export const RECONNECT_BACKOFF_MS = [1000, 2000, 4000, 8000];
5
22
  export const STUCK_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
23
+ export const WS_PING_INTERVAL_MS = 15_000;
24
+ export const WS_ACTIVITY_TIMEOUT_MS = 30_000;
6
25
  //# sourceMappingURL=protocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAmLA,wBAAwB;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,4BAA4B;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAykBA,wBAAwB;AAExB,yDAAyD;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IAC9C,cAAc;IACd,cAAc;IACd,eAAe;IACf,YAAY;IACZ,eAAe;CAChB,CAAC,CAAC;AAEH,6EAA6E;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IAC7C,GAAG,wBAAwB;IAC3B,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,4BAA4B;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,+FAA+F;AAC/F,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * session-utils.ts — Shared session ordering, numbering, and tier grouping.
3
+ * Single source of truth used by: TUI renderer, Plugin, Android, Apple, MenuBarExtra.
4
+ */
5
+ /**
6
+ * Rank agent states by priority (lower = higher priority).
7
+ * processing=0, awaiting=1, idle=2, disconnected=3, unknown=4.
8
+ */
9
+ export declare function stateRank(state: string | undefined): number;
10
+ export type SessionTier = 'attention' | 'active' | 'idle';
11
+ export declare function sessionTier(state: string | undefined): SessionTier;
12
+ /**
13
+ * Rank agent types for stable ordering.
14
+ * openclaw=0 (always first), claude-code=1, codex-cli=2, opencode=3, others=4.
15
+ */
16
+ export declare function agentTypeRank(agentType: string | undefined): number;
17
+ /**
18
+ * Sort sessions with stable ordering that does NOT jump on state changes.
19
+ *
20
+ * Order: agentType (openclaw first → claude-code → codex → opencode)
21
+ * → projectName alphabetically
22
+ * → startedAt ascending (oldest first) for stability
23
+ * → id as final tiebreaker
24
+ *
25
+ * Returns a new array (never mutates input).
26
+ */
27
+ export declare function sortSessions<T extends {
28
+ state?: string;
29
+ projectName?: string;
30
+ agentType?: string;
31
+ startedAt?: string;
32
+ id?: string;
33
+ }>(sessions: T[]): T[];
34
+ export interface SessionDisplayInfo {
35
+ /** Original session (unmodified) */
36
+ session: {
37
+ id: string;
38
+ projectName: string;
39
+ agentType?: string;
40
+ state?: string;
41
+ [key: string]: unknown;
42
+ };
43
+ /** Display name with optional #N suffix */
44
+ displayName: string;
45
+ /** Session tier for UI grouping */
46
+ tier: SessionTier;
47
+ }
48
+ /**
49
+ * Assign display names with #N suffixes for duplicate (projectName, agentType) tuples.
50
+ * Input is NOT mutated. Returns new display info objects.
51
+ *
52
+ * @param sessions - Already-sorted sessions array
53
+ */
54
+ export declare function assignDisplayNames<T extends {
55
+ id: string;
56
+ projectName: string;
57
+ agentType?: string;
58
+ state?: string;
59
+ }>(sessions: T[]): (SessionDisplayInfo & {
60
+ session: T;
61
+ })[];
62
+ //# sourceMappingURL=session-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-utils.d.ts","sourceRoot":"","sources":["../src/session-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAU3D;AAID,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAWlE;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQnE;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAsBxJ;AAID,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACzG,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAClH,QAAQ,EAAE,CAAC,EAAE,GACZ,CAAC,kBAAkB,GAAG;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,CAsBzC"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * session-utils.ts — Shared session ordering, numbering, and tier grouping.
3
+ * Single source of truth used by: TUI renderer, Plugin, Android, Apple, MenuBarExtra.
4
+ */
5
+ // ===== State Ranking =====
6
+ /**
7
+ * Rank agent states by priority (lower = higher priority).
8
+ * processing=0, awaiting=1, idle=2, disconnected=3, unknown=4.
9
+ */
10
+ export function stateRank(state) {
11
+ switch (state) {
12
+ case 'processing': return 0;
13
+ case 'awaiting_permission':
14
+ case 'awaiting_option':
15
+ case 'awaiting_diff': return 1;
16
+ case 'idle': return 2;
17
+ case 'disconnected': return 3;
18
+ default: return 4;
19
+ }
20
+ }
21
+ export function sessionTier(state) {
22
+ switch (state) {
23
+ case 'awaiting_permission':
24
+ case 'awaiting_option':
25
+ case 'awaiting_diff':
26
+ return 'attention';
27
+ case 'processing':
28
+ return 'active';
29
+ default:
30
+ return 'idle';
31
+ }
32
+ }
33
+ // ===== Agent Type Ranking (stable ordering by agent kind) =====
34
+ /**
35
+ * Rank agent types for stable ordering.
36
+ * openclaw=0 (always first), claude-code=1, codex-cli=2, opencode=3, others=4.
37
+ */
38
+ export function agentTypeRank(agentType) {
39
+ switch (agentType) {
40
+ case 'openclaw': return 0;
41
+ case 'claude-code': return 1;
42
+ case 'codex-cli': return 2;
43
+ case 'opencode': return 3;
44
+ default: return 4;
45
+ }
46
+ }
47
+ // ===== Sorting =====
48
+ /**
49
+ * Sort sessions with stable ordering that does NOT jump on state changes.
50
+ *
51
+ * Order: agentType (openclaw first → claude-code → codex → opencode)
52
+ * → projectName alphabetically
53
+ * → startedAt ascending (oldest first) for stability
54
+ * → id as final tiebreaker
55
+ *
56
+ * Returns a new array (never mutates input).
57
+ */
58
+ export function sortSessions(sessions) {
59
+ return [...sessions].sort((a, b) => {
60
+ // 1. Agent type group (openclaw first, then by agent kind)
61
+ const typeRank = agentTypeRank(a.agentType) - agentTypeRank(b.agentType);
62
+ if (typeRank !== 0)
63
+ return typeRank;
64
+ // 2. Project name alphabetically (case-insensitive — must match Swift
65
+ // DashboardDataRules.sortSessionPayloads' localizedCaseInsensitiveCompare
66
+ // and Android EinkAgentColumn / SessionListPanel sort, otherwise mixed-case
67
+ // project names render in different order on Stream Deck vs. Apple/Android.)
68
+ const nameCompare = (a.projectName || '').localeCompare(b.projectName || '', undefined, { sensitivity: 'base' });
69
+ if (nameCompare !== 0)
70
+ return nameCompare;
71
+ // 3. Start time ascending (oldest first = stable position)
72
+ if (a.startedAt && b.startedAt) {
73
+ const diff = new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime();
74
+ if (diff !== 0)
75
+ return diff;
76
+ }
77
+ // 4. Session ID as final tiebreaker
78
+ return (a.id || '').localeCompare(b.id || '');
79
+ });
80
+ }
81
+ /**
82
+ * Assign display names with #N suffixes for duplicate (projectName, agentType) tuples.
83
+ * Input is NOT mutated. Returns new display info objects.
84
+ *
85
+ * @param sessions - Already-sorted sessions array
86
+ */
87
+ export function assignDisplayNames(sessions) {
88
+ // Count occurrences of each (projectName, agentType) pair
89
+ const counts = new Map();
90
+ for (const s of sessions) {
91
+ const key = `${s.projectName}:${s.agentType || ''}`;
92
+ counts.set(key, (counts.get(key) || 0) + 1);
93
+ }
94
+ // Assign sequential numbers
95
+ const seq = new Map();
96
+ return sessions.map(s => {
97
+ const key = `${s.projectName}:${s.agentType || ''}`;
98
+ const n = (seq.get(key) || 0) + 1;
99
+ seq.set(key, n);
100
+ const needsSuffix = (counts.get(key) || 1) > 1;
101
+ const displayName = needsSuffix ? `${s.projectName} #${n}` : s.projectName;
102
+ return {
103
+ session: s,
104
+ displayName,
105
+ tier: sessionTier(s.state),
106
+ };
107
+ });
108
+ }
109
+ //# sourceMappingURL=session-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-utils.js","sourceRoot":"","sources":["../src/session-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Canonical state color palette — single source of truth for all platforms.
3
+ *
4
+ * TypeScript consumers import directly.
5
+ * Native platforms (Android/Apple/ESP32) reference these hex values in comments.
6
+ */
7
+ import { State } from './states.js';
8
+ export declare const STATE_COLORS: Record<State, string>;
9
+ /** Look up state color by string key. No agent-type overrides — purely semantic. */
10
+ export declare function stateColor(state: string | undefined): string;
11
+ export declare const AGENT_BRAND_COLORS: Record<string, string>;
12
+ /** Get agent brand color. Falls back to slate for unknown types. */
13
+ export declare function agentBrandColor(agentType: string | undefined): string;
14
+ /** Mix a hex color toward black by ratio (0=original, 1=black). */
15
+ export declare function dimColor(hex: string, ratio: number): string;
16
+ //# sourceMappingURL=state-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-colors.d.ts","sourceRoot":"","sources":["../src/state-colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAO9C,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG5D;AAID,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMrD,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAErE;AAID,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3D"}