@copilotkit/aimock 1.38.0 → 1.40.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +56 -0
- package/README.md +24 -2
- package/dist/agui-handler.cjs +20 -18
- package/dist/agui-handler.cjs.map +1 -1
- package/dist/agui-handler.d.cts +8 -1
- package/dist/agui-handler.d.cts.map +1 -1
- package/dist/agui-handler.d.ts +8 -1
- package/dist/agui-handler.d.ts.map +1 -1
- package/dist/agui-handler.js +20 -18
- package/dist/agui-handler.js.map +1 -1
- package/dist/agui-stub.d.cts +2 -2
- package/dist/agui-stub.d.ts +2 -2
- package/dist/agui-types.d.cts +84 -3
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/agui-types.d.ts +84 -3
- package/dist/agui-types.d.ts.map +1 -1
- package/dist/aimock-cli.cjs +1 -1
- package/dist/aimock-cli.cjs.map +1 -1
- package/dist/aimock-cli.js +1 -1
- package/dist/aimock-cli.js.map +1 -1
- package/dist/cli.cjs +10 -10
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +10 -10
- package/dist/cli.js.map +1 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/helpers.cjs +8 -4
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +8 -4
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/llmock.cjs +23 -9
- package/dist/llmock.cjs.map +1 -1
- package/dist/llmock.d.cts +22 -0
- package/dist/llmock.d.cts.map +1 -1
- package/dist/llmock.d.ts +22 -0
- package/dist/llmock.d.ts.map +1 -1
- package/dist/llmock.js +25 -11
- package/dist/llmock.js.map +1 -1
- package/dist/openrouter-chat.cjs +41 -0
- package/dist/openrouter-chat.cjs.map +1 -1
- package/dist/openrouter-chat.js +41 -0
- package/dist/openrouter-chat.js.map +1 -1
- package/dist/openrouter-video.cjs.map +1 -1
- package/dist/openrouter-video.js.map +1 -1
- package/dist/recorder.cjs +77 -8
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +77 -8
- package/dist/recorder.js.map +1 -1
- package/dist/server.cjs +80 -17
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +6 -1
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts +6 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +80 -18
- package/dist/server.js.map +1 -1
- package/dist/stream-collapse.cjs +97 -6
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +16 -0
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +16 -0
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +97 -6
- package/dist/stream-collapse.js.map +1 -1
- package/dist/types.d.cts +22 -3
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +22 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/vector-types.d.ts.map +1 -1
- package/dist/ws-gemini-live.cjs +41 -6
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.js +41 -6
- package/dist/ws-gemini-live.js.map +1 -1
- package/package.json +5 -3
package/dist/server.d.cts
CHANGED
|
@@ -20,6 +20,12 @@ interface ServerInstance {
|
|
|
20
20
|
veoVideoJobs: VeoVideoJobMap;
|
|
21
21
|
grokVideoJobs: GrokVideoJobMap;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* The per-server state a full reset clears. `ServerInstance` structurally
|
|
25
|
+
* satisfies this, so `LLMock.reset()` and the control-API full-reset route
|
|
26
|
+
* share a single definition of "everything" instead of two lists that drift.
|
|
27
|
+
*/
|
|
28
|
+
|
|
23
29
|
interface ServiceFixtures {
|
|
24
30
|
search: SearchFixture[];
|
|
25
31
|
rerank: RerankFixture[];
|
|
@@ -30,7 +36,6 @@ declare function createServer(fixtures: Fixture[], options?: MockServerOptions,
|
|
|
30
36
|
handler: Mountable;
|
|
31
37
|
}>, serviceFixtures?: ServiceFixtures): Promise<ServerInstance>;
|
|
32
38
|
/** @internal Config startup uses this to avoid parsing a selected auth source twice. */
|
|
33
|
-
|
|
34
39
|
//#endregion
|
|
35
40
|
export { ServerInstance, ServiceFixtures, createServer };
|
|
36
41
|
//# sourceMappingURL=server.d.cts.map
|
package/dist/server.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.cts","names":[],"sources":["../src/server.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;UAyHiB,cAAA;EAAA,MAAA,EACP,MAAA,CAAK,MADgB;EAAA,OAAA,EAEpB,OAFoB;KACrB,EAAA,MAAK;UACJ,EAEC,eAFD;aAEC,EACG,aADH;qBACG,EACQ,qBADR;cACQ,EACP,cADO;eACP,EACC,eADD
|
|
1
|
+
{"version":3,"file":"server.d.cts","names":[],"sources":["../src/server.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;UAyHiB,cAAA;EAAA,MAAA,EACP,MAAA,CAAK,MADgB;EAAA,OAAA,EAEpB,OAFoB;KACrB,EAAA,MAAK;UACJ,EAEC,eAFD;aAEC,EACG,aADH;qBACG,EACQ,qBADR;cACQ,EACP,cADO;eACP,EACC,eADD;;;AA2rChB;;;;;UAAiB,eAAA;UACP;UACA;cACI;;iBAMQ,YAAA,WACV,qBACA,4BACD;;WAA+B;sBACtB,kBACjB,QAAQ"}
|
package/dist/server.d.ts
CHANGED
|
@@ -20,6 +20,12 @@ interface ServerInstance {
|
|
|
20
20
|
veoVideoJobs: VeoVideoJobMap;
|
|
21
21
|
grokVideoJobs: GrokVideoJobMap;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* The per-server state a full reset clears. `ServerInstance` structurally
|
|
25
|
+
* satisfies this, so `LLMock.reset()` and the control-API full-reset route
|
|
26
|
+
* share a single definition of "everything" instead of two lists that drift.
|
|
27
|
+
*/
|
|
28
|
+
|
|
23
29
|
interface ServiceFixtures {
|
|
24
30
|
search: SearchFixture[];
|
|
25
31
|
rerank: RerankFixture[];
|
|
@@ -30,7 +36,6 @@ declare function createServer(fixtures: Fixture[], options?: MockServerOptions,
|
|
|
30
36
|
handler: Mountable;
|
|
31
37
|
}>, serviceFixtures?: ServiceFixtures): Promise<ServerInstance>;
|
|
32
38
|
/** @internal Config startup uses this to avoid parsing a selected auth source twice. */
|
|
33
|
-
|
|
34
39
|
//#endregion
|
|
35
40
|
export { ServerInstance, ServiceFixtures, createServer };
|
|
36
41
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","names":[],"sources":["../src/server.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;UAyHiB,cAAA;EAAA,MAAA,EACP,MAAA,CAAK,MADgB;EAAA,OAAA,EAEpB,OAFoB;KACrB,EAAA,MAAK;UACJ,EAEC,eAFD;aAEC,EACG,aADH;qBACG,EACQ,qBADR;cACQ,EACP,cADO;eACP,EACC,eADD
|
|
1
|
+
{"version":3,"file":"server.d.ts","names":[],"sources":["../src/server.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;UAyHiB,cAAA;EAAA,MAAA,EACP,MAAA,CAAK,MADgB;EAAA,OAAA,EAEpB,OAFoB;KACrB,EAAA,MAAK;UACJ,EAEC,eAFD;aAEC,EACG,aADH;qBACG,EACQ,qBADR;cACQ,EACP,cADO;eACP,EACC,eADD;;;AA2rChB;;;;;UAAiB,eAAA;UACP;UACA;cACI;;iBAMQ,YAAA,WACV,qBACA,4BACD;;WAA+B;sBACtB,kBACjB,QAAQ"}
|
package/dist/server.js
CHANGED
|
@@ -143,23 +143,31 @@ function handleNotFound(res, message) {
|
|
|
143
143
|
}
|
|
144
144
|
const CONTROL_PREFIX = "/__aimock";
|
|
145
145
|
/**
|
|
146
|
-
* Perform a full
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
146
|
+
* Perform a full reset: clear the fixtures array, the journal (entries *and*
|
|
147
|
+
* per-test fixture match-counts, i.e. sequence position), the video and fal.ai
|
|
148
|
+
* job/queue state, and the Gemini interaction/event-id counters, then re-zero
|
|
149
|
+
* the `aimock_fixtures_loaded` gauge.
|
|
150
|
+
*
|
|
151
|
+
* `targets` is `null` when no server is running (an in-process `reset()` before
|
|
152
|
+
* `start()`). The process-global generation state is reset either way, since it
|
|
153
|
+
* is not owned by any one server instance.
|
|
154
|
+
*
|
|
155
|
+
* Shared by `POST /__aimock/reset` (canonical), its deprecated
|
|
156
|
+
* `POST /__aimock/reset/fixtures` alias, and `LLMock.reset()`.
|
|
150
157
|
*/
|
|
151
|
-
function
|
|
158
|
+
function performFullReset(fixtures, targets) {
|
|
152
159
|
fixtures.length = 0;
|
|
153
|
-
journal.clear();
|
|
154
|
-
videoStates.clear();
|
|
155
|
-
openRouterVideoJobs.clear();
|
|
156
|
-
veoVideoJobs.clear();
|
|
157
|
-
grokVideoJobs.clear();
|
|
158
160
|
falJobs.clear();
|
|
159
161
|
falQueueStates.clear();
|
|
160
162
|
resetInteractionCounter();
|
|
161
163
|
resetEventIdCounter();
|
|
162
|
-
if (
|
|
164
|
+
if (!targets) return;
|
|
165
|
+
targets.journal.clear();
|
|
166
|
+
targets.videoStates.clear();
|
|
167
|
+
targets.openRouterVideoJobs.clear();
|
|
168
|
+
targets.veoVideoJobs.clear();
|
|
169
|
+
targets.grokVideoJobs.clear();
|
|
170
|
+
if (targets.defaults.registry) targets.defaults.registry.setGauge("aimock_fixtures_loaded", {}, fixtures.length);
|
|
163
171
|
}
|
|
164
172
|
/**
|
|
165
173
|
* Handle requests under `/__aimock/`. Returns `true` if the request was
|
|
@@ -179,6 +187,11 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
179
187
|
res.end(JSON.stringify(journal.getAll()));
|
|
180
188
|
return true;
|
|
181
189
|
}
|
|
190
|
+
if (subPath === "/fixtures" && req.method === "GET") {
|
|
191
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
192
|
+
res.end(JSON.stringify({ count: fixtures.length }));
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
182
195
|
if (subPath === "/fixtures" && req.method === "POST") {
|
|
183
196
|
let raw;
|
|
184
197
|
try {
|
|
@@ -228,8 +241,16 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
228
241
|
res.end(JSON.stringify({ cleared: true }));
|
|
229
242
|
return true;
|
|
230
243
|
}
|
|
231
|
-
|
|
232
|
-
|
|
244
|
+
const resetTargets = () => ({
|
|
245
|
+
journal,
|
|
246
|
+
videoStates,
|
|
247
|
+
openRouterVideoJobs,
|
|
248
|
+
veoVideoJobs,
|
|
249
|
+
grokVideoJobs,
|
|
250
|
+
defaults
|
|
251
|
+
});
|
|
252
|
+
if (subPath === "/reset" && req.method === "POST") {
|
|
253
|
+
performFullReset(fixtures, resetTargets());
|
|
233
254
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
234
255
|
res.end(JSON.stringify({ reset: true }));
|
|
235
256
|
return true;
|
|
@@ -240,10 +261,10 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
240
261
|
res.end(JSON.stringify({ reset: true }));
|
|
241
262
|
return true;
|
|
242
263
|
}
|
|
243
|
-
if (subPath === "/reset" && req.method === "POST") {
|
|
244
|
-
|
|
245
|
-
const deprecation = "POST /__aimock/reset is deprecated; use POST /__aimock/reset
|
|
246
|
-
defaults.logger.warn("POST /__aimock/reset is deprecated; use /__aimock/reset
|
|
264
|
+
if (subPath === "/reset/fixtures" && req.method === "POST") {
|
|
265
|
+
performFullReset(fixtures, resetTargets());
|
|
266
|
+
const deprecation = "POST /__aimock/reset/fixtures is deprecated; use POST /__aimock/reset (full reset) or POST /__aimock/reset/journal (journal only)";
|
|
267
|
+
defaults.logger.warn("POST /__aimock/reset/fixtures is deprecated; use /__aimock/reset or /__aimock/reset/journal");
|
|
247
268
|
res.writeHead(200, {
|
|
248
269
|
"Content-Type": "application/json",
|
|
249
270
|
Deprecation: "true"
|
|
@@ -1837,7 +1858,48 @@ async function createServerWithResolvedAuth(fixtures, options, resolvedAuth, mou
|
|
|
1837
1858
|
if (!socket.destroyed) socket.destroy();
|
|
1838
1859
|
});
|
|
1839
1860
|
});
|
|
1861
|
+
/**
|
|
1862
|
+
* Body bytes the platform already parsed onto `req` for an upgrade request.
|
|
1863
|
+
*
|
|
1864
|
+
* Node >= 26 delivers an upgrade request's body here and leaves `head`
|
|
1865
|
+
* empty; Node <= 24 leaves the body in `head` and ends `req` with nothing.
|
|
1866
|
+
* The stream has already ended in both cases, so this resolves on the next
|
|
1867
|
+
* tick either way — it never waits on the network.
|
|
1868
|
+
*/
|
|
1869
|
+
function drainParsedRequestBody(req) {
|
|
1870
|
+
return new Promise((resolve) => {
|
|
1871
|
+
const chunks = [];
|
|
1872
|
+
let settled = false;
|
|
1873
|
+
const done = () => {
|
|
1874
|
+
if (settled) return;
|
|
1875
|
+
settled = true;
|
|
1876
|
+
resolve(Buffer.concat(chunks));
|
|
1877
|
+
};
|
|
1878
|
+
req.on("data", (c) => chunks.push(c));
|
|
1879
|
+
req.on("end", done);
|
|
1880
|
+
req.on("error", done);
|
|
1881
|
+
req.on("close", done);
|
|
1882
|
+
req.resume();
|
|
1883
|
+
});
|
|
1884
|
+
}
|
|
1840
1885
|
async function handleUpgradeRequest(req, socket, head) {
|
|
1886
|
+
if ((req.headers.upgrade ?? "").toLowerCase() !== "websocket") {
|
|
1887
|
+
const parsedBody = await drainParsedRequestBody(req);
|
|
1888
|
+
const requestLine = `${req.method} ${req.url} HTTP/${req.httpVersion}\r\n`;
|
|
1889
|
+
const headerLines = [];
|
|
1890
|
+
for (let i = 0; i < req.rawHeaders.length; i += 2) {
|
|
1891
|
+
if (/^(?:upgrade|connection)$/i.test(req.rawHeaders[i])) continue;
|
|
1892
|
+
headerLines.push(`${req.rawHeaders[i]}: ${req.rawHeaders[i + 1]}`);
|
|
1893
|
+
}
|
|
1894
|
+
const rebuilt = Buffer.from(requestLine + headerLines.join("\r\n") + "\r\n\r\n");
|
|
1895
|
+
socket.unshift(Buffer.concat([
|
|
1896
|
+
rebuilt,
|
|
1897
|
+
parsedBody,
|
|
1898
|
+
head
|
|
1899
|
+
]));
|
|
1900
|
+
server.emit("connection", socket);
|
|
1901
|
+
return;
|
|
1902
|
+
}
|
|
1841
1903
|
const parsedUrl = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
1842
1904
|
let pathname = parsedUrl.pathname;
|
|
1843
1905
|
if (!validateRequestApiKey(req, resolvedAuth.policy).ok) {
|
|
@@ -1936,5 +1998,5 @@ async function createServerWithResolvedAuth(fixtures, options, resolvedAuth, mou
|
|
|
1936
1998
|
}
|
|
1937
1999
|
|
|
1938
2000
|
//#endregion
|
|
1939
|
-
export { createServer, createServerWithResolvedAuth };
|
|
2001
|
+
export { createServer, createServerWithResolvedAuth, performFullReset };
|
|
1940
2002
|
//# sourceMappingURL=server.js.map
|