@koda-sl/baker-bridge 0.70.0 → 0.70.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 +27 -0
- package/dist/hono/bridge-job.d.ts +11 -0
- package/dist/hono/bridge-job.d.ts.map +1 -1
- package/dist/hono/bridge-job.js +77 -1
- package/dist/hono/bridge-job.js.map +1 -1
- package/dist/hono/bridge-job.test.js +167 -1
- package/dist/hono/bridge-job.test.js.map +1 -1
- package/dist/hono/session-continuity.d.ts +24 -0
- package/dist/hono/session-continuity.d.ts.map +1 -1
- package/dist/hono/session-continuity.js +61 -1
- package/dist/hono/session-continuity.js.map +1 -1
- package/dist/hono/session-continuity.test.js +78 -1
- package/dist/hono/session-continuity.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { applyCurrentSenderAttribution, formatSenderLabel, prepareSessionAttempt } from "./session-continuity.js";
|
|
2
|
+
import { applyCurrentSenderAttribution, COMPACTION_RESUME_PROMPT, compactionRetryAttempt, formatSenderLabel, isContextOverflowError, prepareSessionAttempt, stallContinuationAttempt, } from "./session-continuity.js";
|
|
3
3
|
const historyWith = (text) => ({
|
|
4
4
|
entries: [{ role: "user", text, createdAt: 0 }],
|
|
5
5
|
omittedEntryCount: 0,
|
|
@@ -59,6 +59,14 @@ describe("prepareSessionAttempt", () => {
|
|
|
59
59
|
expect(attempt.prompt).toContain("earlier turn");
|
|
60
60
|
expect(attempt.prompt).not.toBe("Make the hero blue");
|
|
61
61
|
});
|
|
62
|
+
it("resumes the chat session for publish but lets it start without compacting first", () => {
|
|
63
|
+
const attempt = prepareSessionAttempt({
|
|
64
|
+
requestPrompt: "/publish",
|
|
65
|
+
loaded: { kind: "clean", boundary: { version: 2, sessionId: "s1", updatedAtMs: 1 } },
|
|
66
|
+
});
|
|
67
|
+
expect(attempt.resumeOptions.resume).toBe("s1");
|
|
68
|
+
expect(attempt.autoCompact).toBe(false);
|
|
69
|
+
});
|
|
62
70
|
it("never wraps a verbatim command in a history preamble, keeping it the leading token", () => {
|
|
63
71
|
const attempt = prepareSessionAttempt({
|
|
64
72
|
requestPrompt: "/compact",
|
|
@@ -68,4 +76,73 @@ describe("prepareSessionAttempt", () => {
|
|
|
68
76
|
expect(attempt.attemptedRehydration).toBe(false);
|
|
69
77
|
});
|
|
70
78
|
});
|
|
79
|
+
describe("isContextOverflowError", () => {
|
|
80
|
+
it("recognizes the request that no longer fits the context window", () => {
|
|
81
|
+
expect(isContextOverflowError(new Error("prompt is too long: 215424 tokens > 200000 maximum"))).toBe(true);
|
|
82
|
+
expect(isContextOverflowError(new Error("This endpoint's maximum context length is 200000 tokens"))).toBe(true);
|
|
83
|
+
expect(isContextOverflowError(new Error("context_length_exceeded"))).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
it("leaves unrelated failures alone", () => {
|
|
86
|
+
expect(isContextOverflowError(new Error("Cannot resume: session not found"))).toBe(false);
|
|
87
|
+
expect(isContextOverflowError(new Error("fetch failed"))).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe("stallContinuationAttempt", () => {
|
|
91
|
+
it("keeps publish's opt-out of precautionary compaction across a stall resume", () => {
|
|
92
|
+
const attempt = prepareSessionAttempt({
|
|
93
|
+
requestPrompt: "/publish",
|
|
94
|
+
loaded: { kind: "clean", boundary: { version: 2, sessionId: "s1", updatedAtMs: 1 } },
|
|
95
|
+
});
|
|
96
|
+
const continuation = stallContinuationAttempt(attempt, {
|
|
97
|
+
sessionId: "s_live",
|
|
98
|
+
sawSessionId: true,
|
|
99
|
+
sawCleanResult: false,
|
|
100
|
+
});
|
|
101
|
+
expect(continuation.resumeOptions.resume).toBe("s_live");
|
|
102
|
+
expect(continuation.autoCompact).toBe(false);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe("compactionRetryAttempt", () => {
|
|
106
|
+
it("re-sends the same turn with compaction allowed", () => {
|
|
107
|
+
const attempt = prepareSessionAttempt({
|
|
108
|
+
requestPrompt: "/publish",
|
|
109
|
+
loaded: { kind: "clean", boundary: { version: 2, sessionId: "s1", updatedAtMs: 1 } },
|
|
110
|
+
});
|
|
111
|
+
const retry = compactionRetryAttempt(attempt);
|
|
112
|
+
expect(retry.prompt).toBe("/publish");
|
|
113
|
+
expect(retry.resumeOptions.resume).toBe("s1");
|
|
114
|
+
expect(retry.autoCompact).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
it("re-sends the command when the very first request was refused, session id notwithstanding", () => {
|
|
117
|
+
const attempt = prepareSessionAttempt({
|
|
118
|
+
requestPrompt: "/publish",
|
|
119
|
+
loaded: { kind: "clean", boundary: { version: 2, sessionId: "s1", updatedAtMs: 1 } },
|
|
120
|
+
});
|
|
121
|
+
// The CLI announces its session id (`system`/`init`) before the first model
|
|
122
|
+
// request, so an id alone does not mean the agent ran anything.
|
|
123
|
+
const retry = compactionRetryAttempt(attempt, {
|
|
124
|
+
sessionId: "s_live",
|
|
125
|
+
sawSessionId: true,
|
|
126
|
+
sawCleanResult: false,
|
|
127
|
+
});
|
|
128
|
+
expect(retry.prompt).toBe("/publish");
|
|
129
|
+
expect(retry.resumeOptions.resume).toBe("s1");
|
|
130
|
+
expect(retry.autoCompact).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
it("continues the in-flight session once the agent has produced work", () => {
|
|
133
|
+
const attempt = prepareSessionAttempt({
|
|
134
|
+
requestPrompt: "/publish",
|
|
135
|
+
loaded: { kind: "clean", boundary: { version: 2, sessionId: "s1", updatedAtMs: 1 } },
|
|
136
|
+
});
|
|
137
|
+
const retry = compactionRetryAttempt(attempt, {
|
|
138
|
+
sessionId: "s_live",
|
|
139
|
+
resumeSessionAt: "assistant_1",
|
|
140
|
+
sawSessionId: true,
|
|
141
|
+
sawCleanResult: false,
|
|
142
|
+
});
|
|
143
|
+
expect(retry.prompt).toBe(COMPACTION_RESUME_PROMPT);
|
|
144
|
+
expect(retry.resumeOptions.resume).toBe("s_live");
|
|
145
|
+
expect(retry.autoCompact).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
71
148
|
//# sourceMappingURL=session-continuity.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-continuity.test.js","sourceRoot":"","sources":["../../src/hono/session-continuity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"session-continuity.test.js","sourceRoot":"","sources":["../../src/hono/session-continuity.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED