planfs-core 1.3.0 → 1.4.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 (54) hide show
  1. package/README.md +107 -0
  2. package/dist/entity-content.d.ts +6 -0
  3. package/dist/entity-content.d.ts.map +1 -0
  4. package/dist/entity-content.js +94 -0
  5. package/dist/entity-content.js.map +1 -0
  6. package/dist/entity-factory.d.ts +13 -0
  7. package/dist/entity-factory.d.ts.map +1 -0
  8. package/dist/entity-factory.js +109 -0
  9. package/dist/entity-factory.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +10 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/repository.d.ts +3 -31
  15. package/dist/repository.d.ts.map +1 -1
  16. package/dist/repository.js +14 -204
  17. package/dist/repository.js.map +1 -1
  18. package/dist/semantic-analyzer.d.ts +50 -0
  19. package/dist/semantic-analyzer.d.ts.map +1 -0
  20. package/dist/semantic-analyzer.js +315 -0
  21. package/dist/semantic-analyzer.js.map +1 -0
  22. package/dist/semantic-context.d.ts +67 -0
  23. package/dist/semantic-context.d.ts.map +1 -0
  24. package/dist/semantic-context.js +109 -0
  25. package/dist/semantic-context.js.map +1 -0
  26. package/dist/semantic-formatter.d.ts +52 -0
  27. package/dist/semantic-formatter.d.ts.map +1 -0
  28. package/dist/semantic-formatter.js +354 -0
  29. package/dist/semantic-formatter.js.map +1 -0
  30. package/dist/semantic-inspection.d.ts +119 -0
  31. package/dist/semantic-inspection.d.ts.map +1 -0
  32. package/dist/semantic-inspection.js +295 -0
  33. package/dist/semantic-inspection.js.map +1 -0
  34. package/dist/semantic-profiles.d.ts +5 -0
  35. package/dist/semantic-profiles.d.ts.map +1 -0
  36. package/dist/semantic-profiles.js +70 -0
  37. package/dist/semantic-profiles.js.map +1 -0
  38. package/dist/semantic-types.d.ts +199 -0
  39. package/dist/semantic-types.d.ts.map +1 -0
  40. package/dist/semantic-types.js +3 -0
  41. package/dist/semantic-types.js.map +1 -0
  42. package/dist/semantic-validator.d.ts +46 -0
  43. package/dist/semantic-validator.d.ts.map +1 -0
  44. package/dist/semantic-validator.js +313 -0
  45. package/dist/semantic-validator.js.map +1 -0
  46. package/dist/semantic.d.ts +4 -0
  47. package/dist/semantic.d.ts.map +1 -0
  48. package/dist/semantic.js +641 -0
  49. package/dist/semantic.js.map +1 -0
  50. package/dist/task-update.d.ts +2 -2
  51. package/dist/task-update.d.ts.map +1 -1
  52. package/dist/task-update.js +9 -0
  53. package/dist/task-update.js.map +1 -1
  54. package/package.json +3 -2
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SEMANTIC_FORMAT_VERSION = void 0;
37
+ exports.previewSemanticFormats = previewSemanticFormats;
38
+ exports.applySemanticFormats = applySemanticFormats;
39
+ exports.previewSemanticEntityFormat = previewSemanticEntityFormat;
40
+ const crypto_1 = require("crypto");
41
+ const path = __importStar(require("path"));
42
+ const files_1 = require("./files");
43
+ const repository_1 = require("./repository");
44
+ const semantic_1 = require("./semantic");
45
+ const semantic_profiles_1 = require("./semantic-profiles");
46
+ const semantic_validator_1 = require("./semantic-validator");
47
+ exports.SEMANTIC_FORMAT_VERSION = '1.0.0';
48
+ /** Preview deterministic Markdown-only normalization for a bounded entity list. */
49
+ async function previewSemanticFormats(rootPath, entityIds) {
50
+ const repository = await (0, repository_1.loadRepository)(rootPath);
51
+ const entities = resolveEntities(repository, entityIds);
52
+ const previews = await Promise.all(entities.map(async (entity) => (previewSemanticEntityFormat(entity, await (0, files_1.readFile)(entity.filePath), rootPath))));
53
+ return batchPreview(previews);
54
+ }
55
+ /**
56
+ * Apply exactly the previously previewed source snapshots. Every proposed
57
+ * result is validated before the first bounded write occurs.
58
+ */
59
+ async function applySemanticFormats(rootPath, entityIds, expectedFingerprints) {
60
+ const repository = await (0, repository_1.loadRepository)(rootPath);
61
+ const entities = resolveEntities(repository, entityIds);
62
+ const previews = await Promise.all(entities.map(async (entity) => (previewSemanticEntityFormat(entity, await (0, files_1.readFile)(entity.filePath), rootPath))));
63
+ for (const preview of previews.filter(item => item.changed)) {
64
+ const expected = expectedFingerprints[preview.entityId];
65
+ if (!expected) {
66
+ throw new Error(`Format apply requires the preview fingerprint for ${preview.entityId}`);
67
+ }
68
+ if (expected !== preview.sourceFingerprint) {
69
+ throw new Error(`Format conflict: ${preview.entityId} changed since preview`);
70
+ }
71
+ if (preview.blocked) {
72
+ throw new Error(`Format apply is blocked for ${preview.entityId}; review its formatter issues`);
73
+ }
74
+ }
75
+ const proposedRepository = repositoryWithFormattedBodies(repository, previews);
76
+ const selectedIds = new Set(previews.map(preview => preview.entityId));
77
+ const selectedPaths = new Set(previews.map(preview => preview.filePath));
78
+ const repositoryValidation = (0, repository_1.validateRepositoryState)(proposedRepository);
79
+ const selectedRepositoryErrors = repositoryValidation.errors.filter(error => (error.severity === 'error'
80
+ && ((error.id !== undefined && selectedIds.has(error.id))
81
+ || (error.path !== undefined && selectedPaths.has(error.path)))));
82
+ if (selectedRepositoryErrors.length > 0) {
83
+ const first = selectedRepositoryErrors[0];
84
+ throw new Error(`Formatted repository validation failed${first ? `: ${first.message}` : ''}`);
85
+ }
86
+ const semanticValidation = await (0, semantic_validator_1.validateSemanticRepository)(proposedRepository, { tier: 'baseline' });
87
+ const selectedSemanticErrors = semanticValidation.diagnostics.filter(diagnostic => (diagnostic.severity === 'error' && selectedIds.has(diagnostic.entityId)));
88
+ if (selectedSemanticErrors.length > 0) {
89
+ const first = selectedSemanticErrors[0];
90
+ throw new Error(`Formatted semantic validation failed${first ? `: ${first.code} ${first.message}` : ''}`);
91
+ }
92
+ // Recheck every source immediately before writing so validation cannot apply
93
+ // a stale snapshot after a human edit.
94
+ for (const preview of previews.filter(item => item.changed)) {
95
+ const current = await (0, files_1.readFile)(preview.filePath);
96
+ if (fingerprint(current) !== preview.sourceFingerprint) {
97
+ throw new Error(`Format conflict: ${preview.entityId} changed during validation`);
98
+ }
99
+ }
100
+ const appliedEntityIds = [];
101
+ for (const preview of previews.filter(item => item.changed)) {
102
+ await (0, files_1.writeFile)(preview.filePath, preview.formattedContent);
103
+ appliedEntityIds.push(preview.entityId);
104
+ }
105
+ return { ...batchPreview(previews), appliedEntityIds };
106
+ }
107
+ function previewSemanticEntityFormat(entity, sourceContent, rootPath = '') {
108
+ const { bodyStart, body } = splitFrontmatterBody(sourceContent);
109
+ const document = (0, semantic_1.parseSemanticDocument)(entity.type, body, { filePath: entity.filePath });
110
+ const profile = (0, semantic_profiles_1.getSemanticContentProfile)(entity.type);
111
+ const definitionByKey = new Map(profile.sections.map(definition => [definition.key, definition]));
112
+ const duplicateKeys = new Set(Object.entries(document.knownSections)
113
+ .filter(([, sections]) => sections.length > 1)
114
+ .map(([key]) => key));
115
+ const edits = [];
116
+ const issues = [];
117
+ for (const key of [...duplicateKeys].sort()) {
118
+ const sections = document.knownSections[key] ?? [];
119
+ issues.push({
120
+ code: 'format.section.duplicate-skipped',
121
+ severity: 'warning',
122
+ message: `Skipped '${key}' because the recognized section occurs ${sections.length} times; formatter does not merge duplicates.`,
123
+ sectionKey: key,
124
+ range: sections[1]?.headingRange ?? sections[0]?.headingRange ?? null,
125
+ blocksApply: false
126
+ });
127
+ }
128
+ const unsafeDiagnostics = document.diagnostics.filter(diagnostic => (diagnostic.conformance === 'baseline' && diagnostic.severity === 'error'));
129
+ for (const diagnostic of unsafeDiagnostics) {
130
+ issues.push({
131
+ code: 'format.document.unsafe',
132
+ severity: 'error',
133
+ message: `Cannot safely format this Markdown region: ${diagnostic.message}`,
134
+ sectionKey: sectionKeyAt(document.sections, diagnostic.sectionIndex),
135
+ range: diagnostic.range,
136
+ blocksApply: true
137
+ });
138
+ }
139
+ if (unsafeDiagnostics.length === 0) {
140
+ for (const section of document.sections) {
141
+ if (!section.key || duplicateKeys.has(section.key))
142
+ continue;
143
+ const definition = definitionByKey.get(section.key);
144
+ if (!definition)
145
+ continue;
146
+ addEdit(edits, {
147
+ kind: 'canonicalize-heading',
148
+ sectionKey: section.key,
149
+ range: section.headingRange,
150
+ start: section.headingRange.start.offset,
151
+ end: section.headingRange.end.offset,
152
+ before: body.slice(section.headingRange.start.offset, section.headingRange.end.offset),
153
+ after: `## ${definition.canonicalHeading}`
154
+ });
155
+ }
156
+ for (const criterion of document.criteria) {
157
+ const section = document.sections[criterion.sectionIndex];
158
+ if (!section?.key || duplicateKeys.has(section.key))
159
+ continue;
160
+ const lineEnd = nextLineEnding(body, criterion.range.start.offset);
161
+ const firstLine = body.slice(criterion.range.start.offset, lineEnd);
162
+ const taskMarker = /^(\s*)([-+*])[ \t]+\[([ xX])\][ \t]+/.exec(firstLine);
163
+ if (taskMarker?.[0]) {
164
+ const after = `${taskMarker[1] ?? ''}- [${criterion.checked === true ? 'x' : ' '}] `;
165
+ addEdit(edits, {
166
+ kind: 'canonicalize-task-marker',
167
+ sectionKey: section.key,
168
+ range: rangePrefix(criterion.range, taskMarker[0].length, body),
169
+ start: criterion.range.start.offset,
170
+ end: criterion.range.start.offset + taskMarker[0].length,
171
+ before: taskMarker[0],
172
+ after
173
+ });
174
+ continue;
175
+ }
176
+ if (criterion.checked === null) {
177
+ const bullet = /^(\s*)([-+*])[ \t]+/.exec(firstLine);
178
+ if (bullet?.[0]) {
179
+ addEdit(edits, {
180
+ kind: 'add-task-marker',
181
+ sectionKey: section.key,
182
+ range: rangePrefix(criterion.range, bullet[0].length, body),
183
+ start: criterion.range.start.offset,
184
+ end: criterion.range.start.offset + bullet[0].length,
185
+ before: bullet[0],
186
+ after: `${bullet[1] ?? ''}- [ ] `
187
+ });
188
+ }
189
+ else {
190
+ issues.push({
191
+ code: 'format.criterion.marker-skipped',
192
+ severity: 'info',
193
+ message: 'Skipped an ordinary criterion because its list marker cannot be losslessly converted to a task-list marker.',
194
+ sectionKey: section.key,
195
+ range: criterion.range,
196
+ blocksApply: false
197
+ });
198
+ }
199
+ }
200
+ }
201
+ }
202
+ edits.sort((left, right) => left.start - right.start || left.end - right.end);
203
+ assertNonOverlapping(edits);
204
+ const formattedBody = applyEdits(body, edits);
205
+ const formattedContent = sourceContent.slice(0, bodyStart) + formattedBody;
206
+ const publicEdits = edits.map(edit => ({
207
+ kind: edit.kind,
208
+ sectionKey: edit.sectionKey,
209
+ range: edit.range,
210
+ before: edit.before,
211
+ after: edit.after
212
+ }));
213
+ const filePath = rootPath ? path.relative(rootPath, entity.filePath) : entity.filePath;
214
+ return {
215
+ formatVersion: exports.SEMANTIC_FORMAT_VERSION,
216
+ entityId: entity.id,
217
+ entityType: entity.type,
218
+ filePath: entity.filePath,
219
+ sourceFingerprint: fingerprint(sourceContent),
220
+ changed: formattedContent !== sourceContent,
221
+ blocked: issues.some(issue => issue.blocksApply),
222
+ edits: publicEdits,
223
+ issues,
224
+ diff: renderEditDiff(filePath, body, publicEdits),
225
+ formattedContent
226
+ };
227
+ }
228
+ function resolveEntities(repository, requestedIds) {
229
+ const ids = [...new Set(requestedIds.map(id => id.trim()).filter(Boolean))].sort();
230
+ if (ids.length === 0)
231
+ throw new Error('Format requires at least one entity ID');
232
+ const byId = new Map((0, repository_1.getAllEntities)(repository).map(entity => [entity.id, entity]));
233
+ return ids.map(id => {
234
+ const entity = byId.get(id);
235
+ if (!entity)
236
+ throw new Error(`Entity not found: ${id}`);
237
+ return entity;
238
+ });
239
+ }
240
+ function batchPreview(previews) {
241
+ return {
242
+ formatVersion: exports.SEMANTIC_FORMAT_VERSION,
243
+ entityIds: previews.map(preview => preview.entityId),
244
+ changedEntityIds: previews.filter(preview => preview.changed).map(preview => preview.entityId),
245
+ blockedEntityIds: previews.filter(preview => preview.blocked).map(preview => preview.entityId),
246
+ expectedFingerprints: Object.fromEntries(previews
247
+ .filter(preview => preview.changed)
248
+ .map(preview => [preview.entityId, preview.sourceFingerprint])),
249
+ previews
250
+ };
251
+ }
252
+ function repositoryWithFormattedBodies(repository, previews) {
253
+ const bodies = new Map(previews.map(preview => [
254
+ preview.entityId,
255
+ splitFrontmatterBody(preview.formattedContent).body
256
+ ]));
257
+ const replace = (entities) => new Map([...entities].map(([id, entity]) => [id, {
258
+ ...entity,
259
+ body: bodies.get(id) ?? entity.body
260
+ }]));
261
+ return {
262
+ ...repository,
263
+ tasks: replace(repository.tasks),
264
+ epics: replace(repository.epics),
265
+ milestones: replace(repository.milestones),
266
+ decisions: replace(repository.decisions)
267
+ };
268
+ }
269
+ function splitFrontmatterBody(content) {
270
+ const opening = /^---[ \t]*(?:\r?\n|$)/.exec(content);
271
+ if (!opening)
272
+ throw new Error('Cannot format a file without YAML frontmatter');
273
+ const closingPattern = /^---[ \t]*(?:\r?\n|$)/gm;
274
+ closingPattern.lastIndex = opening[0].length;
275
+ const closing = closingPattern.exec(content);
276
+ if (!closing)
277
+ throw new Error('Cannot format a file with unclosed YAML frontmatter');
278
+ const bodyStart = closing.index + closing[0].length;
279
+ return { bodyStart, body: content.slice(bodyStart) };
280
+ }
281
+ function addEdit(edits, edit) {
282
+ if (edit.before !== edit.after)
283
+ edits.push(edit);
284
+ }
285
+ function nextLineEnding(source, offset) {
286
+ const newline = source.indexOf('\n', offset);
287
+ return newline >= 0 ? newline : source.length;
288
+ }
289
+ function rangePrefix(range, length, source) {
290
+ const prefix = source.slice(range.start.offset, range.start.offset + length);
291
+ const lines = prefix.split('\n');
292
+ return {
293
+ start: range.start,
294
+ end: lines.length === 1
295
+ ? { offset: range.start.offset + length, line: range.start.line, column: range.start.column + length }
296
+ : {
297
+ offset: range.start.offset + length,
298
+ line: range.start.line + lines.length - 1,
299
+ column: (lines[lines.length - 1]?.length ?? 0) + 1
300
+ }
301
+ };
302
+ }
303
+ function assertNonOverlapping(edits) {
304
+ for (let index = 1; index < edits.length; index += 1) {
305
+ const previous = edits[index - 1];
306
+ const current = edits[index];
307
+ if (previous && current && current.start < previous.end) {
308
+ throw new Error('Formatter produced overlapping edits and refused to continue');
309
+ }
310
+ }
311
+ }
312
+ function applyEdits(source, edits) {
313
+ let result = source;
314
+ for (const edit of [...edits].sort((left, right) => right.start - left.start)) {
315
+ if (source.slice(edit.start, edit.end) !== edit.before) {
316
+ throw new Error('Formatter edit no longer matches its source range');
317
+ }
318
+ result = result.slice(0, edit.start) + edit.after + result.slice(edit.end);
319
+ }
320
+ return result;
321
+ }
322
+ function fingerprint(content) {
323
+ return `sha256:${(0, crypto_1.createHash)('sha256').update(content, 'utf8').digest('hex')}`;
324
+ }
325
+ function sectionKeyAt(sections, index) {
326
+ return index === null ? null : sections[index]?.key ?? null;
327
+ }
328
+ function renderEditDiff(filePath, source, edits) {
329
+ if (edits.length === 0)
330
+ return '';
331
+ const lines = [`--- a/${filePath}`, `+++ b/${filePath}`];
332
+ for (const edit of edits) {
333
+ const display = displayEdit(source, edit);
334
+ lines.push(`@@ body:${edit.range.start.line}:${edit.range.start.column} ${edit.kind} @@`);
335
+ lines.push(...prefixDiffLines('-', display.before));
336
+ lines.push(...prefixDiffLines('+', display.after));
337
+ }
338
+ return lines.join('\n');
339
+ }
340
+ function displayEdit(source, edit) {
341
+ if (edit.before.includes('\n'))
342
+ return { before: edit.before, after: edit.after };
343
+ const lineStart = source.lastIndexOf('\n', Math.max(0, edit.range.start.offset - 1)) + 1;
344
+ const lineEnd = nextLineEnding(source, edit.range.end.offset);
345
+ const before = source.slice(lineStart, lineEnd).replace(/\r$/, '');
346
+ const relativeStart = edit.range.start.offset - lineStart;
347
+ const relativeEnd = edit.range.end.offset - lineStart;
348
+ const after = before.slice(0, relativeStart) + edit.after + before.slice(relativeEnd);
349
+ return { before, after };
350
+ }
351
+ function prefixDiffLines(prefix, value) {
352
+ return value.split('\n').map(line => `${prefix}${line}`);
353
+ }
354
+ //# sourceMappingURL=semantic-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-formatter.js","sourceRoot":"","sources":["../src/semantic-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import { AdvisorySignal, AnalyzerResult, EntityMention, SemanticAnalyzer, SemanticDocument, SemanticFinding, SemanticCriterion, OrderedSection, SourceRange } from './semantic-types';
2
+ import { CriterionCheckStatePolicy, SemanticValidationDiagnostic, SemanticValidationTier } from './semantic-validator';
3
+ import { Entity } from './types';
4
+ export type SemanticInspectionContractVersion = '1.0.0';
5
+ export type SemanticInspectionView = 'all' | 'acceptance-criteria' | 'findings' | 'sections' | 'mentions' | 'relationships' | 'raw';
6
+ export interface SemanticInspectionOptions {
7
+ tier?: SemanticValidationTier;
8
+ lifecycle?: boolean;
9
+ criterionCheckState?: CriterionCheckStatePolicy;
10
+ analysis?: boolean;
11
+ language?: string;
12
+ analyzer?: SemanticAnalyzer;
13
+ }
14
+ export interface SemanticInspectionEntity {
15
+ id: string;
16
+ type: Entity['type'];
17
+ title: string;
18
+ status: Entity['status'];
19
+ filePath: string;
20
+ }
21
+ export interface AuthoritativeRelationships {
22
+ dependsOn: string[];
23
+ epic: string | null;
24
+ milestone: string | null;
25
+ supersedes: string | null;
26
+ supersededBy: string | null;
27
+ }
28
+ export interface SemanticInspectionAuthoritative {
29
+ metadata: Record<string, unknown>;
30
+ relationships: AuthoritativeRelationships;
31
+ }
32
+ export interface SemanticAdvisoryConclusion {
33
+ code: string;
34
+ message: string;
35
+ range: SourceRange;
36
+ provenance: 'nlp-inferred';
37
+ authoritative: false;
38
+ signalKinds: string[];
39
+ repair: {
40
+ summary: string;
41
+ kind: 'edit-markdown' | 'edit-frontmatter';
42
+ previewable: boolean;
43
+ };
44
+ data: Record<string, string | number | boolean | null>;
45
+ }
46
+ export interface SemanticInspectionAdvisory {
47
+ mentions: EntityMention[];
48
+ conclusions: SemanticAdvisoryConclusion[];
49
+ }
50
+ export interface SemanticInspectionResult {
51
+ inspectionVersion: SemanticInspectionContractVersion;
52
+ entity: SemanticInspectionEntity;
53
+ authoritative: SemanticInspectionAuthoritative;
54
+ semantic: SemanticDocument;
55
+ advisory: SemanticInspectionAdvisory;
56
+ analysis: AnalyzerResult | null;
57
+ diagnostics: SemanticValidationDiagnostic[];
58
+ }
59
+ export type SemanticInspectionData = {
60
+ authoritative: SemanticInspectionAuthoritative;
61
+ semantic: SemanticDocument;
62
+ advisory: SemanticInspectionAdvisory;
63
+ analysis: AnalyzerResult | null;
64
+ } | {
65
+ criteria: SemanticCriterion[];
66
+ } | {
67
+ findings: SemanticFinding[];
68
+ } | {
69
+ sections: OrderedSection[];
70
+ } | {
71
+ mentions: EntityMention[];
72
+ } | {
73
+ authoritativeRelationships: AuthoritativeRelationships;
74
+ advisoryMentions: EntityMention[];
75
+ relationshipSignals: AdvisorySignal[];
76
+ } | {
77
+ rawMarkdown: string;
78
+ };
79
+ export interface SemanticInspectionViewResult {
80
+ inspectionVersion: SemanticInspectionContractVersion;
81
+ view: SemanticInspectionView;
82
+ entity: SemanticInspectionEntity;
83
+ data: SemanticInspectionData;
84
+ diagnostics: SemanticValidationDiagnostic[];
85
+ }
86
+ export interface SemanticInspectionCacheOptions {
87
+ capacity?: number;
88
+ }
89
+ export interface SemanticInspectionCacheStats {
90
+ size: number;
91
+ capacity: number;
92
+ hits: number;
93
+ misses: number;
94
+ evictions: number;
95
+ }
96
+ /**
97
+ * Bounded per-consumer cache for repeated inspection of unchanged entities.
98
+ * Callers opt in so one-shot CLI commands do not retain repository bodies.
99
+ */
100
+ export declare class SemanticInspectionCache {
101
+ private readonly entries;
102
+ private readonly capacity;
103
+ private hits;
104
+ private misses;
105
+ private evictions;
106
+ constructor(options?: SemanticInspectionCacheOptions);
107
+ get stats(): SemanticInspectionCacheStats;
108
+ clear(): void;
109
+ inspect(entity: Entity, options?: SemanticInspectionOptions): Promise<SemanticInspectionResult>;
110
+ }
111
+ /**
112
+ * Build a read-only semantic inspection result for one already loaded entity.
113
+ * Analysis is optional at the core boundary; interactive callers may enable it
114
+ * by default while deterministic automation can leave it disabled.
115
+ */
116
+ export declare function inspectSemanticEntity(entity: Entity, options?: SemanticInspectionOptions): Promise<SemanticInspectionResult>;
117
+ /** Select a deterministic, focused JSON-ready view without reparsing Markdown. */
118
+ export declare function selectSemanticInspectionView(inspection: SemanticInspectionResult, view?: SemanticInspectionView): SemanticInspectionViewResult;
119
+ //# sourceMappingURL=semantic-inspection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-inspection.d.ts","sourceRoot":"","sources":["../src/semantic-inspection.ts"],"names":[],"mappings":"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"}