aifastdb-devplan 1.5.0 → 1.6.2

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 (121) hide show
  1. package/dist/autopilot.d.ts +58 -0
  2. package/dist/autopilot.d.ts.map +1 -0
  3. package/dist/autopilot.js +250 -0
  4. package/dist/autopilot.js.map +1 -0
  5. package/dist/dev-plan-document-store.d.ts +15 -1
  6. package/dist/dev-plan-document-store.d.ts.map +1 -1
  7. package/dist/dev-plan-document-store.js +122 -0
  8. package/dist/dev-plan-document-store.js.map +1 -1
  9. package/dist/dev-plan-factory.d.ts +69 -3
  10. package/dist/dev-plan-factory.d.ts.map +1 -1
  11. package/dist/dev-plan-factory.js +113 -19
  12. package/dist/dev-plan-factory.js.map +1 -1
  13. package/dist/dev-plan-graph-store.d.ts +79 -1
  14. package/dist/dev-plan-graph-store.d.ts.map +1 -1
  15. package/dist/dev-plan-graph-store.js +420 -3
  16. package/dist/dev-plan-graph-store.js.map +1 -1
  17. package/dist/dev-plan-interface.d.ts +24 -1
  18. package/dist/dev-plan-interface.d.ts.map +1 -1
  19. package/dist/dev-plan-migrate.d.ts +1 -0
  20. package/dist/dev-plan-migrate.d.ts.map +1 -1
  21. package/dist/dev-plan-migrate.js +28 -2
  22. package/dist/dev-plan-migrate.js.map +1 -1
  23. package/dist/index.d.ts +3 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +14 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/mcp-server/index.d.ts +3 -0
  28. package/dist/mcp-server/index.d.ts.map +1 -1
  29. package/dist/mcp-server/index.js +397 -4
  30. package/dist/mcp-server/index.js.map +1 -1
  31. package/dist/types.d.ts +160 -1
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/types.js +9 -1
  34. package/dist/types.js.map +1 -1
  35. package/dist/visualize/graph-canvas/api-compat.d.ts +20 -0
  36. package/dist/visualize/graph-canvas/api-compat.d.ts.map +1 -0
  37. package/dist/visualize/graph-canvas/api-compat.js +344 -0
  38. package/dist/visualize/graph-canvas/api-compat.js.map +1 -0
  39. package/dist/visualize/graph-canvas/clusterer.d.ts +16 -0
  40. package/dist/visualize/graph-canvas/clusterer.d.ts.map +1 -0
  41. package/dist/visualize/graph-canvas/clusterer.js +460 -0
  42. package/dist/visualize/graph-canvas/clusterer.js.map +1 -0
  43. package/dist/visualize/graph-canvas/core.d.ts +11 -0
  44. package/dist/visualize/graph-canvas/core.d.ts.map +1 -0
  45. package/dist/visualize/graph-canvas/core.js +1136 -0
  46. package/dist/visualize/graph-canvas/core.js.map +1 -0
  47. package/dist/visualize/graph-canvas/index.d.ts +22 -0
  48. package/dist/visualize/graph-canvas/index.d.ts.map +1 -0
  49. package/dist/visualize/graph-canvas/index.js +69 -0
  50. package/dist/visualize/graph-canvas/index.js.map +1 -0
  51. package/dist/visualize/graph-canvas/interaction.d.ts +13 -0
  52. package/dist/visualize/graph-canvas/interaction.d.ts.map +1 -0
  53. package/dist/visualize/graph-canvas/interaction.js +457 -0
  54. package/dist/visualize/graph-canvas/interaction.js.map +1 -0
  55. package/dist/visualize/graph-canvas/layout-worker.d.ts +17 -0
  56. package/dist/visualize/graph-canvas/layout-worker.d.ts.map +1 -0
  57. package/dist/visualize/graph-canvas/layout-worker.js +577 -0
  58. package/dist/visualize/graph-canvas/layout-worker.js.map +1 -0
  59. package/dist/visualize/graph-canvas/lod.d.ts +10 -0
  60. package/dist/visualize/graph-canvas/lod.d.ts.map +1 -0
  61. package/dist/visualize/graph-canvas/lod.js +111 -0
  62. package/dist/visualize/graph-canvas/lod.js.map +1 -0
  63. package/dist/visualize/graph-canvas/renderer.d.ts +12 -0
  64. package/dist/visualize/graph-canvas/renderer.d.ts.map +1 -0
  65. package/dist/visualize/graph-canvas/renderer.js +813 -0
  66. package/dist/visualize/graph-canvas/renderer.js.map +1 -0
  67. package/dist/visualize/graph-canvas/spatial-index.d.ts +13 -0
  68. package/dist/visualize/graph-canvas/spatial-index.d.ts.map +1 -0
  69. package/dist/visualize/graph-canvas/spatial-index.js +482 -0
  70. package/dist/visualize/graph-canvas/spatial-index.js.map +1 -0
  71. package/dist/visualize/graph-canvas/styles.d.ts +11 -0
  72. package/dist/visualize/graph-canvas/styles.d.ts.map +1 -0
  73. package/dist/visualize/graph-canvas/styles.js +152 -0
  74. package/dist/visualize/graph-canvas/styles.js.map +1 -0
  75. package/dist/visualize/graph-canvas/viewport.d.ts +17 -0
  76. package/dist/visualize/graph-canvas/viewport.d.ts.map +1 -0
  77. package/dist/visualize/graph-canvas/viewport.js +385 -0
  78. package/dist/visualize/graph-canvas/viewport.js.map +1 -0
  79. package/dist/visualize/server.js +737 -7
  80. package/dist/visualize/server.js.map +1 -1
  81. package/dist/visualize/template-core.d.ts +9 -0
  82. package/dist/visualize/template-core.d.ts.map +1 -0
  83. package/dist/visualize/template-core.js +714 -0
  84. package/dist/visualize/template-core.js.map +1 -0
  85. package/dist/visualize/template-data-loading.d.ts +7 -0
  86. package/dist/visualize/template-data-loading.d.ts.map +1 -0
  87. package/dist/visualize/template-data-loading.js +677 -0
  88. package/dist/visualize/template-data-loading.js.map +1 -0
  89. package/dist/visualize/template-detail-panel.d.ts +14 -0
  90. package/dist/visualize/template-detail-panel.d.ts.map +1 -0
  91. package/dist/visualize/template-detail-panel.js +553 -0
  92. package/dist/visualize/template-detail-panel.js.map +1 -0
  93. package/dist/visualize/template-graph-3d.d.ts +7 -0
  94. package/dist/visualize/template-graph-3d.d.ts.map +1 -0
  95. package/dist/visualize/template-graph-3d.js +1112 -0
  96. package/dist/visualize/template-graph-3d.js.map +1 -0
  97. package/dist/visualize/template-graph-vis.d.ts +8 -0
  98. package/dist/visualize/template-graph-vis.d.ts.map +1 -0
  99. package/dist/visualize/template-graph-vis.js +1204 -0
  100. package/dist/visualize/template-graph-vis.js.map +1 -0
  101. package/dist/visualize/template-html.d.ts +9 -0
  102. package/dist/visualize/template-html.d.ts.map +1 -0
  103. package/dist/visualize/template-html.js +484 -0
  104. package/dist/visualize/template-html.js.map +1 -0
  105. package/dist/visualize/template-pages.d.ts +7 -0
  106. package/dist/visualize/template-pages.d.ts.map +1 -0
  107. package/dist/visualize/template-pages.js +806 -0
  108. package/dist/visualize/template-pages.js.map +1 -0
  109. package/dist/visualize/template-stats-modal.d.ts +7 -0
  110. package/dist/visualize/template-stats-modal.d.ts.map +1 -0
  111. package/dist/visualize/template-stats-modal.js +406 -0
  112. package/dist/visualize/template-stats-modal.js.map +1 -0
  113. package/dist/visualize/template-styles.d.ts +9 -0
  114. package/dist/visualize/template-styles.d.ts.map +1 -0
  115. package/dist/visualize/template-styles.js +487 -0
  116. package/dist/visualize/template-styles.js.map +1 -0
  117. package/dist/visualize/template.d.ts +14 -3
  118. package/dist/visualize/template.d.ts.map +1 -1
  119. package/dist/visualize/template.js +38 -2889
  120. package/dist/visualize/template.js.map +1 -1
  121. package/package.json +1 -1
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Autopilot 核心逻辑模块
3
+ *
4
+ * 提供 getAutopilotStatus() 和 getAutopilotNextAction() 两个核心函数,
5
+ * 供 HTTP API(visualize/server.ts)和 MCP 工具(mcp-server/index.ts)共用。
6
+ *
7
+ * 设计原则:
8
+ * - 纯逻辑函数,接收 IDevPlanStore 实例,不涉及 HTTP/MCP 传输层
9
+ * - 无副作用(读取任务状态,不修改)
10
+ * - 返回强类型结构,调用方直接 JSON.stringify 即可
11
+ */
12
+ import type { IDevPlanStore } from './dev-plan-interface';
13
+ import type { AutopilotStatus, AutopilotNextAction, AutopilotConfig, ExecutorHeartbeat } from './types';
14
+ /**
15
+ * 获取 Autopilot 执行状态
16
+ *
17
+ * 分析项目的任务状态,返回:
18
+ * - 是否有进行中的阶段
19
+ * - 当前活跃阶段的进度
20
+ * - 当前进行中的子任务
21
+ * - 下一个待执行的子任务
22
+ * - 下一个待启动的阶段
23
+ * - 剩余未完成阶段数
24
+ */
25
+ export declare function getAutopilotStatus(store: IDevPlanStore): AutopilotStatus;
26
+ /**
27
+ * 智能推荐下一步动作
28
+ *
29
+ * 决策逻辑(优先级从高到低):
30
+ * 1. 所有阶段已完成 → all_done
31
+ * 2. 有活跃阶段 + 有 in_progress 子任务 → wait(AI 正在工作)
32
+ * 3. 有活跃阶段 + 有 pending 子任务 → send_task(发送下一个子任务)
33
+ * 4. 有活跃阶段 + 全部子任务完成 → start_phase(启动下一个阶段)
34
+ * 5. 无活跃阶段 + 有 pending 阶段 → start_phase(启动第一个待开始阶段)
35
+ * 6. 无活跃阶段 + 无 pending 阶段 → all_done
36
+ */
37
+ export declare function getAutopilotNextAction(store: IDevPlanStore): AutopilotNextAction;
38
+ /**
39
+ * 获取项目的 Autopilot 配置
40
+ */
41
+ export declare function getAutopilotConfig(projectName: string): AutopilotConfig;
42
+ /**
43
+ * 更新项目的 Autopilot 配置(合并更新)
44
+ */
45
+ export declare function updateAutopilotConfig(projectName: string, updates: Partial<AutopilotConfig>): AutopilotConfig;
46
+ /**
47
+ * 记录 executor 心跳
48
+ */
49
+ export declare function recordHeartbeat(projectName: string, heartbeat: ExecutorHeartbeat): void;
50
+ /**
51
+ * 获取最近的心跳信息
52
+ */
53
+ export declare function getLastHeartbeat(projectName: string): {
54
+ heartbeat: ExecutorHeartbeat | null;
55
+ receivedAt: number;
56
+ isAlive: boolean;
57
+ };
58
+ //# sourceMappingURL=autopilot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../src/autopilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EAClB,MAAM,SAAS,CAAC;AA+BjB;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CA2DxE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,mBAAmB,CAwGhF;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAEvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,eAAe,CAIjB;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAIvF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IACrD,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAWA"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ /**
3
+ * Autopilot 核心逻辑模块
4
+ *
5
+ * 提供 getAutopilotStatus() 和 getAutopilotNextAction() 两个核心函数,
6
+ * 供 HTTP API(visualize/server.ts)和 MCP 工具(mcp-server/index.ts)共用。
7
+ *
8
+ * 设计原则:
9
+ * - 纯逻辑函数,接收 IDevPlanStore 实例,不涉及 HTTP/MCP 传输层
10
+ * - 无副作用(读取任务状态,不修改)
11
+ * - 返回强类型结构,调用方直接 JSON.stringify 即可
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.getAutopilotStatus = getAutopilotStatus;
15
+ exports.getAutopilotNextAction = getAutopilotNextAction;
16
+ exports.getAutopilotConfig = getAutopilotConfig;
17
+ exports.updateAutopilotConfig = updateAutopilotConfig;
18
+ exports.recordHeartbeat = recordHeartbeat;
19
+ exports.getLastHeartbeat = getLastHeartbeat;
20
+ const types_1 = require("./types");
21
+ const runtimeMap = new Map();
22
+ function getRuntime(projectName) {
23
+ if (!runtimeMap.has(projectName)) {
24
+ runtimeMap.set(projectName, {
25
+ config: { ...types_1.DEFAULT_AUTOPILOT_CONFIG },
26
+ lastHeartbeat: null,
27
+ lastHeartbeatTime: 0,
28
+ });
29
+ }
30
+ return runtimeMap.get(projectName);
31
+ }
32
+ // ============================================================================
33
+ // Core Logic: getAutopilotStatus
34
+ // ============================================================================
35
+ /**
36
+ * 获取 Autopilot 执行状态
37
+ *
38
+ * 分析项目的任务状态,返回:
39
+ * - 是否有进行中的阶段
40
+ * - 当前活跃阶段的进度
41
+ * - 当前进行中的子任务
42
+ * - 下一个待执行的子任务
43
+ * - 下一个待启动的阶段
44
+ * - 剩余未完成阶段数
45
+ */
46
+ function getAutopilotStatus(store) {
47
+ const progress = store.getProgress();
48
+ const tasks = progress.tasks;
49
+ // 找到 in_progress 状态的主任务(活跃阶段)
50
+ const activePhaseProgress = tasks.find(t => t.status === 'in_progress');
51
+ // 剩余未完成阶段(pending + in_progress)
52
+ const remainingPhases = tasks.filter(t => t.status !== 'completed' && t.status !== 'cancelled').length;
53
+ const result = {
54
+ hasActivePhase: !!activePhaseProgress,
55
+ remainingPhases,
56
+ };
57
+ if (activePhaseProgress) {
58
+ result.activePhase = {
59
+ taskId: activePhaseProgress.taskId,
60
+ title: activePhaseProgress.title,
61
+ totalSubtasks: activePhaseProgress.total,
62
+ completedSubtasks: activePhaseProgress.completed,
63
+ percent: activePhaseProgress.percent,
64
+ };
65
+ // 获取活跃阶段的子任务列表
66
+ const subTasks = store.listSubTasks(activePhaseProgress.taskId);
67
+ // 当前 in_progress 的子任务
68
+ const currentSub = subTasks.find(s => s.status === 'in_progress');
69
+ if (currentSub) {
70
+ result.currentSubTask = {
71
+ taskId: currentSub.taskId,
72
+ title: currentSub.title,
73
+ status: currentSub.status,
74
+ };
75
+ }
76
+ // 下一个 pending 的子任务
77
+ const nextPending = subTasks.find(s => s.status === 'pending');
78
+ if (nextPending) {
79
+ result.nextPendingSubTask = {
80
+ taskId: nextPending.taskId,
81
+ title: nextPending.title,
82
+ };
83
+ }
84
+ }
85
+ // 下一个待启动的阶段(pending 状态,按 order 排序取第一个)
86
+ const nextPendingPhaseProgress = tasks.find(t => t.status === 'pending');
87
+ if (nextPendingPhaseProgress) {
88
+ const mainTask = store.getMainTask(nextPendingPhaseProgress.taskId);
89
+ result.nextPendingPhase = {
90
+ taskId: nextPendingPhaseProgress.taskId,
91
+ title: nextPendingPhaseProgress.title,
92
+ priority: mainTask?.priority || 'P0',
93
+ };
94
+ }
95
+ return result;
96
+ }
97
+ // ============================================================================
98
+ // Core Logic: getAutopilotNextAction
99
+ // ============================================================================
100
+ /**
101
+ * 智能推荐下一步动作
102
+ *
103
+ * 决策逻辑(优先级从高到低):
104
+ * 1. 所有阶段已完成 → all_done
105
+ * 2. 有活跃阶段 + 有 in_progress 子任务 → wait(AI 正在工作)
106
+ * 3. 有活跃阶段 + 有 pending 子任务 → send_task(发送下一个子任务)
107
+ * 4. 有活跃阶段 + 全部子任务完成 → start_phase(启动下一个阶段)
108
+ * 5. 无活跃阶段 + 有 pending 阶段 → start_phase(启动第一个待开始阶段)
109
+ * 6. 无活跃阶段 + 无 pending 阶段 → all_done
110
+ */
111
+ function getAutopilotNextAction(store) {
112
+ const status = getAutopilotStatus(store);
113
+ const progress = store.getProgress();
114
+ const tasks = progress.tasks;
115
+ // Case 1: 所有阶段已完成
116
+ if (status.remainingPhases === 0) {
117
+ return {
118
+ action: 'all_done',
119
+ message: `项目所有 ${tasks.length} 个阶段已全部完成!`,
120
+ };
121
+ }
122
+ // Case 2~4: 有活跃阶段
123
+ if (status.hasActivePhase && status.activePhase) {
124
+ const phase = status.activePhase;
125
+ const subTasks = store.listSubTasks(phase.taskId);
126
+ // 有 in_progress 子任务 → wait
127
+ if (status.currentSubTask) {
128
+ return {
129
+ action: 'wait',
130
+ phase: {
131
+ taskId: phase.taskId,
132
+ title: phase.title,
133
+ status: 'in_progress',
134
+ totalSubtasks: phase.totalSubtasks,
135
+ completedSubtasks: phase.completedSubtasks,
136
+ },
137
+ subTask: {
138
+ taskId: status.currentSubTask.taskId,
139
+ title: status.currentSubTask.title,
140
+ status: status.currentSubTask.status,
141
+ },
142
+ message: `${status.currentSubTask.taskId} — ${status.currentSubTask.title} 正在执行中,等待完成`,
143
+ };
144
+ }
145
+ // 有 pending 子任务 → send_task
146
+ const nextPending = subTasks.find(s => s.status === 'pending');
147
+ if (nextPending) {
148
+ return {
149
+ action: 'send_task',
150
+ phase: {
151
+ taskId: phase.taskId,
152
+ title: phase.title,
153
+ status: 'in_progress',
154
+ totalSubtasks: phase.totalSubtasks,
155
+ completedSubtasks: phase.completedSubtasks,
156
+ },
157
+ subTask: {
158
+ taskId: nextPending.taskId,
159
+ title: nextPending.title,
160
+ description: nextPending.description,
161
+ status: nextPending.status,
162
+ },
163
+ message: `当前阶段有 ${phase.totalSubtasks - phase.completedSubtasks} 个待完成子任务,下一个: ${nextPending.taskId} — ${nextPending.title}`,
164
+ };
165
+ }
166
+ // 活跃阶段的子任务全部完成 → 查找下一个阶段
167
+ const nextPhase = tasks.find(t => t.status === 'pending');
168
+ if (nextPhase) {
169
+ return {
170
+ action: 'start_phase',
171
+ phase: {
172
+ taskId: nextPhase.taskId,
173
+ title: nextPhase.title,
174
+ status: 'pending',
175
+ totalSubtasks: nextPhase.total,
176
+ completedSubtasks: nextPhase.completed,
177
+ },
178
+ message: `${phase.taskId} 全部子任务已完成,建议启动下一阶段: ${nextPhase.taskId} — ${nextPhase.title}`,
179
+ };
180
+ }
181
+ // 无更多阶段
182
+ return {
183
+ action: 'all_done',
184
+ message: `${phase.taskId} 全部子任务已完成,且无更多待启动阶段。项目开发完毕!`,
185
+ };
186
+ }
187
+ // Case 5: 无活跃阶段 + 有 pending 阶段
188
+ if (status.nextPendingPhase) {
189
+ const nextPhase = tasks.find(t => t.taskId === status.nextPendingPhase.taskId);
190
+ return {
191
+ action: 'start_phase',
192
+ phase: {
193
+ taskId: status.nextPendingPhase.taskId,
194
+ title: status.nextPendingPhase.title,
195
+ status: 'pending',
196
+ totalSubtasks: nextPhase?.total || 0,
197
+ completedSubtasks: nextPhase?.completed || 0,
198
+ },
199
+ message: `无进行中阶段,建议启动: ${status.nextPendingPhase.taskId} — ${status.nextPendingPhase.title}`,
200
+ };
201
+ }
202
+ // Case 6: 全部完成
203
+ return {
204
+ action: 'all_done',
205
+ message: `项目所有阶段已全部完成!`,
206
+ };
207
+ }
208
+ // ============================================================================
209
+ // Config Management
210
+ // ============================================================================
211
+ /**
212
+ * 获取项目的 Autopilot 配置
213
+ */
214
+ function getAutopilotConfig(projectName) {
215
+ return { ...getRuntime(projectName).config };
216
+ }
217
+ /**
218
+ * 更新项目的 Autopilot 配置(合并更新)
219
+ */
220
+ function updateAutopilotConfig(projectName, updates) {
221
+ const runtime = getRuntime(projectName);
222
+ runtime.config = { ...runtime.config, ...updates };
223
+ return { ...runtime.config };
224
+ }
225
+ // ============================================================================
226
+ // Heartbeat Management
227
+ // ============================================================================
228
+ /**
229
+ * 记录 executor 心跳
230
+ */
231
+ function recordHeartbeat(projectName, heartbeat) {
232
+ const runtime = getRuntime(projectName);
233
+ runtime.lastHeartbeat = heartbeat;
234
+ runtime.lastHeartbeatTime = Date.now();
235
+ }
236
+ /**
237
+ * 获取最近的心跳信息
238
+ */
239
+ function getLastHeartbeat(projectName) {
240
+ const runtime = getRuntime(projectName);
241
+ const timeoutMs = runtime.config.pollIntervalSeconds * 3 * 1000; // 3 倍轮询间隔视为超时
242
+ const isAlive = runtime.lastHeartbeat !== null &&
243
+ (Date.now() - runtime.lastHeartbeatTime) < timeoutMs;
244
+ return {
245
+ heartbeat: runtime.lastHeartbeat,
246
+ receivedAt: runtime.lastHeartbeatTime,
247
+ isAlive,
248
+ };
249
+ }
250
+ //# sourceMappingURL=autopilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autopilot.js","sourceRoot":"","sources":["../src/autopilot.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * - Append-only 存储,更新通过 delete + put 实现
11
11
  */
12
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';
13
+ import type { DevPlanSection, DevPlanDocInput, DevPlanDoc, MainTaskInput, MainTask, SubTaskInput, SubTask, CompleteSubTaskResult, ProjectProgress, ModuleInput, Module, ModuleDetail, ModuleStatus, TaskStatus, TaskPriority, SyncGitResult, DevPlanStoreConfig, DevPlanExportedGraph, PromptInput, Prompt } from './types';
14
14
  /**
15
15
  * 基于 EnhancedDocumentStore 的开发计划存储
16
16
  *
@@ -18,12 +18,16 @@ import type { DevPlanSection, DevPlanDocInput, DevPlanDoc, MainTaskInput, MainTa
18
18
  * - docStore: 文档片段 (Markdown 内容)
19
19
  * - taskStore: 任务 (主任务 + 子任务层级)
20
20
  * - moduleStore: 功能模块
21
+ * - promptStore: Prompt 日志
21
22
  */
22
23
  export declare class DevPlanDocumentStore implements IDevPlanStore {
23
24
  private docStore;
24
25
  private taskStore;
25
26
  private moduleStore;
27
+ private promptStore;
26
28
  private projectName;
29
+ /** Git 操作的工作目录(多项目路由时指向项目根目录) */
30
+ private gitCwd;
27
31
  constructor(projectName: string, config: DevPlanStoreConfig);
28
32
  /**
29
33
  * 保存文档片段
@@ -199,6 +203,16 @@ export declare class DevPlanDocumentStore implements IDevPlanStore {
199
203
  * 获取模块详情 — 包含关联的任务和文档
200
204
  */
201
205
  getModuleDetail(moduleId: string): ModuleDetail | null;
206
+ savePrompt(input: PromptInput): Prompt;
207
+ listPrompts(filter?: {
208
+ date?: string;
209
+ relatedTaskId?: string;
210
+ limit?: number;
211
+ }): Prompt[];
212
+ /**
213
+ * 将 DocumentStore 文档转为 Prompt 对象
214
+ */
215
+ private docToPrompt;
202
216
  /**
203
217
  * 将存储的更改刷到磁盘
204
218
  */
@@ -1 +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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"}
1
+ {"version":3,"file":"dev-plan-document-store.d.ts","sourceRoot":"","sources":["../src/dev-plan-document-store.ts"],"names":[],"mappings":"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"}
@@ -45,13 +45,16 @@ function sectionImportance(section) {
45
45
  * - docStore: 文档片段 (Markdown 内容)
46
46
  * - taskStore: 任务 (主任务 + 子任务层级)
47
47
  * - moduleStore: 功能模块
48
+ * - promptStore: Prompt 日志
48
49
  */
49
50
  class DevPlanDocumentStore {
50
51
  constructor(projectName, config) {
51
52
  this.projectName = projectName;
53
+ this.gitCwd = config.gitCwd;
52
54
  this.docStore = new aifastdb_1.EnhancedDocumentStore(config.documentPath, (0, aifastdb_1.documentStoreProductionConfig)());
53
55
  this.taskStore = new aifastdb_1.EnhancedDocumentStore(config.taskPath, (0, aifastdb_1.documentStoreProductionConfig)());
54
56
  this.moduleStore = new aifastdb_1.EnhancedDocumentStore(config.modulePath, (0, aifastdb_1.documentStoreProductionConfig)());
57
+ this.promptStore = new aifastdb_1.EnhancedDocumentStore(config.promptPath, (0, aifastdb_1.documentStoreProductionConfig)());
55
58
  }
56
59
  // ==========================================================================
57
60
  // Document Section Operations
@@ -1123,6 +1126,122 @@ class DevPlanDocumentStore {
1123
1126
  return { module: mod, mainTasks, subTasks, documents };
1124
1127
  }
1125
1128
  // ==========================================================================
1129
+ // Prompt Operations (Prompt 日志)
1130
+ // ==========================================================================
1131
+ savePrompt(input) {
1132
+ const now = Date.now();
1133
+ const today = new Date(now).toISOString().slice(0, 10); // YYYY-MM-DD
1134
+ // 获取当天已有 prompt 数量,分配自增序号
1135
+ const existingToday = this.listPrompts({ date: today });
1136
+ const promptIndex = existingToday.length + 1;
1137
+ const promptData = {
1138
+ content: input.content,
1139
+ aiInterpretation: input.aiInterpretation || '',
1140
+ summary: input.summary || '',
1141
+ relatedTaskId: input.relatedTaskId || null,
1142
+ };
1143
+ const tags = [
1144
+ `plan:${this.projectName}`,
1145
+ 'type:prompt',
1146
+ `date:${today}`,
1147
+ ];
1148
+ // 关联主任务 tag
1149
+ if (input.relatedTaskId) {
1150
+ tags.push(`task:${input.relatedTaskId}`);
1151
+ }
1152
+ // 用户自定义 tags
1153
+ if (input.tags?.length) {
1154
+ for (const t of input.tags) {
1155
+ tags.push(`custom:${t}`);
1156
+ }
1157
+ }
1158
+ const docInput = {
1159
+ content: JSON.stringify(promptData),
1160
+ contentType: aifastdb_1.ContentType.Text,
1161
+ tags,
1162
+ metadata: {
1163
+ projectName: this.projectName,
1164
+ promptIndex,
1165
+ date: today,
1166
+ relatedTaskId: input.relatedTaskId || null,
1167
+ tags: input.tags || [],
1168
+ createdAt: now,
1169
+ },
1170
+ importance: 0.5,
1171
+ };
1172
+ const id = this.promptStore.put(docInput);
1173
+ this.promptStore.flush();
1174
+ return {
1175
+ id,
1176
+ projectName: this.projectName,
1177
+ promptIndex,
1178
+ content: input.content,
1179
+ aiInterpretation: input.aiInterpretation,
1180
+ summary: input.summary,
1181
+ relatedTaskId: input.relatedTaskId,
1182
+ tags: input.tags || [],
1183
+ createdAt: now,
1184
+ };
1185
+ }
1186
+ listPrompts(filter) {
1187
+ let docs;
1188
+ if (filter?.relatedTaskId) {
1189
+ // 按关联任务查询
1190
+ docs = this.promptStore.findByTag(`task:${filter.relatedTaskId}`)
1191
+ .filter((doc) => doc.tags.includes(`plan:${this.projectName}`) &&
1192
+ doc.tags.includes('type:prompt'));
1193
+ }
1194
+ else if (filter?.date) {
1195
+ // 按日期查询
1196
+ docs = this.promptStore.findByTag(`date:${filter.date}`)
1197
+ .filter((doc) => doc.tags.includes(`plan:${this.projectName}`) &&
1198
+ doc.tags.includes('type:prompt'));
1199
+ }
1200
+ else {
1201
+ // 全量查询
1202
+ docs = this.promptStore.findByTag(`plan:${this.projectName}`)
1203
+ .filter((doc) => doc.tags.includes('type:prompt'));
1204
+ }
1205
+ // 去重(保留最新)
1206
+ const latestMap = new Map();
1207
+ for (const doc of docs) {
1208
+ latestMap.set(doc.id, doc);
1209
+ }
1210
+ let prompts = Array.from(latestMap.values())
1211
+ .map((doc) => this.docToPrompt(doc))
1212
+ .sort((a, b) => b.createdAt - a.createdAt);
1213
+ if (filter?.limit && filter.limit > 0) {
1214
+ prompts = prompts.slice(0, filter.limit);
1215
+ }
1216
+ return prompts;
1217
+ }
1218
+ /**
1219
+ * 将 DocumentStore 文档转为 Prompt 对象
1220
+ */
1221
+ docToPrompt(doc) {
1222
+ const meta = doc.metadata || {};
1223
+ let data = {};
1224
+ try {
1225
+ data = JSON.parse(doc.content || '{}');
1226
+ }
1227
+ catch { /* ignore */ }
1228
+ // 从 tags 中提取自定义标签
1229
+ const customTags = (doc.tags || [])
1230
+ .filter((t) => t.startsWith('custom:'))
1231
+ .map((t) => t.slice(7));
1232
+ return {
1233
+ id: doc.id,
1234
+ projectName: this.projectName,
1235
+ promptIndex: meta.promptIndex || 0,
1236
+ content: data.content || '',
1237
+ aiInterpretation: data.aiInterpretation || undefined,
1238
+ summary: data.summary || undefined,
1239
+ relatedTaskId: data.relatedTaskId || meta.relatedTaskId || undefined,
1240
+ tags: customTags.length > 0 ? customTags : (meta.tags || []),
1241
+ createdAt: meta.createdAt || doc.created_at || Date.now(),
1242
+ };
1243
+ }
1244
+ // ==========================================================================
1126
1245
  // Utility
1127
1246
  // ==========================================================================
1128
1247
  /**
@@ -1132,6 +1251,7 @@ class DevPlanDocumentStore {
1132
1251
  this.docStore.flush();
1133
1252
  this.taskStore.flush();
1134
1253
  this.moduleStore.flush();
1254
+ this.promptStore.flush();
1135
1255
  }
1136
1256
  /**
1137
1257
  * 获取项目名称
@@ -1490,6 +1610,7 @@ class DevPlanDocumentStore {
1490
1610
  encoding: 'utf-8',
1491
1611
  timeout: 5000,
1492
1612
  stdio: ['pipe', 'pipe', 'pipe'], // 静默 stderr
1613
+ cwd: this.gitCwd,
1493
1614
  }).trim();
1494
1615
  }
1495
1616
  catch {
@@ -1508,6 +1629,7 @@ class DevPlanDocumentStore {
1508
1629
  execSync(`git merge-base --is-ancestor ${commit} ${target}`, {
1509
1630
  timeout: 5000,
1510
1631
  stdio: ['pipe', 'pipe', 'pipe'],
1632
+ cwd: this.gitCwd,
1511
1633
  });
1512
1634
  return true; // exit code 0 = is ancestor
1513
1635
  }