@koda-sl/baker-bridge 0.108.0-dev.0306d9ad9 → 0.108.0-dev.f7c15fa76
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 +42 -31
- package/dist/hono/agent-session.d.ts +0 -1
- package/dist/hono/agent-session.d.ts.map +1 -1
- package/dist/hono/agent-session.js +2 -13
- package/dist/hono/agent-session.js.map +1 -1
- package/dist/hono/agent-session.test.js +6 -43
- package/dist/hono/agent-session.test.js.map +1 -1
- package/dist/hono/agent-tasks.d.ts.map +1 -1
- package/dist/hono/agent-tasks.js +3 -7
- package/dist/hono/agent-tasks.js.map +1 -1
- package/dist/hono/agent-tasks.test.js +0 -15
- package/dist/hono/agent-tasks.test.js.map +1 -1
- package/dist/hono/agent.d.ts.map +1 -1
- package/dist/hono/agent.js +11 -10
- package/dist/hono/agent.js.map +1 -1
- package/dist/hono/agent.test.js +9 -9
- package/dist/hono/avatar-casting.js +2 -2
- package/dist/hono/avatar-casting.js.map +1 -1
- package/dist/hono/bridge-job.d.ts +25 -20
- package/dist/hono/bridge-job.d.ts.map +1 -1
- package/dist/hono/bridge-job.js +164 -111
- package/dist/hono/bridge-job.js.map +1 -1
- package/dist/hono/bridge-job.test.js +295 -76
- package/dist/hono/bridge-job.test.js.map +1 -1
- package/dist/hono/convex.d.ts +1 -0
- package/dist/hono/convex.d.ts.map +1 -1
- package/dist/hono/convex.js +4 -0
- package/dist/hono/convex.js.map +1 -1
- package/dist/hono/convex.test.js +3 -3
- package/dist/hono/main-sync.d.ts +41 -0
- package/dist/hono/main-sync.d.ts.map +1 -0
- package/dist/hono/main-sync.js +390 -0
- package/dist/hono/main-sync.js.map +1 -0
- package/dist/hono/main-sync.test.d.ts +2 -0
- package/dist/hono/main-sync.test.d.ts.map +1 -0
- package/dist/hono/main-sync.test.js +266 -0
- package/dist/hono/main-sync.test.js.map +1 -0
- package/dist/hono/mcp-servers.d.ts +0 -2
- package/dist/hono/mcp-servers.d.ts.map +1 -1
- package/dist/hono/mcp-servers.js +16 -17
- package/dist/hono/mcp-servers.js.map +1 -1
- package/dist/hono/mcp-servers.test.js +38 -10
- package/dist/hono/mcp-servers.test.js.map +1 -1
- package/dist/hono/model-capabilities.d.ts.map +1 -1
- package/dist/hono/model-capabilities.js +19 -28
- package/dist/hono/model-capabilities.js.map +1 -1
- package/dist/hono/model-capabilities.test.js +15 -37
- package/dist/hono/model-capabilities.test.js.map +1 -1
- package/dist/hono/relay.d.ts +2 -1
- package/dist/hono/relay.d.ts.map +1 -1
- package/dist/hono/relay.js +3 -0
- package/dist/hono/relay.js.map +1 -1
- package/dist/hono/relay.test.js +22 -6
- package/dist/hono/relay.test.js.map +1 -1
- package/dist/hono/session-continuity.d.ts +1 -0
- package/dist/hono/session-continuity.d.ts.map +1 -1
- package/dist/hono/session-continuity.integration.test.js +4 -4
- package/dist/hono/session-continuity.js +5 -2
- package/dist/hono/session-continuity.js.map +1 -1
- package/dist/hono/tag-fields.js +1 -1
- package/dist/hono/tag-fields.js.map +1 -1
- package/dist/hono/tag-input.js +1 -1
- package/dist/hono/tag-input.js.map +1 -1
- package/dist/hono/turn-events.d.ts +1 -1
- package/dist/hono/turn-events.d.ts.map +1 -1
- package/dist/hono/turn-events.js.map +1 -1
- package/dist/hono/types.d.ts +6 -0
- package/dist/hono/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
7
|
+
import { createMainSync, parsePublishedElsewhere } from "./main-sync.js";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
let root;
|
|
10
|
+
let origin;
|
|
11
|
+
let workspace;
|
|
12
|
+
let publisher;
|
|
13
|
+
/** What Baker recorded as published to main, newest first — what the backend sends with each turn. */
|
|
14
|
+
let recorded;
|
|
15
|
+
async function git(cwd, args) {
|
|
16
|
+
const { stdout } = await execFileAsync("git", args, { cwd });
|
|
17
|
+
return stdout.trim();
|
|
18
|
+
}
|
|
19
|
+
async function write(base, path, content) {
|
|
20
|
+
await mkdir(dirname(join(base, path)), { recursive: true });
|
|
21
|
+
await writeFile(join(base, path), content, "utf-8");
|
|
22
|
+
}
|
|
23
|
+
async function read(path) {
|
|
24
|
+
return await readFile(join(workspace, path), "utf-8");
|
|
25
|
+
}
|
|
26
|
+
async function commitOnMain(message, files) {
|
|
27
|
+
await git(publisher, ["pull", "-q", "origin", "main"]);
|
|
28
|
+
for (const [path, content] of Object.entries(files)) {
|
|
29
|
+
await write(publisher, path, content);
|
|
30
|
+
}
|
|
31
|
+
await git(publisher, ["add", "-A"]);
|
|
32
|
+
await git(publisher, ["-c", "user.name=Test", "-c", "user.email=t@example.com", "commit", "-q", "-m", message]);
|
|
33
|
+
await git(publisher, ["push", "-q", "origin", "main"]);
|
|
34
|
+
return await git(publisher, ["rev-parse", "HEAD"]);
|
|
35
|
+
}
|
|
36
|
+
/** Another chat publishes, and Baker records it: the commit lands on origin's main, never fetched here. */
|
|
37
|
+
async function publishFromAnotherChat(chatId, title, files) {
|
|
38
|
+
const sha = await commitOnMain(`publish: chat/${chatId}`, files);
|
|
39
|
+
recorded.unshift({ sha, chatId, title, publishedAt: Date.now(), paths: Object.keys(files) });
|
|
40
|
+
}
|
|
41
|
+
beforeEach(async () => {
|
|
42
|
+
recorded = [];
|
|
43
|
+
root = await mkdtemp(join(tmpdir(), "baker-main-sync-"));
|
|
44
|
+
origin = join(root, "origin.git");
|
|
45
|
+
workspace = join(root, "workspace");
|
|
46
|
+
publisher = join(root, "publisher");
|
|
47
|
+
await git(root, ["init", "-q", "--bare", "-b", "main", origin]);
|
|
48
|
+
await git(root, ["clone", "-q", origin, publisher]);
|
|
49
|
+
await git(publisher, ["checkout", "-q", "-b", "main"]);
|
|
50
|
+
await write(publisher, "src/pages/hero/index.astro", "old hero\n");
|
|
51
|
+
await write(publisher, "src/content/landings/hero.md", "old entry\n");
|
|
52
|
+
await git(publisher, ["add", "-A"]);
|
|
53
|
+
await git(publisher, ["-c", "user.name=Test", "-c", "user.email=t@example.com", "commit", "-q", "-m", "seed"]);
|
|
54
|
+
await git(publisher, ["push", "-q", "origin", "main"]);
|
|
55
|
+
// The Runtime's own clone (`e2bRuntimeAdapter.cloneRepo`): shallow, then the chat's branch.
|
|
56
|
+
await git(root, ["clone", "-q", "--depth", "1", `file://${origin}`, workspace]);
|
|
57
|
+
await git(workspace, ["checkout", "-q", "-B", "chat/this_chat"]);
|
|
58
|
+
});
|
|
59
|
+
afterEach(async () => {
|
|
60
|
+
await rm(root, { recursive: true, force: true });
|
|
61
|
+
});
|
|
62
|
+
describe("main sync at turn start", () => {
|
|
63
|
+
it("brings a chat that has changed nothing up to what another chat published, and says so", async () => {
|
|
64
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
65
|
+
const notes = await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
66
|
+
await expect(read("src/pages/hero/index.astro")).resolves.toBe("new hero\n");
|
|
67
|
+
expect(await git(workspace, ["branch", "--show-current"])).toBe("chat/this_chat");
|
|
68
|
+
expect(notes.resumed).toContain("brought up to date");
|
|
69
|
+
expect(notes.resumed).toContain('"New hero"');
|
|
70
|
+
expect(notes.resumed).toContain("src/pages/hero");
|
|
71
|
+
});
|
|
72
|
+
it("leaves a chat with changes of its own exactly as it is, and says what it does not show and how to read it", async () => {
|
|
73
|
+
await write(workspace, "src/pages/pricing/index.astro", "new page in progress\n");
|
|
74
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
75
|
+
const notes = await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
76
|
+
await expect(read("src/pages/hero/index.astro")).resolves.toBe("old hero\n");
|
|
77
|
+
await expect(read("src/pages/pricing/index.astro")).resolves.toBe("new page in progress\n");
|
|
78
|
+
expect(notes.resumed).toContain("does not show yet");
|
|
79
|
+
expect(notes.resumed).toContain('"New hero"');
|
|
80
|
+
expect(notes.resumed).toContain("`src/pages/hero`");
|
|
81
|
+
expect(notes.resumed).toContain("changes of its own");
|
|
82
|
+
expect(await git(workspace, ["show", "origin/main:src/pages/hero/index.astro"])).toBe("new hero");
|
|
83
|
+
});
|
|
84
|
+
it("does not bring in a platform update Baker did not record as a publish, even into a chat that changed nothing", async () => {
|
|
85
|
+
await commitOnMain("chore: sync protected files from scaffold-template", { "CLAUDE.md": "new rules\n" });
|
|
86
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
87
|
+
const notes = await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
88
|
+
await expect(read("src/pages/hero/index.astro")).resolves.toBe("old hero\n");
|
|
89
|
+
expect(notes.resumed).toContain("does not show yet");
|
|
90
|
+
expect(notes.resumed).toContain("platform update");
|
|
91
|
+
});
|
|
92
|
+
it("does not bring in published work that changes the installed packages", async () => {
|
|
93
|
+
await publishFromAnotherChat("sibling_chat", "Deps", {
|
|
94
|
+
"src/pages/hero/index.astro": "new hero\n",
|
|
95
|
+
".npmrc": "strict-peer-dependencies=false\n",
|
|
96
|
+
});
|
|
97
|
+
const notes = await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
98
|
+
await expect(read("src/pages/hero/index.astro")).resolves.toBe("old hero\n");
|
|
99
|
+
expect(notes.resumed).toContain("installed");
|
|
100
|
+
});
|
|
101
|
+
it("says nothing about a publish the workspace's own shallow clone already holds", async () => {
|
|
102
|
+
await publishFromAnotherChat("earlier_chat", "Before this chat", { "src/pages/about/index.astro": "about\n" });
|
|
103
|
+
await commitOnMain("a later commit, the clone's tip", { "src/pages/other/index.astro": "other\n" });
|
|
104
|
+
await rm(workspace, { recursive: true, force: true });
|
|
105
|
+
await git(root, ["clone", "-q", "--depth", "1", `file://${origin}`, workspace]);
|
|
106
|
+
await git(workspace, ["checkout", "-q", "-B", "chat/this_chat"]);
|
|
107
|
+
await expect(createMainSync(workspace).beforeTurn("thread_1", recorded)).resolves.toEqual({});
|
|
108
|
+
});
|
|
109
|
+
it("does not go back to the network for a publish it already found in its own clone", async () => {
|
|
110
|
+
await publishFromAnotherChat("earlier_chat", "Before this chat", { "src/pages/about/index.astro": "about\n" });
|
|
111
|
+
await commitOnMain("a later commit, the clone's tip", { "src/pages/other/index.astro": "other\n" });
|
|
112
|
+
await rm(workspace, { recursive: true, force: true });
|
|
113
|
+
await git(root, ["clone", "-q", "--depth", "1", `file://${origin}`, workspace]);
|
|
114
|
+
await git(workspace, ["checkout", "-q", "-B", "chat/this_chat"]);
|
|
115
|
+
await write(workspace, "src/pages/pricing/index.astro", "mine\n");
|
|
116
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
117
|
+
const sync = createMainSync(workspace);
|
|
118
|
+
await sync.beforeTurn("thread_1", recorded);
|
|
119
|
+
await git(workspace, ["remote", "set-url", "origin", join(root, "missing.git")]);
|
|
120
|
+
const offline = await sync.beforeTurn("thread_1", recorded);
|
|
121
|
+
expect(offline.recovered).toContain('"New hero"');
|
|
122
|
+
expect(offline.recovered).not.toContain("Before this chat");
|
|
123
|
+
});
|
|
124
|
+
it("says nothing and changes nothing when nothing was published elsewhere", async () => {
|
|
125
|
+
await git(workspace, ["remote", "set-url", "origin", join(root, "missing.git")]);
|
|
126
|
+
await expect(createMainSync(workspace).beforeTurn("thread_1", [])).resolves.toEqual({});
|
|
127
|
+
});
|
|
128
|
+
it("says nothing and changes nothing when main cannot be reached", async () => {
|
|
129
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
130
|
+
await git(workspace, ["remote", "set-url", "origin", join(root, "missing.git")]);
|
|
131
|
+
const head = await git(workspace, ["rev-parse", "HEAD"]);
|
|
132
|
+
await expect(createMainSync(workspace).beforeTurn("thread_1", recorded)).resolves.toEqual({});
|
|
133
|
+
expect(await git(workspace, ["rev-parse", "HEAD"])).toBe(head);
|
|
134
|
+
});
|
|
135
|
+
it("leaves alone any checkout that is not a chat's workspace", async () => {
|
|
136
|
+
await git(workspace, ["checkout", "-q", "-b", "some-feature"]);
|
|
137
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
138
|
+
await expect(createMainSync(workspace).beforeTurn("thread_1", recorded)).resolves.toEqual({});
|
|
139
|
+
await expect(read("src/pages/hero/index.astro")).resolves.toBe("old hero\n");
|
|
140
|
+
});
|
|
141
|
+
it("leaves the branch to a Publish that is under way", async () => {
|
|
142
|
+
await write(workspace, ".cache/publish-state.json", "{}\n");
|
|
143
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
144
|
+
await expect(createMainSync(workspace).beforeTurn("thread_1", recorded)).resolves.toEqual({});
|
|
145
|
+
await expect(read("src/pages/hero/index.astro")).resolves.toBe("old hero\n");
|
|
146
|
+
});
|
|
147
|
+
it("keeps the chat's changes list to its own work after bringing the workspace up to date", async () => {
|
|
148
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
149
|
+
await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
150
|
+
await write(workspace, "src/pages/pricing/index.astro", "this chat's page\n");
|
|
151
|
+
await git(workspace, ["add", "-A"]);
|
|
152
|
+
expect(await git(workspace, ["diff", "--name-only", "--cached", "main"])).toBe("src/pages/pricing/index.astro");
|
|
153
|
+
});
|
|
154
|
+
it("puts the changes list back on the chat's own work after the agent brought main in itself", async () => {
|
|
155
|
+
await write(workspace, "src/pages/pricing/index.astro", "this chat's page\n");
|
|
156
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
157
|
+
await git(workspace, ["fetch", "-q", "origin", "main"]);
|
|
158
|
+
await git(workspace, ["merge", "-q", "--ff-only", "origin/main"]);
|
|
159
|
+
await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
160
|
+
await git(workspace, ["add", "-A"]);
|
|
161
|
+
expect(await git(workspace, ["diff", "--name-only", "--cached", "main"])).toBe("src/pages/pricing/index.astro");
|
|
162
|
+
});
|
|
163
|
+
it("tells a thread about work it does not show once for each new publish, not on every message", async () => {
|
|
164
|
+
await write(workspace, "src/pages/pricing/index.astro", "mine\n");
|
|
165
|
+
await publishFromAnotherChat("first_chat", "First", { "src/pages/hero/index.astro": "first\n" });
|
|
166
|
+
const sync = createMainSync(workspace);
|
|
167
|
+
const first = (await sync.beforeTurn("thread_1", recorded)).resumed;
|
|
168
|
+
const repeated = (await sync.beforeTurn("thread_1", recorded)).resumed;
|
|
169
|
+
const otherThread = (await sync.beforeTurn("thread_2", recorded)).resumed;
|
|
170
|
+
await publishFromAnotherChat("second_chat", "Second", { "src/pages/about/index.astro": "about\n" });
|
|
171
|
+
const afterNewPublish = (await sync.beforeTurn("thread_1", recorded)).resumed;
|
|
172
|
+
expect(first).toContain('"First"');
|
|
173
|
+
expect(repeated).toBeUndefined();
|
|
174
|
+
expect(otherThread).toContain('"First"');
|
|
175
|
+
expect(afterNewPublish).toContain('"Second"');
|
|
176
|
+
});
|
|
177
|
+
it("keeps repeating what the workspace does not show to a conversation rebuilt from its messages", async () => {
|
|
178
|
+
await write(workspace, "src/pages/pricing/index.astro", "mine\n");
|
|
179
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
180
|
+
const sync = createMainSync(workspace);
|
|
181
|
+
await sync.beforeTurn("thread_1", recorded);
|
|
182
|
+
const next = await sync.beforeTurn("thread_1", recorded);
|
|
183
|
+
expect(next.resumed).toBeUndefined();
|
|
184
|
+
expect(next.recovered).toContain("does not show yet");
|
|
185
|
+
});
|
|
186
|
+
it("tells every thread that the workspace moved, not only the one whose turn moved it", async () => {
|
|
187
|
+
const sync = createMainSync(workspace);
|
|
188
|
+
await sync.beforeTurn("thread_1", recorded);
|
|
189
|
+
await sync.beforeTurn("thread_2", recorded);
|
|
190
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
191
|
+
const mover = (await sync.beforeTurn("thread_1", recorded)).resumed;
|
|
192
|
+
const sibling = (await sync.beforeTurn("thread_2", recorded)).resumed;
|
|
193
|
+
const siblingAgain = (await sync.beforeTurn("thread_2", recorded)).resumed;
|
|
194
|
+
expect(mover).toContain("brought up to date");
|
|
195
|
+
expect(sibling).toContain("brought up to date");
|
|
196
|
+
expect(siblingAgain).toBeUndefined();
|
|
197
|
+
});
|
|
198
|
+
it("does not tell a thread that starts after the workspace moved about files it never read", async () => {
|
|
199
|
+
const sync = createMainSync(workspace);
|
|
200
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
201
|
+
await sync.beforeTurn("thread_1", recorded);
|
|
202
|
+
await expect(sync.beforeTurn("thread_new", recorded)).resolves.toEqual({});
|
|
203
|
+
});
|
|
204
|
+
it("brings the workspace up to date under a leading command but holds the note for the thread's next turn", async () => {
|
|
205
|
+
const sync = createMainSync(workspace);
|
|
206
|
+
await sync.beforeTurn("thread_1", recorded);
|
|
207
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
208
|
+
const underCommand = await sync.beforeTurn("thread_1", recorded, { withNote: false });
|
|
209
|
+
await expect(read("src/pages/hero/index.astro")).resolves.toBe("new hero\n");
|
|
210
|
+
const next = (await sync.beforeTurn("thread_1", recorded)).resumed;
|
|
211
|
+
expect(underCommand).toEqual({});
|
|
212
|
+
expect(next).toContain("brought up to date");
|
|
213
|
+
});
|
|
214
|
+
it("remembers what each thread was told across a bridge restart", async () => {
|
|
215
|
+
await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
216
|
+
await publishFromAnotherChat("sibling_chat", "New hero", { "src/pages/hero/index.astro": "new hero\n" });
|
|
217
|
+
await createMainSync(workspace).beforeTurn("thread_1", recorded, { withNote: false });
|
|
218
|
+
const afterRestart = (await createMainSync(workspace).beforeTurn("thread_1", recorded)).resumed;
|
|
219
|
+
const again = (await createMainSync(workspace).beforeTurn("thread_1", recorded)).resumed;
|
|
220
|
+
expect(afterRestart).toContain("brought up to date");
|
|
221
|
+
expect(again).toBeUndefined();
|
|
222
|
+
});
|
|
223
|
+
it("names a change made in the dashboard as the dashboard's", async () => {
|
|
224
|
+
await write(workspace, "src/pages/pricing/index.astro", "mine\n");
|
|
225
|
+
const sha = await commitOnMain("Update COMPANY.md", { "COMPANY.md": "new profile\n" });
|
|
226
|
+
recorded.unshift({ sha, title: "Update COMPANY.md", publishedAt: Date.now(), paths: ["COMPANY.md"] });
|
|
227
|
+
const notes = await createMainSync(workspace).beforeTurn("thread_1", recorded);
|
|
228
|
+
expect(notes.resumed).toContain("a change made in the dashboard: `COMPANY.md`");
|
|
229
|
+
});
|
|
230
|
+
it("stops the agent once from creating a page another chat already published, and lets a deliberate retry through", async () => {
|
|
231
|
+
await write(workspace, "src/pages/pricing/index.astro", "mine\n");
|
|
232
|
+
await publishFromAnotherChat("sibling_chat", "Sales v2", {
|
|
233
|
+
"src/pages/sales-v2/index.astro": "the sibling's v2\n",
|
|
234
|
+
});
|
|
235
|
+
const sync = createMainSync(workspace);
|
|
236
|
+
await sync.beforeTurn("thread_1", recorded);
|
|
237
|
+
const first = sync.refuseWrite("thread_1", join(workspace, "src/pages/sales-v2/index.astro"));
|
|
238
|
+
const retry = sync.refuseWrite("thread_1", join(workspace, "src/pages/sales-v2/index.astro"));
|
|
239
|
+
expect(first).toContain("`src/pages/sales-v2`");
|
|
240
|
+
expect(first).toContain('"Sales v2"');
|
|
241
|
+
expect(first).toContain("git ls-tree -r --name-only origin/main -- src/pages/sales-v2");
|
|
242
|
+
expect(retry).toBeNull();
|
|
243
|
+
});
|
|
244
|
+
it("lets the agent write anywhere else, and to a page it already has", async () => {
|
|
245
|
+
await write(workspace, "src/pages/sales-v2/index.astro", "mine\n");
|
|
246
|
+
await publishFromAnotherChat("sibling_chat", "Sales v2", {
|
|
247
|
+
"src/pages/sales-v2/index.astro": "the sibling's v2\n",
|
|
248
|
+
});
|
|
249
|
+
const sync = createMainSync(workspace);
|
|
250
|
+
await sync.beforeTurn("thread_1", recorded);
|
|
251
|
+
expect(sync.refuseWrite("thread_1", join(workspace, "src/pages/sales-v2/_components/Hero.astro"))).toBeNull();
|
|
252
|
+
expect(sync.refuseWrite("thread_1", join(workspace, "src/pages/pricing/index.astro"))).toBeNull();
|
|
253
|
+
});
|
|
254
|
+
it("reads what the backend sent, dropping any entry it cannot use", () => {
|
|
255
|
+
const valid = {
|
|
256
|
+
sha: "a".repeat(40),
|
|
257
|
+
chatId: "chat_1",
|
|
258
|
+
title: "Hero",
|
|
259
|
+
publishedAt: 1,
|
|
260
|
+
paths: ["src/pages/hero/index.astro"],
|
|
261
|
+
};
|
|
262
|
+
expect(parsePublishedElsewhere([valid, { sha: "not a sha", title: "x", publishedAt: 1, paths: [] }, "junk"])).toEqual([valid]);
|
|
263
|
+
expect(parsePublishedElsewhere(undefined)).toEqual([]);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
//# sourceMappingURL=main-sync.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-sync.test.js","sourceRoot":"","sources":["../../src/hono/main-sync.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,6 @@ export type McpHttpServerConfig = {
|
|
|
9
9
|
export type McpServers = Record<string, McpHttpServerConfig>;
|
|
10
10
|
/** Parse and validate the /api/chat/mcp-servers response body; returns null on any mismatch. */
|
|
11
11
|
export declare function parseMcpServersResponse(json: unknown): McpServers | null;
|
|
12
|
-
export type Staleness = "fresh" | "stale_usable" | "expired";
|
|
13
|
-
export declare function staleness(fetchedAt: number, now: number): Staleness;
|
|
14
12
|
export type McpServersProvider = (threadId: string, actingUserId?: string) => Promise<McpServers | undefined>;
|
|
15
13
|
/** Map a failed MCP server name back to its Composio scope, or null if it isn't ours. */
|
|
16
14
|
export declare function composioScopeForServer(name: string): ComposioScope | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers.d.ts","sourceRoot":"","sources":["../../src/hono/mcp-servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAKjE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;AAEpE,uFAAuF;AACvF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAY7D,gGAAgG;AAChG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAGxE;
|
|
1
|
+
{"version":3,"file":"mcp-servers.d.ts","sourceRoot":"","sources":["../../src/hono/mcp-servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAKjE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;AAEpE,uFAAuF;AACvF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAY7D,gGAAgG;AAChG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAGxE;AAOD,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;AAS9G,yFAAyF;AACzF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,EAAE,CAmB3E;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,EAAE,CAkB7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,EAAE,CAarE;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,EAC/D,YAAY,CAAC,EAAE,MAAM,iBAWtB;AAED,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACjE,CAAC;AA0DF,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,YAAiB,GAAG,kBAAkB,CAqBpF"}
|
package/dist/hono/mcp-servers.js
CHANGED
|
@@ -15,18 +15,7 @@ export function parseMcpServersResponse(json) {
|
|
|
15
15
|
return parsed.success ? parsed.data.mcpServers : null;
|
|
16
16
|
}
|
|
17
17
|
const FRESH_MS = 60_000;
|
|
18
|
-
const STALE_USABLE_MS = 10 * 60_000;
|
|
19
18
|
const FETCH_TIMEOUT_MS = 2_500;
|
|
20
|
-
export function staleness(fetchedAt, now) {
|
|
21
|
-
const age = now - fetchedAt;
|
|
22
|
-
if (age < FRESH_MS) {
|
|
23
|
-
return "fresh";
|
|
24
|
-
}
|
|
25
|
-
if (age < STALE_USABLE_MS) {
|
|
26
|
-
return "stale_usable";
|
|
27
|
-
}
|
|
28
|
-
return "expired";
|
|
29
|
-
}
|
|
30
19
|
const SCOPE_BY_ENTRY = {
|
|
31
20
|
composio_user: "user",
|
|
32
21
|
composio_user_org: "user_org",
|
|
@@ -145,10 +134,20 @@ async function defaultLogError(entry) {
|
|
|
145
134
|
}
|
|
146
135
|
/**
|
|
147
136
|
* Per-turn MCP server resolver. Fetches the company's scoped Composio MCP
|
|
148
|
-
* endpoints from Convex over the existing bridge→Convex rail
|
|
149
|
-
* (thread, actor) for 60s
|
|
150
|
-
*
|
|
151
|
-
*
|
|
137
|
+
* endpoints from Convex over the existing bridge→Convex rail and caches them per
|
|
138
|
+
* (thread, actor) for 60s. It never throws — a Composio/Convex hiccup must not
|
|
139
|
+
* fail the turn.
|
|
140
|
+
*
|
|
141
|
+
* On a failed or timed-out refetch it serves the last set that (thread, actor)
|
|
142
|
+
* got, however old: the tool list is part of the prompt, so a turn that drops
|
|
143
|
+
* it rewrites the prompt cache and can invalidate preserved thinking. Only a
|
|
144
|
+
* (thread, actor) that never fetched successfully runs with no MCP.
|
|
145
|
+
*
|
|
146
|
+
* Keyed on the actor as well as the thread because the set is a permission
|
|
147
|
+
* boundary, not just a cache key: the `user` and `user_org` scopes (and custom
|
|
148
|
+
* servers' per-user OAuth) resolve to the acting user's own connections, so a
|
|
149
|
+
* teammate's turn in a shared chat must never inherit them. A chat whose sender
|
|
150
|
+
* changes therefore changes tool set, and that one cache rewrite is the price.
|
|
152
151
|
*/
|
|
153
152
|
async function fetchMcpServers(fetchFn, threadId, actingUserId) {
|
|
154
153
|
const controller = new AbortController();
|
|
@@ -181,7 +180,7 @@ export function createMcpServersProvider(deps = {}) {
|
|
|
181
180
|
return async (threadId, actingUserId) => {
|
|
182
181
|
const key = `${threadId}|${actingUserId ?? ""}`;
|
|
183
182
|
const cached = cache.get(key);
|
|
184
|
-
if (cached &&
|
|
183
|
+
if (cached && now() - cached.fetchedAt < FRESH_MS) {
|
|
185
184
|
return cached.servers;
|
|
186
185
|
}
|
|
187
186
|
try {
|
|
@@ -191,7 +190,7 @@ export function createMcpServersProvider(deps = {}) {
|
|
|
191
190
|
}
|
|
192
191
|
catch (error) {
|
|
193
192
|
logError({ error: error instanceof Error ? error.message : String(error), threadId });
|
|
194
|
-
return cached
|
|
193
|
+
return cached?.servers;
|
|
195
194
|
}
|
|
196
195
|
};
|
|
197
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers.js","sourceRoot":"","sources":["../../src/hono/mcp-servers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAa1E,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC;CACtD,CAAC,CAAC;AAEH,gGAAgG;AAChG,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-servers.js","sourceRoot":"","sources":["../../src/hono/mcp-servers.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { describe, expect, it, vi } from "vitest";
|
|
|
2
2
|
vi.mock("./env.ts", () => ({
|
|
3
3
|
env: { BAKER_CONVEX_SITE_URL: "https://example.convex.site", BAKER_API_KEY: "bk_test" },
|
|
4
4
|
}));
|
|
5
|
-
import { composioScopesToInvalidate, createMcpServersProvider, failedCustomServers, parseMcpServersResponse, serversConnectedWithNoTools,
|
|
5
|
+
import { composioScopesToInvalidate, createMcpServersProvider, failedCustomServers, parseMcpServersResponse, serversConnectedWithNoTools, } from "./mcp-servers.js";
|
|
6
6
|
function initMessage(servers) {
|
|
7
7
|
return { type: "system", subtype: "init", mcp_servers: servers };
|
|
8
8
|
}
|
|
@@ -66,14 +66,6 @@ describe("failedCustomServers", () => {
|
|
|
66
66
|
expect(failedCustomServers(compactBoundary)).toEqual([]);
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
|
-
describe("staleness", () => {
|
|
70
|
-
it("classifies by age", () => {
|
|
71
|
-
const t = 1_000_000;
|
|
72
|
-
expect(staleness(t, t + 30_000)).toBe("fresh");
|
|
73
|
-
expect(staleness(t, t + 120_000)).toBe("stale_usable");
|
|
74
|
-
expect(staleness(t, t + 11 * 60_000)).toBe("expired");
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
69
|
describe("createMcpServersProvider", () => {
|
|
78
70
|
const opts = { logError: vi.fn() };
|
|
79
71
|
it("fetches and caches within the fresh window", async () => {
|
|
@@ -95,7 +87,7 @@ describe("createMcpServersProvider", () => {
|
|
|
95
87
|
await provider("thread_1");
|
|
96
88
|
expect(fetchFn).toHaveBeenCalledTimes(2);
|
|
97
89
|
});
|
|
98
|
-
it("serves
|
|
90
|
+
it("serves the cached set when a refetch fails", async () => {
|
|
99
91
|
let clock = 1_000_000;
|
|
100
92
|
const fetchFn = vi
|
|
101
93
|
.fn()
|
|
@@ -107,6 +99,31 @@ describe("createMcpServersProvider", () => {
|
|
|
107
99
|
const result = await provider("thread_1");
|
|
108
100
|
expect(result).toEqual({ composio_company: { type: "http", url: "https://mcp.example/co" } });
|
|
109
101
|
});
|
|
102
|
+
// The tool list is part of the prompt, so a turn that loses it rewrites the
|
|
103
|
+
// cache and can invalidate preserved thinking. A chat keeps the last set it had
|
|
104
|
+
// for as long as refetches fail, however old that set is.
|
|
105
|
+
it("keeps the last known set when a refetch times out, however old it is", async () => {
|
|
106
|
+
vi.useFakeTimers();
|
|
107
|
+
try {
|
|
108
|
+
let clock = 1_000_000;
|
|
109
|
+
const hangsUntilAborted = (_url, init) => new Promise((_resolve, reject) => {
|
|
110
|
+
init.signal?.addEventListener("abort", () => reject(new Error("aborted")));
|
|
111
|
+
});
|
|
112
|
+
const fetchFn = vi
|
|
113
|
+
.fn()
|
|
114
|
+
.mockResolvedValueOnce(jsonResponse(COMPANY_SERVERS))
|
|
115
|
+
.mockImplementation(hangsUntilAborted);
|
|
116
|
+
const provider = createMcpServersProvider({ fetchFn: fetchFn, now: () => clock, ...opts });
|
|
117
|
+
await provider("thread_1", "user_a");
|
|
118
|
+
clock += 60 * 60_000;
|
|
119
|
+
const pending = provider("thread_1", "user_a");
|
|
120
|
+
await vi.advanceTimersByTimeAsync(2_500);
|
|
121
|
+
expect(await pending).toEqual({ composio_company: { type: "http", url: "https://mcp.example/co" } });
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
vi.useRealTimers();
|
|
125
|
+
}
|
|
126
|
+
});
|
|
110
127
|
it("returns undefined when there is no usable cache and the fetch fails", async () => {
|
|
111
128
|
const fetchFn = vi.fn(() => Promise.reject(new Error("down")));
|
|
112
129
|
const provider = createMcpServersProvider({ fetchFn: fetchFn, now: () => 1_000_000, ...opts });
|
|
@@ -129,6 +146,17 @@ describe("createMcpServersProvider", () => {
|
|
|
129
146
|
await provider("thread_1", "user_b");
|
|
130
147
|
expect(fetchFn).toHaveBeenCalledTimes(2);
|
|
131
148
|
});
|
|
149
|
+
// Personal scopes resolve to the acting user's own connections, so the
|
|
150
|
+
// last-known fallback must never hand one user's set to a teammate.
|
|
151
|
+
it("never falls back to another user's set in the same chat", async () => {
|
|
152
|
+
const fetchFn = vi
|
|
153
|
+
.fn()
|
|
154
|
+
.mockResolvedValueOnce(jsonResponse({ mcpServers: { composio_user: { type: "http", url: "https://mcp.example/user-a" } } }))
|
|
155
|
+
.mockRejectedValueOnce(new Error("down"));
|
|
156
|
+
const provider = createMcpServersProvider({ fetchFn: fetchFn, now: () => 1_000_000, ...opts });
|
|
157
|
+
await provider("thread_1", "user_a");
|
|
158
|
+
expect(await provider("thread_1", "user_b")).toBeUndefined();
|
|
159
|
+
});
|
|
132
160
|
});
|
|
133
161
|
describe("serversConnectedWithNoTools", () => {
|
|
134
162
|
const init = (servers, tools) => ({ type: "system", subtype: "init", mcp_servers: servers, tools });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers.test.js","sourceRoot":"","sources":["../../src/hono/mcp-servers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IACzB,GAAG,EAAE,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,aAAa,EAAE,SAAS,EAAE;CACxF,CAAC,CAAC,CAAC;AAGJ,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"mcp-servers.test.js","sourceRoot":"","sources":["../../src/hono/mcp-servers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../src/hono/model-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../src/hono/model-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAgB9D,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAO/C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBpD;AAsBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAKrF;AAsCD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,EAAE,GAAG,SAAS,CAKrF;AA4BD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAM9F;AAMD,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAcnD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAO3F;AAGD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE9E"}
|