ds4-context-core 0.1.1 → 0.2.0-beta.1

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.
Files changed (121) hide show
  1. package/README.md +17 -4
  2. package/dist/adapter/conformance.d.ts +35 -0
  3. package/dist/adapter/conformance.d.ts.map +1 -0
  4. package/dist/adapter/conformance.js +260 -0
  5. package/dist/adapter/conformance.js.map +1 -0
  6. package/dist/adapter/runtime-adapter.d.ts +119 -0
  7. package/dist/adapter/runtime-adapter.d.ts.map +1 -0
  8. package/dist/adapter/runtime-adapter.js +289 -0
  9. package/dist/adapter/runtime-adapter.js.map +1 -0
  10. package/dist/config/config-loader.d.ts +1 -0
  11. package/dist/config/config-loader.d.ts.map +1 -1
  12. package/dist/config/config-loader.js +107 -1
  13. package/dist/config/config-loader.js.map +1 -1
  14. package/dist/config/config.d.ts +45 -0
  15. package/dist/config/config.d.ts.map +1 -1
  16. package/dist/config/config.js +28 -0
  17. package/dist/config/config.js.map +1 -1
  18. package/dist/core/canonical-message.d.ts +2 -1
  19. package/dist/core/canonical-message.d.ts.map +1 -1
  20. package/dist/index.d.ts +12 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +12 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/manifest/context-manifest.d.ts +12 -0
  25. package/dist/manifest/context-manifest.d.ts.map +1 -1
  26. package/dist/memory/memory-manager.d.ts +7 -1
  27. package/dist/memory/memory-manager.d.ts.map +1 -1
  28. package/dist/memory/memory-manager.js +100 -3
  29. package/dist/memory/memory-manager.js.map +1 -1
  30. package/dist/memory/memory-types.d.ts +43 -0
  31. package/dist/memory/memory-types.d.ts.map +1 -1
  32. package/dist/memory/memory-types.js.map +1 -1
  33. package/dist/persistence/migrations.d.ts +2 -1
  34. package/dist/persistence/migrations.d.ts.map +1 -1
  35. package/dist/persistence/migrations.js +155 -25
  36. package/dist/persistence/migrations.js.map +1 -1
  37. package/dist/persistence/repositories/artifact-repository.d.ts +3 -1
  38. package/dist/persistence/repositories/artifact-repository.d.ts.map +1 -1
  39. package/dist/persistence/repositories/artifact-repository.js +16 -27
  40. package/dist/persistence/repositories/artifact-repository.js.map +1 -1
  41. package/dist/persistence/repositories/context-manifest-repository.d.ts +3 -1
  42. package/dist/persistence/repositories/context-manifest-repository.d.ts.map +1 -1
  43. package/dist/persistence/repositories/context-manifest-repository.js +10 -18
  44. package/dist/persistence/repositories/context-manifest-repository.js.map +1 -1
  45. package/dist/persistence/repositories/context-quality-repository.d.ts +21 -0
  46. package/dist/persistence/repositories/context-quality-repository.d.ts.map +1 -0
  47. package/dist/persistence/repositories/context-quality-repository.js +83 -0
  48. package/dist/persistence/repositories/context-quality-repository.js.map +1 -0
  49. package/dist/persistence/repositories/embedding-repository.d.ts +37 -0
  50. package/dist/persistence/repositories/embedding-repository.d.ts.map +1 -0
  51. package/dist/persistence/repositories/embedding-repository.js +142 -0
  52. package/dist/persistence/repositories/embedding-repository.js.map +1 -0
  53. package/dist/persistence/repositories/lease-repository.d.ts +22 -0
  54. package/dist/persistence/repositories/lease-repository.d.ts.map +1 -0
  55. package/dist/persistence/repositories/lease-repository.js +113 -0
  56. package/dist/persistence/repositories/lease-repository.js.map +1 -0
  57. package/dist/persistence/repositories/memory-repository.d.ts +34 -3
  58. package/dist/persistence/repositories/memory-repository.d.ts.map +1 -1
  59. package/dist/persistence/repositories/memory-repository.js +426 -64
  60. package/dist/persistence/repositories/memory-repository.js.map +1 -1
  61. package/dist/persistence/repositories/project-knowledge-repository.d.ts +28 -5
  62. package/dist/persistence/repositories/project-knowledge-repository.d.ts.map +1 -1
  63. package/dist/persistence/repositories/project-knowledge-repository.js +123 -53
  64. package/dist/persistence/repositories/project-knowledge-repository.js.map +1 -1
  65. package/dist/persistence/repositories/session-index-repository.d.ts +9 -1
  66. package/dist/persistence/repositories/session-index-repository.d.ts.map +1 -1
  67. package/dist/persistence/repositories/session-index-repository.js +38 -17
  68. package/dist/persistence/repositories/session-index-repository.js.map +1 -1
  69. package/dist/persistence/repositories/summary-repository.d.ts +3 -1
  70. package/dist/persistence/repositories/summary-repository.d.ts.map +1 -1
  71. package/dist/persistence/repositories/summary-repository.js +35 -31
  72. package/dist/persistence/repositories/summary-repository.js.map +1 -1
  73. package/dist/persistence/sqlite.d.ts +10 -0
  74. package/dist/persistence/sqlite.d.ts.map +1 -1
  75. package/dist/persistence/sqlite.js +41 -12
  76. package/dist/persistence/sqlite.js.map +1 -1
  77. package/dist/persistence/write-coordinator.d.ts +37 -0
  78. package/dist/persistence/write-coordinator.d.ts.map +1 -0
  79. package/dist/persistence/write-coordinator.js +120 -0
  80. package/dist/persistence/write-coordinator.js.map +1 -0
  81. package/dist/planner/context-planner.d.ts +5 -0
  82. package/dist/planner/context-planner.d.ts.map +1 -1
  83. package/dist/planner/context-planner.js +41 -62
  84. package/dist/planner/context-planner.js.map +1 -1
  85. package/dist/project/file-indexer.d.ts +5 -3
  86. package/dist/project/file-indexer.d.ts.map +1 -1
  87. package/dist/project/file-indexer.js +108 -42
  88. package/dist/project/file-indexer.js.map +1 -1
  89. package/dist/project/project-knowledge.d.ts +15 -3
  90. package/dist/project/project-knowledge.d.ts.map +1 -1
  91. package/dist/project/project-knowledge.js +168 -42
  92. package/dist/project/project-knowledge.js.map +1 -1
  93. package/dist/project/symbol-parser.d.ts +48 -0
  94. package/dist/project/symbol-parser.d.ts.map +1 -0
  95. package/dist/project/symbol-parser.js +427 -0
  96. package/dist/project/symbol-parser.js.map +1 -0
  97. package/dist/quality/context-quality.d.ts +172 -0
  98. package/dist/quality/context-quality.d.ts.map +1 -0
  99. package/dist/quality/context-quality.js +624 -0
  100. package/dist/quality/context-quality.js.map +1 -0
  101. package/dist/ranking/learned-ranker.d.ts +174 -0
  102. package/dist/ranking/learned-ranker.d.ts.map +1 -0
  103. package/dist/ranking/learned-ranker.js +782 -0
  104. package/dist/ranking/learned-ranker.js.map +1 -0
  105. package/dist/retrieval/embedding.d.ts +92 -0
  106. package/dist/retrieval/embedding.d.ts.map +1 -0
  107. package/dist/retrieval/embedding.js +56 -0
  108. package/dist/retrieval/embedding.js.map +1 -0
  109. package/dist/retrieval/retrieval-engine.d.ts +9 -1
  110. package/dist/retrieval/retrieval-engine.d.ts.map +1 -1
  111. package/dist/retrieval/retrieval-engine.js +105 -7
  112. package/dist/retrieval/retrieval-engine.js.map +1 -1
  113. package/dist/retrieval/semantic-index.d.ts +30 -0
  114. package/dist/retrieval/semantic-index.d.ts.map +1 -0
  115. package/dist/retrieval/semantic-index.js +284 -0
  116. package/dist/retrieval/semantic-index.js.map +1 -0
  117. package/dist/retrieval/semantic-quality.d.ts +52 -0
  118. package/dist/retrieval/semantic-quality.d.ts.map +1 -0
  119. package/dist/retrieval/semantic-quality.js +117 -0
  120. package/dist/retrieval/semantic-quality.js.map +1 -0
  121. package/package.json +1 -1
package/README.md CHANGED
@@ -6,16 +6,21 @@ 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;
9
10
  - canonical messages and token estimation;
10
11
  - model profiles, calibration and context budgets;
11
12
  - deterministic planning and atomic tool groups;
12
13
  - Context Manifest generation;
13
14
  - validated hierarchical compaction records;
14
- - exact and FTS retrieval;
15
+ - exact, FTS and deterministic hybrid rank fusion;
16
+ - runtime-neutral embedding port, derived vector storage and quality comparison;
17
+ - runtime-neutral structural symbol parsing with deterministic regex fallback;
15
18
  - project knowledge and artifact storage;
16
19
  - append-only memory and pin materialization;
17
20
  - privacy classification and provider policy;
18
21
  - optional continuation state decisions;
22
+ - deterministic metadata-only context-quality replay and comparison;
23
+ - bounded learned-ranking features, local training, checksummed artifacts and promotion evaluation;
19
24
  - rebuildable SQLite repositories.
20
25
 
21
26
  ## Install
@@ -49,6 +54,13 @@ Fine-grained ESM subpath exports are available, for example:
49
54
 
50
55
  ```ts
51
56
  import { planManagedContext } from "ds4-context-core/planner/context-planner";
57
+ import { compareQualityStrategies } from "ds4-context-core/quality/context-quality";
58
+ import { DeterministicRegexSymbolParser } from "ds4-context-core/project/symbol-parser";
59
+ import type { EmbeddingPort } from "ds4-context-core/retrieval/embedding";
60
+ import { SemanticEmbeddingIndex } from "ds4-context-core/retrieval/semantic-index";
61
+ import { rankCandidates } from "ds4-context-core/ranking/learned-ranker";
62
+ import { runRuntimeAdapterConformance } from "ds4-context-core/adapter/conformance";
63
+ import { negotiateRuntimeCapabilities } from "ds4-context-core/adapter/runtime-adapter";
52
64
  ```
53
65
 
54
66
  ## Adapter boundary
@@ -59,11 +71,12 @@ An adapter is responsible for:
59
71
  2. identifying the active session, branch, provider and model;
60
72
  3. supplying canonical history and project trust state;
61
73
  4. applying the planned context through runtime hooks;
62
- 5. invoking model completion for generated summaries;
74
+ 5. invoking model completion while enforcing privacy immediately before transport;
63
75
  6. persisting canonical mutations in the runtime's own history;
64
- 7. failing back to the runtime's native context path when integration fails.
76
+ 7. negotiating optional runtime capabilities independently;
77
+ 8. shutting down idempotently and falling back to the native runtime path on integration failure.
65
78
 
66
- The Pi implementation lives in the root `ds4-context-engine` package under `src/pi-adapter` and `src/extension`.
79
+ 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
80
 
68
81
  ## Portability guarantee
69
82
 
@@ -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,119 @@
1
+ import type { CanonicalMessage } from "../core/canonical-message.ts";
2
+ import type { ModelDescriptor } from "../core/model-profile.ts";
3
+ import type { EmbeddingPort } from "../retrieval/embedding.ts";
4
+ export declare const RUNTIME_ADAPTER_CONTRACT_VERSION: "runtime-adapter-v1";
5
+ export declare const RUNTIME_HISTORY_SCHEMA_VERSION: "runtime-history-v1";
6
+ export declare const RUNTIME_CAPABILITY_IDS: readonly ["compaction", "provider-continuation", "embeddings", "local-kv-reuse"];
7
+ export type RuntimeCapabilityId = typeof RUNTIME_CAPABILITY_IDS[number];
8
+ export type RuntimeDiagnosticSeverity = "info" | "warning" | "error";
9
+ export interface RuntimeAdapterIdentity {
10
+ runtimeId: string;
11
+ adapterName: string;
12
+ adapterVersion: string;
13
+ contractVersion: typeof RUNTIME_ADAPTER_CONTRACT_VERSION;
14
+ }
15
+ export interface RuntimeCapabilityDeclaration {
16
+ id: RuntimeCapabilityId;
17
+ supported: boolean;
18
+ version?: string;
19
+ reason?: string;
20
+ }
21
+ export interface RuntimeCapabilityRequest {
22
+ id: RuntimeCapabilityId;
23
+ required?: boolean;
24
+ }
25
+ export interface RuntimeCapabilityStatus extends RuntimeCapabilityDeclaration {
26
+ requested: boolean;
27
+ required: boolean;
28
+ enabled: boolean;
29
+ }
30
+ export interface RuntimeAdapterDiagnostic {
31
+ code: string;
32
+ severity: RuntimeDiagnosticSeverity;
33
+ message: string;
34
+ capability?: RuntimeCapabilityId;
35
+ }
36
+ export interface RuntimeCapabilityNegotiation {
37
+ contractVersion: typeof RUNTIME_ADAPTER_CONTRACT_VERSION;
38
+ statuses: RuntimeCapabilityStatus[];
39
+ enabled: RuntimeCapabilityId[];
40
+ disabled: RuntimeCapabilityId[];
41
+ diagnostics: RuntimeAdapterDiagnostic[];
42
+ }
43
+ export interface RuntimeToolAtomicGroup {
44
+ id: string;
45
+ messageIds: string[];
46
+ toolCallIds: string[];
47
+ complete: boolean;
48
+ }
49
+ export interface RuntimeHistorySnapshot {
50
+ schemaVersion: typeof RUNTIME_HISTORY_SCHEMA_VERSION;
51
+ runtimeId: string;
52
+ sessionId: string;
53
+ revision: string;
54
+ projectRoot: string;
55
+ messages: CanonicalMessage[];
56
+ toolAtomicGroups: RuntimeToolAtomicGroup[];
57
+ }
58
+ export interface RuntimeHistoryValidationIssue {
59
+ code: string;
60
+ message: string;
61
+ messageId?: string;
62
+ toolCallId?: string;
63
+ }
64
+ export interface RuntimePrivacyRequest<T = unknown> {
65
+ provider: string;
66
+ payload: T;
67
+ }
68
+ export interface RuntimePrivacyResult<T = unknown> {
69
+ provider: string;
70
+ destination: "local" | "remote";
71
+ payload: T;
72
+ changed: boolean;
73
+ blockedBlocks: number;
74
+ secretRedactions: number;
75
+ }
76
+ export interface RuntimeCompletionRequest<T = unknown> {
77
+ provider: string;
78
+ model: string;
79
+ payload: T;
80
+ }
81
+ export interface RuntimeCompletionTransportRequest<T = unknown> {
82
+ provider: string;
83
+ model: string;
84
+ destination: "local" | "remote";
85
+ payload: T;
86
+ }
87
+ export type RuntimeCompletionTransport = (request: RuntimeCompletionTransportRequest) => Promise<unknown>;
88
+ export type RuntimeCompletionResult = {
89
+ status: "completed";
90
+ output: unknown;
91
+ privacy: Omit<RuntimePrivacyResult, "payload">;
92
+ } | {
93
+ status: "fallback";
94
+ code: "adapter-closed" | "invalid-request" | "privacy-enforcement-failed" | "transport-failed";
95
+ reason: string;
96
+ retryable: boolean;
97
+ };
98
+ /**
99
+ * Runtime-facing DS4 boundary. Implementations own native history conversion,
100
+ * completion transport and lifecycle integration; core owns only this neutral contract.
101
+ */
102
+ export interface RuntimeAdapter {
103
+ readonly identity: RuntimeAdapterIdentity;
104
+ readonly embeddingPort?: EmbeddingPort;
105
+ capabilityDeclarations(): readonly RuntimeCapabilityDeclaration[];
106
+ negotiateCapabilities(requested: readonly RuntimeCapabilityRequest[]): RuntimeCapabilityNegotiation;
107
+ snapshotHistory(): Promise<RuntimeHistorySnapshot>;
108
+ rebuildDerivedState(): Promise<RuntimeHistorySnapshot>;
109
+ currentModel(): Promise<ModelDescriptor | undefined>;
110
+ trustedProjectRoot(): Promise<string>;
111
+ enforcePrivacy<T>(request: RuntimePrivacyRequest<T>): Promise<RuntimePrivacyResult<T>>;
112
+ complete<T>(request: RuntimeCompletionRequest<T>): Promise<RuntimeCompletionResult>;
113
+ diagnostics(): readonly RuntimeAdapterDiagnostic[];
114
+ shutdown(): Promise<void>;
115
+ }
116
+ export declare function negotiateRuntimeCapabilities(declarations: readonly RuntimeCapabilityDeclaration[], requested: readonly RuntimeCapabilityRequest[]): RuntimeCapabilityNegotiation;
117
+ export declare function buildCanonicalToolAtomicGroups(messages: readonly CanonicalMessage[]): RuntimeToolAtomicGroup[];
118
+ export declare function validateRuntimeHistorySnapshot(snapshot: RuntimeHistorySnapshot): RuntimeHistoryValidationIssue[];
119
+ //# sourceMappingURL=runtime-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/runtime-adapter.ts"],"names":[],"mappings":"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"}