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
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
|
|
package/dist/ai.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AI-oriented planning helpers.
|
|
3
3
|
*/
|
|
4
|
-
import { RefinementState, Repository,
|
|
4
|
+
import { RefinementState, Repository, TaskPriority, TaskStatus } from './types';
|
|
5
5
|
export interface PlanningSummaryOptions {
|
|
6
6
|
assignee?: string;
|
|
7
7
|
epic?: string;
|
|
@@ -76,23 +76,5 @@ export interface PlanningSummary {
|
|
|
76
76
|
}>;
|
|
77
77
|
recentlyCompletedWork: PlanningSummaryTask[];
|
|
78
78
|
}
|
|
79
|
-
export type TaskUpdateField = 'status' | 'priority' | 'assignee' | 'refinementState' | 'dueDate' | 'epic' | 'milestone' | 'tags' | 'estimate';
|
|
80
|
-
export type TaskUpdatePatch = Partial<Pick<Task, 'status' | 'priority' | 'assignee' | 'refinementState' | 'dueDate' | 'epic' | 'milestone' | 'tags' | 'estimate'>>;
|
|
81
|
-
export interface TaskUpdateOptions {
|
|
82
|
-
id: string;
|
|
83
|
-
patch: TaskUpdatePatch;
|
|
84
|
-
dryRun?: boolean;
|
|
85
|
-
now?: Date;
|
|
86
|
-
expectedUpdatedAt?: string | null;
|
|
87
|
-
}
|
|
88
|
-
export interface TaskUpdateResult {
|
|
89
|
-
task: Task;
|
|
90
|
-
before: Task;
|
|
91
|
-
changedFields: TaskUpdateField[];
|
|
92
|
-
dryRun: boolean;
|
|
93
|
-
preview?: string;
|
|
94
|
-
}
|
|
95
79
|
export declare function buildPlanningSummary(repository: Repository, options?: PlanningSummaryOptions): PlanningSummary;
|
|
96
|
-
export declare function updateTaskPlanning(rootPath: string, repository: Repository, options: TaskUpdateOptions): Promise<TaskUpdateResult>;
|
|
97
|
-
export declare function parseTaskUpdatePatch(values: Record<string, unknown>): TaskUpdatePatch;
|
|
98
80
|
//# sourceMappingURL=ai.d.ts.map
|
package/dist/ai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|
package/dist/ai.js
CHANGED
|
@@ -4,17 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.buildPlanningSummary = buildPlanningSummary;
|
|
7
|
-
exports.updateTaskPlanning = updateTaskPlanning;
|
|
8
|
-
exports.parseTaskUpdatePatch = parseTaskUpdatePatch;
|
|
9
7
|
const backlog_1 = require("./backlog");
|
|
10
8
|
const next_work_1 = require("./next-work");
|
|
11
|
-
const repository_1 = require("./repository");
|
|
12
9
|
const DEFAULT_SUMMARY_LIMIT = 25;
|
|
13
10
|
const DEFAULT_RECENT_LIMIT = 10;
|
|
14
11
|
const OPEN_STATUSES = ['todo', 'in-progress', 'review'];
|
|
15
|
-
const TASK_STATUSES = ['todo', 'in-progress', 'review', 'done'];
|
|
16
|
-
const TASK_PRIORITIES = ['low', 'medium', 'high', 'critical'];
|
|
17
|
-
const REFINEMENT_STATES = ['captured', 'needs-refinement', 'ready', 'deferred', 'discarded'];
|
|
18
12
|
function buildPlanningSummary(repository, options = {}) {
|
|
19
13
|
const now = options.now ?? new Date();
|
|
20
14
|
const scopedTasks = Array.from(repository.tasks.values())
|
|
@@ -89,72 +83,6 @@ function buildPlanningSummary(repository, options = {}) {
|
|
|
89
83
|
recentlyCompletedWork
|
|
90
84
|
};
|
|
91
85
|
}
|
|
92
|
-
async function updateTaskPlanning(rootPath, repository, options) {
|
|
93
|
-
const task = repository.tasks.get(options.id);
|
|
94
|
-
if (!task) {
|
|
95
|
-
throw new Error(`Task not found: ${options.id}`);
|
|
96
|
-
}
|
|
97
|
-
const expectedUpdatedAt = options.expectedUpdatedAt === null ? undefined : options.expectedUpdatedAt;
|
|
98
|
-
if (options.expectedUpdatedAt !== undefined && task.updatedAt !== expectedUpdatedAt) {
|
|
99
|
-
throw new Error(`Update conflict: ${options.id} changed since preview`);
|
|
100
|
-
}
|
|
101
|
-
const before = cloneTask(task);
|
|
102
|
-
const updated = cloneTask(task);
|
|
103
|
-
const changedFields = applyTaskPatch(updated, options.patch);
|
|
104
|
-
if (changedFields.length === 0) {
|
|
105
|
-
return { task: updated, before, changedFields, dryRun: Boolean(options.dryRun) };
|
|
106
|
-
}
|
|
107
|
-
updated.updatedAt = (options.now ?? new Date()).toISOString();
|
|
108
|
-
repository.tasks.set(updated.id, updated);
|
|
109
|
-
const validation = (0, repository_1.validateRepositoryState)(repository);
|
|
110
|
-
const errors = validation.errors.filter(error => error.severity === 'error');
|
|
111
|
-
repository.tasks.set(before.id, before);
|
|
112
|
-
if (errors.length > 0) {
|
|
113
|
-
throw new Error(`Update failed validation: ${formatValidationErrors(errors)}`);
|
|
114
|
-
}
|
|
115
|
-
if (!options.dryRun) {
|
|
116
|
-
await (0, repository_1.saveEntity)(rootPath, updated);
|
|
117
|
-
}
|
|
118
|
-
return {
|
|
119
|
-
task: updated,
|
|
120
|
-
before,
|
|
121
|
-
changedFields,
|
|
122
|
-
dryRun: Boolean(options.dryRun),
|
|
123
|
-
preview: options.dryRun ? (0, repository_1.generateEntityContent)(updated) : undefined
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
function parseTaskUpdatePatch(values) {
|
|
127
|
-
const patch = {};
|
|
128
|
-
for (const [field, value] of Object.entries(values)) {
|
|
129
|
-
if (value === undefined) {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
switch (field) {
|
|
133
|
-
case 'status':
|
|
134
|
-
patch.status = parseEnum(value, TASK_STATUSES, 'status');
|
|
135
|
-
break;
|
|
136
|
-
case 'priority':
|
|
137
|
-
patch.priority = parseOptionalEnum(value, TASK_PRIORITIES, 'priority');
|
|
138
|
-
break;
|
|
139
|
-
case 'refinementState':
|
|
140
|
-
patch.refinementState = parseOptionalEnum(value, REFINEMENT_STATES, 'refinementState');
|
|
141
|
-
break;
|
|
142
|
-
case 'assignee':
|
|
143
|
-
case 'dueDate':
|
|
144
|
-
case 'epic':
|
|
145
|
-
case 'milestone':
|
|
146
|
-
case 'estimate':
|
|
147
|
-
patch[field] = parseOptionalString(value);
|
|
148
|
-
break;
|
|
149
|
-
case 'tags':
|
|
150
|
-
patch.tags = parseTags(value);
|
|
151
|
-
break;
|
|
152
|
-
default:
|
|
153
|
-
throw new Error(`Unsupported task update field: ${field}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return patch;
|
|
157
|
-
}
|
|
158
86
|
function matchesSummaryScope(task, options) {
|
|
159
87
|
if (options.assignee && task.assignee !== options.assignee) {
|
|
160
88
|
return false;
|
|
@@ -197,27 +125,6 @@ function toSummaryTask(task) {
|
|
|
197
125
|
refinementState: task.refinementState
|
|
198
126
|
};
|
|
199
127
|
}
|
|
200
|
-
function applyTaskPatch(task, patch) {
|
|
201
|
-
const changed = [];
|
|
202
|
-
for (const field of Object.keys(patch)) {
|
|
203
|
-
const nextValue = patch[field];
|
|
204
|
-
if (JSON.stringify(task[field]) === JSON.stringify(nextValue)) {
|
|
205
|
-
continue;
|
|
206
|
-
}
|
|
207
|
-
task[field] = nextValue;
|
|
208
|
-
changed.push(field);
|
|
209
|
-
}
|
|
210
|
-
return changed;
|
|
211
|
-
}
|
|
212
|
-
function cloneTask(task) {
|
|
213
|
-
return {
|
|
214
|
-
...task,
|
|
215
|
-
dependsOn: task.dependsOn ? [...task.dependsOn] : undefined,
|
|
216
|
-
tags: task.tags ? [...task.tags] : undefined,
|
|
217
|
-
links: task.links ? { ...task.links } : undefined,
|
|
218
|
-
metadata: { ...task.metadata }
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
128
|
function compareUpdatedAtDesc(a, b) {
|
|
222
129
|
return dateValue(b.updatedAt) - dateValue(a.updatedAt) || b.id.localeCompare(a.id);
|
|
223
130
|
}
|
|
@@ -231,35 +138,4 @@ function normalizeArray(value) {
|
|
|
231
138
|
}
|
|
232
139
|
return Array.isArray(value) ? value : [value];
|
|
233
140
|
}
|
|
234
|
-
function parseEnum(value, allowed, field) {
|
|
235
|
-
if (typeof value !== 'string' || !allowed.includes(value)) {
|
|
236
|
-
throw new Error(`${field} must be one of: ${allowed.join(', ')}`);
|
|
237
|
-
}
|
|
238
|
-
return value;
|
|
239
|
-
}
|
|
240
|
-
function parseOptionalEnum(value, allowed, field) {
|
|
241
|
-
if (value === '') {
|
|
242
|
-
return undefined;
|
|
243
|
-
}
|
|
244
|
-
return parseEnum(value, allowed, field);
|
|
245
|
-
}
|
|
246
|
-
function parseOptionalString(value) {
|
|
247
|
-
if (typeof value !== 'string') {
|
|
248
|
-
throw new Error('Expected a string value');
|
|
249
|
-
}
|
|
250
|
-
return value.trim() || undefined;
|
|
251
|
-
}
|
|
252
|
-
function parseTags(value) {
|
|
253
|
-
if (typeof value === 'string') {
|
|
254
|
-
const tags = value.split(',').map(tag => tag.trim()).filter(Boolean);
|
|
255
|
-
return tags.length ? tags : undefined;
|
|
256
|
-
}
|
|
257
|
-
if (Array.isArray(value) && value.every(tag => typeof tag === 'string')) {
|
|
258
|
-
return value.map(tag => tag.trim()).filter(Boolean);
|
|
259
|
-
}
|
|
260
|
-
throw new Error('tags must be a comma-separated string or string array');
|
|
261
|
-
}
|
|
262
|
-
function formatValidationErrors(errors) {
|
|
263
|
-
return errors.slice(0, 3).map(error => error.message).join('; ');
|
|
264
|
-
}
|
|
265
141
|
//# sourceMappingURL=ai.js.map
|
package/dist/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -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/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAcD;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA8B3B;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA6B3B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhF;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9E;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,0BAA0B,CAAC,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAcD;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA8B3B;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA6B3B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhF;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9E;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,0BAA0B,CAAC,CAyBrC"}
|
package/dist/files.js
CHANGED
|
@@ -165,6 +165,13 @@ async function ensurePlanfsStructure(rootPath) {
|
|
|
165
165
|
result.created.push(dir);
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
|
+
const configPath = path.join(rootPath, '.planfs', 'planfs.json');
|
|
169
|
+
try {
|
|
170
|
+
await fs_1.promises.access(configPath);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
await fs_1.promises.writeFile(configPath, '{\n "formatVersion": 1\n}\n', 'utf8');
|
|
174
|
+
}
|
|
168
175
|
return result;
|
|
169
176
|
}
|
|
170
177
|
async function directoryExists(dir) {
|