@goondan/cli 0.0.3-alpha10 → 0.0.3-alpha11
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/studio.js +49 -19
- package/dist/services/studio.js.map +1 -1
- package/dist/studio/assets.d.ts +2 -2
- package/dist/studio/assets.js +216 -20
- package/dist/studio/assets.js.map +1 -1
- package/package.json +2 -2
package/dist/services/studio.js
CHANGED
|
@@ -334,6 +334,36 @@ async function resolveInstanceLocations(stateRoot, instanceKey) {
|
|
|
334
334
|
const safeKey = sanitizeInstanceKey(instanceKey);
|
|
335
335
|
const results = [];
|
|
336
336
|
const seen = new Set();
|
|
337
|
+
const requestedWorkspaceNames = Array.from(new Set([safeKey, instanceKey]));
|
|
338
|
+
const pushLocatedInstance = (workspaceName, instancePath, source) => {
|
|
339
|
+
if (seen.has(instancePath)) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
seen.add(instancePath);
|
|
343
|
+
results.push({
|
|
344
|
+
workspaceName,
|
|
345
|
+
instancePath,
|
|
346
|
+
source,
|
|
347
|
+
});
|
|
348
|
+
};
|
|
349
|
+
const appendWorkspaceInstances = async (workspaceRootPath, workspaceName, source, instancesDirName = 'instances') => {
|
|
350
|
+
const workspacePath = path.join(workspaceRootPath, workspaceName);
|
|
351
|
+
if (!(await exists(workspacePath))) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const instancesRoot = path.join(workspacePath, instancesDirName);
|
|
355
|
+
if (!(await exists(instancesRoot))) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const entries = (await readdir(instancesRoot, { withFileTypes: true })).sort(compareDirentByNameAsc);
|
|
359
|
+
for (const entry of entries) {
|
|
360
|
+
if (!entry.isDirectory()) {
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
const instancePath = path.join(instancesRoot, entry.name);
|
|
364
|
+
pushLocatedInstance(workspaceName, instancePath, source);
|
|
365
|
+
}
|
|
366
|
+
};
|
|
337
367
|
const workspacesRoot = path.join(stateRoot, 'workspaces');
|
|
338
368
|
if (await exists(workspacesRoot)) {
|
|
339
369
|
const workspaces = (await readdir(workspacesRoot, { withFileTypes: true })).sort(compareDirentByNameAsc);
|
|
@@ -350,14 +380,7 @@ async function resolveInstanceLocations(stateRoot, instanceKey) {
|
|
|
350
380
|
if (!(await exists(candidate))) {
|
|
351
381
|
continue;
|
|
352
382
|
}
|
|
353
|
-
|
|
354
|
-
continue;
|
|
355
|
-
}
|
|
356
|
-
seen.add(candidate);
|
|
357
|
-
results.push({
|
|
358
|
-
workspaceName,
|
|
359
|
-
instancePath: candidate,
|
|
360
|
-
});
|
|
383
|
+
pushLocatedInstance(workspaceName, candidate, 'exact');
|
|
361
384
|
}
|
|
362
385
|
}
|
|
363
386
|
}
|
|
@@ -377,17 +400,23 @@ async function resolveInstanceLocations(stateRoot, instanceKey) {
|
|
|
377
400
|
if (!(await exists(candidate))) {
|
|
378
401
|
continue;
|
|
379
402
|
}
|
|
380
|
-
|
|
381
|
-
continue;
|
|
382
|
-
}
|
|
383
|
-
seen.add(candidate);
|
|
384
|
-
results.push({
|
|
385
|
-
workspaceName,
|
|
386
|
-
instancePath: candidate,
|
|
387
|
-
});
|
|
403
|
+
pushLocatedInstance(workspaceName, candidate, 'exact');
|
|
388
404
|
}
|
|
389
405
|
}
|
|
390
406
|
}
|
|
407
|
+
if (results.length > 0) {
|
|
408
|
+
return results;
|
|
409
|
+
}
|
|
410
|
+
if (await exists(workspacesRoot)) {
|
|
411
|
+
for (const workspaceName of requestedWorkspaceNames) {
|
|
412
|
+
await appendWorkspaceInstances(workspacesRoot, workspaceName, 'workspace');
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
if (await exists(legacyRoot)) {
|
|
416
|
+
for (const workspaceName of requestedWorkspaceNames) {
|
|
417
|
+
await appendWorkspaceInstances(legacyRoot, workspaceName, 'workspace', '');
|
|
418
|
+
}
|
|
419
|
+
}
|
|
391
420
|
return results;
|
|
392
421
|
}
|
|
393
422
|
function parseInstanceMetadataAgent(raw) {
|
|
@@ -619,7 +648,8 @@ export class DefaultStudioService {
|
|
|
619
648
|
sequence += 1;
|
|
620
649
|
}
|
|
621
650
|
}
|
|
622
|
-
const
|
|
651
|
+
const includesWorkspaceFallback = instanceLocations.some((location) => location.source === 'workspace');
|
|
652
|
+
const connectorEvents = await this.readConnectorEventsFromLogs(stateRoot, request.instanceKey, includesWorkspaceFallback);
|
|
623
653
|
const primaryAgent = knownAgents.values().next().value ?? 'orchestrator';
|
|
624
654
|
const primaryAgentId = `agent:${primaryAgent}`;
|
|
625
655
|
for (const event of connectorEvents) {
|
|
@@ -746,7 +776,7 @@ export class DefaultStudioService {
|
|
|
746
776
|
}
|
|
747
777
|
notFound(res);
|
|
748
778
|
}
|
|
749
|
-
async readConnectorEventsFromLogs(stateRoot, instanceKey) {
|
|
779
|
+
async readConnectorEventsFromLogs(stateRoot, instanceKey, includeAllInstanceKeys = false) {
|
|
750
780
|
const events = [];
|
|
751
781
|
const logDir = path.join(stateRoot, 'runtime', 'logs', instanceKey);
|
|
752
782
|
if (!(await exists(logDir))) {
|
|
@@ -772,7 +802,7 @@ export class DefaultStudioService {
|
|
|
772
802
|
sequence += 1;
|
|
773
803
|
continue;
|
|
774
804
|
}
|
|
775
|
-
if (parsed.instanceKey !== instanceKey) {
|
|
805
|
+
if (!includeAllInstanceKeys && parsed.instanceKey !== instanceKey) {
|
|
776
806
|
sequence += 1;
|
|
777
807
|
continue;
|
|
778
808
|
}
|
|
@@ -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
|
-
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 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";
|
|
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.flow-step {\n fill: rgba(142, 184, 255, 0.2);\n stroke: rgba(142, 184, 255, 0.62);\n stroke-width: 1.2;\n rx: 8;\n ry: 8;\n}\n\n.flow-step.called {\n fill: rgba(142, 184, 255, 0.24);\n stroke: rgba(142, 184, 255, 0.78);\n}\n\n.flow-step.done {\n fill: rgba(124, 245, 222, 0.22);\n stroke: rgba(124, 245, 222, 0.78);\n}\n\n.flow-step.failed {\n fill: rgba(255, 159, 110, 0.2);\n stroke: rgba(255, 159, 110, 0.78);\n}\n\n.flow-dot {\n fill: #73f0d6;\n stroke: rgba(8, 17, 38, 0.8);\n stroke-width: 1;\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 instancesDigest: \"\",\n selectedInstanceKey: null,\n visualization: null,\n visualizationDigest: \"\",\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 computeInstancesDigest(items, selectedInstanceKey) {\n const normalized = Array.isArray(items) ? items : [];\n const rows = normalized.map((item) =>\n [\n item && typeof item.key === \"string\" ? item.key : \"\",\n item && typeof item.status === \"string\" ? item.status : \"\",\n item && typeof item.agent === \"string\" ? item.agent : \"\",\n item && typeof item.updatedAt === \"string\" ? item.updatedAt : \"\",\n ].join(\":\"),\n );\n return selectedInstanceKey + \"|\" + rows.join(\"||\");\n}\n\nfunction computeVisualizationDigest(payload) {\n if (!payload) {\n return \"\";\n }\n\n const participants = Array.isArray(payload.participants) ? payload.participants : [];\n const interactions = Array.isArray(payload.interactions) ? payload.interactions : [];\n const timeline = Array.isArray(payload.timeline) ? payload.timeline : [];\n const recent = Array.isArray(payload.recentEvents) ? payload.recentEvents : [];\n\n const timelineTail = timeline.length > 0 ? eventKey(timeline[timeline.length - 1]) : \"\";\n const recentTail = recent.length > 0 ? eventKey(recent[recent.length - 1]) : \"\";\n return [\n payload.instanceKey || \"\",\n String(participants.length),\n String(interactions.length),\n String(timeline.length),\n timelineTail,\n recentTail,\n ].join(\"|\");\n}\n\nfunction resetRecentEventTracking() {\n state.seenRecentEventKeys = new Set();\n state.recentEventKeyQueue = [];\n state.recentPulseEvents = [];\n state.hasHydratedRecentEvents = false;\n state.visualizationDigest = \"\";\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 const digest = computeInstancesDigest(state.instances, state.selectedInstanceKey);\n if (digest !== state.instancesDigest) {\n state.instancesDigest = digest;\n renderInstanceList();\n }\n}\n\nasync function refreshVisualization() {\n if (!state.selectedInstanceKey) {\n const hadVisualization = state.visualization !== null;\n state.visualization = null;\n state.visualizationDigest = \"\";\n if (hadVisualization) {\n resetRecentEventTracking();\n renderVisualization();\n }\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\n const nextDigest = computeVisualizationDigest(payload);\n const hasPulse = Array.isArray(state.recentPulseEvents) && state.recentPulseEvents.length > 0;\n if (nextDigest !== state.visualizationDigest || hasPulse) {\n state.visualization = payload;\n state.visualizationDigest = nextDigest;\n renderVisualization();\n } else {\n state.visualization = payload;\n }\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 state.instancesDigest = \"\";\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 wrap.appendChild(svg);\n els.graphView.innerHTML = \"\";\n els.graphView.appendChild(wrap);\n}\n\nfunction pickFlowParticipants(participants) {\n const prioritized = participants.filter((item) => item.kind === \"agent\" || item.kind === \"connector\");\n if (prioritized.length > 0) {\n return prioritized;\n }\n\n const fallback = participants.filter((item) => item.kind !== \"tool\" && item.kind !== \"extension\");\n if (fallback.length > 0) {\n return fallback;\n }\n\n return participants;\n}\n\nfunction isToolStepEvent(event) {\n return (\n event &&\n event.kind === \"runtime-event\" &&\n (event.subtype === \"tool.called\" || event.subtype === \"tool.completed\" || event.subtype === \"tool.failed\")\n );\n}\n\nfunction truncateFlowText(text, limit) {\n if (typeof text !== \"string\") {\n return \"\";\n }\n if (text.length <= limit) {\n return text;\n }\n return text.slice(0, limit) + \"\u2026\";\n}\n\nfunction summarizeFlowEvent(event, maxLength) {\n const detail = event.detail || \"\";\n const text = formatTs(event.at) + \" \u00B7 \" + event.subtype + (detail ? \" \u00B7 \" + detail : \"\");\n return truncateFlowText(text, maxLength);\n}\n\nfunction resolveToolStepLaneIndex(event, laneById) {\n const sourceIndex = laneById.has(event.source) ? laneById.get(event.source) : undefined;\n const targetIndex = laneById.has(event.target) ? laneById.get(event.target) : undefined;\n if (event.subtype === \"tool.called\") {\n if (typeof sourceIndex === \"number\") {\n return sourceIndex;\n }\n if (typeof targetIndex === \"number\") {\n return targetIndex;\n }\n return 0;\n }\n\n if (typeof targetIndex === \"number\") {\n return targetIndex;\n }\n if (typeof sourceIndex === \"number\") {\n return sourceIndex;\n }\n return 0;\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 = 220;\n const topPad = 42;\n const rowGap = 64;\n const lanes = pickFlowParticipants(participants).slice(0, 10);\n const visibleTimeline = timeline.slice(-160);\n const width = Math.max(760, laneWidth * lanes.length);\n const height = Math.max(280, topPad + visibleTimeline.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 visibleTimeline.forEach((event, index) => {\n const y = topPad + index * rowGap;\n if (isToolStepEvent(event)) {\n const laneIndex = resolveToolStepLaneIndex(event, laneById);\n const laneCenter = laneWidth * laneIndex + laneWidth / 2;\n const stepWidth = Math.max(140, laneWidth - 30);\n const stepHeight = 28;\n const stepX = laneCenter - stepWidth / 2;\n const stepY = y - stepHeight / 2;\n const step = createSvgEl(\"rect\");\n const stepClass =\n event.subtype === \"tool.called\"\n ? \"flow-step called\"\n : event.subtype === \"tool.failed\"\n ? \"flow-step failed\"\n : \"flow-step done\";\n step.setAttribute(\"x\", String(stepX));\n step.setAttribute(\"y\", String(stepY));\n step.setAttribute(\"width\", String(stepWidth));\n step.setAttribute(\"height\", String(stepHeight));\n step.setAttribute(\"class\", stepClass);\n svg.appendChild(step);\n\n const stepText = createSvgEl(\"text\");\n stepText.setAttribute(\"x\", String(laneCenter));\n stepText.setAttribute(\"y\", String(y + 4));\n stepText.setAttribute(\"text-anchor\", \"middle\");\n stepText.setAttribute(\"class\", \"flow-event\");\n stepText.textContent = summarizeFlowEvent(event, 88);\n svg.appendChild(stepText);\n return;\n }\n\n const sourceIndex = laneById.has(event.source) ? laneById.get(event.source) : undefined;\n const targetIndex = laneById.has(event.target) ? laneById.get(event.target) : undefined;\n const anchorIndex =\n typeof sourceIndex === \"number\"\n ? sourceIndex\n : typeof targetIndex === \"number\"\n ? targetIndex\n : 0;\n\n if (typeof sourceIndex !== \"number\" || typeof targetIndex !== \"number\" || sourceIndex === targetIndex) {\n const x = laneWidth * anchorIndex + laneWidth / 2;\n const dot = createSvgEl(\"circle\");\n dot.setAttribute(\"cx\", String(x));\n dot.setAttribute(\"cy\", String(y));\n dot.setAttribute(\"r\", \"4\");\n dot.setAttribute(\"class\", \"flow-dot\");\n svg.appendChild(dot);\n\n const label = createSvgEl(\"text\");\n label.setAttribute(\"x\", String(x + 10));\n label.setAttribute(\"y\", String(y - 6));\n label.setAttribute(\"text-anchor\", \"start\");\n label.setAttribute(\"class\", \"flow-event\");\n label.textContent = summarizeFlowEvent(event, 88);\n svg.appendChild(label);\n return;\n }\n\n const sx = laneWidth * sourceIndex + laneWidth / 2;\n const tx = laneWidth * targetIndex + laneWidth / 2;\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 label.textContent = summarizeFlowEvent(event, 92);\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
|
@@ -335,6 +335,35 @@ body::before {
|
|
|
335
335
|
fill: none;
|
|
336
336
|
}
|
|
337
337
|
|
|
338
|
+
.flow-step {
|
|
339
|
+
fill: rgba(142, 184, 255, 0.2);
|
|
340
|
+
stroke: rgba(142, 184, 255, 0.62);
|
|
341
|
+
stroke-width: 1.2;
|
|
342
|
+
rx: 8;
|
|
343
|
+
ry: 8;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.flow-step.called {
|
|
347
|
+
fill: rgba(142, 184, 255, 0.24);
|
|
348
|
+
stroke: rgba(142, 184, 255, 0.78);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.flow-step.done {
|
|
352
|
+
fill: rgba(124, 245, 222, 0.22);
|
|
353
|
+
stroke: rgba(124, 245, 222, 0.78);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.flow-step.failed {
|
|
357
|
+
fill: rgba(255, 159, 110, 0.2);
|
|
358
|
+
stroke: rgba(255, 159, 110, 0.78);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.flow-dot {
|
|
362
|
+
fill: #73f0d6;
|
|
363
|
+
stroke: rgba(8, 17, 38, 0.8);
|
|
364
|
+
stroke-width: 1;
|
|
365
|
+
}
|
|
366
|
+
|
|
338
367
|
.event-particle {
|
|
339
368
|
fill: #ffffff;
|
|
340
369
|
filter: drop-shadow(0 0 6px rgba(124, 245, 222, 0.9));
|
|
@@ -360,8 +389,10 @@ body::before {
|
|
|
360
389
|
export const STUDIO_JS = `const state = {
|
|
361
390
|
mode: "graph",
|
|
362
391
|
instances: [],
|
|
392
|
+
instancesDigest: "",
|
|
363
393
|
selectedInstanceKey: null,
|
|
364
394
|
visualization: null,
|
|
395
|
+
visualizationDigest: "",
|
|
365
396
|
selectedEdgeKey: null,
|
|
366
397
|
pollTimer: null,
|
|
367
398
|
seenRecentEventKeys: new Set(),
|
|
@@ -410,11 +441,47 @@ function eventKey(event) {
|
|
|
410
441
|
return [event.at, event.source, event.target || "", event.subtype, event.detail].join("|");
|
|
411
442
|
}
|
|
412
443
|
|
|
444
|
+
function computeInstancesDigest(items, selectedInstanceKey) {
|
|
445
|
+
const normalized = Array.isArray(items) ? items : [];
|
|
446
|
+
const rows = normalized.map((item) =>
|
|
447
|
+
[
|
|
448
|
+
item && typeof item.key === "string" ? item.key : "",
|
|
449
|
+
item && typeof item.status === "string" ? item.status : "",
|
|
450
|
+
item && typeof item.agent === "string" ? item.agent : "",
|
|
451
|
+
item && typeof item.updatedAt === "string" ? item.updatedAt : "",
|
|
452
|
+
].join(":"),
|
|
453
|
+
);
|
|
454
|
+
return selectedInstanceKey + "|" + rows.join("||");
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
function computeVisualizationDigest(payload) {
|
|
458
|
+
if (!payload) {
|
|
459
|
+
return "";
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
const participants = Array.isArray(payload.participants) ? payload.participants : [];
|
|
463
|
+
const interactions = Array.isArray(payload.interactions) ? payload.interactions : [];
|
|
464
|
+
const timeline = Array.isArray(payload.timeline) ? payload.timeline : [];
|
|
465
|
+
const recent = Array.isArray(payload.recentEvents) ? payload.recentEvents : [];
|
|
466
|
+
|
|
467
|
+
const timelineTail = timeline.length > 0 ? eventKey(timeline[timeline.length - 1]) : "";
|
|
468
|
+
const recentTail = recent.length > 0 ? eventKey(recent[recent.length - 1]) : "";
|
|
469
|
+
return [
|
|
470
|
+
payload.instanceKey || "",
|
|
471
|
+
String(participants.length),
|
|
472
|
+
String(interactions.length),
|
|
473
|
+
String(timeline.length),
|
|
474
|
+
timelineTail,
|
|
475
|
+
recentTail,
|
|
476
|
+
].join("|");
|
|
477
|
+
}
|
|
478
|
+
|
|
413
479
|
function resetRecentEventTracking() {
|
|
414
480
|
state.seenRecentEventKeys = new Set();
|
|
415
481
|
state.recentEventKeyQueue = [];
|
|
416
482
|
state.recentPulseEvents = [];
|
|
417
483
|
state.hasHydratedRecentEvents = false;
|
|
484
|
+
state.visualizationDigest = "";
|
|
418
485
|
}
|
|
419
486
|
|
|
420
487
|
function trackRecentEventKey(key) {
|
|
@@ -459,14 +526,22 @@ async function refreshInstances() {
|
|
|
459
526
|
resetRecentEventTracking();
|
|
460
527
|
}
|
|
461
528
|
|
|
462
|
-
|
|
529
|
+
const digest = computeInstancesDigest(state.instances, state.selectedInstanceKey);
|
|
530
|
+
if (digest !== state.instancesDigest) {
|
|
531
|
+
state.instancesDigest = digest;
|
|
532
|
+
renderInstanceList();
|
|
533
|
+
}
|
|
463
534
|
}
|
|
464
535
|
|
|
465
536
|
async function refreshVisualization() {
|
|
466
537
|
if (!state.selectedInstanceKey) {
|
|
538
|
+
const hadVisualization = state.visualization !== null;
|
|
467
539
|
state.visualization = null;
|
|
468
|
-
|
|
469
|
-
|
|
540
|
+
state.visualizationDigest = "";
|
|
541
|
+
if (hadVisualization) {
|
|
542
|
+
resetRecentEventTracking();
|
|
543
|
+
renderVisualization();
|
|
544
|
+
}
|
|
470
545
|
return;
|
|
471
546
|
}
|
|
472
547
|
|
|
@@ -489,8 +564,16 @@ async function refreshVisualization() {
|
|
|
489
564
|
}
|
|
490
565
|
state.recentPulseEvents = pulseEvents;
|
|
491
566
|
}
|
|
492
|
-
|
|
493
|
-
|
|
567
|
+
|
|
568
|
+
const nextDigest = computeVisualizationDigest(payload);
|
|
569
|
+
const hasPulse = Array.isArray(state.recentPulseEvents) && state.recentPulseEvents.length > 0;
|
|
570
|
+
if (nextDigest !== state.visualizationDigest || hasPulse) {
|
|
571
|
+
state.visualization = payload;
|
|
572
|
+
state.visualizationDigest = nextDigest;
|
|
573
|
+
renderVisualization();
|
|
574
|
+
} else {
|
|
575
|
+
state.visualization = payload;
|
|
576
|
+
}
|
|
494
577
|
}
|
|
495
578
|
|
|
496
579
|
function renderInstanceList() {
|
|
@@ -519,10 +602,11 @@ function renderInstanceList() {
|
|
|
519
602
|
|
|
520
603
|
button.appendChild(title);
|
|
521
604
|
button.appendChild(meta);
|
|
522
|
-
|
|
605
|
+
button.addEventListener("click", () => {
|
|
523
606
|
state.selectedInstanceKey = item.key;
|
|
524
607
|
state.selectedEdgeKey = null;
|
|
525
608
|
resetRecentEventTracking();
|
|
609
|
+
state.instancesDigest = "";
|
|
526
610
|
renderInstanceList();
|
|
527
611
|
void refreshVisualization();
|
|
528
612
|
});
|
|
@@ -751,14 +835,71 @@ function renderGraph(viz) {
|
|
|
751
835
|
fxLayer.appendChild(dot);
|
|
752
836
|
}
|
|
753
837
|
|
|
754
|
-
svg.appendChild(edgeLayer);
|
|
755
|
-
svg.appendChild(nodeLayer);
|
|
756
|
-
svg.appendChild(fxLayer);
|
|
757
838
|
wrap.appendChild(svg);
|
|
758
839
|
els.graphView.innerHTML = "";
|
|
759
840
|
els.graphView.appendChild(wrap);
|
|
760
841
|
}
|
|
761
842
|
|
|
843
|
+
function pickFlowParticipants(participants) {
|
|
844
|
+
const prioritized = participants.filter((item) => item.kind === "agent" || item.kind === "connector");
|
|
845
|
+
if (prioritized.length > 0) {
|
|
846
|
+
return prioritized;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
const fallback = participants.filter((item) => item.kind !== "tool" && item.kind !== "extension");
|
|
850
|
+
if (fallback.length > 0) {
|
|
851
|
+
return fallback;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
return participants;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
function isToolStepEvent(event) {
|
|
858
|
+
return (
|
|
859
|
+
event &&
|
|
860
|
+
event.kind === "runtime-event" &&
|
|
861
|
+
(event.subtype === "tool.called" || event.subtype === "tool.completed" || event.subtype === "tool.failed")
|
|
862
|
+
);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
function truncateFlowText(text, limit) {
|
|
866
|
+
if (typeof text !== "string") {
|
|
867
|
+
return "";
|
|
868
|
+
}
|
|
869
|
+
if (text.length <= limit) {
|
|
870
|
+
return text;
|
|
871
|
+
}
|
|
872
|
+
return text.slice(0, limit) + "…";
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
function summarizeFlowEvent(event, maxLength) {
|
|
876
|
+
const detail = event.detail || "";
|
|
877
|
+
const text = formatTs(event.at) + " · " + event.subtype + (detail ? " · " + detail : "");
|
|
878
|
+
return truncateFlowText(text, maxLength);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
function resolveToolStepLaneIndex(event, laneById) {
|
|
882
|
+
const sourceIndex = laneById.has(event.source) ? laneById.get(event.source) : undefined;
|
|
883
|
+
const targetIndex = laneById.has(event.target) ? laneById.get(event.target) : undefined;
|
|
884
|
+
if (event.subtype === "tool.called") {
|
|
885
|
+
if (typeof sourceIndex === "number") {
|
|
886
|
+
return sourceIndex;
|
|
887
|
+
}
|
|
888
|
+
if (typeof targetIndex === "number") {
|
|
889
|
+
return targetIndex;
|
|
890
|
+
}
|
|
891
|
+
return 0;
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
if (typeof targetIndex === "number") {
|
|
895
|
+
return targetIndex;
|
|
896
|
+
}
|
|
897
|
+
if (typeof sourceIndex === "number") {
|
|
898
|
+
return sourceIndex;
|
|
899
|
+
}
|
|
900
|
+
return 0;
|
|
901
|
+
}
|
|
902
|
+
|
|
762
903
|
function renderFlow(viz) {
|
|
763
904
|
const timeline = Array.isArray(viz.timeline) ? viz.timeline : [];
|
|
764
905
|
const participants = Array.isArray(viz.participants) ? viz.participants : [];
|
|
@@ -767,12 +908,13 @@ function renderFlow(viz) {
|
|
|
767
908
|
return;
|
|
768
909
|
}
|
|
769
910
|
|
|
770
|
-
const laneWidth =
|
|
911
|
+
const laneWidth = 220;
|
|
771
912
|
const topPad = 42;
|
|
772
|
-
const rowGap =
|
|
773
|
-
const lanes = participants.slice(0, 10);
|
|
913
|
+
const rowGap = 64;
|
|
914
|
+
const lanes = pickFlowParticipants(participants).slice(0, 10);
|
|
915
|
+
const visibleTimeline = timeline.slice(-160);
|
|
774
916
|
const width = Math.max(760, laneWidth * lanes.length);
|
|
775
|
-
const height = Math.max(280, topPad +
|
|
917
|
+
const height = Math.max(280, topPad + visibleTimeline.length * rowGap + 40);
|
|
776
918
|
const laneById = new Map(lanes.map((item, index) => [item.id, index]));
|
|
777
919
|
|
|
778
920
|
const wrap = document.createElement("div");
|
|
@@ -816,13 +958,69 @@ function renderFlow(viz) {
|
|
|
816
958
|
svg.appendChild(laneLine);
|
|
817
959
|
});
|
|
818
960
|
|
|
819
|
-
|
|
961
|
+
visibleTimeline.forEach((event, index) => {
|
|
820
962
|
const y = topPad + index * rowGap;
|
|
821
|
-
|
|
822
|
-
|
|
963
|
+
if (isToolStepEvent(event)) {
|
|
964
|
+
const laneIndex = resolveToolStepLaneIndex(event, laneById);
|
|
965
|
+
const laneCenter = laneWidth * laneIndex + laneWidth / 2;
|
|
966
|
+
const stepWidth = Math.max(140, laneWidth - 30);
|
|
967
|
+
const stepHeight = 28;
|
|
968
|
+
const stepX = laneCenter - stepWidth / 2;
|
|
969
|
+
const stepY = y - stepHeight / 2;
|
|
970
|
+
const step = createSvgEl("rect");
|
|
971
|
+
const stepClass =
|
|
972
|
+
event.subtype === "tool.called"
|
|
973
|
+
? "flow-step called"
|
|
974
|
+
: event.subtype === "tool.failed"
|
|
975
|
+
? "flow-step failed"
|
|
976
|
+
: "flow-step done";
|
|
977
|
+
step.setAttribute("x", String(stepX));
|
|
978
|
+
step.setAttribute("y", String(stepY));
|
|
979
|
+
step.setAttribute("width", String(stepWidth));
|
|
980
|
+
step.setAttribute("height", String(stepHeight));
|
|
981
|
+
step.setAttribute("class", stepClass);
|
|
982
|
+
svg.appendChild(step);
|
|
983
|
+
|
|
984
|
+
const stepText = createSvgEl("text");
|
|
985
|
+
stepText.setAttribute("x", String(laneCenter));
|
|
986
|
+
stepText.setAttribute("y", String(y + 4));
|
|
987
|
+
stepText.setAttribute("text-anchor", "middle");
|
|
988
|
+
stepText.setAttribute("class", "flow-event");
|
|
989
|
+
stepText.textContent = summarizeFlowEvent(event, 88);
|
|
990
|
+
svg.appendChild(stepText);
|
|
991
|
+
return;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
const sourceIndex = laneById.has(event.source) ? laneById.get(event.source) : undefined;
|
|
995
|
+
const targetIndex = laneById.has(event.target) ? laneById.get(event.target) : undefined;
|
|
996
|
+
const anchorIndex =
|
|
997
|
+
typeof sourceIndex === "number"
|
|
998
|
+
? sourceIndex
|
|
999
|
+
: typeof targetIndex === "number"
|
|
1000
|
+
? targetIndex
|
|
1001
|
+
: 0;
|
|
1002
|
+
|
|
1003
|
+
if (typeof sourceIndex !== "number" || typeof targetIndex !== "number" || sourceIndex === targetIndex) {
|
|
1004
|
+
const x = laneWidth * anchorIndex + laneWidth / 2;
|
|
1005
|
+
const dot = createSvgEl("circle");
|
|
1006
|
+
dot.setAttribute("cx", String(x));
|
|
1007
|
+
dot.setAttribute("cy", String(y));
|
|
1008
|
+
dot.setAttribute("r", "4");
|
|
1009
|
+
dot.setAttribute("class", "flow-dot");
|
|
1010
|
+
svg.appendChild(dot);
|
|
1011
|
+
|
|
1012
|
+
const label = createSvgEl("text");
|
|
1013
|
+
label.setAttribute("x", String(x + 10));
|
|
1014
|
+
label.setAttribute("y", String(y - 6));
|
|
1015
|
+
label.setAttribute("text-anchor", "start");
|
|
1016
|
+
label.setAttribute("class", "flow-event");
|
|
1017
|
+
label.textContent = summarizeFlowEvent(event, 88);
|
|
1018
|
+
svg.appendChild(label);
|
|
1019
|
+
return;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
823
1022
|
const sx = laneWidth * sourceIndex + laneWidth / 2;
|
|
824
1023
|
const tx = laneWidth * targetIndex + laneWidth / 2;
|
|
825
|
-
|
|
826
1024
|
const arc = createSvgEl("path");
|
|
827
1025
|
const midY = y - 18;
|
|
828
1026
|
arc.setAttribute("d", "M " + sx + " " + y + " Q " + (sx + tx) / 2 + " " + midY + " " + tx + " " + y);
|
|
@@ -835,9 +1033,7 @@ function renderFlow(viz) {
|
|
|
835
1033
|
label.setAttribute("y", String(y - 6));
|
|
836
1034
|
label.setAttribute("text-anchor", "middle");
|
|
837
1035
|
label.setAttribute("class", "flow-event");
|
|
838
|
-
|
|
839
|
-
const text = formatTs(event.at) + " · " + event.subtype + " · " + detail;
|
|
840
|
-
label.textContent = text.length > 80 ? text.slice(0, 80) + "…" : text;
|
|
1036
|
+
label.textContent = summarizeFlowEvent(event, 92);
|
|
841
1037
|
svg.appendChild(label);
|
|
842
1038
|
});
|
|
843
1039
|
|
|
@@ -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
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyVzB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwqBxB,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-alpha11",
|
|
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-alpha11"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@types/node": "^22.19.7",
|