aifastdb-devplan 1.3.9 → 1.6.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.
Files changed (78) 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 +2 -0
  6. package/dist/dev-plan-document-store.d.ts.map +1 -1
  7. package/dist/dev-plan-document-store.js +3 -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 +111 -18
  12. package/dist/dev-plan-factory.js.map +1 -1
  13. package/dist/dev-plan-graph-store.d.ts +15 -0
  14. package/dist/dev-plan-graph-store.d.ts.map +1 -1
  15. package/dist/dev-plan-graph-store.js +57 -2
  16. package/dist/dev-plan-graph-store.js.map +1 -1
  17. package/dist/index.d.ts +3 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +14 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/mcp-server/index.d.ts +3 -0
  22. package/dist/mcp-server/index.d.ts.map +1 -1
  23. package/dist/mcp-server/index.js +278 -4
  24. package/dist/mcp-server/index.js.map +1 -1
  25. package/dist/types.d.ts +72 -0
  26. package/dist/types.d.ts.map +1 -1
  27. package/dist/types.js +9 -1
  28. package/dist/types.js.map +1 -1
  29. package/dist/visualize/graph-canvas/api-compat.d.ts +20 -0
  30. package/dist/visualize/graph-canvas/api-compat.d.ts.map +1 -0
  31. package/dist/visualize/graph-canvas/api-compat.js +334 -0
  32. package/dist/visualize/graph-canvas/api-compat.js.map +1 -0
  33. package/dist/visualize/graph-canvas/clusterer.d.ts +16 -0
  34. package/dist/visualize/graph-canvas/clusterer.d.ts.map +1 -0
  35. package/dist/visualize/graph-canvas/clusterer.js +460 -0
  36. package/dist/visualize/graph-canvas/clusterer.js.map +1 -0
  37. package/dist/visualize/graph-canvas/core.d.ts +11 -0
  38. package/dist/visualize/graph-canvas/core.d.ts.map +1 -0
  39. package/dist/visualize/graph-canvas/core.js +844 -0
  40. package/dist/visualize/graph-canvas/core.js.map +1 -0
  41. package/dist/visualize/graph-canvas/index.d.ts +22 -0
  42. package/dist/visualize/graph-canvas/index.d.ts.map +1 -0
  43. package/dist/visualize/graph-canvas/index.js +69 -0
  44. package/dist/visualize/graph-canvas/index.js.map +1 -0
  45. package/dist/visualize/graph-canvas/interaction.d.ts +13 -0
  46. package/dist/visualize/graph-canvas/interaction.d.ts.map +1 -0
  47. package/dist/visualize/graph-canvas/interaction.js +446 -0
  48. package/dist/visualize/graph-canvas/interaction.js.map +1 -0
  49. package/dist/visualize/graph-canvas/layout-worker.d.ts +17 -0
  50. package/dist/visualize/graph-canvas/layout-worker.d.ts.map +1 -0
  51. package/dist/visualize/graph-canvas/layout-worker.js +541 -0
  52. package/dist/visualize/graph-canvas/layout-worker.js.map +1 -0
  53. package/dist/visualize/graph-canvas/lod.d.ts +10 -0
  54. package/dist/visualize/graph-canvas/lod.d.ts.map +1 -0
  55. package/dist/visualize/graph-canvas/lod.js +111 -0
  56. package/dist/visualize/graph-canvas/lod.js.map +1 -0
  57. package/dist/visualize/graph-canvas/renderer.d.ts +12 -0
  58. package/dist/visualize/graph-canvas/renderer.d.ts.map +1 -0
  59. package/dist/visualize/graph-canvas/renderer.js +682 -0
  60. package/dist/visualize/graph-canvas/renderer.js.map +1 -0
  61. package/dist/visualize/graph-canvas/spatial-index.d.ts +13 -0
  62. package/dist/visualize/graph-canvas/spatial-index.d.ts.map +1 -0
  63. package/dist/visualize/graph-canvas/spatial-index.js +482 -0
  64. package/dist/visualize/graph-canvas/spatial-index.js.map +1 -0
  65. package/dist/visualize/graph-canvas/styles.d.ts +11 -0
  66. package/dist/visualize/graph-canvas/styles.d.ts.map +1 -0
  67. package/dist/visualize/graph-canvas/styles.js +137 -0
  68. package/dist/visualize/graph-canvas/styles.js.map +1 -0
  69. package/dist/visualize/graph-canvas/viewport.d.ts +17 -0
  70. package/dist/visualize/graph-canvas/viewport.d.ts.map +1 -0
  71. package/dist/visualize/graph-canvas/viewport.js +375 -0
  72. package/dist/visualize/graph-canvas/viewport.js.map +1 -0
  73. package/dist/visualize/server.js +619 -6
  74. package/dist/visualize/server.js.map +1 -1
  75. package/dist/visualize/template.d.ts.map +1 -1
  76. package/dist/visualize/template.js +604 -18
  77. package/dist/visualize/template.js.map +1 -1
  78. package/package.json +1 -1
@@ -11,6 +11,11 @@
11
11
  * 2. .devplan/{projectName}/engine.json 中的配置
12
12
  * 3. 旧项目(已有 JSONL 数据文件)自动识别为 'document'
13
13
  * 4. 新项目默认使用 'graph'
14
+ *
15
+ * 多项目工作区支持:
16
+ * 通过 .devplan/config.json 中的 projects 注册表,
17
+ * projectName 自动路由到对应项目目录下的 .devplan/ 数据库。
18
+ * 例如 projectName="aifastdb-devplan" → D:\xxx\aifastdb-devplan\.devplan\
14
19
  */
15
20
  import type { IDevPlanStore } from './dev-plan-interface';
16
21
  /**
@@ -22,11 +27,23 @@ import type { IDevPlanStore } from './dev-plan-interface';
22
27
  export declare const DEFAULT_PROJECT_NAME = "devplan-db";
23
28
  /** 存储引擎类型 */
24
29
  export type DevPlanEngine = 'graph' | 'document';
30
+ /**
31
+ * 项目注册表条目
32
+ *
33
+ * 在多项目工作区中,每个 projectName 可映射到独立的项目根目录,
34
+ * 使得 DevPlan 数据存储到对应项目自己的 .devplan/ 目录下。
35
+ */
36
+ export interface ProjectRegistryEntry {
37
+ /** 项目根目录的绝对路径(如 "D:\\Project\\git\\aifastdb-devplan") */
38
+ rootPath: string;
39
+ }
25
40
  /**
26
41
  * .devplan/config.json 的内容格式
27
42
  *
28
43
  * 存放在 .devplan/ 根目录下(与各项目子目录同级),
29
44
  * 用于配置当前工作区的 DevPlan 默认行为。
45
+ *
46
+ * 多项目工作区:通过 projects 注册表将 projectName 路由到对应项目目录。
30
47
  */
31
48
  export interface DevPlanConfig {
32
49
  /** 默认项目名称(即 .devplan/ 下的子目录名) */
@@ -35,6 +52,19 @@ export interface DevPlanConfig {
35
52
  enableSemanticSearch?: boolean;
36
53
  /** Embedding 向量维度(默认 384) */
37
54
  embeddingDimension?: number;
55
+ /**
56
+ * 多项目工作区注册表:projectName → 项目根目录路径。
57
+ *
58
+ * 当 projectName 在此表中找到时,数据存储到对应项目的 .devplan/ 目录,
59
+ * 而非 MCP Server 进程 cwd 解析到的默认 .devplan/ 目录。
60
+ *
61
+ * 示例:
62
+ * {
63
+ * "ai_db": { "rootPath": "D:\\Project\\git\\ai_db" },
64
+ * "aifastdb-devplan": { "rootPath": "D:\\Project\\git\\aifastdb-devplan" }
65
+ * }
66
+ */
67
+ projects?: Record<string, ProjectRegistryEntry>;
38
68
  }
39
69
  /**
40
70
  * 读取 .devplan/config.json 工作区配置
@@ -60,21 +90,50 @@ export declare function writeDevPlanConfig(config: DevPlanConfig, basePath?: str
60
90
  */
61
91
  export declare function resolveProjectName(explicitName?: string, basePath?: string): string;
62
92
  /**
63
- * 获取默认的 DevPlan 存储基础路径
93
+ * 获取默认的 DevPlan 存储基础路径(工作区级别)
64
94
  *
65
95
  * 优先级:
66
96
  * 1. AIFASTDB_DEVPLAN_PATH 环境变量(显式指定)
67
97
  * 2. 项目内 .devplan/ 目录(天然跟随 Git 版本管理)
68
98
  * 3. 回退到用户目录 ~/.aifastdb/dev-plans/(兜底)
99
+ *
100
+ * 注意:此函数返回 MCP Server 进程 cwd 解析到的默认 .devplan/ 路径。
101
+ * 多项目工作区中,请优先使用 resolveBasePathForProject(projectName) 获取
102
+ * 项目特定的 basePath。
69
103
  */
70
104
  export declare function getDefaultBasePath(): string;
105
+ /**
106
+ * 根据 projectName 解析数据存储的 basePath(.devplan/ 目录路径)
107
+ *
108
+ * 多项目工作区核心路由函数。优先级:
109
+ * 1. 工作区 config.json → projects[projectName].rootPath → {rootPath}/.devplan/
110
+ * 2. 回退到默认 basePath(getDefaultBasePath())
111
+ *
112
+ * 示例:
113
+ * - resolveBasePathForProject("ai_db")
114
+ * → config.projects.ai_db.rootPath = "D:\\Project\\git\\ai_db"
115
+ * → 返回 "D:\\Project\\git\\ai_db\\.devplan"
116
+ *
117
+ * - resolveBasePathForProject("aifastdb-devplan")
118
+ * → config.projects["aifastdb-devplan"].rootPath = "D:\\Project\\git\\aifastdb-devplan"
119
+ * → 返回 "D:\\Project\\git\\aifastdb-devplan\\.devplan"
120
+ *
121
+ * - resolveBasePathForProject("unknown-project")
122
+ * → 注册表中未找到 → 返回 getDefaultBasePath()
123
+ */
124
+ export declare function resolveBasePathForProject(projectName?: string): string;
71
125
  /**
72
126
  * 为项目创建 DevPlan 存储实例
73
127
  *
74
- * @param projectName - 项目名称
75
- * @param basePath - 存储基础路径(默认自动解析)
128
+ * @param projectName - 项目名称(同时作为多项目工作区的路由键)
129
+ * @param basePath - 存储基础路径(显式指定时跳过项目路由)
76
130
  * @param engine - 显式指定引擎(优先级最高)
77
131
  *
132
+ * basePath 解析优先级:
133
+ * 1. 显式传入 basePath → 直接使用
134
+ * 2. 项目注册表路由 → resolveBasePathForProject(projectName)
135
+ * 3. 默认 basePath → getDefaultBasePath()(由 cwd 决定)
136
+ *
78
137
  * 引擎选择逻辑:
79
138
  * 1. 显式 engine 参数 → 使用指定引擎
80
139
  * 2. engine.json 已存在 → 使用配置的引擎
@@ -84,10 +143,17 @@ export declare function getDefaultBasePath(): string;
84
143
  export declare function createDevPlan(projectName: string, basePath?: string, engine?: DevPlanEngine): IDevPlanStore;
85
144
  /**
86
145
  * 列出所有已有的 DevPlan 项目
146
+ *
147
+ * 多项目工作区支持:
148
+ * 1. 扫描默认 basePath 下的子目录
149
+ * 2. 扫描项目注册表中每个注册项目的 .devplan/ 目录
150
+ * 3. 去重后返回完整列表
87
151
  */
88
152
  export declare function listDevPlans(basePath?: string): string[];
89
153
  /**
90
154
  * 获取项目使用的引擎类型
155
+ *
156
+ * 支持项目注册表路由:自动解析项目对应的 basePath。
91
157
  */
92
158
  export declare function getProjectEngine(projectName: string, basePath?: string): DevPlanEngine | null;
93
159
  //# sourceMappingURL=dev-plan-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev-plan-factory.d.ts","sourceRoot":"","sources":["../src/dev-plan-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAQ1D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAMjD,aAAa;AACb,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;AAQjD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6BAA6B;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAgBzE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAWjF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnF;AAMD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAW3C;AA8ED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,aAAa,GACrB,aAAa,CAyCf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAYxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAG7F"}
1
+ {"version":3,"file":"dev-plan-factory.d.ts","sourceRoot":"","sources":["../src/dev-plan-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAQ1D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAMjD,aAAa;AACb,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;AAQjD;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6BAA6B;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CACjD;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAgBzE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAWjF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnF;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAW3C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAgCtE;AA8ED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,aAAa,GACrB,aAAa,CAsDf;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CA8BxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAG7F"}
@@ -12,6 +12,11 @@
12
12
  * 2. .devplan/{projectName}/engine.json 中的配置
13
13
  * 3. 旧项目(已有 JSONL 数据文件)自动识别为 'document'
14
14
  * 4. 新项目默认使用 'graph'
15
+ *
16
+ * 多项目工作区支持:
17
+ * 通过 .devplan/config.json 中的 projects 注册表,
18
+ * projectName 自动路由到对应项目目录下的 .devplan/ 数据库。
19
+ * 例如 projectName="aifastdb-devplan" → D:\xxx\aifastdb-devplan\.devplan\
15
20
  */
16
21
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
22
  if (k2 === undefined) k2 = k;
@@ -52,6 +57,7 @@ exports.readDevPlanConfig = readDevPlanConfig;
52
57
  exports.writeDevPlanConfig = writeDevPlanConfig;
53
58
  exports.resolveProjectName = resolveProjectName;
54
59
  exports.getDefaultBasePath = getDefaultBasePath;
60
+ exports.resolveBasePathForProject = resolveBasePathForProject;
55
61
  exports.createDevPlan = createDevPlan;
56
62
  exports.listDevPlans = listDevPlans;
57
63
  exports.getProjectEngine = getProjectEngine;
@@ -132,12 +138,16 @@ function resolveProjectName(explicitName, basePath) {
132
138
  // Path Resolution
133
139
  // ============================================================================
134
140
  /**
135
- * 获取默认的 DevPlan 存储基础路径
141
+ * 获取默认的 DevPlan 存储基础路径(工作区级别)
136
142
  *
137
143
  * 优先级:
138
144
  * 1. AIFASTDB_DEVPLAN_PATH 环境变量(显式指定)
139
145
  * 2. 项目内 .devplan/ 目录(天然跟随 Git 版本管理)
140
146
  * 3. 回退到用户目录 ~/.aifastdb/dev-plans/(兜底)
147
+ *
148
+ * 注意:此函数返回 MCP Server 进程 cwd 解析到的默认 .devplan/ 路径。
149
+ * 多项目工作区中,请优先使用 resolveBasePathForProject(projectName) 获取
150
+ * 项目特定的 basePath。
141
151
  */
142
152
  function getDefaultBasePath() {
143
153
  if (process.env.AIFASTDB_DEVPLAN_PATH) {
@@ -149,6 +159,50 @@ function getDefaultBasePath() {
149
159
  }
150
160
  return path.join(os.homedir(), '.aifastdb', 'dev-plans');
151
161
  }
162
+ /**
163
+ * 根据 projectName 解析数据存储的 basePath(.devplan/ 目录路径)
164
+ *
165
+ * 多项目工作区核心路由函数。优先级:
166
+ * 1. 工作区 config.json → projects[projectName].rootPath → {rootPath}/.devplan/
167
+ * 2. 回退到默认 basePath(getDefaultBasePath())
168
+ *
169
+ * 示例:
170
+ * - resolveBasePathForProject("ai_db")
171
+ * → config.projects.ai_db.rootPath = "D:\\Project\\git\\ai_db"
172
+ * → 返回 "D:\\Project\\git\\ai_db\\.devplan"
173
+ *
174
+ * - resolveBasePathForProject("aifastdb-devplan")
175
+ * → config.projects["aifastdb-devplan"].rootPath = "D:\\Project\\git\\aifastdb-devplan"
176
+ * → 返回 "D:\\Project\\git\\aifastdb-devplan\\.devplan"
177
+ *
178
+ * - resolveBasePathForProject("unknown-project")
179
+ * → 注册表中未找到 → 返回 getDefaultBasePath()
180
+ */
181
+ function resolveBasePathForProject(projectName) {
182
+ const defaultBase = getDefaultBasePath();
183
+ if (!projectName)
184
+ return defaultBase;
185
+ // 读取工作区级别的 config.json(从默认 basePath)
186
+ const workspaceConfig = readDevPlanConfig(defaultBase);
187
+ if (workspaceConfig?.projects?.[projectName]?.rootPath) {
188
+ const projectRootPath = workspaceConfig.projects[projectName].rootPath;
189
+ // 验证项目根目录是否存在(优雅降级)
190
+ const fs = require('fs');
191
+ if (!fs.existsSync(projectRootPath)) {
192
+ console.error(`[DevPlan] WARNING: Project "${projectName}" registered rootPath does not exist: ${projectRootPath}. ` +
193
+ `Falling back to default basePath: ${defaultBase}. ` +
194
+ `Please update .devplan/config.json projects registry or create the directory.`);
195
+ return defaultBase;
196
+ }
197
+ const projectBasePath = path.join(projectRootPath, '.devplan');
198
+ // 确保 .devplan/ 目录存在
199
+ if (!fs.existsSync(projectBasePath)) {
200
+ fs.mkdirSync(projectBasePath, { recursive: true });
201
+ }
202
+ return projectBasePath;
203
+ }
204
+ return defaultBase;
205
+ }
152
206
  /**
153
207
  * 从当前工作目录向上查找项目根目录
154
208
  */
@@ -217,10 +271,15 @@ function hasExistingDocumentData(projectName, basePath) {
217
271
  /**
218
272
  * 为项目创建 DevPlan 存储实例
219
273
  *
220
- * @param projectName - 项目名称
221
- * @param basePath - 存储基础路径(默认自动解析)
274
+ * @param projectName - 项目名称(同时作为多项目工作区的路由键)
275
+ * @param basePath - 存储基础路径(显式指定时跳过项目路由)
222
276
  * @param engine - 显式指定引擎(优先级最高)
223
277
  *
278
+ * basePath 解析优先级:
279
+ * 1. 显式传入 basePath → 直接使用
280
+ * 2. 项目注册表路由 → resolveBasePathForProject(projectName)
281
+ * 3. 默认 basePath → getDefaultBasePath()(由 cwd 决定)
282
+ *
224
283
  * 引擎选择逻辑:
225
284
  * 1. 显式 engine 参数 → 使用指定引擎
226
285
  * 2. engine.json 已存在 → 使用配置的引擎
@@ -228,7 +287,8 @@ function hasExistingDocumentData(projectName, basePath) {
228
287
  * 4. 全新项目 → 默认使用 'graph'
229
288
  */
230
289
  function createDevPlan(projectName, basePath, engine) {
231
- const base = basePath || getDefaultBasePath();
290
+ // 核心变更:basePath 优先使用项目注册表路由
291
+ const base = basePath || resolveBasePathForProject(projectName);
232
292
  // 解析引擎类型
233
293
  let resolvedEngine;
234
294
  if (engine) {
@@ -248,10 +308,19 @@ function createDevPlan(projectName, basePath, engine) {
248
308
  }
249
309
  // 写入/更新引擎配置
250
310
  writeEngineConfig(projectName, base, resolvedEngine);
251
- // 读取语义搜索配置
252
- const devPlanConfig = readDevPlanConfig(base);
253
- const enableSemanticSearch = devPlanConfig?.enableSemanticSearch ?? false;
254
- const embeddingDimension = devPlanConfig?.embeddingDimension ?? 384;
311
+ // 读取语义搜索配置(优先项目自己的 config,其次工作区 config)
312
+ const projectConfig = readDevPlanConfig(base);
313
+ const defaultBase = getDefaultBasePath();
314
+ const workspaceConfig = base !== defaultBase ? readDevPlanConfig(defaultBase) : null;
315
+ const enableSemanticSearch = projectConfig?.enableSemanticSearch
316
+ ?? workspaceConfig?.enableSemanticSearch
317
+ ?? false;
318
+ const embeddingDimension = projectConfig?.embeddingDimension
319
+ ?? workspaceConfig?.embeddingDimension
320
+ ?? 384;
321
+ // 推导项目根目录(用于 git 操作的 cwd)
322
+ // base 是 .devplan 目录路径(如 D:\xxx\project\.devplan),dirname 即项目根
323
+ const gitCwd = base !== defaultBase ? path.dirname(base) : undefined;
255
324
  // 创建对应的存储实例
256
325
  if (resolvedEngine === 'graph') {
257
326
  return new dev_plan_graph_store_1.DevPlanGraphStore(projectName, {
@@ -259,6 +328,7 @@ function createDevPlan(projectName, basePath, engine) {
259
328
  shardCount: 4,
260
329
  enableSemanticSearch,
261
330
  embeddingDimension,
331
+ gitCwd,
262
332
  });
263
333
  }
264
334
  else {
@@ -266,32 +336,55 @@ function createDevPlan(projectName, basePath, engine) {
266
336
  documentPath: path.join(base, projectName, 'documents.jsonl'),
267
337
  taskPath: path.join(base, projectName, 'tasks.jsonl'),
268
338
  modulePath: path.join(base, projectName, 'modules.jsonl'),
339
+ gitCwd,
269
340
  });
270
341
  }
271
342
  }
272
343
  /**
273
344
  * 列出所有已有的 DevPlan 项目
345
+ *
346
+ * 多项目工作区支持:
347
+ * 1. 扫描默认 basePath 下的子目录
348
+ * 2. 扫描项目注册表中每个注册项目的 .devplan/ 目录
349
+ * 3. 去重后返回完整列表
274
350
  */
275
351
  function listDevPlans(basePath) {
352
+ const fs = require('fs');
276
353
  const base = basePath || getDefaultBasePath();
354
+ const plans = new Set();
355
+ // 1. 扫描默认 basePath 下的子目录
277
356
  try {
278
- const fs = require('fs');
279
- if (!fs.existsSync(base))
280
- return [];
281
- return fs.readdirSync(base).filter((name) => {
282
- const fullPath = path.join(base, name);
283
- return fs.statSync(fullPath).isDirectory();
284
- });
357
+ if (fs.existsSync(base)) {
358
+ fs.readdirSync(base).filter((name) => {
359
+ const fullPath = path.join(base, name);
360
+ return fs.statSync(fullPath).isDirectory();
361
+ }).forEach((name) => plans.add(name));
362
+ }
285
363
  }
286
- catch {
287
- return [];
364
+ catch { /* ignore */ }
365
+ // 2. 扫描项目注册表中的注册项目
366
+ const config = readDevPlanConfig(base);
367
+ if (config?.projects) {
368
+ for (const [projectName, entry] of Object.entries(config.projects)) {
369
+ try {
370
+ const projectBase = path.join(entry.rootPath, '.devplan');
371
+ const projectDataDir = path.join(projectBase, projectName);
372
+ if (fs.existsSync(projectDataDir) && fs.statSync(projectDataDir).isDirectory()) {
373
+ plans.add(projectName);
374
+ }
375
+ }
376
+ catch { /* ignore */ }
377
+ }
288
378
  }
379
+ return Array.from(plans);
289
380
  }
290
381
  /**
291
382
  * 获取项目使用的引擎类型
383
+ *
384
+ * 支持项目注册表路由:自动解析项目对应的 basePath。
292
385
  */
293
386
  function getProjectEngine(projectName, basePath) {
294
- const base = basePath || getDefaultBasePath();
387
+ const base = basePath || resolveBasePathForProject(projectName);
295
388
  return readEngineConfig(projectName, base);
296
389
  }
297
390
  //# sourceMappingURL=dev-plan-factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev-plan-factory.js","sourceRoot":"","sources":["../src/dev-plan-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev-plan-factory.js","sourceRoot":"","sources":["../src/dev-plan-factory.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ import type { DevPlanSection, DevPlanDocInput, DevPlanDoc, DevPlanDocTree, MainT
25
25
  export declare class DevPlanGraphStore implements IDevPlanStore {
26
26
  private graph;
27
27
  private projectName;
28
+ /** Git 操作的工作目录(多项目路由时指向项目根目录) */
29
+ private gitCwd;
28
30
  /** 缓存的项目根实体 ID */
29
31
  private projectEntityId;
30
32
  /** VibeSynapse 实例(用于 Embedding 生成),仅启用语义搜索时可用 */
@@ -39,6 +41,19 @@ export declare class DevPlanGraphStore implements IDevPlanStore {
39
41
  * 初始化失败时降级为纯字面搜索(graceful degradation)。
40
42
  */
41
43
  private initSynapse;
44
+ /**
45
+ * 一次性迁移:将旧 WAL 目录名重命名为语义化新名。
46
+ *
47
+ * 映射表:
48
+ * - shard_0_entities → shard_0_tasks
49
+ * - shard_2_index → shard_2_docs
50
+ * - shard_3_meta → shard_3_modules
51
+ * - shard_1_relations 不变
52
+ *
53
+ * 该方法必须在 `new SocialGraphV2(config)` 之前调用。
54
+ * 幂等:如果旧目录不存在或新目录已存在则跳过。
55
+ */
56
+ private static migrateWalDirNames;
42
57
  private ensureProjectEntity;
43
58
  private findProjectEntity;
44
59
  private getProjectId;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-plan-graph-store.d.ts","sourceRoot":"","sources":["../src/dev-plan-graph-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev-plan-graph-store.d.ts","sourceRoot":"","sources":["../src/dev-plan-graph-store.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
52
52
  exports.DevPlanGraphStore = void 0;
53
53
  const aifastdb_1 = require("aifastdb");
54
54
  const path = __importStar(require("path"));
55
+ const fs = __importStar(require("fs"));
55
56
  // ============================================================================
56
57
  // Constants
57
58
  // ============================================================================
@@ -107,13 +108,27 @@ class DevPlanGraphStore {
107
108
  /** 语义搜索是否成功初始化 */
108
109
  this.semanticSearchReady = false;
109
110
  this.projectName = projectName;
111
+ this.gitCwd = config.gitCwd;
112
+ // ── WAL 目录迁移:旧名 → 语义化新名 ──
113
+ // 必须在 SocialGraphV2 构造之前执行,否则 recover() 会找不到旧数据
114
+ DevPlanGraphStore.migrateWalDirNames(config.graphPath);
110
115
  // 构建 SocialGraphV2 配置
111
116
  const graphConfig = {
112
117
  path: config.graphPath,
113
118
  shardCount: config.shardCount || 4,
114
119
  walEnabled: true,
115
120
  mode: 'balanced',
116
- shardNames: ['entities', 'relations', 'index', 'meta'],
121
+ shardNames: ['tasks', 'relations', 'docs', 'modules'],
122
+ // 显式路由:DevPlan 实体类型 → 对应分片
123
+ typeShardMapping: {
124
+ 'devplan-project': 0, // 项目根节点 → tasks shard
125
+ 'devplan-main-task': 0, // 主任务 → tasks shard
126
+ 'devplan-sub-task': 0, // 子任务 → tasks shard
127
+ 'devplan-doc': 2, // 文档片段 → docs shard
128
+ 'devplan-module': 3, // 功能模块 → modules shard
129
+ '_default': 0, // 未知类型 → tasks shard (fallback)
130
+ },
131
+ relationShardId: 1, // 所有关系 → relations shard
117
132
  };
118
133
  // 如果启用语义搜索,配置 SocialGraphV2 的向量搜索
119
134
  const dimension = config.embeddingDimension || 384;
@@ -167,7 +182,7 @@ class DevPlanGraphStore {
167
182
  try {
168
183
  this.synapse.embed('test');
169
184
  this.semanticSearchReady = true;
170
- console.log('[DevPlan] Semantic search initialized (Candle MiniLM)');
185
+ console.error('[DevPlan] Semantic search initialized (Candle MiniLM)');
171
186
  }
172
187
  catch {
173
188
  console.warn('[DevPlan] VibeSynapse embed() dry-run failed. Falling back to literal search.');
@@ -182,6 +197,44 @@ class DevPlanGraphStore {
182
197
  }
183
198
  }
184
199
  // ==========================================================================
200
+ // WAL Directory Migration (旧分片名 → 语义化新名)
201
+ // ==========================================================================
202
+ /**
203
+ * 一次性迁移:将旧 WAL 目录名重命名为语义化新名。
204
+ *
205
+ * 映射表:
206
+ * - shard_0_entities → shard_0_tasks
207
+ * - shard_2_index → shard_2_docs
208
+ * - shard_3_meta → shard_3_modules
209
+ * - shard_1_relations 不变
210
+ *
211
+ * 该方法必须在 `new SocialGraphV2(config)` 之前调用。
212
+ * 幂等:如果旧目录不存在或新目录已存在则跳过。
213
+ */
214
+ static migrateWalDirNames(graphPath) {
215
+ const walBase = path.join(graphPath, 'wal');
216
+ if (!fs.existsSync(walBase))
217
+ return; // 全新安装,无需迁移
218
+ const renames = [
219
+ ['shard_0_entities', 'shard_0_tasks'],
220
+ ['shard_2_index', 'shard_2_docs'],
221
+ ['shard_3_meta', 'shard_3_modules'],
222
+ ];
223
+ for (const [oldName, newName] of renames) {
224
+ const oldDir = path.join(walBase, oldName);
225
+ const newDir = path.join(walBase, newName);
226
+ if (fs.existsSync(oldDir) && !fs.existsSync(newDir)) {
227
+ try {
228
+ fs.renameSync(oldDir, newDir);
229
+ console.error(`[DevPlan] WAL dir migrated: ${oldName} → ${newName}`);
230
+ }
231
+ catch (e) {
232
+ console.warn(`[DevPlan] Failed to migrate WAL dir ${oldName} → ${newName}: ${e instanceof Error ? e.message : String(e)}`);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ // ==========================================================================
185
238
  // Project Entity
186
239
  // ==========================================================================
187
240
  ensureProjectEntity() {
@@ -1612,6 +1665,7 @@ class DevPlanGraphStore {
1612
1665
  encoding: 'utf-8',
1613
1666
  timeout: 5000,
1614
1667
  stdio: ['pipe', 'pipe', 'pipe'],
1668
+ cwd: this.gitCwd,
1615
1669
  }).trim();
1616
1670
  }
1617
1671
  catch {
@@ -1624,6 +1678,7 @@ class DevPlanGraphStore {
1624
1678
  execSync(`git merge-base --is-ancestor ${commit} ${target}`, {
1625
1679
  timeout: 5000,
1626
1680
  stdio: ['pipe', 'pipe', 'pipe'],
1681
+ cwd: this.gitCwd,
1627
1682
  });
1628
1683
  return true;
1629
1684
  }