@interf/compiler 0.1.10 → 0.1.12

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 (111) hide show
  1. package/README.md +23 -7
  2. package/dist/commands/benchmark.d.ts.map +1 -1
  3. package/dist/commands/benchmark.js +1 -8
  4. package/dist/commands/benchmark.js.map +1 -1
  5. package/dist/commands/compile.d.ts.map +1 -1
  6. package/dist/commands/compile.js.map +1 -1
  7. package/dist/commands/create-workflow-wizard.d.ts +65 -0
  8. package/dist/commands/create-workflow-wizard.d.ts.map +1 -0
  9. package/dist/commands/create-workflow-wizard.js +299 -0
  10. package/dist/commands/create-workflow-wizard.js.map +1 -0
  11. package/dist/commands/create.d.ts +1 -37
  12. package/dist/commands/create.d.ts.map +1 -1
  13. package/dist/commands/create.js +11 -313
  14. package/dist/commands/create.js.map +1 -1
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +2 -1
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/reset.js +3 -3
  19. package/dist/commands/reset.js.map +1 -1
  20. package/dist/commands/verify.d.ts.map +1 -1
  21. package/dist/commands/verify.js +9 -0
  22. package/dist/commands/verify.js.map +1 -1
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/agent-skills.d.ts +21 -0
  28. package/dist/lib/agent-skills.d.ts.map +1 -0
  29. package/dist/lib/agent-skills.js +215 -0
  30. package/dist/lib/agent-skills.js.map +1 -0
  31. package/dist/lib/agents.d.ts +11 -13
  32. package/dist/lib/agents.d.ts.map +1 -1
  33. package/dist/lib/agents.js +12 -212
  34. package/dist/lib/agents.js.map +1 -1
  35. package/dist/lib/filesystem.d.ts +0 -1
  36. package/dist/lib/filesystem.d.ts.map +1 -1
  37. package/dist/lib/filesystem.js +0 -5
  38. package/dist/lib/filesystem.js.map +1 -1
  39. package/dist/lib/interf-bootstrap.d.ts +13 -0
  40. package/dist/lib/interf-bootstrap.d.ts.map +1 -0
  41. package/dist/lib/interf-bootstrap.js +215 -0
  42. package/dist/lib/interf-bootstrap.js.map +1 -0
  43. package/dist/lib/interf-detect.d.ts +31 -0
  44. package/dist/lib/interf-detect.d.ts.map +1 -0
  45. package/dist/lib/interf-detect.js +146 -0
  46. package/dist/lib/interf-detect.js.map +1 -0
  47. package/dist/lib/interf-scaffold.d.ts +15 -0
  48. package/dist/lib/interf-scaffold.d.ts.map +1 -0
  49. package/dist/lib/interf-scaffold.js +592 -0
  50. package/dist/lib/interf-scaffold.js.map +1 -0
  51. package/dist/lib/interf.d.ts +4 -36
  52. package/dist/lib/interf.d.ts.map +1 -1
  53. package/dist/lib/interf.js +5 -1103
  54. package/dist/lib/interf.js.map +1 -1
  55. package/dist/lib/local-workflows.d.ts +7 -0
  56. package/dist/lib/local-workflows.d.ts.map +1 -1
  57. package/dist/lib/local-workflows.js +83 -10
  58. package/dist/lib/local-workflows.js.map +1 -1
  59. package/dist/lib/obsidian.d.ts +6 -0
  60. package/dist/lib/obsidian.d.ts.map +1 -0
  61. package/dist/lib/obsidian.js +166 -0
  62. package/dist/lib/obsidian.js.map +1 -0
  63. package/dist/lib/runtime.d.ts.map +1 -1
  64. package/dist/lib/runtime.js +1 -1
  65. package/dist/lib/runtime.js.map +1 -1
  66. package/dist/lib/schema.d.ts +1 -0
  67. package/dist/lib/schema.d.ts.map +1 -1
  68. package/dist/lib/schema.js +1 -1
  69. package/dist/lib/schema.js.map +1 -1
  70. package/dist/lib/state.d.ts +2 -4
  71. package/dist/lib/state.d.ts.map +1 -1
  72. package/dist/lib/state.js +1 -1
  73. package/dist/lib/state.js.map +1 -1
  74. package/dist/lib/util.d.ts +4 -0
  75. package/dist/lib/util.d.ts.map +1 -0
  76. package/dist/lib/util.js +14 -0
  77. package/dist/lib/util.js.map +1 -0
  78. package/dist/lib/validate-interface.d.ts +77 -0
  79. package/dist/lib/validate-interface.d.ts.map +1 -0
  80. package/dist/lib/validate-interface.js +485 -0
  81. package/dist/lib/validate-interface.js.map +1 -0
  82. package/dist/lib/validate-kb.d.ts +73 -0
  83. package/dist/lib/validate-kb.d.ts.map +1 -0
  84. package/dist/lib/validate-kb.js +223 -0
  85. package/dist/lib/validate-kb.js.map +1 -0
  86. package/dist/lib/validate.d.ts +17 -146
  87. package/dist/lib/validate.d.ts.map +1 -1
  88. package/dist/lib/validate.js +31 -713
  89. package/dist/lib/validate.js.map +1 -1
  90. package/dist/lib/workflow-definitions.d.ts.map +1 -1
  91. package/dist/lib/workflow-definitions.js +8 -0
  92. package/dist/lib/workflow-definitions.js.map +1 -1
  93. package/dist/lib/workflow-helpers.d.ts +41 -0
  94. package/dist/lib/workflow-helpers.d.ts.map +1 -0
  95. package/dist/lib/workflow-helpers.js +189 -0
  96. package/dist/lib/workflow-helpers.js.map +1 -0
  97. package/dist/lib/workflows-interface.d.ts +79 -0
  98. package/dist/lib/workflows-interface.d.ts.map +1 -0
  99. package/dist/lib/workflows-interface.js +625 -0
  100. package/dist/lib/workflows-interface.js.map +1 -0
  101. package/dist/lib/workflows-kb.d.ts +50 -0
  102. package/dist/lib/workflows-kb.d.ts.map +1 -0
  103. package/dist/lib/workflows-kb.js +282 -0
  104. package/dist/lib/workflows-kb.js.map +1 -0
  105. package/dist/lib/workflows.d.ts +11 -115
  106. package/dist/lib/workflows.d.ts.map +1 -1
  107. package/dist/lib/workflows.js +14 -1072
  108. package/dist/lib/workflows.js.map +1 -1
  109. package/package.json +8 -3
  110. package/skills/knowledge-base/compile/references/stage-entities.md +2 -2
  111. package/templates/knowledge-base/README.md +1 -1
@@ -0,0 +1,485 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { countFilesRecursive } from "./filesystem.js";
4
+ import { resolveKnowledgeBaseSourcePath } from "./interf.js";
5
+ import { safeReadJsonFile } from "./parse.js";
6
+ import { getInterfaceWorkflow, resolveInterfaceWorkflowFromConfig, } from "./workflow-definitions.js";
7
+ import { InterfaceCoverageSchema, InterfaceRelevantSchema, InterfaceStateSchema, } from "./schema.js";
8
+ import { readKnowledgeBaseConfig, countBrokenWikilinks, asNumber, safeReadText, } from "./validate.js";
9
+ function extractFirstSection(text, headings) {
10
+ for (const heading of headings) {
11
+ const section = extractSection(text, heading);
12
+ if (section)
13
+ return section;
14
+ }
15
+ return null;
16
+ }
17
+ function sectionHasAnyMarker(section, markers) {
18
+ if (typeof section !== "string")
19
+ return false;
20
+ return markers.some((marker) => new RegExp(`(^|\\n)\\s{0,3}#{0,6}\\s*${escapeRegExp(marker)}`, "im").test(section));
21
+ }
22
+ function asStringArray(value) {
23
+ if (!Array.isArray(value))
24
+ return [];
25
+ return value.filter((item) => typeof item === "string");
26
+ }
27
+ function asRejectedEntries(value) {
28
+ if (!Array.isArray(value))
29
+ return [];
30
+ return value.filter((item) => !!item &&
31
+ typeof item === "object" &&
32
+ typeof item.path === "string" &&
33
+ typeof item.reason === "string");
34
+ }
35
+ function asFileEntries(value) {
36
+ if (!Array.isArray(value))
37
+ return [];
38
+ return value.filter((item) => !!item &&
39
+ typeof item === "object" &&
40
+ typeof item.file === "string");
41
+ }
42
+ function isSubset(left, right) {
43
+ for (const item of left) {
44
+ if (!right.has(item))
45
+ return false;
46
+ }
47
+ return true;
48
+ }
49
+ function setsEqual(left, right) {
50
+ return left.size === right.size && isSubset(left, right);
51
+ }
52
+ function setIntersectionSize(left, right) {
53
+ let count = 0;
54
+ for (const item of left) {
55
+ if (right.has(item))
56
+ count += 1;
57
+ }
58
+ return count;
59
+ }
60
+ function dedupeStrings(values) {
61
+ return Array.from(new Set(values));
62
+ }
63
+ function extractSection(content, heading) {
64
+ const pattern = new RegExp(`(?:^|\\n)## ${escapeRegExp(heading)}\\s*\\n([\\s\\S]*?)(?=\\n## |\\s*$)`);
65
+ const match = content.match(pattern);
66
+ return match?.[1]?.trim() ?? null;
67
+ }
68
+ function sectionMatchesInterfaceContract(section, contractType) {
69
+ switch (contractType) {
70
+ case "interface-retrieval":
71
+ return sectionHasAnyMarker(section, [
72
+ "Filter criteria",
73
+ "Categories:",
74
+ "Priority evidence tiers:",
75
+ "Truth modes to prioritize or downweight:",
76
+ "Key entities:",
77
+ "Expected relevant file count:",
78
+ ]);
79
+ case "interface-analysis":
80
+ return sectionHasAnyMarker(section, [
81
+ "Batching:",
82
+ "Claims:",
83
+ "Entities:",
84
+ "extract",
85
+ ]);
86
+ case "interface-output":
87
+ return sectionHasAnyMarker(section, [
88
+ "home.md",
89
+ "Output files",
90
+ "briefs/",
91
+ "knowledge/",
92
+ ]);
93
+ default:
94
+ return false;
95
+ }
96
+ }
97
+ function countMatches(content, pattern) {
98
+ return [...content.matchAll(pattern)].length;
99
+ }
100
+ function escapeRegExp(value) {
101
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
102
+ }
103
+ export function validateInterfaceKnowledgeBase(dirPath) {
104
+ const config = readKnowledgeBaseConfig(dirPath);
105
+ // Resolve knowledge-base path from config
106
+ const configValue = config.value;
107
+ const knowledgeBaseConfig = configValue?.knowledge_base;
108
+ const knowledgeBasePath = knowledgeBaseConfig?.path;
109
+ const resolvedKnowledgeBasePath = knowledgeBasePath ? resolve(dirPath, knowledgeBasePath) : null;
110
+ const knowledgeBasePathValid = resolvedKnowledgeBasePath !== null && existsSync(join(resolvedKnowledgeBasePath, "summaries"));
111
+ const brokenLinks = countBrokenWikilinks(dirPath, [join(dirPath, "knowledge"), join(dirPath, "briefs"), join(dirPath, "summaries")], [join(dirPath, "knowledge"), join(dirPath, "briefs"), join(dirPath, "summaries")]);
112
+ return {
113
+ config_present: config.present,
114
+ config_valid: config.valid,
115
+ config_type_match: config.typeMatch("interface"),
116
+ knowledge_base_path_valid: knowledgeBasePathValid,
117
+ broken_links: brokenLinks,
118
+ };
119
+ }
120
+ export function validateInterfacePlan(dirPath) {
121
+ const config = readKnowledgeBaseConfig(dirPath);
122
+ const configValue = config.value;
123
+ const knowledgeBaseConfig = configValue?.knowledge_base;
124
+ const knowledgeBasePath = knowledgeBaseConfig?.path;
125
+ const resolvedKnowledgeBasePath = knowledgeBasePath ? resolve(dirPath, knowledgeBasePath) : null;
126
+ const knowledgeBasePathValid = resolvedKnowledgeBasePath !== null && existsSync(join(resolvedKnowledgeBasePath, "summaries"));
127
+ const compilePlanPath = join(dirPath, "compile-plan.md");
128
+ const agentsPath = join(dirPath, "AGENTS.md");
129
+ const homePath = join(dirPath, "home.md");
130
+ const compilePlanPresent = existsSync(compilePlanPath);
131
+ const compilePlanText = compilePlanPresent ? safeReadText(compilePlanPath) : null;
132
+ const workflowId = resolveInterfaceWorkflowFromConfig(configValue);
133
+ const sourcePath = knowledgeBasePathValid && resolvedKnowledgeBasePath
134
+ ? resolveKnowledgeBaseSourcePath(resolvedKnowledgeBasePath)
135
+ : undefined;
136
+ const workflow = getInterfaceWorkflow(workflowId, { sourcePath, workspacePath: dirPath });
137
+ const stageChecks = workflow.stages.map((stage, index) => {
138
+ const section = compilePlanText
139
+ ? extractFirstSection(compilePlanText, [
140
+ `Stage ${index + 1}: ${stage.label}`,
141
+ `Stage ${index + 1} — ${stage.label}`,
142
+ ])
143
+ : null;
144
+ return {
145
+ id: stage.id,
146
+ label: stage.label,
147
+ contract_type: stage.contractType,
148
+ present: section !== null,
149
+ defined: sectionMatchesInterfaceContract(section, stage.contractType),
150
+ };
151
+ });
152
+ const compilePlanSections = stageChecks.every((stage) => stage.present);
153
+ const stage1Defined = stageChecks[0]?.defined ?? false;
154
+ const stage2Defined = stageChecks[1]?.defined ?? false;
155
+ const stage3Defined = stageChecks[2]?.defined ?? false;
156
+ const allStageDefinitionsValid = stageChecks.every((stage) => stage.defined);
157
+ const agentsPresent = existsSync(agentsPath);
158
+ const homePresent = existsSync(homePath);
159
+ const outputMentions = countMatches(compilePlanText ?? "", /(?:briefs\/|summaries\/|knowledge\/|home\.md)/gi);
160
+ const required = true;
161
+ const checks = {
162
+ config_present: config.present,
163
+ config_valid: config.valid,
164
+ config_type_match: config.typeMatch("interface"),
165
+ knowledge_base_path_valid: knowledgeBasePathValid,
166
+ compile_plan_present: compilePlanPresent,
167
+ compile_plan_sections: compilePlanSections,
168
+ stage1_defined: stage1Defined,
169
+ stage2_defined: stage2Defined,
170
+ stage3_defined: stage3Defined,
171
+ all_stage_definitions_valid: allStageDefinitionsValid,
172
+ stage_checks: stageChecks,
173
+ agents_present: agentsPresent,
174
+ home_present: homePresent,
175
+ };
176
+ const errors = [];
177
+ if (!checks.config_present)
178
+ errors.push("Missing interf.json.");
179
+ else if (!checks.config_valid)
180
+ errors.push("Could not parse interf.json.");
181
+ else if (!checks.config_type_match)
182
+ errors.push("Config is not an interface.");
183
+ if (!checks.knowledge_base_path_valid)
184
+ errors.push("knowledgeBase.path does not resolve to a valid knowledgeBase.");
185
+ if (!checks.compile_plan_present)
186
+ errors.push("Missing compile-plan.md.");
187
+ else if (!checks.compile_plan_sections)
188
+ errors.push("compile-plan.md is missing one or more required stage sections.");
189
+ if (checks.compile_plan_present) {
190
+ for (const [index, stage] of stageChecks.entries()) {
191
+ if (!stage.defined) {
192
+ errors.push(`Stage ${index + 1} ${stage.label.toLowerCase()} plan is incomplete.`);
193
+ }
194
+ }
195
+ }
196
+ if (!checks.agents_present)
197
+ errors.push("Missing AGENTS.md.");
198
+ if (!checks.home_present)
199
+ errors.push("Missing home.md.");
200
+ const ok = errors.length === 0;
201
+ const summary = ok
202
+ ? `Interface plan verified — ${stageChecks.filter((stage) => stage.defined).length}/${stageChecks.length} stages defined with ${outputMentions} output references.`
203
+ : `Interface plan failed — ${errors[0] ?? "compile plan is incomplete."}`;
204
+ return {
205
+ ok,
206
+ required,
207
+ summary,
208
+ counts: {
209
+ stage_sections_expected: stageChecks.length,
210
+ stage_sections_present: stageChecks.filter((stage) => stage.present).length,
211
+ output_mentions: outputMentions,
212
+ },
213
+ checks,
214
+ errors,
215
+ };
216
+ }
217
+ export function validateInterfaceRetrieve(dirPath) {
218
+ const config = readKnowledgeBaseConfig(dirPath);
219
+ const configValue = config.value;
220
+ const knowledgeBaseConfig = configValue?.knowledge_base;
221
+ const knowledgeBasePath = knowledgeBaseConfig?.path;
222
+ const resolvedKnowledgeBasePath = knowledgeBasePath ? resolve(dirPath, knowledgeBasePath) : null;
223
+ const knowledgeBasePathValid = resolvedKnowledgeBasePath !== null && existsSync(join(resolvedKnowledgeBasePath, "summaries"));
224
+ const knowledgeBaseTotal = knowledgeBasePathValid ? countFilesRecursive(join(resolvedKnowledgeBasePath, "summaries")) : 0;
225
+ const statePath = join(dirPath, ".interf", "state.json");
226
+ const relevantPath = join(dirPath, ".interf", "relevant.json");
227
+ const coveragePath = join(dirPath, ".interf", "coverage.json");
228
+ const statePresent = existsSync(statePath);
229
+ const relevantPresent = existsSync(relevantPath);
230
+ const coveragePresent = existsSync(coveragePath);
231
+ const state = statePresent
232
+ ? safeReadJsonFile(statePath, "interface state")
233
+ : null;
234
+ const relevant = relevantPresent
235
+ ? safeReadJsonFile(relevantPath, "interface retrieved set")
236
+ : null;
237
+ const coverage = coveragePresent
238
+ ? safeReadJsonFile(coveragePath, "interface coverage proof")
239
+ : null;
240
+ const queryStarted = Boolean(state?.retrieve_complete) ||
241
+ Boolean(state?.analyze_complete) ||
242
+ Boolean(state?.compile_complete) ||
243
+ typeof state?.last_retrieve === "string" ||
244
+ typeof state?.last_analyze === "string" ||
245
+ typeof state?.last_compile === "string" ||
246
+ relevantPresent ||
247
+ coveragePresent;
248
+ const proof = coverage && typeof coverage.proof === "object" && coverage.proof
249
+ ? coverage.proof
250
+ : null;
251
+ const bridgeRelevantEntries = asFileEntries(relevant?.relevant);
252
+ const bridgeRejectedEntries = asFileEntries(relevant?.rejected);
253
+ const bridgeCoverageShape = coverage !== null &&
254
+ typeof coverage?.query_timestamp === "string" &&
255
+ typeof coverage?.coverage_complete === "boolean" &&
256
+ !!coverage?.entities &&
257
+ typeof coverage.entities === "object" &&
258
+ !!coverage?.comparators &&
259
+ typeof coverage.comparators === "object" &&
260
+ Array.isArray(coverage?.gaps);
261
+ const derivedRelevantFiles = asStringArray(proof?.retrieved).length > 0
262
+ ? asStringArray(proof?.retrieved)
263
+ : bridgeRelevantEntries.map((entry) => entry.file);
264
+ const relevantFiles = asStringArray(relevant?.relevant_files).length > 0
265
+ ? asStringArray(relevant?.relevant_files)
266
+ : derivedRelevantFiles;
267
+ const deltaFiles = asStringArray(relevant?.delta_files).length > 0
268
+ ? asStringArray(relevant?.delta_files)
269
+ : asStringArray(state?.delta_files);
270
+ const explicitCandidateFiles = asStringArray(coverage?.candidate_files);
271
+ const scannedFiles = asStringArray(proof?.scanned).length > 0
272
+ ? asStringArray(proof?.scanned)
273
+ : dedupeStrings([
274
+ ...bridgeRelevantEntries.map((entry) => entry.file),
275
+ ...bridgeRejectedEntries.map((entry) => entry.file),
276
+ ]);
277
+ const candidateFiles = explicitCandidateFiles.length > 0
278
+ ? explicitCandidateFiles
279
+ : scannedFiles;
280
+ const abstractReviewedFiles = asStringArray(coverage?.abstract_reviewed_files).length > 0
281
+ ? asStringArray(coverage?.abstract_reviewed_files)
282
+ : asStringArray(proof?.reviewed).length > 0
283
+ ? asStringArray(proof?.reviewed)
284
+ : candidateFiles;
285
+ const selectedFiles = asStringArray(coverage?.selected_files).length > 0
286
+ ? asStringArray(coverage?.selected_files)
287
+ : derivedRelevantFiles;
288
+ const rejectedFiles = asRejectedEntries(coverage?.rejected_files);
289
+ const rejectedPaths = rejectedFiles.length > 0
290
+ ? rejectedFiles.map((entry) => entry.path)
291
+ : asStringArray(proof?.excluded).length > 0
292
+ ? asStringArray(proof?.excluded)
293
+ : bridgeRejectedEntries.map((entry) => entry.file);
294
+ const frontmatterScanned = asNumber(coverage?.frontmatter_scanned) ||
295
+ asNumber(state?.frontmatter_scanned) ||
296
+ asNumber(relevant?.total_scanned);
297
+ const candidateCount = asNumber(coverage?.candidates_after_frontmatter) ||
298
+ asNumber(state?.candidate_count) ||
299
+ candidateFiles.length;
300
+ const abstractsRead = asNumber(coverage?.abstracts_reviewed) ||
301
+ asNumber(state?.abstracts_read) ||
302
+ abstractReviewedFiles.length;
303
+ const selectedCount = asNumber(coverage?.relevant_selected) ||
304
+ asNumber(state?.relevant_count) ||
305
+ asNumber(relevant?.total_relevant) ||
306
+ selectedFiles.length;
307
+ const rejectedCount = asNumber(coverage?.rejected) ||
308
+ asNumber(state?.rejected_count) ||
309
+ asNumber(relevant?.total_rejected) ||
310
+ rejectedPaths.length;
311
+ const deltaCount = asNumber(state?.delta_count) || deltaFiles.length;
312
+ const expansionPasses = asNumber(coverage?.expansion_passes) ||
313
+ asNumber(state?.expansion_passes);
314
+ const relevantValid = (relevant !== null &&
315
+ typeof relevant?.generated_at === "string" &&
316
+ typeof relevant?.knowledge_base_summary_count === "number" &&
317
+ Array.isArray(relevant?.relevant_files) &&
318
+ Array.isArray(relevant?.delta_files)) ||
319
+ (relevant !== null &&
320
+ typeof relevant?.query_timestamp === "string" &&
321
+ Array.isArray(relevant?.relevant) &&
322
+ Array.isArray(relevant?.rejected) &&
323
+ typeof relevant?.total_scanned === "number" &&
324
+ typeof relevant?.total_relevant === "number" &&
325
+ typeof relevant?.total_rejected === "number") ||
326
+ Array.isArray(proof?.retrieved);
327
+ const coverageValid = (coverage !== null &&
328
+ typeof coverage?.generated_at === "string" &&
329
+ typeof coverage?.knowledge_base_summary_count === "number" &&
330
+ typeof coverage?.frontmatter_scanned === "number" &&
331
+ typeof coverage?.expansion_passes === "number" &&
332
+ Array.isArray(coverage?.candidate_files) &&
333
+ Array.isArray(coverage?.abstract_reviewed_files) &&
334
+ Array.isArray(coverage?.selected_files) &&
335
+ Array.isArray(coverage?.rejected_files) &&
336
+ rejectedFiles.length === rejectedPaths.length) ||
337
+ (coverage !== null &&
338
+ typeof coverage?.generated_at === "string" &&
339
+ typeof coverage?.knowledge_base_summary_total === "number" &&
340
+ typeof coverage?.frontmatter_scanned === "number" &&
341
+ typeof coverage?.candidates_after_frontmatter === "number" &&
342
+ typeof coverage?.abstracts_reviewed === "number" &&
343
+ typeof coverage?.relevant_selected === "number" &&
344
+ typeof coverage?.rejected === "number" &&
345
+ typeof coverage?.expansion_passes === "number" &&
346
+ typeof coverage?.coverage_complete === "boolean" &&
347
+ proof !== null &&
348
+ Array.isArray(proof.scanned) &&
349
+ Array.isArray(proof.reviewed) &&
350
+ Array.isArray(proof.retrieved) &&
351
+ Array.isArray(proof.excluded)) ||
352
+ bridgeCoverageShape;
353
+ const selectedSet = new Set(selectedFiles);
354
+ const rejectedSet = new Set(rejectedPaths);
355
+ const candidateSet = new Set(candidateFiles);
356
+ const scannedSet = new Set(scannedFiles);
357
+ const abstractSet = new Set(abstractReviewedFiles);
358
+ const relevantSet = new Set(relevantFiles);
359
+ const selectedRejectedUnion = new Set([...selectedFiles, ...rejectedPaths]);
360
+ const usesProofScanCoverage = explicitCandidateFiles.length === 0 &&
361
+ Array.isArray(proof?.scanned) &&
362
+ typeof coverage?.candidates_after_frontmatter === "number";
363
+ const knowledgeBaseCountMatch = knowledgeBasePathValid &&
364
+ coverageValid &&
365
+ (relevant !== null && typeof relevant?.knowledge_base_summary_count === "number"
366
+ ? asNumber(relevant.knowledge_base_summary_count) === knowledgeBaseTotal
367
+ : frontmatterScanned === knowledgeBaseTotal || candidateCount <= knowledgeBaseTotal) &&
368
+ (typeof coverage?.knowledge_base_summary_count === "number"
369
+ ? asNumber(coverage.knowledge_base_summary_count) === knowledgeBaseTotal
370
+ : typeof coverage?.knowledge_base_summary_total === "number"
371
+ ? asNumber(coverage?.knowledge_base_summary_total) === knowledgeBaseTotal
372
+ : frontmatterScanned === knowledgeBaseTotal);
373
+ const fullFrontmatterScan = knowledgeBasePathValid && coverageValid && frontmatterScanned === knowledgeBaseTotal;
374
+ const candidatePartitionValid = coverageValid &&
375
+ setIntersectionSize(selectedSet, rejectedSet) === 0 &&
376
+ (usesProofScanCoverage
377
+ ? scannedSet.size === selectedRejectedUnion.size &&
378
+ isSubset(selectedSet, scannedSet) &&
379
+ isSubset(rejectedSet, scannedSet)
380
+ : candidateSet.size === selectedRejectedUnion.size &&
381
+ isSubset(selectedSet, candidateSet) &&
382
+ isSubset(rejectedSet, candidateSet));
383
+ const abstractsCoverCandidates = coverageValid &&
384
+ (usesProofScanCoverage
385
+ ? selectedFiles.every((file) => abstractSet.has(file)) &&
386
+ abstractSet.size >= candidateCount &&
387
+ abstractsRead >= candidateCount
388
+ : isSubset(candidateSet, abstractSet));
389
+ const selectedMatchRelevant = coverageValid &&
390
+ relevantValid &&
391
+ setsEqual(selectedSet, relevantSet);
392
+ const deltaSubset = relevantValid &&
393
+ isSubset(new Set(deltaFiles), selectedSet);
394
+ const stateCountsMatch = state !== null &&
395
+ asNumber(state.frontmatter_scanned) === frontmatterScanned &&
396
+ asNumber(state.candidate_count) === candidateCount &&
397
+ asNumber(state.abstracts_read) === abstractsRead &&
398
+ asNumber(state.expansion_passes) === expansionPasses &&
399
+ asNumber(state.relevant_count) === selectedCount &&
400
+ asNumber(state.rejected_count) === rejectedCount &&
401
+ asNumber(state.delta_count) === deltaCount;
402
+ const stateFlagsMatch = state !== null &&
403
+ state.retrieve_complete === true &&
404
+ state.coverage_complete === true;
405
+ const checks = {
406
+ knowledge_base_path_valid: knowledgeBasePathValid,
407
+ state_present: statePresent,
408
+ state_valid: state !== null && InterfaceStateSchema.safeParse(state).success,
409
+ relevant_present: relevantPresent || Array.isArray(proof?.retrieved),
410
+ relevant_valid: relevantValid ||
411
+ (relevant !== null && InterfaceRelevantSchema.safeParse(relevant).success),
412
+ coverage_present: coveragePresent,
413
+ coverage_valid: coverageValid ||
414
+ (coverage !== null && InterfaceCoverageSchema.safeParse(coverage).success),
415
+ knowledge_base_count_match: knowledgeBaseCountMatch,
416
+ full_frontmatter_scan: fullFrontmatterScan,
417
+ candidate_partition_valid: candidatePartitionValid,
418
+ abstracts_cover_candidates: abstractsCoverCandidates,
419
+ selected_match_relevant: selectedMatchRelevant,
420
+ delta_subset: deltaSubset,
421
+ state_counts_match: stateCountsMatch,
422
+ state_flags_match: stateFlagsMatch,
423
+ };
424
+ const errors = [];
425
+ if (queryStarted) {
426
+ if (!knowledgeBasePathValid)
427
+ errors.push("Knowledge base is missing or invalid.");
428
+ if (!statePresent)
429
+ errors.push("Missing .interf/state.json.");
430
+ else if (state === null)
431
+ errors.push("Could not parse .interf/state.json.");
432
+ if (!relevantPresent && !Array.isArray(proof?.retrieved))
433
+ errors.push("Missing .interf/relevant.json.");
434
+ else if (!relevantValid)
435
+ errors.push("Could not parse .interf/relevant.json or it has the wrong shape.");
436
+ if (!coveragePresent)
437
+ errors.push("Missing .interf/coverage.json.");
438
+ else if (!coverageValid)
439
+ errors.push("Could not parse .interf/coverage.json or it has the wrong shape.");
440
+ if (coveragePresent && coverageValid && !knowledgeBaseCountMatch)
441
+ errors.push("Coverage proof does not match the current knowledge-base summary count.");
442
+ if (coveragePresent && coverageValid && !fullFrontmatterScan)
443
+ errors.push("Coverage proof does not show a full frontmatter scan.");
444
+ if (coveragePresent && coverageValid && !candidatePartitionValid)
445
+ errors.push("Candidate, selected, and rejected sets are inconsistent.");
446
+ if (coveragePresent && coverageValid && !abstractsCoverCandidates)
447
+ errors.push("Not every candidate file was abstract-reviewed.");
448
+ if (relevantPresent && coveragePresent && relevantValid && coverageValid && !selectedMatchRelevant) {
449
+ errors.push("Selected files in coverage proof do not match relevant_files.");
450
+ }
451
+ if (relevantPresent && coveragePresent && relevantValid && coverageValid && !deltaSubset) {
452
+ errors.push("delta_files are not a subset of selected relevant files.");
453
+ }
454
+ if (statePresent && state !== null && coveragePresent && coverageValid && relevantPresent && relevantValid && !stateCountsMatch) {
455
+ errors.push("state.json counts do not match the retrieved set and coverage proof.");
456
+ }
457
+ if (statePresent && state !== null && !stateFlagsMatch) {
458
+ errors.push("state.json is missing retrieve_complete or coverage_complete.");
459
+ }
460
+ }
461
+ const ok = queryStarted ? errors.length === 0 : true;
462
+ const summary = !queryStarted
463
+ ? "Coverage not required yet — interface retrieve has not started."
464
+ : ok
465
+ ? `Coverage verified — scanned ${frontmatterScanned}/${knowledgeBaseTotal}, reviewed ${abstractsRead} abstracts, selected ${selectedCount}, rejected ${rejectedCount}.`
466
+ : `Coverage failed — ${errors[0] ?? "inconsistent retrieval proof."}`;
467
+ return {
468
+ ok,
469
+ required: queryStarted,
470
+ summary,
471
+ counts: {
472
+ knowledge_base_total: knowledgeBaseTotal,
473
+ frontmatter_scanned: frontmatterScanned,
474
+ candidate_count: candidateCount,
475
+ abstracts_read: abstractsRead,
476
+ selected_count: selectedCount,
477
+ rejected_count: rejectedCount,
478
+ delta_count: deltaCount,
479
+ expansion_passes: expansionPasses,
480
+ },
481
+ checks,
482
+ errors,
483
+ };
484
+ }
485
+ //# sourceMappingURL=validate-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-interface.js","sourceRoot":"","sources":["../../src/lib/validate-interface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ export interface KnowledgeBaseValidationSummary {
2
+ config_present: boolean;
3
+ config_valid: boolean;
4
+ config_type_match: boolean;
5
+ summary_frontmatter_valid: boolean;
6
+ abstracts_valid: boolean;
7
+ invalid_frontmatter: number;
8
+ short_abstracts: number;
9
+ broken_links: number;
10
+ }
11
+ export interface KnowledgeBaseSummarizeValidation {
12
+ ok: boolean;
13
+ required: boolean;
14
+ summary: string;
15
+ counts: {
16
+ source_total: number;
17
+ source_covered: number;
18
+ summarized: number;
19
+ to_summarize: number;
20
+ invalid_frontmatter: number;
21
+ short_abstracts: number;
22
+ };
23
+ checks: {
24
+ config_present: boolean;
25
+ config_valid: boolean;
26
+ config_type_match: boolean;
27
+ summaries_present: boolean;
28
+ full_source_coverage: boolean;
29
+ summary_frontmatter_valid: boolean;
30
+ abstracts_valid: boolean;
31
+ };
32
+ errors: string[];
33
+ }
34
+ export interface KnowledgeBaseCompileValidation {
35
+ ok: boolean;
36
+ required: boolean;
37
+ summary: string;
38
+ counts: {
39
+ source_total: number;
40
+ summarized: number;
41
+ compiled: number;
42
+ inventory_total: number;
43
+ frontmatter_scanned: number;
44
+ abstracts_read: number;
45
+ full_reads: number;
46
+ entity_files: number;
47
+ claim_files: number;
48
+ index_files: number;
49
+ outputs: number;
50
+ };
51
+ checks: {
52
+ config_present: boolean;
53
+ config_valid: boolean;
54
+ config_type_match: boolean;
55
+ summarize_complete: boolean;
56
+ state_present: boolean;
57
+ state_valid: boolean;
58
+ inventory_present: boolean;
59
+ inventory_valid: boolean;
60
+ inventory_complete: boolean;
61
+ inventory_matches_summaries: boolean;
62
+ frontmatter_inventory_complete: boolean;
63
+ abstracts_cover_summaries: boolean;
64
+ synced_complete: boolean;
65
+ outputs_present: boolean;
66
+ links_valid: boolean;
67
+ };
68
+ errors: string[];
69
+ }
70
+ export declare function validateKnowledgeBase(dirPath: string): KnowledgeBaseValidationSummary;
71
+ export declare function validateKnowledgeBaseSummarize(dirPath: string): KnowledgeBaseSummarizeValidation;
72
+ export declare function validateKnowledgeBaseCompile(dirPath: string): KnowledgeBaseCompileValidation;
73
+ //# sourceMappingURL=validate-kb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-kb.d.ts","sourceRoot":"","sources":["../../src/lib/validate-kb.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,OAAO,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,MAAM,EAAE;QACN,cAAc,EAAE,OAAO,CAAC;QACxB,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,oBAAoB,EAAE,OAAO,CAAC;QAC9B,yBAAyB,EAAE,OAAO,CAAC;QACnC,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,cAAc,EAAE,OAAO,CAAC;QACxB,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;QACzB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,2BAA2B,EAAE,OAAO,CAAC;QACrC,8BAA8B,EAAE,OAAO,CAAC;QACxC,yBAAyB,EAAE,OAAO,CAAC;QACnC,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,8BAA8B,CAoBrF;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,GACd,gCAAgC,CA6DlC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,8BAA8B,CAgJhC"}