@ai-setting/roy-plugin-task-show 0.3.0 → 0.5.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/dist/plugin.js CHANGED
@@ -4,18 +4,39 @@
4
4
  * Lifecycle (mirrors `ReminderPlugin` / `TaskTagPlugin`):
5
5
  * 1. Constructor accepts a config (defaults merged in).
6
6
  * 2. `init(env)` registers hooks on the global hook manager:
7
- * - `tool:after.execute` → record each tool call
8
- * - `task:after.update` → freeze session + emit URL
7
+ * - `tool:before.execute` → record per-call start timestamp
8
+ * - `tool:after.execute` → record each tool call
9
+ * - `task:before.create` → open a new TaskSession
10
+ * - `task:after.create` → mark session ready
11
+ * - `task:after.update` → freeze + broadcast status update
12
+ * - `task:after.complete` → freeze + broadcast terminal status
9
13
  * 3. `dispose()` stops the HTTP service & releases listeners.
10
14
  *
11
15
  * The plugin is intentionally lean: all the heavy lifting lives in
12
- * `collector.ts`, `server.ts`, and `url-injector.ts`. That keeps this file
16
+ * `collector.ts`, `server.ts`, and `event-bus.ts`. That keeps this file
13
17
  * readable and makes the surface area easy to test.
18
+ *
19
+ * ## Visualization reach-out (v0.5.0+)
20
+ *
21
+ * v0.5.0 replaces the previous `env.notify({type:"visualization_ready"})`
22
+ * mechanism with a Server-Sent Events stream served by the local HTTP
23
+ * service. The frontend subscribes to `GET /api/events` and receives a
24
+ * real-time push every time:
25
+ *
26
+ * - a new task is created (`task.created`)
27
+ * - a tool call is recorded (`tool.recorded`)
28
+ * - a task status changes (`task.updated`)
29
+ * - a task transitions to terminal status (`task.completed`)
30
+ *
31
+ * This eliminates the host-side NotificationChannel plumbing and works
32
+ * with any roy-agent host — including ones that pre-date the
33
+ * NotificationChannel abstraction.
14
34
  */
15
35
  import { DEFAULT_CONFIG } from "./types.js";
16
36
  import { ToolCallCollector } from "./collector.js";
17
37
  import { TaskShowServer } from "./server.js";
18
- import { buildVisualizationUrl, injectVisualizationUrl, } from "./url-injector.js";
38
+ import { EventBus } from "./event-bus.js";
39
+ import { buildVisualizationUrl } from "./url-injector.js";
19
40
  // ============================================================================
20
41
  // Logger
21
42
  // ============================================================================
@@ -40,15 +61,14 @@ function error(msg) {
40
61
  */
41
62
  export class TaskShowPlugin {
42
63
  name = "roy-plugin-task-show";
43
- version = "0.1.0";
44
- description = "Visually trace a task's tool-call chain on a local HTTP service and inject the URL into the last tool result.";
64
+ version = "0.5.0";
65
+ description = "Visually trace a task's tool-call chain on a local HTTP service. v0.5.0+ uses Server-Sent Events for real-time page updates (no host NotificationChannel required).";
45
66
  cfg;
46
67
  collector;
47
68
  server;
69
+ eventBus;
48
70
  env = null;
49
71
  disposed = false;
50
- /** Last successful `tool:after.execute` result, used to inject the URL on task completion. */
51
- lastResultByTask = new Map();
52
72
  /**
53
73
  * `tool:before.execute` → `tool:after.execute` start-time buffer.
54
74
  * Keyed by a fingerprint derived from (taskId, toolName, argsHash) so
@@ -66,17 +86,19 @@ export class TaskShowPlugin {
66
86
  * (which can happen on newer hosts where both hook points fire on
67
87
  * completion). Cleared on dispose().
68
88
  */
69
- injectedTaskIds = new Set();
70
- /** cached list of hook points we registered, so dispose() can be defensive even if the env lacks unregister. */
89
+ finalizedTaskIds = new Set();
90
+ /** Cached list of hook points we registered, so dispose() can be defensive even if the env lacks unregister. */
71
91
  registered = [];
72
92
  constructor(config) {
73
93
  this.cfg = { ...DEFAULT_CONFIG, ...(config ?? {}) };
74
94
  this.collector = new ToolCallCollector(this.cfg, {
75
95
  onChange: () => info("collector snapshot changed"),
76
96
  });
97
+ this.eventBus = new EventBus();
77
98
  this.server = new TaskShowServer({
78
99
  cfg: this.cfg,
79
100
  collector: this.collector,
101
+ eventBus: this.eventBus,
80
102
  publicDir: this.cfg.publicDir,
81
103
  // Pass metaUrl best-effort — we want to resolve `public/` relative to
82
104
  // the dist directory in production.
@@ -117,6 +139,12 @@ export class TaskShowPlugin {
117
139
  if (this.disposed)
118
140
  return;
119
141
  this.disposed = true;
142
+ try {
143
+ this.eventBus.closeAll();
144
+ }
145
+ catch (err) {
146
+ warn(`eventBus.closeAll failed: ${err}`);
147
+ }
120
148
  try {
121
149
  await this.server.stop();
122
150
  }
@@ -124,8 +152,7 @@ export class TaskShowPlugin {
124
152
  warn(`server.stop failed: ${err}`);
125
153
  }
126
154
  this.collector.clear();
127
- this.lastResultByTask.clear();
128
- this.injectedTaskIds.clear();
155
+ this.finalizedTaskIds.clear();
129
156
  this.pendingStarts.clear();
130
157
  this.env = null;
131
158
  this.registered = [];
@@ -137,9 +164,15 @@ export class TaskShowPlugin {
137
164
  getCollector() {
138
165
  return this.collector;
139
166
  }
167
+ getEventBus() {
168
+ return this.eventBus;
169
+ }
140
170
  getConfig() {
141
171
  return { ...this.cfg };
142
172
  }
173
+ getVisualizationUrl(taskId) {
174
+ return buildVisualizationUrl(this.cfg, taskId);
175
+ }
143
176
  // ---------------------------------------------------------------------
144
177
  // Hook handlers (exposed for tests)
145
178
  // ---------------------------------------------------------------------
@@ -216,31 +249,122 @@ export class TaskShowPlugin {
216
249
  metadata: result?.metadata,
217
250
  ctx,
218
251
  });
219
- // Stash the result so we can inject the URL on completion.
220
- if (result && typeof result === "object") {
221
- this.lastResultByTask.set(taskId, result);
222
- }
223
252
  // Consume + drop the pending start entry for this fingerprint so the
224
253
  // buffer doesn't grow unbounded.
225
254
  const fp = this.fingerprintToolCall(taskId, toolName, args);
226
255
  this.pendingStarts.delete(fp);
256
+ // Broadcast a `tool.recorded` event so SSE subscribers can update
257
+ // their timeline / progress bar in real time.
258
+ const session = this.collector.getSession(taskId);
259
+ if (session) {
260
+ const lastCall = session.toolCalls[session.toolCalls.length - 1];
261
+ if (lastCall) {
262
+ this.broadcast({
263
+ type: "tool.recorded",
264
+ taskId,
265
+ timestamp: Date.now(),
266
+ pluginVersion: this.version,
267
+ data: { session, toolCall: lastCall },
268
+ });
269
+ }
270
+ }
227
271
  }
228
272
  /**
229
- * Public function exposed for tests; mirrors the `task:after.update`
230
- * payload.
273
+ * Public function exposed for tests; mirrors the `task:before.create`
274
+ * payload. We use it to mint a fresh TaskSession before any tool call
275
+ * is recorded (gives us a stable taskId/title even if no tool fires).
231
276
  */
277
+ async onTaskBeforeCreate(ctx) {
278
+ if (this.disposed)
279
+ return;
280
+ if (!ctx)
281
+ return;
282
+ const data = (ctx.data ?? ctx);
283
+ const taskId = data?.task?.id ?? data?.taskId ?? data?.id;
284
+ if (typeof taskId !== "number")
285
+ return;
286
+ const title = data?.task?.title ?? data?.title ?? "";
287
+ // Open / refresh the session under "running" status. If the session
288
+ // already exists (re-create on retry), we keep its toolCalls.
289
+ let session = this.collector.getSession(taskId);
290
+ if (!session) {
291
+ session = {
292
+ taskId,
293
+ title,
294
+ startedAt: Date.now(),
295
+ status: "running",
296
+ toolCalls: [],
297
+ visualizationUrl: buildVisualizationUrl(this.cfg, taskId),
298
+ };
299
+ this.collector.upsertSession(session);
300
+ }
301
+ else if (title && !session.title) {
302
+ this.collector.setTaskTitle(taskId, title);
303
+ }
304
+ this.broadcast({
305
+ type: "task.created",
306
+ taskId,
307
+ timestamp: Date.now(),
308
+ pluginVersion: this.version,
309
+ data: { session: this.collector.getSession(taskId) ?? session },
310
+ });
311
+ }
312
+ /**
313
+ * Public function exposed for tests; mirrors the `task:after.create`
314
+ * payload. Right now this is mostly a no-op (session was already opened
315
+ * in `onTaskBeforeCreate`); the hook is wired so the frontend can
316
+ * distinguish "task opened" from "task started executing".
317
+ *
318
+ * Hosts that only emit `task:after.create` (no before) are also
319
+ * supported — in that case the session is opened here.
320
+ */
321
+ async onTaskAfterCreate(ctx) {
322
+ if (this.disposed)
323
+ return;
324
+ if (!ctx)
325
+ return;
326
+ const data = (ctx.data ?? ctx);
327
+ const taskId = data?.task?.id ?? data?.taskId ?? data?.id;
328
+ if (typeof taskId !== "number")
329
+ return;
330
+ const title = data?.task?.title ?? data?.title ?? "";
331
+ let session = this.collector.getSession(taskId);
332
+ if (!session) {
333
+ session = {
334
+ taskId,
335
+ title,
336
+ startedAt: Date.now(),
337
+ status: "running",
338
+ toolCalls: [],
339
+ visualizationUrl: buildVisualizationUrl(this.cfg, taskId),
340
+ };
341
+ this.collector.upsertSession(session);
342
+ this.broadcast({
343
+ type: "task.created",
344
+ taskId,
345
+ timestamp: Date.now(),
346
+ pluginVersion: this.version,
347
+ data: { session },
348
+ });
349
+ }
350
+ else if (title) {
351
+ this.collector.setTaskTitle(taskId, title);
352
+ }
353
+ }
232
354
  /**
233
355
  * Public function exposed for tests; mirrors BOTH the preferred
234
- * `task:after.complete` payload (added in roy-agent 2026-07-10) AND
235
- * the legacy `task:after.update` payload. Both hook points reach this
236
- * handler; an internal dedup set guarantees at most one URL injection
237
- * per task.
356
+ * `task:after.complete` payload AND the legacy `task:after.update`
357
+ * payload.
358
+ *
359
+ * - `task:after.complete` (preferred, terminal):
360
+ * - `data.terminalStatus` is explicit; no filtering needed.
361
+ * - `task:after.update` (legacy):
362
+ * - `data.task.status` carries the new status. We treat it as a
363
+ * generic status update — terminal vs non-terminal decides which
364
+ * event type we broadcast.
238
365
  *
239
- * - Preferred (roy-agent 2026-07-10+): `task:after.complete`
240
- * - `data.terminalStatus` is explicit; no status filtering needed.
241
- * - Legacy fallback (pre-2026-07-10 roy-agent): `task:after.update`
242
- * - only `data.task` is provided; we filter for terminal statuses
243
- * the same way the previous implementation did.
366
+ * An internal dedup set guarantees that when both hook points fire
367
+ * (newer hosts), we broadcast the terminal event exactly once.
244
368
  */
245
369
  async onTaskAfterComplete(ctx) {
246
370
  if (this.disposed)
@@ -260,44 +384,56 @@ export class TaskShowPlugin {
260
384
  const terminalStatus = data?.terminalStatus ?? data?.task?.status ?? data?.status;
261
385
  if (!terminalStatus)
262
386
  return;
263
- // Non-terminal update (e.g. status="active", progress=50): finalize the
264
- // session under the new status, but skip URL injection.
387
+ const previousStatus = this.collector.getSession(taskId)?.status;
388
+ const title = data?.task?.title ?? data?.title;
389
+ // Non-terminal update (e.g. status="active", progress=50, "paused"):
390
+ // update the session but do NOT broadcast terminal completion.
265
391
  if (!isTerminalStatus(terminalStatus)) {
266
392
  this.collector.finalizeOnTaskUpdate({
267
393
  taskId,
268
394
  newStatus: terminalStatus,
269
- title: data?.task?.title ?? data?.title,
395
+ title,
396
+ timestamp: Date.now(),
397
+ });
398
+ // Clear dedup so a later terminal transition can fire.
399
+ this.finalizedTaskIds.delete(taskId);
400
+ this.broadcast({
401
+ type: "task.updated",
402
+ taskId,
270
403
  timestamp: Date.now(),
404
+ pluginVersion: this.version,
405
+ data: {
406
+ session: this.collector.getSession(taskId),
407
+ newStatus: terminalStatus,
408
+ ...(previousStatus ? { previousStatus } : {}),
409
+ },
271
410
  });
272
411
  return;
273
412
  }
413
+ // Terminal status — finalize the session.
274
414
  // Dedup: the same task may reach this handler from BOTH
275
415
  // task:after.complete AND task:after.update when running on a newer
276
- // host (both hooks fire on completion). We inject exactly once.
277
- if (this.injectedTaskIds.has(taskId))
416
+ // host (both hooks fire on completion). We broadcast the terminal
417
+ // event exactly once.
418
+ if (this.finalizedTaskIds.has(taskId))
278
419
  return;
279
- this.injectedTaskIds.add(taskId);
280
- // Finalize the session under the terminal status.
420
+ this.finalizedTaskIds.add(taskId);
281
421
  this.collector.finalizeOnTaskUpdate({
282
422
  taskId,
283
423
  newStatus: terminalStatus,
284
- title: data?.task?.title ?? data?.title,
424
+ title,
285
425
  timestamp: Date.now(),
286
426
  });
287
- const lastResult = this.lastResultByTask.get(taskId);
288
- if (!lastResult) {
289
- // Some tasks may complete without any tool call (e.g. pure response).
290
- info(`task ${taskId} completed without any recorded tool call — skipping URL injection`);
291
- return;
292
- }
293
- const outcome = injectVisualizationUrl({
294
- ctx: { result: lastResult },
295
- cfg: this.cfg,
427
+ this.broadcast({
428
+ type: "task.completed",
296
429
  taskId,
430
+ timestamp: Date.now(),
431
+ pluginVersion: this.version,
432
+ data: {
433
+ session: this.collector.getSession(taskId),
434
+ terminalStatus,
435
+ },
297
436
  });
298
- if (outcome.mutated) {
299
- info(`injected visualization URL ${outcome.url} into last tool result for task ${taskId}`);
300
- }
301
437
  }
302
438
  /**
303
439
  * @deprecated Use {@link onTaskAfterComplete}. Kept as a thin alias for
@@ -307,26 +443,23 @@ export class TaskShowPlugin {
307
443
  async onTaskAfterUpdate(ctx) {
308
444
  return this.onTaskAfterComplete(ctx);
309
445
  }
446
+ // ---------------------------------------------------------------------
447
+ // Event broadcasting
448
+ // ---------------------------------------------------------------------
310
449
  /**
311
- * Manual injection hook useful when a custom caller has a known task
312
- * id + ToolResult at hand (e.g. tests).
313
- */
314
- injectFor(taskId, result) {
315
- if (!result || typeof result.output !== "string")
316
- return false;
317
- const out = injectVisualizationUrl({
318
- ctx: { result },
319
- cfg: this.cfg,
320
- taskId,
321
- });
322
- return out.mutated;
323
- }
324
- /**
325
- * Compute the URL the page would be served at. Helpful in tests where
326
- * `init()` was skipped.
450
+ * Construct a TaskEvent and push it to every connected SSE client.
451
+ *
452
+ * The broadcast is fire-and-forget; SSE write failures are absorbed by
453
+ * the bus itself, so this method never throws. Centralizing the event
454
+ * construction here keeps every hook handler symmetric.
327
455
  */
328
- getVisualizationUrl(taskId) {
329
- return buildVisualizationUrl(this.cfg, taskId);
456
+ broadcast(event) {
457
+ try {
458
+ this.eventBus.broadcast(event);
459
+ }
460
+ catch (err) {
461
+ warn(`eventBus.broadcast failed: ${err}`);
462
+ }
330
463
  }
331
464
  // ---------------------------------------------------------------------
332
465
  // Internals
@@ -356,10 +489,29 @@ export class TaskShowPlugin {
356
489
  handler: async (ctx) => this.onToolAfterExecute(ctx),
357
490
  });
358
491
  this.registered.push({ point: "tool:after.execute", name: `${this.name}:tool-after` });
359
- // Preferred hook point (added in roy-agent 2026-07-10).
492
+ // task:before.create open a TaskSession before the task runs so
493
+ // we have a stable taskId/title even if no tool fires.
494
+ env.registerHook({
495
+ point: "task:before.create",
496
+ priority: 55,
497
+ name: `${this.name}:task-before-create`,
498
+ handler: async (ctx) => this.onTaskBeforeCreate(ctx),
499
+ });
500
+ this.registered.push({ point: "task:before.create", name: `${this.name}:task-before-create` });
501
+ // task:after.create — mark session ready; this hook is the
502
+ // "create" complement of the "complete" hook and is the entry
503
+ // point for hosts that don't fire `task:before.create`.
504
+ env.registerHook({
505
+ point: "task:after.create",
506
+ priority: 55,
507
+ name: `${this.name}:task-after-create`,
508
+ handler: async (ctx) => this.onTaskAfterCreate(ctx),
509
+ });
510
+ this.registered.push({ point: "task:after.create", name: `${this.name}:task-after-create` });
511
+ // Preferred hook point for terminal status (added in roy-agent 2026-07-10).
360
512
  // The handler dedupes internally, so even if the host also fires
361
513
  // AFTER_UPDATE on completion (which it does on the new code path),
362
- // the URL is injected exactly once.
514
+ // the broadcast happens exactly once.
363
515
  env.registerHook({
364
516
  point: "task:after.complete",
365
517
  priority: 60,
@@ -367,9 +519,9 @@ export class TaskShowPlugin {
367
519
  handler: async (ctx) => this.onTaskAfterComplete(ctx),
368
520
  });
369
521
  this.registered.push({ point: "task:after.complete", name: `${this.name}:task-complete` });
370
- // Legacy fallback for roy-agent hosts predating AFTER_COMPLETE.
371
- // Old hosts only expose AFTER_UPDATE; the handler will filter
372
- // for terminal status internally.
522
+ // Any task status update (used for non-terminal transitions like
523
+ // running paused running). For terminal transitions we dedupe
524
+ // against AFTER_COMPLETE above.
373
525
  env.registerHook({
374
526
  point: "task:after.update",
375
527
  priority: 60,
@@ -401,30 +553,22 @@ export class TaskShowPlugin {
401
553
  warn("@ai-setting/roy-agent-core does not export globalHookManager — skipping");
402
554
  return;
403
555
  }
404
- globalHookManager.register("tool:before.execute", {
405
- name: `${this.name}:tool-before`,
406
- priority: 40,
407
- execute: async (ctx) => this.onToolBeforeExecute(ctx),
408
- });
409
- this.registered.push({ point: "tool:before.execute", name: `${this.name}:tool-before` });
410
- globalHookManager.register("tool:after.execute", {
411
- name: `${this.name}:tool-after`,
412
- priority: 50,
413
- execute: async (ctx) => this.onToolAfterExecute(ctx),
414
- });
415
- this.registered.push({ point: "tool:after.execute", name: `${this.name}:tool-after` });
416
- globalHookManager.register("task:after.complete", {
417
- name: `${this.name}:task-complete`,
418
- priority: 60,
419
- execute: async (ctx) => this.onTaskAfterComplete(ctx),
420
- });
421
- this.registered.push({ point: "task:after.complete", name: `${this.name}:task-complete` });
422
- globalHookManager.register("task:after.update", {
423
- name: `${this.name}:task-after`,
424
- priority: 60,
425
- execute: async (ctx) => this.onTaskAfterComplete(ctx),
426
- });
427
- this.registered.push({ point: "task:after.update", name: `${this.name}:task-after` });
556
+ const points = [
557
+ { point: "tool:before.execute", name: `${this.name}:tool-before`, priority: 40, fn: (ctx) => this.onToolBeforeExecute(ctx) },
558
+ { point: "tool:after.execute", name: `${this.name}:tool-after`, priority: 50, fn: (ctx) => this.onToolAfterExecute(ctx) },
559
+ { point: "task:before.create", name: `${this.name}:task-before-create`, priority: 55, fn: (ctx) => this.onTaskBeforeCreate(ctx) },
560
+ { point: "task:after.create", name: `${this.name}:task-after-create`, priority: 55, fn: (ctx) => this.onTaskAfterCreate(ctx) },
561
+ { point: "task:after.complete", name: `${this.name}:task-complete`, priority: 60, fn: (ctx) => this.onTaskAfterComplete(ctx) },
562
+ { point: "task:after.update", name: `${this.name}:task-after`, priority: 60, fn: (ctx) => this.onTaskAfterComplete(ctx) },
563
+ ];
564
+ for (const p of points) {
565
+ globalHookManager.register(p.point, {
566
+ name: p.name,
567
+ priority: p.priority,
568
+ execute: async (ctx) => p.fn(ctx),
569
+ });
570
+ this.registered.push({ point: p.point, name: p.name });
571
+ }
428
572
  }
429
573
  // ---------------------------------------------------------------------
430
574
  // Internal helpers
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAWH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,GAAG,GAAG,sBAAsB,CAAC;AAEnC,SAAS,IAAI,CAAC,GAAW;IACvB,IAAI,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC;QACjC,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AACD,SAAS,IAAI,CAAC,GAAW;IACvB,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;AAClC,CAAC;AACD,SAAS,KAAK,CAAC,GAAW;IACxB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;AACnC,CAAC;AAkCD;;;GAGG;AACH,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,sBAAsB,CAAC;IAC9B,OAAO,GAAG,OAAO,CAAC;IAClB,WAAW,GAClB,qKAAqK,CAAC;IAEvJ,GAAG,CAAiB;IACpB,SAAS,CAAoB;IAC7B,MAAM,CAAiB;IACvB,QAAQ,CAAW;IAC5B,GAAG,GAAyB,IAAI,CAAC;IACjC,QAAQ,GAAG,KAAK,CAAC;IAEzB;;;;;;;;;OASG;IACK,aAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEvD;;;;;OAKG;IACK,gBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;IAClD,gHAAgH;IACxG,UAAU,GAAsC,EAAE,CAAC;IAE3D,YAAY,MAAgC;QAC1C,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/C,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC;SACnD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;YAC7B,sEAAsE;YACtE,oCAAoC;YACpC,OAAO,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YACzE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,GAAkB;QAC3B,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,mBAAmB,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,uEAAuE;QACvE,iBAAiB;QACjB,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC7C,IAAI,CAAC,mBAAmB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;gBAC7C,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,mBAAmB,CAAC,MAAc;QAChC,OAAO,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,wEAAwE;IACxE,oCAAoC;IACpC,wEAAwE;IAExE;;;;;;;;OAQG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAQ,EAAE,QAAkC;QACpE,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,QAAQ,GAAW,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,QAAQ,IAAI,SAAS,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,GAAQ,EAAE,QAAkC;QACnE,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC;QAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;QACpD,MAAM,QAAQ,GAAW,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;QACjE,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;QAC5B,6BAA6B;QAC7B,wEAAwE;QACxE,yCAAyC;QACzC,wEAAwE;QACxE,uCAAuC;QACvC,iEAAiE;QACjE,qDAAqD;QACrD,yDAAyD;QACzD,IAAI,UAAkB,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACvC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAC9B,CAAC;aAAM,IAAI,OAAO,QAAQ,EAAE,UAAU,KAAK,QAAQ,EAAE,CAAC;YACpD,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GACX,QAAQ,EAAE,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC/E,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;YAC3C,QAAQ;YACR,IAAI;YACJ,OAAO;YACP,aAAa;YACb,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACpD,UAAU;YACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,QAAQ,EAAE,MAAM,EAAE,QAAQ;YAC1B,GAAG;SACJ,CAAC,CAAC;QAEH,qEAAqE;QACrE,iCAAiC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE9B,kEAAkE;QAClE,8CAA8C;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjE,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAwB;oBACpC,IAAI,EAAE,eAAe;oBACrB,MAAM;oBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,aAAa,EAAE,IAAI,CAAC,OAAO;oBAC3B,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAA0B,EAAE;iBACxD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,GAAQ;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAQ,CAAC;QACtC,MAAM,MAAM,GAAuB,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9E,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO;QACvC,MAAM,KAAK,GAAW,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAE7D,oEAAoE;QACpE,8DAA8D;QAC9D,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG;gBACR,MAAM;gBACN,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,EAAE;gBACb,gBAAgB,EAAE,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;aAC1D,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,SAAS,CAAuB;YACnC,IAAI,EAAE,cAAc;YACpB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,aAAa,EAAE,IAAI,CAAC,OAAO;YAC3B,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,EAAE;SAChE,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,iBAAiB,CAAC,GAAQ;QAC9B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAQ,CAAC;QACtC,MAAM,MAAM,GAAuB,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9E,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO;QACvC,MAAM,KAAK,GAAW,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAE7D,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG;gBACR,MAAM;gBACN,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,EAAE;gBACb,gBAAgB,EAAE,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;aAC1D,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,SAAS,CAAuB;gBACnC,IAAI,EAAE,cAAc;gBACpB,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,aAAa,EAAE,IAAI,CAAC,OAAO;gBAC3B,IAAI,EAAE,EAAE,OAAO,EAAE;aAClB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAQ;QAChC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAQ,CAAC;QAEtC,kCAAkC;QAClC,MAAM,MAAM,GAAuB,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9E,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO;QAEvC,+BAA+B;QAC/B,8DAA8D;QAC9D,iEAAiE;QACjE,MAAM,cAAc,GAClB,IAAI,EAAE,cAAc,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,CAAC;QAE7D,IAAI,CAAC,cAAc;YAAE,OAAO;QAE5B,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,CAAC;QAE/C,qEAAqE;QACrE,+DAA+D;QAC/D,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;gBAClC,MAAM;gBACN,SAAS,EAAE,cAAc;gBACzB,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YACH,uDAAuD;YACvD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc;gBACpB,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,aAAa,EAAE,IAAI,CAAC,OAAO;gBAC3B,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAE;oBAC3C,SAAS,EAAE,cAAc;oBACzB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9C;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,0CAA0C;QAC1C,wDAAwD;QACxD,oEAAoE;QACpE,kEAAkE;QAClE,sBAAsB;QACtB,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAClC,MAAM;YACN,SAAS,EAAE,cAAc;YACzB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,gBAAgB;YACtB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,aAAa,EAAE,IAAI,CAAC,OAAO;YAC3B,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAE;gBAC3C,cAAc;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CAAC,GAAQ;QAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,wEAAwE;IACxE,qBAAqB;IACrB,wEAAwE;IAExE;;;;;;OAMG;IACK,SAAS,CAAI,KAAmB;QACtC,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,YAAY;IACZ,wEAAwE;IAExE;;;;OAIG;IACK,aAAa,CAAC,GAAkB;QACtC,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;YAC3C,8DAA8D;YAC9D,gEAAgE;YAChE,qEAAqE;YACrE,uDAAuD;YACvD,GAAG,CAAC,YAAY,CAAC;gBACf,KAAK,EAAE,qBAAqB;gBAC5B,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,cAAc;gBAChC,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAU,CAAC;aACtE,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;YAEzF,GAAG,CAAC,YAAY,CAAC;gBACf,KAAK,EAAE,oBAAoB;gBAC3B,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,aAAa;gBAC/B,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAU,CAAC;aACrE,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;YAEvF,kEAAkE;YAClE,uDAAuD;YACvD,GAAG,CAAC,YAAY,CAAC;gBACf,KAAK,EAAE,oBAAoB;gBAC3B,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,qBAAqB;gBACvC,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAU,CAAC;aACrE,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;YAE/F,2DAA2D;YAC3D,8DAA8D;YAC9D,wDAAwD;YACxD,GAAG,CAAC,YAAY,CAAC;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,oBAAoB;gBACtC,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAU,CAAC;aACpE,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;YAE7F,4EAA4E;YAC5E,mEAAmE;YACnE,qEAAqE;YACrE,wCAAwC;YACxC,GAAG,CAAC,YAAY,CAAC;gBACf,KAAK,EAAE,qBAAqB;gBAC5B,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,gBAAgB;gBAClC,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAU,CAAC;aACtE,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;YAE3F,iEAAiE;YACjE,kEAAkE;YAClE,gCAAgC;YAChC,GAAG,CAAC,YAAY,CAAC;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,aAAa;gBAC/B,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAU,CAAC;aACtE,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,2EAA2E;QAC3E,6EAA6E;QAC7E,KAAK,IAAI,CAAC,wBAAwB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACjD,IAAI,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,wBAAwB;QACpC,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;YACtE,mCAAmC;YACnC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,GAAI,GAAW,CAAC,iBAAiB,CAAC;QACzD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,IAAI,CAAC,yEAAyE,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAqG;YAC/G,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAU,CAAC,EAAE;YACnI,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAU,CAAC,EAAE;YAChI,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,qBAAqB,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAU,CAAC,EAAE;YACxI,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,oBAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAU,CAAC,EAAE;YACrI,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,gBAAgB,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAU,CAAC,EAAE;YACrI,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAU,CAAC,EAAE;SACjI,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE;gBAClC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;aAC3C,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,wEAAwE;IACxE,mBAAmB;IACnB,wEAAwE;IAExE;;;;OAIG;IACK,wBAAwB,CAAC,GAAQ;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,GACN,GAAG,CAAC,MAAM,EAAE,QAAQ;YACpB,GAAG,CAAC,QAAQ;YACZ,SAAS,CAAC;QACZ,MAAM,UAAU,GAAG;YACjB,GAAG,CAAC,aAAa;YACjB,GAAG,CAAC,OAAO,EAAE,MAAM;YACnB,GAAG,CAAC,OAAO,EAAE,eAAe;YAC5B,EAAE,EAAE,eAAe;YACnB,GAAG,CAAC,MAAM;SACX,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YACpC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED;;;;;;OAMG;IACK,mBAAmB,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAc;QAC1E,OAAO,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC;IACjC,CAAC;IAEO,kBAAkB,CAAC,QAAgB,EAAE,GAAQ;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;CACF;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,iBAAiB,GAAuC,IAAI,GAAG,CAAwB;IAC3F,WAAW;IACX,QAAQ;IACR,WAAW;CACZ,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,MAA6B;IACrD,OAAO,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC;IAChB,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC;IACxC,8BAA8B;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,iBAAiB,MAAM,CAAC,MAAM,GAAG,GAAG,aAAa,IAAI,EAAE,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAgC;IACnE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,eAAe,cAAc,CAAC"}
package/dist/server.d.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  * GET /task/:taskId → detail page (mermaid flow + tables)
8
8
  * GET /api/sessions → JSON list of sessions
9
9
  * GET /api/sessions/:taskId → JSON detail of one session
10
+ * GET /api/events → Server-Sent Events stream (real-time push)
10
11
  * GET /static/* → static frontend assets (CSS/JS)
11
12
  *
12
13
  * The server is started/stopped via `TaskShowServer.start()` /
@@ -17,6 +18,7 @@
17
18
  import * as http from "node:http";
18
19
  import type { TaskShowConfig } from "./types.js";
19
20
  import type { ToolCallCollector } from "./collector.js";
21
+ import type { EventBus } from "./event-bus.js";
20
22
  /** Public-facing server info (returned to whoever called `start`). */
21
23
  export interface ServerInfo {
22
24
  host: string;
@@ -30,11 +32,14 @@ export declare class TaskShowServer {
30
32
  private server;
31
33
  private readonly cfg;
32
34
  private readonly collector;
35
+ private readonly eventBus;
33
36
  private readonly publicRoot;
34
37
  private readonly logger;
35
38
  constructor(opts: {
36
39
  cfg: TaskShowConfig;
37
40
  collector: ToolCallCollector;
41
+ /** EventBus for SSE broadcasts. Defaults to a new EventBus if omitted. */
42
+ eventBus?: EventBus;
38
43
  /** Absolute or relative path to the directory with public/index.html. */
39
44
  publicDir?: string;
40
45
  logger?: {
@@ -44,6 +49,10 @@ export declare class TaskShowServer {
44
49
  };
45
50
  metaUrl?: string;
46
51
  });
52
+ /**
53
+ * Get the SSE event bus (for tests / health checks).
54
+ */
55
+ getEventBus(): EventBus;
47
56
  /**
48
57
  * Start the listener. The promise resolves once the server is bound — but
49
58
  * the caller can race against `getInfo()` immediately afterwards.
@@ -63,6 +72,13 @@ export declare class TaskShowServer {
63
72
  */
64
73
  stop(): Promise<void>;
65
74
  private handle;
75
+ /**
76
+ * SSE handler — sets the SSE headers, sends an initial snapshot, and
77
+ * subscribes the response to the event bus. The bus will write frames
78
+ * until the socket closes; the `res.on("close", ...)` listener removes
79
+ * the subscriber.
80
+ */
81
+ private handleSSE;
66
82
  /**
67
83
  * Render the index page (lists known tasks).
68
84
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMxD,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;CACxB;AAcD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuF;gBAElG,IAAI,EAAE;QAChB,GAAG,EAAE,cAAc,CAAC;QACpB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,yEAAyE;QACzE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;YAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;YAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;SAAE,CAAC;QAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAOD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IA0D5B;;;OAGG;IACH,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAW7D;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAyBP,MAAM;IAuEpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,QAAQ;CAMjB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO/C,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;CACxB;AAcD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuF;gBAElG,IAAI,EAAE;QAChB,GAAG,EAAE,cAAc,CAAC;QACpB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,0EAA0E;QAC1E,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,yEAAyE;QACzE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;YAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;YAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;SAAE,CAAC;QAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAQD;;OAEG;IACH,WAAW,IAAI,QAAQ;IAIvB;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IA0D5B;;;OAGG;IACH,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAW7D;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA2BP,MAAM;IA6EpB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IA4BjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,QAAQ;CAMjB"}