@nookplot/runtime 0.5.99 → 0.5.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/autonomous.guardrails.test.d.ts +2 -0
- package/dist/__tests__/autonomous.guardrails.test.d.ts.map +1 -0
- package/dist/__tests__/autonomous.guardrails.test.js +215 -0
- package/dist/__tests__/autonomous.guardrails.test.js.map +1 -0
- package/dist/__tests__/autonomous.hooks.test.d.ts +2 -0
- package/dist/__tests__/autonomous.hooks.test.d.ts.map +1 -0
- package/dist/__tests__/autonomous.hooks.test.js +107 -0
- package/dist/__tests__/autonomous.hooks.test.js.map +1 -0
- package/dist/__tests__/chatEngine.episodicHook.test.d.ts +2 -0
- package/dist/__tests__/chatEngine.episodicHook.test.d.ts.map +1 -0
- package/dist/__tests__/chatEngine.episodicHook.test.js +160 -0
- package/dist/__tests__/chatEngine.episodicHook.test.js.map +1 -0
- package/dist/__tests__/chatEngine.test.d.ts +2 -0
- package/dist/__tests__/chatEngine.test.d.ts.map +1 -0
- package/dist/__tests__/chatEngine.test.js +482 -0
- package/dist/__tests__/chatEngine.test.js.map +1 -0
- package/dist/__tests__/conversation/compactionMemory.test.d.ts +2 -0
- package/dist/__tests__/conversation/compactionMemory.test.d.ts.map +1 -0
- package/dist/__tests__/conversation/compactionMemory.test.js +447 -0
- package/dist/__tests__/conversation/compactionMemory.test.js.map +1 -0
- package/dist/__tests__/conversation/modelThresholdsParity.test.d.ts +2 -0
- package/dist/__tests__/conversation/modelThresholdsParity.test.d.ts.map +1 -0
- package/dist/__tests__/conversation/modelThresholdsParity.test.js +79 -0
- package/dist/__tests__/conversation/modelThresholdsParity.test.js.map +1 -0
- package/dist/__tests__/guardrails.test.d.ts +2 -0
- package/dist/__tests__/guardrails.test.d.ts.map +1 -0
- package/dist/__tests__/guardrails.test.js +236 -0
- package/dist/__tests__/guardrails.test.js.map +1 -0
- package/dist/__tests__/hooks.test.d.ts +9 -0
- package/dist/__tests__/hooks.test.d.ts.map +1 -0
- package/dist/__tests__/hooks.test.js +188 -0
- package/dist/__tests__/hooks.test.js.map +1 -0
- package/dist/__tests__/querySegmentation.test.d.ts +2 -0
- package/dist/__tests__/querySegmentation.test.d.ts.map +1 -0
- package/dist/__tests__/querySegmentation.test.js +187 -0
- package/dist/__tests__/querySegmentation.test.js.map +1 -0
- package/dist/__tests__/sandbox.test.d.ts +13 -0
- package/dist/__tests__/sandbox.test.d.ts.map +1 -0
- package/dist/__tests__/sandbox.test.js +413 -0
- package/dist/__tests__/sandbox.test.js.map +1 -0
- package/dist/__tests__/wakeUpStack.test.d.ts +2 -0
- package/dist/__tests__/wakeUpStack.test.d.ts.map +1 -0
- package/dist/__tests__/wakeUpStack.test.js +239 -0
- package/dist/__tests__/wakeUpStack.test.js.map +1 -0
- package/dist/actionCatalog.generated.d.ts.map +1 -1
- package/dist/actionCatalog.generated.js +0 -5
- package/dist/actionCatalog.generated.js.map +1 -1
- package/dist/autonomous.d.ts +3 -0
- package/dist/autonomous.d.ts.map +1 -1
- package/dist/autonomous.js +108 -7
- package/dist/autonomous.js.map +1 -1
- package/dist/chat/chatEngine.d.ts +15 -0
- package/dist/chat/chatEngine.d.ts.map +1 -1
- package/dist/chat/chatEngine.js +59 -34
- package/dist/chat/chatEngine.js.map +1 -1
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1 -0
- package/dist/connection.js.map +1 -1
- package/dist/conversation/compactionMemory.d.ts +124 -0
- package/dist/conversation/compactionMemory.d.ts.map +1 -0
- package/dist/conversation/compactionMemory.js +379 -0
- package/dist/conversation/compactionMemory.js.map +1 -0
- package/dist/conversation/conversationLogStore.d.ts +111 -0
- package/dist/conversation/conversationLogStore.d.ts.map +1 -0
- package/dist/conversation/conversationLogStore.js +248 -0
- package/dist/conversation/conversationLogStore.js.map +1 -0
- package/dist/conversation/conversationMemory.d.ts +59 -0
- package/dist/conversation/conversationMemory.d.ts.map +1 -0
- package/dist/conversation/conversationMemory.js +32 -0
- package/dist/conversation/conversationMemory.js.map +1 -0
- package/dist/conversation/index.d.ts +16 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +5 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/modelLimits.d.ts +43 -0
- package/dist/conversation/modelLimits.d.ts.map +1 -0
- package/dist/conversation/modelLimits.js +67 -0
- package/dist/conversation/modelLimits.js.map +1 -0
- package/dist/defaultGuardrails.d.ts +21 -0
- package/dist/defaultGuardrails.d.ts.map +1 -0
- package/dist/defaultGuardrails.js +90 -0
- package/dist/defaultGuardrails.js.map +1 -0
- package/dist/episodicMemoryHook.d.ts +39 -0
- package/dist/episodicMemoryHook.d.ts.map +1 -0
- package/dist/episodicMemoryHook.js +58 -0
- package/dist/episodicMemoryHook.js.map +1 -0
- package/dist/guardrails.d.ts +182 -0
- package/dist/guardrails.d.ts.map +1 -0
- package/dist/guardrails.js +277 -0
- package/dist/guardrails.js.map +1 -0
- package/dist/hooks.d.ts +162 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +91 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +38 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -3
- package/dist/index.js.map +1 -1
- package/dist/knowledgeContext.d.ts +15 -1
- package/dist/knowledgeContext.d.ts.map +1 -1
- package/dist/knowledgeContext.js +26 -3
- package/dist/knowledgeContext.js.map +1 -1
- package/dist/memory.d.ts +15 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +14 -0
- package/dist/memory.js.map +1 -1
- package/dist/querySegmentation.d.ts +54 -0
- package/dist/querySegmentation.d.ts.map +1 -0
- package/dist/querySegmentation.js +80 -0
- package/dist/querySegmentation.js.map +1 -0
- package/dist/sandbox.d.ts +156 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +425 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/signalActionMap.d.ts +19 -0
- package/dist/signalActionMap.d.ts.map +1 -1
- package/dist/signalActionMap.js +33 -0
- package/dist/signalActionMap.js.map +1 -1
- package/dist/types.d.ts +25 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/wakeUpStack.d.ts +94 -0
- package/dist/wakeUpStack.d.ts.map +1 -0
- package/dist/wakeUpStack.js +215 -0
- package/dist/wakeUpStack.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GuardrailRegistry — unit tests.
|
|
3
|
+
*
|
|
4
|
+
* Covers: pass-through, partial mutation, error wrapping, ordering,
|
|
5
|
+
* disposer behavior, output-guardrail merge semantics, withGuardrails
|
|
6
|
+
* standalone wrapper.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect } from "vitest";
|
|
9
|
+
import { GuardrailRegistry, GuardrailTripped, InputGuardrailTripped, OutputGuardrailTripped, withGuardrails, } from "../guardrails.js";
|
|
10
|
+
describe("GuardrailRegistry — input", () => {
|
|
11
|
+
it("returns args unchanged when no guardrails registered", async () => {
|
|
12
|
+
const reg = new GuardrailRegistry();
|
|
13
|
+
const out = await reg.runInput("send_dm", { to: "0xABC", content: "hi" });
|
|
14
|
+
expect(out).toEqual({ to: "0xABC", content: "hi" });
|
|
15
|
+
});
|
|
16
|
+
it("guardrail returning undefined is a pass-through", async () => {
|
|
17
|
+
const reg = new GuardrailRegistry();
|
|
18
|
+
reg.register("send_dm", { input: [() => undefined] });
|
|
19
|
+
const out = await reg.runInput("send_dm", { to: "0x1", content: "hi" });
|
|
20
|
+
expect(out).toEqual({ to: "0x1", content: "hi" });
|
|
21
|
+
});
|
|
22
|
+
it("guardrail returning Partial<TArgs> shallow-merges", async () => {
|
|
23
|
+
const reg = new GuardrailRegistry();
|
|
24
|
+
reg.register("send_dm", {
|
|
25
|
+
input: [({ content }) => ({ content: `[REDACTED:${content.length}]` })],
|
|
26
|
+
});
|
|
27
|
+
const out = await reg.runInput("send_dm", { to: "0x1", content: "secret" });
|
|
28
|
+
expect(out).toEqual({ to: "0x1", content: "[REDACTED:6]" });
|
|
29
|
+
});
|
|
30
|
+
it("multiple guardrails compose in declared order", async () => {
|
|
31
|
+
const reg = new GuardrailRegistry();
|
|
32
|
+
reg.register("send_dm", {
|
|
33
|
+
input: [
|
|
34
|
+
() => ({ content: "first" }),
|
|
35
|
+
({ content }) => ({ content: `${content}+second` }),
|
|
36
|
+
],
|
|
37
|
+
});
|
|
38
|
+
const out = await reg.runInput("send_dm", { to: "0x1", content: "raw" });
|
|
39
|
+
expect(out.content).toBe("first+second");
|
|
40
|
+
});
|
|
41
|
+
it("InputGuardrailTripped is re-thrown as-is", async () => {
|
|
42
|
+
const reg = new GuardrailRegistry();
|
|
43
|
+
const err = new InputGuardrailTripped("invalid recipient");
|
|
44
|
+
reg.register("send_dm", { input: [() => { throw err; }] });
|
|
45
|
+
await expect(reg.runInput("send_dm", { to: "" })).rejects.toBe(err);
|
|
46
|
+
});
|
|
47
|
+
it("non-guardrail errors get wrapped with the original as cause", async () => {
|
|
48
|
+
const reg = new GuardrailRegistry();
|
|
49
|
+
const inner = new Error("boom");
|
|
50
|
+
reg.register("send_dm", { input: [() => { throw inner; }] });
|
|
51
|
+
await expect(reg.runInput("send_dm", { to: "0x1" }))
|
|
52
|
+
.rejects.toMatchObject({
|
|
53
|
+
name: "InputGuardrailTripped",
|
|
54
|
+
message: expect.stringContaining("boom"),
|
|
55
|
+
cause: inner,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it("InputGuardrailTripped is also a GuardrailTripped", async () => {
|
|
59
|
+
const reg = new GuardrailRegistry();
|
|
60
|
+
reg.register("send_dm", { input: [() => { throw new InputGuardrailTripped("x"); }] });
|
|
61
|
+
try {
|
|
62
|
+
await reg.runInput("send_dm", {});
|
|
63
|
+
throw new Error("expected throw");
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
expect(err).toBeInstanceOf(GuardrailTripped);
|
|
67
|
+
expect(err).toBeInstanceOf(InputGuardrailTripped);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
it("the original args object is not mutated", async () => {
|
|
71
|
+
const reg = new GuardrailRegistry();
|
|
72
|
+
reg.register("send_dm", { input: [() => ({ content: "modified" })] });
|
|
73
|
+
const original = { to: "0x1", content: "raw" };
|
|
74
|
+
await reg.runInput("send_dm", original);
|
|
75
|
+
expect(original).toEqual({ to: "0x1", content: "raw" });
|
|
76
|
+
});
|
|
77
|
+
it("async guardrails are awaited", async () => {
|
|
78
|
+
const reg = new GuardrailRegistry();
|
|
79
|
+
reg.register("send_dm", {
|
|
80
|
+
input: [
|
|
81
|
+
async ({ content }) => {
|
|
82
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
83
|
+
return { content: `${content}-awaited` };
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
const out = await reg.runInput("send_dm", { to: "0x1", content: "x" });
|
|
88
|
+
expect(out.content).toBe("x-awaited");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("GuardrailRegistry — output", () => {
|
|
92
|
+
it("returns result unchanged when no guardrails registered", async () => {
|
|
93
|
+
const reg = new GuardrailRegistry();
|
|
94
|
+
const out = await reg.runOutput("send_dm", { messageId: "m1" });
|
|
95
|
+
expect(out).toEqual({ messageId: "m1" });
|
|
96
|
+
});
|
|
97
|
+
it("output guardrail returning Partial merges onto result", async () => {
|
|
98
|
+
const reg = new GuardrailRegistry();
|
|
99
|
+
reg.register("send_dm", {
|
|
100
|
+
output: [() => ({ scrubbed: true })],
|
|
101
|
+
});
|
|
102
|
+
const out = await reg.runOutput("send_dm", { messageId: "m1" });
|
|
103
|
+
expect(out).toEqual({ messageId: "m1", scrubbed: true });
|
|
104
|
+
});
|
|
105
|
+
it("output guardrail cannot drop security-critical fields silently", async () => {
|
|
106
|
+
// Returning a partial CANNOT replace the whole result — txHash survives.
|
|
107
|
+
const reg = new GuardrailRegistry();
|
|
108
|
+
reg.register("create_bounty", {
|
|
109
|
+
output: [() => ({ logged: true })],
|
|
110
|
+
});
|
|
111
|
+
const out = await reg.runOutput("create_bounty", {
|
|
112
|
+
txHash: "0xCRITICAL",
|
|
113
|
+
bountyId: 42,
|
|
114
|
+
});
|
|
115
|
+
expect(out).toEqual({ txHash: "0xCRITICAL", bountyId: 42, logged: true });
|
|
116
|
+
});
|
|
117
|
+
it("OutputGuardrailTripped is re-thrown as-is", async () => {
|
|
118
|
+
const reg = new GuardrailRegistry();
|
|
119
|
+
const err = new OutputGuardrailTripped("bad result");
|
|
120
|
+
reg.register("send_dm", { output: [() => { throw err; }] });
|
|
121
|
+
await expect(reg.runOutput("send_dm", {})).rejects.toBe(err);
|
|
122
|
+
});
|
|
123
|
+
it("non-guardrail errors in output get wrapped", async () => {
|
|
124
|
+
const reg = new GuardrailRegistry();
|
|
125
|
+
reg.register("send_dm", { output: [() => { throw new Error("bad"); }] });
|
|
126
|
+
await expect(reg.runOutput("send_dm", {}))
|
|
127
|
+
.rejects.toMatchObject({
|
|
128
|
+
name: "OutputGuardrailTripped",
|
|
129
|
+
message: expect.stringContaining("bad"),
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
it("non-object results are returned unchanged even if guardrail returns a partial", async () => {
|
|
133
|
+
const reg = new GuardrailRegistry();
|
|
134
|
+
reg.register("send_dm", { output: [() => ({ extra: 1 })] });
|
|
135
|
+
// Result is a string — there's nothing to merge into.
|
|
136
|
+
const out = await reg.runOutput("send_dm", "ok");
|
|
137
|
+
expect(out).toBe("ok");
|
|
138
|
+
});
|
|
139
|
+
it("output guardrail returning { txHash: undefined } cannot drop txHash", async () => {
|
|
140
|
+
const reg = new GuardrailRegistry();
|
|
141
|
+
reg.register("create_bounty", {
|
|
142
|
+
output: [() => ({ txHash: undefined, logged: true })],
|
|
143
|
+
});
|
|
144
|
+
const out = await reg.runOutput("create_bounty", {
|
|
145
|
+
txHash: "0xCRITICAL",
|
|
146
|
+
bountyId: 42,
|
|
147
|
+
});
|
|
148
|
+
expect(out).toEqual({ txHash: "0xCRITICAL", bountyId: 42, logged: true });
|
|
149
|
+
});
|
|
150
|
+
it("input guardrail returning { field: undefined } cannot drop the field", async () => {
|
|
151
|
+
const reg = new GuardrailRegistry();
|
|
152
|
+
reg.register("send_dm", {
|
|
153
|
+
input: [() => ({ to: undefined, content: "sanitized" })],
|
|
154
|
+
});
|
|
155
|
+
const out = await reg.runInput("send_dm", {
|
|
156
|
+
to: "0xADDR",
|
|
157
|
+
content: "raw",
|
|
158
|
+
});
|
|
159
|
+
expect(out).toEqual({ to: "0xADDR", content: "sanitized" });
|
|
160
|
+
});
|
|
161
|
+
it("output guardrail returning empty object preserves all original fields", async () => {
|
|
162
|
+
const reg = new GuardrailRegistry();
|
|
163
|
+
reg.register("create_bounty", { output: [() => ({})] });
|
|
164
|
+
const out = await reg.runOutput("create_bounty", {
|
|
165
|
+
txHash: "0xabc",
|
|
166
|
+
signature: "0xsig",
|
|
167
|
+
bountyId: 1,
|
|
168
|
+
});
|
|
169
|
+
expect(out).toEqual({ txHash: "0xabc", signature: "0xsig", bountyId: 1 });
|
|
170
|
+
});
|
|
171
|
+
it("original result reference is not mutated by output guardrail merge", async () => {
|
|
172
|
+
const reg = new GuardrailRegistry();
|
|
173
|
+
reg.register("create_bounty", { output: [() => ({ extra: "tag" })] });
|
|
174
|
+
const original = { txHash: "0xabc", bountyId: 1 };
|
|
175
|
+
const out = await reg.runOutput("create_bounty", original);
|
|
176
|
+
expect(original).toEqual({ txHash: "0xabc", bountyId: 1 }); // untouched
|
|
177
|
+
expect(out).toEqual({ txHash: "0xabc", bountyId: 1, extra: "tag" });
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe("GuardrailRegistry — registration", () => {
|
|
181
|
+
it("disposer returned by register() removes only that call's guardrails", async () => {
|
|
182
|
+
const reg = new GuardrailRegistry();
|
|
183
|
+
const dispose = reg.register("send_dm", {
|
|
184
|
+
input: [() => ({ content: "first" })],
|
|
185
|
+
});
|
|
186
|
+
reg.register("send_dm", {
|
|
187
|
+
input: [() => ({ content: "second" })],
|
|
188
|
+
});
|
|
189
|
+
expect(reg.countInput("send_dm")).toBe(2);
|
|
190
|
+
dispose();
|
|
191
|
+
expect(reg.countInput("send_dm")).toBe(1);
|
|
192
|
+
const out = await reg.runInput("send_dm", { to: "0x1" });
|
|
193
|
+
expect(out.content).toBe("second");
|
|
194
|
+
});
|
|
195
|
+
it("clear(actionType) removes only that action's guardrails", () => {
|
|
196
|
+
const reg = new GuardrailRegistry();
|
|
197
|
+
reg.register("send_dm", { input: [() => undefined] });
|
|
198
|
+
reg.register("create_bounty", { input: [() => undefined] });
|
|
199
|
+
reg.clear("send_dm");
|
|
200
|
+
expect(reg.countInput("send_dm")).toBe(0);
|
|
201
|
+
expect(reg.countInput("create_bounty")).toBe(1);
|
|
202
|
+
});
|
|
203
|
+
it("clear() removes all guardrails", () => {
|
|
204
|
+
const reg = new GuardrailRegistry();
|
|
205
|
+
reg.register("send_dm", { input: [() => undefined], output: [() => undefined] });
|
|
206
|
+
reg.register("create_bounty", { input: [() => undefined] });
|
|
207
|
+
reg.clear();
|
|
208
|
+
expect(reg.countInput("send_dm")).toBe(0);
|
|
209
|
+
expect(reg.countOutput("send_dm")).toBe(0);
|
|
210
|
+
expect(reg.countInput("create_bounty")).toBe(0);
|
|
211
|
+
});
|
|
212
|
+
it("registering an empty set is a no-op (returns no-op disposer)", () => {
|
|
213
|
+
const reg = new GuardrailRegistry();
|
|
214
|
+
const dispose = reg.register("send_dm", {});
|
|
215
|
+
expect(reg.countInput("send_dm")).toBe(0);
|
|
216
|
+
expect(() => dispose()).not.toThrow();
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
describe("withGuardrails (standalone wrapper)", () => {
|
|
220
|
+
it("wraps a handler with input + output guardrails", async () => {
|
|
221
|
+
const wrapped = withGuardrails(async ({ value }) => ({ doubled: value * 2 }), {
|
|
222
|
+
input: [({ value }) => {
|
|
223
|
+
if (value < 0)
|
|
224
|
+
throw new InputGuardrailTripped("negative");
|
|
225
|
+
}],
|
|
226
|
+
output: [({ doubled }) => {
|
|
227
|
+
if (doubled > 100)
|
|
228
|
+
throw new OutputGuardrailTripped("too big");
|
|
229
|
+
}],
|
|
230
|
+
});
|
|
231
|
+
expect(await wrapped({ value: 5 })).toEqual({ doubled: 10 });
|
|
232
|
+
await expect(wrapped({ value: -1 })).rejects.toBeInstanceOf(InputGuardrailTripped);
|
|
233
|
+
await expect(wrapped({ value: 51 })).rejects.toBeInstanceOf(OutputGuardrailTripped);
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
//# sourceMappingURL=guardrails.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.test.js","sourceRoot":"","sources":["../../src/__tests__/guardrails.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HookRegistry — unit tests.
|
|
3
|
+
*
|
|
4
|
+
* Covers: registration order, prepend, throwing-callback isolation,
|
|
5
|
+
* deregister + disposer, async emit semantics, fire-and-forget, clear,
|
|
6
|
+
* and the parity-fixture key-shape contract.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=hooks.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/hooks.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HookRegistry — unit tests.
|
|
3
|
+
*
|
|
4
|
+
* Covers: registration order, prepend, throwing-callback isolation,
|
|
5
|
+
* deregister + disposer, async emit semantics, fire-and-forget, clear,
|
|
6
|
+
* and the parity-fixture key-shape contract.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, expect, it, vi } from "vitest";
|
|
9
|
+
import { readFileSync } from "node:fs";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
import { HookRegistry, hooks as moduleSingleton, } from "../hooks.js";
|
|
13
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
const FIXTURE_PATH = join(__dirname, "fixtures", "hook-events.json");
|
|
15
|
+
const fixture = JSON.parse(readFileSync(FIXTURE_PATH, "utf8"));
|
|
16
|
+
describe("HookRegistry", () => {
|
|
17
|
+
it("preserves insertion order on emit", async () => {
|
|
18
|
+
const reg = new HookRegistry();
|
|
19
|
+
const calls = [];
|
|
20
|
+
reg.register("action_start", () => { calls.push(1); });
|
|
21
|
+
reg.register("action_start", () => { calls.push(2); });
|
|
22
|
+
reg.register("action_start", () => { calls.push(3); });
|
|
23
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
24
|
+
expect(calls).toEqual([1, 2, 3]);
|
|
25
|
+
});
|
|
26
|
+
it("prepend: true puts callback at the front", async () => {
|
|
27
|
+
const reg = new HookRegistry();
|
|
28
|
+
const calls = [];
|
|
29
|
+
reg.register("action_start", () => { calls.push("b"); });
|
|
30
|
+
reg.register("action_start", () => { calls.push("a"); }, { prepend: true });
|
|
31
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
32
|
+
expect(calls).toEqual(["a", "b"]);
|
|
33
|
+
});
|
|
34
|
+
it("one throwing callback does not prevent others", async () => {
|
|
35
|
+
const reg = new HookRegistry();
|
|
36
|
+
const errSpy = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
37
|
+
let counted = 0;
|
|
38
|
+
reg.register("action_start", () => { throw new Error("boom"); });
|
|
39
|
+
reg.register("action_start", () => { counted += 1; });
|
|
40
|
+
reg.register("action_start", async () => { counted += 1; });
|
|
41
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
42
|
+
expect(counted).toBe(2);
|
|
43
|
+
errSpy.mockRestore();
|
|
44
|
+
});
|
|
45
|
+
it("logs callback errors via console.error (observability)", async () => {
|
|
46
|
+
const reg = new HookRegistry();
|
|
47
|
+
const errSpy = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
48
|
+
reg.register("action_start", () => { throw new Error("boom"); });
|
|
49
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
50
|
+
expect(errSpy).toHaveBeenCalledTimes(1);
|
|
51
|
+
const [msg, err] = errSpy.mock.calls[0] ?? [];
|
|
52
|
+
expect(String(msg)).toContain("action_start");
|
|
53
|
+
expect(err.message).toBe("boom");
|
|
54
|
+
errSpy.mockRestore();
|
|
55
|
+
});
|
|
56
|
+
it("deregister removes only the matching callback", async () => {
|
|
57
|
+
const reg = new HookRegistry();
|
|
58
|
+
const calls = [];
|
|
59
|
+
const cbA = () => { calls.push("a"); };
|
|
60
|
+
const cbB = () => { calls.push("b"); };
|
|
61
|
+
reg.register("action_start", cbA);
|
|
62
|
+
reg.register("action_start", cbB);
|
|
63
|
+
reg.deregister("action_start", cbA);
|
|
64
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
65
|
+
expect(calls).toEqual(["b"]);
|
|
66
|
+
expect(reg.count("action_start")).toBe(1);
|
|
67
|
+
});
|
|
68
|
+
it("disposer returned by register() removes only that callback", async () => {
|
|
69
|
+
const reg = new HookRegistry();
|
|
70
|
+
const calls = [];
|
|
71
|
+
const dispose = reg.register("action_start", () => { calls.push("a"); });
|
|
72
|
+
reg.register("action_start", () => { calls.push("b"); });
|
|
73
|
+
dispose();
|
|
74
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
75
|
+
expect(calls).toEqual(["b"]);
|
|
76
|
+
});
|
|
77
|
+
it("emit awaits async callbacks before resolving", async () => {
|
|
78
|
+
const reg = new HookRegistry();
|
|
79
|
+
let resolved = false;
|
|
80
|
+
reg.register("action_start", async () => {
|
|
81
|
+
await new Promise((r) => setTimeout(r, 20));
|
|
82
|
+
resolved = true;
|
|
83
|
+
});
|
|
84
|
+
const t0 = Date.now();
|
|
85
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
86
|
+
expect(resolved).toBe(true);
|
|
87
|
+
expect(Date.now() - t0).toBeGreaterThanOrEqual(15);
|
|
88
|
+
});
|
|
89
|
+
it("emitFireAndForget returns synchronously even with async callbacks", async () => {
|
|
90
|
+
const reg = new HookRegistry();
|
|
91
|
+
let resolved = false;
|
|
92
|
+
reg.register("action_start", async () => {
|
|
93
|
+
await new Promise((r) => setTimeout(r, 20));
|
|
94
|
+
resolved = true;
|
|
95
|
+
});
|
|
96
|
+
reg.emitFireAndForget("action_start", { actionType: "x", args: {} });
|
|
97
|
+
expect(resolved).toBe(false);
|
|
98
|
+
await new Promise((r) => setTimeout(r, 30));
|
|
99
|
+
expect(resolved).toBe(true);
|
|
100
|
+
});
|
|
101
|
+
it("sync and async callbacks coexist on the same event", async () => {
|
|
102
|
+
const reg = new HookRegistry();
|
|
103
|
+
const calls = [];
|
|
104
|
+
reg.register("action_start", () => { calls.push("sync1"); });
|
|
105
|
+
reg.register("action_start", async () => { calls.push("async1"); });
|
|
106
|
+
reg.register("action_start", () => { calls.push("sync2"); });
|
|
107
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
108
|
+
expect(calls.sort()).toEqual(["async1", "sync1", "sync2"]);
|
|
109
|
+
});
|
|
110
|
+
it("clear(event) removes only that event's subscribers", async () => {
|
|
111
|
+
const reg = new HookRegistry();
|
|
112
|
+
let a = 0;
|
|
113
|
+
let b = 0;
|
|
114
|
+
reg.register("action_start", () => { a++; });
|
|
115
|
+
reg.register("action_end", () => { b++; });
|
|
116
|
+
reg.clear("action_start");
|
|
117
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
118
|
+
await reg.emit("action_end", { actionType: "x", args: {}, result: null, durationMs: 0 });
|
|
119
|
+
expect(a).toBe(0);
|
|
120
|
+
expect(b).toBe(1);
|
|
121
|
+
});
|
|
122
|
+
it("clear() removes all events", () => {
|
|
123
|
+
const reg = new HookRegistry();
|
|
124
|
+
reg.register("action_start", () => { });
|
|
125
|
+
reg.register("action_end", () => { });
|
|
126
|
+
reg.clear();
|
|
127
|
+
expect(reg.count("action_start")).toBe(0);
|
|
128
|
+
expect(reg.count("action_end")).toBe(0);
|
|
129
|
+
});
|
|
130
|
+
it("snapshot semantics: a callback that registers another mid-emit doesn't fire it this turn", async () => {
|
|
131
|
+
const reg = new HookRegistry();
|
|
132
|
+
const calls = [];
|
|
133
|
+
reg.register("action_start", () => {
|
|
134
|
+
calls.push("first");
|
|
135
|
+
reg.register("action_start", () => { calls.push("late"); });
|
|
136
|
+
});
|
|
137
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
138
|
+
expect(calls).toEqual(["first"]);
|
|
139
|
+
await reg.emit("action_start", { actionType: "x", args: {} });
|
|
140
|
+
expect(calls).toEqual(["first", "first", "late"]);
|
|
141
|
+
});
|
|
142
|
+
it("module singleton is a usable HookRegistry", () => {
|
|
143
|
+
expect(moduleSingleton).toBeInstanceOf(HookRegistry);
|
|
144
|
+
});
|
|
145
|
+
describe("parity fixture", () => {
|
|
146
|
+
it("declares the same set of events as HookEventMap", () => {
|
|
147
|
+
// Sanity check: every event mentioned in the TS HookEvent union must
|
|
148
|
+
// have an entry in the fixture, otherwise the Py side would test a
|
|
149
|
+
// shape the TS side doesn't agree with.
|
|
150
|
+
const tsEvents = [
|
|
151
|
+
"action_start", "action_end", "action_error", "action_rejected",
|
|
152
|
+
"signal_received", "tool_input", "tool_output",
|
|
153
|
+
"chat_turn_complete", "memory_compacted", "compaction_failed",
|
|
154
|
+
];
|
|
155
|
+
for (const evt of tsEvents) {
|
|
156
|
+
expect(fixture.events[evt], `fixture missing event: ${evt}`).toBeDefined();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
it("a representative payload for each event satisfies its required keys", async () => {
|
|
160
|
+
const samples = {
|
|
161
|
+
action_start: { actionType: "vote", args: { postCid: "QmX" } },
|
|
162
|
+
action_end: { actionType: "vote", args: {}, result: { txHash: "0x1" }, durationMs: 12 },
|
|
163
|
+
action_error: { actionType: "vote", args: {}, error: new Error("nope"), durationMs: 5 },
|
|
164
|
+
action_rejected: { actionType: "vote", args: {}, reason: "denied" },
|
|
165
|
+
signal_received: { signalType: "dm_received" },
|
|
166
|
+
tool_input: { toolName: "send_dm", args: { to: "0x1", content: "hi" } },
|
|
167
|
+
tool_output: { toolName: "send_dm", args: {}, result: { ok: true } },
|
|
168
|
+
chat_turn_complete: {
|
|
169
|
+
sender: "alice", platform: "telegram", message: "hi", response: "hello",
|
|
170
|
+
toolsUsed: false, toolCallCount: 0,
|
|
171
|
+
},
|
|
172
|
+
memory_compacted: {
|
|
173
|
+
sessionId: "sess1", compactionNumber: 1, messagesCompacted: 8, summaryTokens: 256,
|
|
174
|
+
},
|
|
175
|
+
compaction_failed: {
|
|
176
|
+
sessionId: "sess1", error: new Error("LLM down"), attemptedMessages: 12,
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
for (const [evt, payload] of Object.entries(samples)) {
|
|
180
|
+
const spec = fixture.events[evt];
|
|
181
|
+
for (const key of spec.required_keys) {
|
|
182
|
+
expect(payload[key], `${evt}.${key}`).toBeDefined();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
//# sourceMappingURL=hooks.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.test.js","sourceRoot":"","sources":["../../src/__tests__/hooks.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"querySegmentation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/querySegmentation.test.ts"],"names":[],"mappings":""}
|