planfs-core 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +107 -0
- package/dist/ai.d.ts +1 -19
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +0 -124
- package/dist/ai.js.map +1 -1
- package/dist/entity-content.d.ts +6 -0
- package/dist/entity-content.d.ts.map +1 -0
- package/dist/entity-content.js +94 -0
- package/dist/entity-content.js.map +1 -0
- package/dist/entity-factory.d.ts +13 -0
- package/dist/entity-factory.d.ts.map +1 -0
- package/dist/entity-factory.js +109 -0
- package/dist/entity-factory.js.map +1 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +7 -0
- package/dist/files.js.map +1 -1
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +73 -0
- package/dist/format.js.map +1 -0
- package/dist/history.d.ts +8 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +59 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/repository.d.ts +5 -29
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +20 -196
- package/dist/repository.js.map +1 -1
- package/dist/search.d.ts +3 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +34 -1
- package/dist/search.js.map +1 -1
- package/dist/semantic-analyzer.d.ts +50 -0
- package/dist/semantic-analyzer.d.ts.map +1 -0
- package/dist/semantic-analyzer.js +315 -0
- package/dist/semantic-analyzer.js.map +1 -0
- package/dist/semantic-context.d.ts +67 -0
- package/dist/semantic-context.d.ts.map +1 -0
- package/dist/semantic-context.js +109 -0
- package/dist/semantic-context.js.map +1 -0
- package/dist/semantic-formatter.d.ts +52 -0
- package/dist/semantic-formatter.d.ts.map +1 -0
- package/dist/semantic-formatter.js +354 -0
- package/dist/semantic-formatter.js.map +1 -0
- package/dist/semantic-inspection.d.ts +119 -0
- package/dist/semantic-inspection.d.ts.map +1 -0
- package/dist/semantic-inspection.js +295 -0
- package/dist/semantic-inspection.js.map +1 -0
- package/dist/semantic-profiles.d.ts +5 -0
- package/dist/semantic-profiles.d.ts.map +1 -0
- package/dist/semantic-profiles.js +70 -0
- package/dist/semantic-profiles.js.map +1 -0
- package/dist/semantic-types.d.ts +199 -0
- package/dist/semantic-types.d.ts.map +1 -0
- package/dist/semantic-types.js +3 -0
- package/dist/semantic-types.js.map +1 -0
- package/dist/semantic-validator.d.ts +46 -0
- package/dist/semantic-validator.d.ts.map +1 -0
- package/dist/semantic-validator.js +313 -0
- package/dist/semantic-validator.js.map +1 -0
- package/dist/semantic.d.ts +4 -0
- package/dist/semantic.d.ts.map +1 -0
- package/dist/semantic.js +641 -0
- package/dist/semantic.js.map +1 -0
- package/dist/task-update.d.ts +26 -0
- package/dist/task-update.d.ts.map +1 -0
- package/dist/task-update.js +165 -0
- package/dist/task-update.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +18 -1
- package/dist/validator.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Compact semantic planning context shared by agent and human workflows. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.buildSemanticPlanningContext = buildSemanticPlanningContext;
|
|
5
|
+
const next_work_1 = require("./next-work");
|
|
6
|
+
const repository_1 = require("./repository");
|
|
7
|
+
const semantic_inspection_1 = require("./semantic-inspection");
|
|
8
|
+
/**
|
|
9
|
+
* Project one entity into bounded, traceable planning context. Frontmatter
|
|
10
|
+
* relationships remain authoritative; body interpretation stays read-only.
|
|
11
|
+
*/
|
|
12
|
+
async function buildSemanticPlanningContext(repository, entityId, options = {}) {
|
|
13
|
+
const entities = (0, repository_1.getAllEntities)(repository, { includeArchived: true });
|
|
14
|
+
const entity = entities.find(candidate => candidate.id === entityId);
|
|
15
|
+
if (!entity) {
|
|
16
|
+
throw new Error(`Entity not found: ${entityId}`);
|
|
17
|
+
}
|
|
18
|
+
const inspection = await (0, semantic_inspection_1.inspectSemanticEntity)(entity, {
|
|
19
|
+
tier: options.tier ?? 'automation-ready',
|
|
20
|
+
lifecycle: options.lifecycle,
|
|
21
|
+
criterionCheckState: options.criterionCheckState,
|
|
22
|
+
analysis: options.analysis === true,
|
|
23
|
+
language: options.language,
|
|
24
|
+
analyzer: options.analyzer
|
|
25
|
+
});
|
|
26
|
+
const entityIndex = new Map(entities.map(candidate => [candidate.id, candidate]));
|
|
27
|
+
const relationship = (id) => {
|
|
28
|
+
if (!id)
|
|
29
|
+
return null;
|
|
30
|
+
const resolved = entityIndex.get(id);
|
|
31
|
+
return {
|
|
32
|
+
id,
|
|
33
|
+
entity: resolved ? toContextEntity(resolved) : null,
|
|
34
|
+
authoritative: true
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
const requiredRelationship = (id) => {
|
|
38
|
+
const resolved = relationship(id);
|
|
39
|
+
if (!resolved)
|
|
40
|
+
throw new Error('Relationship ID must not be empty');
|
|
41
|
+
return resolved;
|
|
42
|
+
};
|
|
43
|
+
const readiness = entity.type === 'task'
|
|
44
|
+
? taskReadiness(entity, repository)
|
|
45
|
+
: null;
|
|
46
|
+
return {
|
|
47
|
+
contextVersion: '1.0.0',
|
|
48
|
+
entity: toContextEntity(entity),
|
|
49
|
+
intent: {
|
|
50
|
+
text: inspection.semantic.preamble.text,
|
|
51
|
+
markdown: inspection.semantic.preamble.markdown,
|
|
52
|
+
range: inspection.semantic.preamble.range
|
|
53
|
+
},
|
|
54
|
+
sections: compactSections(inspection.semantic.sections),
|
|
55
|
+
acceptanceCriteria: inspection.semantic.criteria,
|
|
56
|
+
findings: inspection.semantic.findings,
|
|
57
|
+
decisions: inspection.semantic.decisions,
|
|
58
|
+
questions: inspection.semantic.questions,
|
|
59
|
+
references: inspection.semantic.references,
|
|
60
|
+
relationships: {
|
|
61
|
+
dependsOn: inspection.authoritative.relationships.dependsOn.map(requiredRelationship),
|
|
62
|
+
epic: relationship(inspection.authoritative.relationships.epic),
|
|
63
|
+
milestone: relationship(inspection.authoritative.relationships.milestone),
|
|
64
|
+
supersedes: relationship(inspection.authoritative.relationships.supersedes),
|
|
65
|
+
supersededBy: relationship(inspection.authoritative.relationships.supersededBy)
|
|
66
|
+
},
|
|
67
|
+
readiness,
|
|
68
|
+
advisory: {
|
|
69
|
+
enabled: inspection.analysis !== null,
|
|
70
|
+
mentions: inspection.advisory.mentions,
|
|
71
|
+
conclusions: inspection.advisory.conclusions,
|
|
72
|
+
analysis: inspection.analysis
|
|
73
|
+
},
|
|
74
|
+
diagnostics: inspection.diagnostics
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function compactSections(sections) {
|
|
78
|
+
var _a;
|
|
79
|
+
const result = {};
|
|
80
|
+
for (const section of sections) {
|
|
81
|
+
if (!section.key)
|
|
82
|
+
continue;
|
|
83
|
+
(result[_a = section.key] ?? (result[_a] = [])).push({
|
|
84
|
+
heading: section.heading,
|
|
85
|
+
text: section.text,
|
|
86
|
+
markdown: section.contentMarkdown,
|
|
87
|
+
provenance: section.provenance,
|
|
88
|
+
range: section.contentRange
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
function taskReadiness(task, repository) {
|
|
94
|
+
return {
|
|
95
|
+
...(0, next_work_1.getTaskReadiness)(task, repository),
|
|
96
|
+
reasons: (0, next_work_1.explainNextWork)(task, repository)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function toContextEntity(entity) {
|
|
100
|
+
return {
|
|
101
|
+
id: entity.id,
|
|
102
|
+
type: entity.type,
|
|
103
|
+
title: entity.title,
|
|
104
|
+
status: entity.status,
|
|
105
|
+
filePath: entity.filePath,
|
|
106
|
+
archived: Boolean(entity.archive)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=semantic-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-context.js","sourceRoot":"","sources":["../src/semantic-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SourceRange } from './semantic-types';
|
|
2
|
+
import { Entity } from './types';
|
|
3
|
+
export declare const SEMANTIC_FORMAT_VERSION: "1.0.0";
|
|
4
|
+
export type SemanticFormatEditKind = 'canonicalize-heading' | 'canonicalize-task-marker' | 'add-task-marker';
|
|
5
|
+
export interface SemanticFormatEdit {
|
|
6
|
+
kind: SemanticFormatEditKind;
|
|
7
|
+
sectionKey: string;
|
|
8
|
+
range: SourceRange;
|
|
9
|
+
before: string;
|
|
10
|
+
after: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SemanticFormatIssue {
|
|
13
|
+
code: string;
|
|
14
|
+
severity: 'info' | 'warning' | 'error';
|
|
15
|
+
message: string;
|
|
16
|
+
sectionKey: string | null;
|
|
17
|
+
range: SourceRange | null;
|
|
18
|
+
blocksApply: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface SemanticFormatEntityPreview {
|
|
21
|
+
formatVersion: typeof SEMANTIC_FORMAT_VERSION;
|
|
22
|
+
entityId: string;
|
|
23
|
+
entityType: Entity['type'];
|
|
24
|
+
filePath: string;
|
|
25
|
+
sourceFingerprint: string;
|
|
26
|
+
changed: boolean;
|
|
27
|
+
blocked: boolean;
|
|
28
|
+
edits: SemanticFormatEdit[];
|
|
29
|
+
issues: SemanticFormatIssue[];
|
|
30
|
+
diff: string;
|
|
31
|
+
formattedContent: string;
|
|
32
|
+
}
|
|
33
|
+
export interface SemanticFormatBatchPreview {
|
|
34
|
+
formatVersion: typeof SEMANTIC_FORMAT_VERSION;
|
|
35
|
+
entityIds: string[];
|
|
36
|
+
changedEntityIds: string[];
|
|
37
|
+
blockedEntityIds: string[];
|
|
38
|
+
expectedFingerprints: Record<string, string>;
|
|
39
|
+
previews: SemanticFormatEntityPreview[];
|
|
40
|
+
}
|
|
41
|
+
export interface SemanticFormatApplyResult extends SemanticFormatBatchPreview {
|
|
42
|
+
appliedEntityIds: string[];
|
|
43
|
+
}
|
|
44
|
+
/** Preview deterministic Markdown-only normalization for a bounded entity list. */
|
|
45
|
+
export declare function previewSemanticFormats(rootPath: string, entityIds: readonly string[]): Promise<SemanticFormatBatchPreview>;
|
|
46
|
+
/**
|
|
47
|
+
* Apply exactly the previously previewed source snapshots. Every proposed
|
|
48
|
+
* result is validated before the first bounded write occurs.
|
|
49
|
+
*/
|
|
50
|
+
export declare function applySemanticFormats(rootPath: string, entityIds: readonly string[], expectedFingerprints: Readonly<Record<string, string>>): Promise<SemanticFormatApplyResult>;
|
|
51
|
+
export declare function previewSemanticEntityFormat(entity: Entity, sourceContent: string, rootPath?: string): SemanticFormatEntityPreview;
|
|
52
|
+
//# sourceMappingURL=semantic-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-formatter.d.ts","sourceRoot":"","sources":["../src/semantic-formatter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAc,MAAM,SAAS,CAAC;AAE7C,eAAO,MAAM,uBAAuB,EAAG,OAAgB,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAC9B,sBAAsB,GACtB,0BAA0B,GAC1B,iBAAiB,CAAC;AAEtB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,OAAO,uBAAuB,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,OAAO,uBAAuB,CAAC;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,QAAQ,EAAE,2BAA2B,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B;IAC3E,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAOD,mFAAmF;AACnF,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,0BAA0B,CAAC,CAOrC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACrD,OAAO,CAAC,yBAAyB,CAAC,CA2DpC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAK,GACZ,2BAA2B,CA6H7B"}
|
|
@@ -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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"}
|