agenthub-multiagent-mcp 1.52.0 → 1.53.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/dist/captureHookInstall.d.ts +127 -0
- package/dist/captureHookInstall.d.ts.map +1 -0
- package/dist/captureHookInstall.js +256 -0
- package/dist/captureHookInstall.js.map +1 -0
- package/dist/captureHookInstall.test.d.ts +10 -0
- package/dist/captureHookInstall.test.d.ts.map +1 -0
- package/dist/captureHookInstall.test.js +325 -0
- package/dist/captureHookInstall.test.js.map +1 -0
- package/dist/channel.js +96 -0
- package/dist/channel.js.map +1 -1
- package/dist/client.d.ts +50 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +90 -0
- package/dist/client.js.map +1 -1
- package/dist/commands/setup-shell.js +11 -11
- package/dist/daemon.js +142 -3
- package/dist/daemon.js.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/dist/session-capture.sh +410 -0
- package/dist/sessionCapture.d.ts +163 -0
- package/dist/sessionCapture.d.ts.map +1 -0
- package/dist/sessionCapture.js +279 -0
- package/dist/sessionCapture.js.map +1 -0
- package/dist/sessionCapture.test.d.ts +9 -0
- package/dist/sessionCapture.test.d.ts.map +1 -0
- package/dist/sessionCapture.test.js +366 -0
- package/dist/sessionCapture.test.js.map +1 -0
- package/dist/sessionCaptureScript.test.d.ts +16 -0
- package/dist/sessionCaptureScript.test.d.ts.map +1 -0
- package/dist/sessionCaptureScript.test.js +92 -0
- package/dist/sessionCaptureScript.test.js.map +1 -0
- package/dist/steering.test.d.ts +2 -0
- package/dist/steering.test.d.ts.map +1 -0
- package/dist/steering.test.js +223 -0
- package/dist/steering.test.js.map +1 -0
- package/dist/streamingRuntimeLib.d.ts +260 -1
- package/dist/streamingRuntimeLib.d.ts.map +1 -1
- package/dist/streamingRuntimeLib.js +474 -1
- package/dist/streamingRuntimeLib.js.map +1 -1
- package/dist/streamingRuntimeLib.test.js +87 -1
- package/dist/streamingRuntimeLib.test.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/sessionControl.d.ts +53 -0
- package/dist/tools/sessionControl.d.ts.map +1 -0
- package/dist/tools/sessionControl.js +265 -0
- package/dist/tools/sessionControl.js.map +1 -0
- package/dist/tools/sessionControl.test.d.ts +14 -0
- package/dist/tools/sessionControl.test.d.ts.map +1 -0
- package/dist/tools/sessionControl.test.js +298 -0
- package/dist/tools/sessionControl.test.js.map +1 -0
- package/dist/tools/tools.test.js +4 -2
- package/dist/tools/tools.test.js.map +1 -1
- package/native/agenthub-memvid/agenthub-memvid.linux-x64-gnu.node +0 -0
- package/package.json +2 -2
- package/skills/commands/start-session.md +77 -77
- package/skills/skills/deploy-staging/SKILL.md +164 -164
- package/skills/skills/deploy-vps-openclaw/SKILL.md +97 -97
- package/skills/skills/karpathy-guidelines/SKILL.md +67 -67
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionCapture.test.js","sourceRoot":"","sources":["../src/sessionCapture.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guards on `session-capture.sh` itself (add-multiplayer-sessions §1.5/§3.2).
|
|
3
|
+
*
|
|
4
|
+
* The hook embeds its Python in a **bash double-quoted string**, which makes it
|
|
5
|
+
* quietly dangerous to edit: bash expands backticks and `$` inside that string
|
|
6
|
+
* before Python ever sees it. A single backtick in a Python *comment* ran
|
|
7
|
+
* `read`, which ate the hook's stdin — Python then parsed an empty tool payload
|
|
8
|
+
* and the hook did nothing at all, with no error anywhere. Capture just
|
|
9
|
+
* silently stopped working.
|
|
10
|
+
*
|
|
11
|
+
* That failure is invisible to every other kind of test: the shell exits 0, the
|
|
12
|
+
* MCP is fine, and the server simply never hears from anyone. So it is checked
|
|
13
|
+
* statically here, against the file's own text.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=sessionCaptureScript.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionCaptureScript.test.d.ts","sourceRoot":"","sources":["../src/sessionCaptureScript.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guards on `session-capture.sh` itself (add-multiplayer-sessions §1.5/§3.2).
|
|
3
|
+
*
|
|
4
|
+
* The hook embeds its Python in a **bash double-quoted string**, which makes it
|
|
5
|
+
* quietly dangerous to edit: bash expands backticks and `$` inside that string
|
|
6
|
+
* before Python ever sees it. A single backtick in a Python *comment* ran
|
|
7
|
+
* `read`, which ate the hook's stdin — Python then parsed an empty tool payload
|
|
8
|
+
* and the hook did nothing at all, with no error anywhere. Capture just
|
|
9
|
+
* silently stopped working.
|
|
10
|
+
*
|
|
11
|
+
* That failure is invisible to every other kind of test: the shell exits 0, the
|
|
12
|
+
* MCP is fine, and the server simply never hears from anyone. So it is checked
|
|
13
|
+
* statically here, against the file's own text.
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it, expect } from "vitest";
|
|
16
|
+
import { readFileSync } from "fs";
|
|
17
|
+
import * as path from "path";
|
|
18
|
+
import { fileURLToPath } from "url";
|
|
19
|
+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
20
|
+
const PACKAGE_COPY = path.join(repoRoot, "mcp-server", "session-capture.sh");
|
|
21
|
+
const REPO_COPY = path.join(repoRoot, ".claude", "hooks", "session-capture.sh");
|
|
22
|
+
function read(p) {
|
|
23
|
+
return readFileSync(p, "utf8");
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extract every embedded Python block — the text between `"$PY" -c "` and the
|
|
27
|
+
* closing `" 2>/dev/null)`. These are the regions bash expands.
|
|
28
|
+
*/
|
|
29
|
+
function pythonBlocks(script) {
|
|
30
|
+
const blocks = [];
|
|
31
|
+
const opener = '"$PY" -c "';
|
|
32
|
+
let from = 0;
|
|
33
|
+
for (;;) {
|
|
34
|
+
const start = script.indexOf(opener, from);
|
|
35
|
+
if (start === -1)
|
|
36
|
+
break;
|
|
37
|
+
const bodyStart = start + opener.length;
|
|
38
|
+
const end = script.indexOf('" 2>/dev/null)', bodyStart);
|
|
39
|
+
if (end === -1)
|
|
40
|
+
break;
|
|
41
|
+
blocks.push(script.slice(bodyStart, end));
|
|
42
|
+
from = end + 1;
|
|
43
|
+
}
|
|
44
|
+
return blocks;
|
|
45
|
+
}
|
|
46
|
+
describe("session-capture.sh", () => {
|
|
47
|
+
it("ships two byte-identical copies", () => {
|
|
48
|
+
// The packaged copy is what npm publishes; the repo copy is what a checkout
|
|
49
|
+
// runs. A drift between them means one caller silently gets old behaviour.
|
|
50
|
+
expect(read(PACKAGE_COPY)).toBe(read(REPO_COPY));
|
|
51
|
+
});
|
|
52
|
+
it("embeds exactly the two Python blocks the script is built around", () => {
|
|
53
|
+
// The interactive bootstrap (§3.2) and the event builder (§1.5). A third
|
|
54
|
+
// would mean someone added a block that these guards have not been reviewed
|
|
55
|
+
// against.
|
|
56
|
+
expect(pythonBlocks(read(PACKAGE_COPY))).toHaveLength(2);
|
|
57
|
+
});
|
|
58
|
+
it("contains no backtick inside an embedded Python block", () => {
|
|
59
|
+
// Bash runs backticks inside a double-quoted string as a command, even in
|
|
60
|
+
// what looks like a Python comment. This is the exact bug that silently
|
|
61
|
+
// disabled capture.
|
|
62
|
+
for (const [i, block] of pythonBlocks(read(PACKAGE_COPY)).entries()) {
|
|
63
|
+
const line = block.split("\n").find((l) => l.includes("`"));
|
|
64
|
+
expect(line, `python block ${i} contains a backtick: ${line}`).toBeUndefined();
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
it("contains no unescaped $ inside an embedded Python block", () => {
|
|
68
|
+
// Same class of hazard: bash would substitute a variable into the Python
|
|
69
|
+
// source. Escaped \$ is fine; a bare $ is not.
|
|
70
|
+
for (const [i, block] of pythonBlocks(read(PACKAGE_COPY)).entries()) {
|
|
71
|
+
const offending = block
|
|
72
|
+
.split("\n")
|
|
73
|
+
.find((l) => /(^|[^\\])\$/.test(l));
|
|
74
|
+
expect(offending, `python block ${i} has an unescaped $: ${offending}`).toBeUndefined();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
it("keeps the interactive path behind a consent grant, not an env var", () => {
|
|
78
|
+
// §3.1's constraint expressed where it can regress: the bootstrap must be
|
|
79
|
+
// reachable only via the grant file the MCP writes after the server
|
|
80
|
+
// confirms consent. An env-var switch here would let whoever controls the
|
|
81
|
+
// environment on a shared host turn capture on for the person using it.
|
|
82
|
+
const script = read(PACKAGE_COPY);
|
|
83
|
+
expect(script).toContain("AGENTHUB_CAPTURE_GRANT");
|
|
84
|
+
expect(script).toContain("/api/session-capture/sessions");
|
|
85
|
+
expect(script).not.toMatch(/AGENTHUB_CAPTURE_ENABLED|AGENTHUB_CAPTURE_CONSENT=/);
|
|
86
|
+
});
|
|
87
|
+
it("writes the recording indicator to stdout as a systemMessage", () => {
|
|
88
|
+
// §3.3 — the person must see that they are being recorded.
|
|
89
|
+
expect(read(PACKAGE_COPY)).toContain("'systemMessage'");
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=sessionCaptureScript.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionCaptureScript.test.js","sourceRoot":"","sources":["../src/sessionCaptureScript.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steering.test.d.ts","sourceRoot":"","sources":["../src/steering.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Steering, from the mcp-server side (add-multiplayer-sessions §4.3–§4.5).
|
|
3
|
+
*
|
|
4
|
+
* This package owns two of the three producers: the one-shot daemon (which
|
|
5
|
+
* declares `one_shot` so a `claude -p` shift is refused with a reason, not by
|
|
6
|
+
* accident) and the channel plugin (whose steer frame previously fell through
|
|
7
|
+
* the message handler with nothing to match it — accepted by the server and
|
|
8
|
+
* dropped on arrival).
|
|
9
|
+
*
|
|
10
|
+
* The channel plugin itself is an executable script, so the parts worth testing
|
|
11
|
+
* were put in `streamingRuntimeLib.ts`, which is importable: the frame parser and
|
|
12
|
+
* the framing. What is asserted here is the pair of properties that together mean
|
|
13
|
+
* "never accepted and dropped" — a routed steer is recognised and rendered, and
|
|
14
|
+
* nothing in either package declares the `channel` transport in the first place,
|
|
15
|
+
* so the server refuses those sessions up front.
|
|
16
|
+
*/
|
|
17
|
+
import { describe, it, expect } from "vitest";
|
|
18
|
+
import * as fs from "fs";
|
|
19
|
+
import * as path from "path";
|
|
20
|
+
import { fileURLToPath } from "url";
|
|
21
|
+
import { buildTurnContent, buildSteerTurnContent, parseSteerFrame, sessionSteerEnabled, recordResultUsage, shouldRecycle, newRuntimeStats, SessionEventExtractor, SessionEventEmitter, STEER_MESSAGE_TYPE, } from "./streamingRuntimeLib.js";
|
|
22
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
describe("§4.8 kill switch", () => {
|
|
24
|
+
it("is off unless explicitly enabled, so an unconfigured deployment does no steering I/O", () => {
|
|
25
|
+
expect(sessionSteerEnabled({})).toBe(false);
|
|
26
|
+
expect(sessionSteerEnabled({ AGENTHUB_SESSION_STEER_ENABLED: "" })).toBe(false);
|
|
27
|
+
expect(sessionSteerEnabled({ AGENTHUB_SESSION_STEER_ENABLED: "nope" })).toBe(false);
|
|
28
|
+
expect(sessionSteerEnabled({ AGENTHUB_SESSION_STEER_ENABLED: "1" })).toBe(true);
|
|
29
|
+
expect(sessionSteerEnabled({ AGENTHUB_SESSION_STEER_ENABLED: "true" })).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe("§4.3 steer framing", () => {
|
|
33
|
+
it("frames a steer as a human instruction and never tells the model to reply", () => {
|
|
34
|
+
const content = buildTurnContent({
|
|
35
|
+
id: "st-1",
|
|
36
|
+
from_agent: "sumit@contetial.com",
|
|
37
|
+
type: STEER_MESSAGE_TYPE,
|
|
38
|
+
body: "Drop the migration, ship the hotfix.",
|
|
39
|
+
});
|
|
40
|
+
expect(content).toContain("steering this session");
|
|
41
|
+
expect(content).toContain("direct instruction from a human operator");
|
|
42
|
+
expect(content).toContain("Drop the migration, ship the hotfix.");
|
|
43
|
+
expect(content).toContain("Do NOT call mcp__agenthub__reply");
|
|
44
|
+
expect(content).not.toContain("Reply with mcp__agenthub__reply");
|
|
45
|
+
});
|
|
46
|
+
it("leaves the agent-to-agent inbox framing exactly as it was (regression)", () => {
|
|
47
|
+
const content = buildTurnContent({
|
|
48
|
+
id: "msg-7",
|
|
49
|
+
from_agent: "krishi-dev",
|
|
50
|
+
type: "message",
|
|
51
|
+
subject: "deploy window",
|
|
52
|
+
body: "Can we ship at 5?",
|
|
53
|
+
priority: "high",
|
|
54
|
+
});
|
|
55
|
+
expect(content).toBe("You received a message on AgentHub.\n" +
|
|
56
|
+
"From: krishi-dev\n" +
|
|
57
|
+
"Subject: deploy window\n" +
|
|
58
|
+
"Type: message | Priority: high\n\n" +
|
|
59
|
+
"Can we ship at 5?\n\n" +
|
|
60
|
+
'Reply with mcp__agenthub__reply(message_id="msg-7", body="…"). ' +
|
|
61
|
+
"If this is outside your charter, escalate via send_message instead of guessing.");
|
|
62
|
+
});
|
|
63
|
+
it("does not hijack a message that merely mentions steering", () => {
|
|
64
|
+
const content = buildTurnContent({
|
|
65
|
+
id: "msg-8",
|
|
66
|
+
from_agent: "krishi-dev",
|
|
67
|
+
type: "message",
|
|
68
|
+
body: "who owns the steer endpoint?",
|
|
69
|
+
});
|
|
70
|
+
expect(content).toContain("You received a message on AgentHub");
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("§4.5 channel transport — delivered, or refused; never dropped", () => {
|
|
74
|
+
it("recognises a session_steer frame, so a routed steer is delivered rather than ignored", () => {
|
|
75
|
+
const frame = parseSteerFrame({
|
|
76
|
+
type: "session_steer",
|
|
77
|
+
timestamp: "2026-07-26T00:00:00Z",
|
|
78
|
+
data: {
|
|
79
|
+
session_id: "sess-1",
|
|
80
|
+
steer_id: "st-1",
|
|
81
|
+
message_type: "steer",
|
|
82
|
+
text: "use the staging DB, not prod",
|
|
83
|
+
created_by: "user-42",
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
expect(frame).toEqual({
|
|
87
|
+
sessionId: "sess-1",
|
|
88
|
+
steerId: "st-1",
|
|
89
|
+
text: "use the staging DB, not prod",
|
|
90
|
+
createdBy: "user-42",
|
|
91
|
+
messageType: "steer",
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
it("renders a channel steer with the same human-instruction framing as the runtime", () => {
|
|
95
|
+
const frame = parseSteerFrame({
|
|
96
|
+
type: "session_steer",
|
|
97
|
+
data: { session_id: "s", steer_id: "st-1", text: "stop", created_by: "user-42" },
|
|
98
|
+
});
|
|
99
|
+
const content = buildSteerTurnContent({
|
|
100
|
+
id: frame.steerId,
|
|
101
|
+
from_agent: frame.createdBy,
|
|
102
|
+
type: frame.messageType,
|
|
103
|
+
body: frame.text,
|
|
104
|
+
});
|
|
105
|
+
expect(content).toContain("direct instruction from a human operator");
|
|
106
|
+
expect(content).toContain("Do NOT call mcp__agenthub__reply");
|
|
107
|
+
});
|
|
108
|
+
it("refuses to half-understand a frame: no id or no text means null, not a partial steer", () => {
|
|
109
|
+
const base = { type: "session_steer", data: { session_id: "s", steer_id: "st-1", text: "go" } };
|
|
110
|
+
expect(parseSteerFrame({ ...base, data: { ...base.data, steer_id: "" } })).toBeNull();
|
|
111
|
+
expect(parseSteerFrame({ ...base, data: { ...base.data, session_id: "" } })).toBeNull();
|
|
112
|
+
expect(parseSteerFrame({ ...base, data: { ...base.data, text: " " } })).toBeNull();
|
|
113
|
+
expect(parseSteerFrame({ type: "session_steer" })).toBeNull();
|
|
114
|
+
expect(parseSteerFrame({ type: "message", message: { id: "m" } })).toBeNull();
|
|
115
|
+
expect(parseSteerFrame(null)).toBeNull();
|
|
116
|
+
expect(parseSteerFrame("session_steer")).toBeNull();
|
|
117
|
+
});
|
|
118
|
+
it("no producer in this repo declares the `channel` transport, so those sessions stay refused", () => {
|
|
119
|
+
// The plugin cannot honestly declare it: `PUT /transport` needs the coding
|
|
120
|
+
// session's id, and an interactive session's id belongs to the capture hook,
|
|
121
|
+
// not to this sibling subprocess. Declaring it would mean guessing which
|
|
122
|
+
// session the socket belongs to — a wrong guess routes a steer at a session
|
|
123
|
+
// nobody is watching, which is the silent drop this rules out. The check is a
|
|
124
|
+
// source scan because the failure it guards is somebody later adding the
|
|
125
|
+
// declaration without the id, which no type can catch.
|
|
126
|
+
const stripComments = (src) => src.replace(/\/\*[\s\S]*?\*\//g, "").replace(/(^|\s)\/\/[^\n]*/g, "$1");
|
|
127
|
+
const roots = [here, path.join(here, "..", "..", "employee-runtime", "src")];
|
|
128
|
+
const offenders = [];
|
|
129
|
+
for (const root of roots) {
|
|
130
|
+
if (!fs.existsSync(root))
|
|
131
|
+
continue;
|
|
132
|
+
for (const name of fs.readdirSync(root)) {
|
|
133
|
+
if (!name.endsWith(".ts") || name.endsWith(".test.ts"))
|
|
134
|
+
continue;
|
|
135
|
+
const code = stripComments(fs.readFileSync(path.join(root, name), "utf8"));
|
|
136
|
+
if (/transport["']?\s*[:,]\s*["']channel["']/.test(code))
|
|
137
|
+
offenders.push(name);
|
|
138
|
+
if (/declareSessionTransport\([^)]*["']channel["']/.test(code))
|
|
139
|
+
offenders.push(name);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
expect(offenders).toEqual([]);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe("SessionEventEmitter.onOpen — the seam the transport is declared from", () => {
|
|
146
|
+
it("fires once with the session id and cannot be broken by a throwing listener", async () => {
|
|
147
|
+
const seen = [];
|
|
148
|
+
const posted = [];
|
|
149
|
+
const emitter = new SessionEventEmitter({
|
|
150
|
+
enabled: true,
|
|
151
|
+
onOpen: (id) => {
|
|
152
|
+
seen.push(id);
|
|
153
|
+
throw new Error("declare blew up");
|
|
154
|
+
},
|
|
155
|
+
transport: {
|
|
156
|
+
open: async () => "sess-9",
|
|
157
|
+
post: async (_id, events) => void posted.push(events.length),
|
|
158
|
+
close: async () => { },
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
emitter.emit([{ event_type: "assistant_message", payload: "{}", token_count: 0 }]);
|
|
162
|
+
await emitter.flush();
|
|
163
|
+
emitter.emit([{ event_type: "assistant_message", payload: "{}", token_count: 0 }]);
|
|
164
|
+
await emitter.flush();
|
|
165
|
+
expect(seen).toEqual(["sess-9"]);
|
|
166
|
+
expect(posted).toEqual([1, 1]); // capture unaffected by the broken listener
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe("regression: usage accounting and the recycle decision are untouched", () => {
|
|
170
|
+
it("folds result usage exactly as before", () => {
|
|
171
|
+
const stats = newRuntimeStats();
|
|
172
|
+
recordResultUsage(stats, {
|
|
173
|
+
input_tokens: 10,
|
|
174
|
+
cache_read_input_tokens: 5,
|
|
175
|
+
cache_creation_input_tokens: 2,
|
|
176
|
+
output_tokens: 7,
|
|
177
|
+
});
|
|
178
|
+
expect(stats).toEqual({
|
|
179
|
+
turns: 1,
|
|
180
|
+
estInputTokens: 17,
|
|
181
|
+
estOutputTokens: 7,
|
|
182
|
+
sessionRecycles: 0,
|
|
183
|
+
reconnects: 0,
|
|
184
|
+
dedupHits: 0,
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
it("recycles on either threshold and not before", () => {
|
|
188
|
+
const opts = { maxTurns: 25, tokenBudget: 200_000 };
|
|
189
|
+
expect(shouldRecycle({ turns: 24, estInputTokens: 199_999 }, opts)).toBe(false);
|
|
190
|
+
expect(shouldRecycle({ turns: 25, estInputTokens: 0 }, opts)).toBe(true);
|
|
191
|
+
expect(shouldRecycle({ turns: 0, estInputTokens: 200_000 }, opts)).toBe(true);
|
|
192
|
+
});
|
|
193
|
+
it("emits no session events for a `result` message, so the usage branch sees what it always did", () => {
|
|
194
|
+
expect(new SessionEventExtractor().extract({ type: "result", usage: { input_tokens: 1 } })).toEqual([]);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
describe("streamingRuntime.ts keeps the result/usage block textually unchanged", () => {
|
|
198
|
+
// The recycle accounting must not be perturbable by a steering change, so the
|
|
199
|
+
// turn-boundary report was added as a THIRD separate `result` branch rather
|
|
200
|
+
// than folded in — same discipline the capture flush already follows.
|
|
201
|
+
const runtime = path.join(here, "..", "..", "employee-runtime", "src", "streamingRuntime.ts");
|
|
202
|
+
it.skipIf(!fs.existsSync(runtime))("the usage branch is byte-for-byte the pre-steering one", () => {
|
|
203
|
+
const src = fs.readFileSync(runtime, "utf8").replace(/\r\n/g, "\n");
|
|
204
|
+
expect(src).toContain([
|
|
205
|
+
' if (m?.type === "result") {',
|
|
206
|
+
" const u = m.usage ?? {};",
|
|
207
|
+
" session.turns++;",
|
|
208
|
+
" session.estInputTokens +=",
|
|
209
|
+
" (u.input_tokens ?? 0) + (u.cache_read_input_tokens ?? 0) + (u.cache_creation_input_tokens ?? 0);",
|
|
210
|
+
" recordResultUsage(stats, u); // cumulative counters (incl. output tokens), survives recycles",
|
|
211
|
+
" if (shouldRecycle({ turns: session.turns, estInputTokens: session.estInputTokens }, recycleOpts)) {",
|
|
212
|
+
" log(`recycle threshold reached (turns=${session.turns}, estTokens=${session.estInputTokens})`);",
|
|
213
|
+
" session.recycle = true;",
|
|
214
|
+
" stats.sessionRecycles++;",
|
|
215
|
+
" logUsage();",
|
|
216
|
+
" }",
|
|
217
|
+
" }",
|
|
218
|
+
].join("\n"));
|
|
219
|
+
// and the boundary report is its own branch, not inside that block
|
|
220
|
+
expect(src).toContain('if (m?.type === "result") steering.turnComplete();');
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=steering.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steering.test.js","sourceRoot":"","sources":["../src/steering.test.ts"],"names":[],"mappings":"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"}
|