@xenolithengine/graph-plugin-runtime 0.7.0-beta.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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +60 -0
  3. package/dist/editor/output-widget.d.ts +3 -0
  4. package/dist/editor/output-widget.d.ts.map +1 -0
  5. package/dist/editor/output-widget.js +43 -0
  6. package/dist/editor/output-widget.js.map +1 -0
  7. package/dist/editor/plugin.d.ts +3 -0
  8. package/dist/editor/plugin.d.ts.map +1 -0
  9. package/dist/editor/plugin.js +115 -0
  10. package/dist/editor/plugin.js.map +1 -0
  11. package/dist/editor/runtime-bridge.d.ts +6 -0
  12. package/dist/editor/runtime-bridge.d.ts.map +1 -0
  13. package/dist/editor/runtime-bridge.js +24 -0
  14. package/dist/editor/runtime-bridge.js.map +1 -0
  15. package/dist/editor/schema-sync.d.ts +28 -0
  16. package/dist/editor/schema-sync.d.ts.map +1 -0
  17. package/dist/editor/schema-sync.js +70 -0
  18. package/dist/editor/schema-sync.js.map +1 -0
  19. package/dist/editor/schemas.d.ts +28 -0
  20. package/dist/editor/schemas.d.ts.map +1 -0
  21. package/dist/editor/schemas.js +205 -0
  22. package/dist/editor/schemas.js.map +1 -0
  23. package/dist/editor/struct-widget.d.ts +37 -0
  24. package/dist/editor/struct-widget.d.ts.map +1 -0
  25. package/dist/editor/struct-widget.js +242 -0
  26. package/dist/editor/struct-widget.js.map +1 -0
  27. package/dist/index.d.ts +16 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +13 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/model/allocate-graph.d.ts +57 -0
  32. package/dist/model/allocate-graph.d.ts.map +1 -0
  33. package/dist/model/allocate-graph.js +209 -0
  34. package/dist/model/allocate-graph.js.map +1 -0
  35. package/dist/model/allocate.d.ts +3 -0
  36. package/dist/model/allocate.d.ts.map +1 -0
  37. package/dist/model/allocate.js +47 -0
  38. package/dist/model/allocate.js.map +1 -0
  39. package/dist/model/mandelbrot-graph.d.ts +8 -0
  40. package/dist/model/mandelbrot-graph.d.ts.map +1 -0
  41. package/dist/model/mandelbrot-graph.js +146 -0
  42. package/dist/model/mandelbrot-graph.js.map +1 -0
  43. package/dist/model/spawn-graph.d.ts +31 -0
  44. package/dist/model/spawn-graph.d.ts.map +1 -0
  45. package/dist/model/spawn-graph.js +117 -0
  46. package/dist/model/spawn-graph.js.map +1 -0
  47. package/dist/vm/codegen.d.ts +12 -0
  48. package/dist/vm/codegen.d.ts.map +1 -0
  49. package/dist/vm/codegen.js +303 -0
  50. package/dist/vm/codegen.js.map +1 -0
  51. package/dist/vm/collection.d.ts +8 -0
  52. package/dist/vm/collection.d.ts.map +1 -0
  53. package/dist/vm/collection.js +129 -0
  54. package/dist/vm/collection.js.map +1 -0
  55. package/dist/vm/compiler.bench.d.ts +2 -0
  56. package/dist/vm/compiler.bench.d.ts.map +1 -0
  57. package/dist/vm/compiler.bench.js +35 -0
  58. package/dist/vm/compiler.bench.js.map +1 -0
  59. package/dist/vm/compiler.d.ts +14 -0
  60. package/dist/vm/compiler.d.ts.map +1 -0
  61. package/dist/vm/compiler.js +190 -0
  62. package/dist/vm/compiler.js.map +1 -0
  63. package/dist/vm/interpreter.d.ts +87 -0
  64. package/dist/vm/interpreter.d.ts.map +1 -0
  65. package/dist/vm/interpreter.js +155 -0
  66. package/dist/vm/interpreter.js.map +1 -0
  67. package/dist/vm/primitives.d.ts +4 -0
  68. package/dist/vm/primitives.d.ts.map +1 -0
  69. package/dist/vm/primitives.js +436 -0
  70. package/dist/vm/primitives.js.map +1 -0
  71. package/dist/vm/value.d.ts +7 -0
  72. package/dist/vm/value.d.ts.map +1 -0
  73. package/dist/vm/value.js +28 -0
  74. package/dist/vm/value.js.map +1 -0
  75. package/dist/vm/wasm-codegen.bench.d.ts +2 -0
  76. package/dist/vm/wasm-codegen.bench.d.ts.map +1 -0
  77. package/dist/vm/wasm-codegen.bench.js +81 -0
  78. package/dist/vm/wasm-codegen.bench.js.map +1 -0
  79. package/dist/vm/wasm-codegen.d.ts +12 -0
  80. package/dist/vm/wasm-codegen.d.ts.map +1 -0
  81. package/dist/vm/wasm-codegen.js +352 -0
  82. package/dist/vm/wasm-codegen.js.map +1 -0
  83. package/package.json +57 -0
@@ -0,0 +1,28 @@
1
+ // The runtime value model. `exec` is control flow, NOT a value — only data pins carry these.
2
+ // Collections (agents / units / events) are just typed arrays, so the Array primitives apply to all.
3
+ export function asNumber(v) {
4
+ if (typeof v === 'number')
5
+ return Number.isFinite(v) ? v : 0;
6
+ if (typeof v === 'boolean')
7
+ return v ? 1 : 0;
8
+ if (typeof v === 'string') {
9
+ const n = Number(v);
10
+ return Number.isFinite(n) ? n : 0;
11
+ }
12
+ return 0;
13
+ }
14
+ export function asBool(v) {
15
+ if (typeof v === 'boolean')
16
+ return v;
17
+ if (typeof v === 'number')
18
+ return v !== 0;
19
+ if (typeof v === 'string')
20
+ return v.length > 0;
21
+ if (Array.isArray(v))
22
+ return v.length > 0;
23
+ return false;
24
+ }
25
+ export function asArray(v) {
26
+ return Array.isArray(v) ? v : [];
27
+ }
28
+ //# sourceMappingURL=value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.js","sourceRoot":"","sources":["../../src/vm/value.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,qGAAqG;AAIrG,MAAM,UAAU,QAAQ,CAAC,CAAsB;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAsB;IAC3C,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IACpC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACzC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACzC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAsB;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wasm-codegen.bench.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-codegen.bench.d.ts","sourceRoot":"","sources":["../../src/vm/wasm-codegen.bench.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ // WASM vs JS-codegen vs interp on a numeric graph. The fairqueue graphs are string-heavy →
2
+ // JS wins there; here we test what WASM was designed for — tight f64 math.
3
+ import { bench, describe } from 'vitest';
4
+ import { Runtime } from './interpreter.js';
5
+ import { BUILTIN_PRIMITIVES } from './primitives.js';
6
+ import { codegen } from './codegen.js';
7
+ import { wasmCodegen } from './wasm-codegen.js';
8
+ const DEFS = [...BUILTIN_PRIMITIVES];
9
+ const ein = (id) => ({ id, kind: 'exec', direction: 'in', type: 'exec' });
10
+ const eout = (id) => ({ id, kind: 'exec', direction: 'out', type: 'exec' });
11
+ const din = (id) => ({ id, kind: 'data', direction: 'in', type: 'scalar' });
12
+ const dout = (id) => ({ id, kind: 'data', direction: 'out', type: 'scalar' });
13
+ const edge = (fn, fp, tn, tp) => ({ from: { node: fn, pin: fp }, to: { node: tn, pin: tp } });
14
+ /** 200-node Add chain: 1+2+3+...+200. Hot-path numeric — WASM territory. */
15
+ function bigAdd() {
16
+ const nodes = [
17
+ { id: 'tick', type: 'Tick', pins: [eout('out')] },
18
+ { id: 'c0', type: 'Const', pins: [dout('out')], state: { value: 1 } },
19
+ ];
20
+ const edges = [];
21
+ let prev = 'c0';
22
+ for (let i = 1; i < 200; i++) {
23
+ const cId = `c${i}`, aId = `a${i}`;
24
+ nodes.push({ id: cId, type: 'Const', pins: [dout('out')], state: { value: i + 1 } });
25
+ nodes.push({ id: aId, type: 'Add', pins: [din('a'), din('b'), dout('out')] });
26
+ edges.push(edge(prev, 'out', aId, 'a'));
27
+ edges.push(edge(cId, 'out', aId, 'b'));
28
+ prev = aId;
29
+ }
30
+ nodes.push({ id: 'sv', type: 'SetVar', pins: [ein('in'), din('v'), eout('out')], state: { name: 'sum' } });
31
+ edges.push(edge('tick', 'out', 'sv', 'in'));
32
+ edges.push(edge(prev, 'out', 'sv', 'v'));
33
+ return { nodes, edges };
34
+ }
35
+ /** Mixed math: 100 nodes of alternating Add/Mul/Sub/Floor. Closer to a real DSP/ML inner loop. */
36
+ function mixedMath() {
37
+ const nodes = [
38
+ { id: 'tick', type: 'Tick', pins: [eout('out')] },
39
+ { id: 'getX', type: 'GetVar', pins: [dout('out')], state: { name: 'x' } },
40
+ ];
41
+ const edges = [];
42
+ let prev = 'getX';
43
+ for (let i = 0; i < 100; i++) {
44
+ const op = ['Add', 'Mul', 'Sub', 'Floor'][i % 4];
45
+ const cId = `c${i}`, nId = `n${i}`;
46
+ if (op === 'Floor') {
47
+ nodes.push({ id: nId, type: 'Floor', pins: [din('n'), dout('out')] });
48
+ edges.push(edge(prev, 'out', nId, 'n'));
49
+ }
50
+ else {
51
+ nodes.push({ id: cId, type: 'Const', pins: [dout('out')], state: { value: 1.0001 } });
52
+ nodes.push({ id: nId, type: op, pins: [din('a'), din('b'), dout('out')] });
53
+ edges.push(edge(prev, 'out', nId, 'a'));
54
+ edges.push(edge(cId, 'out', nId, 'b'));
55
+ }
56
+ prev = nId;
57
+ }
58
+ nodes.push({ id: 'sv', type: 'SetVar', pins: [ein('in'), din('v'), eout('out')], state: { name: 'x' } });
59
+ edges.push(edge('tick', 'out', 'sv', 'in'));
60
+ edges.push(edge(prev, 'out', 'sv', 'v'));
61
+ return { nodes, edges };
62
+ }
63
+ describe('200-node Add chain — interp vs JS codegen vs WASM', () => {
64
+ const G = bigAdd();
65
+ const rt = new Runtime(DEFS);
66
+ const cg = codegen(G, DEFS);
67
+ const wg = wasmCodegen(G, DEFS);
68
+ bench('interp', () => { rt.tick(G); });
69
+ bench('codegen-js', () => { cg.tick(); });
70
+ bench('codegen-wasm', () => { wg.tick(); });
71
+ });
72
+ describe('100-node mixed math (Add/Mul/Sub/Floor) — interp vs JS codegen vs WASM', () => {
73
+ const G = mixedMath();
74
+ const rt = new Runtime(DEFS);
75
+ const cg = codegen(G, DEFS);
76
+ const wg = wasmCodegen(G, DEFS);
77
+ bench('interp', () => { rt.tick(G); });
78
+ bench('codegen-js', () => { cg.tick(); });
79
+ bench('codegen-wasm', () => { wg.tick(); });
80
+ });
81
+ //# sourceMappingURL=wasm-codegen.bench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-codegen.bench.js","sourceRoot":"","sources":["../../src/vm/wasm-codegen.bench.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { RtGraph, NodeDef } from './interpreter.js';
2
+ export declare function canCompileToWasm(graph: RtGraph): boolean;
3
+ export interface WasmGraph {
4
+ tick(entryType?: string): void;
5
+ getVar(name: string): number | undefined;
6
+ setVar(name: string, value: number): void;
7
+ reset(): void;
8
+ /** Raw module bytes — handy for the test/bench to assert "we actually emitted WASM". */
9
+ readonly bytes: Uint8Array;
10
+ }
11
+ export declare function wasmCodegen(graph: RtGraph, _defs: ReadonlyArray<NodeDef>): WasmGraph;
12
+ //# sourceMappingURL=wasm-codegen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-codegen.d.ts","sourceRoot":"","sources":["../../src/vm/wasm-codegen.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAiB,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAuMvE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxD;AAID,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,KAAK,IAAI,IAAI,CAAA;IACb,wFAAwF;IACxF,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAC3B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CA4FpF"}
@@ -0,0 +1,352 @@
1
+ // Phase 3 — WebAssembly code generator. Emits a raw WASM binary (no deps, no wabt) for the
2
+ // NUMERIC SUBSET of the IR: graphs whose vars + edges carry f64 only and whose nodes are
3
+ // drawn from {Tick, Sequence, SetVar, GetVar, Const, Add, Sub, Mul, Floor, Gt, Gte, Eq}.
4
+ //
5
+ // Why numeric-only: WASM has no native strings/arrays/objects. GC-types exist but the JS
6
+ // interop bridge eats most of the speedup. For audio DSP, ML inference, particle systems —
7
+ // graphs where the hot path is f64 math — WASM JITs to near-native code. Mixed graphs (the
8
+ // current fairqueue/spawn) should keep using `codegen.ts` (the JS path).
9
+ //
10
+ // Equivalence + bench live in `wasm-codegen.test.ts` / `wasm-codegen.bench.ts`.
11
+ const dataIns = (n) => n.pins.filter((p) => p.kind === 'data' && p.direction === 'in');
12
+ const dataOuts = (n) => n.pins.filter((p) => p.kind === 'data' && p.direction === 'out');
13
+ const execOuts = (n) => n.pins.filter((p) => p.kind === 'exec' && p.direction === 'out');
14
+ function buildIR(graph) {
15
+ const nodes = graph.nodes.map((n, i) => ({
16
+ id: n.id, type: n.type, index: i, state: n.state,
17
+ dataIns: dataIns(n), dataOuts: dataOuts(n), execOuts: execOuts(n),
18
+ incoming: [], execTarget: [],
19
+ }));
20
+ const byId = new Map(nodes.map((n) => [n.id, n]));
21
+ for (const n of nodes) {
22
+ n.incoming = new Array(n.dataIns.length).fill(null);
23
+ n.execTarget = new Array(n.execOuts.length).fill(-1);
24
+ }
25
+ for (const e of graph.edges) {
26
+ const dst = byId.get(e.to.node);
27
+ const src = byId.get(e.from.node);
28
+ if (!dst || !src)
29
+ continue;
30
+ const inIdx = dst.dataIns.findIndex((p) => p.id === e.to.pin);
31
+ const outIdx = src.dataOuts.findIndex((p) => p.id === e.from.pin);
32
+ if (inIdx >= 0 && outIdx >= 0 && dst.incoming[inIdx] === null)
33
+ dst.incoming[inIdx] = { srcIdx: src.index, outIdx };
34
+ const eOut = src.execOuts.findIndex((p) => p.id === e.from.pin);
35
+ if (eOut >= 0)
36
+ src.execTarget[eOut] = dst.index;
37
+ }
38
+ const varIndex = new Map();
39
+ for (const n of nodes) {
40
+ if ((n.type === 'GetVar' || n.type === 'SetVar') && typeof n.state?.['name'] === 'string') {
41
+ const name = n.state['name'];
42
+ if (!varIndex.has(name))
43
+ varIndex.set(name, varIndex.size);
44
+ }
45
+ }
46
+ const entriesByType = new Map();
47
+ for (const n of nodes) {
48
+ if (n.type !== 'Tick' && n.type !== 'Init')
49
+ continue;
50
+ const arr = entriesByType.get(n.type) ?? [];
51
+ arr.push(n.index);
52
+ entriesByType.set(n.type, arr);
53
+ }
54
+ return { nodes, varIndex, entriesByType };
55
+ }
56
+ // --- binary builder -----------------------------------------------------------------------------
57
+ /** Minimal raw WASM emitter — we only ever produce the bytes we actually use here, no general
58
+ * WAT assembler. ULEB128 for unsigned ints + section framing per the WebAssembly 1.0 spec. */
59
+ class WB {
60
+ bytes = [];
61
+ u8(b) { this.bytes.push(b & 0xff); }
62
+ bytesRaw(arr) { for (const b of arr)
63
+ this.u8(b); }
64
+ uleb(n) { while (n >= 0x80) {
65
+ this.u8((n & 0x7f) | 0x80);
66
+ n >>>= 7;
67
+ } this.u8(n & 0x7f); }
68
+ // signed LEB128 (used for i32.const operand — unused here but kept for completeness)
69
+ sleb(n) { let more = true; while (more) {
70
+ const b = n & 0x7f;
71
+ n >>= 7;
72
+ const sign = b & 0x40;
73
+ if ((n === 0 && !sign) || (n === -1 && sign))
74
+ more = false;
75
+ else
76
+ this.u8(b | 0x80);
77
+ if (!more)
78
+ this.u8(b);
79
+ } }
80
+ f64(x) { const a = new ArrayBuffer(8); new DataView(a).setFloat64(0, x, true); const u = new Uint8Array(a); for (let i = 0; i < 8; i++)
81
+ this.u8(u[i]); }
82
+ /** Wrap `inner` as a length-prefixed payload. Used for sections + function bodies. */
83
+ section(id, inner) {
84
+ this.u8(id);
85
+ this.uleb(inner.bytes.length);
86
+ this.bytesRaw(inner.bytes);
87
+ }
88
+ result() { return new Uint8Array(this.bytes); }
89
+ }
90
+ // WASM opcodes used here. Spec section 5.4.
91
+ const OP = {
92
+ END: 0x0b,
93
+ LOCAL_GET: 0x20, LOCAL_SET: 0x21,
94
+ I32_CONST: 0x41, I32_ADD: 0x6a,
95
+ F64_LOAD: 0x2b, F64_STORE: 0x39, F64_CONST: 0x44,
96
+ F64_ADD: 0xa0, F64_SUB: 0xa1, F64_MUL: 0xa2, F64_DIV: 0xa3,
97
+ F64_FLOOR: 0x9c,
98
+ F64_EQ: 0x61, F64_NE: 0x62, F64_LT: 0x63, F64_GT: 0x64, F64_LE: 0x65, F64_GE: 0x66,
99
+ CALL: 0x10,
100
+ };
101
+ // --- emitters -----------------------------------------------------------------------------------
102
+ /** Numeric primitives are emitted as a postorder bytecode stream (WASM is a stack machine).
103
+ * Each pure pull pushes one f64 onto the value stack; each exec node consumes its inputs +
104
+ * optionally calls another node fn (for Sequence-style flow). */
105
+ function emitPullExpr(ir, n, outIdx, code) {
106
+ switch (n.type) {
107
+ case 'Const': {
108
+ const v = n.state?.['value'];
109
+ code.u8(OP.F64_CONST);
110
+ code.f64(typeof v === 'number' ? v : 0);
111
+ return;
112
+ }
113
+ case 'GetVar': {
114
+ const name = n.state?.['name'];
115
+ if (typeof name !== 'string') {
116
+ code.u8(OP.F64_CONST);
117
+ code.f64(0);
118
+ return;
119
+ }
120
+ const vi = ir.varIndex.get(name) ?? -1;
121
+ if (vi < 0) {
122
+ code.u8(OP.F64_CONST);
123
+ code.f64(0);
124
+ return;
125
+ }
126
+ // address = vi * 8, then f64.load align=3 offset=0
127
+ code.u8(OP.I32_CONST);
128
+ code.uleb(vi * 8);
129
+ code.u8(OP.F64_LOAD);
130
+ code.u8(3);
131
+ code.uleb(0);
132
+ return;
133
+ }
134
+ case 'Add':
135
+ case 'Sub':
136
+ case 'Mul': {
137
+ pullInput(ir, n, 0, code);
138
+ pullInput(ir, n, 1, code);
139
+ code.u8(n.type === 'Add' ? OP.F64_ADD : n.type === 'Sub' ? OP.F64_SUB : OP.F64_MUL);
140
+ return;
141
+ }
142
+ case 'Floor': {
143
+ pullInput(ir, n, 0, code);
144
+ code.u8(OP.F64_FLOOR);
145
+ return;
146
+ }
147
+ case 'Gt':
148
+ case 'Gte':
149
+ case 'Eq': {
150
+ // i32 (0/1) → re-extend to f64 via conversion (WASM has no direct bool-to-f64 instr;
151
+ // use f64.convert_i32_s = 0xb7). Cheap: bools live as 0.0/1.0 in our model.
152
+ pullInput(ir, n, 0, code);
153
+ pullInput(ir, n, 1, code);
154
+ code.u8(n.type === 'Gt' ? OP.F64_GT : n.type === 'Gte' ? OP.F64_GE : OP.F64_EQ);
155
+ code.u8(0xb7); // f64.convert_i32_s
156
+ return;
157
+ }
158
+ default:
159
+ // Unsupported pure node — push 0 to keep stack consistent. The graph-validity check at
160
+ // compile() time refuses to emit if any non-numeric primitive is used, so this is just
161
+ // a safety net.
162
+ code.u8(OP.F64_CONST);
163
+ code.f64(0);
164
+ }
165
+ }
166
+ function pullInput(ir, n, i, code) {
167
+ const inc = n.incoming[i];
168
+ if (!inc) {
169
+ code.u8(OP.F64_CONST);
170
+ code.f64(0);
171
+ return;
172
+ }
173
+ emitPullExpr(ir, ir.nodes[inc.srcIdx], inc.outIdx, code);
174
+ }
175
+ /** A per-node function body: SetVar/Sequence/Tick. Pure nodes are inlined into their consumers,
176
+ * so only exec nodes get a function slot. Body byte sequence assumes locals = [] and arity () → ().
177
+ * All function bodies end with `OP.END` and have a leading u32 for "number of local-decl groups"
178
+ * (always 0 here — no locals). */
179
+ function emitNodeBody(ir, n, fnIdxOf) {
180
+ const code = new WB();
181
+ code.uleb(0); // local-decl group count
182
+ switch (n.type) {
183
+ case 'Tick':
184
+ case 'Init': {
185
+ const t = n.execTarget[0];
186
+ if (t !== undefined && t >= 0) {
187
+ const fnIdx = fnIdxOf.get(t);
188
+ if (fnIdx !== undefined) {
189
+ code.u8(OP.CALL);
190
+ code.uleb(fnIdx);
191
+ }
192
+ }
193
+ break;
194
+ }
195
+ case 'Sequence': {
196
+ for (let i = 0; i < n.execTarget.length; i++) {
197
+ const t = n.execTarget[i];
198
+ if (t === undefined || t < 0)
199
+ continue;
200
+ const fnIdx = fnIdxOf.get(t);
201
+ if (fnIdx !== undefined) {
202
+ code.u8(OP.CALL);
203
+ code.uleb(fnIdx);
204
+ }
205
+ }
206
+ break;
207
+ }
208
+ case 'SetVar': {
209
+ const name = n.state?.['name'];
210
+ if (typeof name === 'string') {
211
+ const vi = ir.varIndex.get(name) ?? -1;
212
+ if (vi >= 0) {
213
+ // address = vi * 8 (i32)
214
+ code.u8(OP.I32_CONST);
215
+ code.uleb(vi * 8);
216
+ // value (f64) from input 0
217
+ pullInput(ir, n, 0, code);
218
+ // store: align=3 (8-byte aligned), offset=0
219
+ code.u8(OP.F64_STORE);
220
+ code.u8(3);
221
+ code.uleb(0);
222
+ }
223
+ }
224
+ // chain flow
225
+ const t = n.execTarget[0];
226
+ if (t !== undefined && t >= 0) {
227
+ const fnIdx = fnIdxOf.get(t);
228
+ if (fnIdx !== undefined) {
229
+ code.u8(OP.CALL);
230
+ code.uleb(fnIdx);
231
+ }
232
+ }
233
+ break;
234
+ }
235
+ }
236
+ code.u8(OP.END);
237
+ return code.result();
238
+ }
239
+ // --- the supported-set guard ---------------------------------------------------------------------
240
+ const SUPPORTED = new Set([
241
+ 'Tick', 'Init', 'Sequence', 'SetVar',
242
+ 'GetVar', 'Const', 'Add', 'Sub', 'Mul', 'Floor', 'Gt', 'Gte', 'Eq',
243
+ ]);
244
+ export function canCompileToWasm(graph) {
245
+ for (const n of graph.nodes)
246
+ if (!SUPPORTED.has(n.type))
247
+ return false;
248
+ return true;
249
+ }
250
+ export function wasmCodegen(graph, _defs) {
251
+ if (!canCompileToWasm(graph))
252
+ throw new Error('wasmCodegen: graph uses non-numeric primitives — keep on the JS codegen path');
253
+ const ir = buildIR(graph);
254
+ // Collect impure nodes that need a function slot.
255
+ const execNodes = ir.nodes.filter((n) => n.type === 'Tick' || n.type === 'Init' || n.type === 'Sequence' || n.type === 'SetVar');
256
+ const fnIdxOf = new Map();
257
+ execNodes.forEach((n, i) => fnIdxOf.set(n.index, i));
258
+ // Build the module: one type ((func)), N funcs, 1 memory exported, one tick export per entry
259
+ // (we collapse all entries into a single tick fn for simplicity — entries by type fire in order).
260
+ const module = new WB();
261
+ // Magic + version
262
+ module.bytesRaw([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]);
263
+ // ---- section 1: types ----
264
+ // Only one type: () -> ()
265
+ const typeSec = new WB();
266
+ typeSec.uleb(1); // num types
267
+ typeSec.u8(0x60);
268
+ typeSec.uleb(0);
269
+ typeSec.uleb(0); // (func [] -> [])
270
+ module.section(1, typeSec);
271
+ // ---- section 3: functions ----
272
+ // N functions, all of type 0
273
+ const funcSec = new WB();
274
+ funcSec.uleb(execNodes.length);
275
+ for (let i = 0; i < execNodes.length; i++)
276
+ funcSec.uleb(0);
277
+ module.section(3, funcSec);
278
+ // ---- section 5: memory ----
279
+ // 1 page initial, no max
280
+ const memSec = new WB();
281
+ memSec.uleb(1);
282
+ memSec.u8(0x00);
283
+ memSec.uleb(1);
284
+ module.section(5, memSec);
285
+ // ---- section 7: exports ----
286
+ // Export every entry-node fn under names "tick", "tick1", ... + "memory".
287
+ // For prototype, callers only invoke "tick".
288
+ const tickIdxs = [];
289
+ for (const [, idxs] of ir.entriesByType)
290
+ for (const ni of idxs) {
291
+ const fi = fnIdxOf.get(ni);
292
+ if (fi !== undefined)
293
+ tickIdxs.push(fi);
294
+ }
295
+ const exportSec = new WB();
296
+ const exportCount = tickIdxs.length + 1; // +1 for memory
297
+ exportSec.uleb(exportCount);
298
+ for (let i = 0; i < tickIdxs.length; i++) {
299
+ const name = i === 0 ? 'tick' : `tick${i}`;
300
+ const nameBytes = new TextEncoder().encode(name);
301
+ exportSec.uleb(nameBytes.length);
302
+ exportSec.bytesRaw(Array.from(nameBytes));
303
+ exportSec.u8(0x00);
304
+ exportSec.uleb(tickIdxs[i]);
305
+ }
306
+ const mem = new TextEncoder().encode('memory');
307
+ exportSec.uleb(mem.length);
308
+ exportSec.bytesRaw(Array.from(mem));
309
+ exportSec.u8(0x02);
310
+ exportSec.uleb(0);
311
+ module.section(7, exportSec);
312
+ // ---- section 10: code ----
313
+ const codeSec = new WB();
314
+ codeSec.uleb(execNodes.length);
315
+ for (const n of execNodes) {
316
+ const body = emitNodeBody(ir, n, fnIdxOf);
317
+ codeSec.uleb(body.length);
318
+ codeSec.bytesRaw(Array.from(body));
319
+ }
320
+ module.section(10, codeSec);
321
+ const bytes = module.result();
322
+ // `BufferSource` in the DOM lib is strict about ArrayBuffer (not SharedArrayBuffer); our bytes
323
+ // come from a fresh Uint8Array so the buffer is always plain — cast through `as BufferSource`.
324
+ const wasmMod = new WebAssembly.Module(bytes);
325
+ const instance = new WebAssembly.Instance(wasmMod, {});
326
+ const exports = instance.exports;
327
+ const view = new DataView(exports.memory.buffer);
328
+ const callTick = (entryType) => {
329
+ // First tick exported is always 'tick'; additional are tick1/tick2... but for typical use
330
+ // entries are of one type ('Tick'), so just call it.
331
+ if (entryType === 'Init' && typeof exports['init'] === 'function')
332
+ exports['init']();
333
+ else if (typeof exports['tick'] === 'function')
334
+ exports['tick']();
335
+ };
336
+ return {
337
+ bytes,
338
+ tick(entryType = 'Tick') { callTick(entryType); },
339
+ getVar(name) { const vi = ir.varIndex.get(name); return vi === undefined ? undefined : view.getFloat64(vi * 8, true); },
340
+ setVar(name, value) {
341
+ let vi = ir.varIndex.get(name);
342
+ if (vi === undefined) {
343
+ vi = ir.varIndex.size;
344
+ ir.varIndex.set(name, vi);
345
+ }
346
+ view.setFloat64(vi * 8, value, true);
347
+ },
348
+ reset() { for (let i = 0; i < ir.varIndex.size * 8; i += 8)
349
+ view.setFloat64(i, 0, true); },
350
+ };
351
+ }
352
+ //# sourceMappingURL=wasm-codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-codegen.js","sourceRoot":"","sources":["../../src/vm/wasm-codegen.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@xenolithengine/graph-plugin-runtime",
3
+ "version": "0.7.0-beta.0",
4
+ "description": "Blueprint-style node runtime for XenolithGraph: typed exec/data primitives + a headless interpreter that runs a graph as a simulation. Installs as an editor plugin.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "sideEffects": false,
21
+ "dependencies": {
22
+ "@xenolithengine/graph-core": "0.7.0-beta.0",
23
+ "@xenolithengine/graph-editor": "0.7.0-beta.0"
24
+ },
25
+ "devDependencies": {
26
+ "typescript": "^5.7.0",
27
+ "vitest": "^3.0.0"
28
+ },
29
+ "keywords": [
30
+ "node-editor",
31
+ "runtime",
32
+ "blueprint",
33
+ "executor",
34
+ "dataflow"
35
+ ],
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/XenolithEngine/xenolith-graph.git",
42
+ "directory": "packages/plugin-runtime"
43
+ },
44
+ "homepage": "https://xenolithengine.github.io/xenolith-graph/",
45
+ "bugs": {
46
+ "url": "https://github.com/XenolithEngine/xenolith-graph/issues"
47
+ },
48
+ "author": "XenolithEngine",
49
+ "scripts": {
50
+ "build": "tsc -b",
51
+ "dev": "tsc -b --watch",
52
+ "test": "vitest run",
53
+ "test:watch": "vitest",
54
+ "lint": "eslint src",
55
+ "typecheck": "tsc --noEmit"
56
+ }
57
+ }