orbit-agent-runtime 0.8.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 +750 -0
- package/LICENSE +201 -0
- package/README.md +492 -0
- package/README.zh-CN.md +389 -0
- package/benchmarks/README.md +24 -0
- package/benchmarks/gateway.mjs +68 -0
- package/benchmarks/pae.mjs +90 -0
- package/benchmarks/replay.mjs +51 -0
- package/benchmarks/run-all.mjs +24 -0
- package/benchmarks/wal.mjs +50 -0
- package/bin/orbit.mjs +523 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/demo-deepseek.d.ts +2 -0
- package/dist/demo-deepseek.d.ts.map +1 -0
- package/dist/demo-deepseek.js +66 -0
- package/dist/demo-deepseek.js.map +1 -0
- package/dist/demo-host.d.ts +2 -0
- package/dist/demo-host.d.ts.map +1 -0
- package/dist/demo-host.js +98 -0
- package/dist/demo-host.js.map +1 -0
- package/dist/demo-replay.d.ts +2 -0
- package/dist/demo-replay.d.ts.map +1 -0
- package/dist/demo-replay.js +68 -0
- package/dist/demo-replay.js.map +1 -0
- package/dist/src/core/orbitRuntimeHost.d.ts +349 -0
- package/dist/src/core/orbitRuntimeHost.d.ts.map +1 -0
- package/dist/src/core/orbitRuntimeHost.js +706 -0
- package/dist/src/core/orbitRuntimeHost.js.map +1 -0
- package/dist/src/index.d.ts +92 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +226 -0
- package/dist/src/index.js.map +1 -0
- package/dist/test/audit_chain.test.d.ts +2 -0
- package/dist/test/audit_chain.test.d.ts.map +1 -0
- package/dist/test/audit_chain.test.js +283 -0
- package/dist/test/audit_chain.test.js.map +1 -0
- package/dist/test/channel_hub.test.d.ts +2 -0
- package/dist/test/channel_hub.test.d.ts.map +1 -0
- package/dist/test/channel_hub.test.js +66 -0
- package/dist/test/channel_hub.test.js.map +1 -0
- package/dist/test/cordis_adapter.test.d.ts +2 -0
- package/dist/test/cordis_adapter.test.d.ts.map +1 -0
- package/dist/test/cordis_adapter.test.js +280 -0
- package/dist/test/cordis_adapter.test.js.map +1 -0
- package/dist/test/cost_routing.test.d.ts +2 -0
- package/dist/test/cost_routing.test.d.ts.map +1 -0
- package/dist/test/cost_routing.test.js +31 -0
- package/dist/test/cost_routing.test.js.map +1 -0
- package/dist/test/domain_transaction.test.d.ts +2 -0
- package/dist/test/domain_transaction.test.d.ts.map +1 -0
- package/dist/test/domain_transaction.test.js +351 -0
- package/dist/test/domain_transaction.test.js.map +1 -0
- package/dist/test/file_channel.test.d.ts +2 -0
- package/dist/test/file_channel.test.d.ts.map +1 -0
- package/dist/test/file_channel.test.js +179 -0
- package/dist/test/file_channel.test.js.map +1 -0
- package/dist/test/gateway.test.d.ts +2 -0
- package/dist/test/gateway.test.d.ts.map +1 -0
- package/dist/test/gateway.test.js +548 -0
- package/dist/test/gateway.test.js.map +1 -0
- package/dist/test/governance_profile.test.d.ts +2 -0
- package/dist/test/governance_profile.test.d.ts.map +1 -0
- package/dist/test/governance_profile.test.js +214 -0
- package/dist/test/governance_profile.test.js.map +1 -0
- package/dist/test/governance_schema.test.d.ts +2 -0
- package/dist/test/governance_schema.test.d.ts.map +1 -0
- package/dist/test/governance_schema.test.js +200 -0
- package/dist/test/governance_schema.test.js.map +1 -0
- package/dist/test/host_integration.test.d.ts +2 -0
- package/dist/test/host_integration.test.d.ts.map +1 -0
- package/dist/test/host_integration.test.js +104 -0
- package/dist/test/host_integration.test.js.map +1 -0
- package/dist/test/host_journal_persistence.test.d.ts +2 -0
- package/dist/test/host_journal_persistence.test.d.ts.map +1 -0
- package/dist/test/host_journal_persistence.test.js +367 -0
- package/dist/test/host_journal_persistence.test.js.map +1 -0
- package/dist/test/impact_domain.test.d.ts +2 -0
- package/dist/test/impact_domain.test.d.ts.map +1 -0
- package/dist/test/impact_domain.test.js +48 -0
- package/dist/test/impact_domain.test.js.map +1 -0
- package/dist/test/injected_clock.test.d.ts +13 -0
- package/dist/test/injected_clock.test.d.ts.map +1 -0
- package/dist/test/injected_clock.test.js +200 -0
- package/dist/test/injected_clock.test.js.map +1 -0
- package/dist/test/isolation_domain.test.d.ts +2 -0
- package/dist/test/isolation_domain.test.d.ts.map +1 -0
- package/dist/test/isolation_domain.test.js +302 -0
- package/dist/test/isolation_domain.test.js.map +1 -0
- package/dist/test/journal_wal.test.d.ts +2 -0
- package/dist/test/journal_wal.test.d.ts.map +1 -0
- package/dist/test/journal_wal.test.js +622 -0
- package/dist/test/journal_wal.test.js.map +1 -0
- package/dist/test/mcp_adapter.test.d.ts +2 -0
- package/dist/test/mcp_adapter.test.d.ts.map +1 -0
- package/dist/test/mcp_adapter.test.js +440 -0
- package/dist/test/mcp_adapter.test.js.map +1 -0
- package/dist/test/openai_compat_channel.test.d.ts +2 -0
- package/dist/test/openai_compat_channel.test.d.ts.map +1 -0
- package/dist/test/openai_compat_channel.test.js +325 -0
- package/dist/test/openai_compat_channel.test.js.map +1 -0
- package/dist/test/openapi_adapter.test.d.ts +2 -0
- package/dist/test/openapi_adapter.test.d.ts.map +1 -0
- package/dist/test/openapi_adapter.test.js +270 -0
- package/dist/test/openapi_adapter.test.js.map +1 -0
- package/dist/test/orbit_cli.test.d.ts +2 -0
- package/dist/test/orbit_cli.test.d.ts.map +1 -0
- package/dist/test/orbit_cli.test.js +137 -0
- package/dist/test/orbit_cli.test.js.map +1 -0
- package/dist/test/pact_verifier.test.d.ts +2 -0
- package/dist/test/pact_verifier.test.d.ts.map +1 -0
- package/dist/test/pact_verifier.test.js +41 -0
- package/dist/test/pact_verifier.test.js.map +1 -0
- package/dist/test/pae_adapter.test.d.ts +2 -0
- package/dist/test/pae_adapter.test.d.ts.map +1 -0
- package/dist/test/pae_adapter.test.js +469 -0
- package/dist/test/pae_adapter.test.js.map +1 -0
- package/dist/test/plugin_sandbox_guard.test.d.ts +2 -0
- package/dist/test/plugin_sandbox_guard.test.d.ts.map +1 -0
- package/dist/test/plugin_sandbox_guard.test.js +57 -0
- package/dist/test/plugin_sandbox_guard.test.js.map +1 -0
- package/dist/test/rate_limit_behavior.test.d.ts +2 -0
- package/dist/test/rate_limit_behavior.test.d.ts.map +1 -0
- package/dist/test/rate_limit_behavior.test.js +85 -0
- package/dist/test/rate_limit_behavior.test.js.map +1 -0
- package/dist/test/replay_compat.test.d.ts +2 -0
- package/dist/test/replay_compat.test.d.ts.map +1 -0
- package/dist/test/replay_compat.test.js +1122 -0
- package/dist/test/replay_compat.test.js.map +1 -0
- package/dist/test/replay_engine.test.d.ts +2 -0
- package/dist/test/replay_engine.test.d.ts.map +1 -0
- package/dist/test/replay_engine.test.js +85 -0
- package/dist/test/replay_engine.test.js.map +1 -0
- package/dist/test/shell_channel.test.d.ts +2 -0
- package/dist/test/shell_channel.test.d.ts.map +1 -0
- package/dist/test/shell_channel.test.js +173 -0
- package/dist/test/shell_channel.test.js.map +1 -0
- package/dist/test/teardown_isolation.test.d.ts +10 -0
- package/dist/test/teardown_isolation.test.d.ts.map +1 -0
- package/dist/test/teardown_isolation.test.js +279 -0
- package/dist/test/teardown_isolation.test.js.map +1 -0
- package/dist/test/token_budget.test.d.ts +2 -0
- package/dist/test/token_budget.test.d.ts.map +1 -0
- package/dist/test/token_budget.test.js +113 -0
- package/dist/test/token_budget.test.js.map +1 -0
- package/dist/test/trace_journal.test.d.ts +2 -0
- package/dist/test/trace_journal.test.d.ts.map +1 -0
- package/dist/test/trace_journal.test.js +43 -0
- package/dist/test/trace_journal.test.js.map +1 -0
- package/dist/test/trace_journal_persistence.test.d.ts +2 -0
- package/dist/test/trace_journal_persistence.test.d.ts.map +1 -0
- package/dist/test/trace_journal_persistence.test.js +175 -0
- package/dist/test/trace_journal_persistence.test.js.map +1 -0
- package/dist/test/trace_persistence.test.d.ts +2 -0
- package/dist/test/trace_persistence.test.d.ts.map +1 -0
- package/dist/test/trace_persistence.test.js +216 -0
- package/dist/test/trace_persistence.test.js.map +1 -0
- package/dist/test/trip_protector.test.d.ts +2 -0
- package/dist/test/trip_protector.test.d.ts.map +1 -0
- package/dist/test/trip_protector.test.js +42 -0
- package/dist/test/trip_protector.test.js.map +1 -0
- package/examples/README.md +34 -0
- package/examples/cli-record-replay.mjs +74 -0
- package/examples/custom-channel.mjs +102 -0
- package/examples/js-pae-plugin.mjs +128 -0
- package/examples/mcp-adapter.mjs +102 -0
- package/package.json +60 -0
- package/src/core/orbitRuntimeHost.ts +853 -0
- package/src/index.ts +256 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Determinism regression for every time-dependent decision that reaches a
|
|
4
|
+
* recorded value (charter A1).
|
|
5
|
+
*
|
|
6
|
+
* A component that reads the real clock makes its outcome depend on *when* the
|
|
7
|
+
* run happened, so two recordings of the same input can disagree and replay
|
|
8
|
+
* reports a drift that never existed. Both components here therefore take an
|
|
9
|
+
* injected `ClockSource`, and with a frozen clock their behaviour must be
|
|
10
|
+
* perfectly constant — with a pushed clock it must flip exactly where the
|
|
11
|
+
* configured window says it should, and nowhere else.
|
|
12
|
+
*/
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
const node_test_1 = require("node:test");
|
|
18
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
19
|
+
const index_1 = require("../src/index");
|
|
20
|
+
const infra_common_1 = require("@orbit/infra-common");
|
|
21
|
+
/** A clock the test drives by hand, so no assertion can depend on real time. */
|
|
22
|
+
class ManualClock {
|
|
23
|
+
current;
|
|
24
|
+
constructor(start = 1_000_000) {
|
|
25
|
+
this.current = start;
|
|
26
|
+
}
|
|
27
|
+
now() {
|
|
28
|
+
return this.current;
|
|
29
|
+
}
|
|
30
|
+
advance(ms) {
|
|
31
|
+
this.current += ms;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function makeCtx(overrides = {}) {
|
|
35
|
+
return { traceMarkId: "t-1", maxWaitMs: 1000, ...overrides };
|
|
36
|
+
}
|
|
37
|
+
/* --------------------------------------------------------- TripProtector */
|
|
38
|
+
(0, node_test_1.test)("trip protector: a frozen clock keeps the trip decision constant", async () => {
|
|
39
|
+
const clock = new ManualClock();
|
|
40
|
+
const trip = new index_1.TripProtector(1, 10_000, clock);
|
|
41
|
+
const fail = async () => {
|
|
42
|
+
throw new Error("boom");
|
|
43
|
+
};
|
|
44
|
+
await strict_1.default.rejects(trip.execWithProtect(fail));
|
|
45
|
+
strict_1.default.equal(trip.snapshot().state, infra_common_1.TripState.TRIPPED);
|
|
46
|
+
// The clock never moves, so the cooldown never elapses — no matter how many
|
|
47
|
+
// times the decision is read, or how long the test actually takes.
|
|
48
|
+
for (let i = 0; i < 50; i += 1) {
|
|
49
|
+
strict_1.default.equal(trip.preCallCheck(), false);
|
|
50
|
+
}
|
|
51
|
+
await strict_1.default.rejects(trip.execWithProtect(fail), /trip protector active/);
|
|
52
|
+
});
|
|
53
|
+
(0, node_test_1.test)("trip protector: advancing the injected clock past the cooldown flips the decision", async () => {
|
|
54
|
+
const clock = new ManualClock();
|
|
55
|
+
const trip = new index_1.TripProtector(1, 10_000, clock);
|
|
56
|
+
const fail = async () => {
|
|
57
|
+
throw new Error("boom");
|
|
58
|
+
};
|
|
59
|
+
await strict_1.default.rejects(trip.execWithProtect(fail));
|
|
60
|
+
strict_1.default.equal(trip.snapshot().state, infra_common_1.TripState.TRIPPED);
|
|
61
|
+
// One millisecond short of the window: still blocked.
|
|
62
|
+
clock.advance(10_000);
|
|
63
|
+
strict_1.default.equal(trip.preCallCheck(), false, "the cooldown is strict (>)");
|
|
64
|
+
// Across the boundary: the probe is allowed again.
|
|
65
|
+
clock.advance(1);
|
|
66
|
+
strict_1.default.equal(trip.preCallCheck(), true);
|
|
67
|
+
strict_1.default.equal(await trip.execWithProtect(async () => "ok"), "ok");
|
|
68
|
+
strict_1.default.equal(trip.snapshot().state, infra_common_1.TripState.NORMAL);
|
|
69
|
+
});
|
|
70
|
+
(0, node_test_1.test)("trip protector: the recorded trippedAt comes from the injected clock, not the wall clock", async () => {
|
|
71
|
+
const clock = new ManualClock(5_000);
|
|
72
|
+
const trip = new index_1.TripProtector(2, 1_000, clock);
|
|
73
|
+
const fail = async () => {
|
|
74
|
+
throw new Error("boom");
|
|
75
|
+
};
|
|
76
|
+
await strict_1.default.rejects(trip.execWithProtect(fail));
|
|
77
|
+
await strict_1.default.rejects(trip.execWithProtect(fail));
|
|
78
|
+
strict_1.default.equal(trip.snapshot().state, infra_common_1.TripState.TRIPPED);
|
|
79
|
+
// Wall-clock time here is ~now (a huge number); the injected clock reads
|
|
80
|
+
// 5000. If the protector had taken its timestamp from Date.now(), advancing
|
|
81
|
+
// the injected clock by ~1s would not come close to the cooldown.
|
|
82
|
+
clock.advance(999);
|
|
83
|
+
strict_1.default.equal(trip.preCallCheck(), false);
|
|
84
|
+
clock.advance(2);
|
|
85
|
+
strict_1.default.equal(trip.preCallCheck(), true);
|
|
86
|
+
});
|
|
87
|
+
(0, node_test_1.test)("trip protector: no injected clock keeps the previous real-clock behaviour", async () => {
|
|
88
|
+
const trip = new index_1.TripProtector(1, 20);
|
|
89
|
+
const fail = async () => {
|
|
90
|
+
throw new Error("boom");
|
|
91
|
+
};
|
|
92
|
+
await strict_1.default.rejects(trip.execWithProtect(fail));
|
|
93
|
+
strict_1.default.equal(trip.snapshot().state, infra_common_1.TripState.TRIPPED);
|
|
94
|
+
strict_1.default.equal(trip.preCallCheck(), false);
|
|
95
|
+
await new Promise((resolve) => setTimeout(resolve, 40));
|
|
96
|
+
strict_1.default.equal(trip.preCallCheck(), true, "the cooldown still elapses on the real clock");
|
|
97
|
+
});
|
|
98
|
+
/* -------------------------------------------------------- MemoryKvChannel */
|
|
99
|
+
(0, node_test_1.test)("kv channel: a frozen clock makes TTL reads perfectly reproducible", async () => {
|
|
100
|
+
const clock = new ManualClock();
|
|
101
|
+
const kv = new index_1.MemoryKvChannel(clock);
|
|
102
|
+
await kv.setup(makeCtx());
|
|
103
|
+
await kv.writeEntry("k", "v", 1_000);
|
|
104
|
+
// Read repeatedly at the same instant: the value never flips, so a recording
|
|
105
|
+
// of this script is byte-identical every time.
|
|
106
|
+
for (let i = 0; i < 50; i += 1) {
|
|
107
|
+
strict_1.default.equal(await kv.readEntry("k"), "v");
|
|
108
|
+
}
|
|
109
|
+
await kv.teardown();
|
|
110
|
+
});
|
|
111
|
+
(0, node_test_1.test)("kv channel: TTL expiry is decided by the injected clock", async () => {
|
|
112
|
+
const clock = new ManualClock();
|
|
113
|
+
const kv = new index_1.MemoryKvChannel(clock);
|
|
114
|
+
await kv.setup(makeCtx());
|
|
115
|
+
await kv.writeEntry("k", "v", 1_000);
|
|
116
|
+
// Exactly at the expiry instant: not yet expired (the check is strict >).
|
|
117
|
+
clock.advance(1_000);
|
|
118
|
+
strict_1.default.equal(await kv.readEntry("k"), "v");
|
|
119
|
+
// One millisecond past: expired, and the entry is evicted.
|
|
120
|
+
clock.advance(1);
|
|
121
|
+
strict_1.default.equal(await kv.readEntry("k"), null);
|
|
122
|
+
await kv.teardown();
|
|
123
|
+
});
|
|
124
|
+
(0, node_test_1.test)("kv channel: ttl <= 0 never expires, whatever the injected clock does", async () => {
|
|
125
|
+
const clock = new ManualClock();
|
|
126
|
+
const kv = new index_1.MemoryKvChannel(clock);
|
|
127
|
+
await kv.setup(makeCtx());
|
|
128
|
+
await kv.writeEntry("forever", "v", 0);
|
|
129
|
+
await kv.writeEntry("negative", "v", -5);
|
|
130
|
+
clock.advance(Number.MAX_SAFE_INTEGER / 2);
|
|
131
|
+
strict_1.default.equal(await kv.readEntry("forever"), "v");
|
|
132
|
+
strict_1.default.equal(await kv.readEntry("negative"), "v");
|
|
133
|
+
await kv.teardown();
|
|
134
|
+
});
|
|
135
|
+
(0, node_test_1.test)("kv channel: the expiration timestamp is written from the injected clock", async () => {
|
|
136
|
+
const clock = new ManualClock(7_000);
|
|
137
|
+
const kv = new index_1.MemoryKvChannel(clock);
|
|
138
|
+
await kv.setup(makeCtx());
|
|
139
|
+
// Written at t=7000 with a 1000ms TTL -> expires just after t=8000.
|
|
140
|
+
await kv.writeEntry("k", "v", 1_000);
|
|
141
|
+
clock.advance(900);
|
|
142
|
+
strict_1.default.equal(await kv.readEntry("k"), "v", "t=7900: still live");
|
|
143
|
+
clock.advance(100);
|
|
144
|
+
strict_1.default.equal(await kv.readEntry("k"), "v", "t=8000: boundary, still live");
|
|
145
|
+
clock.advance(1);
|
|
146
|
+
strict_1.default.equal(await kv.readEntry("k"), null, "t=8001: expired");
|
|
147
|
+
await kv.teardown();
|
|
148
|
+
});
|
|
149
|
+
/* ------------------------------------------------- setup() idempotency */
|
|
150
|
+
(0, node_test_1.test)("kv channel: a second setup() replaces the sweep timer instead of leaking it", async () => {
|
|
151
|
+
const kv = new index_1.MemoryKvChannel(new ManualClock());
|
|
152
|
+
const ctx = makeCtx();
|
|
153
|
+
await kv.setup(ctx);
|
|
154
|
+
const timer = kv.sweepTimer;
|
|
155
|
+
strict_1.default.ok(timer, "setup installs a sweep timer");
|
|
156
|
+
await kv.setup(ctx);
|
|
157
|
+
const second = kv.sweepTimer;
|
|
158
|
+
strict_1.default.ok(second, "the second setup installs a fresh timer");
|
|
159
|
+
// The original interval must have been cleared — otherwise it keeps firing
|
|
160
|
+
// for the lifetime of the process, sweeping a map nobody owns any more.
|
|
161
|
+
strict_1.default.notEqual(second, timer);
|
|
162
|
+
// Teardown clears the live one, so no sweeper survives the channel.
|
|
163
|
+
await kv.teardown();
|
|
164
|
+
strict_1.default.equal(kv.sweepTimer, null);
|
|
165
|
+
});
|
|
166
|
+
(0, node_test_1.test)("kv channel: teardown after two setup() calls leaves no live handle", async () => {
|
|
167
|
+
const kv = new index_1.MemoryKvChannel(new ManualClock());
|
|
168
|
+
await kv.setup(makeCtx());
|
|
169
|
+
await kv.setup(makeCtx());
|
|
170
|
+
await kv.teardown();
|
|
171
|
+
// If the first timer had survived, the process could not exit while it was
|
|
172
|
+
// still armed; asserting the handle is gone is the observable proxy.
|
|
173
|
+
strict_1.default.equal(kv.sweepTimer, null);
|
|
174
|
+
});
|
|
175
|
+
/* -------------------------------------------- hub-level reproducibility */
|
|
176
|
+
(0, node_test_1.test)("kv channel over the hub: the same frozen-clock script records identical outputs", async () => {
|
|
177
|
+
async function run() {
|
|
178
|
+
const clock = new ManualClock();
|
|
179
|
+
const kv = new index_1.MemoryKvChannel(clock);
|
|
180
|
+
const hub = new index_1.ChannelHub();
|
|
181
|
+
hub.registerBuiltInChannel(infra_common_1.ChannelKind.MEM_KV_STORE, kv);
|
|
182
|
+
await hub.setupAllBuiltInChannels(makeCtx());
|
|
183
|
+
await hub.fireChannelCall(infra_common_1.ChannelKind.MEM_KV_STORE, makeCtx(), "writeEntry", "k", "v", 1_000);
|
|
184
|
+
const first = await hub.fireChannelCall(infra_common_1.ChannelKind.MEM_KV_STORE, makeCtx(), "readEntry", "k");
|
|
185
|
+
clock.advance(1_001);
|
|
186
|
+
const second = await hub.fireChannelCall(infra_common_1.ChannelKind.MEM_KV_STORE, makeCtx(), "readEntry", "k");
|
|
187
|
+
await hub.teardown();
|
|
188
|
+
return [first, second];
|
|
189
|
+
}
|
|
190
|
+
// Two independent runs of the same script: identical, because the only clock
|
|
191
|
+
// involved is the one the test drives.
|
|
192
|
+
strict_1.default.deepEqual(await run(), ["v", null]);
|
|
193
|
+
strict_1.default.deepEqual(await run(), ["v", null]);
|
|
194
|
+
});
|
|
195
|
+
(0, node_test_1.test)("kv channel exposes its IO-bound determinism metadata", async () => {
|
|
196
|
+
const kv = new index_1.MemoryKvChannel(new ManualClock());
|
|
197
|
+
strict_1.default.equal(kv.determinismMeta.determinism, infra_common_1.DeterminismLevel.IO_BOUND);
|
|
198
|
+
strict_1.default.equal(kv.determinismMeta.replayPolicy, "inject");
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=injected_clock.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injected_clock.test.js","sourceRoot":"","sources":["../../test/injected_clock.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation_domain.test.d.ts","sourceRoot":"","sources":["../../test/isolation_domain.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const index_1 = require("../src/index");
|
|
9
|
+
/**
|
|
10
|
+
* W19 — isolation domain suite (graph-driven L2 allocation).
|
|
11
|
+
*
|
|
12
|
+
* Four layers under test:
|
|
13
|
+
*
|
|
14
|
+
* 1. **allocation** — the pure graph → plan mapping: impact-closure escalation,
|
|
15
|
+
* deterministic shared packing, and the auto-escalate-on-growth property;
|
|
16
|
+
* 2. **protocol** — pure framing and unit-list parsing;
|
|
17
|
+
* 3. **transport** — in-memory and real `node` child processes (the built-in
|
|
18
|
+
* pure-unit host), so L2 is exercised without hand-rolled subprocess code;
|
|
19
|
+
* 4. **domain + manager + channel** — lifecycle, sync diff (start/keep/stop),
|
|
20
|
+
* routing, and the gateway surface that makes domain calls recorded and
|
|
21
|
+
* replayed like any other IO_BOUND call.
|
|
22
|
+
*/
|
|
23
|
+
const CTX = { traceMarkId: "tm-domain", maxWaitMs: 1000 };
|
|
24
|
+
/** A graph where `dependent` depends on `dependency`. */
|
|
25
|
+
function chain(...ids) {
|
|
26
|
+
const g = new index_1.ImpactDomainGraph();
|
|
27
|
+
for (const id of ids)
|
|
28
|
+
g.addNode(id);
|
|
29
|
+
for (let i = 1; i < ids.length; i += 1) {
|
|
30
|
+
g.addEdge(ids[i - 1], ids[i]); // earlier depends on later
|
|
31
|
+
}
|
|
32
|
+
return g;
|
|
33
|
+
}
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Allocation (pure)
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
(0, node_test_1.test)("domain allocation: independent leaves share one domain", () => {
|
|
38
|
+
const g = new index_1.ImpactDomainGraph();
|
|
39
|
+
g.addNode("a");
|
|
40
|
+
g.addNode("b");
|
|
41
|
+
g.addNode("c");
|
|
42
|
+
const plan = (0, index_1.allocateDomains)(g);
|
|
43
|
+
strict_1.default.deepEqual(plan.domains, [{ id: "shared:0", isolation: "L2", units: ["a", "b", "c"] }]);
|
|
44
|
+
strict_1.default.deepEqual(plan.escalated, []);
|
|
45
|
+
});
|
|
46
|
+
(0, node_test_1.test)("domain allocation: a large impact closure escalates to its own domain", () => {
|
|
47
|
+
const g = chain("a", "b", "c"); // a→b→c: closure(c)={a,b}=2, closure(b)={a}=1
|
|
48
|
+
const plan = (0, index_1.allocateDomains)(g);
|
|
49
|
+
const iso = plan.domains.find((d) => d.id === "iso:c");
|
|
50
|
+
strict_1.default.deepEqual(iso, { id: "iso:c", isolation: "L2", units: ["c"] });
|
|
51
|
+
strict_1.default.ok(plan.escalated.includes("c"));
|
|
52
|
+
// a and b are shareable and connected → one shared domain.
|
|
53
|
+
const shared = plan.domains.find((d) => d.id.startsWith("shared:"));
|
|
54
|
+
strict_1.default.deepEqual(shared?.units, ["a", "b"]);
|
|
55
|
+
});
|
|
56
|
+
(0, node_test_1.test)("domain allocation: closure sizes are the reverse-reachability counts", () => {
|
|
57
|
+
const g = chain("a", "b", "c");
|
|
58
|
+
const sizes = (0, index_1.impactClosureSizes)(g);
|
|
59
|
+
strict_1.default.equal(sizes.get("a"), 0);
|
|
60
|
+
strict_1.default.equal(sizes.get("b"), 1);
|
|
61
|
+
strict_1.default.equal(sizes.get("c"), 2);
|
|
62
|
+
});
|
|
63
|
+
(0, node_test_1.test)("domain allocation: a growing graph auto-escalates a previously shared node", () => {
|
|
64
|
+
const g = new index_1.ImpactDomainGraph();
|
|
65
|
+
g.addNode("x");
|
|
66
|
+
g.addNode("y");
|
|
67
|
+
g.addNode("z");
|
|
68
|
+
const before = (0, index_1.allocateDomains)(g);
|
|
69
|
+
strict_1.default.deepEqual(before.escalated, []);
|
|
70
|
+
// z gains two dependents → closure size 2 > 1 → escalated on the next plan.
|
|
71
|
+
g.addEdge("x", "z");
|
|
72
|
+
g.addEdge("y", "z");
|
|
73
|
+
const after = (0, index_1.allocateDomains)(g);
|
|
74
|
+
strict_1.default.deepEqual(after.escalated, ["z"]);
|
|
75
|
+
strict_1.default.ok(after.domains.some((d) => d.id === "iso:z"));
|
|
76
|
+
});
|
|
77
|
+
(0, node_test_1.test)("domain allocation: shared domains chunk to maxDomainSize", () => {
|
|
78
|
+
const g = new index_1.ImpactDomainGraph();
|
|
79
|
+
for (const id of ["a", "b", "c", "d", "e"])
|
|
80
|
+
g.addNode(id);
|
|
81
|
+
const plan = (0, index_1.allocateDomains)(g, { maxDomainSize: 2 });
|
|
82
|
+
strict_1.default.deepEqual(plan.domains.map((d) => d.units), [["a", "b"], ["c", "d"], ["e"]]);
|
|
83
|
+
});
|
|
84
|
+
(0, node_test_1.test)("domain allocation: equal graphs always produce equal plans", () => {
|
|
85
|
+
const g1 = chain("a", "b", "c", "d");
|
|
86
|
+
const g2 = chain("a", "b", "c", "d");
|
|
87
|
+
strict_1.default.deepEqual((0, index_1.allocateDomains)(g1), (0, index_1.allocateDomains)(g2));
|
|
88
|
+
});
|
|
89
|
+
(0, node_test_1.test)("domain allocation: the plan is a partition of every node", () => {
|
|
90
|
+
const g = chain("a", "b", "c");
|
|
91
|
+
g.addNode("solo");
|
|
92
|
+
const plan = (0, index_1.allocateDomains)(g);
|
|
93
|
+
const seen = new Set();
|
|
94
|
+
for (const d of plan.domains) {
|
|
95
|
+
for (const unit of d.units) {
|
|
96
|
+
strict_1.default.ok(!seen.has(unit), `unit ${unit} appears twice`);
|
|
97
|
+
seen.add(unit);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
strict_1.default.deepEqual([...seen].sort(), ["a", "b", "c", "solo"]);
|
|
101
|
+
});
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Protocol
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
(0, node_test_1.test)("domain protocol: a message serialises to a single line", () => {
|
|
106
|
+
const line = (0, index_1.encodeDomainFrame)({ jsonrpc: "2.0", id: 1, method: "units/list", params: {} });
|
|
107
|
+
strict_1.default.ok(!line.includes("\n"));
|
|
108
|
+
strict_1.default.deepEqual(JSON.parse(line), { jsonrpc: "2.0", id: 1, method: "units/list", params: {} });
|
|
109
|
+
});
|
|
110
|
+
(0, node_test_1.test)("domain protocol: unparseable and non-envelope lines are skipped, not fatal", () => {
|
|
111
|
+
strict_1.default.equal((0, index_1.decodeDomainFrame)(""), null);
|
|
112
|
+
strict_1.default.equal((0, index_1.decodeDomainFrame)("noise"), null);
|
|
113
|
+
strict_1.default.equal((0, index_1.decodeDomainFrame)(JSON.stringify({ jsonrpc: "2.0", id: 1 })), null, "neither result nor error");
|
|
114
|
+
strict_1.default.equal((0, index_1.decodeDomainFrame)(JSON.stringify({ jsonrpc: "2.0", id: 1, result: 1, error: { message: "x" } })), null);
|
|
115
|
+
const ok = (0, index_1.decodeDomainFrame)(JSON.stringify({ jsonrpc: "2.0", id: 5, result: { units: [] } }));
|
|
116
|
+
strict_1.default.deepEqual(ok, { jsonrpc: "2.0", id: 5, result: { units: [] } });
|
|
117
|
+
});
|
|
118
|
+
(0, node_test_1.test)("domain protocol: unit list validation rejects a malformed host", () => {
|
|
119
|
+
strict_1.default.throws(() => (0, index_1.parseUnitList)(null), /not an object/);
|
|
120
|
+
strict_1.default.throws(() => (0, index_1.parseUnitList)({ units: "nope" }), /not an array/);
|
|
121
|
+
strict_1.default.throws(() => (0, index_1.parseUnitList)({ units: [{ id: "" }] }), /no usable unit id/);
|
|
122
|
+
strict_1.default.throws(() => (0, index_1.parseUnitList)({ units: [{ id: "u", tools: [] }, { id: "u", tools: [] }] }), /duplicate unit id u/);
|
|
123
|
+
strict_1.default.throws(() => (0, index_1.parseUnitList)({ units: [{ id: "u", tools: "nope" }] }), /has no "tools" array/);
|
|
124
|
+
strict_1.default.throws(() => (0, index_1.parseUnitList)({ units: [{ id: "u", tools: [{ name: "t" }, { name: "t" }] }] }), /duplicate tool u:t/);
|
|
125
|
+
const ok = (0, index_1.parseUnitList)({ units: [{ id: "u", tools: [{ name: "t", description: "d" }] }] });
|
|
126
|
+
strict_1.default.deepEqual(ok, [{ id: "u", tools: [{ name: "t", description: "d" }] }]);
|
|
127
|
+
});
|
|
128
|
+
(0, node_test_1.test)("domain protocol: results pass through verbatim, undefined becomes null", () => {
|
|
129
|
+
strict_1.default.deepEqual((0, index_1.normaliseDomainResult)({ a: 1 }), { value: { a: 1 }, degraded: false });
|
|
130
|
+
strict_1.default.deepEqual((0, index_1.normaliseDomainResult)(undefined), { value: null, degraded: false });
|
|
131
|
+
strict_1.default.equal((0, index_1.isDomainResponse)({ jsonrpc: "2.0", id: 1, error: { message: "x" } }), true);
|
|
132
|
+
strict_1.default.equal((0, index_1.domainRemoteErrorOf)({ jsonrpc: "2.0", id: 1, error: { message: "x" } })?.message, "x");
|
|
133
|
+
});
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Transport — in memory
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
(0, node_test_1.test)("domain transport: in-memory round-trips and rejects after close", async () => {
|
|
138
|
+
let seen = null;
|
|
139
|
+
const t = new index_1.InMemoryDomainTransport((method, params) => {
|
|
140
|
+
seen = { method, params };
|
|
141
|
+
return { ok: true };
|
|
142
|
+
});
|
|
143
|
+
const res = await t.request("ping", { x: 1 }, 1000);
|
|
144
|
+
strict_1.default.deepEqual(res.result, { ok: true });
|
|
145
|
+
strict_1.default.deepEqual(seen, { method: "ping", params: { x: 1 } });
|
|
146
|
+
await t.close();
|
|
147
|
+
await strict_1.default.rejects(() => t.request("ping", {}, 1));
|
|
148
|
+
});
|
|
149
|
+
(0, node_test_1.test)("domain transport: in-memory deadline is enforced via the injected clock", async () => {
|
|
150
|
+
let now = 0;
|
|
151
|
+
const t = new index_1.InMemoryDomainTransport(async () => {
|
|
152
|
+
now += 5000;
|
|
153
|
+
return { ok: true };
|
|
154
|
+
}, { clock: { now: () => now } });
|
|
155
|
+
await strict_1.default.rejects(() => t.request("slow", {}, 1000), /timed out/);
|
|
156
|
+
});
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Transport — child process (real L2, built-in pure-unit host)
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
function spawnBuiltinHost(units) {
|
|
161
|
+
return new index_1.ChildProcessDomainTransport({
|
|
162
|
+
command: process.execPath,
|
|
163
|
+
args: ["-e", index_1.DOMAIN_HOST_SHIM],
|
|
164
|
+
env: { ORBIT_DOMAIN_UNITS: units }
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
(0, node_test_1.test)("domain transport: the built-in host serves units over a real child process", async () => {
|
|
168
|
+
const transport = spawnBuiltinHost("echo,calc");
|
|
169
|
+
try {
|
|
170
|
+
const init = await transport.request("initialize", {}, 10_000);
|
|
171
|
+
strict_1.default.deepEqual(init.result.hostInfo.name, "orbit-domain-host");
|
|
172
|
+
const list = await transport.request("units/list", {}, 10_000);
|
|
173
|
+
const units = list.result.units.map((u) => u.id).sort();
|
|
174
|
+
strict_1.default.deepEqual(units, ["calc", "echo"]);
|
|
175
|
+
const call = await transport.request("units/call", { unitId: "echo", tool: "sum", arguments: { numbers: [1, 2, 3] } }, 10_000);
|
|
176
|
+
strict_1.default.equal(call.result, 6);
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
await transport.close();
|
|
180
|
+
}
|
|
181
|
+
strict_1.default.equal(transport.closed, true);
|
|
182
|
+
});
|
|
183
|
+
(0, node_test_1.test)("domain transport: a dead host fails in-flight requests instead of hanging", async () => {
|
|
184
|
+
const transport = new index_1.ChildProcessDomainTransport({
|
|
185
|
+
command: process.execPath,
|
|
186
|
+
args: ["-e", "process.exit(3);"]
|
|
187
|
+
});
|
|
188
|
+
await transport.start();
|
|
189
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
190
|
+
await strict_1.default.rejects(transport.request("units/list", {}, 2_000), index_1.DomainRemoteError);
|
|
191
|
+
await transport.close();
|
|
192
|
+
});
|
|
193
|
+
(0, node_test_1.test)("domain transport: a host that dies on startup says why", async () => {
|
|
194
|
+
const transport = new index_1.ChildProcessDomainTransport({
|
|
195
|
+
command: process.execPath,
|
|
196
|
+
args: ["-e", "console.error('boom: domain fixture exploded'); process.exit(1);"]
|
|
197
|
+
});
|
|
198
|
+
await transport.start();
|
|
199
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
200
|
+
await strict_1.default.rejects(transport.request("initialize", {}, 2_000), (err) => {
|
|
201
|
+
strict_1.default.ok(err instanceof index_1.DomainRemoteError);
|
|
202
|
+
strict_1.default.match(err.message, /fixture exploded/, "the host's last words reach the caller");
|
|
203
|
+
return true;
|
|
204
|
+
});
|
|
205
|
+
await transport.close();
|
|
206
|
+
});
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
// Domain + manager — lifecycle, sync diff, routing
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
(0, node_test_1.test)("domain: an IsolationDomain talks to the built-in host end to end", async () => {
|
|
211
|
+
const domain = new index_1.IsolationDomain({
|
|
212
|
+
domainId: "shared:0",
|
|
213
|
+
isolation: "L2",
|
|
214
|
+
transport: spawnBuiltinHost("echo")
|
|
215
|
+
});
|
|
216
|
+
await domain.setup(CTX);
|
|
217
|
+
strict_1.default.equal(domain.isConnected, true);
|
|
218
|
+
strict_1.default.equal(domain.hostInfo?.name, "orbit-domain-host");
|
|
219
|
+
strict_1.default.deepEqual(domain.describeUnits(), [{ unitId: "echo", tools: ["echo", "sum"] }]);
|
|
220
|
+
strict_1.default.equal(await domain.invokeUnit("echo", "sum", [{ numbers: [10, 20, 30] }], CTX), 60);
|
|
221
|
+
await strict_1.default.rejects(() => domain.invokeUnit("nope", "sum", [], CTX), index_1.DomainUnitMissingError);
|
|
222
|
+
await strict_1.default.rejects(() => domain.invokeUnit("echo", "nope", [], CTX), index_1.DomainUnitMissingError);
|
|
223
|
+
await domain.teardown();
|
|
224
|
+
strict_1.default.equal(domain.isConnected, false);
|
|
225
|
+
});
|
|
226
|
+
(0, node_test_1.test)("domain manager: syncDomains allocates, routes and diffs start/keep/stop", async () => {
|
|
227
|
+
const graph = new index_1.ImpactDomainGraph();
|
|
228
|
+
for (const id of ["echo", "calc"])
|
|
229
|
+
graph.addNode(id);
|
|
230
|
+
const manager = new index_1.IsolationDomainManager({
|
|
231
|
+
transportFactory: () => spawnBuiltinHost("echo,calc"),
|
|
232
|
+
defaultTimeoutMs: 10_000
|
|
233
|
+
});
|
|
234
|
+
try {
|
|
235
|
+
// First sync: two independent units → one shared domain.
|
|
236
|
+
const plan1 = await manager.syncDomains(graph, CTX);
|
|
237
|
+
strict_1.default.equal(plan1.domains.length, 1);
|
|
238
|
+
strict_1.default.equal(manager.domainsOf().length, 1);
|
|
239
|
+
strict_1.default.deepEqual(manager.assignedUnits().sort(), ["calc", "echo"]);
|
|
240
|
+
strict_1.default.deepEqual(manager.surface().map((s) => `${s.unitId}:${s.tool}`), ["calc:add", "calc:mul", "echo:echo", "echo:sum"]);
|
|
241
|
+
// Routing through the manager.
|
|
242
|
+
strict_1.default.equal(await manager.invokeUnit("echo", "sum", [{ numbers: [1, 2] }], CTX), 3);
|
|
243
|
+
strict_1.default.equal(await manager.invokeUnit("calc", "mul", [{ a: 3, b: 4 }], CTX), 12);
|
|
244
|
+
// Graph grows: a third node with a large impact closure → new iso domain;
|
|
245
|
+
// the existing shared domain is KEPT (same domain id, not restarted).
|
|
246
|
+
graph.addNode("hub");
|
|
247
|
+
graph.addEdge("echo", "hub");
|
|
248
|
+
graph.addEdge("calc", "hub");
|
|
249
|
+
const plan2 = await manager.syncDomains(graph, CTX);
|
|
250
|
+
const ids2 = manager.domainsOf().map((d) => d.domainId).sort();
|
|
251
|
+
strict_1.default.ok(ids2.includes("iso:hub"), "the escalated node gets its own domain");
|
|
252
|
+
strict_1.default.ok(ids2.includes("shared:0"), "the existing shared domain is kept");
|
|
253
|
+
strict_1.default.equal(manager.domainsOf().length, 2);
|
|
254
|
+
// The kept domain still routes.
|
|
255
|
+
const echoed = await manager.invokeUnit("echo", "echo", [{ x: 1 }], CTX);
|
|
256
|
+
strict_1.default.deepEqual(echoed, { echo: { x: 1 } });
|
|
257
|
+
// A node is removed → the iso domain is stopped.
|
|
258
|
+
graph.removeNode("hub");
|
|
259
|
+
const plan3 = await manager.syncDomains(graph, CTX);
|
|
260
|
+
strict_1.default.equal(plan3.domains.length, 1);
|
|
261
|
+
strict_1.default.deepEqual(manager.domainsOf().map((d) => d.domainId), ["shared:0"]);
|
|
262
|
+
await strict_1.default.rejects(() => manager.invokeUnit("hub", "echo", [], CTX), index_1.DomainUnitMissingError);
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
await manager.teardownAll();
|
|
266
|
+
}
|
|
267
|
+
strict_1.default.deepEqual(manager.domainsOf(), []);
|
|
268
|
+
});
|
|
269
|
+
(0, node_test_1.test)("domain manager: invoking an unassigned unit fails closed", async () => {
|
|
270
|
+
const graph = new index_1.ImpactDomainGraph();
|
|
271
|
+
graph.addNode("echo");
|
|
272
|
+
const manager = new index_1.IsolationDomainManager({ transportFactory: () => spawnBuiltinHost("echo") });
|
|
273
|
+
try {
|
|
274
|
+
await manager.syncDomains(graph, CTX);
|
|
275
|
+
await strict_1.default.rejects(() => manager.invokeUnit("ghost", "echo", [], CTX), index_1.DomainUnitMissingError);
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
await manager.teardownAll();
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
// Gateway surface
|
|
283
|
+
// ---------------------------------------------------------------------------
|
|
284
|
+
(0, node_test_1.test)("domain channel: domain units are dispatchable through the hub", async () => {
|
|
285
|
+
const graph = new index_1.ImpactDomainGraph();
|
|
286
|
+
for (const id of ["echo", "calc"])
|
|
287
|
+
graph.addNode(id);
|
|
288
|
+
const manager = new index_1.IsolationDomainManager({ transportFactory: () => spawnBuiltinHost("echo,calc") });
|
|
289
|
+
try {
|
|
290
|
+
await manager.syncDomains(graph, { traceMarkId: "tm-hub", maxWaitMs: 10_000 });
|
|
291
|
+
const hub = new index_1.ChannelHub();
|
|
292
|
+
hub.registerBuiltInChannel(index_1.ChannelKind.DOMAIN_TOOL, new index_1.DomainChannel(manager));
|
|
293
|
+
await hub.setupAllBuiltInChannels({ traceMarkId: "tm-hub", maxWaitMs: 10_000 });
|
|
294
|
+
const out = await hub.fireChannelCall(index_1.ChannelKind.DOMAIN_TOOL, { traceMarkId: "tm-hub", maxWaitMs: 10_000 }, "echo:sum", { numbers: [2, 2] });
|
|
295
|
+
strict_1.default.equal(out, 4);
|
|
296
|
+
await hub.teardown();
|
|
297
|
+
}
|
|
298
|
+
finally {
|
|
299
|
+
await manager.teardownAll();
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
//# sourceMappingURL=isolation_domain.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation_domain.test.js","sourceRoot":"","sources":["../../test/isolation_domain.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal_wal.test.d.ts","sourceRoot":"","sources":["../../test/journal_wal.test.ts"],"names":[],"mappings":""}
|