aifastdb-devplan 1.0.0 → 1.0.1
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 +391 -40
- package/dist/dev-plan-document-store.d.ts +309 -0
- package/dist/dev-plan-document-store.d.ts.map +1 -0
- package/dist/dev-plan-document-store.js +1543 -0
- package/dist/dev-plan-document-store.js.map +1 -0
- package/dist/dev-plan-factory.d.ts +49 -0
- package/dist/dev-plan-factory.d.ts.map +1 -0
- package/dist/dev-plan-factory.js +218 -0
- package/dist/dev-plan-factory.js.map +1 -0
- package/dist/dev-plan-graph-store.d.ts +114 -0
- package/dist/dev-plan-graph-store.d.ts.map +1 -0
- package/dist/dev-plan-graph-store.js +1073 -0
- package/dist/dev-plan-graph-store.js.map +1 -0
- package/dist/dev-plan-interface.d.ts +165 -0
- package/dist/dev-plan-interface.d.ts.map +1 -0
- package/dist/dev-plan-interface.js +10 -0
- package/dist/dev-plan-interface.js.map +1 -0
- package/dist/dev-plan-migrate.d.ts +52 -0
- package/dist/dev-plan-migrate.d.ts.map +1 -0
- package/dist/dev-plan-migrate.js +407 -0
- package/dist/dev-plan-migrate.js.map +1 -0
- package/dist/index.d.ts +20 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -10
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/index.js +225 -92
- package/dist/mcp-server/index.js.map +1 -1
- package/dist/types.d.ts +375 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +37 -0
- package/dist/types.js.map +1 -0
- package/dist/visualize/server.d.ts +18 -0
- package/dist/visualize/server.d.ts.map +1 -0
- package/dist/visualize/server.js +229 -0
- package/dist/visualize/server.js.map +1 -0
- package/dist/visualize/template.d.ts +8 -0
- package/dist/visualize/template.d.ts.map +1 -0
- package/dist/visualize/template.js +528 -0
- package/dist/visualize/template.js.map +1 -0
- package/package.json +14 -4
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevPlanDocumentStore — 基于 EnhancedDocumentStore 的开发计划存储实现
|
|
3
|
+
*
|
|
4
|
+
* 使用 aifastdb 的 EnhancedDocumentStore(JSONL 持久化)作为存储引擎。
|
|
5
|
+
* 实现 IDevPlanStore 接口,是 DevPlan 系统的两个存储后端之一。
|
|
6
|
+
*
|
|
7
|
+
* 特性:
|
|
8
|
+
* - JSONL 格式存储,人类可读,利于 Git 版本管理
|
|
9
|
+
* - 通过 tags 做索引查询
|
|
10
|
+
* - Append-only 存储,更新通过 delete + put 实现
|
|
11
|
+
*/
|
|
12
|
+
import type { IDevPlanStore } from './dev-plan-interface';
|
|
13
|
+
import type { DevPlanSection, DevPlanDocInput, DevPlanDoc, MainTaskInput, MainTask, SubTaskInput, SubTask, CompleteSubTaskResult, ProjectProgress, ModuleInput, Module, ModuleDetail, ModuleStatus, TaskStatus, TaskPriority, SyncGitResult, DevPlanStoreConfig, DevPlanExportedGraph } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* 基于 EnhancedDocumentStore 的开发计划存储
|
|
16
|
+
*
|
|
17
|
+
* 管理项目的开发计划文档和任务,使用三个 EnhancedDocumentStore 实例:
|
|
18
|
+
* - docStore: 文档片段 (Markdown 内容)
|
|
19
|
+
* - taskStore: 任务 (主任务 + 子任务层级)
|
|
20
|
+
* - moduleStore: 功能模块
|
|
21
|
+
*/
|
|
22
|
+
export declare class DevPlanDocumentStore implements IDevPlanStore {
|
|
23
|
+
private docStore;
|
|
24
|
+
private taskStore;
|
|
25
|
+
private moduleStore;
|
|
26
|
+
private projectName;
|
|
27
|
+
constructor(projectName: string, config: DevPlanStoreConfig);
|
|
28
|
+
/**
|
|
29
|
+
* 保存文档片段
|
|
30
|
+
*
|
|
31
|
+
* 如果同 section(+subSection)已存在,会覆盖旧版本。
|
|
32
|
+
*/
|
|
33
|
+
saveSection(input: DevPlanDocInput): string;
|
|
34
|
+
/**
|
|
35
|
+
* 获取文档片段
|
|
36
|
+
*/
|
|
37
|
+
getSection(section: DevPlanSection, subSection?: string): DevPlanDoc | null;
|
|
38
|
+
/**
|
|
39
|
+
* 列出项目的所有文档片段
|
|
40
|
+
*
|
|
41
|
+
* 对同一 section(+subSection) 的多个历史版本做去重,仅保留最新版。
|
|
42
|
+
*/
|
|
43
|
+
listSections(): DevPlanDoc[];
|
|
44
|
+
/**
|
|
45
|
+
* 更新文档片段内容
|
|
46
|
+
*/
|
|
47
|
+
updateSection(section: DevPlanSection, content: string, subSection?: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* 搜索文档片段
|
|
50
|
+
*
|
|
51
|
+
* 先对历史版本去重(同 listSections),再做关键词过滤。
|
|
52
|
+
*/
|
|
53
|
+
searchSections(query: string, limit?: number): DevPlanDoc[];
|
|
54
|
+
/**
|
|
55
|
+
* 删除文档片段
|
|
56
|
+
*/
|
|
57
|
+
deleteSection(section: DevPlanSection, subSection?: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* 创建主任务(开发阶段)
|
|
60
|
+
*/
|
|
61
|
+
createMainTask(input: MainTaskInput): MainTask;
|
|
62
|
+
/**
|
|
63
|
+
* 幂等导入主任务(Upsert)
|
|
64
|
+
*
|
|
65
|
+
* - 如果主任务不存在 → 创建新任务
|
|
66
|
+
* - 如果主任务已存在 → 更新标题/描述/优先级等字段,但保留已有的更高级状态
|
|
67
|
+
* (例如已完成的任务不会被重置为 pending)
|
|
68
|
+
* - updatedAt 保证严格递增,不会与历史版本重复
|
|
69
|
+
*
|
|
70
|
+
* @param input 主任务输入
|
|
71
|
+
* @param options.preserveStatus 若为 true(默认),则不覆盖已完成的状态
|
|
72
|
+
* @param options.status 导入时的目标状态(默认 pending)
|
|
73
|
+
* @returns 创建或更新后的主任务
|
|
74
|
+
*/
|
|
75
|
+
upsertMainTask(input: MainTaskInput, options?: {
|
|
76
|
+
preserveStatus?: boolean;
|
|
77
|
+
status?: TaskStatus;
|
|
78
|
+
}): MainTask;
|
|
79
|
+
/**
|
|
80
|
+
* 获取主任务
|
|
81
|
+
*
|
|
82
|
+
* 由于 JSONL append-only 存储会保留历史版本,
|
|
83
|
+
* 需要按 metadata.updatedAt 降序取最新版本。
|
|
84
|
+
*/
|
|
85
|
+
getMainTask(taskId: string): MainTask | null;
|
|
86
|
+
/**
|
|
87
|
+
* 列出主任务
|
|
88
|
+
*
|
|
89
|
+
* 对同一 taskId 的多个历史版本做去重,仅保留最新版。
|
|
90
|
+
*/
|
|
91
|
+
listMainTasks(filter?: {
|
|
92
|
+
status?: TaskStatus;
|
|
93
|
+
priority?: TaskPriority;
|
|
94
|
+
moduleId?: string;
|
|
95
|
+
}): MainTask[];
|
|
96
|
+
/**
|
|
97
|
+
* 更新主任务状态
|
|
98
|
+
*/
|
|
99
|
+
updateMainTaskStatus(taskId: string, status: TaskStatus): MainTask | null;
|
|
100
|
+
/**
|
|
101
|
+
* 添加子任务
|
|
102
|
+
*/
|
|
103
|
+
addSubTask(input: SubTaskInput): SubTask;
|
|
104
|
+
/**
|
|
105
|
+
* 幂等导入子任务(Upsert)
|
|
106
|
+
*
|
|
107
|
+
* - 如果子任务不存在 → 创建新子任务
|
|
108
|
+
* - 如果子任务已存在 → 更新标题/描述等字段,但保留已有的更高级状态
|
|
109
|
+
* (例如已完成的任务不会被重置为 pending)
|
|
110
|
+
* - updatedAt 保证严格递增,不会与历史版本重复
|
|
111
|
+
*
|
|
112
|
+
* @param input 子任务输入
|
|
113
|
+
* @param options.preserveStatus 若为 true(默认),则不覆盖已完成的状态
|
|
114
|
+
* @param options.status 导入时的目标状态(默认 pending)
|
|
115
|
+
* @returns 创建或更新后的子任务
|
|
116
|
+
*/
|
|
117
|
+
upsertSubTask(input: SubTaskInput, options?: {
|
|
118
|
+
preserveStatus?: boolean;
|
|
119
|
+
status?: TaskStatus;
|
|
120
|
+
}): SubTask;
|
|
121
|
+
/**
|
|
122
|
+
* 获取子任务
|
|
123
|
+
*
|
|
124
|
+
* 取同一 taskId 的最新版本(以 metadata.updatedAt 判定)。
|
|
125
|
+
*/
|
|
126
|
+
getSubTask(taskId: string): SubTask | null;
|
|
127
|
+
/**
|
|
128
|
+
* 列出某主任务下的所有子任务
|
|
129
|
+
*
|
|
130
|
+
* 对同一 taskId 的多个历史版本做去重,仅保留最新版。
|
|
131
|
+
*/
|
|
132
|
+
listSubTasks(parentTaskId: string, filter?: {
|
|
133
|
+
status?: TaskStatus;
|
|
134
|
+
}): SubTask[];
|
|
135
|
+
/**
|
|
136
|
+
* 更新子任务状态
|
|
137
|
+
*
|
|
138
|
+
* @param options.completedAtCommit - 完成时的 Git commit hash(仅 status=completed 时有效)
|
|
139
|
+
* @param options.revertReason - 回退原因(仅 status 从 completed 变为 pending 时有效)
|
|
140
|
+
*/
|
|
141
|
+
updateSubTaskStatus(taskId: string, status: TaskStatus, options?: {
|
|
142
|
+
completedAtCommit?: string;
|
|
143
|
+
revertReason?: string;
|
|
144
|
+
}): SubTask | null;
|
|
145
|
+
/**
|
|
146
|
+
* 完成子任务 — 核心自动化方法
|
|
147
|
+
*
|
|
148
|
+
* 自动处理:
|
|
149
|
+
* 1. 获取当前 Git HEAD 的 short SHA 用于锚定
|
|
150
|
+
* 2. 更新子任务状态为 completed,写入 completedAt 时间戳和 completedAtCommit
|
|
151
|
+
* 3. 重新计算主任务的 completedSubtasks 计数
|
|
152
|
+
* 4. 如果全部子任务完成,自动标记主任务为 completed
|
|
153
|
+
* 5. 如果主任务完成,更新 milestones 文档
|
|
154
|
+
*/
|
|
155
|
+
completeSubTask(taskId: string): CompleteSubTaskResult;
|
|
156
|
+
/**
|
|
157
|
+
* 手动完成主任务(跳过子任务检查)
|
|
158
|
+
*/
|
|
159
|
+
completeMainTask(taskId: string): MainTask;
|
|
160
|
+
/**
|
|
161
|
+
* 获取项目整体进度
|
|
162
|
+
*/
|
|
163
|
+
getProgress(): ProjectProgress;
|
|
164
|
+
/**
|
|
165
|
+
* 导出完整的 Markdown 文档
|
|
166
|
+
*/
|
|
167
|
+
exportToMarkdown(): string;
|
|
168
|
+
/**
|
|
169
|
+
* 导出仅任务进度的简洁 Markdown
|
|
170
|
+
*/
|
|
171
|
+
exportTaskSummary(): string;
|
|
172
|
+
/**
|
|
173
|
+
* 创建功能模块
|
|
174
|
+
*/
|
|
175
|
+
createModule(input: ModuleInput): Module;
|
|
176
|
+
/**
|
|
177
|
+
* 获取功能模块(含自动计算的 taskCount/docCount)
|
|
178
|
+
*/
|
|
179
|
+
getModule(moduleId: string): Module | null;
|
|
180
|
+
/**
|
|
181
|
+
* 列出所有功能模块
|
|
182
|
+
*/
|
|
183
|
+
listModules(filter?: {
|
|
184
|
+
status?: ModuleStatus;
|
|
185
|
+
}): Module[];
|
|
186
|
+
/**
|
|
187
|
+
* 更新功能模块
|
|
188
|
+
*/
|
|
189
|
+
updateModule(moduleId: string, updates: {
|
|
190
|
+
name?: string;
|
|
191
|
+
description?: string;
|
|
192
|
+
status?: ModuleStatus;
|
|
193
|
+
}): Module | null;
|
|
194
|
+
/**
|
|
195
|
+
* 删除功能模块
|
|
196
|
+
*/
|
|
197
|
+
deleteModule(moduleId: string): boolean;
|
|
198
|
+
/**
|
|
199
|
+
* 获取模块详情 — 包含关联的任务和文档
|
|
200
|
+
*/
|
|
201
|
+
getModuleDetail(moduleId: string): ModuleDetail | null;
|
|
202
|
+
/**
|
|
203
|
+
* 将存储的更改刷到磁盘
|
|
204
|
+
*/
|
|
205
|
+
sync(): void;
|
|
206
|
+
/**
|
|
207
|
+
* 获取项目名称
|
|
208
|
+
*/
|
|
209
|
+
getProjectName(): string;
|
|
210
|
+
/**
|
|
211
|
+
* 获取文档的有效 updatedAt 时间戳。
|
|
212
|
+
*
|
|
213
|
+
* EnhancedDocumentStore 使用 append-only JSONL 存储,修改文档时实际上
|
|
214
|
+
* 是 delete 旧文档 + put 新文档。因此同一逻辑文档可能存在多个物理版本。
|
|
215
|
+
* 必须通过 metadata.updatedAt 来判断哪个是最新的"可用文档",
|
|
216
|
+
* 其余的都是"历史文档"。
|
|
217
|
+
*
|
|
218
|
+
* 优先级:metadata.updatedAt > metadata.createdAt > doc.createdAt
|
|
219
|
+
*/
|
|
220
|
+
private getDocUpdatedAt;
|
|
221
|
+
/**
|
|
222
|
+
* 确保当前时间戳严格大于参考时间戳。
|
|
223
|
+
*
|
|
224
|
+
* EnhancedDocumentStore 使用 append-only JSONL 存储,保留所有历史版本。
|
|
225
|
+
* 版本选择通过 metadata.updatedAt 判定最新文档。
|
|
226
|
+
* 如果 delete+put 发生在同一毫秒内,新旧版本的 updatedAt 相同,
|
|
227
|
+
* 会导致去重时可能选中旧版本(如 pending 状态),造成状态丢失。
|
|
228
|
+
*
|
|
229
|
+
* 本方法在 delete 之后、put 之前调用,自旋等待直到时间戳前进,
|
|
230
|
+
* 从而保证新版本的 updatedAt 一定大于旧版本。
|
|
231
|
+
*/
|
|
232
|
+
private ensureTimestampAfter;
|
|
233
|
+
/**
|
|
234
|
+
* 删除文档并确保后续 put 的 updatedAt 严格大于被删文档。
|
|
235
|
+
*
|
|
236
|
+
* 使用 metadata.updatedAt 作为参考时间戳(而非 doc.createdAt),
|
|
237
|
+
* 因为版本选择是基于 metadata.updatedAt 进行的。
|
|
238
|
+
*/
|
|
239
|
+
private deleteAndEnsureTimestampAdvance;
|
|
240
|
+
/**
|
|
241
|
+
* 对同一 taskId 的多个历史版本做去重,仅保留最新版(metadata.updatedAt 最大)。
|
|
242
|
+
*
|
|
243
|
+
* 由于 EnhancedDocumentStore 使用 append-only JSONL 存储,
|
|
244
|
+
* delete+put 操作会在文件中保留历史版本。重新加载时所有版本都会出现,
|
|
245
|
+
* 因此需要在查询层面进行去重。
|
|
246
|
+
*
|
|
247
|
+
* 使用 metadata.updatedAt(而非 doc.createdAt)作为版本判定依据,
|
|
248
|
+
* 确保"最近更新时间"的文档才是可用文档,其余为历史文档。
|
|
249
|
+
*/
|
|
250
|
+
private deduplicateByTaskId;
|
|
251
|
+
private docToDevPlanDoc;
|
|
252
|
+
private docToMainTask;
|
|
253
|
+
private docToModule;
|
|
254
|
+
private docToSubTask;
|
|
255
|
+
/**
|
|
256
|
+
* 刷新主任务的子任务计数
|
|
257
|
+
*/
|
|
258
|
+
private refreshMainTaskCounts;
|
|
259
|
+
/**
|
|
260
|
+
* 当主任务完成时自动更新 milestones 文档
|
|
261
|
+
*/
|
|
262
|
+
private autoUpdateMilestones;
|
|
263
|
+
/**
|
|
264
|
+
* 🆕 获取当前 Git HEAD 的 short SHA
|
|
265
|
+
*
|
|
266
|
+
* 在非 Git 仓库或 Git 不可用时返回 undefined,不阻断正常流程。
|
|
267
|
+
*/
|
|
268
|
+
private getCurrentGitCommit;
|
|
269
|
+
/**
|
|
270
|
+
* 🆕 检查 commit 是否是 target 的祖先
|
|
271
|
+
*
|
|
272
|
+
* 使用 `git merge-base --is-ancestor` 命令。
|
|
273
|
+
* 如果 commit 不存在或不可达,返回 false(视为需要回退)。
|
|
274
|
+
*/
|
|
275
|
+
private isAncestor;
|
|
276
|
+
/**
|
|
277
|
+
* 🆕 回退子任务状态
|
|
278
|
+
*
|
|
279
|
+
* 将已完成的子任务回退为 pending,记录回退原因,
|
|
280
|
+
* 清空 completedAtCommit 和 completedAt。
|
|
281
|
+
* 同时刷新父主任务的计数。
|
|
282
|
+
*/
|
|
283
|
+
private revertSubTask;
|
|
284
|
+
/**
|
|
285
|
+
* 🆕 同步检查所有已完成任务与 Git 历史的一致性
|
|
286
|
+
*
|
|
287
|
+
* 对每个 status=completed 且有 completedAtCommit 的子任务:
|
|
288
|
+
* 1. 检查 completedAtCommit 是否是当前 HEAD 的祖先
|
|
289
|
+
* 2. 如果不是(说明 Git 发生了回滚),回退任务状态为 pending
|
|
290
|
+
* 3. 记录 revertReason
|
|
291
|
+
*
|
|
292
|
+
* @param dryRun 如果为 true,只返回哪些任务会被回退,不实际修改数据
|
|
293
|
+
* @returns 同步结果,包含被回退的任务列表
|
|
294
|
+
*/
|
|
295
|
+
syncWithGit(dryRun?: boolean): SyncGitResult;
|
|
296
|
+
/**
|
|
297
|
+
* 生成文本进度条
|
|
298
|
+
*/
|
|
299
|
+
private progressBar;
|
|
300
|
+
/**
|
|
301
|
+
* EnhancedDocumentStore 不支持图谱导出,返回 null。
|
|
302
|
+
* 如需图谱可视化,请使用 SocialGraphV2 引擎(DevPlanGraphStore)。
|
|
303
|
+
*/
|
|
304
|
+
exportGraph(_options?: {
|
|
305
|
+
includeDocuments?: boolean;
|
|
306
|
+
includeModules?: boolean;
|
|
307
|
+
}): DevPlanExportedGraph | null;
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=dev-plan-document-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-plan-document-store.d.ts","sourceRoot":"","sources":["../src/dev-plan-document-store.ts"],"names":[],"mappings":"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"}
|