@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.
- package/dist/services/defaults.js +18 -16
- package/dist/services/defaults.js.map +1 -1
- package/dist/services/studio.js +50 -15
- package/dist/services/studio.js.map +1 -1
- package/dist/studio/assets.d.ts +1 -1
- package/dist/studio/assets.js +55 -3
- package/dist/studio/assets.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
|
|
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
|
-
|
|
26
|
-
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"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"}
|
package/dist/services/studio.js
CHANGED
|
@@ -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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
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
|
|
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,
|
|
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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"}
|
package/dist/studio/assets.d.ts
CHANGED
|
@@ -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";
|
package/dist/studio/assets.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
20
|
+
"@goondan/runtime": "0.0.3-alpha9"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@types/node": "^22.19.7",
|