@goondan/cli 0.0.3-alpha8 → 0.0.3-alpha9

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.
@@ -1,5 +1,6 @@
1
- import { readFile } from 'node:fs/promises';
1
+ import { readFileSync } from 'node:fs';
2
2
  import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
3
4
  import { isObjectRecord } from '../utils.js';
4
5
  import { DefaultDoctorService } from './doctor.js';
5
6
  import { DefaultInitService } from './init.js';
@@ -10,20 +11,24 @@ import { HttpRegistryClient } from './registry.js';
10
11
  import { LocalRuntimeController } from './runtime.js';
11
12
  import { DefaultStudioService } from './studio.js';
12
13
  import { DefaultBundleValidator } from './validator.js';
13
- async function readCliVersion(cwd) {
14
+ function readCliVersion(cwd) {
15
+ const cliPackageJson = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json');
14
16
  const localPackageJson = path.join(cwd, 'package.json');
15
- try {
16
- const raw = await readFile(localPackageJson, 'utf8');
17
- const parsed = JSON.parse(raw);
18
- if (isObjectRecord(parsed)) {
19
- const version = parsed['version'];
20
- if (typeof version === 'string') {
21
- return version;
17
+ const candidates = [cliPackageJson, localPackageJson];
18
+ for (const candidate of candidates) {
19
+ try {
20
+ const raw = readFileSync(candidate, 'utf8');
21
+ const parsed = JSON.parse(raw);
22
+ if (isObjectRecord(parsed)) {
23
+ const version = parsed['version'];
24
+ if (typeof version === 'string' && version.trim().length > 0) {
25
+ return version;
26
+ }
22
27
  }
23
28
  }
24
- }
25
- catch {
26
- return '0.0.0';
29
+ catch {
30
+ continue;
31
+ }
27
32
  }
28
33
  return '0.0.0';
29
34
  }
@@ -77,7 +82,7 @@ export function createDefaultDependencies() {
77
82
  terminal,
78
83
  env,
79
84
  cwd,
80
- version: '0.0.0',
85
+ version: readCliVersion(cwd),
81
86
  runtime,
82
87
  validator,
83
88
  instances,
@@ -87,9 +92,6 @@ export function createDefaultDependencies() {
87
92
  init,
88
93
  studio,
89
94
  };
90
- void readCliVersion(cwd).then((version) => {
91
- deps.version = version;
92
- });
93
95
  return deps;
94
96
  }
95
97
  //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"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"}
@@ -10,14 +10,21 @@ function sanitizeInstanceKey(instanceKey) {
10
10
  function nowIso(offset = 0) {
11
11
  return new Date(Date.now() + offset).toISOString();
12
12
  }
13
- function normalizeTimestamp(input, fallbackOffset) {
13
+ function fallbackIsoFromEpochMs(epochMs) {
14
+ if (!Number.isFinite(epochMs)) {
15
+ return new Date(0).toISOString();
16
+ }
17
+ const normalized = Math.max(0, Math.trunc(epochMs));
18
+ return new Date(normalized).toISOString();
19
+ }
20
+ function normalizeTimestamp(input, fallbackEpochMs) {
14
21
  if (typeof input === 'string') {
15
22
  const parsed = Date.parse(input);
16
23
  if (!Number.isNaN(parsed)) {
17
24
  return new Date(parsed).toISOString();
18
25
  }
19
26
  }
20
- return nowIso(fallbackOffset);
27
+ return fallbackIsoFromEpochMs(fallbackEpochMs);
21
28
  }
22
29
  function toMillis(input) {
23
30
  const parsed = Date.parse(input);
@@ -281,7 +288,7 @@ function runtimeEventRoute(event) {
281
288
  detail: type,
282
289
  };
283
290
  }
284
- function parseConnectorLogLine(line, fallbackOffset) {
291
+ function parseConnectorLogLine(line, fallbackEpochMs) {
285
292
  const pattern = /\[goondan-runtime\]\[([^/\]]+)\/([^\]]+)\] emitted event name=([^\s]+) instanceKey=([^\s]+)/u;
286
293
  const match = pattern.exec(line);
287
294
  if (!match) {
@@ -290,25 +297,46 @@ function parseConnectorLogLine(line, fallbackOffset) {
290
297
  const connectionName = match[1] ?? '';
291
298
  const connectorName = match[2] ?? '';
292
299
  const eventName = match[3] ?? '';
293
- if (connectionName.length === 0 || connectorName.length === 0 || eventName.length === 0) {
300
+ const instanceKey = match[4] ?? '';
301
+ if (connectionName.length === 0 || connectorName.length === 0 || eventName.length === 0 || instanceKey.length === 0) {
294
302
  return undefined;
295
303
  }
296
304
  const timestampMatch = line.match(/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)/u);
297
- const at = normalizeTimestamp(timestampMatch ? timestampMatch[1] : undefined, fallbackOffset);
305
+ const at = normalizeTimestamp(timestampMatch ? timestampMatch[1] : undefined, fallbackEpochMs);
298
306
  return {
299
307
  at,
300
308
  connectionName,
301
309
  connectorName,
302
310
  eventName,
311
+ instanceKey,
303
312
  };
304
313
  }
314
+ function compareDirentByNameAsc(a, b) {
315
+ return a.name.localeCompare(b.name);
316
+ }
317
+ function pseudoEpochMsFromPath(filePath) {
318
+ let hash = 2166136261;
319
+ for (let index = 0; index < filePath.length; index += 1) {
320
+ hash ^= filePath.charCodeAt(index);
321
+ hash = Math.imul(hash, 16777619);
322
+ }
323
+ const tenYearsInSeconds = 10 * 365 * 24 * 60 * 60;
324
+ const offsetSeconds = (hash >>> 0) % tenYearsInSeconds;
325
+ return 1_577_836_800_000 + offsetSeconds * 1000;
326
+ }
327
+ function stableFileBaseEpochMs(filePath, birthtimeMs) {
328
+ if (Number.isFinite(birthtimeMs) && birthtimeMs > 0) {
329
+ return Math.trunc(birthtimeMs);
330
+ }
331
+ return pseudoEpochMsFromPath(filePath);
332
+ }
305
333
  async function resolveInstanceLocations(stateRoot, instanceKey) {
306
334
  const safeKey = sanitizeInstanceKey(instanceKey);
307
335
  const results = [];
308
336
  const seen = new Set();
309
337
  const workspacesRoot = path.join(stateRoot, 'workspaces');
310
338
  if (await exists(workspacesRoot)) {
311
- const workspaces = await readdir(workspacesRoot, { withFileTypes: true });
339
+ const workspaces = (await readdir(workspacesRoot, { withFileTypes: true })).sort(compareDirentByNameAsc);
312
340
  for (const workspace of workspaces) {
313
341
  if (!workspace.isDirectory()) {
314
342
  continue;
@@ -335,7 +363,7 @@ async function resolveInstanceLocations(stateRoot, instanceKey) {
335
363
  }
336
364
  const legacyRoot = path.join(stateRoot, 'instances');
337
365
  if (await exists(legacyRoot)) {
338
- const workspaceCandidates = await readdir(legacyRoot, { withFileTypes: true });
366
+ const workspaceCandidates = (await readdir(legacyRoot, { withFileTypes: true })).sort(compareDirentByNameAsc);
339
367
  for (const workspace of workspaceCandidates) {
340
368
  if (!workspace.isDirectory()) {
341
369
  continue;
@@ -494,13 +522,16 @@ export class DefaultStudioService {
494
522
  const basePath = path.join(location.instancePath, 'messages', 'base.jsonl');
495
523
  const eventsPath = path.join(location.instancePath, 'messages', 'events.jsonl');
496
524
  const runtimeEventsPath = path.join(location.instancePath, 'messages', 'runtime-events.jsonl');
525
+ const baseFallbackMs = (await stat(basePath).catch(() => undefined))?.mtimeMs ?? 0;
526
+ const eventsFallbackMs = (await stat(eventsPath).catch(() => undefined))?.mtimeMs ?? 0;
527
+ const runtimeFallbackMs = (await stat(runtimeEventsPath).catch(() => undefined))?.mtimeMs ?? 0;
497
528
  const baseRows = await readJsonLines(basePath);
498
529
  for (const row of baseRows) {
499
530
  const message = messageFromUnknown(row);
500
531
  if (!message) {
501
532
  continue;
502
533
  }
503
- const at = normalizeTimestamp(message.createdAt, sequence);
534
+ const at = normalizeTimestamp(message.createdAt, baseFallbackMs + sequence);
504
535
  const principalAgent = metadataAgent ?? 'orchestrator';
505
536
  const principalAgentId = `agent:${principalAgent}`;
506
537
  registerParticipant(participants, principalAgentId, principalAgent, 'agent', at);
@@ -532,7 +563,7 @@ export class DefaultStudioService {
532
563
  if (!message) {
533
564
  continue;
534
565
  }
535
- const at = normalizeTimestamp(message.createdAt, sequence);
566
+ const at = normalizeTimestamp(message.createdAt, eventsFallbackMs + sequence);
536
567
  const principalAgent = metadataAgent ?? 'orchestrator';
537
568
  const principalAgentId = `agent:${principalAgent}`;
538
569
  const routed = fromMessageToRoute(message, request.instanceKey, principalAgentId);
@@ -550,7 +581,7 @@ export class DefaultStudioService {
550
581
  sequence += 1;
551
582
  continue;
552
583
  }
553
- const at = nowIso(sequence);
584
+ const at = normalizeTimestamp(isObjectRecord(row) ? row['createdAt'] : undefined, eventsFallbackMs + sequence);
554
585
  pushTimeline(timeline, {
555
586
  at,
556
587
  kind: 'message',
@@ -566,7 +597,7 @@ export class DefaultStudioService {
566
597
  if (!isObjectRecord(row)) {
567
598
  continue;
568
599
  }
569
- const at = normalizeTimestamp(row['timestamp'], sequence);
600
+ const at = normalizeTimestamp(row['timestamp'], runtimeFallbackMs + sequence);
570
601
  const routed = runtimeEventRoute(row);
571
602
  if (!routed) {
572
603
  continue;
@@ -721,10 +752,10 @@ export class DefaultStudioService {
721
752
  if (!(await exists(logDir))) {
722
753
  return events;
723
754
  }
724
- const files = await readdir(logDir, { withFileTypes: true });
755
+ const files = (await readdir(logDir, { withFileTypes: true })).sort(compareDirentByNameAsc);
725
756
  let sequence = 0;
726
757
  for (const file of files) {
727
- if (!file.isFile() || !file.name.endsWith('.log')) {
758
+ if (!file.isFile() || !file.name.endsWith('.stdout.log')) {
728
759
  continue;
729
760
  }
730
761
  const fullPath = path.join(logDir, file.name);
@@ -733,14 +764,18 @@ export class DefaultStudioService {
733
764
  continue;
734
765
  }
735
766
  const stats = await stat(fullPath);
736
- const baseOffset = stats.mtime.getTime();
767
+ const baseOffsetMs = stableFileBaseEpochMs(fullPath, stats.birthtimeMs);
737
768
  const lines = content.split('\n').map((line) => line.trim()).filter((line) => line.length > 0);
738
769
  for (const line of lines) {
739
- const parsed = parseConnectorLogLine(line, sequence + Math.max(1, Math.trunc(baseOffset / 1000)));
770
+ const parsed = parseConnectorLogLine(line, baseOffsetMs + sequence);
740
771
  if (!parsed) {
741
772
  sequence += 1;
742
773
  continue;
743
774
  }
775
+ if (parsed.instanceKey !== instanceKey) {
776
+ sequence += 1;
777
+ continue;
778
+ }
744
779
  events.push(parsed);
745
780
  sequence += 1;
746
781
  }
@@ -1 +1 @@
1
- {"version":3,"file":"studio.js","sourceRoot":"","sources":["../../src/services/studio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"studio.js","sourceRoot":"","sources":["../../src/services/studio.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export declare const STUDIO_HTML = "<!doctype html>\n<html lang=\"ko\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n <title>Goondan Studio</title>\n <link rel=\"stylesheet\" href=\"/studio.css\" />\n </head>\n <body>\n <div class=\"studio-shell\">\n <aside class=\"left-panel\">\n <div class=\"brand\">\n <div class=\"brand-kicker\">GOONDAN</div>\n <h1>Studio</h1>\n </div>\n <div id=\"instance-list\" class=\"instance-list\"></div>\n </aside>\n <main class=\"main-panel\">\n <header class=\"top-bar\">\n <div class=\"title-wrap\">\n <h2 id=\"instance-title\">\uC778\uC2A4\uD134\uC2A4\uB97C \uC120\uD0DD\uD558\uC138\uC694</h2>\n <p id=\"instance-subtitle\">runtime event stream</p>\n </div>\n <div class=\"mode-toggle\">\n <button id=\"mode-graph\" class=\"mode-btn is-active\" type=\"button\">Graph</button>\n <button id=\"mode-flow\" class=\"mode-btn\" type=\"button\">Flow</button>\n </div>\n </header>\n <section class=\"visual-stage\">\n <div id=\"graph-view\" class=\"view is-active\"></div>\n <div id=\"flow-view\" class=\"view\"></div>\n </section>\n <section class=\"detail-panel\">\n <h3>Edge History</h3>\n <div id=\"edge-history\" class=\"edge-history\"></div>\n </section>\n </main>\n </div>\n <script type=\"module\" src=\"/studio.js\"></script>\n </body>\n</html>\n";
2
2
  export declare const STUDIO_CSS = ":root {\n --bg-0: #0b1326;\n --bg-1: #101c3f;\n --bg-2: #13295b;\n --panel: rgba(7, 14, 33, 0.78);\n --panel-strong: rgba(9, 20, 46, 0.94);\n --text: #e7edff;\n --muted: #9fb0dc;\n --line: rgba(145, 167, 226, 0.28);\n --line-active: #73f0d6;\n --node-agent: #ffce6e;\n --node-connector: #8eb8ff;\n --node-default: #b7c9ff;\n --accent: #7cf5de;\n --warn: #ff9f6e;\n --radius: 14px;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml,\nbody {\n margin: 0;\n min-height: 100%;\n font-family: \"Space Grotesk\", \"IBM Plex Sans KR\", \"Noto Sans KR\", sans-serif;\n color: var(--text);\n background:\n radial-gradient(circle at 10% 0%, rgba(124, 245, 222, 0.16), transparent 36%),\n radial-gradient(circle at 95% 20%, rgba(142, 184, 255, 0.22), transparent 42%),\n linear-gradient(132deg, var(--bg-0), var(--bg-1) 48%, var(--bg-2));\n}\n\nbody::before {\n content: \"\";\n position: fixed;\n inset: 0;\n pointer-events: none;\n opacity: 0.18;\n background-image:\n linear-gradient(0deg, transparent 24%, rgba(255, 255, 255, 0.22) 25%, transparent 26%),\n linear-gradient(90deg, transparent 24%, rgba(255, 255, 255, 0.22) 25%, transparent 26%);\n background-size: 28px 28px;\n}\n\n.studio-shell {\n position: relative;\n z-index: 1;\n display: grid;\n grid-template-columns: minmax(220px, 320px) 1fr;\n min-height: 100vh;\n}\n\n.left-panel {\n border-right: 1px solid var(--line);\n background: linear-gradient(180deg, rgba(8, 17, 38, 0.94), rgba(8, 17, 38, 0.72));\n backdrop-filter: blur(10px);\n padding: 20px 16px;\n overflow-y: auto;\n}\n\n.brand-kicker {\n letter-spacing: 0.24em;\n font-size: 11px;\n color: var(--accent);\n}\n\n.brand h1 {\n margin: 6px 0 18px;\n font-size: 30px;\n line-height: 1;\n}\n\n.instance-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.instance-btn {\n border: 1px solid var(--line);\n background: rgba(18, 33, 68, 0.55);\n color: var(--text);\n text-align: left;\n padding: 11px 12px;\n border-radius: 10px;\n cursor: pointer;\n transition: border-color 0.25s ease, transform 0.2s ease, background 0.2s ease;\n}\n\n.instance-btn .status {\n font-size: 12px;\n color: var(--muted);\n}\n\n.instance-btn:hover {\n transform: translateX(2px);\n border-color: rgba(124, 245, 222, 0.62);\n}\n\n.instance-btn.is-active {\n border-color: var(--accent);\n background: rgba(26, 56, 110, 0.75);\n box-shadow: 0 0 0 1px rgba(124, 245, 222, 0.18) inset;\n}\n\n.main-panel {\n padding: 16px;\n display: grid;\n grid-template-rows: auto 1fr 170px;\n gap: 12px;\n min-width: 0;\n}\n\n.top-bar {\n border: 1px solid var(--line);\n border-radius: var(--radius);\n background: var(--panel);\n backdrop-filter: blur(10px);\n padding: 12px 14px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n}\n\n.title-wrap h2 {\n margin: 0;\n font-size: 19px;\n}\n\n.title-wrap p {\n margin: 2px 0 0;\n color: var(--muted);\n font-size: 13px;\n}\n\n.mode-toggle {\n display: inline-flex;\n border: 1px solid var(--line);\n border-radius: 999px;\n overflow: hidden;\n}\n\n.mode-btn {\n border: 0;\n background: rgba(22, 41, 82, 0.62);\n color: var(--muted);\n padding: 7px 15px;\n cursor: pointer;\n font-weight: 600;\n}\n\n.mode-btn.is-active {\n background: rgba(124, 245, 222, 0.22);\n color: var(--text);\n}\n\n.visual-stage {\n border: 1px solid var(--line);\n border-radius: var(--radius);\n background: var(--panel-strong);\n overflow: hidden;\n position: relative;\n}\n\n.view {\n display: none;\n width: 100%;\n height: 100%;\n min-height: 320px;\n}\n\n.view.is-active {\n display: block;\n}\n\n.detail-panel {\n border: 1px solid var(--line);\n border-radius: var(--radius);\n background: var(--panel);\n padding: 10px 12px;\n overflow: hidden;\n}\n\n.detail-panel h3 {\n margin: 0 0 8px;\n font-size: 14px;\n color: var(--accent);\n}\n\n.edge-history {\n overflow: auto;\n max-height: 118px;\n font-size: 12px;\n line-height: 1.45;\n}\n\n.history-item {\n border-bottom: 1px dashed rgba(159, 176, 220, 0.25);\n padding: 5px 0;\n}\n\n.history-item:last-child {\n border-bottom: none;\n}\n\n.empty {\n color: var(--muted);\n padding: 12px;\n}\n\n.graph-wrap,\n.flow-wrap {\n width: 100%;\n height: 100%;\n}\n\n.graph-svg,\n.flow-svg {\n width: 100%;\n height: 100%;\n}\n\n.edge {\n stroke: var(--line);\n stroke-width: 2;\n cursor: pointer;\n transition: stroke 0.2s ease, stroke-width 0.2s ease, opacity 0.2s ease;\n opacity: 0.72;\n}\n\n.edge.is-active {\n stroke: var(--line-active);\n stroke-width: 3;\n opacity: 1;\n}\n\n.edge.is-selected {\n stroke: var(--warn);\n}\n\n.node circle {\n stroke: rgba(240, 248, 255, 0.84);\n stroke-width: 1.5;\n}\n\n.node text {\n fill: var(--text);\n font-size: 12px;\n text-anchor: middle;\n}\n\n.node.kind-agent circle {\n fill: var(--node-agent);\n}\n\n.node.kind-connector circle {\n fill: var(--node-connector);\n}\n\n.node.kind-other circle {\n fill: var(--node-default);\n}\n\n.node.is-active circle {\n filter: drop-shadow(0 0 6px rgba(124, 245, 222, 0.78));\n}\n\n.flow-wrap {\n overflow: auto;\n}\n\n.flow-label {\n fill: var(--muted);\n font-size: 11px;\n}\n\n.flow-event {\n fill: var(--text);\n font-size: 11px;\n}\n\n.flow-lane {\n stroke: rgba(142, 184, 255, 0.25);\n stroke-width: 1;\n}\n\n.flow-arc {\n stroke: rgba(115, 240, 214, 0.85);\n stroke-width: 2;\n fill: none;\n}\n\n.event-particle {\n fill: #ffffff;\n filter: drop-shadow(0 0 6px rgba(124, 245, 222, 0.9));\n}\n\n@media (max-width: 920px) {\n .studio-shell {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr;\n }\n\n .left-panel {\n border-right: 0;\n border-bottom: 1px solid var(--line);\n max-height: 210px;\n }\n\n .main-panel {\n grid-template-rows: auto 1fr 180px;\n }\n}\n";
3
- export declare const STUDIO_JS = "const state = {\n mode: \"graph\",\n instances: [],\n selectedInstanceKey: null,\n visualization: null,\n selectedEdgeKey: null,\n pollTimer: null,\n};\n\nconst els = {\n list: document.getElementById(\"instance-list\"),\n title: document.getElementById(\"instance-title\"),\n subtitle: document.getElementById(\"instance-subtitle\"),\n graphView: document.getElementById(\"graph-view\"),\n flowView: document.getElementById(\"flow-view\"),\n edgeHistory: document.getElementById(\"edge-history\"),\n modeGraph: document.getElementById(\"mode-graph\"),\n modeFlow: document.getElementById(\"mode-flow\"),\n};\n\nfunction createSvgEl(tag) {\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n}\n\nfunction setMode(next) {\n state.mode = next;\n const isGraph = next === \"graph\";\n els.graphView.classList.toggle(\"is-active\", isGraph);\n els.flowView.classList.toggle(\"is-active\", !isGraph);\n els.modeGraph.classList.toggle(\"is-active\", isGraph);\n els.modeFlow.classList.toggle(\"is-active\", !isGraph);\n renderVisualization();\n}\n\nfunction formatTs(iso) {\n if (!iso) {\n return \"-\";\n }\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) {\n return iso;\n }\n return date.toLocaleString();\n}\n\nfunction eventKey(event) {\n return [event.at, event.source, event.target || \"\", event.subtype, event.detail].join(\"|\");\n}\n\nasync function fetchJson(url) {\n const res = await fetch(url, { cache: \"no-store\" });\n if (!res.ok) {\n throw new Error(\"request failed: \" + res.status);\n }\n return await res.json();\n}\n\nasync function refreshInstances() {\n const payload = await fetchJson(\"/api/instances\");\n state.instances = Array.isArray(payload.items) ? payload.items : [];\n if (!state.selectedInstanceKey && state.instances.length > 0) {\n state.selectedInstanceKey = state.instances[0].key;\n }\n if (\n state.selectedInstanceKey &&\n !state.instances.some((item) => item.key === state.selectedInstanceKey)\n ) {\n state.selectedInstanceKey = state.instances.length > 0 ? state.instances[0].key : null;\n }\n renderInstanceList();\n}\n\nasync function refreshVisualization() {\n if (!state.selectedInstanceKey) {\n state.visualization = null;\n renderVisualization();\n return;\n }\n\n const key = encodeURIComponent(state.selectedInstanceKey);\n const payload = await fetchJson(\"/api/instances/\" + key + \"/visualization\");\n state.visualization = payload;\n renderVisualization();\n}\n\nfunction renderInstanceList() {\n els.list.innerHTML = \"\";\n if (state.instances.length === 0) {\n const empty = document.createElement(\"div\");\n empty.className = \"empty\";\n empty.textContent = \"\uC2E4\uD589 \uC911\uC778 \uC778\uC2A4\uD134\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\";\n els.list.appendChild(empty);\n return;\n }\n\n for (const item of state.instances) {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"instance-btn\";\n if (item.key === state.selectedInstanceKey) {\n button.classList.add(\"is-active\");\n }\n\n const title = document.createElement(\"div\");\n title.textContent = item.key;\n const meta = document.createElement(\"div\");\n meta.className = \"status\";\n meta.textContent = (item.status || \"unknown\") + \" / \" + (item.agent || \"orchestrator\");\n\n button.appendChild(title);\n button.appendChild(meta);\n button.addEventListener(\"click\", () => {\n state.selectedInstanceKey = item.key;\n state.selectedEdgeKey = null;\n renderInstanceList();\n void refreshVisualization();\n });\n els.list.appendChild(button);\n }\n}\n\nfunction renderEdgeHistory() {\n els.edgeHistory.innerHTML = \"\";\n const viz = state.visualization;\n if (!viz || !state.selectedEdgeKey) {\n const empty = document.createElement(\"div\");\n empty.className = \"empty\";\n empty.textContent = \"\uAC04\uC120\uC744 \uC120\uD0DD\uD558\uBA74 \uC774\uBCA4\uD2B8 \uC774\uB825\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.\";\n els.edgeHistory.appendChild(empty);\n return;\n }\n\n const target = (viz.interactions || []).find((edge) => edge.key === state.selectedEdgeKey);\n if (!target || !Array.isArray(target.history) || target.history.length === 0) {\n const empty = document.createElement(\"div\");\n empty.className = \"empty\";\n empty.textContent = \"\uC774\uB825 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\";\n els.edgeHistory.appendChild(empty);\n return;\n }\n\n for (const item of target.history) {\n const row = document.createElement(\"div\");\n row.className = \"history-item\";\n row.textContent =\n formatTs(item.at) +\n \" \" +\n item.direction +\n \" \" +\n item.kind +\n \" \" +\n (item.detail || \"\");\n els.edgeHistory.appendChild(row);\n }\n}\n\nfunction renderVisualization() {\n const viz = state.visualization;\n if (!viz) {\n els.title.textContent = \"\uC778\uC2A4\uD134\uC2A4\uB97C \uC120\uD0DD\uD558\uC138\uC694\";\n els.subtitle.textContent = \"runtime event stream\";\n els.graphView.innerHTML = \"<div class='empty'>\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n els.flowView.innerHTML = \"<div class='empty'>\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n renderEdgeHistory();\n return;\n }\n\n els.title.textContent = viz.instanceKey || \"instance\";\n const participantCount = Array.isArray(viz.participants) ? viz.participants.length : 0;\n const eventCount = Array.isArray(viz.timeline) ? viz.timeline.length : 0;\n els.subtitle.textContent = \"participants \" + participantCount + \" / events \" + eventCount;\n\n if (state.mode === \"graph\") {\n renderGraph(viz);\n } else {\n renderFlow(viz);\n }\n renderEdgeHistory();\n}\n\nfunction pickGraphParticipants(participants) {\n const list = participants.filter((item) => item.kind === \"agent\" || item.kind === \"connector\");\n if (list.length > 0) {\n return list;\n }\n return participants;\n}\n\nfunction renderGraph(viz) {\n const participants = Array.isArray(viz.participants) ? pickGraphParticipants(viz.participants) : [];\n const interactions = Array.isArray(viz.interactions) ? viz.interactions : [];\n const recentEvents = Array.isArray(viz.recentEvents) ? viz.recentEvents : [];\n\n if (participants.length === 0) {\n els.graphView.innerHTML = \"<div class='empty'>\uD45C\uC2DC\uD560 participant\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n return;\n }\n\n const wrap = document.createElement(\"div\");\n wrap.className = \"graph-wrap\";\n const svg = createSvgEl(\"svg\");\n svg.setAttribute(\"class\", \"graph-svg\");\n svg.setAttribute(\"viewBox\", \"0 0 1000 600\");\n\n const centerX = 500;\n const centerY = 300;\n const radius = Math.max(170, Math.min(250, 70 + participants.length * 18));\n const positions = new Map();\n\n participants.forEach((node, index) => {\n const ratio = (Math.PI * 2 * index) / participants.length;\n const x = centerX + Math.cos(ratio) * radius;\n const y = centerY + Math.sin(ratio) * radius;\n positions.set(node.id, { x, y, item: node });\n });\n\n const edgeLayer = createSvgEl(\"g\");\n const nodeLayer = createSvgEl(\"g\");\n const fxLayer = createSvgEl(\"g\");\n svg.appendChild(edgeLayer);\n svg.appendChild(nodeLayer);\n svg.appendChild(fxLayer);\n\n const edgePathByKey = new Map();\n for (const edge of interactions) {\n const from = positions.get(edge.a);\n const to = positions.get(edge.b);\n if (!from || !to) {\n continue;\n }\n const line = createSvgEl(\"line\");\n line.setAttribute(\"x1\", String(from.x));\n line.setAttribute(\"y1\", String(from.y));\n line.setAttribute(\"x2\", String(to.x));\n line.setAttribute(\"y2\", String(to.y));\n line.setAttribute(\"class\", \"edge\");\n if (state.selectedEdgeKey === edge.key) {\n line.classList.add(\"is-selected\");\n }\n line.addEventListener(\"click\", () => {\n state.selectedEdgeKey = edge.key;\n renderVisualization();\n });\n edgeLayer.appendChild(line);\n edgePathByKey.set(edge.key, {\n path: \"M \" + from.x + \" \" + from.y + \" L \" + to.x + \" \" + to.y,\n line,\n from: edge.a,\n to: edge.b,\n });\n }\n\n const activeNodes = new Set();\n const activeEdges = new Set();\n for (const event of recentEvents) {\n const source = event.source;\n const target = event.target || \"\";\n activeNodes.add(source);\n if (target) {\n activeNodes.add(target);\n for (const edge of interactions) {\n if (\n (edge.a === source && edge.b === target) ||\n (edge.a === target && edge.b === source)\n ) {\n activeEdges.add(edge.key);\n }\n }\n }\n }\n\n for (const edge of interactions) {\n const edgeInfo = edgePathByKey.get(edge.key);\n if (!edgeInfo) {\n continue;\n }\n if (activeEdges.has(edge.key)) {\n edgeInfo.line.classList.add(\"is-active\");\n }\n }\n\n for (const node of participants) {\n const point = positions.get(node.id);\n if (!point) {\n continue;\n }\n const g = createSvgEl(\"g\");\n g.setAttribute(\"class\", \"node\");\n if (node.kind === \"agent\") {\n g.classList.add(\"kind-agent\");\n } else if (node.kind === \"connector\") {\n g.classList.add(\"kind-connector\");\n } else {\n g.classList.add(\"kind-other\");\n }\n if (activeNodes.has(node.id)) {\n g.classList.add(\"is-active\");\n }\n\n const circle = createSvgEl(\"circle\");\n circle.setAttribute(\"cx\", String(point.x));\n circle.setAttribute(\"cy\", String(point.y));\n circle.setAttribute(\"r\", \"28\");\n const text = createSvgEl(\"text\");\n text.setAttribute(\"x\", String(point.x));\n text.setAttribute(\"y\", String(point.y + 4));\n text.textContent = node.label.length > 16 ? node.label.slice(0, 16) + \"\u2026\" : node.label;\n\n g.appendChild(circle);\n g.appendChild(text);\n nodeLayer.appendChild(g);\n }\n\n for (const event of recentEvents) {\n if (!event.target) {\n continue;\n }\n let hit = null;\n for (const edge of interactions) {\n if (\n (edge.a === event.source && edge.b === event.target) ||\n (edge.a === event.target && edge.b === event.source)\n ) {\n hit = edgePathByKey.get(edge.key) || null;\n break;\n }\n }\n if (!hit) {\n continue;\n }\n\n const dot = createSvgEl(\"circle\");\n dot.setAttribute(\"r\", \"4\");\n dot.setAttribute(\"class\", \"event-particle\");\n const motion = createSvgEl(\"animateMotion\");\n motion.setAttribute(\"dur\", \"1.1s\");\n motion.setAttribute(\"repeatCount\", \"1\");\n motion.setAttribute(\"path\", hit.path);\n dot.appendChild(motion);\n fxLayer.appendChild(dot);\n }\n\n svg.appendChild(edgeLayer);\n svg.appendChild(nodeLayer);\n svg.appendChild(fxLayer);\n wrap.appendChild(svg);\n els.graphView.innerHTML = \"\";\n els.graphView.appendChild(wrap);\n}\n\nfunction renderFlow(viz) {\n const timeline = Array.isArray(viz.timeline) ? viz.timeline : [];\n const participants = Array.isArray(viz.participants) ? viz.participants : [];\n if (participants.length === 0) {\n els.flowView.innerHTML = \"<div class='empty'>\uD45C\uC2DC\uD560 participant\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n return;\n }\n\n const laneWidth = 180;\n const topPad = 42;\n const rowGap = 62;\n const lanes = participants.slice(0, 10);\n const width = Math.max(760, laneWidth * lanes.length);\n const height = Math.max(280, topPad + timeline.length * rowGap + 40);\n const laneById = new Map(lanes.map((item, index) => [item.id, index]));\n\n const wrap = document.createElement(\"div\");\n wrap.className = \"flow-wrap\";\n const svg = createSvgEl(\"svg\");\n svg.setAttribute(\"class\", \"flow-svg\");\n svg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n svg.setAttribute(\"preserveAspectRatio\", \"xMinYMin meet\");\n\n const defs = createSvgEl(\"defs\");\n const marker = createSvgEl(\"marker\");\n marker.setAttribute(\"id\", \"arrowHead\");\n marker.setAttribute(\"markerWidth\", \"8\");\n marker.setAttribute(\"markerHeight\", \"8\");\n marker.setAttribute(\"refX\", \"7\");\n marker.setAttribute(\"refY\", \"4\");\n marker.setAttribute(\"orient\", \"auto\");\n const arrowPath = createSvgEl(\"path\");\n arrowPath.setAttribute(\"d\", \"M 0 0 L 8 4 L 0 8 z\");\n arrowPath.setAttribute(\"fill\", \"#73f0d6\");\n marker.appendChild(arrowPath);\n defs.appendChild(marker);\n svg.appendChild(defs);\n\n lanes.forEach((lane, index) => {\n const x = laneWidth * index + laneWidth / 2;\n const label = createSvgEl(\"text\");\n label.setAttribute(\"x\", String(x));\n label.setAttribute(\"y\", \"22\");\n label.setAttribute(\"text-anchor\", \"middle\");\n label.setAttribute(\"class\", \"flow-label\");\n label.textContent = lane.label;\n svg.appendChild(label);\n\n const laneLine = createSvgEl(\"line\");\n laneLine.setAttribute(\"x1\", String(x));\n laneLine.setAttribute(\"y1\", \"28\");\n laneLine.setAttribute(\"x2\", String(x));\n laneLine.setAttribute(\"y2\", String(height - 12));\n laneLine.setAttribute(\"class\", \"flow-lane\");\n svg.appendChild(laneLine);\n });\n\n timeline.slice(-120).forEach((event, index) => {\n const y = topPad + index * rowGap;\n const sourceIndex = laneById.has(event.source) ? laneById.get(event.source) : 0;\n const targetIndex = laneById.has(event.target) ? laneById.get(event.target) : sourceIndex;\n const sx = laneWidth * sourceIndex + laneWidth / 2;\n const tx = laneWidth * targetIndex + laneWidth / 2;\n\n const arc = createSvgEl(\"path\");\n const midY = y - 18;\n arc.setAttribute(\"d\", \"M \" + sx + \" \" + y + \" Q \" + (sx + tx) / 2 + \" \" + midY + \" \" + tx + \" \" + y);\n arc.setAttribute(\"class\", \"flow-arc\");\n arc.setAttribute(\"marker-end\", \"url(#arrowHead)\");\n svg.appendChild(arc);\n\n const label = createSvgEl(\"text\");\n label.setAttribute(\"x\", String((sx + tx) / 2));\n label.setAttribute(\"y\", String(y - 6));\n label.setAttribute(\"text-anchor\", \"middle\");\n label.setAttribute(\"class\", \"flow-event\");\n const detail = event.detail || \"\";\n const text = formatTs(event.at) + \" \u00B7 \" + event.subtype + \" \u00B7 \" + detail;\n label.textContent = text.length > 80 ? text.slice(0, 80) + \"\u2026\" : text;\n svg.appendChild(label);\n });\n\n wrap.appendChild(svg);\n els.flowView.innerHTML = \"\";\n els.flowView.appendChild(wrap);\n}\n\nasync function tick() {\n try {\n await refreshInstances();\n await refreshVisualization();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n els.subtitle.textContent = \"polling failed: \" + message;\n }\n}\n\nfunction startPolling() {\n if (state.pollTimer) {\n clearInterval(state.pollTimer);\n }\n state.pollTimer = setInterval(() => {\n void tick();\n }, 1000);\n}\n\nels.modeGraph.addEventListener(\"click\", () => setMode(\"graph\"));\nels.modeFlow.addEventListener(\"click\", () => setMode(\"flow\"));\n\nvoid tick();\nstartPolling();\n";
3
+ export declare const STUDIO_JS = "const state = {\n mode: \"graph\",\n instances: [],\n selectedInstanceKey: null,\n visualization: null,\n selectedEdgeKey: null,\n pollTimer: null,\n seenRecentEventKeys: new Set(),\n recentEventKeyQueue: [],\n recentPulseEvents: [],\n hasHydratedRecentEvents: false,\n};\n\nconst els = {\n list: document.getElementById(\"instance-list\"),\n title: document.getElementById(\"instance-title\"),\n subtitle: document.getElementById(\"instance-subtitle\"),\n graphView: document.getElementById(\"graph-view\"),\n flowView: document.getElementById(\"flow-view\"),\n edgeHistory: document.getElementById(\"edge-history\"),\n modeGraph: document.getElementById(\"mode-graph\"),\n modeFlow: document.getElementById(\"mode-flow\"),\n};\n\nfunction createSvgEl(tag) {\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n}\n\nfunction setMode(next) {\n state.mode = next;\n const isGraph = next === \"graph\";\n els.graphView.classList.toggle(\"is-active\", isGraph);\n els.flowView.classList.toggle(\"is-active\", !isGraph);\n els.modeGraph.classList.toggle(\"is-active\", isGraph);\n els.modeFlow.classList.toggle(\"is-active\", !isGraph);\n renderVisualization();\n}\n\nfunction formatTs(iso) {\n if (!iso) {\n return \"-\";\n }\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) {\n return iso;\n }\n return date.toLocaleString();\n}\n\nfunction eventKey(event) {\n return [event.at, event.source, event.target || \"\", event.subtype, event.detail].join(\"|\");\n}\n\nfunction resetRecentEventTracking() {\n state.seenRecentEventKeys = new Set();\n state.recentEventKeyQueue = [];\n state.recentPulseEvents = [];\n state.hasHydratedRecentEvents = false;\n}\n\nfunction trackRecentEventKey(key) {\n if (state.seenRecentEventKeys.has(key)) {\n return false;\n }\n state.seenRecentEventKeys.add(key);\n state.recentEventKeyQueue.push(key);\n\n while (state.recentEventKeyQueue.length > 2000) {\n const oldest = state.recentEventKeyQueue.shift();\n if (oldest) {\n state.seenRecentEventKeys.delete(oldest);\n }\n }\n return true;\n}\n\nasync function fetchJson(url) {\n const res = await fetch(url, { cache: \"no-store\" });\n if (!res.ok) {\n throw new Error(\"request failed: \" + res.status);\n }\n return await res.json();\n}\n\nasync function refreshInstances() {\n const previousSelected = state.selectedInstanceKey;\n const payload = await fetchJson(\"/api/instances\");\n state.instances = Array.isArray(payload.items) ? payload.items : [];\n if (!state.selectedInstanceKey && state.instances.length > 0) {\n state.selectedInstanceKey = state.instances[0].key;\n }\n if (\n state.selectedInstanceKey &&\n !state.instances.some((item) => item.key === state.selectedInstanceKey)\n ) {\n state.selectedInstanceKey = state.instances.length > 0 ? state.instances[0].key : null;\n }\n\n if (previousSelected !== state.selectedInstanceKey) {\n resetRecentEventTracking();\n }\n\n renderInstanceList();\n}\n\nasync function refreshVisualization() {\n if (!state.selectedInstanceKey) {\n state.visualization = null;\n resetRecentEventTracking();\n renderVisualization();\n return;\n }\n\n const key = encodeURIComponent(state.selectedInstanceKey);\n const payload = await fetchJson(\"/api/instances/\" + key + \"/visualization\");\n const recentEvents = Array.isArray(payload.recentEvents) ? payload.recentEvents : [];\n if (!state.hasHydratedRecentEvents) {\n for (const event of recentEvents) {\n trackRecentEventKey(eventKey(event));\n }\n state.recentPulseEvents = [];\n state.hasHydratedRecentEvents = true;\n } else {\n const pulseEvents = [];\n for (const event of recentEvents) {\n const keyForEvent = eventKey(event);\n if (trackRecentEventKey(keyForEvent)) {\n pulseEvents.push(event);\n }\n }\n state.recentPulseEvents = pulseEvents;\n }\n state.visualization = payload;\n renderVisualization();\n}\n\nfunction renderInstanceList() {\n els.list.innerHTML = \"\";\n if (state.instances.length === 0) {\n const empty = document.createElement(\"div\");\n empty.className = \"empty\";\n empty.textContent = \"\uC2E4\uD589 \uC911\uC778 \uC778\uC2A4\uD134\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\";\n els.list.appendChild(empty);\n return;\n }\n\n for (const item of state.instances) {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"instance-btn\";\n if (item.key === state.selectedInstanceKey) {\n button.classList.add(\"is-active\");\n }\n\n const title = document.createElement(\"div\");\n title.textContent = item.key;\n const meta = document.createElement(\"div\");\n meta.className = \"status\";\n meta.textContent = (item.status || \"unknown\") + \" / \" + (item.agent || \"orchestrator\");\n\n button.appendChild(title);\n button.appendChild(meta);\n button.addEventListener(\"click\", () => {\n state.selectedInstanceKey = item.key;\n state.selectedEdgeKey = null;\n resetRecentEventTracking();\n renderInstanceList();\n void refreshVisualization();\n });\n els.list.appendChild(button);\n }\n}\n\nfunction renderEdgeHistory() {\n els.edgeHistory.innerHTML = \"\";\n const viz = state.visualization;\n if (!viz || !state.selectedEdgeKey) {\n const empty = document.createElement(\"div\");\n empty.className = \"empty\";\n empty.textContent = \"\uAC04\uC120\uC744 \uC120\uD0DD\uD558\uBA74 \uC774\uBCA4\uD2B8 \uC774\uB825\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.\";\n els.edgeHistory.appendChild(empty);\n return;\n }\n\n const target = (viz.interactions || []).find((edge) => edge.key === state.selectedEdgeKey);\n if (!target || !Array.isArray(target.history) || target.history.length === 0) {\n const empty = document.createElement(\"div\");\n empty.className = \"empty\";\n empty.textContent = \"\uC774\uB825 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\";\n els.edgeHistory.appendChild(empty);\n return;\n }\n\n for (const item of target.history) {\n const row = document.createElement(\"div\");\n row.className = \"history-item\";\n row.textContent =\n formatTs(item.at) +\n \" \" +\n item.direction +\n \" \" +\n item.kind +\n \" \" +\n (item.detail || \"\");\n els.edgeHistory.appendChild(row);\n }\n}\n\nfunction renderVisualization() {\n const viz = state.visualization;\n if (!viz) {\n els.title.textContent = \"\uC778\uC2A4\uD134\uC2A4\uB97C \uC120\uD0DD\uD558\uC138\uC694\";\n els.subtitle.textContent = \"runtime event stream\";\n els.graphView.innerHTML = \"<div class='empty'>\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n els.flowView.innerHTML = \"<div class='empty'>\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n renderEdgeHistory();\n return;\n }\n\n els.title.textContent = viz.instanceKey || \"instance\";\n const participantCount = Array.isArray(viz.participants) ? viz.participants.length : 0;\n const eventCount = Array.isArray(viz.timeline) ? viz.timeline.length : 0;\n els.subtitle.textContent = \"participants \" + participantCount + \" / events \" + eventCount;\n\n if (state.mode === \"graph\") {\n renderGraph(viz);\n } else {\n renderFlow(viz);\n }\n renderEdgeHistory();\n}\n\nfunction pickGraphParticipants(participants) {\n const list = participants.filter((item) => item.kind === \"agent\" || item.kind === \"connector\");\n if (list.length > 0) {\n return list;\n }\n return participants;\n}\n\nfunction renderGraph(viz) {\n const participants = Array.isArray(viz.participants) ? pickGraphParticipants(viz.participants) : [];\n const interactions = Array.isArray(viz.interactions) ? viz.interactions : [];\n const pulseEvents = Array.isArray(state.recentPulseEvents) ? state.recentPulseEvents : [];\n\n if (participants.length === 0) {\n els.graphView.innerHTML = \"<div class='empty'>\uD45C\uC2DC\uD560 participant\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n return;\n }\n\n const wrap = document.createElement(\"div\");\n wrap.className = \"graph-wrap\";\n const svg = createSvgEl(\"svg\");\n svg.setAttribute(\"class\", \"graph-svg\");\n svg.setAttribute(\"viewBox\", \"0 0 1000 600\");\n\n const centerX = 500;\n const centerY = 300;\n const radius = Math.max(170, Math.min(250, 70 + participants.length * 18));\n const positions = new Map();\n\n participants.forEach((node, index) => {\n const ratio = (Math.PI * 2 * index) / participants.length;\n const x = centerX + Math.cos(ratio) * radius;\n const y = centerY + Math.sin(ratio) * radius;\n positions.set(node.id, { x, y, item: node });\n });\n\n const edgeLayer = createSvgEl(\"g\");\n const nodeLayer = createSvgEl(\"g\");\n const fxLayer = createSvgEl(\"g\");\n svg.appendChild(edgeLayer);\n svg.appendChild(nodeLayer);\n svg.appendChild(fxLayer);\n\n const edgePathByKey = new Map();\n for (const edge of interactions) {\n const from = positions.get(edge.a);\n const to = positions.get(edge.b);\n if (!from || !to) {\n continue;\n }\n const line = createSvgEl(\"line\");\n line.setAttribute(\"x1\", String(from.x));\n line.setAttribute(\"y1\", String(from.y));\n line.setAttribute(\"x2\", String(to.x));\n line.setAttribute(\"y2\", String(to.y));\n line.setAttribute(\"class\", \"edge\");\n if (state.selectedEdgeKey === edge.key) {\n line.classList.add(\"is-selected\");\n }\n line.addEventListener(\"click\", () => {\n state.selectedEdgeKey = edge.key;\n renderVisualization();\n });\n edgeLayer.appendChild(line);\n edgePathByKey.set(edge.key, {\n path: \"M \" + from.x + \" \" + from.y + \" L \" + to.x + \" \" + to.y,\n line,\n from: edge.a,\n to: edge.b,\n });\n }\n\n const activeNodes = new Set();\n const activeEdges = new Set();\n for (const event of pulseEvents) {\n const source = event.source;\n const target = event.target || \"\";\n activeNodes.add(source);\n if (target) {\n activeNodes.add(target);\n for (const edge of interactions) {\n if (\n (edge.a === source && edge.b === target) ||\n (edge.a === target && edge.b === source)\n ) {\n activeEdges.add(edge.key);\n }\n }\n }\n }\n\n for (const edge of interactions) {\n const edgeInfo = edgePathByKey.get(edge.key);\n if (!edgeInfo) {\n continue;\n }\n if (activeEdges.has(edge.key)) {\n edgeInfo.line.classList.add(\"is-active\");\n }\n }\n\n for (const node of participants) {\n const point = positions.get(node.id);\n if (!point) {\n continue;\n }\n const g = createSvgEl(\"g\");\n g.setAttribute(\"class\", \"node\");\n if (node.kind === \"agent\") {\n g.classList.add(\"kind-agent\");\n } else if (node.kind === \"connector\") {\n g.classList.add(\"kind-connector\");\n } else {\n g.classList.add(\"kind-other\");\n }\n if (activeNodes.has(node.id)) {\n g.classList.add(\"is-active\");\n }\n\n const circle = createSvgEl(\"circle\");\n circle.setAttribute(\"cx\", String(point.x));\n circle.setAttribute(\"cy\", String(point.y));\n circle.setAttribute(\"r\", \"28\");\n const text = createSvgEl(\"text\");\n text.setAttribute(\"x\", String(point.x));\n text.setAttribute(\"y\", String(point.y + 4));\n text.textContent = node.label.length > 16 ? node.label.slice(0, 16) + \"\u2026\" : node.label;\n\n g.appendChild(circle);\n g.appendChild(text);\n nodeLayer.appendChild(g);\n }\n\n for (const event of pulseEvents) {\n if (!event.target) {\n continue;\n }\n let hit = null;\n for (const edge of interactions) {\n if (\n (edge.a === event.source && edge.b === event.target) ||\n (edge.a === event.target && edge.b === event.source)\n ) {\n hit = edgePathByKey.get(edge.key) || null;\n break;\n }\n }\n if (!hit) {\n continue;\n }\n\n const dot = createSvgEl(\"circle\");\n dot.setAttribute(\"r\", \"4\");\n dot.setAttribute(\"class\", \"event-particle\");\n const motion = createSvgEl(\"animateMotion\");\n motion.setAttribute(\"dur\", \"1.1s\");\n motion.setAttribute(\"repeatCount\", \"1\");\n motion.setAttribute(\"path\", hit.path);\n dot.appendChild(motion);\n fxLayer.appendChild(dot);\n }\n\n svg.appendChild(edgeLayer);\n svg.appendChild(nodeLayer);\n svg.appendChild(fxLayer);\n wrap.appendChild(svg);\n els.graphView.innerHTML = \"\";\n els.graphView.appendChild(wrap);\n}\n\nfunction renderFlow(viz) {\n const timeline = Array.isArray(viz.timeline) ? viz.timeline : [];\n const participants = Array.isArray(viz.participants) ? viz.participants : [];\n if (participants.length === 0) {\n els.flowView.innerHTML = \"<div class='empty'>\uD45C\uC2DC\uD560 participant\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.</div>\";\n return;\n }\n\n const laneWidth = 180;\n const topPad = 42;\n const rowGap = 62;\n const lanes = participants.slice(0, 10);\n const width = Math.max(760, laneWidth * lanes.length);\n const height = Math.max(280, topPad + timeline.length * rowGap + 40);\n const laneById = new Map(lanes.map((item, index) => [item.id, index]));\n\n const wrap = document.createElement(\"div\");\n wrap.className = \"flow-wrap\";\n const svg = createSvgEl(\"svg\");\n svg.setAttribute(\"class\", \"flow-svg\");\n svg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n svg.setAttribute(\"preserveAspectRatio\", \"xMinYMin meet\");\n\n const defs = createSvgEl(\"defs\");\n const marker = createSvgEl(\"marker\");\n marker.setAttribute(\"id\", \"arrowHead\");\n marker.setAttribute(\"markerWidth\", \"8\");\n marker.setAttribute(\"markerHeight\", \"8\");\n marker.setAttribute(\"refX\", \"7\");\n marker.setAttribute(\"refY\", \"4\");\n marker.setAttribute(\"orient\", \"auto\");\n const arrowPath = createSvgEl(\"path\");\n arrowPath.setAttribute(\"d\", \"M 0 0 L 8 4 L 0 8 z\");\n arrowPath.setAttribute(\"fill\", \"#73f0d6\");\n marker.appendChild(arrowPath);\n defs.appendChild(marker);\n svg.appendChild(defs);\n\n lanes.forEach((lane, index) => {\n const x = laneWidth * index + laneWidth / 2;\n const label = createSvgEl(\"text\");\n label.setAttribute(\"x\", String(x));\n label.setAttribute(\"y\", \"22\");\n label.setAttribute(\"text-anchor\", \"middle\");\n label.setAttribute(\"class\", \"flow-label\");\n label.textContent = lane.label;\n svg.appendChild(label);\n\n const laneLine = createSvgEl(\"line\");\n laneLine.setAttribute(\"x1\", String(x));\n laneLine.setAttribute(\"y1\", \"28\");\n laneLine.setAttribute(\"x2\", String(x));\n laneLine.setAttribute(\"y2\", String(height - 12));\n laneLine.setAttribute(\"class\", \"flow-lane\");\n svg.appendChild(laneLine);\n });\n\n timeline.slice(-120).forEach((event, index) => {\n const y = topPad + index * rowGap;\n const sourceIndex = laneById.has(event.source) ? laneById.get(event.source) : 0;\n const targetIndex = laneById.has(event.target) ? laneById.get(event.target) : sourceIndex;\n const sx = laneWidth * sourceIndex + laneWidth / 2;\n const tx = laneWidth * targetIndex + laneWidth / 2;\n\n const arc = createSvgEl(\"path\");\n const midY = y - 18;\n arc.setAttribute(\"d\", \"M \" + sx + \" \" + y + \" Q \" + (sx + tx) / 2 + \" \" + midY + \" \" + tx + \" \" + y);\n arc.setAttribute(\"class\", \"flow-arc\");\n arc.setAttribute(\"marker-end\", \"url(#arrowHead)\");\n svg.appendChild(arc);\n\n const label = createSvgEl(\"text\");\n label.setAttribute(\"x\", String((sx + tx) / 2));\n label.setAttribute(\"y\", String(y - 6));\n label.setAttribute(\"text-anchor\", \"middle\");\n label.setAttribute(\"class\", \"flow-event\");\n const detail = event.detail || \"\";\n const text = formatTs(event.at) + \" \u00B7 \" + event.subtype + \" \u00B7 \" + detail;\n label.textContent = text.length > 80 ? text.slice(0, 80) + \"\u2026\" : text;\n svg.appendChild(label);\n });\n\n wrap.appendChild(svg);\n els.flowView.innerHTML = \"\";\n els.flowView.appendChild(wrap);\n}\n\nasync function tick() {\n try {\n await refreshInstances();\n await refreshVisualization();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n els.subtitle.textContent = \"polling failed: \" + message;\n }\n}\n\nfunction startPolling() {\n if (state.pollTimer) {\n clearInterval(state.pollTimer);\n }\n state.pollTimer = setInterval(() => {\n void tick();\n }, 1000);\n}\n\nels.modeGraph.addEventListener(\"click\", () => setMode(\"graph\"));\nels.modeFlow.addEventListener(\"click\", () => setMode(\"flow\"));\n\nvoid tick();\nstartPolling();\n";
@@ -364,6 +364,10 @@ export const STUDIO_JS = `const state = {
364
364
  visualization: null,
365
365
  selectedEdgeKey: null,
366
366
  pollTimer: null,
367
+ seenRecentEventKeys: new Set(),
368
+ recentEventKeyQueue: [],
369
+ recentPulseEvents: [],
370
+ hasHydratedRecentEvents: false,
367
371
  };
368
372
 
369
373
  const els = {
@@ -406,6 +410,29 @@ function eventKey(event) {
406
410
  return [event.at, event.source, event.target || "", event.subtype, event.detail].join("|");
407
411
  }
408
412
 
413
+ function resetRecentEventTracking() {
414
+ state.seenRecentEventKeys = new Set();
415
+ state.recentEventKeyQueue = [];
416
+ state.recentPulseEvents = [];
417
+ state.hasHydratedRecentEvents = false;
418
+ }
419
+
420
+ function trackRecentEventKey(key) {
421
+ if (state.seenRecentEventKeys.has(key)) {
422
+ return false;
423
+ }
424
+ state.seenRecentEventKeys.add(key);
425
+ state.recentEventKeyQueue.push(key);
426
+
427
+ while (state.recentEventKeyQueue.length > 2000) {
428
+ const oldest = state.recentEventKeyQueue.shift();
429
+ if (oldest) {
430
+ state.seenRecentEventKeys.delete(oldest);
431
+ }
432
+ }
433
+ return true;
434
+ }
435
+
409
436
  async function fetchJson(url) {
410
437
  const res = await fetch(url, { cache: "no-store" });
411
438
  if (!res.ok) {
@@ -415,6 +442,7 @@ async function fetchJson(url) {
415
442
  }
416
443
 
417
444
  async function refreshInstances() {
445
+ const previousSelected = state.selectedInstanceKey;
418
446
  const payload = await fetchJson("/api/instances");
419
447
  state.instances = Array.isArray(payload.items) ? payload.items : [];
420
448
  if (!state.selectedInstanceKey && state.instances.length > 0) {
@@ -426,18 +454,41 @@ async function refreshInstances() {
426
454
  ) {
427
455
  state.selectedInstanceKey = state.instances.length > 0 ? state.instances[0].key : null;
428
456
  }
457
+
458
+ if (previousSelected !== state.selectedInstanceKey) {
459
+ resetRecentEventTracking();
460
+ }
461
+
429
462
  renderInstanceList();
430
463
  }
431
464
 
432
465
  async function refreshVisualization() {
433
466
  if (!state.selectedInstanceKey) {
434
467
  state.visualization = null;
468
+ resetRecentEventTracking();
435
469
  renderVisualization();
436
470
  return;
437
471
  }
438
472
 
439
473
  const key = encodeURIComponent(state.selectedInstanceKey);
440
474
  const payload = await fetchJson("/api/instances/" + key + "/visualization");
475
+ const recentEvents = Array.isArray(payload.recentEvents) ? payload.recentEvents : [];
476
+ if (!state.hasHydratedRecentEvents) {
477
+ for (const event of recentEvents) {
478
+ trackRecentEventKey(eventKey(event));
479
+ }
480
+ state.recentPulseEvents = [];
481
+ state.hasHydratedRecentEvents = true;
482
+ } else {
483
+ const pulseEvents = [];
484
+ for (const event of recentEvents) {
485
+ const keyForEvent = eventKey(event);
486
+ if (trackRecentEventKey(keyForEvent)) {
487
+ pulseEvents.push(event);
488
+ }
489
+ }
490
+ state.recentPulseEvents = pulseEvents;
491
+ }
441
492
  state.visualization = payload;
442
493
  renderVisualization();
443
494
  }
@@ -471,6 +522,7 @@ function renderInstanceList() {
471
522
  button.addEventListener("click", () => {
472
523
  state.selectedInstanceKey = item.key;
473
524
  state.selectedEdgeKey = null;
525
+ resetRecentEventTracking();
474
526
  renderInstanceList();
475
527
  void refreshVisualization();
476
528
  });
@@ -548,7 +600,7 @@ function pickGraphParticipants(participants) {
548
600
  function renderGraph(viz) {
549
601
  const participants = Array.isArray(viz.participants) ? pickGraphParticipants(viz.participants) : [];
550
602
  const interactions = Array.isArray(viz.interactions) ? viz.interactions : [];
551
- const recentEvents = Array.isArray(viz.recentEvents) ? viz.recentEvents : [];
603
+ const pulseEvents = Array.isArray(state.recentPulseEvents) ? state.recentPulseEvents : [];
552
604
 
553
605
  if (participants.length === 0) {
554
606
  els.graphView.innerHTML = "<div class='empty'>표시할 participant가 없습니다.</div>";
@@ -611,7 +663,7 @@ function renderGraph(viz) {
611
663
 
612
664
  const activeNodes = new Set();
613
665
  const activeEdges = new Set();
614
- for (const event of recentEvents) {
666
+ for (const event of pulseEvents) {
615
667
  const source = event.source;
616
668
  const target = event.target || "";
617
669
  activeNodes.add(source);
@@ -670,7 +722,7 @@ function renderGraph(viz) {
670
722
  nodeLayer.appendChild(g);
671
723
  }
672
724
 
673
- for (const event of recentEvents) {
725
+ for (const event of pulseEvents) {
674
726
  if (!event.target) {
675
727
  continue;
676
728
  }
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/studio/assets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC1B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4TzB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6cxB,CAAC"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/studio/assets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC1B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4TzB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAigBxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goondan/cli",
3
- "version": "0.0.3-alpha8",
3
+ "version": "0.0.3-alpha9",
4
4
  "description": "Goondan CLI (gdn)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "dependencies": {
18
18
  "@optique/core": "^0.9.0",
19
19
  "@optique/run": "^0.9.0",
20
- "@goondan/runtime": "0.0.3-alpha8"
20
+ "@goondan/runtime": "0.0.3-alpha9"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/node": "^22.19.7",