@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
@@ -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,29 +16,177 @@ 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
+ subscriptionActiveUntil?: string;
82
+ }
83
+ /** One Codex (ChatGPT) rate-limit window, mirroring the Claude 5h/7d shape.
84
+ * Sourced from the user's own local Codex session rollout files — Codex CLI
85
+ * writes these snapshots itself, so this is local-file data, not an API call. */
86
+ export interface CodexRateLimitWindow {
87
+ usedPercent: number;
88
+ /** Rolling window length in minutes (primary ≈ 300 = 5h, secondary ≈ 10080 = 7d). */
89
+ windowMinutes: number;
90
+ /** ISO-8601 reset instant (converted from the rollout's unix `resets_at`). */
91
+ resetsAt?: string;
92
+ /** True when this window's snapshot has expired (its `resets_at` slid into the
93
+ * past with no fresher Codex activity). The passive rollout read is frozen, so
94
+ * the percent is last-known-only — renderers should dim the gauge and show a
95
+ * "stale" marker instead of a misleading "now" countdown. Set centrally in
96
+ * `buildUsageEvent`; `resetsAt` is cleared at the same time so no formatter
97
+ * prints "now". */
98
+ stale?: boolean;
99
+ }
100
+ /** Codex credits balance, the metering Codex reports for credit-based plans
101
+ * (e.g. `limit_id: "premium"`) where the rolling 5h/7d windows are null.
102
+ * Mirrors the rollout's `rate_limits.credits` block. */
103
+ export interface CodexCredits {
104
+ /** Whether the plan has any credit allowance configured. */
105
+ hasCredits: boolean;
106
+ /** Unlimited credits (no balance ceiling). */
107
+ unlimited: boolean;
108
+ /** Remaining balance — Codex reports this as a string (e.g. "0"). */
109
+ balance?: string;
110
+ }
111
+ /** Codex usage limits parsed from local rollout files. `primary` is the short
112
+ * (5h-style) window, `secondary` the long (weekly) window — same idea as the
113
+ * Claude 5h/7d gauges. Credit-based plans report `primary`/`secondary` as null
114
+ * and convey usage via `credits` + `limitId` instead. */
115
+ export interface CodexRateLimits {
116
+ primary?: CodexRateLimitWindow;
117
+ secondary?: CodexRateLimitWindow;
118
+ /** Plan tier reported alongside the limits (e.g. "plus", "pro"). */
119
+ planType?: string;
120
+ /** Limit identifier reported by Codex (e.g. "premium" for credit-based plans). */
121
+ limitId?: string;
122
+ /** Credit balance for credit-based plans (present when windows are null). */
123
+ credits?: CodexCredits;
124
+ /** ISO-8601 mtime of the rollout file this snapshot was read from. A secondary
125
+ * freshness anchor — the per-window `stale` flag is the authoritative signal. */
126
+ capturedAt?: string;
127
+ }
17
128
  export interface StateUpdateEvent {
18
129
  type: 'state_update';
19
130
  state: State;
20
131
  permissionMode: PermissionMode;
21
132
  agentType?: AgentType;
133
+ /** Session ID associated with this state payload; may move with hook activity. */
134
+ sessionId?: string;
135
+ /** Session explicitly focused by the user; visual selection should use this. */
136
+ focusedSessionId?: string;
22
137
  agentCapabilities?: AgentCapabilities;
23
138
  currentTool?: string;
24
139
  toolInput?: string;
25
140
  toolProgress?: string;
26
141
  projectName?: string;
27
142
  modelName?: string;
143
+ effortLevel?: string;
28
144
  billingType?: BillingType;
29
145
  options?: PromptOption[];
30
146
  promptType?: 'yes_no' | 'yes_no_always' | 'multi_select' | 'diff_review';
31
147
  question?: string;
32
148
  navigable?: boolean;
33
149
  cursorIndex?: number;
150
+ /** Set when the focused session has a gated PreToolUse permission pending
151
+ * device approval — clients reply with `permission_decision { requestId }`
152
+ * instead of `select_option`. See bridge/src/permission-resolver.ts. */
153
+ requestId?: string;
34
154
  suggestedPrompt?: string;
35
155
  modelCatalog?: ModelCatalogEntry[];
36
156
  sessionStatus?: OcSessionStatus;
37
157
  remoteUrl?: string;
38
158
  /** Authenticated WS URL for remote pairing (ws://ip:port?token=hex) */
39
159
  pairingUrl?: string;
160
+ /** Number of OpenClaw backend worker sessions (multi-agent) */
161
+ workerSessionCount?: number;
162
+ /** Ollama process status + running models */
163
+ ollamaStatus?: OllamaStatus;
164
+ /** MLX local server model list */
165
+ mlxModels?: string[];
166
+ /** Subscription-backed authenticated services */
167
+ subscriptions?: SubscriptionInfo[];
168
+ /** Local Antigravity IDE quota summary, when available */
169
+ antigravityStatus?: AntigravityStatusInfo;
170
+ /** OpenClaw Gateway reachability (port 18789) */
171
+ gatewayAvailable?: boolean;
172
+ /** OpenClaw Gateway authenticated adapter connection */
173
+ gatewayConnected?: boolean;
174
+ /** OpenClaw Gateway has doctor warnings/errors */
175
+ gatewayHasError?: boolean;
176
+ /** OpenClaw Gateway auth/pairing state */
177
+ gatewayAuthStatus?: 'gateway_not_found' | 'gateway_reachable' | 'gateway_token_missing' | 'pairing_required' | 'approval_pending' | 'connected' | 'auth_failed' | 'token_mismatch' | 'device_auth_invalid' | 'unsupported_protocol';
178
+ /** OpenClaw device pairing request id, when Gateway requires approval */
179
+ gatewayAuthRequestId?: string;
180
+ /** Human-readable OpenClaw auth/pairing diagnostic */
181
+ gatewayAuthMessage?: string;
182
+ /** Daemon-owned hardware/module health, intentionally loose for cross-version clients */
183
+ moduleHealth?: Record<string, unknown>;
184
+ /** Voice assistant pipeline state (wake word → STT → LLM → TTS) */
185
+ voiceAssistantState?: VoiceAssistantState;
186
+ /** Transcribed user speech (processing/speaking) */
187
+ voiceAssistantText?: string;
188
+ /** LLM response text (speaking) */
189
+ voiceAssistantResponseText?: string;
40
190
  }
41
191
  export interface PromptOptionsEvent {
42
192
  type: 'prompt_options';
@@ -64,6 +214,21 @@ export interface UsageEvent {
64
214
  extraUsageMonthlyLimit?: number;
65
215
  extraUsageUsedCredits?: number;
66
216
  extraUsageUtilization?: number;
217
+ oauthConnected?: boolean;
218
+ ollamaStatus?: OllamaStatus;
219
+ usageStale?: boolean;
220
+ tokenStatus?: 'valid' | 'expired' | 'missing' | 'unknown';
221
+ codexAuthMode?: string;
222
+ codexWebAuthConnected?: boolean;
223
+ codexPlanType?: string;
224
+ codexAccountId?: string;
225
+ codexSubscriptionActiveUntil?: string;
226
+ codexLastRefreshAt?: string;
227
+ codexRateLimits?: CodexRateLimits;
228
+ modelCatalog?: ModelCatalogEntry[];
229
+ mlxModels?: string[];
230
+ subscriptions?: SubscriptionInfo[];
231
+ antigravityStatus?: AntigravityStatusInfo;
67
232
  }
68
233
  export interface ConnectionEvent {
69
234
  type: 'connection';
@@ -80,7 +245,230 @@ export interface VoiceStateEvent {
80
245
  text?: string;
81
246
  error?: string;
82
247
  }
83
- export type BridgeEvent = StateUpdateEvent | PromptOptionsEvent | UsageEvent | ConnectionEvent | UserPromptEvent | VoiceStateEvent;
248
+ export type VoiceAssistantState = 'idle' | 'listening' | 'processing' | 'speaking' | 'disabled';
249
+ export interface VoiceAssistantStateEvent {
250
+ type: 'voice_assistant_state';
251
+ state: VoiceAssistantState;
252
+ deviceId?: string;
253
+ /** Transcribed user speech */
254
+ text?: string;
255
+ /** LLM response text */
256
+ responseText?: string;
257
+ }
258
+ export interface WakeWordDetectedEvent {
259
+ type: 'wake_word_detected';
260
+ deviceId: string;
261
+ timestamp: number;
262
+ }
263
+ /**
264
+ * Per-broadcast instruction telling downstream devices HOW to dim when the
265
+ * host display sleeps. Resolved by the daemon from the `displaySleepDim`
266
+ * settings.json key and embedded in every `display_state` event so that
267
+ * Pixoo / D200H / ESP32 dumb-apply a single consistent snapshot.
268
+ * Absent ⇒ legacy behavior (full-off when displayOn=false).
269
+ */
270
+ export interface DisplayDimInstruction {
271
+ /** Master toggle. false ⇒ leave devices at their normal brightness. */
272
+ enabled: boolean;
273
+ /** 'off' ⇒ brightness 0; 'min' ⇒ dim to `level`. */
274
+ mode: 'off' | 'min';
275
+ /** Minimum-brightness percent (1-100). Ignored when mode='off'. */
276
+ level: number;
277
+ }
278
+ export interface DisplayStateEvent {
279
+ type: 'display_state';
280
+ displayOn: boolean;
281
+ /** How to dim on sleep. Absent ⇒ legacy full-off. */
282
+ dim?: DisplayDimInstruction;
283
+ }
284
+ export interface SessionInfo {
285
+ id: string;
286
+ port: number;
287
+ pid?: number;
288
+ projectName: string;
289
+ agentType?: AgentType;
290
+ alive: boolean;
291
+ state?: string;
292
+ modelName?: string;
293
+ effortLevel?: string;
294
+ startedAt?: string;
295
+ currentTool?: string;
296
+ groupSize?: number;
297
+ foldedSessionIds?: string[];
298
+ controlMode?: 'managed' | 'observed';
299
+ cwd?: string;
300
+ currentTask?: string;
301
+ /** Daemon-synthesized "what is this agent doing right now" one-liner — a shared
302
+ * source so glance surfaces (XTeink X3 rows, TRMNL list) render the same text. */
303
+ activity?: string;
304
+ goal?: string;
305
+ contextPercent?: number;
306
+ totalTokens?: number;
307
+ question?: string;
308
+ requestId?: string;
309
+ promptType?: 'yes_no' | 'yes_no_always' | 'multi_select' | 'diff_review';
310
+ options?: PromptOption[];
311
+ elapsedSec?: number;
312
+ }
313
+ export interface SessionsListEvent {
314
+ type: 'sessions_list';
315
+ sessions: SessionInfo[];
316
+ }
317
+ export interface TimelineEventMsg {
318
+ type: 'timeline_event';
319
+ entry: TimelineEntry;
320
+ upsert?: boolean;
321
+ }
322
+ export interface TimelineHistoryMsg {
323
+ type: 'timeline_history';
324
+ entries: TimelineEntry[];
325
+ /** Set when this history is a reply to `query_session_timeline` — scopes the
326
+ * entries to one session so reconnecting glance devices (XTeink X3) can fill a
327
+ * per-session Detail view on demand instead of waiting for live events. */
328
+ sessionId?: string;
329
+ }
330
+ /** A single evaluation score on a completed run. */
331
+ export interface ApmeEvalRow {
332
+ layer: 'deterministic' | 'llm_judge' | 'vibe' | 'turn_judge' | 'task_judge' | 'trajectory';
333
+ metric: string;
334
+ score: number;
335
+ rubricVer?: number;
336
+ judgeModel?: string;
337
+ createdAt: number;
338
+ }
339
+ /** A run that has finished evaluation. */
340
+ export interface ApmeRunSummary {
341
+ runId: string;
342
+ sessionId: string;
343
+ agentType: AgentType;
344
+ modelId?: string;
345
+ projectName?: string;
346
+ taskPrompt?: string;
347
+ taskCategory?: string;
348
+ outcome?: 'committed' | 'abandoned' | 'iterated' | 'ab_winner' | 'ab_loser' | 'interrupted' | 'exploratory' | 'pending';
349
+ compositeScore?: number;
350
+ startedAt: number;
351
+ endedAt?: number;
352
+ inputTokens?: number;
353
+ outputTokens?: number;
354
+ costUsd?: number;
355
+ exitCode?: number;
356
+ overallScore?: number;
357
+ evals: ApmeEvalRow[];
358
+ }
359
+ /** Bridge → clients — fires when a run completes evaluation (layer 1 or 2). */
360
+ export interface ApmeEvalEvent {
361
+ type: 'apme_eval';
362
+ run: ApmeRunSummary;
363
+ }
364
+ export interface ApmeModelScorecard {
365
+ agentType: AgentType;
366
+ modelId: string;
367
+ runs: number;
368
+ avgOverall?: number;
369
+ avgTestsPass?: number;
370
+ totalCost?: number;
371
+ costPerQuality?: number;
372
+ }
373
+ /** Bridge → clients — scorecard refresh (broadcast after eval completes or on demand). */
374
+ export interface ApmeScorecardEvent {
375
+ type: 'apme_scorecard';
376
+ scorecards: ApmeModelScorecard[];
377
+ }
378
+ export interface ApmeRecommendation {
379
+ modelId: string;
380
+ agentType: AgentType;
381
+ expectedScore: number;
382
+ expectedCostUsd: number;
383
+ confidence: number;
384
+ rationale: string;
385
+ }
386
+ /** Bridge → clients — model recommendation for the next task (on-demand / context-aware). */
387
+ export interface ApmeRecommendationEvent {
388
+ type: 'apme_recommendation';
389
+ taskKind?: string;
390
+ candidates: ApmeRecommendation[];
391
+ }
392
+ export interface WifiProvisionMessage {
393
+ type: 'wifi_provision';
394
+ ssid: string;
395
+ password: string;
396
+ bridgeIp: string;
397
+ bridgePort: number;
398
+ authToken: string;
399
+ }
400
+ export interface DeviceInfoMessage {
401
+ type: 'device_info';
402
+ board: string;
403
+ version: string;
404
+ buildHash?: string;
405
+ buildEpoch?: number;
406
+ wifiConfigured: boolean;
407
+ wifiConnected: boolean;
408
+ /** True when firmware intentionally powered WiFi down because USB serial is primary. */
409
+ wifiRadioParked?: boolean;
410
+ /** Board uptime in seconds at the moment the info frame was emitted. */
411
+ uptimeSec?: number;
412
+ /** ESP-IDF reset reason as a stable diagnostic string, e.g. "brownout" or "panic". */
413
+ resetReason?: string;
414
+ /** Raw esp_reset_reason_t numeric code for cases not covered by resetReason. */
415
+ resetReasonCode?: number;
416
+ ip?: string;
417
+ otaSupported?: boolean;
418
+ otaSlotCount?: number;
419
+ otaSlotSize?: number;
420
+ otaFreeSketchSpace?: number;
421
+ otaReason?: string;
422
+ }
423
+ export interface WifiProvisionAckMessage {
424
+ type: 'wifi_provision_ack';
425
+ success: boolean;
426
+ ip?: string;
427
+ error?: string;
428
+ }
429
+ export interface WifiStatusMessage {
430
+ type: 'wifi_status';
431
+ connected: boolean;
432
+ ssid?: string;
433
+ ip?: string;
434
+ }
435
+ export interface Esp32OtaBeginEvent {
436
+ type: 'esp32_ota_begin';
437
+ otaId: string;
438
+ size: number;
439
+ md5: string;
440
+ }
441
+ export interface Esp32OtaChunkEvent {
442
+ type: 'esp32_ota_chunk';
443
+ otaId: string;
444
+ seq: number;
445
+ offset: number;
446
+ data: string;
447
+ }
448
+ export interface Esp32OtaEndEvent {
449
+ type: 'esp32_ota_end';
450
+ otaId: string;
451
+ }
452
+ export interface Esp32OtaAbortEvent {
453
+ type: 'esp32_ota_abort';
454
+ otaId: string;
455
+ }
456
+ export interface Esp32OtaAckCommand {
457
+ type: 'esp32_ota_ack';
458
+ otaId: string;
459
+ stage: 'begin' | 'chunk' | 'end' | 'abort';
460
+ seq?: number;
461
+ offset?: number;
462
+ written?: number;
463
+ }
464
+ export interface Esp32OtaErrorCommand {
465
+ type: 'esp32_ota_error';
466
+ error: string;
467
+ otaId?: string;
468
+ stage?: string;
469
+ }
470
+ export type ESP32ToHostMessage = DeviceInfoMessage | WifiProvisionAckMessage | WifiStatusMessage | Esp32OtaAckCommand | Esp32OtaErrorCommand;
471
+ export type BridgeEvent = StateUpdateEvent | PromptOptionsEvent | UsageEvent | ConnectionEvent | UserPromptEvent | VoiceStateEvent | VoiceAssistantStateEvent | WakeWordDetectedEvent | DisplayStateEvent | SessionsListEvent | EncoderStateEvent | DeckSlotMapEvent | ButtonStateEvent | TimelineEventMsg | TimelineHistoryMsg | ApmeEvalEvent | ApmeScorecardEvent | ApmeRecommendationEvent | Esp32OtaBeginEvent | Esp32OtaChunkEvent | Esp32OtaEndEvent | Esp32OtaAbortEvent;
84
472
  export interface ResponseCommand {
85
473
  type: 'respond';
86
474
  value: string;
@@ -88,6 +476,7 @@ export interface ResponseCommand {
88
476
  export interface SelectOptionCommand {
89
477
  type: 'select_option';
90
478
  index: number;
479
+ sessionId?: string;
91
480
  }
92
481
  export interface NavigateOptionCommand {
93
482
  type: 'navigate_option';
@@ -114,17 +503,122 @@ export interface VoiceCommand {
114
503
  export interface QueryUsageCommand {
115
504
  type: 'query_usage';
116
505
  }
506
+ /** Request a session's recent timeline. The daemon replies (to the requester
507
+ * only) with a `timeline_history` carrying that session's entries. Lets a
508
+ * device that connects mid-session fill its per-session Detail view. */
509
+ export interface QuerySessionTimelineCommand {
510
+ type: 'query_session_timeline';
511
+ sessionId: string;
512
+ /** Optional epoch-ms lower bound; omit for the full retained history. */
513
+ since?: number;
514
+ }
117
515
  export interface DiagCommand {
118
516
  type: 'diag';
119
517
  action: 'dump' | 'analyze';
120
518
  }
121
- export type PluginCommand = ResponseCommand | SelectOptionCommand | NavigateOptionCommand | SendPromptCommand | SwitchModeCommand | InterruptCommand | EscapeCommand | VoiceCommand | QueryUsageCommand | DiagCommand;
519
+ export interface UtilityCommand {
520
+ type: 'utility';
521
+ action: 'adjust_volume' | 'toggle_mute' | 'adjust_brightness' | 'media_play_pause' | 'media_next' | 'media_prev';
522
+ value?: number;
523
+ }
524
+ export interface SwitchAgentCommand {
525
+ type: 'switch_agent';
526
+ agent: 'openclaw' | 'claude-code';
527
+ }
528
+ export interface FocusSessionCommand {
529
+ type: 'focus_session';
530
+ sessionId: string;
531
+ }
532
+ export interface ClearSessionFocusCommand {
533
+ type: 'clear_session_focus';
534
+ }
535
+ /** APME vibe check — user approves or rejects a completed run's output quality. */
536
+ export interface ApmeVibeFeedbackCommand {
537
+ type: 'apme_vibe';
538
+ runId: string;
539
+ verdict: 'approve' | 'reject' | 'neutral';
540
+ note?: string;
541
+ }
542
+ /** Ask bridge/daemon for model recommendation given a task context. */
543
+ export interface ApmeRecommendCommand {
544
+ type: 'apme_recommend';
545
+ taskKind?: string;
546
+ budgetUsd?: number;
547
+ latencyBudgetMs?: number;
548
+ preferLocal?: boolean;
549
+ }
550
+ /**
551
+ * Self-announcement from a rich UI client (Elgato Stream Deck plugin, a
552
+ * future Android companion app, etc.) so the daemon can surface the
553
+ * hardware under its rightful Downstream row instead of treating every
554
+ * WS connection as an anonymous dashboard viewer. Sent once per connect,
555
+ * immediately after the WebSocket opens. Daemon wipes the cached entry
556
+ * when the WS connection closes.
557
+ */
558
+ export interface ClientRegisterCommand {
559
+ type: 'client_register';
560
+ /** Short stable id — "streamdeck-plugin", "android-companion", etc. */
561
+ clientType: string;
562
+ /** Human-readable label for the surface (appears verbatim in diagnostics). */
563
+ clientLabel?: string;
564
+ /** Physical device roster this client is driving, if any. */
565
+ devices?: Array<{
566
+ id: string;
567
+ name: string;
568
+ /** "streamdeck" | "streamdeckplus" | "streamdeckmini" | ... — free-form. */
569
+ family?: string;
570
+ columns?: number;
571
+ rows?: number;
572
+ }>;
573
+ }
574
+ /**
575
+ * Session-scoped command — daemon forwards the inner command to the specified session's bridge.
576
+ * Enables direct control of a specific session from any client (MenuBarExtra, Dashboard, etc.)
577
+ */
578
+ export interface SessionCommand {
579
+ type: 'session_command';
580
+ sessionId: string;
581
+ command: {
582
+ type: string;
583
+ [key: string]: unknown;
584
+ };
585
+ }
586
+ /**
587
+ * Device approval decision for a gated PreToolUse permission request (observed
588
+ * sessions). The daemon holds the hook's HTTP response open keyed by
589
+ * `requestId`; this command resolves it into a Claude Code permission decision.
590
+ * See bridge/src/permission-resolver.ts.
591
+ */
592
+ export interface PermissionDecisionCommand {
593
+ type: 'permission_decision';
594
+ requestId: string;
595
+ decision: 'allow' | 'deny';
596
+ }
597
+ export type PluginCommand = ResponseCommand | SelectOptionCommand | NavigateOptionCommand | SendPromptCommand | SwitchModeCommand | InterruptCommand | EscapeCommand | VoiceCommand | QueryUsageCommand | QuerySessionTimelineCommand | DiagCommand | UtilityCommand | SwitchAgentCommand | FocusSessionCommand | ClearSessionFocusCommand | SessionCommand | ClientRegisterCommand | ApmeVibeFeedbackCommand | ApmeRecommendCommand | PermissionDecisionCommand | Esp32OtaAckCommand | Esp32OtaErrorCommand;
122
598
  export interface HookEvent {
123
599
  event: string;
124
600
  data: Record<string, unknown>;
125
601
  }
602
+ /** Events forwarded to display-only devices (Pixoo64) */
603
+ export declare const DISPLAY_FORWARDED_EVENTS: Set<string>;
604
+ /** Events forwarded to serial devices (ESP32) — display events + timeline */
605
+ export declare const SERIAL_FORWARDED_EVENTS: Set<string>;
126
606
  export declare const BRIDGE_WS_PORT = 9120;
127
607
  export declare const BRIDGE_HTTP_PORT = 9120;
128
608
  export declare const RECONNECT_INTERVAL_MS = 3000;
609
+ /** Plugin reconnect backoff ladder. Advances on each failed attempt, resets on `connected`. */
610
+ export declare const RECONNECT_BACKOFF_MS: readonly number[];
129
611
  export declare const STUCK_TIMEOUT_MS: number;
612
+ /** Backstop for AWAITING_* states. Longer than STUCK_TIMEOUT_MS because a user
613
+ * can legitimately leave a permission/option/diff prompt unanswered for a
614
+ * while; this only fires when a managed PTY session never sees the recovery
615
+ * spinner/idle (parser miss) and no follow-up hook arrives. */
616
+ export declare const AWAITING_STUCK_TIMEOUT_MS: number;
617
+ export declare const WS_PING_INTERVAL_MS = 15000;
618
+ export declare const WS_ACTIVITY_TIMEOUT_MS = 30000;
619
+ /** Soft-stale threshold: shorter than WS_ACTIVITY_TIMEOUT_MS so a client can dim
620
+ * its last-known render (and flag it as stale) before the hard disconnect. The
621
+ * daemon pings every WS_PING_INTERVAL_MS, so this only trips when the daemon
622
+ * genuinely stops responding. Mirrors the 20s stale window in the TUI/Apple. */
623
+ export declare const WS_STALE_TIMEOUT_MS = 20000;
130
624
  //# 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,35 @@
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;
5
- export const STUCK_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
20
+ /** Plugin reconnect backoff ladder. Advances on each failed attempt, resets on `connected`. */
21
+ export const RECONNECT_BACKOFF_MS = [1000, 2000, 4000, 8000];
22
+ export const STUCK_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes (PROCESSING hang)
23
+ /** Backstop for AWAITING_* states. Longer than STUCK_TIMEOUT_MS because a user
24
+ * can legitimately leave a permission/option/diff prompt unanswered for a
25
+ * while; this only fires when a managed PTY session never sees the recovery
26
+ * spinner/idle (parser miss) and no follow-up hook arrives. */
27
+ export const AWAITING_STUCK_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
28
+ export const WS_PING_INTERVAL_MS = 15_000;
29
+ export const WS_ACTIVITY_TIMEOUT_MS = 30_000;
30
+ /** Soft-stale threshold: shorter than WS_ACTIVITY_TIMEOUT_MS so a client can dim
31
+ * its last-known render (and flag it as stale) before the hard disconnect. The
32
+ * daemon pings every WS_PING_INTERVAL_MS, so this only trips when the daemon
33
+ * genuinely stops responding. Mirrors the 20s stale window in the TUI/Apple. */
34
+ export const WS_STALE_TIMEOUT_MS = 20_000;
6
35
  //# 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":"AAuwBA,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,8BAA8B;AAC7E;;;gEAGgE;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C;;;iFAGiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC"}