ds4-context-core 0.1.2 → 0.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -4
- package/dist/adapter/conformance.d.ts +35 -0
- package/dist/adapter/conformance.d.ts.map +1 -0
- package/dist/adapter/conformance.js +260 -0
- package/dist/adapter/conformance.js.map +1 -0
- package/dist/adapter/local-kv.d.ts +125 -0
- package/dist/adapter/local-kv.d.ts.map +1 -0
- package/dist/adapter/local-kv.js +276 -0
- package/dist/adapter/local-kv.js.map +1 -0
- package/dist/adapter/runtime-adapter.d.ts +124 -0
- package/dist/adapter/runtime-adapter.d.ts.map +1 -0
- package/dist/adapter/runtime-adapter.js +289 -0
- package/dist/adapter/runtime-adapter.js.map +1 -0
- package/dist/config/config-loader.d.ts +1 -0
- package/dist/config/config-loader.d.ts.map +1 -1
- package/dist/config/config-loader.js +110 -1
- package/dist/config/config-loader.js.map +1 -1
- package/dist/config/config.d.ts +50 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +31 -0
- package/dist/config/config.js.map +1 -1
- package/dist/core/canonical-message.d.ts +2 -1
- package/dist/core/canonical-message.d.ts.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest/context-manifest.d.ts +12 -0
- package/dist/manifest/context-manifest.d.ts.map +1 -1
- package/dist/memory/memory-manager.d.ts +7 -1
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +100 -3
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-types.d.ts +43 -0
- package/dist/memory/memory-types.d.ts.map +1 -1
- package/dist/memory/memory-types.js.map +1 -1
- package/dist/persistence/migrations.d.ts +2 -1
- package/dist/persistence/migrations.d.ts.map +1 -1
- package/dist/persistence/migrations.js +155 -25
- package/dist/persistence/migrations.js.map +1 -1
- package/dist/persistence/repositories/artifact-repository.d.ts +3 -1
- package/dist/persistence/repositories/artifact-repository.d.ts.map +1 -1
- package/dist/persistence/repositories/artifact-repository.js +16 -27
- package/dist/persistence/repositories/artifact-repository.js.map +1 -1
- package/dist/persistence/repositories/context-manifest-repository.d.ts +3 -1
- package/dist/persistence/repositories/context-manifest-repository.d.ts.map +1 -1
- package/dist/persistence/repositories/context-manifest-repository.js +10 -18
- package/dist/persistence/repositories/context-manifest-repository.js.map +1 -1
- package/dist/persistence/repositories/context-quality-repository.d.ts +21 -0
- package/dist/persistence/repositories/context-quality-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/context-quality-repository.js +83 -0
- package/dist/persistence/repositories/context-quality-repository.js.map +1 -0
- package/dist/persistence/repositories/embedding-repository.d.ts +37 -0
- package/dist/persistence/repositories/embedding-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/embedding-repository.js +142 -0
- package/dist/persistence/repositories/embedding-repository.js.map +1 -0
- package/dist/persistence/repositories/lease-repository.d.ts +22 -0
- package/dist/persistence/repositories/lease-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/lease-repository.js +113 -0
- package/dist/persistence/repositories/lease-repository.js.map +1 -0
- package/dist/persistence/repositories/memory-repository.d.ts +34 -3
- package/dist/persistence/repositories/memory-repository.d.ts.map +1 -1
- package/dist/persistence/repositories/memory-repository.js +426 -64
- package/dist/persistence/repositories/memory-repository.js.map +1 -1
- package/dist/persistence/repositories/project-knowledge-repository.d.ts +28 -5
- package/dist/persistence/repositories/project-knowledge-repository.d.ts.map +1 -1
- package/dist/persistence/repositories/project-knowledge-repository.js +123 -53
- package/dist/persistence/repositories/project-knowledge-repository.js.map +1 -1
- package/dist/persistence/repositories/session-index-repository.d.ts +9 -1
- package/dist/persistence/repositories/session-index-repository.d.ts.map +1 -1
- package/dist/persistence/repositories/session-index-repository.js +38 -17
- package/dist/persistence/repositories/session-index-repository.js.map +1 -1
- package/dist/persistence/repositories/summary-repository.d.ts +3 -1
- package/dist/persistence/repositories/summary-repository.d.ts.map +1 -1
- package/dist/persistence/repositories/summary-repository.js +35 -31
- package/dist/persistence/repositories/summary-repository.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +10 -0
- package/dist/persistence/sqlite.d.ts.map +1 -1
- package/dist/persistence/sqlite.js +41 -12
- package/dist/persistence/sqlite.js.map +1 -1
- package/dist/persistence/write-coordinator.d.ts +37 -0
- package/dist/persistence/write-coordinator.d.ts.map +1 -0
- package/dist/persistence/write-coordinator.js +120 -0
- package/dist/persistence/write-coordinator.js.map +1 -0
- package/dist/planner/context-planner.d.ts +5 -0
- package/dist/planner/context-planner.d.ts.map +1 -1
- package/dist/planner/context-planner.js +41 -62
- package/dist/planner/context-planner.js.map +1 -1
- package/dist/project/file-indexer.d.ts +5 -3
- package/dist/project/file-indexer.d.ts.map +1 -1
- package/dist/project/file-indexer.js +83 -38
- package/dist/project/file-indexer.js.map +1 -1
- package/dist/project/project-knowledge.d.ts +15 -3
- package/dist/project/project-knowledge.d.ts.map +1 -1
- package/dist/project/project-knowledge.js +168 -42
- package/dist/project/project-knowledge.js.map +1 -1
- package/dist/project/symbol-parser.d.ts +48 -0
- package/dist/project/symbol-parser.d.ts.map +1 -0
- package/dist/project/symbol-parser.js +427 -0
- package/dist/project/symbol-parser.js.map +1 -0
- package/dist/quality/context-quality.d.ts +172 -0
- package/dist/quality/context-quality.d.ts.map +1 -0
- package/dist/quality/context-quality.js +624 -0
- package/dist/quality/context-quality.js.map +1 -0
- package/dist/ranking/learned-ranker.d.ts +174 -0
- package/dist/ranking/learned-ranker.d.ts.map +1 -0
- package/dist/ranking/learned-ranker.js +782 -0
- package/dist/ranking/learned-ranker.js.map +1 -0
- package/dist/retrieval/embedding.d.ts +92 -0
- package/dist/retrieval/embedding.d.ts.map +1 -0
- package/dist/retrieval/embedding.js +56 -0
- package/dist/retrieval/embedding.js.map +1 -0
- package/dist/retrieval/retrieval-engine.d.ts +9 -1
- package/dist/retrieval/retrieval-engine.d.ts.map +1 -1
- package/dist/retrieval/retrieval-engine.js +105 -7
- package/dist/retrieval/retrieval-engine.js.map +1 -1
- package/dist/retrieval/semantic-index.d.ts +30 -0
- package/dist/retrieval/semantic-index.d.ts.map +1 -0
- package/dist/retrieval/semantic-index.js +284 -0
- package/dist/retrieval/semantic-index.js.map +1 -0
- package/dist/retrieval/semantic-quality.d.ts +52 -0
- package/dist/retrieval/semantic-quality.d.ts.map +1 -0
- package/dist/retrieval/semantic-quality.js +117 -0
- package/dist/retrieval/semantic-quality.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,16 +6,22 @@ The package contains deterministic context policy and rebuildable local projecti
|
|
|
6
6
|
|
|
7
7
|
## Included
|
|
8
8
|
|
|
9
|
+
- versioned runtime adapter contract and framework-neutral conformance runner;
|
|
10
|
+
- exact-byte local KV eligibility, volatile runtime-port orchestration and aggregate-only diagnostics;
|
|
9
11
|
- canonical messages and token estimation;
|
|
10
12
|
- model profiles, calibration and context budgets;
|
|
11
13
|
- deterministic planning and atomic tool groups;
|
|
12
14
|
- Context Manifest generation;
|
|
13
15
|
- validated hierarchical compaction records;
|
|
14
|
-
- exact and
|
|
16
|
+
- exact, FTS and deterministic hybrid rank fusion;
|
|
17
|
+
- runtime-neutral embedding port, derived vector storage and quality comparison;
|
|
18
|
+
- runtime-neutral structural symbol parsing with deterministic regex fallback;
|
|
15
19
|
- project knowledge and artifact storage;
|
|
16
20
|
- append-only memory and pin materialization;
|
|
17
21
|
- privacy classification and provider policy;
|
|
18
22
|
- optional continuation state decisions;
|
|
23
|
+
- deterministic metadata-only context-quality replay and comparison;
|
|
24
|
+
- bounded learned-ranking features, local training, checksummed artifacts and promotion evaluation;
|
|
19
25
|
- rebuildable SQLite repositories.
|
|
20
26
|
|
|
21
27
|
## Install
|
|
@@ -49,6 +55,14 @@ Fine-grained ESM subpath exports are available, for example:
|
|
|
49
55
|
|
|
50
56
|
```ts
|
|
51
57
|
import { planManagedContext } from "ds4-context-core/planner/context-planner";
|
|
58
|
+
import { compareQualityStrategies } from "ds4-context-core/quality/context-quality";
|
|
59
|
+
import { DeterministicRegexSymbolParser } from "ds4-context-core/project/symbol-parser";
|
|
60
|
+
import type { EmbeddingPort } from "ds4-context-core/retrieval/embedding";
|
|
61
|
+
import { SemanticEmbeddingIndex } from "ds4-context-core/retrieval/semantic-index";
|
|
62
|
+
import { rankCandidates } from "ds4-context-core/ranking/learned-ranker";
|
|
63
|
+
import { runRuntimeAdapterConformance } from "ds4-context-core/adapter/conformance";
|
|
64
|
+
import { LocalKvReuseController } from "ds4-context-core/adapter/local-kv";
|
|
65
|
+
import { negotiateRuntimeCapabilities } from "ds4-context-core/adapter/runtime-adapter";
|
|
52
66
|
```
|
|
53
67
|
|
|
54
68
|
## Adapter boundary
|
|
@@ -59,11 +73,13 @@ An adapter is responsible for:
|
|
|
59
73
|
2. identifying the active session, branch, provider and model;
|
|
60
74
|
3. supplying canonical history and project trust state;
|
|
61
75
|
4. applying the planned context through runtime hooks;
|
|
62
|
-
5. invoking model completion
|
|
76
|
+
5. invoking model completion while enforcing privacy immediately before transport;
|
|
63
77
|
6. persisting canonical mutations in the runtime's own history;
|
|
64
|
-
7.
|
|
78
|
+
7. negotiating optional runtime capabilities independently;
|
|
79
|
+
8. retaining any local KV handles inside a volatile runtime port and replaying the full sanitized prompt after non-hits;
|
|
80
|
+
9. shutting down idempotently and falling back to the native runtime path on integration failure.
|
|
65
81
|
|
|
66
|
-
The Pi implementation lives in the root `ds4-context-engine` package under `src/pi-adapter` and `src/extension`.
|
|
82
|
+
The Pi implementation lives in the root `ds4-context-engine` package under `src/pi-adapter` and `src/extension`. The separately packaged `ds4-context-reference-adapter` demonstrates the same contract with canonical JSONL and an injected completion callback. See the repository's Runtime Adapter Kit documentation for conformance and packaging rules.
|
|
67
83
|
|
|
68
84
|
## Portability guarantee
|
|
69
85
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CanonicalMessage } from "../core/canonical-message.ts";
|
|
2
|
+
import type { ModelDescriptor } from "../core/model-profile.ts";
|
|
3
|
+
import { RUNTIME_ADAPTER_CONTRACT_VERSION, type RuntimeAdapter, type RuntimeCompletionTransport } from "./runtime-adapter.ts";
|
|
4
|
+
export declare const RUNTIME_ADAPTER_CONFORMANCE_VERSION: "runtime-adapter-conformance-v1";
|
|
5
|
+
export interface RuntimeAdapterConformanceFixture {
|
|
6
|
+
runtimeId: string;
|
|
7
|
+
sessionId: string;
|
|
8
|
+
messages: CanonicalMessage[];
|
|
9
|
+
model: ModelDescriptor;
|
|
10
|
+
}
|
|
11
|
+
export interface RuntimeAdapterConformanceInstance {
|
|
12
|
+
adapter: RuntimeAdapter;
|
|
13
|
+
expectedProjectRoot: string;
|
|
14
|
+
cleanup?: () => void | Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export interface RuntimeAdapterConformanceFactory {
|
|
17
|
+
name: string;
|
|
18
|
+
create(fixture: RuntimeAdapterConformanceFixture, transport: RuntimeCompletionTransport): Promise<RuntimeAdapterConformanceInstance>;
|
|
19
|
+
}
|
|
20
|
+
export interface RuntimeAdapterConformanceCase {
|
|
21
|
+
id: "identity" | "capabilities" | "canonical-history" | "rebuild" | "privacy" | "fallback" | "lifecycle";
|
|
22
|
+
passed: boolean;
|
|
23
|
+
failureCode?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface RuntimeAdapterConformanceReport {
|
|
26
|
+
version: typeof RUNTIME_ADAPTER_CONFORMANCE_VERSION;
|
|
27
|
+
contractVersion: typeof RUNTIME_ADAPTER_CONTRACT_VERSION;
|
|
28
|
+
factoryName: string;
|
|
29
|
+
passed: boolean;
|
|
30
|
+
cases: RuntimeAdapterConformanceCase[];
|
|
31
|
+
}
|
|
32
|
+
export declare function createRuntimeAdapterConformanceFixture(): RuntimeAdapterConformanceFixture;
|
|
33
|
+
export declare function runRuntimeAdapterConformance(factory: RuntimeAdapterConformanceFactory): Promise<RuntimeAdapterConformanceReport>;
|
|
34
|
+
export declare function assertRuntimeAdapterConformance(report: RuntimeAdapterConformanceReport): void;
|
|
35
|
+
//# sourceMappingURL=conformance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../src/adapter/conformance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EACL,gCAAgC,EAEhC,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAMhC,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,mCAAmC,EAAG,gCAAyC,CAAC;AAE7F,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,EAAE,cAAc,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CACJ,OAAO,EAAE,gCAAgC,EACzC,SAAS,EAAE,0BAA0B,GACpC,OAAO,CAAC,iCAAiC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,UAAU,GAAG,cAAc,GAAG,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IACzG,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,OAAO,mCAAmC,CAAC;IACpD,eAAe,EAAE,OAAO,gCAAgC,CAAC;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,6BAA6B,EAAE,CAAC;CACxC;AA0DD,wBAAgB,sCAAsC,IAAI,gCAAgC,CAezF;AA2BD,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,+BAA+B,CAAC,CAsK1C;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,+BAA+B,GAAG,IAAI,CAK7F"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { RUNTIME_ADAPTER_CONTRACT_VERSION, RUNTIME_CAPABILITY_IDS, buildCanonicalToolAtomicGroups, validateRuntimeHistorySnapshot, } from "./runtime-adapter.js";
|
|
2
|
+
export const RUNTIME_ADAPTER_CONFORMANCE_VERSION = "runtime-adapter-conformance-v1";
|
|
3
|
+
const PRIVATE_MARKER_TEXT = "DS4_CONFORMANCE_PRIVATE_VALUE";
|
|
4
|
+
const CREDENTIAL_TEXT = "sk-conformance-credential-123456";
|
|
5
|
+
function conformanceMessages(sessionId) {
|
|
6
|
+
const provenance = (entryId) => ({
|
|
7
|
+
source: "runtime-session",
|
|
8
|
+
runtimeId: "conformance-runtime",
|
|
9
|
+
sessionId,
|
|
10
|
+
entryId,
|
|
11
|
+
});
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
id: `${sessionId}:entry-user`,
|
|
15
|
+
sourceEntryId: "entry-user",
|
|
16
|
+
role: "user",
|
|
17
|
+
blocks: [{ type: "text", text: "Inspect the reference project." }],
|
|
18
|
+
provenance: provenance("entry-user"),
|
|
19
|
+
tokenEstimate: 8,
|
|
20
|
+
flags: {},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: `${sessionId}:entry-call`,
|
|
24
|
+
sourceEntryId: "entry-call",
|
|
25
|
+
role: "assistant",
|
|
26
|
+
blocks: [{ type: "toolCall", id: "tool-call-1", name: "read", arguments: { path: "src/index.ts" } }],
|
|
27
|
+
provenance: provenance("entry-call"),
|
|
28
|
+
tokenEstimate: 12,
|
|
29
|
+
flags: { atomic: true },
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: `${sessionId}:entry-result`,
|
|
33
|
+
sourceEntryId: "entry-result",
|
|
34
|
+
role: "tool",
|
|
35
|
+
blocks: [{
|
|
36
|
+
type: "toolResult",
|
|
37
|
+
toolCallId: "tool-call-1",
|
|
38
|
+
toolName: "read",
|
|
39
|
+
content: "export const ready = true;",
|
|
40
|
+
isError: false,
|
|
41
|
+
}],
|
|
42
|
+
provenance: provenance("entry-result"),
|
|
43
|
+
tokenEstimate: 10,
|
|
44
|
+
flags: { atomic: true },
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: `${sessionId}:entry-assistant`,
|
|
48
|
+
sourceEntryId: "entry-assistant",
|
|
49
|
+
role: "assistant",
|
|
50
|
+
blocks: [{ type: "text", text: "The project is ready." }],
|
|
51
|
+
provenance: provenance("entry-assistant"),
|
|
52
|
+
tokenEstimate: 7,
|
|
53
|
+
flags: {},
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
export function createRuntimeAdapterConformanceFixture() {
|
|
58
|
+
const sessionId = "runtime-adapter-conformance-session";
|
|
59
|
+
return {
|
|
60
|
+
runtimeId: "conformance-runtime",
|
|
61
|
+
sessionId,
|
|
62
|
+
messages: conformanceMessages(sessionId),
|
|
63
|
+
model: {
|
|
64
|
+
provider: "conformance-remote",
|
|
65
|
+
id: "conformance-model",
|
|
66
|
+
contextWindow: 32_768,
|
|
67
|
+
maxTokens: 4_096,
|
|
68
|
+
reasoning: false,
|
|
69
|
+
input: ["text"],
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function sameMessageProjection(left, right) {
|
|
74
|
+
return left.revision === right.revision
|
|
75
|
+
&& left.sessionId === right.sessionId
|
|
76
|
+
&& left.projectRoot === right.projectRoot
|
|
77
|
+
&& left.messages.map((message) => message.id).join("\0")
|
|
78
|
+
=== right.messages.map((message) => message.id).join("\0")
|
|
79
|
+
&& JSON.stringify(left.toolAtomicGroups) === JSON.stringify(right.toolAtomicGroups);
|
|
80
|
+
}
|
|
81
|
+
function completeToolGroup(groups) {
|
|
82
|
+
return groups.length === 1
|
|
83
|
+
&& groups[0]?.complete === true
|
|
84
|
+
&& groups[0]?.toolCallIds.join("\0") === "tool-call-1";
|
|
85
|
+
}
|
|
86
|
+
function payloadContainsPrivateData(value) {
|
|
87
|
+
let serialized = "";
|
|
88
|
+
try {
|
|
89
|
+
serialized = JSON.stringify(value) ?? "";
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return serialized.includes(PRIVATE_MARKER_TEXT) || serialized.includes(CREDENTIAL_TEXT);
|
|
95
|
+
}
|
|
96
|
+
export async function runRuntimeAdapterConformance(factory) {
|
|
97
|
+
const fixture = createRuntimeAdapterConformanceFixture();
|
|
98
|
+
const transmitted = [];
|
|
99
|
+
let failNextTransport = false;
|
|
100
|
+
const transport = async (request) => {
|
|
101
|
+
if (failNextTransport) {
|
|
102
|
+
failNextTransport = false;
|
|
103
|
+
throw new Error("Synthetic conformance transport failure");
|
|
104
|
+
}
|
|
105
|
+
transmitted.push(request);
|
|
106
|
+
return { role: "assistant", content: "conformance completion" };
|
|
107
|
+
};
|
|
108
|
+
const instance = await factory.create(fixture, transport);
|
|
109
|
+
const { adapter } = instance;
|
|
110
|
+
const cases = [];
|
|
111
|
+
const check = async (id, assertion) => {
|
|
112
|
+
try {
|
|
113
|
+
const passed = await assertion();
|
|
114
|
+
cases.push(passed ? { id, passed: true } : { id, passed: false, failureCode: `${id}-assertion-failed` });
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
cases.push({ id, passed: false, failureCode: `${id}-threw` });
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
try {
|
|
121
|
+
await check("identity", async () => {
|
|
122
|
+
const model = await adapter.currentModel();
|
|
123
|
+
const root = await adapter.trustedProjectRoot();
|
|
124
|
+
return adapter.identity.contractVersion === RUNTIME_ADAPTER_CONTRACT_VERSION
|
|
125
|
+
&& adapter.identity.runtimeId === fixture.runtimeId
|
|
126
|
+
&& adapter.identity.adapterName.trim().length > 0
|
|
127
|
+
&& adapter.identity.adapterVersion.trim().length > 0
|
|
128
|
+
&& root === instance.expectedProjectRoot
|
|
129
|
+
&& model?.provider === fixture.model.provider
|
|
130
|
+
&& model.id === fixture.model.id
|
|
131
|
+
&& model.contextWindow === fixture.model.contextWindow;
|
|
132
|
+
});
|
|
133
|
+
await check("capabilities", () => {
|
|
134
|
+
const negotiation = adapter.negotiateCapabilities(RUNTIME_CAPABILITY_IDS.map((id) => ({ id })));
|
|
135
|
+
return negotiation.contractVersion === RUNTIME_ADAPTER_CONTRACT_VERSION
|
|
136
|
+
&& negotiation.statuses.length === RUNTIME_CAPABILITY_IDS.length
|
|
137
|
+
&& negotiation.statuses.every((status) => status.supported
|
|
138
|
+
? Boolean(status.version)
|
|
139
|
+
: Boolean(status.reason)
|
|
140
|
+
&& negotiation.diagnostics.some((diagnostic) => diagnostic.capability === status.id));
|
|
141
|
+
});
|
|
142
|
+
let initialSnapshot;
|
|
143
|
+
await check("canonical-history", async () => {
|
|
144
|
+
initialSnapshot = await adapter.snapshotHistory();
|
|
145
|
+
return initialSnapshot.runtimeId === fixture.runtimeId
|
|
146
|
+
&& initialSnapshot.sessionId === fixture.sessionId
|
|
147
|
+
&& initialSnapshot.projectRoot === instance.expectedProjectRoot
|
|
148
|
+
&& initialSnapshot.messages.map((message) => message.id).join("\0")
|
|
149
|
+
=== fixture.messages.map((message) => message.id).join("\0")
|
|
150
|
+
&& validateRuntimeHistorySnapshot(initialSnapshot).length === 0
|
|
151
|
+
&& completeToolGroup(initialSnapshot.toolAtomicGroups)
|
|
152
|
+
&& JSON.stringify(initialSnapshot.toolAtomicGroups)
|
|
153
|
+
=== JSON.stringify(buildCanonicalToolAtomicGroups(initialSnapshot.messages));
|
|
154
|
+
});
|
|
155
|
+
await check("rebuild", async () => {
|
|
156
|
+
const baseline = initialSnapshot ?? await adapter.snapshotHistory();
|
|
157
|
+
const rebuilt = await adapter.rebuildDerivedState();
|
|
158
|
+
return validateRuntimeHistorySnapshot(rebuilt).length === 0
|
|
159
|
+
&& sameMessageProjection(baseline, rebuilt);
|
|
160
|
+
});
|
|
161
|
+
const privatePayload = {
|
|
162
|
+
messages: [{
|
|
163
|
+
role: "user",
|
|
164
|
+
content: `[ds4:local-only]${PRIVATE_MARKER_TEXT}[/ds4:local-only] public ${CREDENTIAL_TEXT}`,
|
|
165
|
+
}],
|
|
166
|
+
};
|
|
167
|
+
await check("privacy", async () => {
|
|
168
|
+
const sanitized = await adapter.enforcePrivacy({
|
|
169
|
+
provider: fixture.model.provider,
|
|
170
|
+
payload: privatePayload,
|
|
171
|
+
});
|
|
172
|
+
const before = transmitted.length;
|
|
173
|
+
const completion = await adapter.complete({
|
|
174
|
+
provider: fixture.model.provider,
|
|
175
|
+
model: fixture.model.id,
|
|
176
|
+
payload: privatePayload,
|
|
177
|
+
});
|
|
178
|
+
const sent = transmitted.at(-1);
|
|
179
|
+
const hostilePayload = {};
|
|
180
|
+
Object.defineProperty(hostilePayload, "messages", {
|
|
181
|
+
enumerable: true,
|
|
182
|
+
get() {
|
|
183
|
+
throw new Error("Synthetic privacy traversal failure");
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
const beforeFailedClosed = transmitted.length;
|
|
187
|
+
const failedClosed = await adapter.complete({
|
|
188
|
+
provider: fixture.model.provider,
|
|
189
|
+
model: fixture.model.id,
|
|
190
|
+
payload: hostilePayload,
|
|
191
|
+
});
|
|
192
|
+
return sanitized.destination === "remote"
|
|
193
|
+
&& sanitized.changed
|
|
194
|
+
&& !payloadContainsPrivateData(sanitized.payload)
|
|
195
|
+
&& completion.status === "completed"
|
|
196
|
+
&& transmitted.length === before + 1
|
|
197
|
+
&& sent?.destination === "remote"
|
|
198
|
+
&& !payloadContainsPrivateData(sent?.payload)
|
|
199
|
+
&& failedClosed.status === "fallback"
|
|
200
|
+
&& failedClosed.code === "privacy-enforcement-failed"
|
|
201
|
+
&& transmitted.length === beforeFailedClosed;
|
|
202
|
+
});
|
|
203
|
+
await check("fallback", async () => {
|
|
204
|
+
failNextTransport = true;
|
|
205
|
+
const before = transmitted.length;
|
|
206
|
+
const completion = await adapter.complete({
|
|
207
|
+
provider: fixture.model.provider,
|
|
208
|
+
model: fixture.model.id,
|
|
209
|
+
payload: { messages: [{ role: "user", content: "transport fallback probe" }] },
|
|
210
|
+
});
|
|
211
|
+
return completion.status === "fallback"
|
|
212
|
+
&& completion.code === "transport-failed"
|
|
213
|
+
&& completion.retryable
|
|
214
|
+
&& transmitted.length === before
|
|
215
|
+
&& adapter.diagnostics().some((diagnostic) => diagnostic.code === "completion-transport-failed");
|
|
216
|
+
});
|
|
217
|
+
await check("lifecycle", async () => {
|
|
218
|
+
await adapter.shutdown();
|
|
219
|
+
await adapter.shutdown();
|
|
220
|
+
const completion = await adapter.complete({
|
|
221
|
+
provider: fixture.model.provider,
|
|
222
|
+
model: fixture.model.id,
|
|
223
|
+
payload: { messages: [] },
|
|
224
|
+
});
|
|
225
|
+
let historyRejected = false;
|
|
226
|
+
try {
|
|
227
|
+
await adapter.snapshotHistory();
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
historyRejected = true;
|
|
231
|
+
}
|
|
232
|
+
return completion.status === "fallback"
|
|
233
|
+
&& completion.code === "adapter-closed"
|
|
234
|
+
&& historyRejected
|
|
235
|
+
&& adapter.diagnostics().some((diagnostic) => diagnostic.code === "adapter-closed");
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
finally {
|
|
239
|
+
try {
|
|
240
|
+
await adapter.shutdown();
|
|
241
|
+
}
|
|
242
|
+
finally {
|
|
243
|
+
await instance.cleanup?.();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
version: RUNTIME_ADAPTER_CONFORMANCE_VERSION,
|
|
248
|
+
contractVersion: RUNTIME_ADAPTER_CONTRACT_VERSION,
|
|
249
|
+
factoryName: factory.name,
|
|
250
|
+
passed: cases.length === 7 && cases.every((item) => item.passed),
|
|
251
|
+
cases,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
export function assertRuntimeAdapterConformance(report) {
|
|
255
|
+
const failed = report.cases.filter((item) => !item.passed).map((item) => item.id);
|
|
256
|
+
if (!report.passed || failed.length > 0) {
|
|
257
|
+
throw new Error(`Runtime adapter conformance failed: ${failed.join(", ") || "incomplete report"}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=conformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../src/adapter/conformance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export declare const LOCAL_KV_ELIGIBILITY_VERSION: "local-kv-eligibility-v1";
|
|
2
|
+
export declare const LOCAL_KV_RUNTIME_PORT_VERSION: "local-kv-runtime-port-v1";
|
|
3
|
+
export declare const LOCAL_KV_DIAGNOSTICS_VERSION: "local-kv-diagnostics-v1";
|
|
4
|
+
export type LocalKvIneligibilityReason = "disabled" | "capability-unsupported" | "non-local-destination" | "invalid-provider" | "invalid-model" | "invalid-model-revision" | "invalid-runtime-identity" | "invalid-runtime-revision" | "invalid-capability-version" | "invalid-privacy-policy-version" | "invalid-prompt-prefix" | "invalid-options" | "invalid-token-count";
|
|
5
|
+
export interface LocalKvEligibilityInput {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
capabilityEnabled: boolean;
|
|
8
|
+
capabilityVersion: string;
|
|
9
|
+
destination: "local" | "remote";
|
|
10
|
+
runtimeId: string;
|
|
11
|
+
runtimeRevision: string;
|
|
12
|
+
provider: string;
|
|
13
|
+
model: string;
|
|
14
|
+
modelRevision: string;
|
|
15
|
+
privacyPolicyVersion: string;
|
|
16
|
+
/** Exact provider-ready prefix bytes after privacy enforcement. */
|
|
17
|
+
promptPrefix: string | Uint8Array;
|
|
18
|
+
systemOptions: unknown;
|
|
19
|
+
toolOptions: unknown;
|
|
20
|
+
prefixTokenCount: number;
|
|
21
|
+
/** Full context occupancy; kept separate from prefill savings. */
|
|
22
|
+
contextTokenCount: number;
|
|
23
|
+
}
|
|
24
|
+
export interface LocalKvEligibilityKey {
|
|
25
|
+
version: typeof LOCAL_KV_ELIGIBILITY_VERSION;
|
|
26
|
+
fingerprint: string;
|
|
27
|
+
prefixHash: string;
|
|
28
|
+
providerModelHash: string;
|
|
29
|
+
optionsHash: string;
|
|
30
|
+
privacyHash: string;
|
|
31
|
+
runtimeHash: string;
|
|
32
|
+
}
|
|
33
|
+
export type LocalKvEligibilityResult = {
|
|
34
|
+
eligible: true;
|
|
35
|
+
key: LocalKvEligibilityKey;
|
|
36
|
+
prefixTokenCount: number;
|
|
37
|
+
contextTokenCount: number;
|
|
38
|
+
} | {
|
|
39
|
+
eligible: false;
|
|
40
|
+
reason: LocalKvIneligibilityReason;
|
|
41
|
+
};
|
|
42
|
+
export interface LocalKvPreparedPrompt<T = unknown> {
|
|
43
|
+
/** Exact prefix bytes extracted from the already-sanitized provider payload. */
|
|
44
|
+
promptPrefix: string | Uint8Array;
|
|
45
|
+
payload: T;
|
|
46
|
+
systemOptions: unknown;
|
|
47
|
+
toolOptions: unknown;
|
|
48
|
+
prefixTokenCount: number;
|
|
49
|
+
contextTokenCount: number;
|
|
50
|
+
}
|
|
51
|
+
export interface LocalKvRuntimeRequest<T = unknown> {
|
|
52
|
+
eligibility: LocalKvEligibilityKey;
|
|
53
|
+
provider: string;
|
|
54
|
+
model: string;
|
|
55
|
+
payload: T;
|
|
56
|
+
prefixTokenCount: number;
|
|
57
|
+
contextTokenCount: number;
|
|
58
|
+
}
|
|
59
|
+
export type LocalKvReuseAttempt = {
|
|
60
|
+
status: "hit";
|
|
61
|
+
output: unknown;
|
|
62
|
+
savedPrefillTokens: number;
|
|
63
|
+
prefillLatencyMs: number;
|
|
64
|
+
} | {
|
|
65
|
+
status: "miss" | "rejected" | "unavailable";
|
|
66
|
+
};
|
|
67
|
+
export interface LocalKvFullReplayResult {
|
|
68
|
+
output: unknown;
|
|
69
|
+
prefillTokens: number;
|
|
70
|
+
prefillLatencyMs: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Runtime-owned KV boundary. Cache handles never cross this interface: the
|
|
74
|
+
* implementation maps the eligibility fingerprint to volatile native state.
|
|
75
|
+
*/
|
|
76
|
+
export interface LocalKvRuntimePort {
|
|
77
|
+
tryReuse(request: LocalKvRuntimeRequest): Promise<LocalKvReuseAttempt>;
|
|
78
|
+
fullReplay(request: LocalKvRuntimeRequest): Promise<LocalKvFullReplayResult>;
|
|
79
|
+
shutdown?(): Promise<void>;
|
|
80
|
+
}
|
|
81
|
+
export interface LocalKvCompletionInput<T = unknown> extends LocalKvEligibilityInput {
|
|
82
|
+
payload: T;
|
|
83
|
+
}
|
|
84
|
+
export interface LocalKvCompletionMetadata {
|
|
85
|
+
mode: "hit" | "full-replay";
|
|
86
|
+
prefixTokens: number;
|
|
87
|
+
contextTokens: number;
|
|
88
|
+
savedPrefillTokens: number;
|
|
89
|
+
replayPrefillTokens: number;
|
|
90
|
+
prefillLatencyMs: number;
|
|
91
|
+
}
|
|
92
|
+
export type LocalKvCompletionResult = {
|
|
93
|
+
status: "completed";
|
|
94
|
+
output: unknown;
|
|
95
|
+
metadata: LocalKvCompletionMetadata;
|
|
96
|
+
} | {
|
|
97
|
+
status: "ineligible";
|
|
98
|
+
reason: LocalKvIneligibilityReason;
|
|
99
|
+
};
|
|
100
|
+
export interface LocalKvReuseDiagnostics {
|
|
101
|
+
version: typeof LOCAL_KV_DIAGNOSTICS_VERSION;
|
|
102
|
+
requests: number;
|
|
103
|
+
eligibleRequests: number;
|
|
104
|
+
bypassedRequests: number;
|
|
105
|
+
hits: number;
|
|
106
|
+
misses: number;
|
|
107
|
+
rejected: number;
|
|
108
|
+
unavailable: number;
|
|
109
|
+
fullReplays: number;
|
|
110
|
+
transportFailures: number;
|
|
111
|
+
prefixTokens: number;
|
|
112
|
+
contextTokens: number;
|
|
113
|
+
savedPrefillTokens: number;
|
|
114
|
+
replayPrefillTokens: number;
|
|
115
|
+
replayPrefillLatencyMs: number;
|
|
116
|
+
}
|
|
117
|
+
export declare function deriveLocalKvEligibility(input: LocalKvEligibilityInput): LocalKvEligibilityResult;
|
|
118
|
+
/** Volatile aggregate controller; it stores no prompt, fingerprint, or cache handle. */
|
|
119
|
+
export declare class LocalKvReuseController {
|
|
120
|
+
private aggregate;
|
|
121
|
+
diagnostics(): LocalKvReuseDiagnostics;
|
|
122
|
+
resetDiagnostics(): void;
|
|
123
|
+
complete<T>(input: LocalKvCompletionInput<T>, port: LocalKvRuntimePort): Promise<LocalKvCompletionResult>;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=local-kv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-kv.d.ts","sourceRoot":"","sources":["../../src/adapter/local-kv.ts"],"names":[],"mappings":"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"}
|