@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.
- package/LICENSE +21 -0
- package/dist/adapter.d.ts +16 -3
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +38 -0
- package/dist/adapter.js.map +1 -1
- package/dist/command-builders.d.ts +30 -0
- package/dist/command-builders.d.ts.map +1 -0
- package/dist/command-builders.js +60 -0
- package/dist/command-builders.js.map +1 -0
- package/dist/eval-schema.d.ts +211 -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 +27 -0
- package/dist/format-utils.d.ts.map +1 -0
- package/dist/format-utils.js +120 -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 +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -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/protocol.d.ts +326 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +19 -0
- package/dist/protocol.js.map +1 -1
- package/dist/session-utils.d.ts +62 -0
- package/dist/session-utils.d.ts.map +1 -0
- package/dist/session-utils.js +109 -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 +46 -0
- package/dist/state-colors.js.map +1 -0
- package/dist/states.d.ts +1 -0
- package/dist/states.d.ts.map +1 -1
- package/dist/svg-renderers/agent-logos.d.ts +33 -0
- package/dist/svg-renderers/agent-logos.d.ts.map +1 -0
- package/dist/svg-renderers/agent-logos.js +100 -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 +25 -0
- package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -0
- package/dist/svg-renderers/session-slot-renderer.js +317 -0
- package/dist/svg-renderers/session-slot-renderer.js.map +1 -0
- package/dist/svg-renderers/text-utils.d.ts +15 -0
- package/dist/svg-renderers/text-utils.d.ts.map +1 -0
- package/dist/svg-renderers/text-utils.js +88 -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-summarizer.d.ts +13 -0
- package/dist/timeline-summarizer.d.ts.map +1 -0
- package/dist/timeline-summarizer.js +83 -0
- package/dist/timeline-summarizer.js.map +1 -0
- package/dist/timeline.d.ts +65 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +456 -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
package/dist/protocol.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAI7D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,YAAY,MAAM,EAAE,GAAG,YAAY,CAAC;IACtD,SAAS,EAAE,OAAO,CAAC;CACpB;AAID,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;CACzB;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,CAAC;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iDAAiD;IACjD,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;IACpO,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mCAAmC;IACnC,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,CAAC;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAE1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,WAAW,GACX,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAID,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAID,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,GAAG,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;IACxH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,cAAc,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,0FAA0F;AAC1F,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6FAA6F;AAC7F,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAID,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,WAAW,GACnB,gBAAgB,GAChB,kBAAkB,GAClB,UAAU,GACV,eAAe,GACf,eAAe,GACf,eAAe,GACf,wBAAwB,GACxB,qBAAqB,GACrB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,aAAa,GACb,kBAAkB,GAClB,uBAAuB,CAAC;AAI5B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,eAAe,GAAG,aAAa,GAAG,mBAAmB,GACrD,kBAAkB,GAAG,YAAY,GAAG,YAAY,CAAC;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,UAAU,GAAG,aAAa,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,mFAAmF;AACnF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,iBAAiB,CAAC;IACxB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,4EAA4E;QAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,mBAAmB,GACnB,qBAAqB,GACrB,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,aAAa,GACb,YAAY,GACZ,iBAAiB,GACjB,WAAW,GACX,cAAc,GACd,kBAAkB,GAClB,mBAAmB,GACnB,cAAc,GACd,qBAAqB,GACrB,uBAAuB,GACvB,oBAAoB,CAAC;AAIzB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAID,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,aAMnC,CAAC;AAEH,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,aAKlC,CAAC;AAEH,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAA6B,CAAC;AAChF,eAAO,MAAM,gBAAgB,QAAgB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,sBAAsB,QAAS,CAAC"}
|
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
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"
|
|
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"}
|