@ai0x0/codex-ts 0.1.0 → 0.2.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/core/src/base_instructions.d.ts +20 -0
- package/dist/core/src/base_instructions.d.ts.map +1 -0
- package/dist/core/src/base_instructions.js +40 -0
- package/dist/core/src/base_instructions.js.map +1 -0
- package/dist/core/src/codex_thread.d.ts +48 -0
- package/dist/core/src/codex_thread.d.ts.map +1 -1
- package/dist/core/src/codex_thread.js +70 -6
- package/dist/core/src/codex_thread.js.map +1 -1
- package/dist/core/src/compact.d.ts +37 -0
- package/dist/core/src/compact.d.ts.map +1 -0
- package/dist/core/src/compact.js +146 -0
- package/dist/core/src/compact.js.map +1 -0
- package/dist/core/src/index.d.ts +6 -0
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/index.js +4 -0
- package/dist/core/src/index.js.map +1 -1
- package/dist/core/src/session/sse.d.ts +7 -0
- package/dist/core/src/session/sse.d.ts.map +1 -0
- package/dist/core/src/session/sse.js +40 -0
- package/dist/core/src/session/sse.js.map +1 -0
- package/dist/core/src/session/turn.d.ts +29 -1
- package/dist/core/src/session/turn.d.ts.map +1 -1
- package/dist/core/src/session/turn.js +79 -38
- package/dist/core/src/session/turn.js.map +1 -1
- package/dist/core/src/skills.d.ts +66 -0
- package/dist/core/src/skills.d.ts.map +1 -0
- package/dist/core/src/skills.js +304 -0
- package/dist/core/src/skills.js.map +1 -0
- package/dist/core/src/state/auto_compact_window.d.ts +42 -0
- package/dist/core/src/state/auto_compact_window.d.ts.map +1 -0
- package/dist/core/src/state/auto_compact_window.js +59 -0
- package/dist/core/src/state/auto_compact_window.js.map +1 -0
- package/dist/core/src/tools/router.d.ts +26 -1
- package/dist/core/src/tools/router.d.ts.map +1 -1
- package/dist/core/src/tools/router.js +15 -2
- package/dist/core/src/tools/router.js.map +1 -1
- package/dist/core/tests/suite/compact.test.d.ts +10 -0
- package/dist/core/tests/suite/compact.test.d.ts.map +1 -0
- package/dist/core/tests/suite/compact.test.js +166 -0
- package/dist/core/tests/suite/compact.test.js.map +1 -0
- package/dist/core/tests/suite/extensions.test.d.ts +8 -0
- package/dist/core/tests/suite/extensions.test.d.ts.map +1 -0
- package/dist/core/tests/suite/extensions.test.js +186 -0
- package/dist/core/tests/suite/extensions.test.js.map +1 -0
- package/dist/core/tests/suite/skills.test.d.ts +7 -0
- package/dist/core/tests/suite/skills.test.d.ts.map +1 -0
- package/dist/core/tests/suite/skills.test.js +324 -0
- package/dist/core/tests/suite/skills.test.js.map +1 -0
- package/dist/protocol/src/index.d.ts +1 -0
- package/dist/protocol/src/index.d.ts.map +1 -1
- package/dist/protocol/src/protocol.d.ts +32 -0
- package/dist/protocol/src/protocol.d.ts.map +1 -1
- package/dist/thread-store/src/index.d.ts +1 -0
- package/dist/thread-store/src/index.d.ts.map +1 -1
- package/dist/thread-store/src/index.js +1 -0
- package/dist/thread-store/src/index.js.map +1 -1
- package/dist/thread-store/src/indexeddb.d.ts +29 -0
- package/dist/thread-store/src/indexeddb.d.ts.map +1 -0
- package/dist/thread-store/src/indexeddb.js +97 -0
- package/dist/thread-store/src/indexeddb.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.test.js","sourceRoot":"","sources":["../../../../core/tests/suite/extensions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the two-layer skill injection (mirrors codex-rs core-skills):
|
|
3
|
+
* - Layer 1: renderSkillsCatalog() — always-on "## Skills" index
|
|
4
|
+
* - Layer 2: extractSkillMentions() / loadSkillContent — `$skill-name` → full body
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=skills.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.test.d.ts","sourceRoot":"","sources":["../../../../core/tests/suite/skills.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the two-layer skill injection (mirrors codex-rs core-skills):
|
|
3
|
+
* - Layer 1: renderSkillsCatalog() — always-on "## Skills" index
|
|
4
|
+
* - Layer 2: extractSkillMentions() / loadSkillContent — `$skill-name` → full body
|
|
5
|
+
*/
|
|
6
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
7
|
+
import { CodexThread } from "../../src/codex_thread.js";
|
|
8
|
+
import { defaultSkillMetadataBudget, extractSkillMentions, renderSkillInjection, renderSkillsCatalog, } from "../../src/skills.js";
|
|
9
|
+
import { evAssistantMessage, evCompleted, evResponseCreated, makeSseResponse, sseFlat, waitForEvent, } from "../common/lib.js";
|
|
10
|
+
const SKILLS = [
|
|
11
|
+
{
|
|
12
|
+
name: "song-analyzer",
|
|
13
|
+
description: "Analyze a song.",
|
|
14
|
+
path: ".agents/skills/song-analyzer/SKILL.md",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "mv-workflow",
|
|
18
|
+
description: "End-to-end MV workflow.",
|
|
19
|
+
path: ".agents/skills/mv-workflow/SKILL.md",
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
describe("renderSkillsCatalog", () => {
|
|
23
|
+
it("returns an empty string when there are no skills", () => {
|
|
24
|
+
expect(renderSkillsCatalog([])).toBe("");
|
|
25
|
+
});
|
|
26
|
+
it("renders header, one line per skill, and the how-to-use section", () => {
|
|
27
|
+
const out = renderSkillsCatalog(SKILLS);
|
|
28
|
+
expect(out).toContain("## Skills");
|
|
29
|
+
expect(out).toContain("### Available skills");
|
|
30
|
+
expect(out).toContain("- song-analyzer: Analyze a song. (file: .agents/skills/song-analyzer/SKILL.md)");
|
|
31
|
+
expect(out).toContain("### How to use skills");
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe("extractSkillMentions", () => {
|
|
35
|
+
it("matches a $skill-name mention", () => {
|
|
36
|
+
const result = extractSkillMentions("please run $song-analyzer now", SKILLS);
|
|
37
|
+
expect(result.map((s) => s.name)).toEqual(["song-analyzer"]);
|
|
38
|
+
});
|
|
39
|
+
it("ignores unknown mentions and common env vars", () => {
|
|
40
|
+
expect(extractSkillMentions("echo $HOME and $nope", SKILLS)).toEqual([]);
|
|
41
|
+
});
|
|
42
|
+
it("preserves skills order and de-dupes repeats", () => {
|
|
43
|
+
const result = extractSkillMentions("$mv-workflow then $song-analyzer and $song-analyzer again", SKILLS);
|
|
44
|
+
expect(result.map((s) => s.name)).toEqual(["song-analyzer", "mv-workflow"]);
|
|
45
|
+
});
|
|
46
|
+
it("only matches a plain name when it is unique", () => {
|
|
47
|
+
const dup = [
|
|
48
|
+
...SKILLS,
|
|
49
|
+
{ name: "song-analyzer", description: "dup", path: "other/SKILL.md" },
|
|
50
|
+
];
|
|
51
|
+
expect(extractSkillMentions("$song-analyzer", dup)).toEqual([]);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe("renderSkillInjection", () => {
|
|
55
|
+
it("wraps the body in the <skill> envelope", () => {
|
|
56
|
+
const out = renderSkillInjection(SKILLS[0], "BODY");
|
|
57
|
+
expect(out).toBe("<skill>\n<name>song-analyzer</name>\n<path>.agents/skills/song-analyzer/SKILL.md</path>\nBODY\n</skill>");
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe("skill injection inside a turn", () => {
|
|
61
|
+
beforeEach(() => {
|
|
62
|
+
vi.unstubAllGlobals();
|
|
63
|
+
});
|
|
64
|
+
it("injects the catalog into the request instructions (Layer 1)", async () => {
|
|
65
|
+
const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
|
|
66
|
+
evResponseCreated("r1"),
|
|
67
|
+
evAssistantMessage("ok"),
|
|
68
|
+
evCompleted("r1"),
|
|
69
|
+
])));
|
|
70
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
71
|
+
const codex = new CodexThread({ apiKey: "k", model: "m", skills: SKILLS });
|
|
72
|
+
await codex.submit({
|
|
73
|
+
type: "UserInput",
|
|
74
|
+
items: [{ type: "text", text: "hi" }],
|
|
75
|
+
});
|
|
76
|
+
await waitForEvent(codex, (m) => m.type === "TurnComplete");
|
|
77
|
+
const init = fetchMock.mock.calls[0][1];
|
|
78
|
+
const body = JSON.parse(init.body);
|
|
79
|
+
// Catalog rides as a discrete input message, NOT in the instructions field.
|
|
80
|
+
expect(body.instructions ?? "").not.toContain("## Skills");
|
|
81
|
+
expect(JSON.stringify(body.input)).toContain("## Skills");
|
|
82
|
+
expect(JSON.stringify(body.input)).toContain("- song-analyzer:");
|
|
83
|
+
});
|
|
84
|
+
it("injects the full skill body on $mention, ahead of history (Layer 2)", async () => {
|
|
85
|
+
const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
|
|
86
|
+
evResponseCreated("r1"),
|
|
87
|
+
evAssistantMessage("ok"),
|
|
88
|
+
evCompleted("r1"),
|
|
89
|
+
])));
|
|
90
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
91
|
+
const loaded = [];
|
|
92
|
+
const codex = new CodexThread({
|
|
93
|
+
apiKey: "k",
|
|
94
|
+
model: "m",
|
|
95
|
+
skills: SKILLS,
|
|
96
|
+
loadSkillContent: async (s) => {
|
|
97
|
+
loaded.push(s.name);
|
|
98
|
+
return `BODY:${s.name}`;
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
await codex.submit({
|
|
102
|
+
type: "UserInput",
|
|
103
|
+
items: [{ type: "text", text: "use $song-analyzer please" }],
|
|
104
|
+
});
|
|
105
|
+
await waitForEvent(codex, (m) => m.type === "TurnComplete");
|
|
106
|
+
// Only the mentioned skill's body is loaded.
|
|
107
|
+
expect(loaded).toEqual(["song-analyzer"]);
|
|
108
|
+
const init = fetchMock.mock.calls[0][1];
|
|
109
|
+
const body = JSON.parse(init.body);
|
|
110
|
+
// The skill body rides in input as a turn-scoped message (after the catalog).
|
|
111
|
+
const inputStr = JSON.stringify(body.input);
|
|
112
|
+
expect(inputStr).toContain("<skill>");
|
|
113
|
+
expect(inputStr).toContain("BODY:song-analyzer");
|
|
114
|
+
// The real user message stays last (context messages are prepended).
|
|
115
|
+
expect(JSON.stringify(body.input[body.input.length - 1])).toContain("use $song-analyzer please");
|
|
116
|
+
});
|
|
117
|
+
it("does not load any skill body without a mention", async () => {
|
|
118
|
+
const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
|
|
119
|
+
evResponseCreated("r1"),
|
|
120
|
+
evAssistantMessage("ok"),
|
|
121
|
+
evCompleted("r1"),
|
|
122
|
+
])));
|
|
123
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
124
|
+
const loaded = [];
|
|
125
|
+
const codex = new CodexThread({
|
|
126
|
+
apiKey: "k",
|
|
127
|
+
model: "m",
|
|
128
|
+
skills: SKILLS,
|
|
129
|
+
loadSkillContent: async (s) => {
|
|
130
|
+
loaded.push(s.name);
|
|
131
|
+
return "BODY";
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
await codex.submit({
|
|
135
|
+
type: "UserInput",
|
|
136
|
+
items: [{ type: "text", text: "just chatting" }],
|
|
137
|
+
});
|
|
138
|
+
await waitForEvent(codex, (m) => m.type === "TurnComplete");
|
|
139
|
+
expect(loaded).toEqual([]);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe("catalog budget (mirrors render.rs)", () => {
|
|
143
|
+
const many = Array.from({ length: 5 }, (_, i) => ({
|
|
144
|
+
name: `skill-${i}`,
|
|
145
|
+
description: "A fairly long description that will need trimming when the budget is tight.",
|
|
146
|
+
path: `.agents/skills/skill-${i}/SKILL.md`,
|
|
147
|
+
}));
|
|
148
|
+
it("defaultSkillMetadataBudget: 2% tokens with a context window, else 8000 chars", () => {
|
|
149
|
+
expect(defaultSkillMetadataBudget(/*contextWindow*/ 128_000)).toEqual({
|
|
150
|
+
kind: "tokens",
|
|
151
|
+
limit: 2_560,
|
|
152
|
+
});
|
|
153
|
+
expect(defaultSkillMetadataBudget()).toEqual({
|
|
154
|
+
kind: "characters",
|
|
155
|
+
limit: 8_000,
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
it("keeps full descriptions under a generous budget", () => {
|
|
159
|
+
const out = renderSkillsCatalog(many, {
|
|
160
|
+
kind: "characters",
|
|
161
|
+
limit: 100_000,
|
|
162
|
+
});
|
|
163
|
+
expect(out).toContain("A fairly long description that will need trimming when the budget is tight.");
|
|
164
|
+
for (let i = 0; i < 5; i += 1) {
|
|
165
|
+
expect(out).toContain(`skill-${i}`);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
it("trims descriptions but keeps every skill when the budget is tight", () => {
|
|
169
|
+
const out = renderSkillsCatalog(many, { kind: "characters", limit: 350 });
|
|
170
|
+
for (let i = 0; i < 5; i += 1) {
|
|
171
|
+
expect(out).toContain(`skill-${i}`);
|
|
172
|
+
}
|
|
173
|
+
// The full description no longer fits verbatim.
|
|
174
|
+
expect(out).not.toContain("A fairly long description that will need trimming when the budget is tight.");
|
|
175
|
+
});
|
|
176
|
+
it("appends truncation warning when descriptions are shortened (mirrors render.rs)", () => {
|
|
177
|
+
const out = renderSkillsCatalog(many, { kind: "characters", limit: 350 });
|
|
178
|
+
// At least one description must be shortened → truncation warning appears
|
|
179
|
+
expect(out).toContain("Skill descriptions were shortened to fit the skills context budget.");
|
|
180
|
+
});
|
|
181
|
+
it("appends omission warning when skills are dropped (mirrors render.rs)", () => {
|
|
182
|
+
const out = renderSkillsCatalog(many, { kind: "characters", limit: 80 });
|
|
183
|
+
const shown = many.filter((skill) => out.includes(skill.name)).length;
|
|
184
|
+
expect(shown).toBeGreaterThan(0);
|
|
185
|
+
expect(shown).toBeLessThan(5);
|
|
186
|
+
// Omission warning must appear
|
|
187
|
+
expect(out).toContain("not included in the model-visible skills list.");
|
|
188
|
+
});
|
|
189
|
+
it("no warning when all skills and descriptions fit", () => {
|
|
190
|
+
const out = renderSkillsCatalog(many, { kind: "characters", limit: 100_000 });
|
|
191
|
+
expect(out).not.toContain("shortened to fit");
|
|
192
|
+
expect(out).not.toContain("not included in the model-visible skills list.");
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe("AGENTS.md injection (mirrors AgentsMdManager)", () => {
|
|
196
|
+
/**
|
|
197
|
+
* Mirrors codex-rs AgentsMdManager / user_instructions fragment behaviour.
|
|
198
|
+
* Architecture: agentsMd rides as a discrete user_instructions `input`
|
|
199
|
+
* message (format: "# AGENTS.md instructions\n\n<INSTRUCTIONS>…</INSTRUCTIONS>"),
|
|
200
|
+
* NOT merged into the `instructions` field — this keeps developer instructions
|
|
201
|
+
* and project docs as separate model-visible boundaries (codex-rs contextItems).
|
|
202
|
+
* When agentsMd is absent, no AGENTS.md message is injected.
|
|
203
|
+
*/
|
|
204
|
+
beforeEach(() => {
|
|
205
|
+
vi.unstubAllGlobals();
|
|
206
|
+
});
|
|
207
|
+
it("rides agentsMd as a discrete user_instructions input message", async () => {
|
|
208
|
+
const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
|
|
209
|
+
evResponseCreated("r1"),
|
|
210
|
+
evAssistantMessage("ok"),
|
|
211
|
+
evCompleted("r1"),
|
|
212
|
+
])));
|
|
213
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
214
|
+
const codex = new CodexThread({
|
|
215
|
+
apiKey: "k",
|
|
216
|
+
model: "m",
|
|
217
|
+
instructions: "DEV_INSTRUCTIONS",
|
|
218
|
+
agentsMd: "PROJECT_DOC_BODY",
|
|
219
|
+
});
|
|
220
|
+
await codex.submit({
|
|
221
|
+
type: "UserInput",
|
|
222
|
+
items: [{ type: "text", text: "hi" }],
|
|
223
|
+
});
|
|
224
|
+
await waitForEvent(codex, (m) => m.type === "TurnComplete");
|
|
225
|
+
const init = fetchMock.mock.calls[0][1];
|
|
226
|
+
const body = JSON.parse(init.body);
|
|
227
|
+
// Developer instructions stay in the instructions field (base + developer);
|
|
228
|
+
// AGENTS.md rides as a discrete user_instructions input message.
|
|
229
|
+
expect(body.instructions ?? "").toContain("DEV_INSTRUCTIONS");
|
|
230
|
+
const inputStr = JSON.stringify(body.input);
|
|
231
|
+
expect(inputStr).toContain("# AGENTS.md instructions");
|
|
232
|
+
expect(inputStr).toContain("PROJECT_DOC_BODY");
|
|
233
|
+
expect(body.instructions ?? "").not.toContain("PROJECT_DOC_BODY");
|
|
234
|
+
});
|
|
235
|
+
it("rides agentsMd in an input message even when base is empty", async () => {
|
|
236
|
+
// base "" → empty instructions; agentsMd still rides as an input message
|
|
237
|
+
const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
|
|
238
|
+
evResponseCreated("r1"),
|
|
239
|
+
evAssistantMessage("ok"),
|
|
240
|
+
evCompleted("r1"),
|
|
241
|
+
])));
|
|
242
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
243
|
+
const codex = new CodexThread({
|
|
244
|
+
apiKey: "k",
|
|
245
|
+
model: "m",
|
|
246
|
+
baseInstructions: "", // suppress default so only agentsMd appears
|
|
247
|
+
agentsMd: "ONLY_PROJECT_DOC",
|
|
248
|
+
});
|
|
249
|
+
await codex.submit({
|
|
250
|
+
type: "UserInput",
|
|
251
|
+
items: [{ type: "text", text: "hi" }],
|
|
252
|
+
});
|
|
253
|
+
await waitForEvent(codex, (m) => m.type === "TurnComplete");
|
|
254
|
+
const init = fetchMock.mock.calls[0][1];
|
|
255
|
+
const body = JSON.parse(init.body);
|
|
256
|
+
expect(JSON.stringify(body.input)).toContain("ONLY_PROJECT_DOC");
|
|
257
|
+
expect(body.instructions ?? "").not.toContain("ONLY_PROJECT_DOC");
|
|
258
|
+
});
|
|
259
|
+
it("emits no AGENTS.md input message when none is provided", async () => {
|
|
260
|
+
// instructions + no doc → developer text in instructions, no AGENTS.md msg
|
|
261
|
+
const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
|
|
262
|
+
evResponseCreated("r1"),
|
|
263
|
+
evAssistantMessage("ok"),
|
|
264
|
+
evCompleted("r1"),
|
|
265
|
+
])));
|
|
266
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
267
|
+
const codex = new CodexThread({
|
|
268
|
+
apiKey: "k",
|
|
269
|
+
model: "m",
|
|
270
|
+
instructions: "DEV_INSTRUCTIONS",
|
|
271
|
+
// no agentsMd
|
|
272
|
+
});
|
|
273
|
+
await codex.submit({
|
|
274
|
+
type: "UserInput",
|
|
275
|
+
items: [{ type: "text", text: "hi" }],
|
|
276
|
+
});
|
|
277
|
+
await waitForEvent(codex, (m) => m.type === "TurnComplete");
|
|
278
|
+
const init = fetchMock.mock.calls[0][1];
|
|
279
|
+
const body = JSON.parse(init.body);
|
|
280
|
+
// Developer instructions ride in the instructions field; no AGENTS.md message.
|
|
281
|
+
expect(body.instructions ?? "").toContain("DEV_INSTRUCTIONS");
|
|
282
|
+
expect(JSON.stringify(body.input)).not.toContain("# AGENTS.md instructions");
|
|
283
|
+
});
|
|
284
|
+
it("orders context items: agentsMd → catalog → $mention body → user message", async () => {
|
|
285
|
+
// Verifies the full input ordering mirrors codex-rs TurnContext:
|
|
286
|
+
// contextItems (agentsMd, catalog) → skillInjectionItems ($mention) → history
|
|
287
|
+
const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
|
|
288
|
+
evResponseCreated("r1"),
|
|
289
|
+
evAssistantMessage("ok"),
|
|
290
|
+
evCompleted("r1"),
|
|
291
|
+
])));
|
|
292
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
293
|
+
const codex = new CodexThread({
|
|
294
|
+
apiKey: "k",
|
|
295
|
+
model: "m",
|
|
296
|
+
baseInstructions: "",
|
|
297
|
+
agentsMd: "PROJECT_DOC",
|
|
298
|
+
skills: SKILLS,
|
|
299
|
+
loadSkillContent: async () => "SKILL_BODY",
|
|
300
|
+
});
|
|
301
|
+
await codex.submit({
|
|
302
|
+
type: "UserInput",
|
|
303
|
+
items: [{ type: "text", text: "use $song-analyzer please" }],
|
|
304
|
+
});
|
|
305
|
+
await waitForEvent(codex, (m) => m.type === "TurnComplete");
|
|
306
|
+
const init = fetchMock.mock.calls[0][1];
|
|
307
|
+
const body = JSON.parse(init.body);
|
|
308
|
+
const inputStr = JSON.stringify(body.input);
|
|
309
|
+
// All four layers must be present
|
|
310
|
+
expect(inputStr).toContain("# AGENTS.md instructions"); // agentsMd
|
|
311
|
+
expect(inputStr).toContain("## Skills"); // catalog
|
|
312
|
+
expect(inputStr).toContain("<skill>"); // $mention body
|
|
313
|
+
expect(inputStr).toContain("use $song-analyzer please"); // user message
|
|
314
|
+
// Ordering: agentsMd before catalog before $mention before user message
|
|
315
|
+
const posAgentsMd = inputStr.indexOf("# AGENTS.md instructions");
|
|
316
|
+
const posCatalog = inputStr.indexOf("## Skills");
|
|
317
|
+
const posSkill = inputStr.indexOf("<skill>");
|
|
318
|
+
const posUser = inputStr.indexOf("use $song-analyzer please");
|
|
319
|
+
expect(posAgentsMd).toBeLessThan(posCatalog);
|
|
320
|
+
expect(posCatalog).toBeLessThan(posSkill);
|
|
321
|
+
expect(posSkill).toBeLessThan(posUser);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
//# sourceMappingURL=skills.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../../../core/tests/suite/skills.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type { UserInput } from "./user_input.js";
|
|
2
2
|
export type { RequestUserInputQuestionOption, RequestUserInputQuestion, RequestUserInputArgs, RequestUserInputAnswer, RequestUserInputResponse, RequestUserInputEvent, } from "./request_user_input.js";
|
|
3
3
|
export type { StepStatus, PlanItemArg, UpdatePlanArgs } from "./plan_tool.js";
|
|
4
|
+
export type { ContextCompactedEvent, WarningEvent } from "./protocol.js";
|
|
4
5
|
export type { ThreadGoalStatus, ThreadGoal, TurnStartedEvent, TurnCompleteEvent, AgentMessageEvent, AgentMessageContentDeltaEvent, ThreadGoalUpdatedEvent, ErrorEvent, EventMsg, Event, Op, } from "./protocol.js";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../protocol/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,EAAE,GACH,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../protocol/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,EAAE,GACH,MAAM,eAAe,CAAC"}
|
|
@@ -38,6 +38,18 @@ export interface ThreadGoalUpdatedEvent {
|
|
|
38
38
|
}
|
|
39
39
|
export interface ErrorEvent {
|
|
40
40
|
message: string;
|
|
41
|
+
/**
|
|
42
|
+
* Browser-specific extension — no equivalent in codex-rs/protocol ErrorEvent.
|
|
43
|
+
* Lets hosts correlate an error with the turn that produced it (e.g. to
|
|
44
|
+
* suppress stale-turn errors after an Interrupt).
|
|
45
|
+
*/
|
|
46
|
+
turn_id?: string | undefined;
|
|
47
|
+
}
|
|
48
|
+
/** mirrors codex-rs/protocol/src/protocol.rs ContextCompactedEvent (unit struct) */
|
|
49
|
+
export type ContextCompactedEvent = Record<never, never>;
|
|
50
|
+
/** mirrors WarningEvent */
|
|
51
|
+
export interface WarningEvent {
|
|
52
|
+
message: string;
|
|
41
53
|
}
|
|
42
54
|
export type EventMsg = {
|
|
43
55
|
type: "TurnStarted";
|
|
@@ -60,6 +72,16 @@ export type EventMsg = {
|
|
|
60
72
|
} | {
|
|
61
73
|
type: "PlanUpdate";
|
|
62
74
|
event: UpdatePlanArgs;
|
|
75
|
+
}
|
|
76
|
+
/** mirrors EventMsg::ContextCompacted — emitted when inline compaction runs */
|
|
77
|
+
| {
|
|
78
|
+
type: "ContextCompacted";
|
|
79
|
+
event: ContextCompactedEvent;
|
|
80
|
+
}
|
|
81
|
+
/** mirrors EventMsg::Warning — post-compaction advisory */
|
|
82
|
+
| {
|
|
83
|
+
type: "Warning";
|
|
84
|
+
event: WarningEvent;
|
|
63
85
|
} | {
|
|
64
86
|
type: "Error";
|
|
65
87
|
event: ErrorEvent;
|
|
@@ -73,6 +95,16 @@ export interface Event {
|
|
|
73
95
|
export type Op = {
|
|
74
96
|
type: "UserInput";
|
|
75
97
|
items: UserInput[];
|
|
98
|
+
/**
|
|
99
|
+
* Per-turn instructions override. Subset of ThreadSettingsOverrides in
|
|
100
|
+
* codex-rs. Falls back to the thread's instructions when omitted.
|
|
101
|
+
*/
|
|
102
|
+
instructions?: string | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Per-turn model override. Subset of ThreadSettingsOverrides in codex-rs.
|
|
105
|
+
* Falls back to the thread's model when omitted.
|
|
106
|
+
*/
|
|
107
|
+
model?: string | undefined;
|
|
76
108
|
} | {
|
|
77
109
|
type: "UserInputAnswer";
|
|
78
110
|
/** RequestUserInputEvent.turn_id — identifies which turn to unblock */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../protocol/src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,cAAc,GACd,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../protocol/src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,cAAc,GACd,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAID,oFAAoF;AACpF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzD,2BAA2B;AAC3B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,KAAK,EAAE,6BAA6B,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE;AAC/C,+EAA+E;GAC7E;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE;AAC5D,2DAA2D;GACzD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzC,wFAAwF;AACxF,MAAM,WAAW,KAAK;IACpB,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,QAAQ,CAAC;CACf;AAgBD,MAAM,MAAM,EAAE,GACV;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,wBAAwB,CAAC;CACpC,GACD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1B,YAAY,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -2,6 +2,7 @@ export type { ConversationItem, RolloutItem, CreateThreadParams, AppendThreadIte
|
|
|
2
2
|
export type { ThreadStore } from "./store.js";
|
|
3
3
|
export type { IoBackend } from "./io_backend.js";
|
|
4
4
|
export { InMemoryIoBackend } from "./io_backend.js";
|
|
5
|
+
export { IndexedDBIoBackend } from "./indexeddb.js";
|
|
5
6
|
export { InMemoryThreadStore } from "./in_memory.js";
|
|
6
7
|
export { LocalThreadStore } from "./local_thread_store.js";
|
|
7
8
|
export { LiveThread } from "./live_thread.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { InMemoryIoBackend } from "./io_backend.js";
|
|
2
|
+
export { IndexedDBIoBackend } from "./indexeddb.js";
|
|
2
3
|
export { InMemoryThreadStore } from "./in_memory.js";
|
|
3
4
|
export { LocalThreadStore } from "./local_thread_store.js";
|
|
4
5
|
export { LiveThread } from "./live_thread.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDBIoBackend — browser persistence for codex-ts threads.
|
|
3
|
+
*
|
|
4
|
+
* Browser-specific extension — no equivalent in codex-rs.
|
|
5
|
+
* codex-rs stores conversation history in .jsonl files on the local filesystem
|
|
6
|
+
* via LocalThreadStore + RolloutRecorder. Browsers have no filesystem access,
|
|
7
|
+
* so this class provides the same IoBackend contract using IndexedDB instead.
|
|
8
|
+
*
|
|
9
|
+
* Implements IoBackend on top of IndexedDB so conversation history survives
|
|
10
|
+
* page reloads. Each appended line is one record { threadId, line } keyed by an
|
|
11
|
+
* auto-incrementing id; a `threadId` index keeps per-thread reads ordered by
|
|
12
|
+
* insertion order (IndexedDB returns records with equal index keys sorted by
|
|
13
|
+
* primary key, which is the monotonically increasing id).
|
|
14
|
+
*
|
|
15
|
+
* Browser-only: requires a global `indexedDB`. In Node / test environments use
|
|
16
|
+
* InMemoryIoBackend instead.
|
|
17
|
+
*/
|
|
18
|
+
import type { IoBackend } from "./io_backend.js";
|
|
19
|
+
export declare class IndexedDBIoBackend implements IoBackend {
|
|
20
|
+
private readonly dbName;
|
|
21
|
+
private dbPromise;
|
|
22
|
+
constructor(dbName?: string);
|
|
23
|
+
private openDb;
|
|
24
|
+
appendLine(threadId: string, line: string): Promise<void>;
|
|
25
|
+
readLines(threadId: string): Promise<string[]>;
|
|
26
|
+
listThreadIds(): Promise<string[]>;
|
|
27
|
+
deleteThread(threadId: string): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=indexeddb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../../thread-store/src/indexeddb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAYjD,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,SAAS,CAAqC;gBAE1C,MAAM,GAAE,MAAgB;IAIpC,OAAO,CAAC,MAAM;IAqBR,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ9C,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQlC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAapD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDBIoBackend — browser persistence for codex-ts threads.
|
|
3
|
+
*
|
|
4
|
+
* Browser-specific extension — no equivalent in codex-rs.
|
|
5
|
+
* codex-rs stores conversation history in .jsonl files on the local filesystem
|
|
6
|
+
* via LocalThreadStore + RolloutRecorder. Browsers have no filesystem access,
|
|
7
|
+
* so this class provides the same IoBackend contract using IndexedDB instead.
|
|
8
|
+
*
|
|
9
|
+
* Implements IoBackend on top of IndexedDB so conversation history survives
|
|
10
|
+
* page reloads. Each appended line is one record { threadId, line } keyed by an
|
|
11
|
+
* auto-incrementing id; a `threadId` index keeps per-thread reads ordered by
|
|
12
|
+
* insertion order (IndexedDB returns records with equal index keys sorted by
|
|
13
|
+
* primary key, which is the monotonically increasing id).
|
|
14
|
+
*
|
|
15
|
+
* Browser-only: requires a global `indexedDB`. In Node / test environments use
|
|
16
|
+
* InMemoryIoBackend instead.
|
|
17
|
+
*/
|
|
18
|
+
const DB_NAME = "codex-ts";
|
|
19
|
+
const STORE_NAME = "thread-lines";
|
|
20
|
+
const THREAD_INDEX = "threadId";
|
|
21
|
+
export class IndexedDBIoBackend {
|
|
22
|
+
dbName;
|
|
23
|
+
dbPromise = null;
|
|
24
|
+
constructor(dbName = DB_NAME) {
|
|
25
|
+
this.dbName = dbName;
|
|
26
|
+
}
|
|
27
|
+
openDb() {
|
|
28
|
+
if (this.dbPromise)
|
|
29
|
+
return this.dbPromise;
|
|
30
|
+
this.dbPromise = new Promise((resolve, reject) => {
|
|
31
|
+
const req = indexedDB.open(this.dbName, /*version*/ 1);
|
|
32
|
+
req.onupgradeneeded = () => {
|
|
33
|
+
const db = req.result;
|
|
34
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
35
|
+
const store = db.createObjectStore(STORE_NAME, {
|
|
36
|
+
keyPath: "id",
|
|
37
|
+
autoIncrement: true,
|
|
38
|
+
});
|
|
39
|
+
store.createIndex(THREAD_INDEX, "threadId", { unique: false });
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
req.onsuccess = () => resolve(req.result);
|
|
43
|
+
req.onerror = () => reject(req.error ?? new Error("indexedDB.open failed"));
|
|
44
|
+
});
|
|
45
|
+
return this.dbPromise;
|
|
46
|
+
}
|
|
47
|
+
async appendLine(threadId, line) {
|
|
48
|
+
const db = await this.openDb();
|
|
49
|
+
await runTx(db, "readwrite", (store) => {
|
|
50
|
+
store.add({ threadId, line });
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async readLines(threadId) {
|
|
54
|
+
const db = await this.openDb();
|
|
55
|
+
const records = await runRequest(db, "readonly", (store) => store.index(THREAD_INDEX).getAll(threadId));
|
|
56
|
+
return records.map((record) => record.line);
|
|
57
|
+
}
|
|
58
|
+
async listThreadIds() {
|
|
59
|
+
const db = await this.openDb();
|
|
60
|
+
const keys = await runRequest(db, "readonly", (store) => store.index(THREAD_INDEX).getAllKeys());
|
|
61
|
+
return Array.from(new Set(keys.map((key) => String(key))));
|
|
62
|
+
}
|
|
63
|
+
async deleteThread(threadId) {
|
|
64
|
+
const db = await this.openDb();
|
|
65
|
+
await runTx(db, "readwrite", (store) => {
|
|
66
|
+
const cursorReq = store.index(THREAD_INDEX).openCursor(threadId);
|
|
67
|
+
cursorReq.onsuccess = () => {
|
|
68
|
+
const cursor = cursorReq.result;
|
|
69
|
+
if (cursor) {
|
|
70
|
+
cursor.delete();
|
|
71
|
+
cursor.continue();
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ─── Promise helpers ───────────────────────────────────────────────────────────
|
|
78
|
+
/** Run a transaction body and resolve when the transaction completes. */
|
|
79
|
+
function runTx(db, mode, body) {
|
|
80
|
+
return new Promise((resolve, reject) => {
|
|
81
|
+
const tx = db.transaction(STORE_NAME, mode);
|
|
82
|
+
body(tx.objectStore(STORE_NAME));
|
|
83
|
+
tx.oncomplete = () => resolve();
|
|
84
|
+
tx.onerror = () => reject(tx.error ?? new Error("indexedDB tx failed"));
|
|
85
|
+
tx.onabort = () => reject(tx.error ?? new Error("indexedDB tx aborted"));
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** Run a single request and resolve with its result. */
|
|
89
|
+
function runRequest(db, mode, body) {
|
|
90
|
+
return new Promise((resolve, reject) => {
|
|
91
|
+
const tx = db.transaction(STORE_NAME, mode);
|
|
92
|
+
const req = body(tx.objectStore(STORE_NAME));
|
|
93
|
+
req.onsuccess = () => resolve(req.result);
|
|
94
|
+
req.onerror = () => reject(req.error ?? new Error("indexedDB request failed"));
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=indexeddb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb.js","sourceRoot":"","sources":["../../../thread-store/src/indexeddb.ts"],"names":[],"mappings":"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"}
|