@metaharness/kernel 0.1.2 → 0.1.4

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/README.md CHANGED
@@ -9,7 +9,7 @@ A Rust kernel compiled to two npm-shippable targets:
9
9
  - **WebAssembly** (primary distribution — runs on Node, browser, Cloudflare Workers, Deno, Bun, edge)
10
10
  - **NAPI-RS native** (per-platform `.node` binaries — escape hatch for Node hot paths)
11
11
 
12
- At load time, `loadKernel()` prefers the per-platform native package; falls back to wasm.
12
+ At load time, `loadKernel()` prefers an installed per-platform native package, then wasm, then the dependency-free JavaScript backend.
13
13
 
14
14
  ## Install
15
15
 
@@ -17,7 +17,7 @@ At load time, `loadKernel()` prefers the per-platform native package; falls back
17
17
  npm install @metaharness/kernel
18
18
  ```
19
19
 
20
- The native packages (`@metaharness/kernel-darwin-arm64`, `-linux-x64-gnu`, etc.) are declared as `optionalDependencies` — npm installs only the one for your platform.
20
+ The native packages (`@metaharness/kernel-darwin-arm64`, `-linux-x64-gnu`, etc.) are optional peers. They are not yet available from the public npm registry (checked 2026-10-27), so they are not installed automatically. The native loader still discovers a compatible package when explicitly installed; otherwise wasm or JavaScript is used. Restore automatic native installation only after the platform packages are published and clean npm 10/11 installs are verified. This source change does not alter already-published kernel versions.
21
21
 
22
22
  ## Usage
23
23
 
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export type { McpServerSpec, ToolSpec, AgentSpec, HookSpec, HarnessSpec, HostAdapter } from './types.js';
2
+ export { SessionLog } from './session.js';
3
+ export type { SessionEvent } from './session.js';
2
4
  export interface KernelInfo {
3
5
  version: string;
4
6
  git_sha: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzG,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,UAAU,IAAI,UAAU,CAAC;IACzB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7C,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;CACnC;AAuHD;;;GAGG;AACH;gFACgF;AAChF,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAwCzD;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAIpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,UAAU,IAAI,UAAU,CAAC;IACzB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7C,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;CACnC;AAuHD;;;GAGG;AACH;gFACgF;AAChF,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAwCzD;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAIpE"}
package/dist/index.js CHANGED
@@ -9,6 +9,8 @@
9
9
  // third backend: a dependency-free pure-JS implementation. native > wasm > js,
10
10
  // but js is the floor — the kernel is always loadable. (ADR-002a §fallback.)
11
11
  import { createRequire } from 'node:module';
12
+ // ADR-246 §2.3: recoverable, forkable session log primitive.
13
+ export { SessionLog } from './session.js';
12
14
  let _cached = null;
13
15
  // GH #20/#22: remember WHY a higher-tier backend was unavailable so `doctor`
14
16
  // and a requested-but-missing backend can report the actual reason instead of
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ export interface SessionEvent {
2
+ /** Per-branch 0-based monotonic index. */
3
+ index: number;
4
+ /** Branch ID this event belongs to. */
5
+ branch: string;
6
+ /** Fork point — present only on the first event of a non-root branch. */
7
+ parent?: {
8
+ branch: string;
9
+ index: number;
10
+ };
11
+ /** Event kind (free-form discriminator, e.g. "turn", "tool", "note"). */
12
+ kind: string;
13
+ /** Free-form event payload. */
14
+ payload: unknown;
15
+ }
16
+ /** Canonical JSON: recursively key-sorted objects, arrays in order, no
17
+ * whitespace. `undefined` object values are dropped (matching
18
+ * JSON.stringify). This is the byte input to the state-hash fold.
19
+ *
20
+ * Keys sort by UTF-8 BYTE order (not UTF-16 code-unit order, which the
21
+ * default `.sort()` would use) to match the Rust mirror, whose `&str`
22
+ * ordering is byte-wise. The two orders diverge for keys mixing BMP-high
23
+ * characters (>= U+E000) with astral characters. */
24
+ export declare function canonicalJson(v: unknown): string;
25
+ /**
26
+ * Crash-recoverable, forkable session log (ADR-246 §2.3). One JSONL file may
27
+ * carry many branches; each SessionLog instance appends to ONE active branch.
28
+ * `fork()` returns a sibling over the same file/state on a new branch.
29
+ */
30
+ export declare class SessionLog {
31
+ private state;
32
+ /** Active branch this instance appends to. */
33
+ readonly branch: string;
34
+ constructor(path: string, branch?: string);
35
+ /** Internal: build an instance over existing shared state (open/fork). */
36
+ private static over;
37
+ get path(): string;
38
+ /**
39
+ * Resume a session: read the JSONL log, validate it, and reconstruct state.
40
+ * Throws with the first 'session: '-prefixed error on an invalid log.
41
+ * `branch` selects the active branch (default 'main').
42
+ */
43
+ static open(path: string, branch?: string): Promise<SessionLog>;
44
+ /** Append an event on the active branch, assigning the next monotonic
45
+ * index. The first event of a forked branch carries the fork's parent ref.
46
+ * Safe to call without awaiting the previous call: concurrent appends on
47
+ * this instance (or a fork() sibling sharing this state) are serialized
48
+ * via `enqueue` and assigned distinct, monotonic indices in call order. */
49
+ append(kind: string, payload: unknown, opts?: {
50
+ parent?: {
51
+ branch: string;
52
+ index: number;
53
+ };
54
+ }): Promise<SessionEvent>;
55
+ /** The unserialized body of `append()` — only ever runs for one caller at
56
+ * a time per `LogState`, via `enqueue`. Not called directly outside this
57
+ * file; `fork()` also runs its own synthetic first event through this. */
58
+ private appendLocked;
59
+ /**
60
+ * Fork at `atIndex` on THIS instance's active branch: returns a SessionLog
61
+ * over the same file (and shared state) whose active branch is `newBranch`.
62
+ * Immediately appends the new branch's synthetic first event (matching the
63
+ * Rust mirror's `fork`): index 0, parent {branch: this.branch, index:
64
+ * atIndex}, kind 'fork', payload null.
65
+ */
66
+ fork(atIndex: number, newBranch: string): Promise<SessionLog>;
67
+ /** The lineage of a branch, root → tip: the branch's own events preceded by
68
+ * its parent lineage truncated at the fork point, recursively. */
69
+ private lineage;
70
+ /**
71
+ * State hash over the branch lineage (root → tip). Exact fold (mirrored in
72
+ * the file-header comment; a Rust mirror must reproduce it):
73
+ * hexPrev = ''; for each event: hexPrev = hex(sha256(utf8(hexPrev + canonicalJson(event))))
74
+ * Returns lowercase hex; the hash of an empty lineage is ''.
75
+ */
76
+ stateHash(branch?: string): string;
77
+ /** Deterministic replay of a branch lineage: event count + state hash. */
78
+ replay(branch?: string): {
79
+ eventCount: number;
80
+ stateHash: string;
81
+ };
82
+ /** Re-read the file from disk and report every validation error
83
+ * ('session: '-prefixed, corrupted lines cited by 1-based line number).
84
+ * An empty array means the on-disk log is valid. */
85
+ validate(): Promise<string[]>;
86
+ }
87
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;oDAOoD;AACpD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAQhD;AAkLD;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAW;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS;IAYzC,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,IAAI;IAMnB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IASrE;;;;+EAI2E;IACrE,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GACpD,OAAO,CAAC,YAAY,CAAC;IAIxB;;8EAE0E;YAC5D,YAAY;IAkC1B;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBnE;sEACkE;IAClE,OAAO,CAAC,OAAO;IAYf;;;;;OAKG;IACH,SAAS,CAAC,MAAM,GAAE,MAAoB,GAAG,MAAM;IAU/C,0EAA0E;IAC1E,MAAM,CAAC,MAAM,GAAE,MAAoB,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAI/E;;wDAEoD;IAC9C,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAKpC"}
@@ -0,0 +1,345 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Recoverable session log — ADR-246 §2.3.
4
+ //
5
+ // Append-only JSONL event log per session: every event carries a per-branch
6
+ // monotonic index and (for the first event of a forked branch) a parent
7
+ // reference {branch, index}. Replaying the log reconstructs session state
8
+ // deterministically; a state hash over the replayed lineage verifies
9
+ // integrity. Fork creates a new branch ID referencing a parent event index;
10
+ // branches replay independently (Prime Agent's /tree capability, minus the
11
+ // daemon — daemons, socket attach/detach, and kernel snapshots are
12
+ // deliberately out of scope per the ADR).
13
+ //
14
+ // Serialization contract (a Rust mirror must reproduce it byte-for-byte):
15
+ // each event is one line, JSON.stringify of an object literal built in
16
+ // EXACT key order
17
+ // index, branch, parent, kind, payload
18
+ // with `parent` (itself in key order branch, index) omitted entirely when
19
+ // absent.
20
+ //
21
+ // State-hash fold (a Rust mirror must reproduce it byte-for-byte):
22
+ // hexPrev := '' // empty string seed, NOT a digest
23
+ // for each event e in lineage order (root → tip):
24
+ // canonical := canonicalJson(e) // recursively key-sorted JSON of the event
25
+ // hexPrev := lowercaseHex(sha256(utf8(hexPrev + canonical)))
26
+ // stateHash := hexPrev
27
+ // i.e. digest_i = sha256(hex(digest_{i-1}) + canonicalJson(event_i)) as UTF-8,
28
+ // where hex(digest_0) is the empty string for the first event, and every
29
+ // digest is rendered as lowercase hex before being folded into the next step.
30
+ import { appendFile, readFile } from 'node:fs/promises';
31
+ import { existsSync } from 'node:fs';
32
+ import { createHash } from 'node:crypto';
33
+ import { Buffer } from 'node:buffer';
34
+ /** Canonical JSON: recursively key-sorted objects, arrays in order, no
35
+ * whitespace. `undefined` object values are dropped (matching
36
+ * JSON.stringify). This is the byte input to the state-hash fold.
37
+ *
38
+ * Keys sort by UTF-8 BYTE order (not UTF-16 code-unit order, which the
39
+ * default `.sort()` would use) to match the Rust mirror, whose `&str`
40
+ * ordering is byte-wise. The two orders diverge for keys mixing BMP-high
41
+ * characters (>= U+E000) with astral characters. */
42
+ export function canonicalJson(v) {
43
+ if (v === null || typeof v !== 'object')
44
+ return JSON.stringify(v) ?? 'null';
45
+ if (Array.isArray(v))
46
+ return '[' + v.map(x => canonicalJson(x)).join(',') + ']';
47
+ const rec = v;
48
+ const keys = Object.keys(rec)
49
+ .filter(k => rec[k] !== undefined)
50
+ .sort((a, b) => Buffer.compare(Buffer.from(a, 'utf8'), Buffer.from(b, 'utf8')));
51
+ return '{' + keys.map(k => JSON.stringify(k) + ':' + canonicalJson(rec[k])).join(',') + '}';
52
+ }
53
+ /** A raw unpaired surrogate: a lead surrogate not followed by a trail, or
54
+ * a trail surrogate not preceded by a lead. Rust (serde_json) cannot parse
55
+ * these — they are not valid UTF-8. */
56
+ const LONE_SURROGATE = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF])/;
57
+ /** Well-formed JSON.stringify (ES2019) never emits a raw lone surrogate:
58
+ * it renders one as a `\udXXX` escape (paired surrogates pass through as
59
+ * raw astral characters, so any surrogate escape in stringify output IS a
60
+ * lone surrogate). A genuine escape is preceded by an even number of
61
+ * backslashes; an odd run means the backslash itself is escaped text. */
62
+ const LONE_SURROGATE_ESCAPE = /(?<=(?:^|[^\\])(?:\\\\)*)\\u[dD][89abAB]/;
63
+ /** Recursively test decoded JSON data (string values AND object keys) for a
64
+ * raw unpaired surrogate. Used on the READ path, where the raw line may
65
+ * legitimately contain paired `\udXXX` escapes (valid JSON that serde_json
66
+ * accepts), so the append-path escape regex cannot be reused: after
67
+ * JSON.parse, a valid pair decodes to an astral character while a lone
68
+ * surrogate stays lone — exactly what serde_json rejects as not-UTF-8. */
69
+ function containsLoneSurrogate(v) {
70
+ if (typeof v === 'string')
71
+ return LONE_SURROGATE.test(v);
72
+ if (v === null || typeof v !== 'object')
73
+ return false;
74
+ if (Array.isArray(v))
75
+ return v.some(containsLoneSurrogate);
76
+ return Object.entries(v).some(([k, val]) => LONE_SURROGATE.test(k) || containsLoneSurrogate(val));
77
+ }
78
+ /** Serialize one event as a JSONL line in the EXACT wire key order
79
+ * (index, branch, parent, kind, payload; parent omitted when absent). */
80
+ function serializeEvent(e) {
81
+ return JSON.stringify(e.parent === undefined
82
+ ? { index: e.index, branch: e.branch, kind: e.kind, payload: e.payload }
83
+ : {
84
+ index: e.index,
85
+ branch: e.branch,
86
+ parent: { branch: e.parent.branch, index: e.parent.index },
87
+ kind: e.kind,
88
+ payload: e.payload,
89
+ });
90
+ }
91
+ /** Run `op` after every previously enqueued operation on `state` has
92
+ * settled (success or failure), and chain the queue forward the same way —
93
+ * this is the TOCTOU fix: the read-index→serialize→write→state-mutate
94
+ * sequence in `appendLocked` only ever runs for one caller at a time per
95
+ * `LogState`, in call order, closing the race `append()`/`fork()` had when
96
+ * two unawaited calls both read the same pre-increment index. */
97
+ function enqueue(state, op) {
98
+ const result = state.queue.then(op, op);
99
+ state.queue = result.then(() => undefined, () => undefined);
100
+ return result;
101
+ }
102
+ /** Parse + validate a JSONL log; returns either the reconstructed state or
103
+ * the list of 'session: '-prefixed errors (with 1-based line numbers).
104
+ *
105
+ * NOTE: the ADR-246 lockstep contract with the Rust mirror is the state
106
+ * hash plus the accept/reject decision; validation MESSAGES are
107
+ * per-language diagnostics (TS cites 1-based line numbers, Rust does not)
108
+ * and are not required to match byte-for-byte. */
109
+ function parseLog(path, raw) {
110
+ const state = {
111
+ path,
112
+ events: [],
113
+ nextIndex: new Map(),
114
+ branchParent: new Map(),
115
+ rootBranch: '',
116
+ queue: Promise.resolve(),
117
+ };
118
+ const errors = [];
119
+ const seen = new Set();
120
+ const lines = raw.split('\n');
121
+ for (let i = 0; i < lines.length; i++) {
122
+ const line = lines[i];
123
+ if (line.trim() === '')
124
+ continue; // blank / whitespace-only separators (still counted for line numbers)
125
+ const lineNo = i + 1;
126
+ let obj;
127
+ try {
128
+ obj = JSON.parse(line);
129
+ }
130
+ catch {
131
+ errors.push(`session: line ${lineNo}: corrupted line (invalid JSON)`);
132
+ continue;
133
+ }
134
+ // Mirror serde_json's accept/reject decision: a lone surrogate (decoded
135
+ // from a `\udXXX` escape — JSON.parse tolerates it, serde_json does not)
136
+ // is not representable as UTF-8, so the Rust mirror rejects the line.
137
+ if (containsLoneSurrogate(obj)) {
138
+ errors.push(`session: line ${lineNo}: corrupted line (contains an unpaired surrogate, not valid UTF-8)`);
139
+ continue;
140
+ }
141
+ const e = obj;
142
+ if (typeof e !== 'object' || e === null ||
143
+ typeof e.index !== 'number' || typeof e.branch !== 'string' ||
144
+ typeof e.kind !== 'string' || !('payload' in e) ||
145
+ (e.parent !== undefined &&
146
+ (typeof e.parent !== 'object' || e.parent === null ||
147
+ typeof e.parent.branch !== 'string' || typeof e.parent.index !== 'number'))) {
148
+ errors.push(`session: line ${lineNo}: corrupted line (not a valid session event)`);
149
+ continue;
150
+ }
151
+ const ev = e;
152
+ const key = `${ev.branch}\u0000${ev.index}`;
153
+ if (seen.has(key)) {
154
+ errors.push(`session: line ${lineNo}: duplicate event (${ev.branch}, ${ev.index})`);
155
+ continue;
156
+ }
157
+ const expected = state.nextIndex.get(ev.branch) ?? 0;
158
+ if (ev.index !== expected) {
159
+ errors.push(`session: line ${lineNo}: branch "${ev.branch}" index ${ev.index} is not monotonic (expected ${expected})`);
160
+ // Resync like the Rust mirror: after reporting index X, expect X+1
161
+ // next, so a single gap yields exactly ONE error, not a cascade.
162
+ seen.add(key);
163
+ state.nextIndex.set(ev.branch, ev.index + 1);
164
+ continue;
165
+ }
166
+ if (expected === 0) {
167
+ // First event of a branch: the root branch (first branch in the file)
168
+ // carries no parent; every other branch MUST reference an existing
169
+ // (branch, index) already present in the log.
170
+ if (state.events.length === 0) {
171
+ state.rootBranch = ev.branch;
172
+ if (ev.parent !== undefined) {
173
+ errors.push(`session: line ${lineNo}: root branch '${ev.branch}' must not carry a parent`);
174
+ continue;
175
+ }
176
+ }
177
+ else {
178
+ if (ev.parent === undefined) {
179
+ errors.push(`session: line ${lineNo}: first event of branch "${ev.branch}" must carry a parent reference`);
180
+ continue;
181
+ }
182
+ if (!seen.has(`${ev.parent.branch}\u0000${ev.parent.index}`)) {
183
+ errors.push(`session: line ${lineNo}: parent (${ev.parent.branch}, ${ev.parent.index}) does not exist`);
184
+ continue;
185
+ }
186
+ state.branchParent.set(ev.branch, { branch: ev.parent.branch, index: ev.parent.index });
187
+ }
188
+ }
189
+ seen.add(key);
190
+ state.events.push(ev);
191
+ state.nextIndex.set(ev.branch, expected + 1);
192
+ }
193
+ return { state, errors };
194
+ }
195
+ /**
196
+ * Crash-recoverable, forkable session log (ADR-246 §2.3). One JSONL file may
197
+ * carry many branches; each SessionLog instance appends to ONE active branch.
198
+ * `fork()` returns a sibling over the same file/state on a new branch.
199
+ */
200
+ export class SessionLog {
201
+ state;
202
+ /** Active branch this instance appends to. */
203
+ branch;
204
+ constructor(path, branch = 'main') {
205
+ this.state = {
206
+ path,
207
+ events: [],
208
+ nextIndex: new Map(),
209
+ branchParent: new Map(),
210
+ rootBranch: branch,
211
+ queue: Promise.resolve(),
212
+ };
213
+ this.branch = branch;
214
+ }
215
+ /** Internal: build an instance over existing shared state (open/fork). */
216
+ static over(state, branch) {
217
+ const log = new SessionLog(state.path, branch);
218
+ log.state = state;
219
+ return log;
220
+ }
221
+ get path() {
222
+ return this.state.path;
223
+ }
224
+ /**
225
+ * Resume a session: read the JSONL log, validate it, and reconstruct state.
226
+ * Throws with the first 'session: '-prefixed error on an invalid log.
227
+ * `branch` selects the active branch (default 'main').
228
+ */
229
+ static async open(path, branch = 'main') {
230
+ if (!existsSync(path))
231
+ return new SessionLog(path, branch);
232
+ const raw = await readFile(path, 'utf-8');
233
+ const { state, errors } = parseLog(path, raw);
234
+ if (errors.length > 0)
235
+ throw new Error(errors[0]);
236
+ if (state.events.length === 0)
237
+ return new SessionLog(path, branch);
238
+ return SessionLog.over(state, branch);
239
+ }
240
+ /** Append an event on the active branch, assigning the next monotonic
241
+ * index. The first event of a forked branch carries the fork's parent ref.
242
+ * Safe to call without awaiting the previous call: concurrent appends on
243
+ * this instance (or a fork() sibling sharing this state) are serialized
244
+ * via `enqueue` and assigned distinct, monotonic indices in call order. */
245
+ async append(kind, payload, opts) {
246
+ return enqueue(this.state, () => this.appendLocked(kind, payload, opts));
247
+ }
248
+ /** The unserialized body of `append()` — only ever runs for one caller at
249
+ * a time per `LogState`, via `enqueue`. Not called directly outside this
250
+ * file; `fork()` also runs its own synthetic first event through this. */
251
+ async appendLocked(kind, payload, opts) {
252
+ const index = this.state.nextIndex.get(this.branch) ?? 0;
253
+ const parent = opts?.parent;
254
+ const isRoot = this.state.events.length === 0 || this.branch === this.state.rootBranch;
255
+ if (index === 0 && !isRoot && parent === undefined) {
256
+ throw new Error(`session: first event of branch "${this.branch}" must carry a parent reference`);
257
+ }
258
+ const event = parent === undefined
259
+ ? { index, branch: this.branch, kind, payload }
260
+ : { index, branch: this.branch, parent, kind, payload };
261
+ const line = serializeEvent(event);
262
+ // Reject events the Rust mirror cannot parse: a lone surrogate is not
263
+ // valid UTF-8 (raw form), and serde_json also rejects its `\udXXX`
264
+ // escaped form, which well-formed JSON.stringify emits for it.
265
+ if (LONE_SURROGATE.test(line) || LONE_SURROGATE_ESCAPE.test(line)) {
266
+ throw new Error('session: event contains an unpaired surrogate (not valid UTF-8)');
267
+ }
268
+ await appendFile(this.state.path, line + '\n', 'utf-8');
269
+ if (this.state.events.length === 0)
270
+ this.state.rootBranch = this.branch;
271
+ if (index === 0 && parent !== undefined) {
272
+ this.state.branchParent.set(this.branch, parent);
273
+ }
274
+ this.state.events.push(event);
275
+ this.state.nextIndex.set(this.branch, index + 1);
276
+ return event;
277
+ }
278
+ /**
279
+ * Fork at `atIndex` on THIS instance's active branch: returns a SessionLog
280
+ * over the same file (and shared state) whose active branch is `newBranch`.
281
+ * Immediately appends the new branch's synthetic first event (matching the
282
+ * Rust mirror's `fork`): index 0, parent {branch: this.branch, index:
283
+ * atIndex}, kind 'fork', payload null.
284
+ */
285
+ async fork(atIndex, newBranch) {
286
+ // Both the "does newBranch already exist" check and the synthetic first
287
+ // event run inside ONE enqueue()'d operation: otherwise two concurrent
288
+ // fork() calls for the same new branch name could both pass the check
289
+ // before either's append() lands (the same TOCTOU shape as append()
290
+ // itself, one level up).
291
+ return enqueue(this.state, async () => {
292
+ const count = this.state.nextIndex.get(this.branch) ?? 0;
293
+ if (atIndex < 0 || atIndex >= count) {
294
+ throw new Error(`session: cannot fork branch "${this.branch}" at index ${atIndex} (has ${count} events)`);
295
+ }
296
+ if ((this.state.nextIndex.get(newBranch) ?? 0) > 0 || newBranch === this.branch) {
297
+ throw new Error(`session: branch "${newBranch}" already exists`);
298
+ }
299
+ const forked = SessionLog.over(this.state, newBranch);
300
+ await forked.appendLocked('fork', null, { parent: { branch: this.branch, index: atIndex } });
301
+ return forked;
302
+ });
303
+ }
304
+ /** The lineage of a branch, root → tip: the branch's own events preceded by
305
+ * its parent lineage truncated at the fork point, recursively. */
306
+ lineage(branch) {
307
+ const own = this.state.events
308
+ .filter(e => e.branch === branch)
309
+ .sort((a, b) => a.index - b.index);
310
+ const parent = this.state.branchParent.get(branch);
311
+ if (!parent)
312
+ return own;
313
+ const upstream = this.lineage(parent.branch).filter(e => e.branch !== parent.branch || e.index <= parent.index);
314
+ return [...upstream, ...own];
315
+ }
316
+ /**
317
+ * State hash over the branch lineage (root → tip). Exact fold (mirrored in
318
+ * the file-header comment; a Rust mirror must reproduce it):
319
+ * hexPrev = ''; for each event: hexPrev = hex(sha256(utf8(hexPrev + canonicalJson(event))))
320
+ * Returns lowercase hex; the hash of an empty lineage is ''.
321
+ */
322
+ stateHash(branch = this.branch) {
323
+ let hexPrev = '';
324
+ for (const e of this.lineage(branch)) {
325
+ hexPrev = createHash('sha256')
326
+ .update(hexPrev + canonicalJson(e), 'utf-8')
327
+ .digest('hex');
328
+ }
329
+ return hexPrev;
330
+ }
331
+ /** Deterministic replay of a branch lineage: event count + state hash. */
332
+ replay(branch = this.branch) {
333
+ return { eventCount: this.lineage(branch).length, stateHash: this.stateHash(branch) };
334
+ }
335
+ /** Re-read the file from disk and report every validation error
336
+ * ('session: '-prefixed, corrupted lines cited by 1-based line number).
337
+ * An empty array means the on-disk log is valid. */
338
+ async validate() {
339
+ if (!existsSync(this.state.path))
340
+ return [];
341
+ const raw = await readFile(this.state.path, 'utf-8');
342
+ return parseLog(this.state.path, raw).errors;
343
+ }
344
+ }
345
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -31,6 +31,22 @@ export interface HarnessSpec {
31
31
  deny?: string[];
32
32
  };
33
33
  statusLine?: string;
34
+ /**
35
+ * Autonomous-mode fields (ADR-246 §2.2). Host adapters must project this
36
+ * block per host or emit an explicit documented no-op — never silently drop.
37
+ */
38
+ autonomous?: {
39
+ goal?: {
40
+ text: string;
41
+ tokenBudget?: number;
42
+ };
43
+ heartbeat?: {
44
+ cadence: string;
45
+ instruction: string;
46
+ };
47
+ gateCommand?: string;
48
+ maxTurns?: number;
49
+ };
34
50
  }
35
51
  export interface HostAdapter {
36
52
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9C,SAAS,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3D"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@metaharness/kernel",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Cross-platform kernel for the agent-harness-generator — wasm primary, NAPI-RS native fallback",
5
- "homepage": "https://github.com/ruvnet/agent-harness-generator",
5
+ "homepage": "https://github.com/ruvnet/metaharness",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/ruvnet/agent-harness-generator.git",
8
+ "url": "https://github.com/ruvnet/metaharness.git",
9
9
  "directory": "packages/kernel-js"
10
10
  },
11
11
  "license": "MIT",
@@ -57,20 +57,33 @@
57
57
  "@ruvector/emergent-time": "^0.1.0"
58
58
  },
59
59
  "peerDependencies": {
60
- "@ruvector/rvf": "^0.2.0"
61
- },
62
- "peerDependenciesMeta": {
63
- "@ruvector/rvf": {
64
- "optional": true
65
- }
66
- },
67
- "optionalDependencies": {
60
+ "@ruvector/rvf": "^0.2.0 || ^0.3.0 || ^0.4.0",
68
61
  "@metaharness/kernel-darwin-arm64": "0.1.0",
69
62
  "@metaharness/kernel-darwin-x64": "0.1.0",
70
63
  "@metaharness/kernel-linux-x64-gnu": "0.1.0",
71
64
  "@metaharness/kernel-linux-arm64-gnu": "0.1.0",
72
65
  "@metaharness/kernel-win32-x64-msvc": "0.1.0"
73
66
  },
67
+ "peerDependenciesMeta": {
68
+ "@ruvector/rvf": {
69
+ "optional": true
70
+ },
71
+ "@metaharness/kernel-darwin-arm64": {
72
+ "optional": true
73
+ },
74
+ "@metaharness/kernel-darwin-x64": {
75
+ "optional": true
76
+ },
77
+ "@metaharness/kernel-linux-x64-gnu": {
78
+ "optional": true
79
+ },
80
+ "@metaharness/kernel-linux-arm64-gnu": {
81
+ "optional": true
82
+ },
83
+ "@metaharness/kernel-win32-x64-msvc": {
84
+ "optional": true
85
+ }
86
+ },
74
87
  "engines": {
75
88
  "node": ">=20.0.0"
76
89
  }
package/pkg/package.json DELETED
@@ -1,21 +0,0 @@
1
- {
2
- "name": "ruflo-kernel-wasm",
3
- "collaborators": [
4
- "rUv <ruv@ruv.net>"
5
- ],
6
- "description": "WebAssembly bindings for ruflo-kernel",
7
- "version": "0.1.0",
8
- "license": "MIT",
9
- "repository": {
10
- "type": "git",
11
- "url": "https://github.com/ruvnet/agent-harness-generator"
12
- },
13
- "files": [
14
- "ruflo_kernel_wasm_bg.wasm",
15
- "ruflo_kernel_wasm.js",
16
- "ruflo_kernel_wasm.d.ts"
17
- ],
18
- "main": "ruflo_kernel_wasm.js",
19
- "types": "ruflo_kernel_wasm.d.ts",
20
- "type": "commonjs"
21
- }
@@ -1,17 +0,0 @@
1
- /* tslint:disable */
2
- /* eslint-disable */
3
-
4
- /**
5
- * Return kernel build metadata as a JS object.
6
- */
7
- export function kernelInfo(): any;
8
-
9
- /**
10
- * Validate an MCP server spec (returns `null` on success, error string otherwise).
11
- */
12
- export function mcpValidate(spec_json: string): any;
13
-
14
- /**
15
- * Returns the package version.
16
- */
17
- export function version(): string;
@@ -1,218 +0,0 @@
1
- /* @ts-self-types="./ruflo_kernel_wasm.d.ts" */
2
-
3
- /**
4
- * Return kernel build metadata as a JS object.
5
- * @returns {any}
6
- */
7
- function kernelInfo() {
8
- try {
9
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
10
- wasm.kernelInfo(retptr);
11
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
12
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
13
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
14
- if (r2) {
15
- throw takeObject(r1);
16
- }
17
- return takeObject(r0);
18
- } finally {
19
- wasm.__wbindgen_add_to_stack_pointer(16);
20
- }
21
- }
22
- exports.kernelInfo = kernelInfo;
23
-
24
- /**
25
- * Validate an MCP server spec (returns `null` on success, error string otherwise).
26
- * @param {string} spec_json
27
- * @returns {any}
28
- */
29
- function mcpValidate(spec_json) {
30
- try {
31
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
32
- const ptr0 = passStringToWasm0(spec_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
33
- const len0 = WASM_VECTOR_LEN;
34
- wasm.mcpValidate(retptr, ptr0, len0);
35
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
36
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
37
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
38
- if (r2) {
39
- throw takeObject(r1);
40
- }
41
- return takeObject(r0);
42
- } finally {
43
- wasm.__wbindgen_add_to_stack_pointer(16);
44
- }
45
- }
46
- exports.mcpValidate = mcpValidate;
47
-
48
- /**
49
- * Returns the package version.
50
- * @returns {string}
51
- */
52
- function version() {
53
- let deferred1_0;
54
- let deferred1_1;
55
- try {
56
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
57
- wasm.version(retptr);
58
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
59
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
60
- deferred1_0 = r0;
61
- deferred1_1 = r1;
62
- return getStringFromWasm0(r0, r1);
63
- } finally {
64
- wasm.__wbindgen_add_to_stack_pointer(16);
65
- wasm.__wbindgen_export3(deferred1_0, deferred1_1, 1);
66
- }
67
- }
68
- exports.version = version;
69
- function __wbg_get_imports() {
70
- const import0 = {
71
- __proto__: null,
72
- __wbg_String_8564e559799eccda: function(arg0, arg1) {
73
- const ret = String(getObject(arg1));
74
- const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
75
- const len1 = WASM_VECTOR_LEN;
76
- getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
77
- getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
78
- },
79
- __wbg___wbindgen_throw_ea4887a5f8f9a9db: function(arg0, arg1) {
80
- throw new Error(getStringFromWasm0(arg0, arg1));
81
- },
82
- __wbg_new_2e117a478906f062: function() {
83
- const ret = new Object();
84
- return addHeapObject(ret);
85
- },
86
- __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {
87
- getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
88
- },
89
- __wbindgen_cast_0000000000000001: function(arg0, arg1) {
90
- // Cast intrinsic for `Ref(String) -> Externref`.
91
- const ret = getStringFromWasm0(arg0, arg1);
92
- return addHeapObject(ret);
93
- },
94
- __wbindgen_object_clone_ref: function(arg0) {
95
- const ret = getObject(arg0);
96
- return addHeapObject(ret);
97
- },
98
- __wbindgen_object_drop_ref: function(arg0) {
99
- takeObject(arg0);
100
- },
101
- };
102
- return {
103
- __proto__: null,
104
- "./ruflo_kernel_wasm_bg.js": import0,
105
- };
106
- }
107
-
108
- function addHeapObject(obj) {
109
- if (heap_next === heap.length) heap.push(heap.length + 1);
110
- const idx = heap_next;
111
- heap_next = heap[idx];
112
-
113
- heap[idx] = obj;
114
- return idx;
115
- }
116
-
117
- function dropObject(idx) {
118
- if (idx < 1028) return;
119
- heap[idx] = heap_next;
120
- heap_next = idx;
121
- }
122
-
123
- let cachedDataViewMemory0 = null;
124
- function getDataViewMemory0() {
125
- if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
126
- cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
127
- }
128
- return cachedDataViewMemory0;
129
- }
130
-
131
- function getStringFromWasm0(ptr, len) {
132
- return decodeText(ptr >>> 0, len);
133
- }
134
-
135
- let cachedUint8ArrayMemory0 = null;
136
- function getUint8ArrayMemory0() {
137
- if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
138
- cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
139
- }
140
- return cachedUint8ArrayMemory0;
141
- }
142
-
143
- function getObject(idx) { return heap[idx]; }
144
-
145
- let heap = new Array(1024).fill(undefined);
146
- heap.push(undefined, null, true, false);
147
-
148
- let heap_next = heap.length;
149
-
150
- function passStringToWasm0(arg, malloc, realloc) {
151
- if (realloc === undefined) {
152
- const buf = cachedTextEncoder.encode(arg);
153
- const ptr = malloc(buf.length, 1) >>> 0;
154
- getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
155
- WASM_VECTOR_LEN = buf.length;
156
- return ptr;
157
- }
158
-
159
- let len = arg.length;
160
- let ptr = malloc(len, 1) >>> 0;
161
-
162
- const mem = getUint8ArrayMemory0();
163
-
164
- let offset = 0;
165
-
166
- for (; offset < len; offset++) {
167
- const code = arg.charCodeAt(offset);
168
- if (code > 0x7F) break;
169
- mem[ptr + offset] = code;
170
- }
171
- if (offset !== len) {
172
- if (offset !== 0) {
173
- arg = arg.slice(offset);
174
- }
175
- ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
176
- const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
177
- const ret = cachedTextEncoder.encodeInto(arg, view);
178
-
179
- offset += ret.written;
180
- ptr = realloc(ptr, len, offset, 1) >>> 0;
181
- }
182
-
183
- WASM_VECTOR_LEN = offset;
184
- return ptr;
185
- }
186
-
187
- function takeObject(idx) {
188
- const ret = getObject(idx);
189
- dropObject(idx);
190
- return ret;
191
- }
192
-
193
- let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
194
- cachedTextDecoder.decode();
195
- function decodeText(ptr, len) {
196
- return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
197
- }
198
-
199
- const cachedTextEncoder = new TextEncoder();
200
-
201
- if (!('encodeInto' in cachedTextEncoder)) {
202
- cachedTextEncoder.encodeInto = function (arg, view) {
203
- const buf = cachedTextEncoder.encode(arg);
204
- view.set(buf);
205
- return {
206
- read: arg.length,
207
- written: buf.length
208
- };
209
- };
210
- }
211
-
212
- let WASM_VECTOR_LEN = 0;
213
-
214
- const wasmPath = `${__dirname}/ruflo_kernel_wasm_bg.wasm`;
215
- const wasmBytes = require('fs').readFileSync(wasmPath);
216
- const wasmModule = new WebAssembly.Module(wasmBytes);
217
- let wasmInstance = new WebAssembly.Instance(wasmModule, __wbg_get_imports());
218
- let wasm = wasmInstance.exports;
Binary file
@@ -1,10 +0,0 @@
1
- /* tslint:disable */
2
- /* eslint-disable */
3
- export const memory: WebAssembly.Memory;
4
- export const kernelInfo: (a: number) => void;
5
- export const mcpValidate: (a: number, b: number, c: number) => void;
6
- export const version: (a: number) => void;
7
- export const __wbindgen_export: (a: number, b: number) => number;
8
- export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
9
- export const __wbindgen_add_to_stack_pointer: (a: number) => number;
10
- export const __wbindgen_export3: (a: number, b: number, c: number) => void;