@agimon-ai/doompi-cache 0.0.1-alpha.38 → 0.0.1-alpha.39
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/api-contracts.cjs +7 -1
- package/dist/api-contracts.d.cts +1 -1
- package/dist/api-contracts.d.mts +1 -1
- package/dist/api-contracts.mjs +2 -1
- package/dist/env.cjs +7 -1
- package/dist/env.d.cts +1 -1
- package/dist/env.d.mts +1 -1
- package/dist/env.mjs +2 -1
- package/dist/extensions/pi.cjs +458 -1
- package/dist/extensions/pi.cjs.map +1 -1
- package/dist/extensions/pi.d.cts +3 -4
- package/dist/extensions/pi.d.cts.map +1 -1
- package/dist/extensions/pi.d.mts +3 -4
- package/dist/extensions/pi.d.mts.map +1 -1
- package/dist/extensions/pi.mjs +453 -1
- package/dist/extensions/pi.mjs.map +1 -1
- package/dist/extensions/server.cjs +23 -1
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.d.cts +3 -3
- package/dist/extensions/server.d.cts.map +1 -1
- package/dist/extensions/server.d.mts +3 -3
- package/dist/extensions/server.d.mts.map +1 -1
- package/dist/extensions/server.mjs +18 -1
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/index.cjs +22 -1
- package/dist/index.d.cts +7 -7
- package/dist/index.d.mts +7 -7
- package/dist/index.mjs +7 -1
- package/dist/pi-cache-optimizer-D5NlAlHL.cjs +7915 -0
- package/dist/{pi-cache-optimizer-DwxMItZw.cjs.map → pi-cache-optimizer-D5NlAlHL.cjs.map} +1 -1
- package/dist/pi-cache-optimizer-D8Cz8JHJ.mjs +7914 -0
- package/dist/{pi-cache-optimizer-Bw8uQdb8.mjs.map → pi-cache-optimizer-D8Cz8JHJ.mjs.map} +1 -1
- package/dist/src/constants/environment.cjs +14 -0
- package/dist/src/constants/environment.cjs.map +1 -0
- package/dist/src/constants/environment.d.cts.map +1 -0
- package/dist/src/constants/environment.d.mts.map +1 -0
- package/dist/src/constants/environment.mjs +10 -0
- package/dist/src/constants/environment.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.cjs +47 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.mjs +47 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.cjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.mjs +8 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs +8 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs.map +1 -0
- package/dist/src/models/promptCacheTelemetry.cjs +45 -0
- package/dist/src/models/promptCacheTelemetry.cjs.map +1 -0
- package/dist/src/models/promptCacheTelemetry.d.cts.map +1 -0
- package/dist/src/models/promptCacheTelemetry.d.mts.map +1 -0
- package/dist/src/models/promptCacheTelemetry.mjs +45 -0
- package/dist/src/models/promptCacheTelemetry.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.cjs +13 -0
- package/dist/src/schemas/apiContracts.cjs.map +1 -0
- package/dist/{schemas → src/schemas}/apiContracts.d.cts.map +1 -1
- package/dist/{schemas → src/schemas}/apiContracts.d.mts.map +1 -1
- package/dist/src/schemas/apiContracts.mjs +13 -0
- package/dist/src/schemas/apiContracts.mjs.map +1 -0
- package/dist/src/services/canonical/index.cjs +28 -0
- package/dist/src/services/canonical/index.cjs.map +1 -0
- package/dist/src/services/canonical/index.d.cts.map +1 -0
- package/dist/src/services/canonical/index.d.mts.map +1 -0
- package/dist/src/services/canonical/index.mjs +27 -0
- package/dist/src/services/canonical/index.mjs.map +1 -0
- package/dist/src/services/digest/index.cjs +9 -0
- package/dist/src/services/digest/index.cjs.map +1 -0
- package/dist/{services → src/services}/digest/index.d.cts.map +1 -1
- package/dist/{services → src/services}/digest/index.d.mts.map +1 -1
- package/dist/src/services/digest/index.mjs +9 -0
- package/dist/src/services/digest/index.mjs.map +1 -0
- package/dist/src/services/namespace/index.cjs +78 -0
- package/dist/src/services/namespace/index.cjs.map +1 -0
- package/dist/src/services/namespace/index.d.cts.map +1 -0
- package/dist/src/services/namespace/index.d.mts.map +1 -0
- package/dist/src/services/namespace/index.mjs +74 -0
- package/dist/src/services/namespace/index.mjs.map +1 -0
- package/dist/src/services/promptCacheTelemetry/index.cjs +22 -0
- package/dist/src/services/promptCacheTelemetry/index.cjs.map +1 -0
- package/dist/src/services/promptCacheTelemetry/index.d.cts.map +1 -0
- package/dist/src/services/promptCacheTelemetry/index.d.mts.map +1 -0
- package/dist/src/services/promptCacheTelemetry/index.mjs +20 -0
- package/dist/src/services/promptCacheTelemetry/index.mjs.map +1 -0
- package/dist/src/services/providerPolicy/index.cjs +43 -0
- package/dist/src/services/providerPolicy/index.cjs.map +1 -0
- package/dist/src/services/providerPolicy/index.d.cts.map +1 -0
- package/dist/src/services/providerPolicy/index.d.mts.map +1 -0
- package/dist/src/services/providerPolicy/index.mjs +41 -0
- package/dist/src/services/providerPolicy/index.mjs.map +1 -0
- package/dist/src/types/cache.d.cts.map +1 -0
- package/dist/src/types/cache.d.mts.map +1 -0
- package/package.json +8 -7
- package/dist/constants/environment.cjs +0 -2
- package/dist/constants/environment.cjs.map +0 -1
- package/dist/constants/environment.d.cts.map +0 -1
- package/dist/constants/environment.d.mts.map +0 -1
- package/dist/constants/environment.mjs +0 -2
- package/dist/constants/environment.mjs.map +0 -1
- package/dist/controllers/cacheHooks.cjs +0 -2
- package/dist/controllers/cacheHooks.cjs.map +0 -1
- package/dist/controllers/cacheHooks.mjs +0 -2
- package/dist/controllers/cacheHooks.mjs.map +0 -1
- package/dist/models/promptCacheTelemetry.cjs +0 -2
- package/dist/models/promptCacheTelemetry.cjs.map +0 -1
- package/dist/models/promptCacheTelemetry.d.cts.map +0 -1
- package/dist/models/promptCacheTelemetry.d.mts.map +0 -1
- package/dist/models/promptCacheTelemetry.mjs +0 -2
- package/dist/models/promptCacheTelemetry.mjs.map +0 -1
- package/dist/pi-cache-optimizer-Bw8uQdb8.mjs +0 -65
- package/dist/pi-cache-optimizer-DwxMItZw.cjs +0 -65
- package/dist/schemas/apiContracts.cjs +0 -2
- package/dist/schemas/apiContracts.cjs.map +0 -1
- package/dist/schemas/apiContracts.mjs +0 -2
- package/dist/schemas/apiContracts.mjs.map +0 -1
- package/dist/services/canonical/index.cjs +0 -2
- package/dist/services/canonical/index.cjs.map +0 -1
- package/dist/services/canonical/index.d.cts.map +0 -1
- package/dist/services/canonical/index.d.mts.map +0 -1
- package/dist/services/canonical/index.mjs +0 -2
- package/dist/services/canonical/index.mjs.map +0 -1
- package/dist/services/digest/index.cjs +0 -2
- package/dist/services/digest/index.cjs.map +0 -1
- package/dist/services/digest/index.mjs +0 -2
- package/dist/services/digest/index.mjs.map +0 -1
- package/dist/services/namespace/index.cjs +0 -2
- package/dist/services/namespace/index.cjs.map +0 -1
- package/dist/services/namespace/index.d.cts.map +0 -1
- package/dist/services/namespace/index.d.mts.map +0 -1
- package/dist/services/namespace/index.mjs +0 -2
- package/dist/services/namespace/index.mjs.map +0 -1
- package/dist/services/promptCacheTelemetry/index.cjs +0 -2
- package/dist/services/promptCacheTelemetry/index.cjs.map +0 -1
- package/dist/services/promptCacheTelemetry/index.d.cts.map +0 -1
- package/dist/services/promptCacheTelemetry/index.d.mts.map +0 -1
- package/dist/services/promptCacheTelemetry/index.mjs +0 -2
- package/dist/services/promptCacheTelemetry/index.mjs.map +0 -1
- package/dist/services/providerPolicy/index.cjs +0 -2
- package/dist/services/providerPolicy/index.cjs.map +0 -1
- package/dist/services/providerPolicy/index.d.cts.map +0 -1
- package/dist/services/providerPolicy/index.d.mts.map +0 -1
- package/dist/services/providerPolicy/index.mjs +0 -2
- package/dist/services/providerPolicy/index.mjs.map +0 -1
- package/dist/types/cache.d.cts.map +0 -1
- package/dist/types/cache.d.mts.map +0 -1
- /package/dist/{constants → src/constants}/environment.d.cts +0 -0
- /package/dist/{constants → src/constants}/environment.d.mts +0 -0
- /package/dist/{models → src/models}/promptCacheTelemetry.d.cts +0 -0
- /package/dist/{models → src/models}/promptCacheTelemetry.d.mts +0 -0
- /package/dist/{schemas → src/schemas}/apiContracts.d.cts +0 -0
- /package/dist/{schemas → src/schemas}/apiContracts.d.mts +0 -0
- /package/dist/{services → src/services}/canonical/index.d.cts +0 -0
- /package/dist/{services → src/services}/canonical/index.d.mts +0 -0
- /package/dist/{services → src/services}/digest/index.d.cts +0 -0
- /package/dist/{services → src/services}/digest/index.d.mts +0 -0
- /package/dist/{services → src/services}/namespace/index.d.cts +0 -0
- /package/dist/{services → src/services}/namespace/index.d.mts +0 -0
- /package/dist/{services → src/services}/promptCacheTelemetry/index.d.cts +0 -0
- /package/dist/{services → src/services}/promptCacheTelemetry/index.d.mts +0 -0
- /package/dist/{services → src/services}/providerPolicy/index.d.cts +0 -0
- /package/dist/{services → src/services}/providerPolicy/index.d.mts +0 -0
- /package/dist/{types → src/types}/cache.d.cts +0 -0
- /package/dist/{types → src/types}/cache.d.mts +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/constants/environment.ts
|
|
2
|
+
const DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE_ENV = "DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE";
|
|
3
|
+
const DOOMPI_PROMPT_CACHE_ROOT_SESSION_ENV = "DOOMPI_PROMPT_CACHE_ROOT_SESSION";
|
|
4
|
+
const DOOMPI_PROMPT_CACHE_CHILD_PROJECTION_ENV = "DOOMPI_PROMPT_CACHE_CHILD_PROJECTION";
|
|
5
|
+
const PI_CACHE_RETENTION_ENV = "PI_CACHE_RETENTION";
|
|
6
|
+
const PI_CACHE_RETENTION_LONG = "long";
|
|
7
|
+
//#endregion
|
|
8
|
+
exports.DOOMPI_PROMPT_CACHE_CHILD_PROJECTION_ENV = DOOMPI_PROMPT_CACHE_CHILD_PROJECTION_ENV;
|
|
9
|
+
exports.DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE_ENV = DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE_ENV;
|
|
10
|
+
exports.DOOMPI_PROMPT_CACHE_ROOT_SESSION_ENV = DOOMPI_PROMPT_CACHE_ROOT_SESSION_ENV;
|
|
11
|
+
exports.PI_CACHE_RETENTION_ENV = PI_CACHE_RETENTION_ENV;
|
|
12
|
+
exports.PI_CACHE_RETENTION_LONG = PI_CACHE_RETENTION_LONG;
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=environment.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.cjs","names":[],"sources":["../../../src/constants/environment.ts"],"sourcesContent":["export const DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE_ENV = 'DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE';\nexport const DOOMPI_PROMPT_CACHE_ROOT_SESSION_ENV = 'DOOMPI_PROMPT_CACHE_ROOT_SESSION';\nexport const DOOMPI_PROMPT_CACHE_CHILD_PROJECTION_ENV = 'DOOMPI_PROMPT_CACHE_CHILD_PROJECTION';\nexport const PI_CACHE_RETENTION_ENV = 'PI_CACHE_RETENTION';\nexport const PI_CACHE_RETENTION_LONG = 'long';\n"],"mappings":";AAAA,MAAa,2CAA2C;AACxD,MAAa,uCAAuC;AACpD,MAAa,2CAA2C;AACxD,MAAa,yBAAyB;AACtC,MAAa,0BAA0B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.cts","names":[],"sources":["../../../src/constants/environment.ts"],"mappings":";qBAAa;qBACA;qBACA;qBACA;qBACA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.mts","names":[],"sources":["../../../src/constants/environment.ts"],"mappings":";qBAAa;qBACA;qBACA;qBACA;qBACA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/constants/environment.ts
|
|
2
|
+
const DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE_ENV = "DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE";
|
|
3
|
+
const DOOMPI_PROMPT_CACHE_ROOT_SESSION_ENV = "DOOMPI_PROMPT_CACHE_ROOT_SESSION";
|
|
4
|
+
const DOOMPI_PROMPT_CACHE_CHILD_PROJECTION_ENV = "DOOMPI_PROMPT_CACHE_CHILD_PROJECTION";
|
|
5
|
+
const PI_CACHE_RETENTION_ENV = "PI_CACHE_RETENTION";
|
|
6
|
+
const PI_CACHE_RETENTION_LONG = "long";
|
|
7
|
+
//#endregion
|
|
8
|
+
export { DOOMPI_PROMPT_CACHE_CHILD_PROJECTION_ENV, DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE_ENV, DOOMPI_PROMPT_CACHE_ROOT_SESSION_ENV, PI_CACHE_RETENTION_ENV, PI_CACHE_RETENTION_LONG };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=environment.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.mjs","names":[],"sources":["../../../src/constants/environment.ts"],"sourcesContent":["export const DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE_ENV = 'DOOMPI_PROMPT_CACHE_PARENT_NAMESPACE';\nexport const DOOMPI_PROMPT_CACHE_ROOT_SESSION_ENV = 'DOOMPI_PROMPT_CACHE_ROOT_SESSION';\nexport const DOOMPI_PROMPT_CACHE_CHILD_PROJECTION_ENV = 'DOOMPI_PROMPT_CACHE_CHILD_PROJECTION';\nexport const PI_CACHE_RETENTION_ENV = 'PI_CACHE_RETENTION';\nexport const PI_CACHE_RETENTION_LONG = 'long';\n"],"mappings":";AAAA,MAAa,2CAA2C;AACxD,MAAa,uCAAuC;AACpD,MAAa,2CAA2C;AACxD,MAAa,yBAAyB;AACtC,MAAa,0BAA0B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const require_index = require("../../../../../services/canonical/index.cjs");
|
|
2
|
+
const require_index$1 = require("../../../../../services/digest/index.cjs");
|
|
3
|
+
const require_index$2 = require("../../../../../services/namespace/index.cjs");
|
|
4
|
+
const require_index$3 = require("../../../../../services/providerPolicy/index.cjs");
|
|
5
|
+
//#region src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.ts
|
|
6
|
+
function record(value) {
|
|
7
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
|
|
8
|
+
}
|
|
9
|
+
function modelIdentity(model, payload) {
|
|
10
|
+
const request = record(payload);
|
|
11
|
+
return {
|
|
12
|
+
virtualProvider: model?.provider,
|
|
13
|
+
virtualModel: model?.id,
|
|
14
|
+
api: typeof request.api === "string" ? request.api : void 0,
|
|
15
|
+
wireModel: typeof request.model === "string" ? request.model : void 0
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function cacheNamespace(context) {
|
|
19
|
+
return `dph_${require_index$1.sha256Base64Url(require_index.canonicalJson({
|
|
20
|
+
version: 1,
|
|
21
|
+
session: context.sessionId,
|
|
22
|
+
selection: context.selection
|
|
23
|
+
}))}`;
|
|
24
|
+
}
|
|
25
|
+
const cacheHooks = [{
|
|
26
|
+
event: "before_provider_request",
|
|
27
|
+
handle(event, execution) {
|
|
28
|
+
const payload = record(event.payload);
|
|
29
|
+
const identity = modelIdentity(execution.model, payload);
|
|
30
|
+
const modelFingerprint = require_index$2.createPromptCacheModelFingerprint(identity, require_index$1.sha256Base64Url);
|
|
31
|
+
const key = require_index$2.createPromptCacheKey(cacheNamespace({
|
|
32
|
+
sessionId: execution.sessionId,
|
|
33
|
+
selection: execution.selection
|
|
34
|
+
}), "parent", modelFingerprint, require_index$1.sha256Base64Url);
|
|
35
|
+
const rewritten = require_index$3.rewritePromptCacheKey(payload, identity.api, key, true);
|
|
36
|
+
return rewritten === void 0 ? void 0 : { payload: rewritten };
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
event: "session_shutdown",
|
|
40
|
+
handle(_event, execution) {
|
|
41
|
+
execution.client.setStatus("doom-cache", void 0);
|
|
42
|
+
}
|
|
43
|
+
}];
|
|
44
|
+
//#endregion
|
|
45
|
+
exports.cacheHooks = cacheHooks;
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=cacheHooks.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheHooks.cjs","names":["sha256Base64Url","canonicalJson","createPromptCacheModelFingerprint","createPromptCacheKey","rewritePromptCacheKey"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.ts"],"sourcesContent":["import { type DoomHeadlessHook } from '@agimon-ai/doompi-core/headless';\n\nimport { canonicalJson } from '../../../../../services/canonical';\nimport { sha256Base64Url } from '../../../../../services/digest';\nimport { createPromptCacheKey, createPromptCacheModelFingerprint } from '../../../../../services/namespace';\nimport { rewritePromptCacheKey } from '../../../../../services/providerPolicy';\nimport type { PromptCacheModelIdentity } from '../../../../../types/cache';\n\nfunction record(value: unknown): Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Readonly<Record<string, unknown>>)\n : {};\n}\n\nfunction modelIdentity(\n model: { provider: string; id: string } | undefined,\n payload: unknown,\n): PromptCacheModelIdentity {\n const request = record(payload);\n return {\n virtualProvider: model?.provider,\n virtualModel: model?.id,\n api: typeof request.api === 'string' ? request.api : undefined,\n wireModel: typeof request.model === 'string' ? request.model : undefined,\n };\n}\n\nfunction cacheNamespace(context: { sessionId: string; selection: Record<string, unknown> }): string {\n return `dph_${sha256Base64Url(canonicalJson({ version: 1, session: context.sessionId, selection: context.selection }))}`;\n}\n\nexport const cacheHooks: DoomHeadlessHook[] = [\n {\n event: 'before_provider_request',\n handle(event, execution) {\n const payload = record(event.payload);\n const identity = modelIdentity(execution.model, payload);\n const modelFingerprint = createPromptCacheModelFingerprint(identity, sha256Base64Url);\n const key = createPromptCacheKey(\n cacheNamespace({\n sessionId: execution.sessionId,\n selection: execution.selection as unknown as Record<string, unknown>,\n }),\n 'parent',\n modelFingerprint,\n sha256Base64Url,\n );\n const rewritten = rewritePromptCacheKey(payload, identity.api, key, true);\n return rewritten === undefined ? undefined : { payload: rewritten };\n },\n },\n {\n event: 'session_shutdown',\n handle(_event, execution) {\n execution.client.setStatus('doom-cache', undefined);\n },\n },\n];\n"],"mappings":";;;;;AAQA,SAAS,OAAO,OAAmD;CACjE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD,CAAC;AACP;AAEA,SAAS,cACP,OACA,SAC0B;CAC1B,MAAM,UAAU,OAAO,OAAO;CAC9B,OAAO;EACL,iBAAiB,OAAO;EACxB,cAAc,OAAO;EACrB,KAAK,OAAO,QAAQ,QAAQ,WAAW,QAAQ,MAAM,KAAA;EACrD,WAAW,OAAO,QAAQ,UAAU,WAAW,QAAQ,QAAQ,KAAA;CACjE;AACF;AAEA,SAAS,eAAe,SAA4E;CAClG,OAAO,OAAOA,gBAAAA,gBAAgBC,cAAAA,cAAc;EAAE,SAAS;EAAG,SAAS,QAAQ;EAAW,WAAW,QAAQ;CAAU,CAAC,CAAC;AACvH;AAEA,MAAa,aAAiC,CAC5C;CACE,OAAO;CACP,OAAO,OAAO,WAAW;EACvB,MAAM,UAAU,OAAO,MAAM,OAAO;EACpC,MAAM,WAAW,cAAc,UAAU,OAAO,OAAO;EACvD,MAAM,mBAAmBC,gBAAAA,kCAAkC,UAAUF,gBAAAA,eAAe;EACpF,MAAM,MAAMG,gBAAAA,qBACV,eAAe;GACb,WAAW,UAAU;GACrB,WAAW,UAAU;EACvB,CAAC,GACD,UACA,kBACAH,gBAAAA,eACF;EACA,MAAM,YAAYI,gBAAAA,sBAAsB,SAAS,SAAS,KAAK,KAAK,IAAI;EACxE,OAAO,cAAc,KAAA,IAAY,KAAA,IAAY,EAAE,SAAS,UAAU;CACpE;AACF,GACA;CACE,OAAO;CACP,OAAO,QAAQ,WAAW;EACxB,UAAU,OAAO,UAAU,cAAc,KAAA,CAAS;CACpD;AACF,CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { canonicalJson } from "../../../../../services/canonical/index.mjs";
|
|
2
|
+
import { sha256Base64Url } from "../../../../../services/digest/index.mjs";
|
|
3
|
+
import { createPromptCacheKey, createPromptCacheModelFingerprint } from "../../../../../services/namespace/index.mjs";
|
|
4
|
+
import { rewritePromptCacheKey } from "../../../../../services/providerPolicy/index.mjs";
|
|
5
|
+
//#region src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.ts
|
|
6
|
+
function record(value) {
|
|
7
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
|
|
8
|
+
}
|
|
9
|
+
function modelIdentity(model, payload) {
|
|
10
|
+
const request = record(payload);
|
|
11
|
+
return {
|
|
12
|
+
virtualProvider: model?.provider,
|
|
13
|
+
virtualModel: model?.id,
|
|
14
|
+
api: typeof request.api === "string" ? request.api : void 0,
|
|
15
|
+
wireModel: typeof request.model === "string" ? request.model : void 0
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function cacheNamespace(context) {
|
|
19
|
+
return `dph_${sha256Base64Url(canonicalJson({
|
|
20
|
+
version: 1,
|
|
21
|
+
session: context.sessionId,
|
|
22
|
+
selection: context.selection
|
|
23
|
+
}))}`;
|
|
24
|
+
}
|
|
25
|
+
const cacheHooks = [{
|
|
26
|
+
event: "before_provider_request",
|
|
27
|
+
handle(event, execution) {
|
|
28
|
+
const payload = record(event.payload);
|
|
29
|
+
const identity = modelIdentity(execution.model, payload);
|
|
30
|
+
const modelFingerprint = createPromptCacheModelFingerprint(identity, sha256Base64Url);
|
|
31
|
+
const key = createPromptCacheKey(cacheNamespace({
|
|
32
|
+
sessionId: execution.sessionId,
|
|
33
|
+
selection: execution.selection
|
|
34
|
+
}), "parent", modelFingerprint, sha256Base64Url);
|
|
35
|
+
const rewritten = rewritePromptCacheKey(payload, identity.api, key, true);
|
|
36
|
+
return rewritten === void 0 ? void 0 : { payload: rewritten };
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
event: "session_shutdown",
|
|
40
|
+
handle(_event, execution) {
|
|
41
|
+
execution.client.setStatus("doom-cache", void 0);
|
|
42
|
+
}
|
|
43
|
+
}];
|
|
44
|
+
//#endregion
|
|
45
|
+
export { cacheHooks };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=cacheHooks.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheHooks.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/cacheHooks.ts"],"sourcesContent":["import { type DoomHeadlessHook } from '@agimon-ai/doompi-core/headless';\n\nimport { canonicalJson } from '../../../../../services/canonical';\nimport { sha256Base64Url } from '../../../../../services/digest';\nimport { createPromptCacheKey, createPromptCacheModelFingerprint } from '../../../../../services/namespace';\nimport { rewritePromptCacheKey } from '../../../../../services/providerPolicy';\nimport type { PromptCacheModelIdentity } from '../../../../../types/cache';\n\nfunction record(value: unknown): Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Readonly<Record<string, unknown>>)\n : {};\n}\n\nfunction modelIdentity(\n model: { provider: string; id: string } | undefined,\n payload: unknown,\n): PromptCacheModelIdentity {\n const request = record(payload);\n return {\n virtualProvider: model?.provider,\n virtualModel: model?.id,\n api: typeof request.api === 'string' ? request.api : undefined,\n wireModel: typeof request.model === 'string' ? request.model : undefined,\n };\n}\n\nfunction cacheNamespace(context: { sessionId: string; selection: Record<string, unknown> }): string {\n return `dph_${sha256Base64Url(canonicalJson({ version: 1, session: context.sessionId, selection: context.selection }))}`;\n}\n\nexport const cacheHooks: DoomHeadlessHook[] = [\n {\n event: 'before_provider_request',\n handle(event, execution) {\n const payload = record(event.payload);\n const identity = modelIdentity(execution.model, payload);\n const modelFingerprint = createPromptCacheModelFingerprint(identity, sha256Base64Url);\n const key = createPromptCacheKey(\n cacheNamespace({\n sessionId: execution.sessionId,\n selection: execution.selection as unknown as Record<string, unknown>,\n }),\n 'parent',\n modelFingerprint,\n sha256Base64Url,\n );\n const rewritten = rewritePromptCacheKey(payload, identity.api, key, true);\n return rewritten === undefined ? undefined : { payload: rewritten };\n },\n },\n {\n event: 'session_shutdown',\n handle(_event, execution) {\n execution.client.setStatus('doom-cache', undefined);\n },\n },\n];\n"],"mappings":";;;;;AAQA,SAAS,OAAO,OAAmD;CACjE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD,CAAC;AACP;AAEA,SAAS,cACP,OACA,SAC0B;CAC1B,MAAM,UAAU,OAAO,OAAO;CAC9B,OAAO;EACL,iBAAiB,OAAO;EACxB,cAAc,OAAO;EACrB,KAAK,OAAO,QAAQ,QAAQ,WAAW,QAAQ,MAAM,KAAA;EACrD,WAAW,OAAO,QAAQ,UAAU,WAAW,QAAQ,QAAQ,KAAA;CACjE;AACF;AAEA,SAAS,eAAe,SAA4E;CAClG,OAAO,OAAO,gBAAgB,cAAc;EAAE,SAAS;EAAG,SAAS,QAAQ;EAAW,WAAW,QAAQ;CAAU,CAAC,CAAC;AACvH;AAEA,MAAa,aAAiC,CAC5C;CACE,OAAO;CACP,OAAO,OAAO,WAAW;EACvB,MAAM,UAAU,OAAO,MAAM,OAAO;EACpC,MAAM,WAAW,cAAc,UAAU,OAAO,OAAO;EACvD,MAAM,mBAAmB,kCAAkC,UAAU,eAAe;EACpF,MAAM,MAAM,qBACV,eAAe;GACb,WAAW,UAAU;GACrB,WAAW,UAAU;EACvB,CAAC,GACD,UACA,kBACA,eACF;EACA,MAAM,YAAY,sBAAsB,SAAS,SAAS,KAAK,KAAK,IAAI;EACxE,OAAO,cAAc,KAAA,IAAY,KAAA,IAAY,EAAE,SAAS,UAAU;CACpE;AACF,GACA;CACE,OAAO;CACP,OAAO,QAAQ,WAAW;EACxB,UAAU,OAAO,UAAU,cAAc,KAAA,CAAS;CACpD;AACF,CACF"}
|
package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.cjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_cacheHooks = require("../_lib/cacheHooks.cjs");
|
|
2
|
+
//#region src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.ts
|
|
3
|
+
var before_provider_request_server_default = (0, require("@agimon-ai/doompi-core/extension-file").defineHook)(require_cacheHooks.cacheHooks.find((hook) => hook.event === "before_provider_request"));
|
|
4
|
+
//#endregion
|
|
5
|
+
exports.default = before_provider_request_server_default;
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=before-provider-request.server.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"before-provider-request.server.cjs","names":["defineHook","cacheHooks"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.ts"],"sourcesContent":["import { defineHook } from '@agimon-ai/doompi-core/extension-file';\n\nimport { cacheHooks } from '../_lib/cacheHooks';\nexport default defineHook(cacheHooks.find((hook) => hook.event === 'before_provider_request')!);\n"],"mappings":";;AAGA,IAAA,0CAAA,kDAAeA,CAAAA,CAAAA,WAAAA,CAAWC,mBAAAA,WAAW,MAAM,SAAS,KAAK,UAAU,yBAAyB,CAAE"}
|
package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.mjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { cacheHooks } from "../_lib/cacheHooks.mjs";
|
|
2
|
+
import { defineHook } from "@agimon-ai/doompi-core/extension-file";
|
|
3
|
+
//#region src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.ts
|
|
4
|
+
var before_provider_request_server_default = defineHook(cacheHooks.find((hook) => hook.event === "before_provider_request"));
|
|
5
|
+
//#endregion
|
|
6
|
+
export { before_provider_request_server_default as default };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=before-provider-request.server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"before-provider-request.server.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/hook/before-provider-request.server.ts"],"sourcesContent":["import { defineHook } from '@agimon-ai/doompi-core/extension-file';\n\nimport { cacheHooks } from '../_lib/cacheHooks';\nexport default defineHook(cacheHooks.find((hook) => hook.event === 'before_provider_request')!);\n"],"mappings":";;;AAGA,IAAA,yCAAe,WAAW,WAAW,MAAM,SAAS,KAAK,UAAU,yBAAyB,CAAE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_cacheHooks = require("../_lib/cacheHooks.cjs");
|
|
2
|
+
//#region src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.ts
|
|
3
|
+
var session_shutdown_server_default = (0, require("@agimon-ai/doompi-core/extension-file").defineHook)(require_cacheHooks.cacheHooks.find((hook) => hook.event === "session_shutdown"));
|
|
4
|
+
//#endregion
|
|
5
|
+
exports.default = session_shutdown_server_default;
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=session-shutdown.server.cjs.map
|
package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-shutdown.server.cjs","names":["defineHook","cacheHooks"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.ts"],"sourcesContent":["import { defineHook } from '@agimon-ai/doompi-core/extension-file';\n\nimport { cacheHooks } from '../_lib/cacheHooks';\nexport default defineHook(cacheHooks.find((hook) => hook.event === 'session_shutdown')!);\n"],"mappings":";;AAGA,IAAA,mCAAA,kDAAeA,CAAAA,CAAAA,WAAAA,CAAWC,mBAAAA,WAAW,MAAM,SAAS,KAAK,UAAU,kBAAkB,CAAE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { cacheHooks } from "../_lib/cacheHooks.mjs";
|
|
2
|
+
import { defineHook } from "@agimon-ai/doompi-core/extension-file";
|
|
3
|
+
//#region src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.ts
|
|
4
|
+
var session_shutdown_server_default = defineHook(cacheHooks.find((hook) => hook.event === "session_shutdown"));
|
|
5
|
+
//#endregion
|
|
6
|
+
export { session_shutdown_server_default as default };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=session-shutdown.server.mjs.map
|
package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-shutdown.server.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.ts"],"sourcesContent":["import { defineHook } from '@agimon-ai/doompi-core/extension-file';\n\nimport { cacheHooks } from '../_lib/cacheHooks';\nexport default defineHook(cacheHooks.find((hook) => hook.event === 'session_shutdown')!);\n"],"mappings":";;;AAGA,IAAA,kCAAe,WAAW,WAAW,MAAM,SAAS,KAAK,UAAU,kBAAkB,CAAE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/models/promptCacheTelemetry.ts
|
|
2
|
+
const DEFAULT_OBSERVATION_LIMIT = 64;
|
|
3
|
+
var PromptCacheTelemetry = class {
|
|
4
|
+
#limit;
|
|
5
|
+
#request = { capability: "unknown" };
|
|
6
|
+
#observations = [];
|
|
7
|
+
constructor(limit = DEFAULT_OBSERVATION_LIMIT) {
|
|
8
|
+
if (!Number.isInteger(limit) || limit < 1) throw new Error("Prompt cache telemetry limit must be a positive integer.");
|
|
9
|
+
this.#limit = limit;
|
|
10
|
+
}
|
|
11
|
+
beginRequest(status) {
|
|
12
|
+
this.#request = { ...status };
|
|
13
|
+
}
|
|
14
|
+
observe(usage, observedAt) {
|
|
15
|
+
const namespace = this.#request.namespace;
|
|
16
|
+
const modelFingerprint = this.#request.modelFingerprint;
|
|
17
|
+
if (!namespace || !modelFingerprint) return;
|
|
18
|
+
this.#observations.push({
|
|
19
|
+
namespace,
|
|
20
|
+
modelFingerprint,
|
|
21
|
+
cacheRead: usage.cacheRead,
|
|
22
|
+
cacheWrite: usage.cacheWrite,
|
|
23
|
+
totalInput: usage.totalInput,
|
|
24
|
+
observedAt
|
|
25
|
+
});
|
|
26
|
+
if (this.#observations.length > this.#limit) this.#observations.splice(0, this.#observations.length - this.#limit);
|
|
27
|
+
}
|
|
28
|
+
snapshot() {
|
|
29
|
+
const observations = [...this.#observations];
|
|
30
|
+
return {
|
|
31
|
+
...this.#request,
|
|
32
|
+
residency: "unknown",
|
|
33
|
+
observations,
|
|
34
|
+
...observations.length > 0 ? { lastObservation: observations.at(-1) } : {}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
reset() {
|
|
38
|
+
this.#request = { capability: "unknown" };
|
|
39
|
+
this.#observations = [];
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
exports.PromptCacheTelemetry = PromptCacheTelemetry;
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=promptCacheTelemetry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptCacheTelemetry.cjs","names":[],"sources":["../../../src/models/promptCacheTelemetry.ts"],"sourcesContent":["import type {\n PromptCacheObservation,\n PromptCacheRequestStatus,\n PromptCacheTelemetryPort,\n PromptCacheTelemetrySnapshot,\n PromptCacheUsage,\n} from '../types/cache';\n\nconst DEFAULT_OBSERVATION_LIMIT = 64;\n\nexport class PromptCacheTelemetry implements PromptCacheTelemetryPort {\n readonly #limit: number;\n #request: PromptCacheRequestStatus = { capability: 'unknown' };\n #observations: PromptCacheObservation[] = [];\n\n constructor(limit: number = DEFAULT_OBSERVATION_LIMIT) {\n if (!Number.isInteger(limit) || limit < 1)\n throw new Error('Prompt cache telemetry limit must be a positive integer.');\n this.#limit = limit;\n }\n\n beginRequest(status: PromptCacheRequestStatus): void {\n this.#request = { ...status };\n }\n\n observe(usage: PromptCacheUsage, observedAt: number): void {\n const namespace = this.#request.namespace;\n const modelFingerprint = this.#request.modelFingerprint;\n if (!namespace || !modelFingerprint) return;\n\n this.#observations.push({\n namespace,\n modelFingerprint,\n cacheRead: usage.cacheRead,\n cacheWrite: usage.cacheWrite,\n totalInput: usage.totalInput,\n observedAt,\n });\n if (this.#observations.length > this.#limit) {\n this.#observations.splice(0, this.#observations.length - this.#limit);\n }\n }\n\n snapshot(): PromptCacheTelemetrySnapshot {\n const observations = [...this.#observations];\n return {\n ...this.#request,\n residency: 'unknown',\n observations,\n ...(observations.length > 0 ? { lastObservation: observations.at(-1) } : {}),\n };\n }\n\n reset(): void {\n this.#request = { capability: 'unknown' };\n this.#observations = [];\n }\n}\n"],"mappings":";AAQA,MAAM,4BAA4B;AAElC,IAAa,uBAAb,MAAsE;CACpE;CACA,WAAqC,EAAE,YAAY,UAAU;CAC7D,gBAA0C,CAAC;CAE3C,YAAY,QAAgB,2BAA2B;EACrD,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GACtC,MAAM,IAAI,MAAM,0DAA0D;EAC5E,KAAK,SAAS;CAChB;CAEA,aAAa,QAAwC;EACnD,KAAK,WAAW,EAAE,GAAG,OAAO;CAC9B;CAEA,QAAQ,OAAyB,YAA0B;EACzD,MAAM,YAAY,KAAK,SAAS;EAChC,MAAM,mBAAmB,KAAK,SAAS;EACvC,IAAI,CAAC,aAAa,CAAC,kBAAkB;EAErC,KAAK,cAAc,KAAK;GACtB;GACA;GACA,WAAW,MAAM;GACjB,YAAY,MAAM;GAClB,YAAY,MAAM;GAClB;EACF,CAAC;EACD,IAAI,KAAK,cAAc,SAAS,KAAK,QACnC,KAAK,cAAc,OAAO,GAAG,KAAK,cAAc,SAAS,KAAK,MAAM;CAExE;CAEA,WAAyC;EACvC,MAAM,eAAe,CAAC,GAAG,KAAK,aAAa;EAC3C,OAAO;GACL,GAAG,KAAK;GACR,WAAW;GACX;GACA,GAAI,aAAa,SAAS,IAAI,EAAE,iBAAiB,aAAa,GAAG,EAAE,EAAE,IAAI,CAAC;EAC5E;CACF;CAEA,QAAc;EACZ,KAAK,WAAW,EAAE,YAAY,UAAU;EACxC,KAAK,gBAAgB,CAAC;CACxB;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptCacheTelemetry.d.cts","names":[],"sources":["../../../src/models/promptCacheTelemetry.ts"],"mappings":";;qBAUa,gCAAgC;;EAK3C,YAAY;EAMZ,aAAa,QAAQ;EAIrB,QAAQ,OAAO,kBAAkB;EAkBjC,YAAY;EAUZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptCacheTelemetry.d.mts","names":[],"sources":["../../../src/models/promptCacheTelemetry.ts"],"mappings":";;qBAUa,gCAAgC;;EAK3C,YAAY;EAMZ,aAAa,QAAQ;EAIrB,QAAQ,OAAO,kBAAkB;EAkBjC,YAAY;EAUZ"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/models/promptCacheTelemetry.ts
|
|
2
|
+
const DEFAULT_OBSERVATION_LIMIT = 64;
|
|
3
|
+
var PromptCacheTelemetry = class {
|
|
4
|
+
#limit;
|
|
5
|
+
#request = { capability: "unknown" };
|
|
6
|
+
#observations = [];
|
|
7
|
+
constructor(limit = DEFAULT_OBSERVATION_LIMIT) {
|
|
8
|
+
if (!Number.isInteger(limit) || limit < 1) throw new Error("Prompt cache telemetry limit must be a positive integer.");
|
|
9
|
+
this.#limit = limit;
|
|
10
|
+
}
|
|
11
|
+
beginRequest(status) {
|
|
12
|
+
this.#request = { ...status };
|
|
13
|
+
}
|
|
14
|
+
observe(usage, observedAt) {
|
|
15
|
+
const namespace = this.#request.namespace;
|
|
16
|
+
const modelFingerprint = this.#request.modelFingerprint;
|
|
17
|
+
if (!namespace || !modelFingerprint) return;
|
|
18
|
+
this.#observations.push({
|
|
19
|
+
namespace,
|
|
20
|
+
modelFingerprint,
|
|
21
|
+
cacheRead: usage.cacheRead,
|
|
22
|
+
cacheWrite: usage.cacheWrite,
|
|
23
|
+
totalInput: usage.totalInput,
|
|
24
|
+
observedAt
|
|
25
|
+
});
|
|
26
|
+
if (this.#observations.length > this.#limit) this.#observations.splice(0, this.#observations.length - this.#limit);
|
|
27
|
+
}
|
|
28
|
+
snapshot() {
|
|
29
|
+
const observations = [...this.#observations];
|
|
30
|
+
return {
|
|
31
|
+
...this.#request,
|
|
32
|
+
residency: "unknown",
|
|
33
|
+
observations,
|
|
34
|
+
...observations.length > 0 ? { lastObservation: observations.at(-1) } : {}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
reset() {
|
|
38
|
+
this.#request = { capability: "unknown" };
|
|
39
|
+
this.#observations = [];
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { PromptCacheTelemetry };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=promptCacheTelemetry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptCacheTelemetry.mjs","names":[],"sources":["../../../src/models/promptCacheTelemetry.ts"],"sourcesContent":["import type {\n PromptCacheObservation,\n PromptCacheRequestStatus,\n PromptCacheTelemetryPort,\n PromptCacheTelemetrySnapshot,\n PromptCacheUsage,\n} from '../types/cache';\n\nconst DEFAULT_OBSERVATION_LIMIT = 64;\n\nexport class PromptCacheTelemetry implements PromptCacheTelemetryPort {\n readonly #limit: number;\n #request: PromptCacheRequestStatus = { capability: 'unknown' };\n #observations: PromptCacheObservation[] = [];\n\n constructor(limit: number = DEFAULT_OBSERVATION_LIMIT) {\n if (!Number.isInteger(limit) || limit < 1)\n throw new Error('Prompt cache telemetry limit must be a positive integer.');\n this.#limit = limit;\n }\n\n beginRequest(status: PromptCacheRequestStatus): void {\n this.#request = { ...status };\n }\n\n observe(usage: PromptCacheUsage, observedAt: number): void {\n const namespace = this.#request.namespace;\n const modelFingerprint = this.#request.modelFingerprint;\n if (!namespace || !modelFingerprint) return;\n\n this.#observations.push({\n namespace,\n modelFingerprint,\n cacheRead: usage.cacheRead,\n cacheWrite: usage.cacheWrite,\n totalInput: usage.totalInput,\n observedAt,\n });\n if (this.#observations.length > this.#limit) {\n this.#observations.splice(0, this.#observations.length - this.#limit);\n }\n }\n\n snapshot(): PromptCacheTelemetrySnapshot {\n const observations = [...this.#observations];\n return {\n ...this.#request,\n residency: 'unknown',\n observations,\n ...(observations.length > 0 ? { lastObservation: observations.at(-1) } : {}),\n };\n }\n\n reset(): void {\n this.#request = { capability: 'unknown' };\n this.#observations = [];\n }\n}\n"],"mappings":";AAQA,MAAM,4BAA4B;AAElC,IAAa,uBAAb,MAAsE;CACpE;CACA,WAAqC,EAAE,YAAY,UAAU;CAC7D,gBAA0C,CAAC;CAE3C,YAAY,QAAgB,2BAA2B;EACrD,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GACtC,MAAM,IAAI,MAAM,0DAA0D;EAC5E,KAAK,SAAS;CAChB;CAEA,aAAa,QAAwC;EACnD,KAAK,WAAW,EAAE,GAAG,OAAO;CAC9B;CAEA,QAAQ,OAAyB,YAA0B;EACzD,MAAM,YAAY,KAAK,SAAS;EAChC,MAAM,mBAAmB,KAAK,SAAS;EACvC,IAAI,CAAC,aAAa,CAAC,kBAAkB;EAErC,KAAK,cAAc,KAAK;GACtB;GACA;GACA,WAAW,MAAM;GACjB,YAAY,MAAM;GAClB,YAAY,MAAM;GAClB;EACF,CAAC;EACD,IAAI,KAAK,cAAc,SAAS,KAAK,QACnC,KAAK,cAAc,OAAO,GAAG,KAAK,cAAc,SAAS,KAAK,MAAM;CAExE;CAEA,WAAyC;EACvC,MAAM,eAAe,CAAC,GAAG,KAAK,aAAa;EAC3C,OAAO;GACL,GAAG,KAAK;GACR,WAAW;GACX;GACA,GAAI,aAAa,SAAS,IAAI,EAAE,iBAAiB,aAAa,GAAG,EAAE,EAAE,IAAI,CAAC;EAC5E;CACF;CAEA,QAAc;EACZ,KAAK,WAAW,EAAE,YAAY,UAAU;EACxC,KAAK,gBAAgB,CAAC;CACxB;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/schemas/apiContracts.ts
|
|
2
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
3
|
+
const apiContracts = (0, require("@agimon-ai/doompi-core/api-contracts").defineApiContract)({
|
|
4
|
+
version: 1,
|
|
5
|
+
http: [],
|
|
6
|
+
sockets: [],
|
|
7
|
+
dynamic: []
|
|
8
|
+
});
|
|
9
|
+
//#endregion
|
|
10
|
+
exports.apiContracts = apiContracts;
|
|
11
|
+
exports.default = apiContracts;
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=apiContracts.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.cjs","names":["defineApiContract"],"sources":["../../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/api-contracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;AAGA,MAAa,gBAAA,iDAAeA,CAAAA,CAAAA,kBAAAA,CAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.d.cts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"apiContracts.d.cts","names":[],"sources":["../../../src/schemas/apiContracts.ts"],"mappings":";;qBAGa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../../src/schemas/apiContracts.ts"],"mappings":";;qBAGa"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineApiContract } from "@agimon-ai/doompi-core/api-contracts";
|
|
2
|
+
//#region src/schemas/apiContracts.ts
|
|
3
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
4
|
+
const apiContracts = defineApiContract({
|
|
5
|
+
version: 1,
|
|
6
|
+
http: [],
|
|
7
|
+
sockets: [],
|
|
8
|
+
dynamic: []
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { apiContracts, apiContracts as default };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=apiContracts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/api-contracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;;AAGA,MAAa,eAAe,kBAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/services/canonical/index.ts
|
|
2
|
+
function canonicalNumber(value) {
|
|
3
|
+
if (!Number.isFinite(value)) throw new Error("Prompt cache identity cannot contain a non-finite number.");
|
|
4
|
+
return Object.is(value, -0) ? 0 : value;
|
|
5
|
+
}
|
|
6
|
+
function canonicalValue(value) {
|
|
7
|
+
if (value === null) return null;
|
|
8
|
+
if (typeof value === "string") return value.normalize("NFC");
|
|
9
|
+
if (typeof value === "boolean") return value;
|
|
10
|
+
if (typeof value === "number") return canonicalNumber(value);
|
|
11
|
+
if (Array.isArray(value)) return value.map((entry) => canonicalValue(entry));
|
|
12
|
+
if (typeof value !== "object") throw new Error(`Unsupported prompt cache identity value: ${typeof value}.`);
|
|
13
|
+
const record = value;
|
|
14
|
+
const result = {};
|
|
15
|
+
for (const key of Object.keys(record).sort((left, right) => left.localeCompare(right))) {
|
|
16
|
+
const entry = record[key];
|
|
17
|
+
if (entry !== void 0) result[key.normalize("NFC")] = canonicalValue(entry);
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
function canonicalJson(value) {
|
|
22
|
+
return JSON.stringify(canonicalValue(value));
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
exports.canonicalJson = canonicalJson;
|
|
26
|
+
exports.canonicalValue = canonicalValue;
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/canonical/index.ts"],"sourcesContent":["export type CanonicalValue = null | boolean | number | string | readonly CanonicalValue[] | CanonicalObject;\n\nexport interface CanonicalObject {\n readonly [key: string]: CanonicalValue;\n}\n\nfunction canonicalNumber(value: number): number {\n if (!Number.isFinite(value)) throw new Error('Prompt cache identity cannot contain a non-finite number.');\n return Object.is(value, -0) ? 0 : value;\n}\n\nexport function canonicalValue(value: unknown): CanonicalValue {\n if (value === null) return null;\n if (typeof value === 'string') return value.normalize('NFC');\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return canonicalNumber(value);\n if (Array.isArray(value)) return value.map((entry) => canonicalValue(entry));\n if (typeof value !== 'object') throw new Error(`Unsupported prompt cache identity value: ${typeof value}.`);\n\n const record = value as Readonly<Record<string, unknown>>;\n const result: Record<string, CanonicalValue> = {};\n for (const key of Object.keys(record).sort((left, right) => left.localeCompare(right))) {\n const entry = record[key];\n if (entry !== undefined) result[key.normalize('NFC')] = canonicalValue(entry);\n }\n return result;\n}\n\nexport function canonicalJson(value: unknown): string {\n return JSON.stringify(canonicalValue(value));\n}\n"],"mappings":";AAMA,SAAS,gBAAgB,OAAuB;CAC9C,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,MAAM,IAAI,MAAM,2DAA2D;CACxG,OAAO,OAAO,GAAG,OAAO,EAAE,IAAI,IAAI;AACpC;AAEA,SAAgB,eAAe,OAAgC;CAC7D,IAAI,UAAU,MAAM,OAAO;CAC3B,IAAI,OAAO,UAAU,UAAU,OAAO,MAAM,UAAU,KAAK;CAC3D,IAAI,OAAO,UAAU,WAAW,OAAO;CACvC,IAAI,OAAO,UAAU,UAAU,OAAO,gBAAgB,KAAK;CAC3D,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,eAAe,KAAK,CAAC;CAC3E,IAAI,OAAO,UAAU,UAAU,MAAM,IAAI,MAAM,4CAA4C,OAAO,MAAM,EAAE;CAE1G,MAAM,SAAS;CACf,MAAM,SAAyC,CAAC;CAChD,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC,GAAG;EACtF,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,KAAA,GAAW,OAAO,IAAI,UAAU,KAAK,KAAK,eAAe,KAAK;CAC9E;CACA,OAAO;AACT;AAEA,SAAgB,cAAc,OAAwB;CACpD,OAAO,KAAK,UAAU,eAAe,KAAK,CAAC;AAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/canonical/index.ts"],"mappings":";YAAY,6DAA6D,mBAAmB;iBAE3E;YACL,cAAc;;wBAQV,eAAe,iBAAiB;wBAiBhC,cAAc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/canonical/index.ts"],"mappings":";YAAY,6DAA6D,mBAAmB;iBAE3E;YACL,cAAc;;wBAQV,eAAe,iBAAiB;wBAiBhC,cAAc"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/services/canonical/index.ts
|
|
2
|
+
function canonicalNumber(value) {
|
|
3
|
+
if (!Number.isFinite(value)) throw new Error("Prompt cache identity cannot contain a non-finite number.");
|
|
4
|
+
return Object.is(value, -0) ? 0 : value;
|
|
5
|
+
}
|
|
6
|
+
function canonicalValue(value) {
|
|
7
|
+
if (value === null) return null;
|
|
8
|
+
if (typeof value === "string") return value.normalize("NFC");
|
|
9
|
+
if (typeof value === "boolean") return value;
|
|
10
|
+
if (typeof value === "number") return canonicalNumber(value);
|
|
11
|
+
if (Array.isArray(value)) return value.map((entry) => canonicalValue(entry));
|
|
12
|
+
if (typeof value !== "object") throw new Error(`Unsupported prompt cache identity value: ${typeof value}.`);
|
|
13
|
+
const record = value;
|
|
14
|
+
const result = {};
|
|
15
|
+
for (const key of Object.keys(record).sort((left, right) => left.localeCompare(right))) {
|
|
16
|
+
const entry = record[key];
|
|
17
|
+
if (entry !== void 0) result[key.normalize("NFC")] = canonicalValue(entry);
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
function canonicalJson(value) {
|
|
22
|
+
return JSON.stringify(canonicalValue(value));
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { canonicalJson, canonicalValue };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/canonical/index.ts"],"sourcesContent":["export type CanonicalValue = null | boolean | number | string | readonly CanonicalValue[] | CanonicalObject;\n\nexport interface CanonicalObject {\n readonly [key: string]: CanonicalValue;\n}\n\nfunction canonicalNumber(value: number): number {\n if (!Number.isFinite(value)) throw new Error('Prompt cache identity cannot contain a non-finite number.');\n return Object.is(value, -0) ? 0 : value;\n}\n\nexport function canonicalValue(value: unknown): CanonicalValue {\n if (value === null) return null;\n if (typeof value === 'string') return value.normalize('NFC');\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return canonicalNumber(value);\n if (Array.isArray(value)) return value.map((entry) => canonicalValue(entry));\n if (typeof value !== 'object') throw new Error(`Unsupported prompt cache identity value: ${typeof value}.`);\n\n const record = value as Readonly<Record<string, unknown>>;\n const result: Record<string, CanonicalValue> = {};\n for (const key of Object.keys(record).sort((left, right) => left.localeCompare(right))) {\n const entry = record[key];\n if (entry !== undefined) result[key.normalize('NFC')] = canonicalValue(entry);\n }\n return result;\n}\n\nexport function canonicalJson(value: unknown): string {\n return JSON.stringify(canonicalValue(value));\n}\n"],"mappings":";AAMA,SAAS,gBAAgB,OAAuB;CAC9C,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,MAAM,IAAI,MAAM,2DAA2D;CACxG,OAAO,OAAO,GAAG,OAAO,EAAE,IAAI,IAAI;AACpC;AAEA,SAAgB,eAAe,OAAgC;CAC7D,IAAI,UAAU,MAAM,OAAO;CAC3B,IAAI,OAAO,UAAU,UAAU,OAAO,MAAM,UAAU,KAAK;CAC3D,IAAI,OAAO,UAAU,WAAW,OAAO;CACvC,IAAI,OAAO,UAAU,UAAU,OAAO,gBAAgB,KAAK;CAC3D,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,eAAe,KAAK,CAAC;CAC3E,IAAI,OAAO,UAAU,UAAU,MAAM,IAAI,MAAM,4CAA4C,OAAO,MAAM,EAAE;CAE1G,MAAM,SAAS;CACf,MAAM,SAAyC,CAAC;CAChD,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC,GAAG;EACtF,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,KAAA,GAAW,OAAO,IAAI,UAAU,KAAK,KAAK,eAAe,KAAK;CAC9E;CACA,OAAO;AACT;AAEA,SAAgB,cAAc,OAAwB;CACpD,OAAO,KAAK,UAAU,eAAe,KAAK,CAAC;AAC7C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
let node_crypto = require("node:crypto");
|
|
2
|
+
//#region src/services/digest/index.ts
|
|
3
|
+
function sha256Base64Url(value) {
|
|
4
|
+
return (0, node_crypto.createHash)("sha256").update(value).digest("base64url");
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
exports.sha256Base64Url = sha256Base64Url;
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createHash"],"sources":["../../../../src/services/digest/index.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nexport function sha256Base64Url(value: string): string {\n return createHash('sha256').update(value).digest('base64url');\n}\n"],"mappings":";;AAEA,SAAgB,gBAAgB,OAAuB;CACrD,QAAA,GAAOA,YAAAA,WAAAA,CAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,WAAW;AAC9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/digest/index.ts"],"mappings":";wBAEgB,gBAAgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/digest/index.ts"],"mappings":";wBAEgB,gBAAgB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
//#region src/services/digest/index.ts
|
|
3
|
+
function sha256Base64Url(value) {
|
|
4
|
+
return createHash("sha256").update(value).digest("base64url");
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { sha256Base64Url };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/digest/index.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nexport function sha256Base64Url(value: string): string {\n return createHash('sha256').update(value).digest('base64url');\n}\n"],"mappings":";;AAEA,SAAgB,gBAAgB,OAAuB;CACrD,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,WAAW;AAC9D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const require_index = require("../canonical/index.cjs");
|
|
2
|
+
//#region src/services/namespace/index.ts
|
|
3
|
+
const KEY_PREFIX = "dpc1_";
|
|
4
|
+
const PARENT_PREFIX = "dpn1_";
|
|
5
|
+
const CHILD_PREFIX = "dch1_";
|
|
6
|
+
const ROOT_PREFIX = "dpr1_";
|
|
7
|
+
const MODEL_PREFIX = "dpm1_";
|
|
8
|
+
function digestIdentity(prefix, value, digest) {
|
|
9
|
+
return `${prefix}${digest(require_index.canonicalJson(value))}`;
|
|
10
|
+
}
|
|
11
|
+
function normalizedPersona(value) {
|
|
12
|
+
return value?.trim().replaceAll("\\", "/") || void 0;
|
|
13
|
+
}
|
|
14
|
+
function activeMinorModes(modes) {
|
|
15
|
+
return modes.filter(({ activation }) => activation === "active" || activation === "activating").map(({ source, id, modelContextVariant }) => ({
|
|
16
|
+
source,
|
|
17
|
+
id,
|
|
18
|
+
...modelContextVariant ? { modelContextVariant } : {}
|
|
19
|
+
})).sort((left, right) => left.source.localeCompare(right.source) || left.id.localeCompare(right.id));
|
|
20
|
+
}
|
|
21
|
+
function createRootSessionIdentity(rootSessionId, digest) {
|
|
22
|
+
return digestIdentity(ROOT_PREFIX, {
|
|
23
|
+
version: 1,
|
|
24
|
+
rootSessionId
|
|
25
|
+
}, digest);
|
|
26
|
+
}
|
|
27
|
+
function createParentPromptCacheNamespace(state, digest) {
|
|
28
|
+
return digestIdentity(PARENT_PREFIX, {
|
|
29
|
+
version: 1,
|
|
30
|
+
rootSession: createRootSessionIdentity(state.rootSessionId, digest),
|
|
31
|
+
compositionFingerprint: state.compositionFingerprint ?? null,
|
|
32
|
+
majorMode: state.majorMode,
|
|
33
|
+
domains: [...state.domains],
|
|
34
|
+
profile: state.profile ?? null,
|
|
35
|
+
persona: normalizedPersona(state.persona) ?? null,
|
|
36
|
+
minorModes: activeMinorModes(state.minorModes)
|
|
37
|
+
}, digest);
|
|
38
|
+
}
|
|
39
|
+
function createChildPromptCacheProjection(projection, digest) {
|
|
40
|
+
return digestIdentity(CHILD_PREFIX, {
|
|
41
|
+
version: 1,
|
|
42
|
+
systemPrompt: projection.systemPrompt ?? null,
|
|
43
|
+
tools: [...projection.tools],
|
|
44
|
+
excludedTools: [...projection.excludedTools].sort((left, right) => left.localeCompare(right)),
|
|
45
|
+
extensions: [...projection.extensions],
|
|
46
|
+
inheritProjectContext: projection.inheritProjectContext ?? null,
|
|
47
|
+
inheritSkills: projection.inheritSkills ?? null,
|
|
48
|
+
fanout: projection.fanout ?? null,
|
|
49
|
+
structuredOutputSchema: projection.structuredOutputSchema ?? null
|
|
50
|
+
}, digest);
|
|
51
|
+
}
|
|
52
|
+
function createPromptCacheModelFingerprint(model, digest) {
|
|
53
|
+
return digestIdentity(MODEL_PREFIX, {
|
|
54
|
+
version: 1,
|
|
55
|
+
virtualProvider: model.virtualProvider ?? null,
|
|
56
|
+
virtualModel: model.virtualModel ?? null,
|
|
57
|
+
api: model.api ?? null,
|
|
58
|
+
baseUrl: model.baseUrl ?? null,
|
|
59
|
+
wireModel: model.wireModel ?? null
|
|
60
|
+
}, digest);
|
|
61
|
+
}
|
|
62
|
+
function createPromptCacheKey(parentNamespace, scope, modelFingerprint, digest, childProjection) {
|
|
63
|
+
return digestIdentity(KEY_PREFIX, {
|
|
64
|
+
version: 1,
|
|
65
|
+
parentNamespace,
|
|
66
|
+
scope,
|
|
67
|
+
childProjection: childProjection ?? null,
|
|
68
|
+
modelFingerprint
|
|
69
|
+
}, digest);
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
exports.createChildPromptCacheProjection = createChildPromptCacheProjection;
|
|
73
|
+
exports.createParentPromptCacheNamespace = createParentPromptCacheNamespace;
|
|
74
|
+
exports.createPromptCacheKey = createPromptCacheKey;
|
|
75
|
+
exports.createPromptCacheModelFingerprint = createPromptCacheModelFingerprint;
|
|
76
|
+
exports.createRootSessionIdentity = createRootSessionIdentity;
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["canonicalJson"],"sources":["../../../../src/services/namespace/index.ts"],"sourcesContent":["import type {\n PromptCacheChildProjection,\n PromptCacheDigest,\n PromptCacheMinorModeState,\n PromptCacheModelIdentity,\n PromptCacheParentState,\n} from '../../types/cache';\nimport { canonicalJson } from '../canonical';\n\nconst KEY_PREFIX = 'dpc1_';\nconst PARENT_PREFIX = 'dpn1_';\nconst CHILD_PREFIX = 'dch1_';\nconst ROOT_PREFIX = 'dpr1_';\nconst MODEL_PREFIX = 'dpm1_';\n\nfunction digestIdentity(prefix: string, value: unknown, digest: PromptCacheDigest): string {\n return `${prefix}${digest(canonicalJson(value))}`;\n}\n\nfunction normalizedPersona(value: string | undefined): string | undefined {\n const normalized = value?.trim().replaceAll('\\\\', '/');\n return normalized || undefined;\n}\n\nfunction activeMinorModes(modes: readonly PromptCacheMinorModeState[]): readonly Record<string, string>[] {\n return modes\n .filter(({ activation }) => activation === 'active' || activation === 'activating')\n .map(({ source, id, modelContextVariant }) => ({\n source,\n id,\n ...(modelContextVariant ? { modelContextVariant } : {}),\n }))\n .sort((left, right) => left.source.localeCompare(right.source) || left.id.localeCompare(right.id));\n}\n\nexport function createRootSessionIdentity(rootSessionId: string, digest: PromptCacheDigest): string {\n return digestIdentity(ROOT_PREFIX, { version: 1, rootSessionId }, digest);\n}\n\nexport function createParentPromptCacheNamespace(state: PromptCacheParentState, digest: PromptCacheDigest): string {\n return digestIdentity(\n PARENT_PREFIX,\n {\n version: 1,\n rootSession: createRootSessionIdentity(state.rootSessionId, digest),\n compositionFingerprint: state.compositionFingerprint ?? null,\n majorMode: state.majorMode,\n domains: [...state.domains],\n profile: state.profile ?? null,\n persona: normalizedPersona(state.persona) ?? null,\n minorModes: activeMinorModes(state.minorModes),\n },\n digest,\n );\n}\n\nexport function createChildPromptCacheProjection(\n projection: PromptCacheChildProjection,\n digest: PromptCacheDigest,\n): string {\n return digestIdentity(\n CHILD_PREFIX,\n {\n version: 1,\n systemPrompt: projection.systemPrompt ?? null,\n tools: [...projection.tools],\n excludedTools: [...projection.excludedTools].sort((left, right) => left.localeCompare(right)),\n extensions: [...projection.extensions],\n inheritProjectContext: projection.inheritProjectContext ?? null,\n inheritSkills: projection.inheritSkills ?? null,\n fanout: projection.fanout ?? null,\n structuredOutputSchema: projection.structuredOutputSchema ?? null,\n },\n digest,\n );\n}\n\nexport function createPromptCacheModelFingerprint(model: PromptCacheModelIdentity, digest: PromptCacheDigest): string {\n return digestIdentity(\n MODEL_PREFIX,\n {\n version: 1,\n virtualProvider: model.virtualProvider ?? null,\n virtualModel: model.virtualModel ?? null,\n api: model.api ?? null,\n baseUrl: model.baseUrl ?? null,\n wireModel: model.wireModel ?? null,\n },\n digest,\n );\n}\n\nexport function createPromptCacheKey(\n parentNamespace: string,\n scope: 'parent' | 'child',\n modelFingerprint: string,\n digest: PromptCacheDigest,\n childProjection?: string,\n): string {\n return digestIdentity(\n KEY_PREFIX,\n {\n version: 1,\n parentNamespace,\n scope,\n childProjection: childProjection ?? null,\n modelFingerprint,\n },\n digest,\n );\n}\n"],"mappings":";;AASA,MAAM,aAAa;AACnB,MAAM,gBAAgB;AACtB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,eAAe;AAErB,SAAS,eAAe,QAAgB,OAAgB,QAAmC;CACzF,OAAO,GAAG,SAAS,OAAOA,cAAAA,cAAc,KAAK,CAAC;AAChD;AAEA,SAAS,kBAAkB,OAA+C;CAExE,OADmB,OAAO,KAAK,CAAC,CAAC,WAAW,MAAM,GAAG,KAChC,KAAA;AACvB;AAEA,SAAS,iBAAiB,OAAgF;CACxG,OAAO,MACJ,QAAQ,EAAE,iBAAiB,eAAe,YAAY,eAAe,YAAY,CAAC,CAClF,KAAK,EAAE,QAAQ,IAAI,2BAA2B;EAC7C;EACA;EACA,GAAI,sBAAsB,EAAE,oBAAoB,IAAI,CAAC;CACvD,EAAE,CAAC,CACF,MAAM,MAAM,UAAU,KAAK,OAAO,cAAc,MAAM,MAAM,KAAK,KAAK,GAAG,cAAc,MAAM,EAAE,CAAC;AACrG;AAEA,SAAgB,0BAA0B,eAAuB,QAAmC;CAClG,OAAO,eAAe,aAAa;EAAE,SAAS;EAAG;CAAc,GAAG,MAAM;AAC1E;AAEA,SAAgB,iCAAiC,OAA+B,QAAmC;CACjH,OAAO,eACL,eACA;EACE,SAAS;EACT,aAAa,0BAA0B,MAAM,eAAe,MAAM;EAClE,wBAAwB,MAAM,0BAA0B;EACxD,WAAW,MAAM;EACjB,SAAS,CAAC,GAAG,MAAM,OAAO;EAC1B,SAAS,MAAM,WAAW;EAC1B,SAAS,kBAAkB,MAAM,OAAO,KAAK;EAC7C,YAAY,iBAAiB,MAAM,UAAU;CAC/C,GACA,MACF;AACF;AAEA,SAAgB,iCACd,YACA,QACQ;CACR,OAAO,eACL,cACA;EACE,SAAS;EACT,cAAc,WAAW,gBAAgB;EACzC,OAAO,CAAC,GAAG,WAAW,KAAK;EAC3B,eAAe,CAAC,GAAG,WAAW,aAAa,CAAC,CAAC,MAAM,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;EAC5F,YAAY,CAAC,GAAG,WAAW,UAAU;EACrC,uBAAuB,WAAW,yBAAyB;EAC3D,eAAe,WAAW,iBAAiB;EAC3C,QAAQ,WAAW,UAAU;EAC7B,wBAAwB,WAAW,0BAA0B;CAC/D,GACA,MACF;AACF;AAEA,SAAgB,kCAAkC,OAAiC,QAAmC;CACpH,OAAO,eACL,cACA;EACE,SAAS;EACT,iBAAiB,MAAM,mBAAmB;EAC1C,cAAc,MAAM,gBAAgB;EACpC,KAAK,MAAM,OAAO;EAClB,SAAS,MAAM,WAAW;EAC1B,WAAW,MAAM,aAAa;CAChC,GACA,MACF;AACF;AAEA,SAAgB,qBACd,iBACA,OACA,kBACA,QACA,iBACQ;CACR,OAAO,eACL,YACA;EACE,SAAS;EACT;EACA;EACA,iBAAiB,mBAAmB;EACpC;CACF,GACA,MACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/namespace/index.ts"],"mappings":";;wBAmCgB,0BAA0B,uBAAuB,QAAQ;wBAIzD,iCAAiC,OAAO,wBAAwB,QAAQ;wBAiBxE,iCACd,YAAY,4BACZ,QAAQ;wBAmBM,kCAAkC,OAAO,0BAA0B,QAAQ;wBAe3E,qBACd,yBACA,2BACA,0BACA,QAAQ,mBACR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/namespace/index.ts"],"mappings":";;wBAmCgB,0BAA0B,uBAAuB,QAAQ;wBAIzD,iCAAiC,OAAO,wBAAwB,QAAQ;wBAiBxE,iCACd,YAAY,4BACZ,QAAQ;wBAmBM,kCAAkC,OAAO,0BAA0B,QAAQ;wBAe3E,qBACd,yBACA,2BACA,0BACA,QAAQ,mBACR"}
|