gauss-ai 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +489 -0
- package/LICENSE +21 -0
- package/README.md +269 -0
- package/dist/a2a/index.cjs +7 -0
- package/dist/a2a/index.cjs.map +1 -0
- package/dist/a2a/index.d.cts +30 -0
- package/dist/a2a/index.d.ts +30 -0
- package/dist/a2a/index.js +7 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/agent-UIQDSYCE.js +16 -0
- package/dist/agent-UIQDSYCE.js.map +1 -0
- package/dist/agent-builder-8W3mBR-N.d.ts +1075 -0
- package/dist/agent-builder-GEMYdb1p.d.cts +1075 -0
- package/dist/agent-graph-AMQYAWNF.js +1422 -0
- package/dist/agent-graph-AMQYAWNF.js.map +1 -0
- package/dist/ai-sdk-mcp.adapter-SEN6KHNU.js +124 -0
- package/dist/ai-sdk-mcp.adapter-SEN6KHNU.js.map +1 -0
- package/dist/browser/index.js +10 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/bun-runtime.adapter-MQDAJLQM.js +8 -0
- package/dist/bun-runtime.adapter-MQDAJLQM.js.map +1 -0
- package/dist/bun-runtime.adapter-XKOUXVAK.cjs +8 -0
- package/dist/bun-runtime.adapter-XKOUXVAK.cjs.map +1 -0
- package/dist/chat-A3XMRPJL.js +129 -0
- package/dist/chat-A3XMRPJL.js.map +1 -0
- package/dist/chunk-2ZRU47NC.js +91 -0
- package/dist/chunk-2ZRU47NC.js.map +1 -0
- package/dist/chunk-3LD3JTH4.cjs +18 -0
- package/dist/chunk-3LD3JTH4.cjs.map +1 -0
- package/dist/chunk-5FE5TG2W.cjs +16 -0
- package/dist/chunk-5FE5TG2W.cjs.map +1 -0
- package/dist/chunk-6XF673YC.cjs +436 -0
- package/dist/chunk-6XF673YC.cjs.map +1 -0
- package/dist/chunk-7CKWZJNS.js +230 -0
- package/dist/chunk-7CKWZJNS.js.map +1 -0
- package/dist/chunk-BI2G665F.js +4588 -0
- package/dist/chunk-BI2G665F.js.map +1 -0
- package/dist/chunk-C5NLWJS2.js +139 -0
- package/dist/chunk-C5NLWJS2.js.map +1 -0
- package/dist/chunk-CJZ66SU3.cjs +4321 -0
- package/dist/chunk-CJZ66SU3.cjs.map +1 -0
- package/dist/chunk-DAMT2CXW.cjs +91 -0
- package/dist/chunk-DAMT2CXW.cjs.map +1 -0
- package/dist/chunk-E7WG3MO5.js +18 -0
- package/dist/chunk-E7WG3MO5.js.map +1 -0
- package/dist/chunk-EFDM6R4J.js +99 -0
- package/dist/chunk-EFDM6R4J.js.map +1 -0
- package/dist/chunk-F7WIPPEO.js +256 -0
- package/dist/chunk-F7WIPPEO.js.map +1 -0
- package/dist/chunk-FAYDE67N.js +6927 -0
- package/dist/chunk-FAYDE67N.js.map +1 -0
- package/dist/chunk-GAE2KKCM.js +21 -0
- package/dist/chunk-GAE2KKCM.js.map +1 -0
- package/dist/chunk-INLNGRXM.cjs +130 -0
- package/dist/chunk-INLNGRXM.cjs.map +1 -0
- package/dist/chunk-JKXKXB5O.js +130 -0
- package/dist/chunk-JKXKXB5O.js.map +1 -0
- package/dist/chunk-K6SAETGP.js +375 -0
- package/dist/chunk-K6SAETGP.js.map +1 -0
- package/dist/chunk-KEASLAYR.js +157 -0
- package/dist/chunk-KEASLAYR.js.map +1 -0
- package/dist/chunk-KKJVNM6O.js +436 -0
- package/dist/chunk-KKJVNM6O.js.map +1 -0
- package/dist/chunk-KYIMVRIM.js +16 -0
- package/dist/chunk-KYIMVRIM.js.map +1 -0
- package/dist/chunk-MB7NXIZD.js +4321 -0
- package/dist/chunk-MB7NXIZD.js.map +1 -0
- package/dist/chunk-MHHDXPGE.js +209 -0
- package/dist/chunk-MHHDXPGE.js.map +1 -0
- package/dist/chunk-NE6JJA5W.js +401 -0
- package/dist/chunk-NE6JJA5W.js.map +1 -0
- package/dist/chunk-PF46XZBF.cjs +6927 -0
- package/dist/chunk-PF46XZBF.cjs.map +1 -0
- package/dist/chunk-PSJIAGDE.cjs +375 -0
- package/dist/chunk-PSJIAGDE.cjs.map +1 -0
- package/dist/chunk-PWOQDXNQ.js +16 -0
- package/dist/chunk-PWOQDXNQ.js.map +1 -0
- package/dist/chunk-QYOMQBBZ.cjs +230 -0
- package/dist/chunk-QYOMQBBZ.cjs.map +1 -0
- package/dist/chunk-UDFXLC4J.cjs +16 -0
- package/dist/chunk-UDFXLC4J.cjs.map +1 -0
- package/dist/chunk-UO4NGXRT.cjs +259 -0
- package/dist/chunk-UO4NGXRT.cjs.map +1 -0
- package/dist/chunk-UPFDFLEW.js +40 -0
- package/dist/chunk-UPFDFLEW.js.map +1 -0
- package/dist/chunk-V55JSQS7.cjs +16 -0
- package/dist/chunk-V55JSQS7.cjs.map +1 -0
- package/dist/chunk-VJADHXZL.cjs +16 -0
- package/dist/chunk-VJADHXZL.cjs.map +1 -0
- package/dist/chunk-VRWD7LCI.js +59 -0
- package/dist/chunk-VRWD7LCI.js.map +1 -0
- package/dist/chunk-WKKQ443C.js +487 -0
- package/dist/chunk-WKKQ443C.js.map +1 -0
- package/dist/chunk-X2GHUHAF.js +436 -0
- package/dist/chunk-X2GHUHAF.js.map +1 -0
- package/dist/chunk-XLGW3XNI.cjs +256 -0
- package/dist/chunk-XLGW3XNI.cjs.map +1 -0
- package/dist/chunk-ZFJKX4DP.js +16 -0
- package/dist/chunk-ZFJKX4DP.js.map +1 -0
- package/dist/chunk-ZM2OEWM2.js +259 -0
- package/dist/chunk-ZM2OEWM2.js.map +1 -0
- package/dist/chunk-ZNAIP2XV.js +16 -0
- package/dist/chunk-ZNAIP2XV.js.map +1 -0
- package/dist/chunk-ZYFAZYSL.js +42 -0
- package/dist/chunk-ZYFAZYSL.js.map +1 -0
- package/dist/cli/index.js +421 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config-4MHT6TQW.js +153 -0
- package/dist/config-4MHT6TQW.js.map +1 -0
- package/dist/config-REERQFK4.cjs +153 -0
- package/dist/config-REERQFK4.cjs.map +1 -0
- package/dist/cost-tracker-JLOU7IZJ.js +7 -0
- package/dist/cost-tracker-JLOU7IZJ.js.map +1 -0
- package/dist/demo-C52GMSYH.js +188 -0
- package/dist/demo-C52GMSYH.js.map +1 -0
- package/dist/deno/index.js +306 -0
- package/dist/deno/index.js.map +1 -0
- package/dist/deno-runtime.adapter-F744HY7K.js +8 -0
- package/dist/deno-runtime.adapter-F744HY7K.js.map +1 -0
- package/dist/deno-runtime.adapter-RFEVNSCV.cjs +8 -0
- package/dist/deno-runtime.adapter-RFEVNSCV.cjs.map +1 -0
- package/dist/dev-D7DDVDA4.js +218 -0
- package/dist/dev-D7DDVDA4.js.map +1 -0
- package/dist/edge/index.js +10 -0
- package/dist/edge/index.js.map +1 -0
- package/dist/edge-runtime.adapter-UQCW2F7X.js +8 -0
- package/dist/edge-runtime.adapter-UQCW2F7X.js.map +1 -0
- package/dist/edge-runtime.adapter-YED6F3AY.cjs +8 -0
- package/dist/edge-runtime.adapter-YED6F3AY.cjs.map +1 -0
- package/dist/graph-MGFAQZ5W.js +50 -0
- package/dist/graph-MGFAQZ5W.js.map +1 -0
- package/dist/graph-visualization-HBSVQXJK.js +9 -0
- package/dist/graph-visualization-HBSVQXJK.js.map +1 -0
- package/dist/index-BRgqNnh3.d.cts +982 -0
- package/dist/index-CZxpYUxZ.d.ts +982 -0
- package/dist/index.cjs +14789 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +10275 -0
- package/dist/index.d.ts +10275 -0
- package/dist/index.js +14789 -0
- package/dist/index.js.map +1 -0
- package/dist/init-CFWXTQ35.js +133 -0
- package/dist/init-CFWXTQ35.js.map +1 -0
- package/dist/llm-VWO4MC7J.cjs +17 -0
- package/dist/llm-VWO4MC7J.cjs.map +1 -0
- package/dist/llm-XLXVSPBI.js +17 -0
- package/dist/llm-XLXVSPBI.js.map +1 -0
- package/dist/logging-WRAK5ZXT.js +33 -0
- package/dist/logging-WRAK5ZXT.js.map +1 -0
- package/dist/metrics-FAHZVVD4.js +47 -0
- package/dist/metrics-FAHZVVD4.js.map +1 -0
- package/dist/node/index.cjs +280 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +51 -0
- package/dist/node/index.d.ts +51 -0
- package/dist/node/index.js +280 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node-runtime.adapter-5L7PJ6W2.js +8 -0
- package/dist/node-runtime.adapter-5L7PJ6W2.js.map +1 -0
- package/dist/node-runtime.adapter-CCRZVGHB.cjs +8 -0
- package/dist/node-runtime.adapter-CCRZVGHB.cjs.map +1 -0
- package/dist/persist-usage-WTBTCWEF.js +7 -0
- package/dist/persist-usage-WTBTCWEF.js.map +1 -0
- package/dist/plugin-RCPBWUUA.js +207 -0
- package/dist/plugin-RCPBWUUA.js.map +1 -0
- package/dist/plugins/index.cjs +75 -0
- package/dist/plugins/index.cjs.map +1 -0
- package/dist/plugins/index.d.cts +8 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.js +75 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins-L4ING3CX.js +4625 -0
- package/dist/plugins-L4ING3CX.js.map +1 -0
- package/dist/providers/index.cjs +189 -0
- package/dist/providers/index.cjs.map +1 -0
- package/dist/providers/index.d.cts +168 -0
- package/dist/providers/index.d.ts +168 -0
- package/dist/providers/index.js +189 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers-3RNQ5CKZ.js +59 -0
- package/dist/providers-3RNQ5CKZ.js.map +1 -0
- package/dist/providers-66GPXUGQ.cjs +59 -0
- package/dist/providers-66GPXUGQ.cjs.map +1 -0
- package/dist/repl-K6QN4I2S.js +678 -0
- package/dist/repl-K6QN4I2S.js.map +1 -0
- package/dist/rest/index.cjs +17 -0
- package/dist/rest/index.cjs.map +1 -0
- package/dist/rest/index.d.cts +102 -0
- package/dist/rest/index.d.ts +102 -0
- package/dist/rest/index.js +17 -0
- package/dist/rest/index.js.map +1 -0
- package/dist/runtime-deno.js +15 -0
- package/dist/runtime-deno.js.map +1 -0
- package/dist/runtime-edge.js +15 -0
- package/dist/runtime-edge.js.map +1 -0
- package/dist/runtime-node.js +15 -0
- package/dist/runtime-node.js.map +1 -0
- package/dist/scraping/index.cjs +11 -0
- package/dist/scraping/index.cjs.map +1 -0
- package/dist/scraping/index.d.cts +17 -0
- package/dist/scraping/index.d.ts +17 -0
- package/dist/scraping/index.js +11 -0
- package/dist/scraping/index.js.map +1 -0
- package/dist/semantic-scraping.port-CZWUea88.d.cts +54 -0
- package/dist/semantic-scraping.port-CZWUea88.d.ts +54 -0
- package/dist/server/index.js +166 -0
- package/dist/server/index.js.map +1 -0
- package/dist/testing/index.cjs +25 -0
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.d.cts +63 -0
- package/dist/testing/index.d.ts +63 -0
- package/dist/testing/index.js +25 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/token-counter.port-CRgxZZGe.d.ts +334 -0
- package/dist/token-counter.port-D7BHMCRR.d.cts +334 -0
- package/dist/tools-BZM33OBZ.js +10 -0
- package/dist/tools-BZM33OBZ.js.map +1 -0
- package/dist/tracing-XA3TEWP4.js +48 -0
- package/dist/tracing-XA3TEWP4.js.map +1 -0
- package/dist/types-CVsP7gFI.d.cts +235 -0
- package/dist/types-CVsP7gFI.d.ts +235 -0
- package/dist/virtual-fs.adapter-BBLS-3AY.d.ts +26 -0
- package/dist/virtual-fs.adapter-nb0CTYOj.d.cts +26 -0
- package/dist/workflow/index.cjs +9 -0
- package/dist/workflow/index.cjs.map +1 -0
- package/dist/workflow/index.d.cts +62 -0
- package/dist/workflow/index.d.ts +62 -0
- package/dist/workflow/index.js +9 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow.port-BaCttxrw.d.cts +153 -0
- package/dist/workflow.port-BaCttxrw.d.ts +153 -0
- package/package.json +230 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// src/adapters/graph-visualization/ascii-graph.adapter.ts
|
|
2
|
+
var AsciiGraphAdapter = class {
|
|
3
|
+
toAscii(graph) {
|
|
4
|
+
if (graph.nodes.length === 0) return "(empty graph)";
|
|
5
|
+
const ordered = this.topologicalSort(graph);
|
|
6
|
+
const forkMap = new Map(graph.forks.map((f) => [f.id, f.nodeIds]));
|
|
7
|
+
const lines = [];
|
|
8
|
+
const boxes = ordered.map((id) => {
|
|
9
|
+
const node = graph.nodes.find((n) => n.id === id);
|
|
10
|
+
return this.renderBox(node.label ?? node.id, node.type);
|
|
11
|
+
});
|
|
12
|
+
const topLine = boxes.map((b) => b[0]).join(" ");
|
|
13
|
+
const midLine = boxes.map((b) => b[1]).join(" \u2500\u2500\u2192 ");
|
|
14
|
+
const typLine = boxes.map((b) => b[2]).join(" ");
|
|
15
|
+
const botLine = boxes.map((b) => b[3]).join(" ");
|
|
16
|
+
lines.push(topLine, midLine, typLine, botLine);
|
|
17
|
+
for (const [forkId, nodeIds] of forkMap) {
|
|
18
|
+
const idx = ordered.indexOf(forkId);
|
|
19
|
+
if (idx < 0) continue;
|
|
20
|
+
const offset = this.computeOffset(boxes, idx);
|
|
21
|
+
lines.push("");
|
|
22
|
+
const forkLines = this.renderFork(forkId, nodeIds);
|
|
23
|
+
for (const fl of forkLines) {
|
|
24
|
+
lines.push(" ".repeat(offset) + fl);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return lines.join("\n");
|
|
28
|
+
}
|
|
29
|
+
toMermaid(_graph) {
|
|
30
|
+
throw new Error("Use MermaidGraphAdapter for Mermaid output");
|
|
31
|
+
}
|
|
32
|
+
renderBox(label, type) {
|
|
33
|
+
const inner = Math.max(label.length, type.length + 2);
|
|
34
|
+
const pad = (s) => s.padEnd(inner);
|
|
35
|
+
return [
|
|
36
|
+
`\u250C${"\u2500".repeat(inner + 2)}\u2510`,
|
|
37
|
+
`\u2502 ${pad(label)} \u2502`,
|
|
38
|
+
`\u2502 ${pad(`(${type})`)} \u2502`,
|
|
39
|
+
`\u2514${"\u2500".repeat(inner + 2)}\u2518`
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
renderFork(id, nodeIds) {
|
|
43
|
+
const miniBoxLine = nodeIds.map((nid) => {
|
|
44
|
+
const w = nid.length + 2;
|
|
45
|
+
return `\u250C${"\u2500".repeat(w)}\u2510`;
|
|
46
|
+
}).join("");
|
|
47
|
+
const miniMidLine = nodeIds.map((nid) => `\u2502 ${nid} \u2502`).join("");
|
|
48
|
+
const miniBotLine = nodeIds.map((nid) => {
|
|
49
|
+
const w = nid.length + 2;
|
|
50
|
+
return `\u2514${"\u2500".repeat(w)}\u2518`;
|
|
51
|
+
}).join("");
|
|
52
|
+
const contentWidth = Math.max(id.length + 2, miniMidLine.length + 2);
|
|
53
|
+
const padCenter = (s) => {
|
|
54
|
+
const leftPad = Math.floor((contentWidth - s.length) / 2);
|
|
55
|
+
return " ".repeat(Math.max(0, leftPad)) + s;
|
|
56
|
+
};
|
|
57
|
+
const dashesTotal = contentWidth - 1;
|
|
58
|
+
const leftDashes = Math.floor(dashesTotal / 2);
|
|
59
|
+
const rightDashes = dashesTotal - leftDashes;
|
|
60
|
+
return [
|
|
61
|
+
" ".repeat(Math.floor(contentWidth / 2)) + "\u2502",
|
|
62
|
+
`\u250C${"\u2500".repeat(leftDashes)}\u2534${"\u2500".repeat(rightDashes)}\u2510`,
|
|
63
|
+
`\u2502${padCenter(id)}${" ".repeat(Math.max(0, contentWidth - padCenter(id).length))}\u2502`,
|
|
64
|
+
`\u2502${padCenter(miniBoxLine)}${" ".repeat(Math.max(0, contentWidth - padCenter(miniBoxLine).length))}\u2502`,
|
|
65
|
+
`\u2502${padCenter(miniMidLine)}${" ".repeat(Math.max(0, contentWidth - padCenter(miniMidLine).length))}\u2502`,
|
|
66
|
+
`\u2502${padCenter(miniBotLine)}${" ".repeat(Math.max(0, contentWidth - padCenter(miniBotLine).length))}\u2502`,
|
|
67
|
+
`\u2514${"\u2500".repeat(contentWidth)}\u2518`
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
computeOffset(boxes, idx) {
|
|
71
|
+
let offset = 0;
|
|
72
|
+
for (let i = 0; i < idx; i++) {
|
|
73
|
+
offset += boxes[i][0].length + 5;
|
|
74
|
+
}
|
|
75
|
+
return offset;
|
|
76
|
+
}
|
|
77
|
+
topologicalSort(graph) {
|
|
78
|
+
const adjacency = /* @__PURE__ */ new Map();
|
|
79
|
+
const inDegree = /* @__PURE__ */ new Map();
|
|
80
|
+
for (const n of graph.nodes) {
|
|
81
|
+
adjacency.set(n.id, []);
|
|
82
|
+
inDegree.set(n.id, 0);
|
|
83
|
+
}
|
|
84
|
+
for (const e of graph.edges) {
|
|
85
|
+
adjacency.get(e.from)?.push(e.to);
|
|
86
|
+
inDegree.set(e.to, (inDegree.get(e.to) ?? 0) + 1);
|
|
87
|
+
}
|
|
88
|
+
const queue = graph.nodes.filter((n) => (inDegree.get(n.id) ?? 0) === 0).map((n) => n.id);
|
|
89
|
+
const result = [];
|
|
90
|
+
while (queue.length > 0) {
|
|
91
|
+
const id = queue.shift();
|
|
92
|
+
result.push(id);
|
|
93
|
+
for (const next of adjacency.get(id) ?? []) {
|
|
94
|
+
const deg = (inDegree.get(next) ?? 1) - 1;
|
|
95
|
+
inDegree.set(next, deg);
|
|
96
|
+
if (deg === 0) queue.push(next);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// src/adapters/graph-visualization/mermaid-graph.adapter.ts
|
|
104
|
+
var MermaidGraphAdapter = class {
|
|
105
|
+
toAscii(_graph) {
|
|
106
|
+
throw new Error("Use AsciiGraphAdapter for ASCII output");
|
|
107
|
+
}
|
|
108
|
+
toMermaid(graph) {
|
|
109
|
+
const lines = ["graph LR"];
|
|
110
|
+
const forkNodeIds = new Set(graph.forks.flatMap((f) => f.nodeIds));
|
|
111
|
+
const sanitize = (id) => id.replace(/-/g, "_");
|
|
112
|
+
for (const node of graph.nodes) {
|
|
113
|
+
if (forkNodeIds.has(node.id)) continue;
|
|
114
|
+
const sid = sanitize(node.id);
|
|
115
|
+
const label = node.label ?? node.id;
|
|
116
|
+
lines.push(` ${sid}[${label}<br>${node.type}]`);
|
|
117
|
+
}
|
|
118
|
+
for (const edge of graph.edges) {
|
|
119
|
+
lines.push(` ${sanitize(edge.from)} --> ${sanitize(edge.to)}`);
|
|
120
|
+
}
|
|
121
|
+
for (const fork of graph.forks) {
|
|
122
|
+
lines.push(` subgraph ${fork.id}`);
|
|
123
|
+
for (const nid of fork.nodeIds) {
|
|
124
|
+
const node = graph.nodes.find((n) => n.id === nid);
|
|
125
|
+
const label = node?.label ?? nid;
|
|
126
|
+
const type = node?.type ?? "agent";
|
|
127
|
+
lines.push(` ${sanitize(nid)}[${label}<br>${type}]`);
|
|
128
|
+
}
|
|
129
|
+
lines.push(" end");
|
|
130
|
+
}
|
|
131
|
+
return lines.join("\n");
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
export {
|
|
136
|
+
AsciiGraphAdapter,
|
|
137
|
+
MermaidGraphAdapter
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=chunk-C5NLWJS2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapters/graph-visualization/ascii-graph.adapter.ts","../src/adapters/graph-visualization/mermaid-graph.adapter.ts"],"sourcesContent":["// =============================================================================\n// AsciiGraphAdapter — Renders a GraphDescriptor as ASCII box art\n// =============================================================================\n\nimport type {\n GraphVisualizationPort,\n GraphDescriptor,\n} from \"../../ports/graph-visualization.port.js\";\n\nexport class AsciiGraphAdapter implements GraphVisualizationPort {\n toAscii(graph: GraphDescriptor): string {\n if (graph.nodes.length === 0) return \"(empty graph)\";\n\n const ordered = this.topologicalSort(graph);\n const forkMap = new Map(graph.forks.map((f) => [f.id, f.nodeIds]));\n const lines: string[] = [];\n\n // Render main flow\n const boxes = ordered.map((id) => {\n const node = graph.nodes.find((n) => n.id === id)!;\n return this.renderBox(node.label ?? node.id, node.type);\n });\n const topLine = boxes.map((b) => b[0]).join(\" \");\n const midLine = boxes.map((b) => b[1]).join(\" ──→ \");\n const typLine = boxes.map((b) => b[2]).join(\" \");\n const botLine = boxes.map((b) => b[3]).join(\" \");\n lines.push(topLine, midLine, typLine, botLine);\n\n // Render forks below their parent node\n for (const [forkId, nodeIds] of forkMap) {\n const idx = ordered.indexOf(forkId);\n if (idx < 0) continue;\n const offset = this.computeOffset(boxes, idx);\n lines.push(\"\");\n const forkLines = this.renderFork(forkId, nodeIds);\n for (const fl of forkLines) {\n lines.push(\" \".repeat(offset) + fl);\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n toMermaid(_graph: GraphDescriptor): string {\n throw new Error(\"Use MermaidGraphAdapter for Mermaid output\");\n }\n\n private renderBox(label: string, type: string): [string, string, string, string] {\n const inner = Math.max(label.length, type.length + 2);\n const pad = (s: string) => s.padEnd(inner);\n return [\n `┌${\"─\".repeat(inner + 2)}┐`,\n `│ ${pad(label)} │`,\n `│ ${pad(`(${type})`)} │`,\n `└${\"─\".repeat(inner + 2)}┘`,\n ];\n }\n\n private renderFork(id: string, nodeIds: string[]): string[] {\n const miniBoxLine = nodeIds.map((nid) => {\n const w = nid.length + 2;\n return `┌${\"─\".repeat(w)}┐`;\n }).join(\"\");\n const miniMidLine = nodeIds.map((nid) => `│ ${nid} │`).join(\"\");\n const miniBotLine = nodeIds.map((nid) => {\n const w = nid.length + 2;\n return `└${\"─\".repeat(w)}┘`;\n }).join(\"\");\n const contentWidth = Math.max(id.length + 2, miniMidLine.length + 2);\n const padCenter = (s: string) => {\n const leftPad = Math.floor((contentWidth - s.length) / 2);\n return \" \".repeat(Math.max(0, leftPad)) + s;\n };\n\n const dashesTotal = contentWidth - 1; // -1 for the ┴ character\n const leftDashes = Math.floor(dashesTotal / 2);\n const rightDashes = dashesTotal - leftDashes;\n\n return [\n \" \".repeat(Math.floor(contentWidth / 2)) + \"│\",\n `┌${\"─\".repeat(leftDashes)}┴${\"─\".repeat(rightDashes)}┐`,\n `│${padCenter(id)}${\" \".repeat(Math.max(0, contentWidth - padCenter(id).length))}│`,\n `│${padCenter(miniBoxLine)}${\" \".repeat(Math.max(0, contentWidth - padCenter(miniBoxLine).length))}│`,\n `│${padCenter(miniMidLine)}${\" \".repeat(Math.max(0, contentWidth - padCenter(miniMidLine).length))}│`,\n `│${padCenter(miniBotLine)}${\" \".repeat(Math.max(0, contentWidth - padCenter(miniBotLine).length))}│`,\n `└${\"─\".repeat(contentWidth)}┘`,\n ];\n }\n\n private computeOffset(boxes: [string, string, string, string][], idx: number): number {\n let offset = 0;\n for (let i = 0; i < idx; i++) {\n offset += boxes[i][0].length + 5; // 5 = \" \" or \" ──→ \"\n }\n return offset;\n }\n\n private topologicalSort(graph: GraphDescriptor): string[] {\n const adjacency = new Map<string, string[]>();\n const inDegree = new Map<string, number>();\n for (const n of graph.nodes) {\n adjacency.set(n.id, []);\n inDegree.set(n.id, 0);\n }\n for (const e of graph.edges) {\n adjacency.get(e.from)?.push(e.to);\n inDegree.set(e.to, (inDegree.get(e.to) ?? 0) + 1);\n }\n const queue = graph.nodes.filter((n) => (inDegree.get(n.id) ?? 0) === 0).map((n) => n.id);\n const result: string[] = [];\n while (queue.length > 0) {\n const id = queue.shift()!;\n result.push(id);\n for (const next of adjacency.get(id) ?? []) {\n const deg = (inDegree.get(next) ?? 1) - 1;\n inDegree.set(next, deg);\n if (deg === 0) queue.push(next);\n }\n }\n return result;\n }\n}\n","// =============================================================================\n// MermaidGraphAdapter — Renders a GraphDescriptor as Mermaid flowchart syntax\n// =============================================================================\n\nimport type {\n GraphVisualizationPort,\n GraphDescriptor,\n} from \"../../ports/graph-visualization.port.js\";\n\nexport class MermaidGraphAdapter implements GraphVisualizationPort {\n toAscii(_graph: GraphDescriptor): string {\n throw new Error(\"Use AsciiGraphAdapter for ASCII output\");\n }\n\n toMermaid(graph: GraphDescriptor): string {\n const lines: string[] = [\"graph LR\"];\n const forkNodeIds = new Set(graph.forks.flatMap((f) => f.nodeIds));\n const sanitize = (id: string) => id.replace(/-/g, \"_\");\n\n // Node declarations (skip fork-internal nodes, they go inside subgraph)\n for (const node of graph.nodes) {\n if (forkNodeIds.has(node.id)) continue;\n const sid = sanitize(node.id);\n const label = node.label ?? node.id;\n lines.push(` ${sid}[${label}<br>${node.type}]`);\n }\n\n // Edges\n for (const edge of graph.edges) {\n lines.push(` ${sanitize(edge.from)} --> ${sanitize(edge.to)}`);\n }\n\n // Forks as subgraphs\n for (const fork of graph.forks) {\n lines.push(` subgraph ${fork.id}`);\n for (const nid of fork.nodeIds) {\n const node = graph.nodes.find((n) => n.id === nid);\n const label = node?.label ?? nid;\n const type = node?.type ?? \"agent\";\n lines.push(` ${sanitize(nid)}[${label}<br>${type}]`);\n }\n lines.push(\" end\");\n }\n\n return lines.join(\"\\n\");\n }\n}\n"],"mappings":"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","names":[]}
|