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.
Files changed (78) hide show
  1. package/README.md +107 -0
  2. package/dist/ai.d.ts +1 -19
  3. package/dist/ai.d.ts.map +1 -1
  4. package/dist/ai.js +0 -124
  5. package/dist/ai.js.map +1 -1
  6. package/dist/entity-content.d.ts +6 -0
  7. package/dist/entity-content.d.ts.map +1 -0
  8. package/dist/entity-content.js +94 -0
  9. package/dist/entity-content.js.map +1 -0
  10. package/dist/entity-factory.d.ts +13 -0
  11. package/dist/entity-factory.d.ts.map +1 -0
  12. package/dist/entity-factory.js +109 -0
  13. package/dist/entity-factory.js.map +1 -0
  14. package/dist/files.d.ts.map +1 -1
  15. package/dist/files.js +7 -0
  16. package/dist/files.js.map +1 -1
  17. package/dist/format.d.ts +19 -0
  18. package/dist/format.d.ts.map +1 -0
  19. package/dist/format.js +73 -0
  20. package/dist/format.js.map +1 -0
  21. package/dist/history.d.ts +8 -0
  22. package/dist/history.d.ts.map +1 -0
  23. package/dist/history.js +59 -0
  24. package/dist/history.js.map +1 -0
  25. package/dist/index.d.ts +13 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +13 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/repository.d.ts +5 -29
  30. package/dist/repository.d.ts.map +1 -1
  31. package/dist/repository.js +20 -196
  32. package/dist/repository.js.map +1 -1
  33. package/dist/search.d.ts +3 -0
  34. package/dist/search.d.ts.map +1 -1
  35. package/dist/search.js +34 -1
  36. package/dist/search.js.map +1 -1
  37. package/dist/semantic-analyzer.d.ts +50 -0
  38. package/dist/semantic-analyzer.d.ts.map +1 -0
  39. package/dist/semantic-analyzer.js +315 -0
  40. package/dist/semantic-analyzer.js.map +1 -0
  41. package/dist/semantic-context.d.ts +67 -0
  42. package/dist/semantic-context.d.ts.map +1 -0
  43. package/dist/semantic-context.js +109 -0
  44. package/dist/semantic-context.js.map +1 -0
  45. package/dist/semantic-formatter.d.ts +52 -0
  46. package/dist/semantic-formatter.d.ts.map +1 -0
  47. package/dist/semantic-formatter.js +354 -0
  48. package/dist/semantic-formatter.js.map +1 -0
  49. package/dist/semantic-inspection.d.ts +119 -0
  50. package/dist/semantic-inspection.d.ts.map +1 -0
  51. package/dist/semantic-inspection.js +295 -0
  52. package/dist/semantic-inspection.js.map +1 -0
  53. package/dist/semantic-profiles.d.ts +5 -0
  54. package/dist/semantic-profiles.d.ts.map +1 -0
  55. package/dist/semantic-profiles.js +70 -0
  56. package/dist/semantic-profiles.js.map +1 -0
  57. package/dist/semantic-types.d.ts +199 -0
  58. package/dist/semantic-types.d.ts.map +1 -0
  59. package/dist/semantic-types.js +3 -0
  60. package/dist/semantic-types.js.map +1 -0
  61. package/dist/semantic-validator.d.ts +46 -0
  62. package/dist/semantic-validator.d.ts.map +1 -0
  63. package/dist/semantic-validator.js +313 -0
  64. package/dist/semantic-validator.js.map +1 -0
  65. package/dist/semantic.d.ts +4 -0
  66. package/dist/semantic.d.ts.map +1 -0
  67. package/dist/semantic.js +641 -0
  68. package/dist/semantic.js.map +1 -0
  69. package/dist/task-update.d.ts +26 -0
  70. package/dist/task-update.d.ts.map +1 -0
  71. package/dist/task-update.js +165 -0
  72. package/dist/task-update.js.map +1 -0
  73. package/dist/types.d.ts +2 -0
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/validator.d.ts.map +1 -1
  76. package/dist/validator.js +18 -1
  77. package/dist/validator.js.map +1 -1
  78. 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":";AAAA,6EAA6E;;AA2F7E,oEAoEC;AA7JD,2CAAqF;AACrF,6CAA8C;AAC9C,+DAI+B;AA+E/B;;;GAGG;AACI,KAAK,UAAU,4BAA4B,CAChD,UAAsB,EACtB,QAAgB,EAChB,UAA0C,EAAE;IAE5C,MAAM,QAAQ,GAAG,IAAA,2BAAc,EAAC,UAAU,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,IAAA,2CAAqB,EAAC,MAAM,EAAE;QACrD,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,kBAAkB;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,CAAC,EAAiB,EAAmC,EAAE;QAC1E,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,OAAO;YACL,EAAE;YACF,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;YACnD,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,CAAC,EAAU,EAA4B,EAAE;QACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM;QACtC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC;IAET,OAAO;QACL,cAAc,EAAE,OAAO;QACvB,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;QAC/B,MAAM,EAAE;YACN,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;YACvC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YAC/C,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;SAC1C;QACD,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvD,kBAAkB,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ;QAChD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ;QACtC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS;QACxC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS;QACxC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU;QAC1C,aAAa,EAAE;YACb,SAAS,EAAE,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC;YACrF,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC;YAC/D,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC;YACzE,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;YAC3E,YAAY,EAAE,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC;SAChF;QACD,SAAS;QACT,QAAQ,EAAE;YACR,OAAO,EAAE,UAAU,CAAC,QAAQ,KAAK,IAAI;YACrC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ;YACtC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW;YAC5C,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B;QACD,WAAW,EAAE,UAAU,CAAC,WAAW;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,QAOE;;IAEF,MAAM,MAAM,GAA0C,EAAE,CAAC;IACzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG;YAAE,SAAS;QAC3B,CAAC,MAAM,MAAC,OAAO,CAAC,GAAG,MAAlB,MAAM,OAAkB,EAAE,EAAC,CAAC,IAAI,CAAC;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,eAAe;YACjC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,YAAY;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,IAAU,EAAE,UAAsB;IACvD,OAAO;QACL,GAAG,IAAA,4BAAgB,EAAC,IAAI,EAAE,UAAU,CAAC;QACrC,OAAO,EAAE,IAAA,2BAAe,EAAC,IAAI,EAAE,UAAU,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;KAClC,CAAC;AACJ,CAAC"}
@@ -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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"}