@oscharko-dev/keiko-contracts 0.2.6 → 0.2.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"connected-context.d.ts","sourceRoot":"","sources":["../src/connected-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connected-context.d.ts","sourceRoot":"","sources":["../src/connected-context.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  // EVIDENCE_SCHEMA_VERSION (ADR-0010 D2): a breaking change introduces a NEW literal member
6
6
  // rather than mutating "1". Leaf-package rule (ADR-0019 direction 1) means no
7
7
  // `@oscharko-dev/keiko-*` imports may appear in this module.
8
+ import { validateContextBudget } from "./context-engineering-validation.js";
8
9
  // ─── Schema version ───────────────────────────────────────────────────────────
9
10
  export const CONNECTED_CONTEXT_SCHEMA_VERSION = "1";
10
11
  export const SELECTED_SCOPE_KINDS = [
@@ -68,6 +69,10 @@ export const UNCERTAINTY_MARKER_KINDS = [
68
69
  "tool-unavailable",
69
70
  "low-confidence",
70
71
  ];
72
+ // ─── Explainable ranking diagnostics (enterprise retrieval M2) ──────────────────
73
+ // Upper bound on how many ranked candidates carry an explainability breakdown (mirrors the
74
+ // workspace-layer cap in repoSearchPolicy.MAX_RANKED_CANDIDATE_DIAGNOSTICS).
75
+ export const MAX_RANKED_CANDIDATE_DIAGNOSTICS = 25;
71
76
  // Module-scope regex (avoid per-call allocation; safe — no backtracking risk).
72
77
  const WINDOWS_DRIVE_RE = /^[A-Za-z]:/;
73
78
  const WINDOWS_DRIVE_ABSOLUTE_RE = /^[A-Za-z]:[\\/]/;
@@ -632,5 +637,49 @@ export function validateConnectedContextPack(pack) {
632
637
  if (pack.ledgerRef !== undefined) {
633
638
  validateLedgerRef(pack.ledgerRef, reasons, "pack");
634
639
  }
640
+ // Additive, guarded: legacy packs without diagnostics validate exactly as before.
641
+ if (pack.diagnostics !== undefined) {
642
+ validatePackDiagnostics(pack.diagnostics, reasons);
643
+ }
635
644
  return buildResult(reasons);
636
645
  }
646
+ function isCandidateSignal(value) {
647
+ return (isRecord(value) &&
648
+ typeof value.name === "string" &&
649
+ value.name.length > 0 &&
650
+ typeof value.value === "number" &&
651
+ Number.isFinite(value.value));
652
+ }
653
+ function validatePackDiagnostics(diagnostics, reasons) {
654
+ if (!isRecord(diagnostics) || !Array.isArray(diagnostics.rankedCandidates)) {
655
+ reasons.push("pack.diagnostics.rankedCandidates invalid");
656
+ return;
657
+ }
658
+ const ranked = diagnostics.rankedCandidates;
659
+ pushIf(reasons, ranked.length > MAX_RANKED_CANDIDATE_DIAGNOSTICS, `pack.diagnostics.rankedCandidates exceeds ${String(MAX_RANKED_CANDIDATE_DIAGNOSTICS)}`);
660
+ for (const entry of ranked) {
661
+ if (!isRecord(entry)) {
662
+ reasons.push("pack.diagnostics.rankedCandidates entry invalid");
663
+ continue;
664
+ }
665
+ pushIf(reasons, !isNonEmptyTrimmed(entry.scopePath), "rankedCandidate.scopePath empty");
666
+ pushIf(reasons, !isNonEmptyTrimmed(entry.bucket), "rankedCandidate.bucket empty");
667
+ pushIf(reasons, typeof entry.score !== "number" || !Number.isFinite(entry.score), "rankedCandidate.score invalid");
668
+ pushIf(reasons, entry.ecosystem !== undefined && !isNonEmptyTrimmed(entry.ecosystem), "rankedCandidate.ecosystem invalid");
669
+ pushIf(reasons, !Array.isArray(entry.signals) || !entry.signals.every(isCandidateSignal), "rankedCandidate.signals invalid");
670
+ }
671
+ // Additive, guarded: legacy diagnostics without contextBudget validate exactly as before.
672
+ validateDiagnosticsContextBudget(diagnostics.contextBudget, reasons);
673
+ }
674
+ function validateDiagnosticsContextBudget(contextBudget, reasons) {
675
+ if (contextBudget === undefined) {
676
+ return;
677
+ }
678
+ const budgetResult = validateContextBudget(contextBudget);
679
+ if (budgetResult.ok) {
680
+ return;
681
+ }
682
+ for (const reason of budgetResult.reasons) {
683
+ reasons.push(`pack.diagnostics.contextBudget: ${reason}`);
684
+ }
685
+ }
@@ -0,0 +1,11 @@
1
+ import type { ContextProvenanceRefKind } from "./context-engineering.js";
2
+ import type { ContextValidationResult } from "./context-engineering-validation.js";
3
+ export declare function isContextProvenanceRefKind(value: unknown): value is ContextProvenanceRefKind;
4
+ export declare function validateContextProvenanceRef(value: unknown): ContextValidationResult;
5
+ export declare function validateContextPreservedFact(value: unknown): ContextValidationResult;
6
+ export declare function validateContextAssumption(value: unknown): ContextValidationResult;
7
+ export declare function validateContextCommandOutcome(value: unknown): ContextValidationResult;
8
+ export declare function validateContextInvalidationKey(value: unknown): ContextValidationResult;
9
+ export declare function validateContextRehydrationHandle(value: unknown): ContextValidationResult;
10
+ export declare function validateContextCompactionRecord(value: unknown): ContextValidationResult;
11
+ //# sourceMappingURL=context-engineering-compaction-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-engineering-compaction-validation.d.ts","sourceRoot":"","sources":["../src/context-engineering-compaction-validation.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AA6CnF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,wBAAwB,CAE5F;AA8CD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAEpF;AAwCD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAEpF;AAkBD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAEjF;AA8BD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAErF;AAaD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAEtF;AAwDD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAExF;AA6FD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAQvF"}
@@ -0,0 +1,270 @@
1
+ // Pure structural validators for the PR2 rich compaction vocabulary (ADR-0053). No filesystem,
2
+ // no clock, no crypto, no randomness — every helper inspects the structure of an `unknown`
3
+ // payload and reports which invariants failed. Split from context-engineering-validation.ts to
4
+ // keep both files under the 400-LOC budget (mirrors the memory-validation split).
5
+ //
6
+ // REFINEMENT 1 (anti-poisoning): validateContextPreservedFact rejects a "fact" that has neither a
7
+ // sourceRef nor inferred===true. REFINEMENT 2: the rehydration handle carries an excerpt-content
8
+ // hash, validated as a string when present. Assumptions (rationale + confidence) and facts
9
+ // (statement + sourceRef/inferred) are validated as structurally distinct shapes.
10
+ import { CONTEXT_ENGINEERING_SCHEMA_VERSION } from "./context-engineering.js";
11
+ import { isContextLaneId } from "./context-engineering-validation.js";
12
+ const PROVENANCE_REF_KINDS = [
13
+ "repo-file",
14
+ "tool-result",
15
+ "evidence-atom",
16
+ "message",
17
+ ];
18
+ const ASSUMPTION_CONFIDENCES = ["low", "medium", "high"];
19
+ const COMMAND_OUTCOME_SUMMARY_MAX_CHARS = 200;
20
+ // ─── Shared primitives (local; contracts is a leaf, no shared-util import) ──────
21
+ function isRecord(value) {
22
+ return typeof value === "object" && value !== null;
23
+ }
24
+ function isFiniteNumber(value) {
25
+ return typeof value === "number" && Number.isFinite(value);
26
+ }
27
+ function isNonEmptyTrimmed(value) {
28
+ return typeof value === "string" && value.trim().length > 0;
29
+ }
30
+ function isOptionalNonEmptyString(value) {
31
+ return value === undefined || isNonEmptyTrimmed(value);
32
+ }
33
+ function pushIf(reasons, condition, reason) {
34
+ if (condition) {
35
+ reasons.push(reason);
36
+ }
37
+ }
38
+ function buildResult(reasons) {
39
+ return reasons.length === 0 ? { ok: true } : { ok: false, reasons };
40
+ }
41
+ function schemaMismatch(actual) {
42
+ return actual !== CONTEXT_ENGINEERING_SCHEMA_VERSION;
43
+ }
44
+ // ─── ContextProvenanceRefKind ──────────────────────────────────────────────────
45
+ export function isContextProvenanceRefKind(value) {
46
+ return typeof value === "string" && PROVENANCE_REF_KINDS.includes(value);
47
+ }
48
+ // ─── lineRange (shared by ref + rehydration handle) ─────────────────────────────
49
+ function collectLineRange(value, prefix) {
50
+ if (value === undefined) {
51
+ return [];
52
+ }
53
+ if (!isRecord(value)) {
54
+ return [`${prefix}.lineRange invalid`];
55
+ }
56
+ const { startLine, endLine } = value;
57
+ if (!isFiniteNumber(startLine) ||
58
+ !isFiniteNumber(endLine) ||
59
+ startLine < 1 ||
60
+ endLine < startLine) {
61
+ return [`${prefix}.lineRange invalid`];
62
+ }
63
+ return [];
64
+ }
65
+ // ─── ContextProvenanceRef ────────────────────────────────────────────────────────
66
+ function collectProvenanceRef(value, prefix) {
67
+ if (!isRecord(value)) {
68
+ return [`${prefix} invalid`];
69
+ }
70
+ const reasons = [];
71
+ pushIf(reasons, !isContextProvenanceRefKind(value.kind), `${prefix}.kind invalid`);
72
+ pushIf(reasons, !isNonEmptyTrimmed(value.stableId), `${prefix}.stableId invalid`);
73
+ pushIf(reasons, !isOptionalNonEmptyString(value.scopePath), `${prefix}.scopePath invalid`);
74
+ pushIf(reasons, !isOptionalNonEmptyString(value.contentHash), `${prefix}.contentHash invalid`);
75
+ pushIf(reasons, !isOptionalNonEmptyString(value.evidenceAtomId), `${prefix}.evidenceAtomId invalid`);
76
+ pushIf(reasons, !isOptionalNonEmptyString(value.notPersistedReason), `${prefix}.notPersistedReason invalid`);
77
+ reasons.push(...collectLineRange(value.lineRange, prefix));
78
+ return reasons;
79
+ }
80
+ export function validateContextProvenanceRef(value) {
81
+ return buildResult(collectProvenanceRef(value, "provenanceRef"));
82
+ }
83
+ function collectOptionalRef(value, prefix) {
84
+ return value === undefined ? [] : collectProvenanceRef(value, prefix);
85
+ }
86
+ function collectRefArray(value, prefix) {
87
+ if (value === undefined) {
88
+ return [];
89
+ }
90
+ if (!Array.isArray(value)) {
91
+ return [`${prefix} invalid`];
92
+ }
93
+ const reasons = [];
94
+ value.forEach((entry, index) => {
95
+ reasons.push(...collectProvenanceRef(entry, `${prefix}[${String(index)}]`));
96
+ });
97
+ return reasons;
98
+ }
99
+ // ─── ContextPreservedFact (REFINEMENT 1: sourceRef OR inferred) ──────────────────
100
+ function collectPreservedFact(value, prefix) {
101
+ if (!isRecord(value)) {
102
+ return [`${prefix} invalid`];
103
+ }
104
+ const reasons = [];
105
+ pushIf(reasons, !isNonEmptyTrimmed(value.statement), `${prefix}.statement invalid`);
106
+ pushIf(reasons, value.inferred !== undefined && typeof value.inferred !== "boolean", `${prefix}.inferred invalid`);
107
+ const hasSource = value.sourceRef !== undefined;
108
+ const isInferred = value.inferred === true;
109
+ pushIf(reasons, !hasSource && !isInferred, `${prefix} requires sourceRef or inferred`);
110
+ reasons.push(...collectOptionalRef(value.sourceRef, `${prefix}.sourceRef`));
111
+ reasons.push(...collectRefArray(value.corroborating, `${prefix}.corroborating`));
112
+ return reasons;
113
+ }
114
+ export function validateContextPreservedFact(value) {
115
+ return buildResult(collectPreservedFact(value, "preservedFact"));
116
+ }
117
+ // ─── ContextAssumption (structurally distinct: rationale + confidence) ───────────
118
+ function collectAssumption(value, prefix) {
119
+ if (!isRecord(value)) {
120
+ return [`${prefix} invalid`];
121
+ }
122
+ const reasons = [];
123
+ pushIf(reasons, !isNonEmptyTrimmed(value.statement), `${prefix}.statement invalid`);
124
+ pushIf(reasons, !isNonEmptyTrimmed(value.rationale), `${prefix}.rationale invalid`);
125
+ pushIf(reasons, typeof value.confidence !== "string" || !ASSUMPTION_CONFIDENCES.includes(value.confidence), `${prefix}.confidence invalid`);
126
+ return reasons;
127
+ }
128
+ export function validateContextAssumption(value) {
129
+ return buildResult(collectAssumption(value, "assumption"));
130
+ }
131
+ // ─── ContextUserConstraint ───────────────────────────────────────────────────────
132
+ function collectUserConstraint(value, prefix) {
133
+ if (!isRecord(value)) {
134
+ return [`${prefix} invalid`];
135
+ }
136
+ const reasons = [];
137
+ pushIf(reasons, !isNonEmptyTrimmed(value.statement), `${prefix}.statement invalid`);
138
+ reasons.push(...collectOptionalRef(value.sourceRef, `${prefix}.sourceRef`));
139
+ return reasons;
140
+ }
141
+ // ─── ContextCommandOutcome (summary <= 200 chars) ────────────────────────────────
142
+ function collectCommandOutcome(value, prefix) {
143
+ if (!isRecord(value)) {
144
+ return [`${prefix} invalid`];
145
+ }
146
+ const reasons = [];
147
+ pushIf(reasons, !isNonEmptyTrimmed(value.command), `${prefix}.command invalid`);
148
+ pushIf(reasons, !isFiniteNumber(value.exitCode), `${prefix}.exitCode invalid`);
149
+ const summary = value.summary;
150
+ pushIf(reasons, typeof summary !== "string" || summary.length > COMMAND_OUTCOME_SUMMARY_MAX_CHARS, `${prefix}.summary invalid`);
151
+ return reasons;
152
+ }
153
+ export function validateContextCommandOutcome(value) {
154
+ return buildResult(collectCommandOutcome(value, "commandOutcome"));
155
+ }
156
+ // ─── ContextInvalidationKey ──────────────────────────────────────────────────────
157
+ function collectInvalidationKey(value, prefix) {
158
+ if (!isRecord(value)) {
159
+ return [`${prefix} invalid`];
160
+ }
161
+ const reasons = [];
162
+ pushIf(reasons, !isNonEmptyTrimmed(value.scopePath), `${prefix}.scopePath invalid`);
163
+ pushIf(reasons, !isNonEmptyTrimmed(value.contentHash), `${prefix}.contentHash invalid`);
164
+ return reasons;
165
+ }
166
+ export function validateContextInvalidationKey(value) {
167
+ return buildResult(collectInvalidationKey(value, "invalidationKey"));
168
+ }
169
+ // ─── ContextRehydrationHandle ────────────────────────────────────────────────────
170
+ function collectHandleBase(value, prefix) {
171
+ const reasons = [];
172
+ pushIf(reasons, schemaMismatch(value.schemaVersion), `${prefix}.schemaVersion mismatch`);
173
+ pushIf(reasons, !isContextLaneId(value.laneId), `${prefix}.laneId invalid`);
174
+ pushIf(reasons, !isNonEmptyTrimmed(value.handleId), `${prefix}.handleId invalid`);
175
+ pushIf(reasons, !isFiniteNumber(value.itemCount) || value.itemCount < 0, `${prefix}.itemCount invalid`);
176
+ pushIf(reasons, !isFiniteNumber(value.approxTokens) || value.approxTokens < 0, `${prefix}.approxTokens invalid`);
177
+ return reasons;
178
+ }
179
+ function collectHandleOptionals(value, prefix) {
180
+ const reasons = [];
181
+ pushIf(reasons, value.kind !== undefined && !isContextProvenanceRefKind(value.kind), `${prefix}.kind invalid`);
182
+ pushIf(reasons, !isOptionalNonEmptyString(value.scopePath), `${prefix}.scopePath invalid`);
183
+ pushIf(reasons, !isOptionalNonEmptyString(value.contentHash), `${prefix}.contentHash invalid`);
184
+ pushIf(reasons, !isOptionalNonEmptyString(value.evidenceAtomId), `${prefix}.evidenceAtomId invalid`);
185
+ pushIf(reasons, !isOptionalNonEmptyString(value.notPersistedReason), `${prefix}.notPersistedReason invalid`);
186
+ pushIf(reasons, value.approvedSummary !== undefined && typeof value.approvedSummary !== "string", `${prefix}.approvedSummary invalid`);
187
+ reasons.push(...collectLineRange(value.lineRange, prefix));
188
+ return reasons;
189
+ }
190
+ function collectRehydrationHandle(value, prefix) {
191
+ if (!isRecord(value)) {
192
+ return [`${prefix} invalid`];
193
+ }
194
+ return [...collectHandleBase(value, prefix), ...collectHandleOptionals(value, prefix)];
195
+ }
196
+ export function validateContextRehydrationHandle(value) {
197
+ return buildResult(collectRehydrationHandle(value, "rehydrationHandle"));
198
+ }
199
+ // ─── ContextCompactionRecord ─────────────────────────────────────────────────────
200
+ function collectRecordRequired(value, prefix) {
201
+ const reasons = [];
202
+ pushIf(reasons, schemaMismatch(value.schemaVersion), `${prefix}.schemaVersion mismatch`);
203
+ pushIf(reasons, !isContextLaneId(value.laneId), `${prefix}.laneId invalid`);
204
+ pushIf(reasons, !isNonEmptyTrimmed(value.reason), `${prefix}.reason invalid`);
205
+ for (const key of ["itemsBefore", "itemsAfter", "tokensBefore", "tokensAfter"]) {
206
+ const n = value[key];
207
+ pushIf(reasons, !isFiniteNumber(n) || n < 0, `${prefix}.${key} invalid`);
208
+ }
209
+ pushIf(reasons, value.summaryRefHash !== undefined && typeof value.summaryRefHash !== "string", `${prefix}.summaryRefHash invalid`);
210
+ if (value.rehydration !== undefined) {
211
+ reasons.push(...collectRehydrationHandle(value.rehydration, `${prefix}.rehydration`));
212
+ }
213
+ return reasons;
214
+ }
215
+ function collectStringArray(value, prefix) {
216
+ if (value === undefined) {
217
+ return [];
218
+ }
219
+ if (!Array.isArray(value)) {
220
+ return [`${prefix} invalid`];
221
+ }
222
+ const reasons = [];
223
+ value.forEach((entry, index) => {
224
+ pushIf(reasons, typeof entry !== "string", `${prefix}[${String(index)}] invalid`);
225
+ });
226
+ return reasons;
227
+ }
228
+ function collectTypedArray(value, prefix, collect) {
229
+ if (value === undefined) {
230
+ return [];
231
+ }
232
+ if (!Array.isArray(value)) {
233
+ return [`${prefix} invalid`];
234
+ }
235
+ const reasons = [];
236
+ value.forEach((entry, index) => {
237
+ reasons.push(...collect(entry, `${prefix}[${String(index)}]`));
238
+ });
239
+ return reasons;
240
+ }
241
+ function collectRecordOptionals(value, prefix) {
242
+ const reasons = [];
243
+ pushIf(reasons, value.orderedAt !== undefined && !isFiniteNumber(value.orderedAt), `${prefix}.orderedAt invalid`);
244
+ reasons.push(...collectRefArray(value.sourceSpans, `${prefix}.sourceSpans`));
245
+ reasons.push(...collectTypedArray(value.preservedFacts, `${prefix}.preservedFacts`, collectPreservedFact));
246
+ reasons.push(...collectTypedArray(value.assumptions, `${prefix}.assumptions`, collectAssumption));
247
+ reasons.push(...collectTypedArray(value.userConstraints, `${prefix}.userConstraints`, collectUserConstraint));
248
+ reasons.push(...collectTypedArray(value.commandOutcomes, `${prefix}.commandOutcomes`, collectCommandOutcome));
249
+ reasons.push(...collectTypedArray(value.invalidationKeys, `${prefix}.invalidationKeys`, collectInvalidationKey));
250
+ for (const key of [
251
+ "decisions",
252
+ "openQuestions",
253
+ "filesInspected",
254
+ "filesChanged",
255
+ "failingTests",
256
+ "droppedCategories",
257
+ ]) {
258
+ reasons.push(...collectStringArray(value[key], `${prefix}.${key}`));
259
+ }
260
+ return reasons;
261
+ }
262
+ export function validateContextCompactionRecord(value) {
263
+ if (!isRecord(value)) {
264
+ return buildResult(["compactionRecord invalid"]);
265
+ }
266
+ return buildResult([
267
+ ...collectRecordRequired(value, "compactionRecord"),
268
+ ...collectRecordOptionals(value, "compactionRecord"),
269
+ ]);
270
+ }
@@ -0,0 +1,12 @@
1
+ import type { ContextLaneId } from "./context-engineering.js";
2
+ export type ContextValidationResult = {
3
+ readonly ok: true;
4
+ } | {
5
+ readonly ok: false;
6
+ readonly reasons: readonly string[];
7
+ };
8
+ export declare function isContextLaneId(value: unknown): value is ContextLaneId;
9
+ export declare function validateContextProfile(value: unknown): ContextValidationResult;
10
+ export declare function validateContextBudget(value: unknown): ContextValidationResult;
11
+ export declare function validateContextAssemblyDiagnostics(value: unknown): ContextValidationResult;
12
+ //# sourceMappingURL=context-engineering-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-engineering-validation.d.ts","sourceRoot":"","sources":["../src/context-engineering-validation.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,0BAA0B,CAAC;AAGlC,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GACrB;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAgChE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAsFD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAE9E;AAqBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAe7E;AAiDD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CA0B1F"}
@@ -0,0 +1,171 @@
1
+ // Pure structural validators for the context-engineering contracts (ADR-0052). No filesystem,
2
+ // no clock, no crypto, no randomness — every helper inspects the structure of an `unknown`
3
+ // payload and reports which invariants failed. Follows the connected-context.ts isRecord +
4
+ // predicate envelope. STRUCTURAL ONLY: shape, finite non-negative numbers, schemaVersion
5
+ // literal, enum membership, the effectiveInputBudget identity. Policy (e.g. "system-contract
6
+ // must be non-evictable") is NOT enforced here — that belongs to the allocator.
7
+ //
8
+ // Split from context-engineering.ts to keep both files under the 400-LOC budget (mirrors the
9
+ // memory-validation.ts / memory-operations-validation.ts split).
10
+ import { CONTEXT_ENGINEERING_SCHEMA_VERSION, CONTEXT_EVICTION_POLICIES, CONTEXT_LANE_IDS, } from "./context-engineering.js";
11
+ const BUDGET_PRESSURES = ["low", "moderate", "high", "exceeded"];
12
+ // ─── Shared primitives (local; contracts is a leaf, no shared-util import) ──────
13
+ function isRecord(value) {
14
+ return typeof value === "object" && value !== null;
15
+ }
16
+ function isFiniteNonNegativeNumber(value) {
17
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
18
+ }
19
+ function isNonEmptyTrimmed(value) {
20
+ return typeof value === "string" && value.trim().length > 0;
21
+ }
22
+ function pushIf(reasons, condition, reason) {
23
+ if (condition) {
24
+ reasons.push(reason);
25
+ }
26
+ }
27
+ function buildResult(reasons) {
28
+ return reasons.length === 0 ? { ok: true } : { ok: false, reasons };
29
+ }
30
+ function schemaMismatch(actual) {
31
+ return actual !== CONTEXT_ENGINEERING_SCHEMA_VERSION;
32
+ }
33
+ // ─── Enum guards ────────────────────────────────────────────────────────────────
34
+ export function isContextLaneId(value) {
35
+ return typeof value === "string" && CONTEXT_LANE_IDS.includes(value);
36
+ }
37
+ function isEvictionPolicy(value) {
38
+ return (typeof value === "string" && CONTEXT_EVICTION_POLICIES.includes(value));
39
+ }
40
+ function isBudgetPressure(value) {
41
+ return typeof value === "string" && BUDGET_PRESSURES.includes(value);
42
+ }
43
+ // ─── ContextProfile ─────────────────────────────────────────────────────────────
44
+ function collectProfileReasons(profile, prefix) {
45
+ const reasons = [];
46
+ pushIf(reasons, schemaMismatch(profile.schemaVersion), `${prefix}.schemaVersion mismatch`);
47
+ pushIf(reasons, !isFiniteNonNegativeNumber(profile.maxInputTokens), `${prefix}.maxInputTokens invalid`);
48
+ pushIf(reasons, !isFiniteNonNegativeNumber(profile.reservedOutputTokens), `${prefix}.reservedOutputTokens invalid`);
49
+ pushIf(reasons, !isFiniteNonNegativeNumber(profile.safetyMarginTokens), `${prefix}.safetyMarginTokens invalid`);
50
+ pushIf(reasons, !isFiniteNonNegativeNumber(profile.effectiveInputBudget), `${prefix}.effectiveInputBudget invalid`);
51
+ pushIf(reasons, !isNonEmptyTrimmed(profile.tokenEstimatorId), `${prefix}.tokenEstimatorId empty`);
52
+ return reasons;
53
+ }
54
+ function checkBudgetIdentity(profile, prefix) {
55
+ const max = profile.maxInputTokens;
56
+ const reserved = profile.reservedOutputTokens;
57
+ const safety = profile.safetyMarginTokens;
58
+ const effective = profile.effectiveInputBudget;
59
+ if (typeof max !== "number" ||
60
+ typeof reserved !== "number" ||
61
+ typeof safety !== "number" ||
62
+ typeof effective !== "number") {
63
+ return [];
64
+ }
65
+ const expected = Math.max(0, max - reserved - safety);
66
+ return effective === expected ? [] : [`${prefix}.effectiveInputBudget mismatch`];
67
+ }
68
+ function validateModelMetadata(value, prefix) {
69
+ if (value === undefined) {
70
+ return [];
71
+ }
72
+ if (!isRecord(value)) {
73
+ return [`${prefix}.model invalid`];
74
+ }
75
+ const reasons = [];
76
+ for (const key of ["id", "provider", "notes"]) {
77
+ const field = value[key];
78
+ pushIf(reasons, field !== undefined && typeof field !== "string", `${prefix}.model.${key} invalid`);
79
+ }
80
+ return reasons;
81
+ }
82
+ function collectProfile(value, prefix) {
83
+ if (!isRecord(value)) {
84
+ return [`${prefix} invalid`];
85
+ }
86
+ const reasons = collectProfileReasons(value, prefix);
87
+ reasons.push(...checkBudgetIdentity(value, prefix));
88
+ reasons.push(...validateModelMetadata(value.model, prefix));
89
+ return reasons;
90
+ }
91
+ export function validateContextProfile(value) {
92
+ return buildResult(collectProfile(value, "profile"));
93
+ }
94
+ // ─── ContextLaneBudget ────────────────────────────────────────────────────────
95
+ function collectLaneBudget(value, prefix) {
96
+ if (!isRecord(value)) {
97
+ return [`${prefix} invalid`];
98
+ }
99
+ const reasons = [];
100
+ pushIf(reasons, !isContextLaneId(value.laneId), `${prefix}.laneId invalid`);
101
+ pushIf(reasons, !isFiniteNonNegativeNumber(value.priority), `${prefix}.priority invalid`);
102
+ pushIf(reasons, !isFiniteNonNegativeNumber(value.maxTokens), `${prefix}.maxTokens invalid`);
103
+ pushIf(reasons, !isFiniteNonNegativeNumber(value.minReservedTokens), `${prefix}.minReservedTokens invalid`);
104
+ pushIf(reasons, !isEvictionPolicy(value.eviction), `${prefix}.eviction invalid`);
105
+ return reasons;
106
+ }
107
+ // ─── ContextBudget ──────────────────────────────────────────────────────────────
108
+ export function validateContextBudget(value) {
109
+ if (!isRecord(value)) {
110
+ return buildResult(["budget invalid"]);
111
+ }
112
+ const reasons = [];
113
+ pushIf(reasons, schemaMismatch(value.schemaVersion), "budget.schemaVersion mismatch");
114
+ reasons.push(...collectProfile(value.profile, "budget.profile"));
115
+ if (!Array.isArray(value.lanes)) {
116
+ reasons.push("budget.lanes invalid");
117
+ return buildResult(reasons);
118
+ }
119
+ value.lanes.forEach((lane, index) => {
120
+ reasons.push(...collectLaneBudget(lane, `budget.lanes[${String(index)}]`));
121
+ });
122
+ return buildResult(reasons);
123
+ }
124
+ // ─── ContextLaneDiagnostics ──────────────────────────────────────────────────────
125
+ function collectLaneDiagnostics(value, prefix) {
126
+ if (!isRecord(value)) {
127
+ return [`${prefix} invalid`];
128
+ }
129
+ const reasons = [];
130
+ pushIf(reasons, !isContextLaneId(value.laneId), `${prefix}.laneId invalid`);
131
+ pushIf(reasons, !isFiniteNonNegativeNumber(value.estimatedTokens), `${prefix}.estimatedTokens invalid`);
132
+ pushIf(reasons, !isFiniteNonNegativeNumber(value.includedItems), `${prefix}.includedItems invalid`);
133
+ pushIf(reasons, !isFiniteNonNegativeNumber(value.excludedItems), `${prefix}.excludedItems invalid`);
134
+ pushIf(reasons, !isBudgetPressure(value.budgetPressure), `${prefix}.budgetPressure invalid`);
135
+ pushIf(reasons, value.compactionReason !== undefined && typeof value.compactionReason !== "string", `${prefix}.compactionReason invalid`);
136
+ reasons.push(...collectProvenanceCounts(value.provenanceCounts, prefix));
137
+ return reasons;
138
+ }
139
+ function collectProvenanceCounts(value, prefix) {
140
+ if (value === undefined) {
141
+ return [];
142
+ }
143
+ if (!isRecord(value)) {
144
+ return [`${prefix}.provenanceCounts invalid`];
145
+ }
146
+ const reasons = [];
147
+ for (const count of Object.values(value)) {
148
+ pushIf(reasons, !isFiniteNonNegativeNumber(count), `${prefix}.provenanceCounts value invalid`);
149
+ }
150
+ return reasons;
151
+ }
152
+ // ─── ContextAssemblyDiagnostics ──────────────────────────────────────────────────
153
+ export function validateContextAssemblyDiagnostics(value) {
154
+ if (!isRecord(value)) {
155
+ return buildResult(["assembly invalid"]);
156
+ }
157
+ const reasons = [];
158
+ pushIf(reasons, schemaMismatch(value.schemaVersion), "assembly.schemaVersion mismatch");
159
+ reasons.push(...collectProfile(value.profile, "assembly.profile"));
160
+ pushIf(reasons, !isFiniteNonNegativeNumber(value.totalEstimatedTokens), "assembly.totalEstimatedTokens invalid");
161
+ pushIf(reasons, !isBudgetPressure(value.budgetPressure), "assembly.budgetPressure invalid");
162
+ pushIf(reasons, typeof value.orderedForRecency !== "boolean", "assembly.orderedForRecency invalid");
163
+ if (!Array.isArray(value.lanes)) {
164
+ reasons.push("assembly.lanes invalid");
165
+ return buildResult(reasons);
166
+ }
167
+ value.lanes.forEach((lane, index) => {
168
+ reasons.push(...collectLaneDiagnostics(lane, `assembly.lanes[${String(index)}]`));
169
+ });
170
+ return buildResult(reasons);
171
+ }