planfs-core 1.3.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/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/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/repository.d.ts +3 -31
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +14 -204
- package/dist/repository.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 +2 -2
- package/dist/task-update.d.ts.map +1 -1
- package/dist/task-update.js +9 -0
- package/dist/task-update.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ Core parsing and validation library for PlanFS.
|
|
|
8
8
|
|
|
9
9
|
- **File Discovery** - Discover `.planfs/` files in a repository
|
|
10
10
|
- **Parsing** - Extract YAML frontmatter and markdown body
|
|
11
|
+
- **Semantic Markdown** - Inspect body structure without rewriting source files
|
|
11
12
|
- **Type System** - Strong typing for all entity types
|
|
12
13
|
- **Validation** - Schema validation and constraint checking
|
|
13
14
|
- **Repository API** - Load and query repositories
|
|
@@ -59,6 +60,104 @@ const todoTasks = getTasksByStatus(repo, 'todo');
|
|
|
59
60
|
const myTasks = getTasksByAssignee(repo, 'user@example.com');
|
|
60
61
|
```
|
|
61
62
|
|
|
63
|
+
### Inspecting Semantic Markdown
|
|
64
|
+
|
|
65
|
+
Semantic parsing is explicit and deferred, so loading a repository does not parse every body automatically:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { parseSemanticDocument } from 'planfs-core';
|
|
69
|
+
|
|
70
|
+
const semantic = parseSemanticDocument('task', task.body, {
|
|
71
|
+
filePath: task.filePath
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
console.log(semantic.preamble.text);
|
|
75
|
+
console.log(semantic.criteria);
|
|
76
|
+
console.log(semantic.findings);
|
|
77
|
+
console.log(semantic.questions);
|
|
78
|
+
console.log(semantic.mentions); // advisory; never authoritative metadata
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The result preserves the original Markdown and exact source ranges. It exposes PlanFS concepts rather than the underlying parser's syntax tree.
|
|
82
|
+
|
|
83
|
+
For a complete read-only entity view with authoritative metadata, content-profile diagnostics, advisory mentions, and optional local analysis, use the inspection API:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import {
|
|
87
|
+
inspectSemanticEntity,
|
|
88
|
+
selectSemanticInspectionView
|
|
89
|
+
} from 'planfs-core';
|
|
90
|
+
|
|
91
|
+
const inspection = await inspectSemanticEntity(task, {
|
|
92
|
+
analysis: true,
|
|
93
|
+
language: 'en'
|
|
94
|
+
});
|
|
95
|
+
const criteria = selectSemanticInspectionView(
|
|
96
|
+
inspection,
|
|
97
|
+
'acceptance-criteria'
|
|
98
|
+
);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The result keeps authoritative frontmatter relationships separate from advisory body mentions. Core analysis remains explicit; interactive PlanFS inspection enables it by default and offers an opt-out.
|
|
102
|
+
|
|
103
|
+
### Previewing and Applying Semantic Formatting
|
|
104
|
+
|
|
105
|
+
Semantic formatting is explicit, source-fingerprinted, and limited to edits proven by the shared semantic model:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import {
|
|
109
|
+
applySemanticFormats,
|
|
110
|
+
previewSemanticFormats
|
|
111
|
+
} from 'planfs-core';
|
|
112
|
+
|
|
113
|
+
const preview = await previewSemanticFormats(rootPath, ['TASK-001']);
|
|
114
|
+
const applied = await applySemanticFormats(
|
|
115
|
+
rootPath,
|
|
116
|
+
['TASK-001'],
|
|
117
|
+
preview.expectedFingerprints
|
|
118
|
+
);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Preview never writes. Apply refuses stale fingerprints, validates all proposed results before writing, preserves unknown Markdown and frontmatter, and is idempotent.
|
|
122
|
+
|
|
123
|
+
### Optional Local Prose Analysis
|
|
124
|
+
|
|
125
|
+
Advisory analysis is explicit and local. Omitting `enabled: true` performs no analysis:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import {
|
|
129
|
+
parseSemanticDocument,
|
|
130
|
+
runSemanticAnalysis
|
|
131
|
+
} from 'planfs-core';
|
|
132
|
+
|
|
133
|
+
const semantic = parseSemanticDocument('task', task.body, {
|
|
134
|
+
filePath: task.filePath
|
|
135
|
+
});
|
|
136
|
+
const analysis = await runSemanticAnalysis(semantic, {
|
|
137
|
+
enabled: true,
|
|
138
|
+
language: 'en'
|
|
139
|
+
});
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
The built-in analyzer emits only the English-language rule signals promoted by the v1.4 spikes: modality, negation, condition introducers, explicit dates/durations, and possible relationship mentions. Every signal is `nlp-inferred`, includes exact source evidence, and has `authoritative: false`. It never updates frontmatter or repository relationships, makes no network calls, and does not require an NLP model or runtime download. Unsupported languages return an advisory diagnostic and no signals.
|
|
143
|
+
|
|
144
|
+
### Validating Semantic Content
|
|
145
|
+
|
|
146
|
+
Semantic validation is explicit and separate from existing schema/repository validation:
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
import { validateSemanticEntity } from 'planfs-core';
|
|
150
|
+
|
|
151
|
+
const result = await validateSemanticEntity(task, {
|
|
152
|
+
tier: 'automation-ready',
|
|
153
|
+
lifecycle: true,
|
|
154
|
+
criterionCheckState: 'warning',
|
|
155
|
+
analysis: false
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Baseline, automation-ready, lifecycle, and optional analysis diagnostics retain distinct conformance domains. Results contain stable codes, entity/file identity, source ranges, section keys, provenance, and repair guidance. Validation never changes Markdown, metadata, criterion state, or repository relationships.
|
|
160
|
+
|
|
62
161
|
## API Reference
|
|
63
162
|
|
|
64
163
|
### Types
|
|
@@ -99,6 +198,14 @@ const myTasks = getTasksByAssignee(repo, 'user@example.com');
|
|
|
99
198
|
|
|
100
199
|
- `parseFrontmatter(content)` - Parse YAML frontmatter and markdown
|
|
101
200
|
- `normalizeMetadata(metadata)` - Convert kebab-case and snake_case to camelCase
|
|
201
|
+
- `parseSemanticDocument(entityType, body, options)` - Parse a body into the loss-aware semantic document model
|
|
202
|
+
- `runSemanticAnalysis(document, options)` - Explicitly run optional advisory prose analysis
|
|
203
|
+
- `LocalRuleSemanticAnalyzer` - Reusable local analyzer with a bounded content/version-aware cache
|
|
204
|
+
- `validateSemanticDocument(entity, document, options)` - Deterministically validate an already parsed document
|
|
205
|
+
- `validateSemanticEntity(entity, options)` - Parse and validate one loaded entity, optionally including local analysis
|
|
206
|
+
- `validateSemanticRepository(repository, options)` - Validate semantic content across active repository entities
|
|
207
|
+
- `inspectSemanticEntity(entity, options)` - Build a complete read-only semantic inspection result
|
|
208
|
+
- `selectSemanticInspectionView(inspection, view)` - Select a deterministic JSON-ready inspection view
|
|
102
209
|
|
|
103
210
|
## Testing
|
|
104
211
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-content.d.ts","sourceRoot":"","sources":["../src/entity-content.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAY,MAAM,EAAyB,MAAM,SAAS,CAAC;AAElE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA2D5D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Serialize PlanFS entities to their Markdown representation.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateEntityContent = generateEntityContent;
|
|
7
|
+
const yaml_1 = require("yaml");
|
|
8
|
+
function generateEntityContent(entity) {
|
|
9
|
+
const metadata = { ...entity.metadata };
|
|
10
|
+
metadata.id = entity.id;
|
|
11
|
+
metadata.title = entity.title || '';
|
|
12
|
+
metadata.status = entity.status || '';
|
|
13
|
+
if (entity.archive)
|
|
14
|
+
metadata.archive = entity.archive;
|
|
15
|
+
switch (entity.type) {
|
|
16
|
+
case 'task': {
|
|
17
|
+
const task = entity;
|
|
18
|
+
if (task.priority)
|
|
19
|
+
metadata.priority = task.priority;
|
|
20
|
+
if (task.assignee)
|
|
21
|
+
metadata.assignee = task.assignee;
|
|
22
|
+
if (task.epic)
|
|
23
|
+
metadata.epic = task.epic;
|
|
24
|
+
if (task.milestone)
|
|
25
|
+
metadata.milestone = task.milestone;
|
|
26
|
+
if (task.dependsOn)
|
|
27
|
+
metadata.dependsOn = task.dependsOn;
|
|
28
|
+
if (task.tags)
|
|
29
|
+
metadata.tags = task.tags;
|
|
30
|
+
if (task.dueDate)
|
|
31
|
+
metadata.dueDate = task.dueDate;
|
|
32
|
+
if (task.estimate)
|
|
33
|
+
metadata.estimate = task.estimate;
|
|
34
|
+
if (task.refinementState)
|
|
35
|
+
metadata.refinementState = task.refinementState;
|
|
36
|
+
if (task.backlogOrder !== undefined)
|
|
37
|
+
metadata.backlogOrder = task.backlogOrder;
|
|
38
|
+
if (task.links)
|
|
39
|
+
metadata.links = task.links;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
case 'epic': {
|
|
43
|
+
const epic = entity;
|
|
44
|
+
if (epic.priority)
|
|
45
|
+
metadata.priority = epic.priority;
|
|
46
|
+
if (epic.owner)
|
|
47
|
+
metadata.owner = epic.owner;
|
|
48
|
+
if (epic.description)
|
|
49
|
+
metadata.description = epic.description;
|
|
50
|
+
if (epic.targetDate)
|
|
51
|
+
metadata.targetDate = epic.targetDate;
|
|
52
|
+
if (epic.tags)
|
|
53
|
+
metadata.tags = epic.tags;
|
|
54
|
+
if (epic.links)
|
|
55
|
+
metadata.links = epic.links;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case 'milestone': {
|
|
59
|
+
const milestone = entity;
|
|
60
|
+
metadata.targetDate = milestone.targetDate;
|
|
61
|
+
if (milestone.description)
|
|
62
|
+
metadata.description = milestone.description;
|
|
63
|
+
if (milestone.owner)
|
|
64
|
+
metadata.owner = milestone.owner;
|
|
65
|
+
if (milestone.links)
|
|
66
|
+
metadata.links = milestone.links;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case 'decision': {
|
|
70
|
+
const decision = entity;
|
|
71
|
+
if (decision.date)
|
|
72
|
+
metadata.date = decision.date;
|
|
73
|
+
if (decision.context)
|
|
74
|
+
metadata.context = decision.context;
|
|
75
|
+
if (decision.decision)
|
|
76
|
+
metadata.decision = decision.decision;
|
|
77
|
+
if (decision.consequences)
|
|
78
|
+
metadata.consequences = decision.consequences;
|
|
79
|
+
if (decision.author)
|
|
80
|
+
metadata.author = decision.author;
|
|
81
|
+
if (decision.supersedes)
|
|
82
|
+
metadata.supersedes = decision.supersedes;
|
|
83
|
+
if (decision.supersededBy)
|
|
84
|
+
metadata.supersededBy = decision.supersededBy;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (entity.createdAt)
|
|
89
|
+
metadata.createdAt = entity.createdAt;
|
|
90
|
+
if (entity.updatedAt)
|
|
91
|
+
metadata.updatedAt = entity.updatedAt;
|
|
92
|
+
return `---\n${(0, yaml_1.stringify)(metadata).trimEnd()}\n---\n\n${entity.body}`;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=entity-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-content.js","sourceRoot":"","sources":["../src/entity-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Construct new PlanFS entities and allocate their IDs.
|
|
3
|
+
*/
|
|
4
|
+
import { Decision, Epic, Milestone, Repository, Task } from './types';
|
|
5
|
+
export declare function getNextTaskId(repository: Repository): string;
|
|
6
|
+
export declare function getNextEpicId(repository: Repository, title: string): string;
|
|
7
|
+
export declare function getNextMilestoneId(repository: Repository, title: string): string;
|
|
8
|
+
export declare function getNextDecisionId(repository: Repository, title: string): string;
|
|
9
|
+
export declare function createTaskTemplate(id: string, title: string): Task;
|
|
10
|
+
export declare function createEpicTemplate(id: string, title: string): Epic;
|
|
11
|
+
export declare function createMilestoneTemplate(id: string, title: string, targetDate: string): Milestone;
|
|
12
|
+
export declare function createDecisionTemplate(id: string, title: string): Decision;
|
|
13
|
+
//# sourceMappingURL=entity-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-factory.d.ts","sourceRoot":"","sources":["../src/entity-factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAU,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE9E,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAW5D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAalE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAalE;AAED,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,SAAS,CAcX;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAa1E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Construct new PlanFS entities and allocate their IDs.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getNextTaskId = getNextTaskId;
|
|
7
|
+
exports.getNextEpicId = getNextEpicId;
|
|
8
|
+
exports.getNextMilestoneId = getNextMilestoneId;
|
|
9
|
+
exports.getNextDecisionId = getNextDecisionId;
|
|
10
|
+
exports.createTaskTemplate = createTaskTemplate;
|
|
11
|
+
exports.createEpicTemplate = createEpicTemplate;
|
|
12
|
+
exports.createMilestoneTemplate = createMilestoneTemplate;
|
|
13
|
+
exports.createDecisionTemplate = createDecisionTemplate;
|
|
14
|
+
function getNextTaskId(repository) {
|
|
15
|
+
let maxNum = 0;
|
|
16
|
+
for (const id of repository.tasks.keys()) {
|
|
17
|
+
if (id.startsWith('TASK-')) {
|
|
18
|
+
const num = parseInt(id.substring(5), 10);
|
|
19
|
+
if (!isNaN(num) && num > maxNum) {
|
|
20
|
+
maxNum = num;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return `TASK-${String(maxNum + 1).padStart(3, '0')}`;
|
|
25
|
+
}
|
|
26
|
+
function getNextEpicId(repository, title) {
|
|
27
|
+
return getAvailableSlugId('EPIC', title, repository.epics);
|
|
28
|
+
}
|
|
29
|
+
function getNextMilestoneId(repository, title) {
|
|
30
|
+
return getAvailableSlugId('MILESTONE', title, repository.milestones);
|
|
31
|
+
}
|
|
32
|
+
function getNextDecisionId(repository, title) {
|
|
33
|
+
return getAvailableSlugId('DECISION', title, repository.decisions);
|
|
34
|
+
}
|
|
35
|
+
function createTaskTemplate(id, title) {
|
|
36
|
+
const now = new Date().toISOString();
|
|
37
|
+
return {
|
|
38
|
+
id,
|
|
39
|
+
type: 'task',
|
|
40
|
+
title,
|
|
41
|
+
status: 'todo',
|
|
42
|
+
filePath: '',
|
|
43
|
+
metadata: {},
|
|
44
|
+
body: '',
|
|
45
|
+
createdAt: now,
|
|
46
|
+
updatedAt: now
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function createEpicTemplate(id, title) {
|
|
50
|
+
const now = new Date().toISOString();
|
|
51
|
+
return {
|
|
52
|
+
id,
|
|
53
|
+
type: 'epic',
|
|
54
|
+
title,
|
|
55
|
+
status: 'active',
|
|
56
|
+
filePath: '',
|
|
57
|
+
metadata: {},
|
|
58
|
+
body: '',
|
|
59
|
+
createdAt: now,
|
|
60
|
+
updatedAt: now
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function createMilestoneTemplate(id, title, targetDate) {
|
|
64
|
+
const now = new Date().toISOString();
|
|
65
|
+
return {
|
|
66
|
+
id,
|
|
67
|
+
type: 'milestone',
|
|
68
|
+
title,
|
|
69
|
+
status: 'active',
|
|
70
|
+
targetDate,
|
|
71
|
+
filePath: '',
|
|
72
|
+
metadata: {},
|
|
73
|
+
body: '',
|
|
74
|
+
createdAt: now,
|
|
75
|
+
updatedAt: now
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function createDecisionTemplate(id, title) {
|
|
79
|
+
const now = new Date().toISOString();
|
|
80
|
+
return {
|
|
81
|
+
id,
|
|
82
|
+
type: 'decision',
|
|
83
|
+
title,
|
|
84
|
+
status: 'proposed',
|
|
85
|
+
filePath: '',
|
|
86
|
+
metadata: {},
|
|
87
|
+
body: '',
|
|
88
|
+
createdAt: now,
|
|
89
|
+
updatedAt: now
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function getAvailableSlugId(prefix, title, existing) {
|
|
93
|
+
const base = `${prefix}-${slugify(title)}`;
|
|
94
|
+
let candidate = base;
|
|
95
|
+
let suffix = 2;
|
|
96
|
+
while (existing.has(candidate)) {
|
|
97
|
+
candidate = `${base}-${suffix}`;
|
|
98
|
+
suffix += 1;
|
|
99
|
+
}
|
|
100
|
+
return candidate;
|
|
101
|
+
}
|
|
102
|
+
function slugify(value) {
|
|
103
|
+
return value
|
|
104
|
+
.trim()
|
|
105
|
+
.toLowerCase()
|
|
106
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
107
|
+
.replace(/^-+|-+$/g, '') || 'untitled';
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=entity-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-factory.js","sourceRoot":"","sources":["../src/entity-factory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export * from './files';
|
|
|
7
7
|
export * from './loader';
|
|
8
8
|
export * from './validator';
|
|
9
9
|
export * from './repository';
|
|
10
|
+
export * from './entity-content';
|
|
11
|
+
export * from './entity-factory';
|
|
10
12
|
export * from './references';
|
|
11
13
|
export * from './graph';
|
|
12
14
|
export * from './git';
|
|
@@ -20,4 +22,12 @@ export * from './ai';
|
|
|
20
22
|
export * from './task-update';
|
|
21
23
|
export * from './format';
|
|
22
24
|
export * from './history';
|
|
25
|
+
export * from './semantic-types';
|
|
26
|
+
export * from './semantic-profiles';
|
|
27
|
+
export * from './semantic';
|
|
28
|
+
export * from './semantic-analyzer';
|
|
29
|
+
export * from './semantic-validator';
|
|
30
|
+
export * from './semantic-inspection';
|
|
31
|
+
export * from './semantic-formatter';
|
|
32
|
+
export * from './semantic-context';
|
|
23
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,MAAM,CAAC;AACrB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,MAAM,CAAC;AACrB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,8 @@ __exportStar(require("./files"), exports);
|
|
|
23
23
|
__exportStar(require("./loader"), exports);
|
|
24
24
|
__exportStar(require("./validator"), exports);
|
|
25
25
|
__exportStar(require("./repository"), exports);
|
|
26
|
+
__exportStar(require("./entity-content"), exports);
|
|
27
|
+
__exportStar(require("./entity-factory"), exports);
|
|
26
28
|
__exportStar(require("./references"), exports);
|
|
27
29
|
__exportStar(require("./graph"), exports);
|
|
28
30
|
__exportStar(require("./git"), exports);
|
|
@@ -36,4 +38,12 @@ __exportStar(require("./ai"), exports);
|
|
|
36
38
|
__exportStar(require("./task-update"), exports);
|
|
37
39
|
__exportStar(require("./format"), exports);
|
|
38
40
|
__exportStar(require("./history"), exports);
|
|
41
|
+
__exportStar(require("./semantic-types"), exports);
|
|
42
|
+
__exportStar(require("./semantic-profiles"), exports);
|
|
43
|
+
__exportStar(require("./semantic"), exports);
|
|
44
|
+
__exportStar(require("./semantic-analyzer"), exports);
|
|
45
|
+
__exportStar(require("./semantic-validator"), exports);
|
|
46
|
+
__exportStar(require("./semantic-inspection"), exports);
|
|
47
|
+
__exportStar(require("./semantic-formatter"), exports);
|
|
48
|
+
__exportStar(require("./semantic-context"), exports);
|
|
39
49
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,8CAA4B;AAC5B,+CAA6B;AAC7B,+CAA6B;AAC7B,0CAAwB;AACxB,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,iDAA+B;AAC/B,uCAAqB;AACrB,gDAA8B;AAC9B,2CAAyB;AACzB,4CAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,8CAA4B;AAC5B,+CAA6B;AAC7B,mDAAiC;AACjC,mDAAiC;AACjC,+CAA6B;AAC7B,0CAAwB;AACxB,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,iDAA+B;AAC/B,uCAAqB;AACrB,gDAA8B;AAC9B,2CAAyB;AACzB,4CAA0B;AAC1B,mDAAiC;AACjC,sDAAoC;AACpC,6CAA2B;AAC3B,sDAAoC;AACpC,uDAAqC;AACrC,wDAAsC;AACtC,uDAAqC;AACrC,qDAAmC"}
|
package/dist/repository.d.ts
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* Main API for loading and querying a PlanFS repository
|
|
4
4
|
*/
|
|
5
5
|
import { PlanfsInitializationResult } from './files';
|
|
6
|
-
import { Entity, Repository, Task,
|
|
6
|
+
import { Entity, Repository, Task, ValidationResult } from './types';
|
|
7
|
+
export { generateEntityContent } from './entity-content';
|
|
8
|
+
export { createDecisionTemplate, createEpicTemplate, createMilestoneTemplate, createTaskTemplate, getNextDecisionId, getNextEpicId, getNextMilestoneId, getNextTaskId } from './entity-factory';
|
|
7
9
|
/**
|
|
8
10
|
* Load a PlanFS repository
|
|
9
11
|
*/
|
|
@@ -22,10 +24,6 @@ export declare function validateRepositoryState(repository: Repository): Validat
|
|
|
22
24
|
* Save an entity to disk
|
|
23
25
|
*/
|
|
24
26
|
export declare function saveEntity(rootPath: string, entity: Entity): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Generate file content from an entity
|
|
27
|
-
*/
|
|
28
|
-
export declare function generateEntityContent(entity: Entity): string;
|
|
29
27
|
export interface ArchiveEntityOptions {
|
|
30
28
|
includeChildren?: boolean;
|
|
31
29
|
now?: Date;
|
|
@@ -60,30 +58,4 @@ export declare function getTasksByEpic(repository: Repository, epicId: string):
|
|
|
60
58
|
* Initialize a new repository
|
|
61
59
|
*/
|
|
62
60
|
export declare function initializeRepository(rootPath: string): Promise<PlanfsInitializationResult>;
|
|
63
|
-
/**
|
|
64
|
-
* Get next task ID
|
|
65
|
-
*/
|
|
66
|
-
export declare function getNextTaskId(repository: Repository): string;
|
|
67
|
-
/**
|
|
68
|
-
* Get an available epic ID from a title
|
|
69
|
-
*/
|
|
70
|
-
export declare function getNextEpicId(repository: Repository, title: string): string;
|
|
71
|
-
/**
|
|
72
|
-
* Get an available milestone ID from a title
|
|
73
|
-
*/
|
|
74
|
-
export declare function getNextMilestoneId(repository: Repository, title: string): string;
|
|
75
|
-
export declare function getNextDecisionId(repository: Repository, title: string): string;
|
|
76
|
-
/**
|
|
77
|
-
* Create a new task template
|
|
78
|
-
*/
|
|
79
|
-
export declare function createTaskTemplate(id: string, title: string): Task;
|
|
80
|
-
/**
|
|
81
|
-
* Create a new epic template
|
|
82
|
-
*/
|
|
83
|
-
export declare function createEpicTemplate(id: string, title: string): Epic;
|
|
84
|
-
/**
|
|
85
|
-
* Create a new milestone template
|
|
86
|
-
*/
|
|
87
|
-
export declare function createMilestoneTemplate(id: string, title: string, targetDate: string): Milestone;
|
|
88
|
-
export declare function createDecisionTemplate(id: string, title: string): Decision;
|
|
89
61
|
//# sourceMappingURL=repository.d.ts.map
|
package/dist/repository.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAQL,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAIjB,OAAO,EACL,MAAM,EACN,UAAU,EACV,IAAI,EAIJ,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA6E1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,MAAM,EAAE,CAaV;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAgBhF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAUf;AAmBD,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAKrE;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAsC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAQjB;AAkBD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GACrB,IAAI,EAAE,CAIR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACf,IAAI,EAAE,CAIR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,EAAE,CAIR;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,0BAA0B,CAAC,CAErC"}
|