@rubytech/create-maxy-code 0.1.434 → 0.1.436
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/package.json +1 -1
- package/payload/platform/docs/superpowers/plans/2026-07-11-task-1557-operator-on-behalf-preference-attribution.md +542 -0
- package/payload/platform/docs/superpowers/specs/2026-07-11-task-1557-operator-on-behalf-preference-attribution-design.md +90 -0
- package/payload/platform/lib/embed-client/dist/index.d.ts +2 -2
- package/payload/platform/lib/embed-client/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/embed-client/dist/index.js +114 -37
- package/payload/platform/lib/embed-client/dist/index.js.map +1 -1
- package/payload/platform/lib/embed-client/src/index.ts +120 -37
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/hooks/__tests__/askuserquestion-channel-carrier-gate.test.sh +175 -0
- package/payload/platform/plugins/admin/hooks/askuserquestion-channel-carrier-gate.sh +137 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +2 -2
- package/payload/platform/plugins/docs/references/internals.md +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +2 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js +42 -22
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/embed-progress-reporter.d.ts +22 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embed-progress-reporter.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embed-progress-reporter.js +43 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embed-progress-reporter.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/profile-identity.d.ts +34 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/profile-identity.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/profile-identity.js +22 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/profile-identity.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/resolve-admin-home-account.d.ts +13 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/resolve-admin-home-account.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/resolve-admin-home-account.js +26 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/resolve-admin-home-account.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress-reporter.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress-reporter.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress-reporter.test.js +52 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress-reporter.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress.test.js +56 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-throughput.test.js +186 -19
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-throughput.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-timeout.test.js +11 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-timeout.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embeddings-cap.test.js +18 -12
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embeddings-cap.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-identity.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-identity.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-identity.test.js +72 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-identity.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-own-preference-selfheal.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-own-preference-selfheal.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-own-preference-selfheal.test.js +113 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-own-preference-selfheal.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-reconcile.test.js +6 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-reconcile.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-admin-home-account.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-admin-home-account.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-admin-home-account.test.js +38 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-admin-home-account.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +9 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +52 -7
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/skills/conversational-memory/SKILL.md +8 -0
- package/payload/platform/scripts/lib/provision-account-dir.sh +2 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +20 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/interactive-wedge.d.ts +42 -0
- package/payload/platform/services/claude-session-manager/dist/interactive-wedge.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/interactive-wedge.js +149 -0
- package/payload/platform/services/claude-session-manager/dist/interactive-wedge.js.map +1 -0
- package/payload/server/{chunk-UUG6ZSO5.js → chunk-LMLVOZ6G.js} +35 -2
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/{chat-C56bmC6C.js → chat-DUc7bt5W.js} +1 -1
- package/payload/server/public/assets/{operator-B4wN2c53.js → operator-B3Mi3TW0.js} +1 -1
- package/payload/server/public/assets/page-DbUaFfk6.js +32 -0
- package/payload/server/public/assets/{public-DmBKnBkr.js → public-CYhDdDJd.js} +1 -1
- package/payload/server/public/chat.html +2 -2
- package/payload/server/public/operator.html +2 -2
- package/payload/server/public/public.html +2 -2
- package/payload/server/server.js +8 -7
- package/payload/server/public/assets/page-BIfOKi9I.js +0 -32
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getSession } from "./neo4j.js";
|
|
2
|
+
/**
|
|
3
|
+
* Task 1557 — resolve the "home" account of an admin: the `accountId` stamped
|
|
4
|
+
* on their `:AdminUser` node. AdminUser is MERGE-keyed on `userId` alone
|
|
5
|
+
* (neo4j-store.ts), with `accountId` set ON CREATE, so each admin has exactly
|
|
6
|
+
* one node whose `accountId` is the account they were first provisioned under.
|
|
7
|
+
*
|
|
8
|
+
* A profile op whose caller's home account differs from the account the session
|
|
9
|
+
* is scoped to is a house operator working inside a client's sub-account — the
|
|
10
|
+
* preference belongs to that client's owner, not the operator. Returns null when
|
|
11
|
+
* the caller has no `:AdminUser` node or it carries no `accountId`.
|
|
12
|
+
*/
|
|
13
|
+
export async function resolveAdminHomeAccount(userId) {
|
|
14
|
+
const session = getSession();
|
|
15
|
+
try {
|
|
16
|
+
const res = await session.run(`MATCH (au:AdminUser {userId: $userId})
|
|
17
|
+
RETURN au.accountId AS accountId
|
|
18
|
+
LIMIT 1`, { userId });
|
|
19
|
+
const accountId = res.records[0]?.get("accountId");
|
|
20
|
+
return typeof accountId === "string" && accountId.length > 0 ? accountId : null;
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
await session.close();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=resolve-admin-home-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-admin-home-account.js","sourceRoot":"","sources":["../../src/lib/resolve-admin-home-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAc;IAC1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3B;;eAES,EACT,EAAE,MAAM,EAAE,CACX,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-progress-reporter.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-progress-reporter.test.ts"],"names":[],"mappings":""}
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress-reporter.test.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { makeEmbedProgressReporter } from "../../lib/embed-progress-reporter.js";
|
|
3
|
+
// Task 1555. The reporter turns the MCP request `extra` into a (done,total)
|
|
4
|
+
// callback that emits `notifications/progress`. The progress notification is
|
|
5
|
+
// what resets Claude Code's stdio idle timer; when the client sent no progress
|
|
6
|
+
// token there is nothing to attach to, so the reporter must stay silent. A
|
|
7
|
+
// notification send that fails must never abort the ingest.
|
|
8
|
+
describe("makeEmbedProgressReporter", () => {
|
|
9
|
+
it("emits notifications/progress carrying the client token, progress, and total", async () => {
|
|
10
|
+
const sent = [];
|
|
11
|
+
const extra = {
|
|
12
|
+
_meta: { progressToken: "tok-123" },
|
|
13
|
+
sendNotification: vi.fn(async (n) => {
|
|
14
|
+
sent.push(n);
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
const report = makeEmbedProgressReporter(extra);
|
|
18
|
+
report(3, 10);
|
|
19
|
+
// sendNotification is async; let the microtask settle.
|
|
20
|
+
await Promise.resolve();
|
|
21
|
+
expect(sent).toHaveLength(1);
|
|
22
|
+
expect(sent[0].method).toBe("notifications/progress");
|
|
23
|
+
expect(sent[0].params.progressToken).toBe("tok-123");
|
|
24
|
+
expect(sent[0].params.progress).toBe(3);
|
|
25
|
+
expect(sent[0].params.total).toBe(10);
|
|
26
|
+
});
|
|
27
|
+
it("is a no-op when the client sent no progressToken", async () => {
|
|
28
|
+
const sendNotification = vi.fn(async () => { });
|
|
29
|
+
const report = makeEmbedProgressReporter({ _meta: {}, sendNotification });
|
|
30
|
+
report(3, 10);
|
|
31
|
+
await Promise.resolve();
|
|
32
|
+
expect(sendNotification).not.toHaveBeenCalled();
|
|
33
|
+
// Also when _meta itself is absent.
|
|
34
|
+
const sn2 = vi.fn(async () => { });
|
|
35
|
+
makeEmbedProgressReporter({ sendNotification: sn2 })(1, 2);
|
|
36
|
+
await Promise.resolve();
|
|
37
|
+
expect(sn2).not.toHaveBeenCalled();
|
|
38
|
+
});
|
|
39
|
+
it("swallows a rejected sendNotification instead of throwing out of the reporter", async () => {
|
|
40
|
+
const report = makeEmbedProgressReporter({
|
|
41
|
+
_meta: { progressToken: 7 },
|
|
42
|
+
sendNotification: vi.fn(async () => {
|
|
43
|
+
throw new Error("transport closed");
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
// Must not throw synchronously and must not surface an unhandled rejection.
|
|
47
|
+
expect(() => report(1, 2)).not.toThrow();
|
|
48
|
+
await Promise.resolve();
|
|
49
|
+
await Promise.resolve();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=embed-progress-reporter.test.js.map
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-progress-reporter.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-progress-reporter.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-progress-reporter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-progress.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-progress.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
// Task 1555. embedBatch must report progress after each sub-batch POST so the
|
|
3
|
+
// caller (memory-ingest) can emit an MCP progress notification per POST and
|
|
4
|
+
// reset Claude Code's stdio idle timer. The callback is MCP-agnostic — just
|
|
5
|
+
// (done, total) — so embed-client stays free of MCP concepts.
|
|
6
|
+
describe("embedBatch onProgress", () => {
|
|
7
|
+
beforeEach(() => vi.restoreAllMocks());
|
|
8
|
+
it("fires onProgress after every sub-batch POST, cumulative, ending at done===total", async () => {
|
|
9
|
+
// Five sections including dense oversized ones force the adaptive sizer to
|
|
10
|
+
// split across multiple POSTs (a size-1 probe first), so onProgress is
|
|
11
|
+
// called more than once.
|
|
12
|
+
const sections = [
|
|
13
|
+
"Summary of the document.",
|
|
14
|
+
"🟢🟡🔴 ## Observatory\n".repeat(1400),
|
|
15
|
+
"A normal-length prose section about the campaign.",
|
|
16
|
+
"🔴🔴🔴 status matrix ".repeat(600),
|
|
17
|
+
"Closing section.",
|
|
18
|
+
];
|
|
19
|
+
vi.stubGlobal("fetch", vi.fn(async (_u, init) => {
|
|
20
|
+
const inp = JSON.parse(init.body).input;
|
|
21
|
+
return {
|
|
22
|
+
ok: true,
|
|
23
|
+
json: async () => ({ embeddings: inp.map(() => [0.1]) }),
|
|
24
|
+
};
|
|
25
|
+
}));
|
|
26
|
+
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
27
|
+
const calls = [];
|
|
28
|
+
const vectors = await embedBatch(sections, (done, total) => calls.push({ done, total }));
|
|
29
|
+
expect(vectors).toHaveLength(sections.length);
|
|
30
|
+
// More than one POST → more than one progress call.
|
|
31
|
+
expect(calls.length).toBeGreaterThanOrEqual(2);
|
|
32
|
+
// total is constant and equals the input count.
|
|
33
|
+
for (const c of calls)
|
|
34
|
+
expect(c.total).toBe(sections.length);
|
|
35
|
+
// done is strictly increasing.
|
|
36
|
+
for (let i = 1; i < calls.length; i++) {
|
|
37
|
+
expect(calls[i].done).toBeGreaterThan(calls[i - 1].done);
|
|
38
|
+
}
|
|
39
|
+
// The final call reports completion.
|
|
40
|
+
expect(calls[calls.length - 1].done).toBe(sections.length);
|
|
41
|
+
});
|
|
42
|
+
it("fires onProgress once on the single-POST fast path with done===total", async () => {
|
|
43
|
+
vi.stubGlobal("fetch", vi.fn(async (_u, init) => {
|
|
44
|
+
const inp = JSON.parse(init.body).input;
|
|
45
|
+
return {
|
|
46
|
+
ok: true,
|
|
47
|
+
json: async () => ({ embeddings: inp.map(() => [0.1]) }),
|
|
48
|
+
};
|
|
49
|
+
}));
|
|
50
|
+
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
51
|
+
const calls = [];
|
|
52
|
+
await embedBatch(["only one section"], (done, total) => calls.push({ done, total }));
|
|
53
|
+
expect(calls).toEqual([{ done: 1, total: 1 }]);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=embed-progress.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-progress.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-progress.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8DAA8D;AAC9D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;IAEvC,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,2EAA2E;QAC3E,uEAAuE;QACvE,yBAAyB;QACzB,MAAM,QAAQ,GAAG;YACf,0BAA0B;YAC1B,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,mDAAmD;YACnD,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC;YACnC,kBAAkB;SACnB,CAAC;QACF,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAU,EAAE,IAAsB,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAiB,CAAC;YACpD,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;aAClC,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;QACF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC/D,MAAM,KAAK,GAA2C,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACzD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAC5B,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,oDAAoD;QACpD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC/C,gDAAgD;QAChD,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7D,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,qCAAqC;QACrC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAU,EAAE,IAAsB,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAiB,CAAC;YACpD,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;aAClC,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;QACF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC/D,MAAM,KAAK,GAA2C,EAAE,CAAC;QACzD,MAAM,UAAU,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACrD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAC5B,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,18 +1,81 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
// Record
|
|
3
|
-
//
|
|
4
|
-
function
|
|
2
|
+
// Record every /api/embed POST's input array, and return one zero-vector per
|
|
3
|
+
// input so the index-aligned contract can be checked. Resolves instantly.
|
|
4
|
+
function stubFetchRecordingPosts(posts) {
|
|
5
5
|
vi.stubGlobal("fetch", vi.fn(async (_url, init) => {
|
|
6
6
|
const body = JSON.parse(init.body);
|
|
7
7
|
const inputs = Array.isArray(body.input) ? body.input : [body.input];
|
|
8
|
-
|
|
8
|
+
posts.push(inputs);
|
|
9
9
|
return {
|
|
10
10
|
ok: true,
|
|
11
11
|
json: async () => ({ embeddings: inputs.map(() => [0]) }),
|
|
12
12
|
};
|
|
13
13
|
}));
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
// Fake-clock stub: each POST "takes" (fixed overhead + total chars * msPerChar)
|
|
16
|
+
// of simulated wall-time, advanced synchronously so there is no real sleeping
|
|
17
|
+
// and no flakiness. The stub ignores the abort signal and always resolves, so a
|
|
18
|
+
// simulated-slow POST completes and its measured elapsed feeds the next size.
|
|
19
|
+
function stubFetchCharLatency(posts, msPerCharFor, overheadMs = 0) {
|
|
20
|
+
vi.setSystemTime(0);
|
|
21
|
+
let clock = 0;
|
|
22
|
+
let n = 0;
|
|
23
|
+
vi.stubGlobal("fetch", vi.fn(async (_url, init) => {
|
|
24
|
+
const body = JSON.parse(init.body);
|
|
25
|
+
const inputs = Array.isArray(body.input) ? body.input : [body.input];
|
|
26
|
+
posts.push(inputs);
|
|
27
|
+
const chars = inputs.reduce((s, t) => s + t.length, 0);
|
|
28
|
+
clock += overheadMs + chars * msPerCharFor(n);
|
|
29
|
+
n += 1;
|
|
30
|
+
vi.setSystemTime(clock);
|
|
31
|
+
return {
|
|
32
|
+
ok: true,
|
|
33
|
+
json: async () => ({ embeddings: inputs.map(() => [0]) }),
|
|
34
|
+
};
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
const charsOf = (post) => post.reduce((s, t) => s + t.length, 0);
|
|
38
|
+
describe("subBatchCharBudget — pure char-budget sizing", () => {
|
|
39
|
+
beforeEach(() => {
|
|
40
|
+
vi.resetModules();
|
|
41
|
+
process.env.EMBED_REQUEST_TIMEOUT_MS = "120000";
|
|
42
|
+
});
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
delete process.env.EMBED_REQUEST_TIMEOUT_MS;
|
|
45
|
+
});
|
|
46
|
+
it("returns floor(timeout * 0.8 / msPerChar) chars", async () => {
|
|
47
|
+
const { subBatchCharBudget } = await import("../../../../../../lib/embed-client/dist/index.js");
|
|
48
|
+
// 120000 * 0.8 / 4 = 24000 chars.
|
|
49
|
+
expect(subBatchCharBudget(4)).toBe(24000);
|
|
50
|
+
});
|
|
51
|
+
it("floors at 1 char when a single char would already blow the timeout", async () => {
|
|
52
|
+
const { subBatchCharBudget } = await import("../../../../../../lib/embed-client/dist/index.js");
|
|
53
|
+
expect(subBatchCharBudget(1e12)).toBe(1);
|
|
54
|
+
});
|
|
55
|
+
it("is unbounded (Infinity) when the device is effectively instant", async () => {
|
|
56
|
+
const { subBatchCharBudget } = await import("../../../../../../lib/embed-client/dist/index.js");
|
|
57
|
+
expect(subBatchCharBudget(0)).toBe(Infinity); // count ceiling governs instead
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe("EMBED_SUBBATCH_SIZE default count ceiling", () => {
|
|
61
|
+
beforeEach(() => {
|
|
62
|
+
vi.resetModules();
|
|
63
|
+
delete process.env.EMBED_SUBBATCH_SIZE;
|
|
64
|
+
});
|
|
65
|
+
afterEach(() => {
|
|
66
|
+
delete process.env.EMBED_SUBBATCH_SIZE;
|
|
67
|
+
});
|
|
68
|
+
it("defaults to 4 so a fast-probe POST stays under the timeout even if contention spikes mid-batch", async () => {
|
|
69
|
+
// The char budget is derived from the *probe's* observed rate. If the probe
|
|
70
|
+
// runs while the machine is briefly quiet, the budget is large and the next
|
|
71
|
+
// POST would pack up to the ceiling; if contention then spikes, that POST
|
|
72
|
+
// runs far slower than measured and can exceed EMBED_REQUEST_TIMEOUT_MS. A
|
|
73
|
+
// ceiling of 4 bounds the worst case to ~4 x 17s on this box, under 120s.
|
|
74
|
+
const { EMBED_SUBBATCH_SIZE } = await import("../../../../../../lib/embed-client/dist/index.js");
|
|
75
|
+
expect(EMBED_SUBBATCH_SIZE).toBe(4);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("embedBatch — adaptive char-based sub-batch sizing", () => {
|
|
16
79
|
beforeEach(() => {
|
|
17
80
|
vi.restoreAllMocks();
|
|
18
81
|
vi.resetModules();
|
|
@@ -21,29 +84,133 @@ describe("throughput-aware embed sub-batch sizing", () => {
|
|
|
21
84
|
process.env.EMBED_SUBBATCH_COOLDOWN_MS = "0"; // no real sleeps in test
|
|
22
85
|
});
|
|
23
86
|
afterEach(() => {
|
|
87
|
+
vi.useRealTimers();
|
|
24
88
|
delete process.env.EMBED_REQUEST_TIMEOUT_MS;
|
|
25
89
|
delete process.env.EMBED_SUBBATCH_SIZE;
|
|
26
90
|
delete process.env.EMBED_SUBBATCH_COOLDOWN_MS;
|
|
27
91
|
delete process.env.EMBED_MS_PER_INPUT;
|
|
28
92
|
});
|
|
29
|
-
it("
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
stubFetchRecordingBatchSizes(sizes);
|
|
93
|
+
it("probes with a single input first, respects the count ceiling, and keeps vectors index-aligned", async () => {
|
|
94
|
+
const posts = [];
|
|
95
|
+
stubFetchRecordingPosts(posts); // instant -> msPerChar ~0 -> count ceiling after probe
|
|
33
96
|
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
34
97
|
const texts = Array.from({ length: 35 }, (_, i) => `section ${i}`);
|
|
35
98
|
const out = await embedBatch(texts);
|
|
36
|
-
expect(
|
|
37
|
-
expect(
|
|
38
|
-
expect(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
99
|
+
expect(posts[0]).toHaveLength(1); // first POST is always the size-1 probe
|
|
100
|
+
expect(posts.every((p) => p.length <= 32)).toBe(true); // count ceiling is the hard cap
|
|
101
|
+
expect(posts.reduce((a, p) => a + p.length, 0)).toBe(35); // every input embedded once
|
|
102
|
+
expect(out).toHaveLength(35); // index-aligned: one vector per input
|
|
103
|
+
});
|
|
104
|
+
it("keeps a single-input batch (the warm interactive query) as exactly one POST", async () => {
|
|
105
|
+
const posts = [];
|
|
106
|
+
stubFetchRecordingPosts(posts);
|
|
44
107
|
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
45
|
-
await embedBatch(
|
|
46
|
-
expect(
|
|
108
|
+
await embedBatch(["just one"]);
|
|
109
|
+
expect(posts.map((p) => p.length)).toEqual([1]);
|
|
110
|
+
});
|
|
111
|
+
it("does NOT over-size the next POST when a short first input under-represents later big inputs", async () => {
|
|
112
|
+
// The exitchatcontrol regression: a short document summary followed by
|
|
113
|
+
// near-cap section bodies. Sizing by input count from the fast summary
|
|
114
|
+
// probe would bundle every big input into one POST and time out; sizing by
|
|
115
|
+
// observed characters bounds each POST's total chars so every POST completes.
|
|
116
|
+
// Device-like numbers: 100 ms fixed request overhead + 3 ms/char.
|
|
117
|
+
vi.useFakeTimers();
|
|
118
|
+
const posts = [];
|
|
119
|
+
const MS_PER_CHAR = 3;
|
|
120
|
+
const OVERHEAD = 100;
|
|
121
|
+
stubFetchCharLatency(posts, () => MS_PER_CHAR, OVERHEAD);
|
|
122
|
+
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
123
|
+
// Big inputs are at the 4000-char token-safe cap (Task 1558), the realistic
|
|
124
|
+
// shape of a dense section after capInput truncates it.
|
|
125
|
+
const texts = ["s".repeat(300), ...Array.from({ length: 10 }, () => "x".repeat(4000))];
|
|
126
|
+
const out = await embedBatch(texts);
|
|
127
|
+
expect(posts[0]).toHaveLength(1); // probe is the short summary
|
|
128
|
+
// Every POST — probe and each big-input POST — completes inside the 120 s
|
|
129
|
+
// timeout. The old per-input sizing would bundle all 10 big inputs into the
|
|
130
|
+
// POST after the probe (~120 s+) and abort.
|
|
131
|
+
for (const p of posts) {
|
|
132
|
+
expect(OVERHEAD + charsOf(p) * MS_PER_CHAR).toBeLessThan(120000);
|
|
133
|
+
}
|
|
134
|
+
// Char-bounded, not count-bounded: the probe's ~3.3 ms/char rate implies a
|
|
135
|
+
// ~28,800-char budget (120000 * 0.8 / 3.33), so each post-probe POST stays
|
|
136
|
+
// within it (seven 4000-char inputs = 28,000 fit; eight = 32,000 would not),
|
|
137
|
+
// and never reaches the count ceiling of 32.
|
|
138
|
+
for (const p of posts.slice(1)) {
|
|
139
|
+
expect(charsOf(p)).toBeLessThanOrEqual(28800);
|
|
140
|
+
expect(p.length).toBeLessThan(32);
|
|
141
|
+
}
|
|
142
|
+
expect(out).toHaveLength(11);
|
|
143
|
+
});
|
|
144
|
+
it("shrinks the remaining POSTs after a mid-batch slowdown", async () => {
|
|
145
|
+
// 100 inputs of 200 chars. First two POSTs fast (3 ms/char), then a 10x
|
|
146
|
+
// slowdown (30 ms/char). The running max shrinks every POST after it.
|
|
147
|
+
vi.useFakeTimers();
|
|
148
|
+
const posts = [];
|
|
149
|
+
stubFetchCharLatency(posts, (i) => (i < 2 ? 3 : 30), 100);
|
|
150
|
+
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
151
|
+
const out = await embedBatch(Array.from({ length: 100 }, () => "y".repeat(200)));
|
|
152
|
+
expect(posts[0]).toHaveLength(1); // probe
|
|
153
|
+
expect(posts[1]).toHaveLength(32); // fast observation -> count ceiling
|
|
154
|
+
expect(posts[3].length).toBeLessThan(32); // shrinks after the slowdown
|
|
155
|
+
expect(posts[3].length).toBeGreaterThan(0);
|
|
156
|
+
expect(out).toHaveLength(100);
|
|
157
|
+
});
|
|
158
|
+
it("emits no malformed op=drift line for an empty batch", async () => {
|
|
159
|
+
const posts = [];
|
|
160
|
+
stubFetchRecordingPosts(posts);
|
|
161
|
+
const writes = [];
|
|
162
|
+
vi.spyOn(process.stderr, "write").mockImplementation((s) => {
|
|
163
|
+
writes.push(String(s));
|
|
164
|
+
return true;
|
|
165
|
+
});
|
|
166
|
+
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
167
|
+
await embedBatch([]);
|
|
168
|
+
expect(writes.some((w) => /op=drift/.test(w))).toBe(false);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
describe("embed drift reconciliation (op=drift)", () => {
|
|
172
|
+
beforeEach(() => {
|
|
173
|
+
vi.restoreAllMocks();
|
|
174
|
+
vi.resetModules();
|
|
175
|
+
process.env.EMBED_SUBBATCH_COOLDOWN_MS = "0";
|
|
176
|
+
});
|
|
177
|
+
afterEach(() => {
|
|
178
|
+
vi.useRealTimers();
|
|
179
|
+
delete process.env.EMBED_SUBBATCH_COOLDOWN_MS;
|
|
180
|
+
delete process.env.EMBED_MS_PER_INPUT;
|
|
181
|
+
delete process.env.EMBED_REQUEST_TIMEOUT_MS;
|
|
182
|
+
});
|
|
183
|
+
it("warns when a POST's observed per-input time drifts above the budget", async () => {
|
|
184
|
+
process.env.EMBED_MS_PER_INPUT = "5"; // budget baseline; 5 * 1.5 = 7.5 ms warn threshold
|
|
185
|
+
process.env.EMBED_REQUEST_TIMEOUT_MS = "120000";
|
|
186
|
+
vi.useFakeTimers();
|
|
187
|
+
vi.setSystemTime(0);
|
|
188
|
+
let clock = 0;
|
|
189
|
+
vi.stubGlobal("fetch", vi.fn(async () => {
|
|
190
|
+
clock += 200; // 200 ms for the single input -> far above budget
|
|
191
|
+
vi.setSystemTime(clock);
|
|
192
|
+
return { ok: true, json: async () => ({ embeddings: [[0]] }) };
|
|
193
|
+
}));
|
|
194
|
+
const writes = [];
|
|
195
|
+
vi.spyOn(process.stderr, "write").mockImplementation((s) => {
|
|
196
|
+
writes.push(String(s));
|
|
197
|
+
return true;
|
|
198
|
+
});
|
|
199
|
+
const { embed } = await import("../../lib/embeddings.js");
|
|
200
|
+
await embed("hello");
|
|
201
|
+
expect(writes.some((w) => /\[embed\] op=drift observedMsPerInput=200 budgetMsPerInput=5 ratio=40\.0/.test(w))).toBe(true);
|
|
202
|
+
});
|
|
203
|
+
it("stays silent when observed per-input time is within budget", async () => {
|
|
204
|
+
// default EMBED_MS_PER_INPUT = 6000; an instant POST is ~0 ms/input
|
|
205
|
+
vi.stubGlobal("fetch", vi.fn(async () => ({ ok: true, json: async () => ({ embeddings: [[0]] }) })));
|
|
206
|
+
const writes = [];
|
|
207
|
+
vi.spyOn(process.stderr, "write").mockImplementation((s) => {
|
|
208
|
+
writes.push(String(s));
|
|
209
|
+
return true;
|
|
210
|
+
});
|
|
211
|
+
const { embed } = await import("../../lib/embeddings.js");
|
|
212
|
+
await embed("hello");
|
|
213
|
+
expect(writes.some((w) => /op=drift/.test(w))).toBe(false);
|
|
47
214
|
});
|
|
48
215
|
});
|
|
49
216
|
describe("embed keep_alive + per-POST breadcrumb", () => {
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embed-throughput.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed-throughput.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-throughput.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embed-throughput.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-throughput.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,17 +3,15 @@ describe("embed request timeout + enriched errors", () => {
|
|
|
3
3
|
beforeEach(() => {
|
|
4
4
|
vi.restoreAllMocks();
|
|
5
5
|
process.env.EMBED_REQUEST_TIMEOUT_MS = "50";
|
|
6
|
-
// These tests assert enriched
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
process.env.EMBED_MS_PER_INPUT = "1";
|
|
6
|
+
// These tests assert the enriched error for the POST that failed. Adaptive
|
|
7
|
+
// sizing (Task 1553) makes the first POST of a multi-input batch a
|
|
8
|
+
// single-input probe, so the batch cases below put the largest input first
|
|
9
|
+
// and assert inputs=1 with that input's char count — proving the error
|
|
10
|
+
// reports the count and largest input of the actual POST array.
|
|
12
11
|
vi.resetModules();
|
|
13
12
|
});
|
|
14
13
|
afterEach(() => {
|
|
15
14
|
delete process.env.EMBED_REQUEST_TIMEOUT_MS;
|
|
16
|
-
delete process.env.EMBED_MS_PER_INPUT;
|
|
17
15
|
});
|
|
18
16
|
it("rejects promptly with an enriched timeout error, not a bare fetch failed", async () => {
|
|
19
17
|
// Honour the abort signal: never resolve, reject when the timeout fires.
|
|
@@ -31,7 +29,9 @@ describe("embed request timeout + enriched errors", () => {
|
|
|
31
29
|
init.signal.addEventListener("abort", () => rej(init.signal.reason ?? new Error("aborted")));
|
|
32
30
|
})));
|
|
33
31
|
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
34
|
-
|
|
32
|
+
// Largest input first: the size-1 probe carries "bbbb", so the timed-out
|
|
33
|
+
// POST reports inputs=1 and largestInputChars=4.
|
|
34
|
+
await expect(embedBatch(["bbbb", "a"])).rejects.toThrow(/timed out.*inputs=1.*largestInputChars=4/s);
|
|
35
35
|
});
|
|
36
36
|
it("names the underlying cause on a connection failure, not a bare fetch failed", async () => {
|
|
37
37
|
// Mirrors undici on a refused connection: TypeError("fetch failed", { cause }).
|
|
@@ -50,7 +50,9 @@ describe("embed request timeout + enriched errors", () => {
|
|
|
50
50
|
text: async () => '{"error":"the input length exceeds the context length"}',
|
|
51
51
|
})));
|
|
52
52
|
const { embedBatch } = await import("../../lib/embeddings.js");
|
|
53
|
-
|
|
53
|
+
// Largest input first: the size-1 probe carries "bbbb", so the HTTP error
|
|
54
|
+
// reports inputs=1 and largestInputChars=4.
|
|
55
|
+
await expect(embedBatch(["bbbb", "a"])).rejects.toThrow(/400.*inputs=1.*largestInputChars=4/s);
|
|
54
56
|
});
|
|
55
57
|
});
|
|
56
58
|
//# sourceMappingURL=embed-timeout.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed-timeout.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-timeout.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAC5C,
|
|
1
|
+
{"version":3,"file":"embed-timeout.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embed-timeout.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,29 +17,35 @@ describe("embed input capping", () => {
|
|
|
17
17
|
expect(sentInput.length).toBe(EMBED_INPUT_MAX_CHARS);
|
|
18
18
|
});
|
|
19
19
|
it("embedBatch caps each oversized element, leaves short ones intact", async () => {
|
|
20
|
-
|
|
20
|
+
// Adaptive sizing (Task 1553) may split a batch across POSTs (a size-1
|
|
21
|
+
// probe first), so collect every posted input and check capping applied to
|
|
22
|
+
// each element wherever it landed, preserving input order.
|
|
23
|
+
const posted = [];
|
|
21
24
|
vi.stubGlobal("fetch", vi.fn(async (_u, init) => {
|
|
22
|
-
|
|
25
|
+
const inp = JSON.parse(init.body).input;
|
|
26
|
+
posted.push(...inp);
|
|
23
27
|
return {
|
|
24
28
|
ok: true,
|
|
25
|
-
json: async () => ({ embeddings:
|
|
29
|
+
json: async () => ({ embeddings: inp.map(() => [0.1]) }),
|
|
26
30
|
};
|
|
27
31
|
}));
|
|
28
32
|
const { embedBatch, EMBED_INPUT_MAX_CHARS } = await import("../../lib/embeddings.js");
|
|
29
33
|
await embedBatch(["short", "y".repeat(50_000)]);
|
|
30
|
-
expect(
|
|
31
|
-
expect(
|
|
34
|
+
expect(posted[0]).toBe("short");
|
|
35
|
+
expect(posted[1].length).toBe(EMBED_INPUT_MAX_CHARS);
|
|
32
36
|
});
|
|
33
37
|
});
|
|
34
38
|
describe("token-safe cap default", () => {
|
|
35
39
|
beforeEach(() => vi.restoreAllMocks());
|
|
36
|
-
it("defaults to
|
|
40
|
+
it("defaults to 4000 chars, provably under a 2048-token context at 2 chars/token", async () => {
|
|
37
41
|
const { EMBED_INPUT_MAX_CHARS } = await import("../../lib/embeddings.js");
|
|
38
|
-
expect(EMBED_INPUT_MAX_CHARS).toBe(
|
|
39
|
-
//
|
|
40
|
-
|
|
42
|
+
expect(EMBED_INPUT_MAX_CHARS).toBe(4000);
|
|
43
|
+
// 4000 chars / 2 chars-per-token = 2000 tokens <= 2048 context. Dense
|
|
44
|
+
// markup/emoji content runs ~2 chars/token, so the earlier 3-char
|
|
45
|
+
// assumption (6000) could still overflow the real embed context and 400.
|
|
46
|
+
expect(EMBED_INPUT_MAX_CHARS / 2).toBeLessThanOrEqual(2048);
|
|
41
47
|
});
|
|
42
|
-
it("caps a dense 24k-char emoji/markup body to <=
|
|
48
|
+
it("caps a dense 24k-char emoji/markup body to <= 4000 chars before POST", async () => {
|
|
43
49
|
const dense = "🟢🟡🔴 ## Observatory\n".repeat(1400); // ~24k chars
|
|
44
50
|
let sent = "";
|
|
45
51
|
vi.stubGlobal("fetch", vi.fn(async (_u, init) => {
|
|
@@ -51,7 +57,7 @@ describe("token-safe cap default", () => {
|
|
|
51
57
|
}));
|
|
52
58
|
const { embed, EMBED_INPUT_MAX_CHARS } = await import("../../lib/embeddings.js");
|
|
53
59
|
await embed(dense);
|
|
54
|
-
expect(sent.length).toBeLessThanOrEqual(
|
|
60
|
+
expect(sent.length).toBeLessThanOrEqual(4000);
|
|
55
61
|
expect(sent.length).toBe(EMBED_INPUT_MAX_CHARS);
|
|
56
62
|
});
|
|
57
63
|
});
|
|
@@ -83,7 +89,7 @@ describe("multi-section document batch (exitchatcontrol regression)", () => {
|
|
|
83
89
|
// Every input actually POSTed was within the token-safe cap.
|
|
84
90
|
for (const batch of sentInputs) {
|
|
85
91
|
for (const s of batch)
|
|
86
|
-
expect(s.length).toBeLessThanOrEqual(
|
|
92
|
+
expect(s.length).toBeLessThanOrEqual(4000);
|
|
87
93
|
}
|
|
88
94
|
});
|
|
89
95
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings-cap.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embeddings-cap.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;IAEvC,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,SAAkB,CAAC;QACvB,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,IAAsB,EAAE,EAAE;YACnD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YACxC,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aAC1B,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,CAAE,SAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,
|
|
1
|
+
{"version":3,"file":"embeddings-cap.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/embeddings-cap.test.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-identity.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-identity.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/profile-identity.test.ts"],"names":[],"mappings":""}
|