@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
@@ -0,0 +1,456 @@
1
+ /**
2
+ * Shared timeline types and log parser for OpenClaw mode.
3
+ * Used by both bridge (BridgeLogStream) and plugin (LogStream).
4
+ */
5
+ /**
6
+ * Extract a human-readable summary from a raw OpenClaw log message.
7
+ * Strips JSON prefixes, key=value noise, and extracts error descriptions.
8
+ */
9
+ function extractReadableMessage(message) {
10
+ let cleaned = message;
11
+ // If entire message is a JSON object, extract error field
12
+ if (cleaned.startsWith('{') && cleaned.endsWith('}')) {
13
+ try {
14
+ const parsed = JSON.parse(cleaned);
15
+ if (parsed.error)
16
+ cleaned = String(parsed.error);
17
+ else
18
+ cleaned = JSON.stringify(parsed).slice(0, 200);
19
+ }
20
+ catch { /* not valid JSON, continue with regex strip */ }
21
+ }
22
+ // Strip leading JSON object fragments: {"subsystem":"diagnostic"} ...
23
+ cleaned = cleaned.replace(/^\{[^}]*\}\s*/, '');
24
+ // Strip [subsystem] prefix: "[tools] read failed..." → "read failed..."
25
+ const bracketMatch = cleaned.match(/^\[(\w+)\]\s*(.*)/);
26
+ const contextTag = bracketMatch ? bracketMatch[1] : null;
27
+ if (bracketMatch)
28
+ cleaned = bracketMatch[2];
29
+ // Extract error= quoted value if present: error="FailoverError: LLM request timed out."
30
+ const errorMatch = cleaned.match(/error="([^"]+)"/);
31
+ if (errorMatch) {
32
+ // Also extract lane/context if available
33
+ const laneMatch = cleaned.match(/lane=(\S+)/);
34
+ const lane = laneMatch ? `[${laneMatch[1]}] ` : (contextTag ? `[${contextTag}] ` : '');
35
+ cleaned = `${lane}${errorMatch[1]}`;
36
+ }
37
+ else {
38
+ // For ENOENT/file errors: extract the file path and simplify
39
+ const enoentMatch = cleaned.match(/ENOENT:.*?['"]([^'"]+)['"]/);
40
+ if (enoentMatch) {
41
+ const filePath = enoentMatch[1];
42
+ // Show just filename or last 2 path components
43
+ const shortPath = filePath.split('/').slice(-2).join('/');
44
+ cleaned = `파일 없음: ${shortPath}`;
45
+ }
46
+ else {
47
+ // Strip key=value pairs that are noise (conn=..., durationMs=...)
48
+ cleaned = cleaned
49
+ .replace(/\b(conn|durationMs|stateVersion|seq)=\S+/g, '')
50
+ .replace(/\s{2,}/g, ' ')
51
+ .trim();
52
+ }
53
+ }
54
+ // Truncate
55
+ if (cleaned.length > 500)
56
+ cleaned = cleaned.slice(0, 497) + '...';
57
+ return cleaned || message.slice(0, 500);
58
+ }
59
+ /**
60
+ * Clean detail text — strip markdown artifacts, JSON blobs, and system noise.
61
+ * Applied to timeline entry `detail` fields before storage.
62
+ */
63
+ export function cleanDetailText(text) {
64
+ if (!text)
65
+ return text;
66
+ if (typeof text !== 'string')
67
+ return '';
68
+ // If entire text is a JSON object, extract readable message
69
+ const trimmed = text.trim();
70
+ if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
71
+ try {
72
+ const parsed = JSON.parse(trimmed);
73
+ // System JSON blobs (connectionId, status codes, etc.) → filter
74
+ if (parsed.connectionId || parsed.stateVersion || parsed.seq)
75
+ return '';
76
+ if (parsed.error)
77
+ return String(parsed.error);
78
+ // Other JSON → compact readable form
79
+ return JSON.stringify(parsed).slice(0, 200);
80
+ }
81
+ catch { /* not valid JSON, continue */ }
82
+ }
83
+ let cleaned = text;
84
+ // Strip code fences: ```lang\n...\n``` → contents
85
+ cleaned = cleaned.replace(/```[\w]*\n?([\s\S]*?)```/g, '$1');
86
+ // Strip bold: **text** → text
87
+ cleaned = cleaned.replace(/\*\*([^*]+)\*\*/g, '$1');
88
+ // Strip italic: *text* or _text_ (but not __dunder__)
89
+ cleaned = cleaned.replace(/(?<!\*)\*([^*\n]+)\*(?!\*)/g, '$1');
90
+ // Strip headings: ## heading → heading
91
+ cleaned = cleaned.replace(/^#{1,6}\s+/gm, '');
92
+ // Strip blockquotes: > text → text
93
+ cleaned = cleaned.replace(/^>\s+/gm, '');
94
+ // Strip markdown links: [text](url) → text
95
+ cleaned = cleaned.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
96
+ // Strip list markers: - item or * item → item (only at line start)
97
+ cleaned = cleaned.replace(/^[-*]\s+/gm, '');
98
+ // Strip inline code backticks: `code` → code
99
+ cleaned = cleaned.replace(/`([^`]+)`/g, '$1');
100
+ // Collapse multiple blank lines
101
+ cleaned = cleaned.replace(/\n{3,}/g, '\n\n');
102
+ return cleaned.trim();
103
+ }
104
+ /**
105
+ * Strip inline markdown from raw text (lightweight version of cleanDetailText).
106
+ * Handles: **bold**, # heading, `code`, [text](url).
107
+ */
108
+ export function cleanRawText(text) {
109
+ if (!text)
110
+ return text;
111
+ if (typeof text !== 'string')
112
+ return '';
113
+ return text
114
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
115
+ .replace(/^#{1,6}\s+/gm, '')
116
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
117
+ .replace(/`([^`]+)`/g, '$1')
118
+ .trim();
119
+ }
120
+ /**
121
+ * Remove NOP/NOOP markers from text.
122
+ * Applied to both raw and detail fields.
123
+ */
124
+ export function cleanNopMarkers(text) {
125
+ if (!text)
126
+ return text;
127
+ return text
128
+ .replace(/\bN[Oo][Oo]?[Pp]\b\s*/g, '')
129
+ .replace(/\n{3,}/g, '\n\n')
130
+ .trim();
131
+ }
132
+ /**
133
+ * Extract the semantic core of a timeline entry for dedup comparison.
134
+ * For chat_end: strip duration/tool suffix (everything after first ' · ').
135
+ * For chat_start: use full raw text.
136
+ */
137
+ export function extractSemanticCore(raw, type) {
138
+ if (type === 'chat_end') {
139
+ const sepIdx = raw.indexOf(' \u00b7 ');
140
+ return sepIdx >= 0 ? raw.slice(0, sepIdx).trim() : raw.trim();
141
+ }
142
+ return raw.trim();
143
+ }
144
+ /**
145
+ * Normalize a semantic core for fuzzy comparison.
146
+ * Extracts sorted unique keywords, stripping punctuation and common suffixes.
147
+ * "WhatsApp 연결 상태 확인 완료, 정상 작동" → "whatsapp 연결 상태 완료 작동 정상 확인"
148
+ */
149
+ function normalizeCore(core) {
150
+ return core
151
+ .toLowerCase()
152
+ .replace(/[.,!?·✓✅:…""''`\n]+/g, ' ')
153
+ .replace(/\s+/g, ' ')
154
+ .trim();
155
+ }
156
+ /**
157
+ * Extract a keyword bag from text for similarity comparison.
158
+ * Strips Korean verb/adjective endings and common fillers.
159
+ */
160
+ function extractKeywords(text) {
161
+ const normalized = normalizeCore(text);
162
+ const words = normalized.split(' ').filter(w => w.length >= 2);
163
+ // Strip common Korean verbal endings for stemming
164
+ const stemmed = words.map(w => w.replace(/(하겠습니다|합니다|합니다|한다|시작|완료|중|확인됨|됨|했습니다)$/, '')
165
+ .replace(/(을|를|이|가|의|에|에서|으로|로|는|은|도|만|까지)$/, '')).filter(w => w.length >= 2);
166
+ // Remove common filler words
167
+ const fillers = new Set(['시작', '완료', '중', '및', '조치', '불필요', '정상', 'completed', 'prompt', 'sent', 'noop', 'nop']);
168
+ return new Set(stemmed.filter(w => !fillers.has(w)));
169
+ }
170
+ /**
171
+ * Check if two semantic cores are similar enough to be considered duplicates.
172
+ * Uses keyword overlap — if 60%+ of smaller keyword set overlaps, it's a dupe.
173
+ */
174
+ function isSimilarCore(a, b) {
175
+ const na = normalizeCore(a);
176
+ const nb = normalizeCore(b);
177
+ if (na === nb)
178
+ return true;
179
+ // Keyword-based similarity
180
+ const ka = extractKeywords(a);
181
+ const kb = extractKeywords(b);
182
+ if (ka.size === 0 || kb.size === 0)
183
+ return false;
184
+ const smaller = ka.size <= kb.size ? ka : kb;
185
+ const larger = ka.size > kb.size ? ka : kb;
186
+ let overlap = 0;
187
+ for (const w of smaller) {
188
+ if (larger.has(w))
189
+ overlap++;
190
+ }
191
+ // 60% overlap of the smaller set → similar
192
+ return overlap >= smaller.size * 0.6 && overlap >= 2;
193
+ }
194
+ /**
195
+ * Check if an entry is repetitive compared to recent entries.
196
+ * Returns the index of the matching entry in recentEntries, or -1 if not repetitive.
197
+ */
198
+ export function isRepetitiveEntry(entry, recentEntries, windowMs = 3_600_000) {
199
+ if (entry.type !== 'chat_end' &&
200
+ entry.type !== 'chat_start' &&
201
+ entry.type !== 'error' &&
202
+ entry.type !== 'chat_response') {
203
+ return -1;
204
+ }
205
+ // Automated entries (cron/channel-initiated): 8h window, any automated pair is a dupe
206
+ const effectiveWindowMs = entry.automated ? 8 * 3_600_000 : windowMs;
207
+ const core = extractSemanticCore(entry.raw, entry.type);
208
+ if (!core)
209
+ return -1;
210
+ for (let i = recentEntries.length - 1; i >= 0; i--) {
211
+ const e = recentEntries[i];
212
+ if (entry.ts - e.ts > effectiveWindowMs)
213
+ break;
214
+ if (e.type !== entry.type)
215
+ continue;
216
+ // Automated entries: content-agnostic dedup (any two automated chats collapse)
217
+ if (entry.automated && e.automated)
218
+ return i;
219
+ const eCore = extractSemanticCore(e.raw, e.type);
220
+ if (isSimilarCore(core, eCore))
221
+ return i;
222
+ }
223
+ return -1;
224
+ }
225
+ export function deduplicateEntry(entry, entries) {
226
+ // 1. Clean text artifacts
227
+ if (entry.raw)
228
+ entry = { ...entry, raw: cleanNopMarkers(cleanRawText(entry.raw)) };
229
+ if (entry.detail)
230
+ entry = { ...entry, detail: cleanNopMarkers(entry.detail) };
231
+ // 2. Exact dedup: skip if same type + raw within 8 seconds
232
+ for (let i = entries.length - 1; i >= 0; i--) {
233
+ const e = entries[i];
234
+ if (entry.ts - e.ts > 8_000)
235
+ break;
236
+ if (e.type === entry.type && e.raw === entry.raw)
237
+ return { action: 'skip' };
238
+ }
239
+ // 3. Repetitive entry dedup (1h window)
240
+ const repIdx = isRepetitiveEntry(entry, entries);
241
+ if (repIdx >= 0) {
242
+ let removeChatStartIndex;
243
+ // For chat_end dedup, find paired chat_start that's also repetitive
244
+ if (entry.type === 'chat_end') {
245
+ for (let j = entries.length - 1; j >= 0; j--) {
246
+ const cs = entries[j];
247
+ if (cs.type !== 'chat_start')
248
+ continue;
249
+ if (entry.ts - cs.ts > 3_600_000)
250
+ break;
251
+ if (isRepetitiveEntry(cs, entries.slice(0, j)) >= 0) {
252
+ removeChatStartIndex = j;
253
+ break;
254
+ }
255
+ }
256
+ }
257
+ return { action: 'merge', index: repIdx, removeChatStartIndex };
258
+ }
259
+ return { action: 'add', entry };
260
+ }
261
+ /** Parse a single JSON log line into a TimelineEntry, or null if unrecognized. */
262
+ export function parseLogLine(json) {
263
+ if (!json || typeof json !== 'object')
264
+ return null;
265
+ const obj = json;
266
+ // ===== OpenClaw logs --json format =====
267
+ // { type: "log", time: "ISO", level: "info|debug", message: "...", subsystem?: "...", module?: "...", raw: "..." }
268
+ const message = obj.message || obj.msg || '';
269
+ const subsystem = obj.subsystem;
270
+ const module_ = obj.module;
271
+ // Parse timestamp: ISO string (OpenClaw) or numeric
272
+ let ts;
273
+ const timeStr = obj.time;
274
+ if (timeStr && typeof timeStr === 'string') {
275
+ const parsed = new Date(timeStr).getTime();
276
+ ts = isNaN(parsed) ? Date.now() : parsed;
277
+ }
278
+ else {
279
+ ts = obj.ts || obj.timestamp || Date.now();
280
+ }
281
+ // ===== Legacy structured format (backward compat) =====
282
+ const action = obj.action;
283
+ const model = obj.model;
284
+ const tool = obj.tool;
285
+ const component = obj.component;
286
+ const tokens = obj.tokens;
287
+ // Model inference start/complete (legacy structured) — suppressed
288
+ // Adapter generates richer chat_start/chat_end with prompt, duration, tool summary
289
+ if (model && (action === 'start' || action === 'request' || action === 'complete' || action === 'done' || action === 'response')) {
290
+ return null;
291
+ }
292
+ // Memory / recall (legacy structured)
293
+ if (component === 'memory' || action === 'recall' || action === 'search') {
294
+ const query = obj.query || message || 'memory search';
295
+ return {
296
+ ts, type: 'memory_recall',
297
+ raw: `Memory: ${query}`,
298
+ detail: query.length > 50 ? query : undefined,
299
+ };
300
+ }
301
+ // Tool execution (legacy structured)
302
+ if (tool || (component === 'tool' && action)) {
303
+ const toolName = tool || action || 'tool';
304
+ const toolDetail = obj.detail || obj.command || '';
305
+ const toolRaw = toolDetail ? `${toolName}: ${toolDetail}` : toolName;
306
+ return {
307
+ ts, type: 'tool_exec',
308
+ raw: toolRaw.length > 500 ? toolRaw.slice(0, 497) + '...' : toolRaw,
309
+ detail: toolDetail.length > 100 ? (toolDetail.length > 1000 ? toolDetail.slice(0, 997) + '...' : toolDetail) : undefined,
310
+ };
311
+ }
312
+ // ===== OpenClaw message-text based matching =====
313
+ if (!message)
314
+ return null;
315
+ // Skip very short messages (JSON fragments, truncated output)
316
+ if (message.length < 5)
317
+ return null;
318
+ // Gateway WS subsystem: all RPC events are redundant with adapter-generated timeline
319
+ // (chat.send → chat_start, chat.abort → chat_end, exec.approval.resolve → tool_resolved)
320
+ if (subsystem === 'gateway/ws')
321
+ return null;
322
+ // Cron list table rows: UUID-prefixed lines from `openclaw cron list` output
323
+ // Keep error rows as summarized entries; skip ok/skipped rows
324
+ const cronRowMatch = message.match(/^[0-9a-f]{8}-[0-9a-f]{4}-\S+\s+(\S+(?:\.\.\.)?\S*)\s+.*?\b(error|ok|skipped)\b/i);
325
+ if (cronRowMatch) {
326
+ const [, jobName, status] = cronRowMatch;
327
+ if (status.toLowerCase() !== 'error')
328
+ return null; // ok/skipped → skip
329
+ // Extract human-readable job name (strip trailing ...)
330
+ const name = jobName.replace(/\.{3}$/, '').replace(/-/g, ' ');
331
+ return { ts, type: 'error', raw: `Cron error: ${name}` };
332
+ }
333
+ // Skip cron module noise and JSON blobs (internal state, not user-facing)
334
+ if (module_ === 'cron' || subsystem === 'cron')
335
+ return null;
336
+ if (/^"jobs"\s*:\s*\[|^\{"jobs":/i.test(message))
337
+ return null;
338
+ // Skip noisy infrastructure messages
339
+ if (message.startsWith('- agent:main:') && message.includes(' ago)'))
340
+ return null;
341
+ if (message.startsWith('Agents:') || message.startsWith('Session store'))
342
+ return null;
343
+ if (message.startsWith('Heartbeat interval:') || message.startsWith('WhatsApp:') || message.startsWith('LINE:'))
344
+ return null;
345
+ if (message.startsWith('Web Channel:') || message.startsWith('Run "openclaw'))
346
+ return null;
347
+ if (message.includes('web gateway heartbeat') || module_ === 'web-heartbeat')
348
+ return null;
349
+ // Skip hook registration and session setup noise
350
+ if (/\bRegistered hook\b/i.test(message))
351
+ return null;
352
+ if (/\bSession (store|restored|loaded)\b/i.test(message))
353
+ return null;
354
+ // Skip diagnostic noise, but keep errors
355
+ if (subsystem === 'diagnostic' && !/\b(error|fail|timed?\s*out)\b/i.test(message))
356
+ return null;
357
+ // Skip transient/retriable errors that agents handle internally
358
+ if (/\b(web_fetch|http_request|fetch)\b/i.test(message) &&
359
+ /\b(timed?\s*out|ECONNREFUSED|ECONNRESET|ETIMEDOUT|retry|retrying)\b/i.test(message)) {
360
+ return null;
361
+ }
362
+ // Skip web_fetch/browser tool failures (404, generic fetch, tab errors) — agents handle internally
363
+ if (/\bweb_fetch failed\b/i.test(message) && /\b(404|403)\b/.test(message)) {
364
+ return null;
365
+ }
366
+ if (/\bweb_fetch failed:\s*fetch failed\b/i.test(message)) {
367
+ return null;
368
+ }
369
+ if (/\bbrowser failed:\s*tab not found\b/i.test(message)) {
370
+ return null;
371
+ }
372
+ // Skip browser sandbox configuration messages (setting issue, not runtime error)
373
+ if (/\bSandbox browser is unavailable\b/i.test(message)) {
374
+ return null;
375
+ }
376
+ // Skip tool errors that agents retry internally (edit mismatch, EISDIR, ENOENT on memory)
377
+ if (/\bedit failed:\s*Could not find the exact text\b/i.test(message)) {
378
+ return null;
379
+ }
380
+ if (/\bread failed\b/i.test(message) && /\bEISDIR\b/.test(message)) {
381
+ return null;
382
+ }
383
+ if (/\bread failed\b/i.test(message) && /\bENOENT\b/.test(message) &&
384
+ /workspace\/memory\//i.test(message)) {
385
+ return null;
386
+ }
387
+ // Skip failover cascade noise — the initial timeout/error is already shown
388
+ if (/\bProfile\s+\S+\s+timed out\b/i.test(message) ||
389
+ /\bFailoverError:\s+LLM request timed out\b/i.test(message)) {
390
+ return null;
391
+ }
392
+ // Messaging channel infrastructure detection — only filter when from known infra subsystems/modules
393
+ // (avoid filtering user-facing messages that mention "whatsapp" etc.)
394
+ const isChannelInfra = subsystem === 'channel' || module_ === 'whatsapp' || module_ === 'line'
395
+ || module_ === 'web-channel' || subsystem === 'messaging';
396
+ // Skip transient network_error — only from known infra subsystems (not user-facing tool errors)
397
+ if (/\bnetwork_error\b/i.test(message) &&
398
+ (subsystem === 'gateway/ws' || subsystem === 'diagnostic' || module_ === 'web-heartbeat' || isChannelInfra)) {
399
+ return null;
400
+ }
401
+ if (/\bembedded run agent end\b/i.test(message) && /\berror=500\b/.test(message)) {
402
+ return null;
403
+ }
404
+ if (isChannelInfra) {
405
+ // Auto-reconnect, retry, connection status — all infra noise
406
+ if (/\b(Web connection closed|Retry \d+\/\d+|reconnect|heartbeat)\b/i.test(message)) {
407
+ return null;
408
+ }
409
+ if (/\bWebSocket error\b/i.test(message)) {
410
+ return null;
411
+ }
412
+ }
413
+ // Skip raw JSON blobs — connection status, event payloads, cron state
414
+ if (/^\{"connectionId":/i.test(message)) {
415
+ return null;
416
+ }
417
+ if (/^\{"event":/i.test(message)) {
418
+ return null;
419
+ }
420
+ // Skip delivery retry noise (infrastructure auto-recovery)
421
+ if (/\bDelivery\b.*\bexceeded max retries\b/i.test(message)) {
422
+ return null;
423
+ }
424
+ if (/\bDelivery recovery complete\b/i.test(message)) {
425
+ return null;
426
+ }
427
+ if (/\bRetry failed for delivery\b/i.test(message)) {
428
+ return null;
429
+ }
430
+ // Skip model_fallback_decision JSON blobs (internal routing noise)
431
+ if (/model_fallback_decision/i.test(message)) {
432
+ return null;
433
+ }
434
+ // --- Error patterns FIRST (before model/tool matching to avoid misclassification) ---
435
+ if (obj.level === 'error' || /\b(error|fail(?:ed|ure)?|exception|timed?\s*out|ENOENT|EACCES)\b/i.test(message)) {
436
+ // Extract meaningful error description from structured messages
437
+ const errorRaw = extractReadableMessage(message);
438
+ return { ts, type: 'error', raw: errorRaw };
439
+ }
440
+ // Model/inference patterns: suppressed — adapter generates richer chat_start/chat_end
441
+ // (these broad patterns match too many internal logs: "inference completed", "thinking process", etc.)
442
+ if (/\b(inference|model|llm)\b.*\b(start|request|call|complet|done|response|finish)\b/i.test(message)) {
443
+ return null;
444
+ }
445
+ // Memory patterns in message text
446
+ if (/\b(memory|recall|search)\b/i.test(message)) {
447
+ return { ts, type: 'memory_recall', raw: extractReadableMessage(message) };
448
+ }
449
+ // Tool/exec patterns in message text
450
+ if (/\b(tool|exec|execute|command)\b/i.test(message)) {
451
+ return { ts, type: 'tool_exec', raw: extractReadableMessage(message) };
452
+ }
453
+ // Unrecognized — skip
454
+ return null;
455
+ }
456
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;;GAGG;AACH,SAAS,sBAAsB,CAAC,OAAe;IAC7C,IAAI,OAAO,GAAG,OAAO,CAAC;IAEtB,0DAA0D;IAC1D,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;gBAC5C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;IAC7D,CAAC;IAED,sEAAsE;IACtE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAE/C,wEAAwE;IACxE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,IAAI,YAAY;QAAE,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE5C,wFAAwF;IACxF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpD,IAAI,UAAU,EAAE,CAAC;QACf,yCAAyC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,GAAG,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,6DAA6D;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAChC,+CAA+C;YAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1D,OAAO,GAAG,UAAU,SAAS,EAAE,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,kEAAkE;YAClE,OAAO,GAAG,OAAO;iBACd,OAAO,CAAC,2CAA2C,EAAE,EAAE,CAAC;iBACxD,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;iBACvB,IAAI,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,WAAW;IACX,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAClE,OAAO,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAExC,4DAA4D;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,gEAAgE;YAChE,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACxE,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,qCAAqC;YACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,kDAAkD;IAClD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAE7D,8BAA8B;IAC9B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACpD,sDAAsD;IACtD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;IAE/D,uCAAuC;IACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAE9C,mCAAmC;IACnC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEzC,2CAA2C;IAC3C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IAE1D,mEAAmE;IACnE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAE5C,6CAA6C;IAC7C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAE9C,gCAAgC;IAChC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,IAAI;SACR,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC;SACjC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC;SACvC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,IAAI;SACR,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAAuB;IACtE,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC;SACpC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAE/D,kDAAkD;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC5B,CAAC,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC;SACrD,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CACnD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAE7B,6BAA6B;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACjH,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,CAAS,EAAE,CAAS;IACzC,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAE3B,2BAA2B;IAC3B,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEjD,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,2CAA2C;IAC3C,OAAO,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,GAAG,IAAI,OAAO,IAAI,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAoB,EACpB,aAAuC,EACvC,QAAQ,GAAG,SAAS;IAEpB,IACE,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,KAAK,CAAC,IAAI,KAAK,YAAY;QAC3B,KAAK,CAAC,IAAI,KAAK,OAAO;QACtB,KAAK,CAAC,IAAI,KAAK,eAAe,EAC9B,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,sFAAsF;IACtF,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAErE,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,iBAAiB;YAAE,MAAM;QAC/C,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAAE,SAAS;QAEpC,+EAA+E;QAC/E,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAgBD,MAAM,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,OAAiC;IAEjC,0BAA0B;IAC1B,IAAI,KAAK,CAAC,GAAG;QAAE,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACnF,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAE9E,2DAA2D;IAC3D,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK;YAAE,MAAM;QACnC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;YAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9E,CAAC;IAED,wCAAwC;IACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,IAAI,oBAAwC,CAAC;QAC7C,oEAAoE;QACpE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY;oBAAE,SAAS;gBACvC,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,SAAS;oBAAE,MAAM;gBACxC,IAAI,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpD,oBAAoB,GAAG,CAAC,CAAC;oBACzB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,GAAG,GAAG,IAA+B,CAAC;IAE5C,0CAA0C;IAC1C,mHAAmH;IACnH,MAAM,OAAO,GAAI,GAAG,CAAC,OAA8B,IAAK,GAAG,CAAC,GAA0B,IAAI,EAAE,CAAC;IAC7F,MAAM,SAAS,GAAG,GAAG,CAAC,SAA+B,CAAC;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,MAA4B,CAAC;IAEjD,oDAAoD;IACpD,IAAI,EAAU,CAAC;IACf,MAAM,OAAO,GAAG,GAAG,CAAC,IAA0B,CAAC;IAC/C,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,EAAE,GAAI,GAAG,CAAC,EAAa,IAAK,GAAG,CAAC,SAAoB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;IAED,yDAAyD;IACzD,MAAM,MAAM,GAAG,GAAG,CAAC,MAA4B,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAA2B,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,IAA0B,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,SAA+B,CAAC;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAA4B,CAAC;IAEhD,kEAAkE;IAClE,mFAAmF;IACnF,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,UAAU,CAAC,EAAE,CAAC;QACjI,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sCAAsC;IACtC,IAAI,SAAS,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzE,MAAM,KAAK,GAAI,GAAG,CAAC,KAAgB,IAAI,OAAO,IAAI,eAAe,CAAC;QAClE,OAAO;YACL,EAAE,EAAE,IAAI,EAAE,eAAe;YACzB,GAAG,EAAE,WAAW,KAAK,EAAE;YACvB,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,IAAI,MAAM,IAAI,MAAM,CAAC;QAC1C,MAAM,UAAU,GAAI,GAAG,CAAC,MAAiB,IAAK,GAAG,CAAC,OAAkB,IAAI,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,OAAO;YACL,EAAE,EAAE,IAAI,EAAE,WAAW;YACrB,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO;YACnE,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACzH,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,8DAA8D;IAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,qFAAqF;IACrF,yFAAyF;IACzF,IAAI,SAAS,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAE5C,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACtH,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC;QACzC,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,CAAC,oBAAoB;QACvE,uDAAuD;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,IAAI,EAAE,EAAE,CAAC;IAC3D,CAAC;IAED,0EAA0E;IAC1E,IAAI,OAAO,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC5D,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9D,qCAAqC;IACrC,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IACtF,IAAI,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7H,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3F,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,OAAO,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IAC1F,iDAAiD;IACjD,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,yCAAyC;IACzC,IAAI,SAAS,KAAK,YAAY,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/F,gEAAgE;IAChE,IAAI,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC;QACnD,sEAAsE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mGAAmG;IACnG,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,iFAAiF;IACjF,IAAI,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0FAA0F;IAC1F,IAAI,mDAAmD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9D,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,IAAI,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C,6CAA6C,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oGAAoG;IACpG,sEAAsE;IACtE,MAAM,cAAc,GAAG,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,MAAM;WACzF,OAAO,KAAK,aAAa,IAAI,SAAS,KAAK,WAAW,CAAC;IAE5D,gGAAgG;IAChG,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,CAAC,SAAS,KAAK,YAAY,IAAI,SAAS,KAAK,YAAY,IAAI,OAAO,KAAK,eAAe,IAAI,cAAc,CAAC,EAAE,CAAC;QAChH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,6DAA6D;QAC7D,IAAI,iEAAiE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACpF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,sEAAsE;IACtE,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2DAA2D;IAC3D,IAAI,yCAAyC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mEAAmE;IACnE,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uFAAuF;IACvF,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,mEAAmE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/G,gEAAgE;QAChE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,sFAAsF;IACtF,uGAAuG;IACvG,IAAI,mFAAmF,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtG,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,qCAAqC;IACrC,IAAI,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,sBAAsB;IACtB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -7,6 +7,10 @@ export declare const SOX_CANDIDATES: string[];
7
7
  export declare const WHISPER_SERVER_CANDIDATES: string[];
8
8
  /** Whisper-server discovery info file path */
9
9
  export declare const WHISPER_SERVER_INFO_FILE: string;
10
+ /** Directory for custom .ppn wake word model files */
11
+ export declare const WAKE_WORD_MODEL_DIR: string;
12
+ /** Picovoice access key file */
13
+ export declare const PICOVOICE_ACCESS_KEY_FILE: string;
10
14
  /** OpenClaw binary candidates */
11
15
  export declare const OPENCLAW_CANDIDATES: string[];
12
16
  /** Resolve `openclaw` binary: try known candidate paths, fallback to bare name on PATH. */
@@ -1 +1 @@
1
- {"version":3,"file":"voice-paths.d.ts","sourceRoot":"","sources":["../src/voice-paths.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,UAK7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAI7B,CAAC;AACF,eAAO,MAAM,oBAAoB,UAGhC,CAAC;AAGF,eAAO,MAAM,kBAAkB,UAG9B,CAAC;AACF,eAAO,MAAM,cAAc,UAG1B,CAAC;AACF,eAAO,MAAM,cAAc,UAG1B,CAAC;AACF,eAAO,MAAM,yBAAyB,UAGrC,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,QAAuD,CAAC;AAE7F,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAU/B,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAatC"}
1
+ {"version":3,"file":"voice-paths.d.ts","sourceRoot":"","sources":["../src/voice-paths.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,UAK7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAI7B,CAAC;AACF,eAAO,MAAM,oBAAoB,UAGhC,CAAC;AAGF,eAAO,MAAM,kBAAkB,UAG9B,CAAC;AACF,eAAO,MAAM,cAAc,UAG1B,CAAC;AACF,eAAO,MAAM,cAAc,UAG1B,CAAC;AACF,eAAO,MAAM,yBAAyB,UAGrC,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,QAAuD,CAAC;AAI7F,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,QAA6C,CAAC;AAE9E,gCAAgC;AAChC,eAAO,MAAM,yBAAyB,QAAwD,CAAC;AAE/F,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAU/B,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAatC"}
@@ -39,6 +39,11 @@ export const WHISPER_SERVER_CANDIDATES = [
39
39
  ];
40
40
  /** Whisper-server discovery info file path */
41
41
  export const WHISPER_SERVER_INFO_FILE = join(homedir(), '.agentdeck', 'whisper-server.json');
42
+ // ===== Porcupine Wake Word =====
43
+ /** Directory for custom .ppn wake word model files */
44
+ export const WAKE_WORD_MODEL_DIR = join(homedir(), '.agentdeck', 'wake-word');
45
+ /** Picovoice access key file */
46
+ export const PICOVOICE_ACCESS_KEY_FILE = join(homedir(), '.agentdeck', 'picovoice-access-key');
42
47
  /** OpenClaw binary candidates */
43
48
  export const OPENCLAW_CANDIDATES = [
44
49
  '/opt/homebrew/bin/openclaw',
@@ -1 +1 @@
1
- {"version":3,"file":"voice-paths.js","sourceRoot":"","sources":["../src/voice-paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC;IAC3C,iCAAiC,EAAI,iBAAiB;IACtD,8BAA8B,EAAO,eAAe;IACpD,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC;CAC1B,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,yBAAyB;IACzB,gBAAgB;IAChB,eAAe;CAChB,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,eAAe;IACf,gBAAgB;CACjB,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,+BAA+B;IAC/B,4BAA4B;CAC7B,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,oBAAoB;CACrB,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,oBAAoB;CACrB,CAAC;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,kCAAkC;IAClC,+BAA+B;CAChC,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAAC;AAE7F,iCAAiC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAyB,wBAAwB;IAC/F,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,gBAAgB;IACzF,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,2FAA2F;AAC3F,MAAM,UAAU,kBAAkB;IAChC,KAAK,MAAM,SAAS,IAAI,mBAAmB,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,gBAAgB;QAChB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAG,wBAAwB;QAC7D,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC;KAC5B,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,eAAe,CAAC;IACrD,OAAO,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"voice-paths.js","sourceRoot":"","sources":["../src/voice-paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC;IAC3C,iCAAiC,EAAI,iBAAiB;IACtD,8BAA8B,EAAO,eAAe;IACpD,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC;CAC1B,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,yBAAyB;IACzB,gBAAgB;IAChB,eAAe;CAChB,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,eAAe;IACf,gBAAgB;CACjB,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,+BAA+B;IAC/B,4BAA4B;CAC7B,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,oBAAoB;CACrB,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,oBAAoB;CACrB,CAAC;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,kCAAkC;IAClC,+BAA+B;CAChC,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAAC;AAE7F,kCAAkC;AAElC,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAE9E,gCAAgC;AAChC,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAE/F,iCAAiC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAyB,wBAAwB;IAC/F,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,gBAAgB;IACzF,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,2FAA2F;AAC3F,MAAM,UAAU,kBAAkB;IAChC,KAAK,MAAM,SAAS,IAAI,mBAAmB,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,gBAAgB;QAChB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAG,wBAAwB;QAC7D,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC;KAC5B,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,eAAe,CAAC;IACrD,OAAO,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentdeck/shared",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -9,7 +9,8 @@
9
9
  "directory": "shared"
10
10
  },
11
11
  "files": [
12
- "dist"
12
+ "dist",
13
+ "!dist/__tests__"
13
14
  ],
14
15
  "main": "./dist/index.js",
15
16
  "types": "./dist/index.d.ts",
@@ -25,10 +26,15 @@
25
26
  "./states": {
26
27
  "types": "./dist/states.d.ts",
27
28
  "import": "./dist/states.js"
29
+ },
30
+ "./svg-renderers": {
31
+ "types": "./dist/svg-renderers/index.d.ts",
32
+ "import": "./dist/svg-renderers/index.js"
28
33
  }
29
34
  },
30
35
  "devDependencies": {
31
- "typescript": "^5.5.0"
36
+ "@types/node": "^25.6.0",
37
+ "typescript": "^6.0.3"
32
38
  },
33
39
  "scripts": {
34
40
  "build": "tsc",