zero-workspace 0.0.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 (507) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +187 -0
  3. package/config/component-versions.json +16 -0
  4. package/config/scenarioCapabilities.json +29 -0
  5. package/config/version-notes.yaml +244 -0
  6. package/dist/adapters/OutputAdapter.d.ts +79 -0
  7. package/dist/adapters/OutputAdapter.d.ts.map +1 -0
  8. package/dist/adapters/OutputAdapter.js +124 -0
  9. package/dist/adapters/OutputAdapter.js.map +1 -0
  10. package/dist/cli/check-node-version.d.ts +3 -0
  11. package/dist/cli/check-node-version.d.ts.map +1 -0
  12. package/dist/cli/check-node-version.js +153 -0
  13. package/dist/cli/check-node-version.js.map +1 -0
  14. package/dist/cli/plugins.d.ts +41 -0
  15. package/dist/cli/plugins.d.ts.map +1 -0
  16. package/dist/cli/plugins.js +742 -0
  17. package/dist/cli/plugins.js.map +1 -0
  18. package/dist/cli/rebuild.d.ts +63 -0
  19. package/dist/cli/rebuild.d.ts.map +1 -0
  20. package/dist/cli/rebuild.js +989 -0
  21. package/dist/cli/rebuild.js.map +1 -0
  22. package/dist/cli/repair.d.ts +7 -0
  23. package/dist/cli/repair.d.ts.map +1 -0
  24. package/dist/cli/repair.js +925 -0
  25. package/dist/cli/repair.js.map +1 -0
  26. package/dist/cli/setup.d.ts +7 -0
  27. package/dist/cli/setup.d.ts.map +1 -0
  28. package/dist/cli/setup.js +452 -0
  29. package/dist/cli/setup.js.map +1 -0
  30. package/dist/cli/update.d.ts +10 -0
  31. package/dist/cli/update.d.ts.map +1 -0
  32. package/dist/cli/update.js +426 -0
  33. package/dist/cli/update.js.map +1 -0
  34. package/dist/cli/webui.d.ts +6 -0
  35. package/dist/cli/webui.d.ts.map +1 -0
  36. package/dist/cli/webui.js +210 -0
  37. package/dist/cli/webui.js.map +1 -0
  38. package/dist/http/index.d.ts +3 -0
  39. package/dist/http/index.d.ts.map +1 -0
  40. package/dist/http/index.js +15 -0
  41. package/dist/http/index.js.map +1 -0
  42. package/dist/http/middleware/errorHandler.d.ts +16 -0
  43. package/dist/http/middleware/errorHandler.d.ts.map +1 -0
  44. package/dist/http/middleware/errorHandler.js +79 -0
  45. package/dist/http/middleware/errorHandler.js.map +1 -0
  46. package/dist/http/routes/admin.d.ts +3 -0
  47. package/dist/http/routes/admin.d.ts.map +1 -0
  48. package/dist/http/routes/admin.js +730 -0
  49. package/dist/http/routes/admin.js.map +1 -0
  50. package/dist/http/routes/backup.d.ts +3 -0
  51. package/dist/http/routes/backup.d.ts.map +1 -0
  52. package/dist/http/routes/backup.js +172 -0
  53. package/dist/http/routes/backup.js.map +1 -0
  54. package/dist/http/routes/config.d.ts +3 -0
  55. package/dist/http/routes/config.d.ts.map +1 -0
  56. package/dist/http/routes/config.js +157 -0
  57. package/dist/http/routes/config.js.map +1 -0
  58. package/dist/http/routes/context.d.ts +3 -0
  59. package/dist/http/routes/context.d.ts.map +1 -0
  60. package/dist/http/routes/context.js +82 -0
  61. package/dist/http/routes/context.js.map +1 -0
  62. package/dist/http/routes/log.d.ts +3 -0
  63. package/dist/http/routes/log.d.ts.map +1 -0
  64. package/dist/http/routes/log.js +105 -0
  65. package/dist/http/routes/log.js.map +1 -0
  66. package/dist/http/routes/memo.d.ts +6 -0
  67. package/dist/http/routes/memo.d.ts.map +1 -0
  68. package/dist/http/routes/memo.js +29 -0
  69. package/dist/http/routes/memo.js.map +1 -0
  70. package/dist/http/routes/node.d.ts +3 -0
  71. package/dist/http/routes/node.d.ts.map +1 -0
  72. package/dist/http/routes/node.js +251 -0
  73. package/dist/http/routes/node.js.map +1 -0
  74. package/dist/http/routes/state.d.ts +3 -0
  75. package/dist/http/routes/state.d.ts.map +1 -0
  76. package/dist/http/routes/state.js +48 -0
  77. package/dist/http/routes/state.js.map +1 -0
  78. package/dist/http/routes/workspace.d.ts +3 -0
  79. package/dist/http/routes/workspace.d.ts.map +1 -0
  80. package/dist/http/routes/workspace.js +249 -0
  81. package/dist/http/routes/workspace.js.map +1 -0
  82. package/dist/http/server.d.ts +10 -0
  83. package/dist/http/server.d.ts.map +1 -0
  84. package/dist/http/server.js +284 -0
  85. package/dist/http/server.js.map +1 -0
  86. package/dist/http/services.d.ts +93 -0
  87. package/dist/http/services.d.ts.map +1 -0
  88. package/dist/http/services.js +297 -0
  89. package/dist/http/services.js.map +1 -0
  90. package/dist/index.d.ts +3 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +1073 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/prompts/guidanceContent.d.ts +18 -0
  95. package/dist/prompts/guidanceContent.d.ts.map +1 -0
  96. package/dist/prompts/guidanceContent.js +814 -0
  97. package/dist/prompts/guidanceContent.js.map +1 -0
  98. package/dist/prompts/index.d.ts +2 -0
  99. package/dist/prompts/index.d.ts.map +1 -0
  100. package/dist/prompts/index.js +4 -0
  101. package/dist/prompts/index.js.map +1 -0
  102. package/dist/prompts/instructions.d.ts +56 -0
  103. package/dist/prompts/instructions.d.ts.map +1 -0
  104. package/dist/prompts/instructions.js +1343 -0
  105. package/dist/prompts/instructions.js.map +1 -0
  106. package/dist/services/BackupService.d.ts +104 -0
  107. package/dist/services/BackupService.d.ts.map +1 -0
  108. package/dist/services/BackupService.js +549 -0
  109. package/dist/services/BackupService.js.map +1 -0
  110. package/dist/services/CapabilityService.d.ts +38 -0
  111. package/dist/services/CapabilityService.d.ts.map +1 -0
  112. package/dist/services/CapabilityService.js +256 -0
  113. package/dist/services/CapabilityService.js.map +1 -0
  114. package/dist/services/ConfigService.d.ts +35 -0
  115. package/dist/services/ConfigService.d.ts.map +1 -0
  116. package/dist/services/ConfigService.js +105 -0
  117. package/dist/services/ConfigService.js.map +1 -0
  118. package/dist/services/ContextService.d.ts +65 -0
  119. package/dist/services/ContextService.d.ts.map +1 -0
  120. package/dist/services/ContextService.js +503 -0
  121. package/dist/services/ContextService.js.map +1 -0
  122. package/dist/services/DetectionService.d.ts +76 -0
  123. package/dist/services/DetectionService.d.ts.map +1 -0
  124. package/dist/services/DetectionService.js +262 -0
  125. package/dist/services/DetectionService.js.map +1 -0
  126. package/dist/services/DispatchService.d.ts +267 -0
  127. package/dist/services/DispatchService.d.ts.map +1 -0
  128. package/dist/services/DispatchService.js +1357 -0
  129. package/dist/services/DispatchService.js.map +1 -0
  130. package/dist/services/EventService.d.ts +81 -0
  131. package/dist/services/EventService.d.ts.map +1 -0
  132. package/dist/services/EventService.js +187 -0
  133. package/dist/services/EventService.js.map +1 -0
  134. package/dist/services/GuidanceService.d.ts +64 -0
  135. package/dist/services/GuidanceService.d.ts.map +1 -0
  136. package/dist/services/GuidanceService.js +259 -0
  137. package/dist/services/GuidanceService.js.map +1 -0
  138. package/dist/services/HealthService.d.ts +43 -0
  139. package/dist/services/HealthService.d.ts.map +1 -0
  140. package/dist/services/HealthService.js +276 -0
  141. package/dist/services/HealthService.js.map +1 -0
  142. package/dist/services/InstallationService.d.ts +62 -0
  143. package/dist/services/InstallationService.d.ts.map +1 -0
  144. package/dist/services/InstallationService.js +204 -0
  145. package/dist/services/InstallationService.js.map +1 -0
  146. package/dist/services/LogService.d.ts +35 -0
  147. package/dist/services/LogService.d.ts.map +1 -0
  148. package/dist/services/LogService.js +189 -0
  149. package/dist/services/LogService.js.map +1 -0
  150. package/dist/services/MemoService.d.ts +39 -0
  151. package/dist/services/MemoService.d.ts.map +1 -0
  152. package/dist/services/MemoService.js +288 -0
  153. package/dist/services/MemoService.js.map +1 -0
  154. package/dist/services/NodeService.d.ts +90 -0
  155. package/dist/services/NodeService.d.ts.map +1 -0
  156. package/dist/services/NodeService.js +958 -0
  157. package/dist/services/NodeService.js.map +1 -0
  158. package/dist/services/OpenSpecParser.d.ts +43 -0
  159. package/dist/services/OpenSpecParser.d.ts.map +1 -0
  160. package/dist/services/OpenSpecParser.js +191 -0
  161. package/dist/services/OpenSpecParser.js.map +1 -0
  162. package/dist/services/ReferenceService.d.ts +35 -0
  163. package/dist/services/ReferenceService.d.ts.map +1 -0
  164. package/dist/services/ReferenceService.js +195 -0
  165. package/dist/services/ReferenceService.js.map +1 -0
  166. package/dist/services/RepairService.d.ts +36 -0
  167. package/dist/services/RepairService.d.ts.map +1 -0
  168. package/dist/services/RepairService.js +429 -0
  169. package/dist/services/RepairService.js.map +1 -0
  170. package/dist/services/SearchService.d.ts +34 -0
  171. package/dist/services/SearchService.d.ts.map +1 -0
  172. package/dist/services/SearchService.js +293 -0
  173. package/dist/services/SearchService.js.map +1 -0
  174. package/dist/services/SessionService.d.ts +136 -0
  175. package/dist/services/SessionService.d.ts.map +1 -0
  176. package/dist/services/SessionService.js +297 -0
  177. package/dist/services/SessionService.js.map +1 -0
  178. package/dist/services/StateService.d.ts +97 -0
  179. package/dist/services/StateService.d.ts.map +1 -0
  180. package/dist/services/StateService.js +846 -0
  181. package/dist/services/StateService.js.map +1 -0
  182. package/dist/services/TutorialService.d.ts +114 -0
  183. package/dist/services/TutorialService.d.ts.map +1 -0
  184. package/dist/services/TutorialService.js +1262 -0
  185. package/dist/services/TutorialService.js.map +1 -0
  186. package/dist/services/WorkspaceService.d.ts +273 -0
  187. package/dist/services/WorkspaceService.d.ts.map +1 -0
  188. package/dist/services/WorkspaceService.js +1764 -0
  189. package/dist/services/WorkspaceService.js.map +1 -0
  190. package/dist/services/index.d.ts +15 -0
  191. package/dist/services/index.d.ts.map +1 -0
  192. package/dist/services/index.js +14 -0
  193. package/dist/services/index.js.map +1 -0
  194. package/dist/storage/FileSystemAdapter.d.ts +223 -0
  195. package/dist/storage/FileSystemAdapter.d.ts.map +1 -0
  196. package/dist/storage/FileSystemAdapter.js +384 -0
  197. package/dist/storage/FileSystemAdapter.js.map +1 -0
  198. package/dist/storage/JsonStorage.d.ts +158 -0
  199. package/dist/storage/JsonStorage.d.ts.map +1 -0
  200. package/dist/storage/JsonStorage.js +613 -0
  201. package/dist/storage/JsonStorage.js.map +1 -0
  202. package/dist/storage/MarkdownStorage.d.ts +178 -0
  203. package/dist/storage/MarkdownStorage.d.ts.map +1 -0
  204. package/dist/storage/MarkdownStorage.js +918 -0
  205. package/dist/storage/MarkdownStorage.js.map +1 -0
  206. package/dist/storage/SessionBindingStorage.d.ts +69 -0
  207. package/dist/storage/SessionBindingStorage.d.ts.map +1 -0
  208. package/dist/storage/SessionBindingStorage.js +131 -0
  209. package/dist/storage/SessionBindingStorage.js.map +1 -0
  210. package/dist/storage/index.d.ts +6 -0
  211. package/dist/storage/index.d.ts.map +1 -0
  212. package/dist/storage/index.js +6 -0
  213. package/dist/storage/index.js.map +1 -0
  214. package/dist/tools/capability.d.ts +18 -0
  215. package/dist/tools/capability.d.ts.map +1 -0
  216. package/dist/tools/capability.js +73 -0
  217. package/dist/tools/capability.js.map +1 -0
  218. package/dist/tools/config.d.ts +14 -0
  219. package/dist/tools/config.d.ts.map +1 -0
  220. package/dist/tools/config.js +61 -0
  221. package/dist/tools/config.js.map +1 -0
  222. package/dist/tools/context.d.ts +22 -0
  223. package/dist/tools/context.d.ts.map +1 -0
  224. package/dist/tools/context.js +139 -0
  225. package/dist/tools/context.js.map +1 -0
  226. package/dist/tools/dispatch.d.ts +41 -0
  227. package/dist/tools/dispatch.d.ts.map +1 -0
  228. package/dist/tools/dispatch.js +380 -0
  229. package/dist/tools/dispatch.js.map +1 -0
  230. package/dist/tools/help.d.ts +44 -0
  231. package/dist/tools/help.d.ts.map +1 -0
  232. package/dist/tools/help.js +227 -0
  233. package/dist/tools/help.js.map +1 -0
  234. package/dist/tools/import.d.ts +17 -0
  235. package/dist/tools/import.d.ts.map +1 -0
  236. package/dist/tools/import.js +96 -0
  237. package/dist/tools/import.js.map +1 -0
  238. package/dist/tools/index.d.ts +12 -0
  239. package/dist/tools/index.d.ts.map +1 -0
  240. package/dist/tools/index.js +13 -0
  241. package/dist/tools/index.js.map +1 -0
  242. package/dist/tools/log.d.ts +21 -0
  243. package/dist/tools/log.d.ts.map +1 -0
  244. package/dist/tools/log.js +93 -0
  245. package/dist/tools/log.js.map +1 -0
  246. package/dist/tools/memo.d.ts +26 -0
  247. package/dist/tools/memo.d.ts.map +1 -0
  248. package/dist/tools/memo.js +188 -0
  249. package/dist/tools/memo.js.map +1 -0
  250. package/dist/tools/node.d.ts +34 -0
  251. package/dist/tools/node.d.ts.map +1 -0
  252. package/dist/tools/node.js +328 -0
  253. package/dist/tools/node.js.map +1 -0
  254. package/dist/tools/search.d.ts +14 -0
  255. package/dist/tools/search.d.ts.map +1 -0
  256. package/dist/tools/search.js +95 -0
  257. package/dist/tools/search.js.map +1 -0
  258. package/dist/tools/session.d.ts +22 -0
  259. package/dist/tools/session.d.ts.map +1 -0
  260. package/dist/tools/session.js +127 -0
  261. package/dist/tools/session.js.map +1 -0
  262. package/dist/tools/state.d.ts +10 -0
  263. package/dist/tools/state.d.ts.map +1 -0
  264. package/dist/tools/state.js +79 -0
  265. package/dist/tools/state.js.map +1 -0
  266. package/dist/tools/workspace.d.ts +38 -0
  267. package/dist/tools/workspace.d.ts.map +1 -0
  268. package/dist/tools/workspace.js +240 -0
  269. package/dist/tools/workspace.js.map +1 -0
  270. package/dist/types/capability.d.ts +36 -0
  271. package/dist/types/capability.d.ts.map +1 -0
  272. package/dist/types/capability.js +3 -0
  273. package/dist/types/capability.js.map +1 -0
  274. package/dist/types/confirmation.d.ts +35 -0
  275. package/dist/types/confirmation.d.ts.map +1 -0
  276. package/dist/types/confirmation.js +3 -0
  277. package/dist/types/confirmation.js.map +1 -0
  278. package/dist/types/context.d.ts +174 -0
  279. package/dist/types/context.d.ts.map +1 -0
  280. package/dist/types/context.js +3 -0
  281. package/dist/types/context.js.map +1 -0
  282. package/dist/types/errors.d.ts +81 -0
  283. package/dist/types/errors.d.ts.map +1 -0
  284. package/dist/types/errors.js +154 -0
  285. package/dist/types/errors.js.map +1 -0
  286. package/dist/types/guidance.d.ts +162 -0
  287. package/dist/types/guidance.d.ts.map +1 -0
  288. package/dist/types/guidance.js +4 -0
  289. package/dist/types/guidance.js.map +1 -0
  290. package/dist/types/health.d.ts +61 -0
  291. package/dist/types/health.d.ts.map +1 -0
  292. package/dist/types/health.js +3 -0
  293. package/dist/types/health.js.map +1 -0
  294. package/dist/types/index.d.ts +10 -0
  295. package/dist/types/index.d.ts.map +1 -0
  296. package/dist/types/index.js +11 -0
  297. package/dist/types/index.js.map +1 -0
  298. package/dist/types/memo.d.ts +132 -0
  299. package/dist/types/memo.d.ts.map +1 -0
  300. package/dist/types/memo.js +3 -0
  301. package/dist/types/memo.js.map +1 -0
  302. package/dist/types/node.d.ts +316 -0
  303. package/dist/types/node.d.ts.map +1 -0
  304. package/dist/types/node.js +3 -0
  305. package/dist/types/node.js.map +1 -0
  306. package/dist/types/repair.d.ts +62 -0
  307. package/dist/types/repair.d.ts.map +1 -0
  308. package/dist/types/repair.js +4 -0
  309. package/dist/types/repair.js.map +1 -0
  310. package/dist/types/search.d.ts +58 -0
  311. package/dist/types/search.d.ts.map +1 -0
  312. package/dist/types/search.js +3 -0
  313. package/dist/types/search.js.map +1 -0
  314. package/dist/types/settings.d.ts +109 -0
  315. package/dist/types/settings.d.ts.map +1 -0
  316. package/dist/types/settings.js +30 -0
  317. package/dist/types/settings.js.map +1 -0
  318. package/dist/types/workspace.d.ts +357 -0
  319. package/dist/types/workspace.d.ts.map +1 -0
  320. package/dist/types/workspace.js +3 -0
  321. package/dist/types/workspace.js.map +1 -0
  322. package/dist/utils/contentValidation.d.ts +47 -0
  323. package/dist/utils/contentValidation.d.ts.map +1 -0
  324. package/dist/utils/contentValidation.js +93 -0
  325. package/dist/utils/contentValidation.js.map +1 -0
  326. package/dist/utils/devLog.d.ts +43 -0
  327. package/dist/utils/devLog.d.ts.map +1 -0
  328. package/dist/utils/devLog.js +94 -0
  329. package/dist/utils/devLog.js.map +1 -0
  330. package/dist/utils/errorLogger.d.ts +27 -0
  331. package/dist/utils/errorLogger.d.ts.map +1 -0
  332. package/dist/utils/errorLogger.js +105 -0
  333. package/dist/utils/errorLogger.js.map +1 -0
  334. package/dist/utils/git.d.ts +123 -0
  335. package/dist/utils/git.d.ts.map +1 -0
  336. package/dist/utils/git.js +400 -0
  337. package/dist/utils/git.js.map +1 -0
  338. package/dist/utils/hash.d.ts +32 -0
  339. package/dist/utils/hash.d.ts.map +1 -0
  340. package/dist/utils/hash.js +37 -0
  341. package/dist/utils/hash.js.map +1 -0
  342. package/dist/utils/id.d.ts +54 -0
  343. package/dist/utils/id.d.ts.map +1 -0
  344. package/dist/utils/id.js +96 -0
  345. package/dist/utils/id.js.map +1 -0
  346. package/dist/utils/index.d.ts +8 -0
  347. package/dist/utils/index.d.ts.map +1 -0
  348. package/dist/utils/index.js +9 -0
  349. package/dist/utils/index.js.map +1 -0
  350. package/dist/utils/logger.d.ts +42 -0
  351. package/dist/utils/logger.d.ts.map +1 -0
  352. package/dist/utils/logger.js +228 -0
  353. package/dist/utils/logger.js.map +1 -0
  354. package/dist/utils/manualChangeFormatter.d.ts +8 -0
  355. package/dist/utils/manualChangeFormatter.d.ts.map +1 -0
  356. package/dist/utils/manualChangeFormatter.js +21 -0
  357. package/dist/utils/manualChangeFormatter.js.map +1 -0
  358. package/dist/utils/paramValidator.d.ts +35 -0
  359. package/dist/utils/paramValidator.d.ts.map +1 -0
  360. package/dist/utils/paramValidator.js +214 -0
  361. package/dist/utils/paramValidator.js.map +1 -0
  362. package/dist/utils/port.d.ts +7 -0
  363. package/dist/utils/port.d.ts.map +1 -0
  364. package/dist/utils/port.js +28 -0
  365. package/dist/utils/port.js.map +1 -0
  366. package/dist/utils/processManager.d.ts +53 -0
  367. package/dist/utils/processManager.d.ts.map +1 -0
  368. package/dist/utils/processManager.js +267 -0
  369. package/dist/utils/processManager.js.map +1 -0
  370. package/dist/utils/sessionLogger.d.ts +28 -0
  371. package/dist/utils/sessionLogger.d.ts.map +1 -0
  372. package/dist/utils/sessionLogger.js +142 -0
  373. package/dist/utils/sessionLogger.js.map +1 -0
  374. package/dist/utils/time.d.ts +15 -0
  375. package/dist/utils/time.d.ts.map +1 -0
  376. package/dist/utils/time.js +32 -0
  377. package/dist/utils/time.js.map +1 -0
  378. package/dist/utils/validation.d.ts +23 -0
  379. package/dist/utils/validation.d.ts.map +1 -0
  380. package/dist/utils/validation.js +88 -0
  381. package/dist/utils/validation.js.map +1 -0
  382. package/docs//346/227/245/345/277/227/347/263/273/347/273/237.md +389 -0
  383. package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +1446 -0
  384. package/docs//347/224/250/346/210/267/346/211/213/345/206/214/344/270/216/346/212/200/346/234/257/346/214/207/345/215/227.md +873 -0
  385. package/package.json +94 -0
  386. package/plugin/README.md +141 -0
  387. package/plugin/agents/zero-executor.md +114 -0
  388. package/plugin/agents/zero-reviewer.md +133 -0
  389. package/plugin/docs/diagnostic-guide.md +128 -0
  390. package/plugin/hooks/hooks.json.deprecated +70 -0
  391. package/plugin/scripts/cursor-hook-entry.cjs +217 -0
  392. package/plugin/scripts/hook-entry.cjs +663 -0
  393. package/plugin/scripts/openspec-import.cjs +714 -0
  394. package/plugin/scripts/shared/binding.cjs +98 -0
  395. package/plugin/scripts/shared/config.cjs +65 -0
  396. package/plugin/scripts/shared/context.cjs +120 -0
  397. package/plugin/scripts/shared/index.cjs +34 -0
  398. package/plugin/scripts/shared/logger.cjs +196 -0
  399. package/plugin/scripts/shared/reminder.cjs +261 -0
  400. package/plugin/scripts/shared/utils.cjs +62 -0
  401. package/plugin/scripts/shared/workspace.cjs +322 -0
  402. package/plugin/skills/aligning-intent/SKILL.md +275 -0
  403. package/plugin/skills/analyzing-measurements/SKILL.md +223 -0
  404. package/plugin/skills/bootstrapping-workspace/SKILL.md +260 -0
  405. package/plugin/skills/designing-solutions/SKILL.md +363 -0
  406. package/plugin/skills/diagnosing-issues/SKILL.md +219 -0
  407. package/plugin/skills/discovering-context/SKILL.md +283 -0
  408. package/plugin/skills/dispatching-parent/SKILL.md +399 -0
  409. package/plugin/skills/executing-task/SKILL.md +340 -0
  410. package/plugin/skills/memo-create/SKILL.md +222 -0
  411. package/plugin/skills/planning-verification/SKILL.md +245 -0
  412. package/plugin/skills/preparing-dispatch/SKILL.md +299 -0
  413. package/plugin/skills/researching-tech/SKILL.md +223 -0
  414. package/plugin/skills/reviewing-quality/SKILL.md +354 -0
  415. package/plugin/skills/reviewing-spec/SKILL.md +333 -0
  416. package/plugin/skills/starting-info-flow/SKILL.md +196 -0
  417. package/web/README.md +5 -0
  418. package/web/dist/assets/DocsView-Bls_Vjsr.css +1 -0
  419. package/web/dist/assets/DocsView-Cxc0B63r.js +1447 -0
  420. package/web/dist/assets/HomeView-C7df9thb.js +9 -0
  421. package/web/dist/assets/HomeView-ufUdnfHk.css +1 -0
  422. package/web/dist/assets/MarkdownContent-DXp6CtSP.js +308 -0
  423. package/web/dist/assets/MarkdownContent-NFqiOBLH.css +1 -0
  424. package/web/dist/assets/NotFoundView-BYX1oZAn.css +1 -0
  425. package/web/dist/assets/NotFoundView-zrc0lT9q.js +1 -0
  426. package/web/dist/assets/WorkspaceView-BckqgNcX.js +27 -0
  427. package/web/dist/assets/WorkspaceView-J1dgpYMx.css +1 -0
  428. package/web/dist/assets/WsConfirmDialog-C1CvL4my.css +1 -0
  429. package/web/dist/assets/WsConfirmDialog-gLEP7uBD.js +4 -0
  430. package/web/dist/assets/arc-DPkKTkUT.js +1 -0
  431. package/web/dist/assets/architectureDiagram-VXUJARFQ-CEGpqUlZ.js +36 -0
  432. package/web/dist/assets/blockDiagram-VD42YOAC-Bv-mqdQH.js +122 -0
  433. package/web/dist/assets/c4Diagram-YG6GDRKO-DRyPatZ_.js +10 -0
  434. package/web/dist/assets/channel-B84mKLDZ.js +1 -0
  435. package/web/dist/assets/chunk-4BX2VUAB-c7DivX0u.js +1 -0
  436. package/web/dist/assets/chunk-55IACEB6-CGKTaLlo.js +1 -0
  437. package/web/dist/assets/chunk-B4BG7PRW-Czhx5Q_P.js +165 -0
  438. package/web/dist/assets/chunk-DI55MBZ5-CQVA7hcZ.js +220 -0
  439. package/web/dist/assets/chunk-FMBD7UC4-hEiPmi7V.js +15 -0
  440. package/web/dist/assets/chunk-QN33PNHL-rL6yYI-E.js +1 -0
  441. package/web/dist/assets/chunk-QZHKN3VN-BRyHBBzq.js +1 -0
  442. package/web/dist/assets/chunk-TZMSLE5B-D4PXmTz9.js +1 -0
  443. package/web/dist/assets/classDiagram-2ON5EDUG-CNn53ohi.js +1 -0
  444. package/web/dist/assets/classDiagram-v2-WZHVMYZB-CNn53ohi.js +1 -0
  445. package/web/dist/assets/cose-bilkent-S5V4N54A-BAREnRga.js +1 -0
  446. package/web/dist/assets/cytoscape.esm-BnkdMOzK.js +321 -0
  447. package/web/dist/assets/dagre-6UL2VRFP-DaYzb3MT.js +4 -0
  448. package/web/dist/assets/defaultLocale-C4B-KCzX.js +1 -0
  449. package/web/dist/assets/diagram-PSM6KHXK-BFltDqvd.js +24 -0
  450. package/web/dist/assets/diagram-QEK2KX5R-CR4VU2La.js +43 -0
  451. package/web/dist/assets/diagram-S2PKOQOG-0UfIeT-1.js +24 -0
  452. package/web/dist/assets/erDiagram-Q2GNP2WA-Bo17Xmng.js +60 -0
  453. package/web/dist/assets/flowDiagram-NV44I4VS-CzqhQp8s.js +162 -0
  454. package/web/dist/assets/ganttDiagram-JELNMOA3-TXwXtUcq.js +267 -0
  455. package/web/dist/assets/gitGraphDiagram-NY62KEGX-CoFQTy9O.js +65 -0
  456. package/web/dist/assets/graph-CIQcRIVd.js +1 -0
  457. package/web/dist/assets/index-BgLd_o_M.css +1 -0
  458. package/web/dist/assets/index-Cd_J3fZn.js +30 -0
  459. package/web/dist/assets/infoDiagram-WHAUD3N6-Dq0xXfVu.js +2 -0
  460. package/web/dist/assets/init-Gi6I4Gst.js +1 -0
  461. package/web/dist/assets/journeyDiagram-XKPGCS4Q-jIg5BOfC.js +139 -0
  462. package/web/dist/assets/kanban-definition-3W4ZIXB7-D2giu6aZ.js +89 -0
  463. package/web/dist/assets/katex-XbL3y5x-.js +261 -0
  464. package/web/dist/assets/layout-Bm-XCM-8.js +1 -0
  465. package/web/dist/assets/linear-FbekP9OZ.js +1 -0
  466. package/web/dist/assets/min-BrRCpYmF.js +1 -0
  467. package/web/dist/assets/mindmap-definition-VGOIOE7T-o-4ubbY9.js +68 -0
  468. package/web/dist/assets/noto-emoji-0-400-normal-BTQbhB77.woff +0 -0
  469. package/web/dist/assets/noto-emoji-0-400-normal-DHdy6Uhy.woff2 +0 -0
  470. package/web/dist/assets/noto-emoji-1-400-normal-0IvkdXBB.woff +0 -0
  471. package/web/dist/assets/noto-emoji-1-400-normal-BY9OovbM.woff2 +0 -0
  472. package/web/dist/assets/noto-emoji-10-400-normal-D9w4QCof.woff2 +0 -0
  473. package/web/dist/assets/noto-emoji-10-400-normal-DtCumcZR.woff +0 -0
  474. package/web/dist/assets/noto-emoji-11-400-normal-BboTlyvx.woff +0 -0
  475. package/web/dist/assets/noto-emoji-12-400-normal-BB5pgBKj.woff2 +0 -0
  476. package/web/dist/assets/noto-emoji-12-400-normal-g186qhiA.woff +0 -0
  477. package/web/dist/assets/noto-emoji-2-400-normal-BKCR1azW.woff2 +0 -0
  478. package/web/dist/assets/noto-emoji-2-400-normal-BYH0KhDr.woff +0 -0
  479. package/web/dist/assets/noto-emoji-3-400-normal-CnPTUeEK.woff +0 -0
  480. package/web/dist/assets/noto-emoji-3-400-normal-TrTb2VQM.woff2 +0 -0
  481. package/web/dist/assets/noto-emoji-4-400-normal-BxD0KVdj.woff +0 -0
  482. package/web/dist/assets/noto-emoji-4-400-normal-s_n9EyG1.woff2 +0 -0
  483. package/web/dist/assets/noto-emoji-5-400-normal-C190AIxR.woff +0 -0
  484. package/web/dist/assets/noto-emoji-5-400-normal-Ctfx4xc6.woff2 +0 -0
  485. package/web/dist/assets/noto-emoji-6-400-normal-DlXlXWt7.woff +0 -0
  486. package/web/dist/assets/noto-emoji-6-400-normal-NzsjD754.woff2 +0 -0
  487. package/web/dist/assets/noto-emoji-7-400-normal-BHP8KeA6.woff2 +0 -0
  488. package/web/dist/assets/noto-emoji-7-400-normal-CtuKhtAZ.woff +0 -0
  489. package/web/dist/assets/noto-emoji-8-400-normal-DR49ZFe7.woff +0 -0
  490. package/web/dist/assets/noto-emoji-8-400-normal-Dvmkf6b2.woff2 +0 -0
  491. package/web/dist/assets/noto-emoji-9-400-normal-BeHJQ2iK.woff2 +0 -0
  492. package/web/dist/assets/noto-emoji-9-400-normal-BlXmCgeQ.woff +0 -0
  493. package/web/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  494. package/web/dist/assets/pieDiagram-ADFJNKIX-C45wSpld.js +30 -0
  495. package/web/dist/assets/quadrantDiagram-AYHSOK5B-tv-_fe-W.js +7 -0
  496. package/web/dist/assets/reduce-CoLNNlNb.js +1 -0
  497. package/web/dist/assets/requirementDiagram-UZGBJVZJ-Dn6PDfkL.js +64 -0
  498. package/web/dist/assets/sankeyDiagram-TZEHDZUN-CbXTZAsG.js +10 -0
  499. package/web/dist/assets/sequenceDiagram-WL72ISMW-B-o1CUJ5.js +145 -0
  500. package/web/dist/assets/stateDiagram-FKZM4ZOC-hzrupXQi.js +1 -0
  501. package/web/dist/assets/stateDiagram-v2-4FDKWEC3-DN-c2M96.js +1 -0
  502. package/web/dist/assets/timeline-definition-IT6M3QCI-R5SP9GDo.js +61 -0
  503. package/web/dist/assets/treemap-KMMF4GRG-Pg9KlUOt.js +128 -0
  504. package/web/dist/assets/xychartDiagram-PRI3JC2R-C3vbJhd1.js +7 -0
  505. package/web/dist/favicon.svg +13 -0
  506. package/web/dist/index.html +17 -0
  507. package//351/205/215/347/275/256/346/226/271/345/274/217.md +330 -0
@@ -0,0 +1,613 @@
1
+ // src/storage/JsonStorage.ts
2
+ import { fileURLToPath } from "url";
3
+ import { dirname, join } from "path";
4
+ import { createRequire } from "module";
5
+ import { ZeroError } from "../types/errors.js";
6
+ import { generateWorkspaceDirName, generateNodeDirName, extractShortId } from "../utils/id.js";
7
+ /**
8
+ * JSON 存储封装
9
+ * 提供类型安全的 JSON 文件读写
10
+ *
11
+ * 架构:
12
+ * - 全局索引:~/.zero-workspace[-dev]/index.json
13
+ * - 项目数据:{projectRoot}/.zero-workspace[-dev]/{wsDirName}/
14
+ *
15
+ * 目录命名规范(v2):
16
+ * - 工作区目录:{名称}_{短ID},如 "UI优化_mjb65az5"
17
+ * - 节点目录:{标题}_{短ID},如 "功能分析_mjb6mj4h"
18
+ * - 根节点目录固定为 "root"
19
+ */
20
+ export class JsonStorage {
21
+ fs;
22
+ currentCodeVersion = null;
23
+ constructor(fs) {
24
+ this.fs = fs;
25
+ }
26
+ /**
27
+ * 获取当前代码版本(从 package.json 读取)
28
+ * ESM 兼容写法
29
+ */
30
+ getCurrentCodeVersion() {
31
+ if (this.currentCodeVersion)
32
+ return this.currentCodeVersion;
33
+ try {
34
+ const __filename = fileURLToPath(import.meta.url);
35
+ const __dirname = dirname(__filename);
36
+ const require = createRequire(import.meta.url);
37
+ const pkg = require(join(__dirname, "..", "..", "package.json"));
38
+ this.currentCodeVersion = pkg.version;
39
+ return this.currentCodeVersion;
40
+ }
41
+ catch {
42
+ return "0.0.0";
43
+ }
44
+ }
45
+ // ========== Global Index ==========
46
+ /**
47
+ * 统一存储版本(index.json 和 graph.json 共享)
48
+ * - 1.0: 初始版本
49
+ * - 2.0: index 添加 projectRoot
50
+ * - 3.0: 添加节点 type 字段
51
+ * - 4.0: 添加 dirName 字段(UUID 格式)
52
+ * - 5.0: dirName 改为可读格式(名称_短ID)
53
+ */
54
+ static STORAGE_VERSION = "5.0";
55
+ /**
56
+ * 读取全局工作区索引
57
+ */
58
+ async readIndex() {
59
+ const indexPath = this.fs.getIndexPath();
60
+ if (!(await this.fs.exists(indexPath))) {
61
+ return {
62
+ version: JsonStorage.STORAGE_VERSION,
63
+ workspaces: []
64
+ };
65
+ }
66
+ const content = await this.fs.readFile(indexPath);
67
+ const index = JSON.parse(content);
68
+ // 版本检查:数据版本高于代码版本
69
+ if (this.compareVersion(index.version, JsonStorage.STORAGE_VERSION) > 0) {
70
+ // 备份高版本 index,创建新的空 index
71
+ await this.backupAndResetIndex(indexPath, index.version);
72
+ console.error(`[version] 检测到高版本数据 (${index.version} > ${JsonStorage.STORAGE_VERSION}),` +
73
+ `已备份原 index 并创建空索引。请升级 zero-workspace 以访问原有工作区。`);
74
+ return {
75
+ version: JsonStorage.STORAGE_VERSION,
76
+ workspaces: []
77
+ };
78
+ }
79
+ // 版本迁移:一次性升级 index + 所有工作区的 graph
80
+ if (index.version !== JsonStorage.STORAGE_VERSION) {
81
+ await this.migrateAll(index);
82
+ }
83
+ return index;
84
+ }
85
+ /**
86
+ * 备份高版本 index 并重置
87
+ */
88
+ async backupAndResetIndex(indexPath, version) {
89
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
90
+ const backupPath = indexPath.replace(".json", `.backup.v${version}.${timestamp}.json`);
91
+ // 读取原内容并添加备份标记
92
+ const content = await this.fs.readFile(indexPath);
93
+ const index = JSON.parse(content);
94
+ index._backupReason = `版本 ${version} 高于当前支持的 ${JsonStorage.STORAGE_VERSION}`;
95
+ index._backupTime = new Date().toISOString();
96
+ // 写入备份
97
+ await this.fs.writeFile(backupPath, JSON.stringify(index, null, 2));
98
+ // 写入新的空 index
99
+ const newIndex = {
100
+ version: JsonStorage.STORAGE_VERSION,
101
+ workspaces: []
102
+ };
103
+ await this.fs.writeFile(indexPath, JSON.stringify(newIndex, null, 2));
104
+ }
105
+ /**
106
+ * 比较版本号
107
+ * @returns >0 表示 a > b, <0 表示 a < b, =0 表示相等
108
+ */
109
+ compareVersion(a, b) {
110
+ const [aMajor, aMinor = 0] = a.split(".").map(Number);
111
+ const [bMajor, bMinor = 0] = b.split(".").map(Number);
112
+ if (aMajor !== bMajor)
113
+ return aMajor - bMajor;
114
+ return aMinor - bMinor;
115
+ }
116
+ /**
117
+ * 全量迁移:index + 所有工作区的 graph.json + 目录重命名
118
+ * 在 readIndex 时一次性完成,避免分散迁移导致遗漏
119
+ */
120
+ async migrateAll(index) {
121
+ const oldVersion = index.version;
122
+ const errors = [];
123
+ console.error(`[migration] 开始全量迁移 (${oldVersion} → ${JsonStorage.STORAGE_VERSION})...`);
124
+ // 1. 迁移所有工作区(目录重命名 + graph.json)
125
+ for (const ws of index.workspaces) {
126
+ try {
127
+ // 1.1 重命名工作区目录(如果需要)
128
+ const newDirName = await this.migrateWorkspaceDir(ws);
129
+ if (newDirName) {
130
+ ws.dirName = newDirName;
131
+ }
132
+ // 1.2 迁移 graph.json(包括节点目录重命名)
133
+ await this.migrateWorkspaceGraph(ws);
134
+ }
135
+ catch (e) {
136
+ errors.push({
137
+ workspaceId: ws.id,
138
+ error: e instanceof Error ? e.message : String(e)
139
+ });
140
+ // 继续处理其他工作区,不中断
141
+ }
142
+ }
143
+ // 2. 迁移 index 数据(更新版本号)
144
+ this.migrateIndexData(index);
145
+ // 3. 保存 index
146
+ try {
147
+ await this.writeIndex(index);
148
+ }
149
+ catch (e) {
150
+ console.error("[migration] 保存 index.json 失败:", e);
151
+ }
152
+ // 4. 报告迁移结果
153
+ const successCount = index.workspaces.length - errors.length;
154
+ console.error(`[migration] 迁移完成: ${successCount}/${index.workspaces.length} 工作区成功`);
155
+ if (errors.length > 0) {
156
+ console.error(`[migration] 失败的工作区:`, errors.map(e => e.workspaceId).join(", "));
157
+ }
158
+ }
159
+ /**
160
+ * 迁移工作区目录名(UUID → 可读名称)
161
+ * @returns 新的目录名,如果无需迁移返回 undefined
162
+ */
163
+ async migrateWorkspaceDir(ws) {
164
+ const oldDirName = ws.dirName || ws.id;
165
+ // 如果目录名不是以 ws- 开头,说明已经是可读格式,跳过
166
+ if (!oldDirName.startsWith("ws-")) {
167
+ return undefined;
168
+ }
169
+ // 生成可读目录名
170
+ const newDirName = generateWorkspaceDirName(ws.name, ws.id);
171
+ // 如果新旧相同,跳过
172
+ if (newDirName === oldDirName) {
173
+ return undefined;
174
+ }
175
+ // 确定源目录和目标目录
176
+ const isArchived = ws.status === "archived";
177
+ const baseDir = isArchived
178
+ ? this.fs.getArchiveDir(ws.projectRoot)
179
+ : this.fs.getWorkspaceRootPath(ws.projectRoot);
180
+ const srcPath = isArchived
181
+ ? this.fs.getArchivePath(ws.projectRoot, oldDirName)
182
+ : this.fs.getWorkspacePath(ws.projectRoot, oldDirName);
183
+ // 检查源目录是否存在
184
+ if (!(await this.fs.exists(srcPath))) {
185
+ // 源目录不存在,尝试查找可能已存在的新格式目录
186
+ const shortId = extractShortId(ws.id);
187
+ const existingDir = await this.findDirBySuffix(baseDir, shortId);
188
+ if (existingDir && existingDir !== oldDirName) {
189
+ // 找到已存在的可读格式目录,更新 dirName
190
+ console.error(`[migration] 修复工作区目录名(旧目录不存在): ${oldDirName} → ${existingDir}`);
191
+ return existingDir;
192
+ }
193
+ console.error(`[migration] 工作区目录不存在,跳过: ${srcPath}`);
194
+ return undefined;
195
+ }
196
+ // 安全重命名(处理冲突)
197
+ const actualDirName = await this.fs.safeRenameDir(srcPath, baseDir, newDirName);
198
+ console.error(`[migration] 工作区目录重命名: ${oldDirName} → ${actualDirName}`);
199
+ return actualDirName;
200
+ }
201
+ /**
202
+ * 迁移单个工作区的 graph.json(包括节点目录重命名)
203
+ */
204
+ async migrateWorkspaceGraph(ws) {
205
+ // 获取目录名(此时 dirName 可能已被 migrateWorkspaceDir 更新)
206
+ const wsDirName = ws.dirName || ws.id;
207
+ const isArchived = ws.status === "archived";
208
+ // 获取 graph.json 路径
209
+ const graphPath = isArchived
210
+ ? this.fs.getGraphPathWithArchive(ws.projectRoot, wsDirName, true)
211
+ : this.fs.getGraphPath(ws.projectRoot, wsDirName);
212
+ if (!(await this.fs.exists(graphPath))) {
213
+ return;
214
+ }
215
+ const content = await this.fs.readFile(graphPath);
216
+ const graph = JSON.parse(content);
217
+ // 迁移节点目录名
218
+ await this.migrateNodeDirs(ws.projectRoot, wsDirName, graph, isArchived);
219
+ // 迁移 graph 数据结构
220
+ if (graph.version !== JsonStorage.STORAGE_VERSION) {
221
+ this.migrateGraphData(graph);
222
+ }
223
+ // 保存更新后的 graph.json
224
+ if (isArchived) {
225
+ await this.fs.writeFile(graphPath, JSON.stringify(graph, null, 2));
226
+ }
227
+ else {
228
+ await this.writeGraph(ws.projectRoot, wsDirName, graph);
229
+ }
230
+ }
231
+ /**
232
+ * 迁移节点目录名(UUID → 可读名称)
233
+ */
234
+ async migrateNodeDirs(projectRoot, wsDirName, graph, isArchived) {
235
+ const nodesDir = isArchived
236
+ ? `${this.fs.getArchivePath(projectRoot, wsDirName)}/nodes`
237
+ : this.fs.getNodesDir(projectRoot, wsDirName);
238
+ // 检查 nodes 目录是否存在
239
+ if (!(await this.fs.exists(nodesDir))) {
240
+ return;
241
+ }
242
+ // 遍历所有节点
243
+ for (const [nodeId, node] of Object.entries(graph.nodes)) {
244
+ // 跳过根节点
245
+ if (nodeId === "root") {
246
+ continue;
247
+ }
248
+ try {
249
+ const oldDirName = node.dirName || nodeId;
250
+ // 如果目录名不是以 node- 开头,说明已经是可读格式
251
+ // 但仍需验证目录是否存在,以处理 graph.json 与实际目录不一致的情况
252
+ if (!oldDirName.startsWith("node-")) {
253
+ // 验证目录存在性
254
+ const dirPath = `${nodesDir}/${oldDirName}`;
255
+ if (!(await this.fs.exists(dirPath))) {
256
+ // 目录不存在,尝试通过 shortId 查找
257
+ const shortId = extractShortId(nodeId);
258
+ const existingDir = await this.findDirBySuffix(nodesDir, shortId);
259
+ if (existingDir && existingDir !== oldDirName) {
260
+ node.dirName = existingDir;
261
+ console.error(`[migration] 修复节点目录名(目录不存在): ${nodeId} → ${existingDir}`);
262
+ }
263
+ }
264
+ continue;
265
+ }
266
+ // 从 Info.md 读取标题
267
+ const title = await this.readNodeTitle(nodesDir, oldDirName);
268
+ // 生成可读目录名
269
+ const newDirName = generateNodeDirName(title, nodeId);
270
+ // 如果新旧相同,跳过
271
+ if (newDirName === oldDirName) {
272
+ continue;
273
+ }
274
+ const srcPath = `${nodesDir}/${oldDirName}`;
275
+ // 检查源目录是否存在
276
+ if (!(await this.fs.exists(srcPath))) {
277
+ // 源目录不存在,可能已经被迁移过但 graph.json 没有更新
278
+ // 查找以节点短 ID 结尾的目录
279
+ const shortId = extractShortId(nodeId);
280
+ const existingDir = await this.findDirBySuffix(nodesDir, shortId);
281
+ if (existingDir && existingDir !== oldDirName) {
282
+ // 找到已存在的可读格式目录,更新 graph.json
283
+ node.dirName = existingDir;
284
+ console.error(`[migration] 修复节点目录名: ${nodeId} → ${existingDir}`);
285
+ }
286
+ continue;
287
+ }
288
+ // 安全重命名(处理冲突)
289
+ const actualDirName = await this.fs.safeRenameDir(srcPath, nodesDir, newDirName);
290
+ node.dirName = actualDirName;
291
+ console.error(`[migration] 节点目录重命名: ${oldDirName} → ${actualDirName}`);
292
+ }
293
+ catch (e) {
294
+ // 单个节点迁移失败不影响其他节点
295
+ console.error(`[migration] 节点 ${nodeId} 迁移失败:`, e instanceof Error ? e.message : e);
296
+ }
297
+ }
298
+ }
299
+ /**
300
+ * 从 Info.md 读取节点标题
301
+ */
302
+ async readNodeTitle(nodesDir, nodeDirName) {
303
+ const infoPath = `${nodesDir}/${nodeDirName}/Info.md`;
304
+ try {
305
+ if (!(await this.fs.exists(infoPath))) {
306
+ return "节点"; // 默认标题
307
+ }
308
+ const content = await this.fs.readFile(infoPath);
309
+ // 从 frontmatter 提取 title
310
+ const match = content.match(/^---\n[\s\S]*?title:\s*(.+?)\n[\s\S]*?---/);
311
+ if (match && match[1]) {
312
+ return match[1].trim();
313
+ }
314
+ return "节点"; // 默认标题
315
+ }
316
+ catch {
317
+ return "节点"; // 读取失败使用默认标题
318
+ }
319
+ }
320
+ /**
321
+ * 在目录中查找包含指定短 ID 的子目录
322
+ * 按优先级尝试多种匹配模式,提高兼容性
323
+ */
324
+ async findDirBySuffix(parentDir, shortId) {
325
+ try {
326
+ const entries = await this.fs.readdir(parentDir);
327
+ // 优先级 1: 精确匹配 `_shortId` 后缀(当前标准格式)
328
+ for (const entry of entries) {
329
+ if (entry.endsWith(`_${shortId}`)) {
330
+ return entry;
331
+ }
332
+ }
333
+ // 优先级 2: 匹配 `shortId` 后缀(无下划线,可能的早期格式)
334
+ for (const entry of entries) {
335
+ if (entry.endsWith(shortId) && !entry.endsWith(`_${shortId}`)) {
336
+ return entry;
337
+ }
338
+ }
339
+ // 优先级 3: 目录名包含 shortId(兜底匹配,可能有误匹配风险)
340
+ // 仅当 shortId 长度 >= 6 时启用,减少误匹配概率
341
+ if (shortId.length >= 6) {
342
+ for (const entry of entries) {
343
+ if (entry.includes(shortId)) {
344
+ return entry;
345
+ }
346
+ }
347
+ }
348
+ return null;
349
+ }
350
+ catch {
351
+ return null;
352
+ }
353
+ }
354
+ /**
355
+ * 迁移 index 数据(纯数据操作)
356
+ * 注意:dirName 已在 migrateWorkspaceDir 中设置为可读名称
357
+ */
358
+ migrateIndexData(index) {
359
+ // 1.0 -> 2.0: 添加 projectRoot
360
+ if (index.version === "1.0") {
361
+ index.workspaces = index.workspaces.map(ws => ({
362
+ ...ws,
363
+ projectRoot: ws.projectRoot || ""
364
+ }));
365
+ index.version = "2.0";
366
+ }
367
+ // 2.0/3.0 -> 4.0: 添加 dirName(兼容旧版本)
368
+ if (index.version === "2.0" || index.version === "3.0") {
369
+ index.workspaces = index.workspaces.map(ws => ({
370
+ ...ws,
371
+ dirName: ws.dirName || ws.id
372
+ }));
373
+ index.version = "4.0";
374
+ }
375
+ // 4.0 -> 5.0: dirName 改为可读格式
376
+ // 实际的目录重命名已在 migrateWorkspaceDir 中完成
377
+ // 这里只做兜底处理(确保 dirName 存在)
378
+ if (index.version === "4.0") {
379
+ index.workspaces = index.workspaces.map(ws => ({
380
+ ...ws,
381
+ dirName: ws.dirName || generateWorkspaceDirName(ws.name, ws.id)
382
+ }));
383
+ index.version = "5.0";
384
+ }
385
+ }
386
+ /**
387
+ * 写入全局工作区索引
388
+ */
389
+ async writeIndex(index) {
390
+ const indexPath = this.fs.getIndexPath();
391
+ await this.fs.writeFile(indexPath, JSON.stringify(index, null, 2));
392
+ }
393
+ /**
394
+ * 根据 workspaceId 查找工作区条目
395
+ */
396
+ async findWorkspaceEntry(workspaceId) {
397
+ const index = await this.readIndex();
398
+ return index.workspaces.find(ws => ws.id === workspaceId) || null;
399
+ }
400
+ /**
401
+ * 根据 workspaceId 获取 projectRoot
402
+ */
403
+ async getProjectRoot(workspaceId) {
404
+ const entry = await this.findWorkspaceEntry(workspaceId);
405
+ return entry?.projectRoot || null;
406
+ }
407
+ /**
408
+ * 根据 workspaceId 获取 projectRoot 和 dirName
409
+ */
410
+ async getWorkspaceLocation(workspaceId) {
411
+ const entry = await this.findWorkspaceEntry(workspaceId);
412
+ if (!entry?.projectRoot)
413
+ return null;
414
+ return {
415
+ projectRoot: entry.projectRoot,
416
+ dirName: entry.dirName || entry.id
417
+ };
418
+ }
419
+ /**
420
+ * 验证索引中的工作区路径是否有效
421
+ * 返回无效的工作区列表
422
+ */
423
+ async validateIndexPaths() {
424
+ const index = await this.readIndex();
425
+ const invalid = [];
426
+ for (const ws of index.workspaces) {
427
+ if (!ws.projectRoot) {
428
+ invalid.push(ws);
429
+ continue;
430
+ }
431
+ // 使用 dirName 来定位配置文件,如果没有 dirName 则回退到 id
432
+ const dirName = ws.dirName || ws.id;
433
+ const configPath = this.fs.getWorkspaceConfigPath(ws.projectRoot, dirName);
434
+ if (!(await this.fs.exists(configPath))) {
435
+ invalid.push(ws);
436
+ }
437
+ }
438
+ return invalid;
439
+ }
440
+ /**
441
+ * 清理索引中无效的工作区条目
442
+ */
443
+ async cleanupInvalidEntries() {
444
+ const invalid = await this.validateIndexPaths();
445
+ if (invalid.length === 0)
446
+ return [];
447
+ const index = await this.readIndex();
448
+ const invalidIds = new Set(invalid.map(ws => ws.id));
449
+ index.workspaces = index.workspaces.filter(ws => !invalidIds.has(ws.id));
450
+ await this.writeIndex(index);
451
+ return invalid.map(ws => ws.id);
452
+ }
453
+ /**
454
+ * 检查特定项目下是否存在同名工作区
455
+ */
456
+ async hasWorkspaceByName(projectRoot, name) {
457
+ const index = await this.readIndex();
458
+ return index.workspaces.some(ws => ws.projectRoot === projectRoot && ws.name === name && ws.status === "active");
459
+ }
460
+ // ========== Workspace Config (项目级) ==========
461
+ /**
462
+ * 获取工作区配置文件路径(根据是否归档)
463
+ * @param wsDirName 工作区目录名
464
+ */
465
+ getConfigPath(projectRoot, wsDirName, isArchived = false) {
466
+ if (isArchived) {
467
+ return this.fs.getArchivePath(projectRoot, wsDirName) + "/workspace.json";
468
+ }
469
+ return this.fs.getWorkspaceConfigPath(projectRoot, wsDirName);
470
+ }
471
+ /**
472
+ * 读取工作区配置
473
+ * @param projectRoot 项目根目录
474
+ * @param wsDirName 工作区目录名
475
+ * @param isArchived 是否从归档目录读取
476
+ */
477
+ async readWorkspaceConfig(projectRoot, wsDirName, isArchived = false) {
478
+ const configPath = this.getConfigPath(projectRoot, wsDirName, isArchived);
479
+ const content = await this.fs.readFile(configPath);
480
+ return JSON.parse(content);
481
+ }
482
+ /**
483
+ * 写入工作区配置
484
+ * @param projectRoot 项目根目录
485
+ * @param wsDirName 工作区目录名
486
+ * @param config 工作区配置
487
+ * @param isArchived 是否写入归档目录
488
+ */
489
+ async writeWorkspaceConfig(projectRoot, wsDirName, config, isArchived = false) {
490
+ const configPath = this.getConfigPath(projectRoot, wsDirName, isArchived);
491
+ await this.fs.writeFile(configPath, JSON.stringify(config, null, 2));
492
+ }
493
+ /**
494
+ * 检查特定工作区是否存在
495
+ * @param wsDirName 工作区目录名
496
+ */
497
+ async hasWorkspace(projectRoot, wsDirName) {
498
+ const configPath = this.fs.getWorkspaceConfigPath(projectRoot, wsDirName);
499
+ return this.fs.exists(configPath);
500
+ }
501
+ // ========== Node Graph (项目级) ==========
502
+ /**
503
+ * 读取节点图
504
+ * @param projectRoot 项目根目录
505
+ * @param wsDirName 工作区目录名
506
+ * @param isArchived 是否为归档工作区
507
+ */
508
+ async readGraph(projectRoot, wsDirName, isArchived = false) {
509
+ const graphPath = isArchived
510
+ ? this.fs.getGraphPathWithArchive(projectRoot, wsDirName, true)
511
+ : this.fs.getGraphPath(projectRoot, wsDirName);
512
+ const content = await this.fs.readFile(graphPath);
513
+ const graph = JSON.parse(content);
514
+ // 版本检查:拒绝降级
515
+ if (this.compareVersion(graph.version, JsonStorage.STORAGE_VERSION) > 0) {
516
+ throw new ZeroError("VERSION_TOO_HIGH", `工作区数据版本 (${graph.version}) 高于当前支持的版本 (${JsonStorage.STORAGE_VERSION}),请升级 zero-workspace`);
517
+ }
518
+ // 兜底迁移:理论上 migrateAll 已处理,这里防止遗漏
519
+ // 场景:用户手动添加工作区到 index.json,绕过了 migrateAll 流程
520
+ if (graph.version !== JsonStorage.STORAGE_VERSION) {
521
+ // 先修复节点目录名映射(扫描文件系统查找实际目录名)
522
+ await this.migrateNodeDirs(projectRoot, wsDirName, graph, isArchived);
523
+ // 再执行数据结构迁移
524
+ this.migrateGraphData(graph);
525
+ if (!isArchived) {
526
+ await this.writeGraph(projectRoot, wsDirName, graph);
527
+ }
528
+ }
529
+ // 代码版本检测(lastWriteCodeVersion)
530
+ if (graph.lastWriteCodeVersion) {
531
+ const currentVersion = this.getCurrentCodeVersion();
532
+ const dataVersion = graph.lastWriteCodeVersion;
533
+ // 比较 major.minor(忽略 patch)
534
+ const [dataMajor, dataMinor] = dataVersion.split(".").map(Number);
535
+ const [curMajor, curMinor] = currentVersion.split(".").map(Number);
536
+ if (dataMajor > curMajor || (dataMajor === curMajor && dataMinor > curMinor)) {
537
+ // 运行时标记(不写入文件)
538
+ graph.__readOnly = true;
539
+ graph.__versionMismatch = {
540
+ dataVersion,
541
+ currentVersion,
542
+ message: `数据由 v${dataVersion} 写入,当前版本 v${currentVersion} 可能不兼容,已设为只读`,
543
+ };
544
+ }
545
+ else if (dataVersion !== currentVersion) {
546
+ // patch 差异或旧版本数据,只记录日志
547
+ console.log(`[version] 数据版本 ${dataVersion},当前版本 ${currentVersion}`);
548
+ }
549
+ }
550
+ return graph;
551
+ }
552
+ /**
553
+ * 迁移 graph 数据(纯数据操作)
554
+ * - 1.0/2.0 节点没有 type 字段,需要推断
555
+ * - 3.0 节点没有 dirName 字段,需要从 id 推导
556
+ */
557
+ migrateGraphData(graph) {
558
+ // 迁移节点
559
+ for (const nodeId in graph.nodes) {
560
+ const node = graph.nodes[nodeId];
561
+ // 如果没有 type 字段,推断类型
562
+ if (!node.type) {
563
+ // 根节点必须是 planning(否则无法创建子节点)
564
+ if (node.parentId === null) {
565
+ node.type = "planning";
566
+ // 如果是 implementing 状态,转为 planning 或 monitoring
567
+ if (node.status === "implementing") {
568
+ node.status = node.children.length > 0 ? "monitoring" : "planning";
569
+ }
570
+ }
571
+ // 有子节点 → planning
572
+ else if (node.children && node.children.length > 0) {
573
+ node.type = "planning";
574
+ // 如果是 implementing 状态但有子节点,转为 monitoring
575
+ if (node.status === "implementing") {
576
+ node.status = "monitoring";
577
+ }
578
+ }
579
+ // 无子节点的非根节点 → execution
580
+ else {
581
+ node.type = "execution";
582
+ }
583
+ }
584
+ // 如果没有 dirName 字段,使用 nodeId 作为 dirName(向后兼容)
585
+ if (!node.dirName) {
586
+ node.dirName = nodeId;
587
+ }
588
+ }
589
+ // 更新版本号
590
+ graph.version = JsonStorage.STORAGE_VERSION;
591
+ }
592
+ /**
593
+ * 写入节点图
594
+ * @param projectRoot 项目根目录
595
+ * @param wsDirName 工作区目录名
596
+ * @param graph 节点图
597
+ */
598
+ async writeGraph(projectRoot, wsDirName, graph) {
599
+ // 只读检测
600
+ const graphAny = graph;
601
+ if (graphAny.__readOnly) {
602
+ throw new ZeroError("VERSION_READONLY", graphAny.__versionMismatch?.message || "数据版本高于当前代码版本,禁止写入");
603
+ }
604
+ const graphPath = this.fs.getGraphPath(projectRoot, wsDirName);
605
+ // 写入时添加代码版本
606
+ const graphWithVersion = {
607
+ ...graph,
608
+ lastWriteCodeVersion: this.getCurrentCodeVersion(),
609
+ };
610
+ await this.fs.writeFile(graphPath, JSON.stringify(graphWithVersion, null, 2));
611
+ }
612
+ }
613
+ //# sourceMappingURL=JsonStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonStorage.js","sourceRoot":"","sources":["../../src/storage/JsonStorage.ts"],"names":[],"mappings":"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"}