planfs-core 1.2.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 +125 -0
- package/dist/ai.d.ts +98 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +265 -0
- package/dist/ai.js.map +1 -0
- package/dist/backlog.d.ts +40 -0
- package/dist/backlog.d.ts.map +1 -0
- package/dist/backlog.js +206 -0
- package/dist/backlog.js.map +1 -0
- package/dist/bulk.d.ts +29 -0
- package/dist/bulk.d.ts.map +1 -0
- package/dist/bulk.js +206 -0
- package/dist/bulk.js.map +1 -0
- package/dist/files.d.ts +38 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +179 -0
- package/dist/files.js.map +1 -0
- package/dist/git.d.ts +74 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +426 -0
- package/dist/git.js.map +1 -0
- package/dist/graph.d.ts +56 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +188 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +26 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +248 -0
- package/dist/loader.js.map +1 -0
- package/dist/milestone.d.ts +23 -0
- package/dist/milestone.d.ts.map +1 -0
- package/dist/milestone.js +60 -0
- package/dist/milestone.js.map +1 -0
- package/dist/next-work.d.ts +34 -0
- package/dist/next-work.d.ts.map +1 -0
- package/dist/next-work.js +239 -0
- package/dist/next-work.js.map +1 -0
- package/dist/parser.d.ts +37 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +132 -0
- package/dist/parser.js.map +1 -0
- package/dist/pull-request.d.ts +38 -0
- package/dist/pull-request.d.ts.map +1 -0
- package/dist/pull-request.js +147 -0
- package/dist/pull-request.js.map +1 -0
- package/dist/references.d.ts +10 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +30 -0
- package/dist/references.js.map +1 -0
- package/dist/repository.d.ts +85 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +495 -0
- package/dist/repository.js.map +1 -0
- package/dist/search.d.ts +25 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +150 -0
- package/dist/search.js.map +1 -0
- package/dist/types.d.ts +119 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/validator.d.ts +24 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +540 -0
- package/dist/validator.js.map +1 -0
- package/package.json +46 -0
package/dist/search.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Search and filtering helpers
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.searchEntities = searchEntities;
|
|
40
|
+
exports.searchTasks = searchTasks;
|
|
41
|
+
exports.matchesCriteria = matchesCriteria;
|
|
42
|
+
exports.loadSavedFilters = loadSavedFilters;
|
|
43
|
+
const fs_1 = require("fs");
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const repository_1 = require("./repository");
|
|
46
|
+
function searchEntities(repository, criteria = {}) {
|
|
47
|
+
return (0, repository_1.getAllEntities)(repository).filter(entity => matchesCriteria(entity, criteria));
|
|
48
|
+
}
|
|
49
|
+
function searchTasks(repository, criteria = {}) {
|
|
50
|
+
return Array.from(repository.tasks.values()).filter(task => matchesCriteria(task, criteria));
|
|
51
|
+
}
|
|
52
|
+
function matchesCriteria(entity, criteria = {}) {
|
|
53
|
+
if (criteria.query && !matchesFullText(entity, criteria.query)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
if (criteria.status && !matchesValue(entity.status, criteria.status)) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (entity.type !== 'task') {
|
|
60
|
+
return !criteria.assignee
|
|
61
|
+
&& !criteria.epic
|
|
62
|
+
&& !criteria.milestone
|
|
63
|
+
&& !criteria.priority
|
|
64
|
+
&& !criteria.refinementState
|
|
65
|
+
&& !criteria.tags?.length;
|
|
66
|
+
}
|
|
67
|
+
const task = entity;
|
|
68
|
+
if (criteria.assignee && task.assignee !== criteria.assignee) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (criteria.epic && task.epic !== criteria.epic) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if (criteria.milestone && task.milestone !== criteria.milestone) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (criteria.priority && task.priority !== criteria.priority) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (criteria.refinementState && (task.refinementState ?? 'ready') !== criteria.refinementState) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
if (criteria.tags?.length) {
|
|
84
|
+
const taskTags = new Set(task.tags ?? []);
|
|
85
|
+
if (!criteria.tags.every(tag => taskTags.has(tag))) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
async function loadSavedFilters(rootPath) {
|
|
92
|
+
const filtersDir = path.join(rootPath, '.planfs', 'filters');
|
|
93
|
+
try {
|
|
94
|
+
const entries = await fs_1.promises.readdir(filtersDir, { withFileTypes: true });
|
|
95
|
+
const filters = [];
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
if (!entry.isFile() || !entry.name.endsWith('.json')) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const filePath = path.join(filtersDir, entry.name);
|
|
101
|
+
const content = await fs_1.promises.readFile(filePath, 'utf-8');
|
|
102
|
+
const parsed = JSON.parse(content);
|
|
103
|
+
filters.push(normalizeSavedFilter(parsed, entry.name));
|
|
104
|
+
}
|
|
105
|
+
return filters.sort((a, b) => a.name.localeCompare(b.name));
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function normalizeSavedFilter(filter, filename) {
|
|
115
|
+
if (!filter.id) {
|
|
116
|
+
filter.id = filename.replace(/\.json$/, '');
|
|
117
|
+
}
|
|
118
|
+
if (!filter.name) {
|
|
119
|
+
filter.name = filter.id;
|
|
120
|
+
}
|
|
121
|
+
filter.criteria = filter.criteria ?? {};
|
|
122
|
+
const tags = filter.criteria.tags;
|
|
123
|
+
if (typeof tags === 'string') {
|
|
124
|
+
filter.criteria.tags = [tags];
|
|
125
|
+
}
|
|
126
|
+
return filter;
|
|
127
|
+
}
|
|
128
|
+
function matchesValue(value, expected) {
|
|
129
|
+
return Array.isArray(expected) ? expected.includes(value) : value === expected;
|
|
130
|
+
}
|
|
131
|
+
function matchesFullText(entity, query) {
|
|
132
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
133
|
+
if (!normalizedQuery) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
return searchableText(entity).includes(normalizedQuery);
|
|
137
|
+
}
|
|
138
|
+
function searchableText(entity) {
|
|
139
|
+
return [
|
|
140
|
+
entity.id,
|
|
141
|
+
entity.title,
|
|
142
|
+
entity.status,
|
|
143
|
+
JSON.stringify(entity.metadata),
|
|
144
|
+
entity.body
|
|
145
|
+
]
|
|
146
|
+
.filter(Boolean)
|
|
147
|
+
.join(' ')
|
|
148
|
+
.toLowerCase();
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core entity types for PlanFS
|
|
3
|
+
*/
|
|
4
|
+
export type EntityType = 'task' | 'epic' | 'milestone' | 'decision';
|
|
5
|
+
export type TaskStatus = 'todo' | 'in-progress' | 'review' | 'done';
|
|
6
|
+
export type TaskPriority = 'low' | 'medium' | 'high' | 'critical';
|
|
7
|
+
export type RefinementState = 'captured' | 'needs-refinement' | 'ready' | 'deferred' | 'discarded';
|
|
8
|
+
export type EpicStatus = 'active' | 'completed' | 'on-hold' | 'archived';
|
|
9
|
+
export type MilestoneStatus = 'active' | 'completed' | 'delayed';
|
|
10
|
+
export type DecisionStatus = 'proposed' | 'accepted' | 'rejected' | 'superseded';
|
|
11
|
+
export interface ArchiveMetadata {
|
|
12
|
+
archivedAt: string;
|
|
13
|
+
originalPath: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Base entity interface
|
|
17
|
+
*/
|
|
18
|
+
export interface BaseEntity {
|
|
19
|
+
id: string;
|
|
20
|
+
type: EntityType;
|
|
21
|
+
filePath: string;
|
|
22
|
+
metadata: Record<string, unknown>;
|
|
23
|
+
body: string;
|
|
24
|
+
diagnostics?: ValidationError[];
|
|
25
|
+
createdAt?: string;
|
|
26
|
+
updatedAt?: string;
|
|
27
|
+
archive?: ArchiveMetadata;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Task entity
|
|
31
|
+
*/
|
|
32
|
+
export interface Task extends BaseEntity {
|
|
33
|
+
type: 'task';
|
|
34
|
+
title: string;
|
|
35
|
+
status: TaskStatus;
|
|
36
|
+
priority?: TaskPriority;
|
|
37
|
+
assignee?: string;
|
|
38
|
+
epic?: string;
|
|
39
|
+
milestone?: string;
|
|
40
|
+
dependsOn?: string[];
|
|
41
|
+
tags?: string[];
|
|
42
|
+
dueDate?: string;
|
|
43
|
+
estimate?: string;
|
|
44
|
+
refinementState?: RefinementState;
|
|
45
|
+
backlogOrder?: number;
|
|
46
|
+
links?: Record<string, string>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Epic entity
|
|
50
|
+
*/
|
|
51
|
+
export interface Epic extends BaseEntity {
|
|
52
|
+
type: 'epic';
|
|
53
|
+
title: string;
|
|
54
|
+
status: EpicStatus;
|
|
55
|
+
priority?: TaskPriority;
|
|
56
|
+
owner?: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
targetDate?: string;
|
|
59
|
+
tags?: string[];
|
|
60
|
+
links?: Record<string, string>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Milestone entity
|
|
64
|
+
*/
|
|
65
|
+
export interface Milestone extends BaseEntity {
|
|
66
|
+
type: 'milestone';
|
|
67
|
+
title: string;
|
|
68
|
+
status: MilestoneStatus;
|
|
69
|
+
targetDate: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
owner?: string;
|
|
72
|
+
links?: Record<string, string>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Decision entity
|
|
76
|
+
*/
|
|
77
|
+
export interface Decision extends BaseEntity {
|
|
78
|
+
type: 'decision';
|
|
79
|
+
title: string;
|
|
80
|
+
status: DecisionStatus;
|
|
81
|
+
date?: string;
|
|
82
|
+
context?: string;
|
|
83
|
+
decision?: string;
|
|
84
|
+
consequences?: string;
|
|
85
|
+
author?: string;
|
|
86
|
+
supersedes?: string;
|
|
87
|
+
supersededBy?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Union type for all entities
|
|
91
|
+
*/
|
|
92
|
+
export type Entity = Task | Epic | Milestone | Decision;
|
|
93
|
+
/**
|
|
94
|
+
* Repository snapshot containing all loaded entities
|
|
95
|
+
*/
|
|
96
|
+
export interface Repository {
|
|
97
|
+
root: string;
|
|
98
|
+
tasks: Map<string, Task>;
|
|
99
|
+
epics: Map<string, Epic>;
|
|
100
|
+
milestones: Map<string, Milestone>;
|
|
101
|
+
decisions: Map<string, Decision>;
|
|
102
|
+
archivedTasks?: Map<string, Task>;
|
|
103
|
+
archivedEpics?: Map<string, Epic>;
|
|
104
|
+
diagnostics?: ValidationError[];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validation result
|
|
108
|
+
*/
|
|
109
|
+
export interface ValidationError {
|
|
110
|
+
id?: string;
|
|
111
|
+
path?: string;
|
|
112
|
+
message: string;
|
|
113
|
+
severity: 'error' | 'warning';
|
|
114
|
+
}
|
|
115
|
+
export interface ValidationResult {
|
|
116
|
+
valid: boolean;
|
|
117
|
+
errors: ValidationError[];
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation module
|
|
3
|
+
* Validates entities against schemas
|
|
4
|
+
*/
|
|
5
|
+
import { Entity, ValidationError, ValidationResult } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Validate a single entity
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateEntity(entity: Entity): ValidationError[];
|
|
10
|
+
export interface ValidateRepositoryOptions {
|
|
11
|
+
referenceEntities?: Entity[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate a collection of entities for global constraints.
|
|
15
|
+
*
|
|
16
|
+
* referenceEntities can satisfy references without participating in duplicate
|
|
17
|
+
* ID or circular dependency checks for the active collection.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateRepository(entities: Entity[], options?: ValidateRepositoryOptions): ValidationError[];
|
|
20
|
+
/**
|
|
21
|
+
* Validate all entities and return comprehensive result
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateAll(entities: Entity[]): ValidationResult;
|
|
24
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EACL,MAAM,EAKN,eAAe,EACf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAwEjB;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CA+ChE;AA6QD,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,yBAA8B,GACtC,eAAe,EAAE,CAsCnB;AAsJD;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAehE"}
|