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,426 @@
1
+ // src/cli/update.ts
2
+ // 自更新命令 - 更新 zero-workspace 到最新版本
3
+ import { spawn, spawnSync } from "child_process";
4
+ import { createRequire } from "module";
5
+ import { fileURLToPath } from "url";
6
+ import { dirname, join } from "path";
7
+ import { readFileSync } from "fs";
8
+ import * as readline from "readline";
9
+ import { parse as parseYaml } from "yaml";
10
+ import semver from "semver";
11
+ import { getPluginStatus } from "./plugins.js";
12
+ import { BackupService } from "../services/BackupService.js";
13
+ import { FileSystemAdapter } from "../storage/FileSystemAdapter.js";
14
+ import { JsonStorage } from "../storage/JsonStorage.js";
15
+ function getVersion() {
16
+ try {
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = dirname(__filename);
19
+ const require = createRequire(import.meta.url);
20
+ const pkg = require(join(__dirname, "..", "..", "package.json"));
21
+ return pkg.version || "0.0.0";
22
+ }
23
+ catch (err) {
24
+ console.error("[update] 读取版本号失败:", err instanceof Error ? err.message : String(err));
25
+ return "0.0.0";
26
+ }
27
+ }
28
+ // 比较版本号,返回 1 (a > b), -1 (a < b), 0 (a == b)
29
+ function compareVersions(a, b) {
30
+ const partsA = a.split(".").map(Number);
31
+ const partsB = b.split(".").map(Number);
32
+ for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
33
+ const numA = partsA[i] || 0;
34
+ const numB = partsB[i] || 0;
35
+ if (numA > numB)
36
+ return 1;
37
+ if (numA < numB)
38
+ return -1;
39
+ }
40
+ return 0;
41
+ }
42
+ // 颜色输出
43
+ const colors = {
44
+ green: (s) => `\x1b[32m${s}\x1b[0m`,
45
+ yellow: (s) => `\x1b[33m${s}\x1b[0m`,
46
+ red: (s) => `\x1b[31m${s}\x1b[0m`,
47
+ gray: (s) => `\x1b[90m${s}\x1b[0m`,
48
+ };
49
+ // 检测并更新插件(导出用于测试)
50
+ export function updatePluginsIfNeeded() {
51
+ // 获取更新后的插件状态(新进程会读取新版本的 plugin 目录)
52
+ const status = getPluginStatus();
53
+ const platformsToUpdate = [];
54
+ // 检测 Claude Code 插件
55
+ if (status.claude.hooks || status.claude.agents.length > 0 || status.claude.skills.length > 0) {
56
+ if (status.claude.hooksNeedsUpdate || status.claude.agentsNeedsUpdate || status.claude.skillsNeedsUpdate) {
57
+ platformsToUpdate.push("claude");
58
+ }
59
+ }
60
+ // 检测 Cursor 插件
61
+ if (status.cursor.hooks && status.cursor.hooksNeedsUpdate) {
62
+ platformsToUpdate.push("cursor");
63
+ }
64
+ if (platformsToUpdate.length === 0) {
65
+ return { success: true, failedPlatforms: [] }; // 无需更新
66
+ }
67
+ console.log("");
68
+ console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
69
+ console.log("📦 更新插件...");
70
+ console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
71
+ console.log("");
72
+ const failedPlatforms = [];
73
+ for (const platform of platformsToUpdate) {
74
+ const result = spawnSync("zero-workspace", ["plugins", "install", `--${platform}`], {
75
+ stdio: "inherit",
76
+ shell: true,
77
+ });
78
+ if (result.status !== 0) {
79
+ failedPlatforms.push(platform);
80
+ console.log("");
81
+ console.log(colors.red(`[ERROR] ${platform} 插件更新失败`));
82
+ }
83
+ }
84
+ if (failedPlatforms.length === 0) {
85
+ console.log("");
86
+ console.log(colors.green("[OK] 插件更新完成"));
87
+ }
88
+ return { success: failedPlatforms.length === 0, failedPlatforms };
89
+ }
90
+ // 显示更新内容
91
+ async function showUpdateNotes(fromVersion, toVersion) {
92
+ try {
93
+ const __filename = fileURLToPath(import.meta.url);
94
+ const __dirname = dirname(__filename);
95
+ const notesPath = join(__dirname, "..", "..", "config", "version-notes.yaml");
96
+ const content = readFileSync(notesPath, "utf-8");
97
+ const data = parseYaml(content);
98
+ if (!data.versions || !Array.isArray(data.versions)) {
99
+ return;
100
+ }
101
+ // 找出从 fromVersion(不含)到 toVersion(含)之间的版本
102
+ const relevantVersions = data.versions.filter((v) => {
103
+ const cmpFrom = compareVersions(v.version, fromVersion);
104
+ const cmpTo = compareVersions(v.version, toVersion);
105
+ return cmpFrom > 0 && cmpTo <= 0;
106
+ });
107
+ if (relevantVersions.length === 0) {
108
+ return;
109
+ }
110
+ // 按版本号降序排列(最新的在前)
111
+ relevantVersions.sort((a, b) => compareVersions(b.version, a.version));
112
+ console.log("");
113
+ console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
114
+ console.log("📋 更新内容:");
115
+ console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
116
+ // 最多显示 3 个版本的详细内容
117
+ const maxDisplay = 3;
118
+ const displayVersions = relevantVersions.slice(0, maxDisplay);
119
+ const hiddenCount = relevantVersions.length - maxDisplay;
120
+ for (const v of displayVersions) {
121
+ console.log("");
122
+ console.log(`v${v.version}: ${v.requirement}`);
123
+ if (v.conclusion) {
124
+ const lines = v.conclusion.split("\n");
125
+ for (const line of lines) {
126
+ console.log(` ${line}`);
127
+ }
128
+ }
129
+ }
130
+ if (hiddenCount > 0) {
131
+ console.log("");
132
+ console.log(`... 还有 ${hiddenCount} 个版本的更新,详见 CHANGELOG.md`);
133
+ }
134
+ console.log("");
135
+ console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
136
+ }
137
+ catch {
138
+ // 读取失败时静默忽略,不影响更新流程
139
+ }
140
+ }
141
+ async function checkLatestVersion() {
142
+ return new Promise((resolve) => {
143
+ const child = spawn("npm", ["view", "zero-workspace", "version"], {
144
+ shell: true,
145
+ stdio: ["ignore", "pipe", "ignore"],
146
+ });
147
+ let output = "";
148
+ child.stdout.on("data", (data) => {
149
+ output += data.toString();
150
+ });
151
+ child.on("close", (code) => {
152
+ if (code === 0) {
153
+ resolve(output.trim());
154
+ }
155
+ else {
156
+ resolve(null);
157
+ }
158
+ });
159
+ child.on("error", () => resolve(null));
160
+ });
161
+ }
162
+ /**
163
+ * 获取所有版本列表
164
+ */
165
+ async function getAllVersions() {
166
+ return new Promise((resolve) => {
167
+ const child = spawn("npm", ["view", "zero-workspace", "versions", "--json"], {
168
+ shell: true,
169
+ stdio: ["ignore", "pipe", "ignore"],
170
+ });
171
+ let output = "";
172
+ child.stdout.on("data", (data) => {
173
+ output += data.toString();
174
+ });
175
+ child.on("close", (code) => {
176
+ if (code === 0) {
177
+ try {
178
+ const versions = JSON.parse(output.trim());
179
+ resolve(Array.isArray(versions) ? versions : []);
180
+ }
181
+ catch {
182
+ resolve([]);
183
+ }
184
+ }
185
+ else {
186
+ resolve([]);
187
+ }
188
+ });
189
+ child.on("error", () => resolve([]));
190
+ });
191
+ }
192
+ /**
193
+ * 获取最新的 beta 版本
194
+ */
195
+ async function getLatestBetaVersion() {
196
+ const versions = await getAllVersions();
197
+ // 筛选 beta 版本
198
+ const betaVersions = versions.filter((v) => {
199
+ const prerelease = semver.prerelease(v);
200
+ return prerelease && prerelease[0] === "beta";
201
+ });
202
+ if (betaVersions.length === 0) {
203
+ return null;
204
+ }
205
+ // 按 semver 排序,取最新的
206
+ betaVersions.sort((a, b) => semver.rcompare(a, b));
207
+ return betaVersions[0];
208
+ }
209
+ /**
210
+ * 判断当前版本是否为 beta
211
+ */
212
+ function isBetaVersion(version) {
213
+ const prerelease = semver.prerelease(version);
214
+ return prerelease !== null && prerelease[0] === "beta";
215
+ }
216
+ /**
217
+ * 用户确认提示
218
+ */
219
+ async function confirm(message) {
220
+ const rl = readline.createInterface({
221
+ input: process.stdin,
222
+ output: process.stdout,
223
+ });
224
+ return new Promise((resolve) => {
225
+ rl.question(`${message} (Y/n) `, (answer) => {
226
+ rl.close();
227
+ resolve(answer.toLowerCase() !== "n");
228
+ });
229
+ });
230
+ }
231
+ /**
232
+ * 创建全局备份
233
+ */
234
+ async function createBackupBeforeUpdate() {
235
+ try {
236
+ const fsAdapter = new FileSystemAdapter();
237
+ const jsonStorage = new JsonStorage(fsAdapter);
238
+ const backupService = new BackupService(jsonStorage, fsAdapter);
239
+ console.log("\n📦 正在备份当前状态...");
240
+ const backup = await backupService.createGlobalBackup("beta_update");
241
+ console.log(colors.green(`✅ 备份完成: ${backup.name}`));
242
+ return { success: true, backupName: backup.name };
243
+ }
244
+ catch (err) {
245
+ const errorMsg = err instanceof Error ? err.message : String(err);
246
+ console.log(colors.red(`❌ 备份失败: ${errorMsg}`));
247
+ return { success: false, error: errorMsg };
248
+ }
249
+ }
250
+ /**
251
+ * 执行 npm install 更新
252
+ */
253
+ async function performUpdate(currentVersion, targetVersion, isBeta) {
254
+ console.log(`\n📥 正在安装 zero-workspace@${targetVersion}...\n`);
255
+ const child = spawn("npm", ["install", "-g", `zero-workspace@${targetVersion}`], {
256
+ shell: true,
257
+ stdio: "inherit",
258
+ });
259
+ child.on("close", async (code) => {
260
+ if (code === 0) {
261
+ console.log(`\n✅ 更新成功! v${currentVersion} -> v${targetVersion}`);
262
+ // Beta 版本提示如何切换到稳定版
263
+ if (isBeta) {
264
+ console.log(colors.gray("提示: 如需切换到稳定版,运行 zero-workspace update"));
265
+ }
266
+ // 检测并更新插件
267
+ const pluginResult = updatePluginsIfNeeded();
268
+ // 显示更新内容
269
+ await showUpdateNotes(currentVersion, targetVersion);
270
+ // 显示重启提示
271
+ console.log("请重启相关服务以应用更新:");
272
+ console.log(" - 重启编辑器 (Claude Code / Cursor)");
273
+ console.log(" - 重启 WebUI: zero-workspace webui");
274
+ console.log("");
275
+ // 如果插件更新失败,给出手动更新提示(只显示失败的平台)
276
+ if (!pluginResult.success && pluginResult.failedPlatforms.length > 0) {
277
+ console.log(colors.yellow("插件更新失败,请手动重试:"));
278
+ for (const platform of pluginResult.failedPlatforms) {
279
+ console.log(` zero-workspace plugins install --${platform}`);
280
+ }
281
+ console.log("");
282
+ }
283
+ }
284
+ else {
285
+ console.error("\n❌ 更新失败,请尝试手动更新:");
286
+ console.error(` npm install -g zero-workspace@${targetVersion}`);
287
+ }
288
+ process.exit(code || 0);
289
+ });
290
+ child.on("error", (err) => {
291
+ console.error("\n❌ 更新失败:", err.message);
292
+ console.error("请尝试手动更新:");
293
+ console.error(` npm install -g zero-workspace@${targetVersion}`);
294
+ process.exit(1);
295
+ });
296
+ }
297
+ /**
298
+ * Beta 更新流程
299
+ */
300
+ async function updateBeta() {
301
+ const currentVersion = getVersion();
302
+ const currentIsBeta = isBetaVersion(currentVersion);
303
+ console.log(`当前版本: v${currentVersion}${currentIsBeta ? " (beta)" : ""}`);
304
+ console.log("正在检查最新 beta 版本...");
305
+ const latestBeta = await getLatestBetaVersion();
306
+ const latestStable = await checkLatestVersion();
307
+ // 没有可用的 beta 版本
308
+ if (!latestBeta) {
309
+ console.log(colors.yellow("\n⚠️ 没有可用的 beta 版本"));
310
+ return;
311
+ }
312
+ // 当前 stable 版本高于或等于 beta
313
+ if (latestStable && semver.gte(currentVersion, latestBeta) && !currentIsBeta) {
314
+ console.log(colors.yellow(`\n⚠️ 当前稳定版 v${currentVersion} 已高于最新 beta v${latestBeta}`));
315
+ console.log("无需更新到 beta 版本。");
316
+ return;
317
+ }
318
+ // 当前已是最新 beta
319
+ if (currentVersion === latestBeta) {
320
+ console.log(colors.green(`\n✅ 已是最新 beta 版本 v${currentVersion}`));
321
+ return;
322
+ }
323
+ // 当前是 beta,但有更新的 beta
324
+ if (currentIsBeta && semver.gt(latestBeta, currentVersion)) {
325
+ console.log(`\n最新 beta: v${latestBeta}`);
326
+ }
327
+ else if (!currentIsBeta && semver.gt(latestBeta, currentVersion)) {
328
+ // 当前是 stable,有更新的 beta
329
+ console.log(`\n最新 beta: v${latestBeta}`);
330
+ }
331
+ else {
332
+ // beta 版本不高于当前版本
333
+ console.log(colors.yellow(`\n⚠️ 最新 beta v${latestBeta} 不高于当前版本 v${currentVersion}`));
334
+ return;
335
+ }
336
+ // 显示警告并确认
337
+ console.log("");
338
+ console.log(colors.yellow("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"));
339
+ console.log(colors.yellow("⚠️ Beta 版本警告"));
340
+ console.log(colors.yellow("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"));
341
+ console.log("");
342
+ console.log(`当前版本: v${currentVersion}`);
343
+ console.log(`最新 beta: v${latestBeta}`);
344
+ console.log("");
345
+ console.log("Beta 版本可能不稳定,更新前将自动备份。");
346
+ console.log("");
347
+ const confirmed = await confirm("是否继续?");
348
+ if (!confirmed) {
349
+ console.log("\n已取消更新。");
350
+ return;
351
+ }
352
+ // 创建备份
353
+ const backupResult = await createBackupBeforeUpdate();
354
+ if (!backupResult.success) {
355
+ console.log(colors.red("\n❌ 备份失败,中止更新。"));
356
+ console.log("请先解决备份问题后再尝试更新。");
357
+ process.exit(1);
358
+ }
359
+ // 执行更新
360
+ await performUpdate(currentVersion, latestBeta, true);
361
+ }
362
+ /**
363
+ * 普通更新流程(支持从 beta 回退到 stable)
364
+ */
365
+ async function updateStable() {
366
+ const currentVersion = getVersion();
367
+ const currentIsBeta = isBetaVersion(currentVersion);
368
+ console.log(`当前版本: v${currentVersion}${currentIsBeta ? " (beta)" : ""}`);
369
+ console.log("正在检查最新版本...");
370
+ const latestVersion = await checkLatestVersion();
371
+ if (!latestVersion) {
372
+ console.error("\n无法获取最新版本信息,请检查网络连接");
373
+ process.exit(1);
374
+ }
375
+ // 当前是 beta 版本,提示可以回退到 stable
376
+ if (currentIsBeta) {
377
+ console.log(`\n最新稳定版: v${latestVersion}`);
378
+ console.log("");
379
+ console.log(colors.yellow("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"));
380
+ console.log(colors.yellow("📋 版本信息"));
381
+ console.log(colors.yellow("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"));
382
+ console.log("");
383
+ console.log(`当前版本: v${currentVersion} (beta)`);
384
+ console.log(`最新稳定版: v${latestVersion}`);
385
+ console.log("");
386
+ console.log("检测到您正在使用 beta 版本,可回退到稳定版。");
387
+ console.log("");
388
+ const confirmed = await confirm(`是否回退到 v${latestVersion}?`);
389
+ if (!confirmed) {
390
+ console.log("\n已取消回退。");
391
+ return;
392
+ }
393
+ // 创建备份
394
+ const backupResult = await createBackupBeforeUpdate();
395
+ if (!backupResult.success) {
396
+ console.log(colors.red("\n❌ 备份失败,中止回退。"));
397
+ console.log("请先解决备份问题后再尝试。");
398
+ process.exit(1);
399
+ }
400
+ // 执行回退
401
+ await performUpdate(currentVersion, latestVersion, false);
402
+ return;
403
+ }
404
+ // 普通更新流程
405
+ if (latestVersion === currentVersion) {
406
+ console.log(`\n✅ 已是最新版本 v${currentVersion}`);
407
+ return;
408
+ }
409
+ // 检查是否需要更新
410
+ if (!semver.gt(latestVersion, currentVersion)) {
411
+ console.log(`\n✅ 当前版本 v${currentVersion} 已是最新`);
412
+ return;
413
+ }
414
+ console.log(`最新版本: v${latestVersion}`);
415
+ // 执行更新(普通更新不需要备份)
416
+ await performUpdate(currentVersion, latestVersion, false);
417
+ }
418
+ export default async function update(options) {
419
+ if (options?.beta) {
420
+ await updateBeta();
421
+ }
422
+ else {
423
+ await updateStable();
424
+ }
425
+ }
426
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 主函数
4
+ */
5
+ export default function main(): Promise<void>;
6
+ //# sourceMappingURL=webui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webui.d.ts","sourceRoot":"","sources":["../../src/cli/webui.ts"],"names":[],"mappings":";AA8KA;;GAEG;AACH,wBAA8B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+ClD"}
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env node
2
+ // src/cli/webui.ts
3
+ // WebUI 独立启动命令 - 支持进程管理和版本检测
4
+ import { createRequire } from "module";
5
+ import { fileURLToPath } from "url";
6
+ import { dirname, join } from "path";
7
+ import { readPidInfo, writePidInfo, removePidFile, isProcessRunning, getPortProcess, killProcess, getProcessCommand, } from "../utils/processManager.js";
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ const require = createRequire(import.meta.url);
11
+ // 读取 package.json 获取版本
12
+ const pkg = require(join(__dirname, "..", "..", "package.json"));
13
+ const CURRENT_VERSION = pkg.version;
14
+ // 配置
15
+ const IS_DEV = process.env.NODE_ENV === "development" || process.env.ZERO_DEV === "true";
16
+ const DEFAULT_PORT = IS_DEV ? 19541 : 19540;
17
+ const PORT = parseInt(process.env.HTTP_PORT ?? process.env.PORT ?? String(DEFAULT_PORT), 10);
18
+ /**
19
+ * 处理旧进程
20
+ */
21
+ function handleOldProcessForCli() {
22
+ const pidInfo = readPidInfo();
23
+ // 情况1:有 PID 记录
24
+ if (pidInfo) {
25
+ if (isProcessRunning(pidInfo.pid)) {
26
+ // 检查版本
27
+ if (pidInfo.version !== CURRENT_VERSION) {
28
+ console.log(`[webui] 检测到旧版本进程 (v${pidInfo.version} → v${CURRENT_VERSION})`);
29
+ console.log(`[webui] 正在终止旧进程 (PID: ${pidInfo.pid})...`);
30
+ if (killProcess(pidInfo.pid)) {
31
+ console.log(`[webui] 旧进程已终止`);
32
+ removePidFile();
33
+ }
34
+ else {
35
+ const killCmd = process.platform === "win32" ? `taskkill /PID ${pidInfo.pid} /F` : `kill ${pidInfo.pid}`;
36
+ console.error(`[webui] 无法终止旧进程,请手动执行: ${killCmd}`);
37
+ process.exit(1);
38
+ }
39
+ }
40
+ else {
41
+ console.log(`[webui] 服务已在运行 (PID: ${pidInfo.pid}, 端口: ${pidInfo.port})`);
42
+ console.log(`[webui] 访问: http://localhost:${pidInfo.port}`);
43
+ console.log(`[webui] 如需重启,请先执行: zero-workspace webui stop`);
44
+ process.exit(0);
45
+ }
46
+ }
47
+ else {
48
+ // PID 记录存在但进程不存在,清理
49
+ removePidFile();
50
+ }
51
+ }
52
+ // 情况2:端口被占用但不是我们的进程
53
+ const portPid = getPortProcess(PORT);
54
+ if (portPid) {
55
+ const cmdline = getProcessCommand(portPid);
56
+ // 检查是否是 zero-workspace 相关进程
57
+ if (cmdline && (cmdline.includes("zero-workspace") || cmdline.includes("dist/http"))) {
58
+ console.log(`[webui] 检测到端口 ${PORT} 被占用 (PID: ${portPid})`);
59
+ console.log(`[webui] 进程: ${cmdline.substring(0, 60)}...`);
60
+ console.log(`[webui] 正在终止...`);
61
+ if (killProcess(portPid)) {
62
+ console.log(`[webui] 进程已终止`);
63
+ }
64
+ }
65
+ else {
66
+ console.error(`[webui] 端口 ${PORT} 被其他服务占用 (PID: ${portPid})`);
67
+ if (cmdline) {
68
+ console.error(`[webui] 进程: ${cmdline}`);
69
+ }
70
+ console.error(`[webui] 请手动终止或使用其他端口: HTTP_PORT=19542 zero-workspace webui`);
71
+ process.exit(1);
72
+ }
73
+ }
74
+ }
75
+ /**
76
+ * 停止服务
77
+ */
78
+ function stopServer() {
79
+ const pidInfo = readPidInfo();
80
+ if (pidInfo && isProcessRunning(pidInfo.pid)) {
81
+ console.log(`[webui] 正在停止服务 (PID: ${pidInfo.pid})...`);
82
+ if (killProcess(pidInfo.pid)) {
83
+ removePidFile();
84
+ console.log(`[webui] 服务已停止`);
85
+ }
86
+ else {
87
+ const killCmd = process.platform === "win32" ? `taskkill /PID ${pidInfo.pid} /F` : `kill ${pidInfo.pid}`;
88
+ console.error(`[webui] 无法停止服务,请手动执行: ${killCmd}`);
89
+ }
90
+ }
91
+ else {
92
+ const portPid = getPortProcess(PORT);
93
+ if (portPid) {
94
+ console.log(`[webui] 正在停止端口 ${PORT} 上的服务 (PID: ${portPid})...`);
95
+ killProcess(portPid);
96
+ removePidFile();
97
+ console.log(`[webui] 服务已停止`);
98
+ }
99
+ else {
100
+ console.log(`[webui] 没有运行中的服务`);
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * 显示状态
106
+ */
107
+ function showStatus() {
108
+ const pidInfo = readPidInfo();
109
+ if (pidInfo && isProcessRunning(pidInfo.pid)) {
110
+ console.log(`[webui] 状态: 运行中`);
111
+ console.log(`[webui] PID: ${pidInfo.pid}`);
112
+ console.log(`[webui] 端口: ${pidInfo.port}`);
113
+ console.log(`[webui] 版本: ${pidInfo.version}`);
114
+ console.log(`[webui] 启动时间: ${pidInfo.startedAt}`);
115
+ console.log(`[webui] 访问: http://localhost:${pidInfo.port}`);
116
+ }
117
+ else {
118
+ const portPid = getPortProcess(PORT);
119
+ if (portPid) {
120
+ console.log(`[webui] 状态: 端口被占用`);
121
+ console.log(`[webui] 占用进程 PID: ${portPid}`);
122
+ }
123
+ else {
124
+ console.log(`[webui] 状态: 未运行`);
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * 启动服务器
130
+ */
131
+ async function startServer() {
132
+ // 处理旧进程
133
+ handleOldProcessForCli();
134
+ console.log(`[webui] 启动 ZeroWorkspace WebUI v${CURRENT_VERSION}...`);
135
+ console.log(`[webui] 端口: ${PORT}`);
136
+ console.log(`[webui] 模式: ${IS_DEV ? "开发" : "生产"}`);
137
+ // 写入 PID 信息
138
+ writePidInfo({
139
+ pid: process.pid,
140
+ port: PORT,
141
+ version: CURRENT_VERSION,
142
+ startedAt: new Date().toISOString(),
143
+ });
144
+ // 进程退出时清理
145
+ process.on("exit", removePidFile);
146
+ process.on("SIGINT", () => {
147
+ removePidFile();
148
+ process.exit(0);
149
+ });
150
+ process.on("SIGTERM", () => {
151
+ removePidFile();
152
+ process.exit(0);
153
+ });
154
+ // 启动 HTTP 服务器
155
+ const { startServer: startHttpServer } = await import("../http/server.js");
156
+ const server = await startHttpServer(PORT);
157
+ console.log(`[webui] 服务已启动: http://localhost:${PORT}`);
158
+ console.log(`[webui] 按 Ctrl+C 停止服务`);
159
+ }
160
+ /**
161
+ * 主函数
162
+ */
163
+ export default async function main() {
164
+ const action = process.argv[3] || "start";
165
+ switch (action) {
166
+ case "start":
167
+ await startServer();
168
+ break;
169
+ case "stop":
170
+ stopServer();
171
+ break;
172
+ case "restart":
173
+ stopServer();
174
+ await startServer();
175
+ break;
176
+ case "status":
177
+ showStatus();
178
+ break;
179
+ case "help":
180
+ case "--help":
181
+ case "-h":
182
+ console.log(`
183
+ ZeroWorkspace WebUI 管理命令
184
+
185
+ 用法: zero-workspace webui [action]
186
+
187
+ Actions:
188
+ start 启动 WebUI 服务 (默认)
189
+ stop 停止 WebUI 服务
190
+ restart 重启 WebUI 服务
191
+ status 查看服务状态
192
+
193
+ 选项:
194
+ HTTP_PORT=<port> 指定端口 (默认: ${DEFAULT_PORT})
195
+ ZERO_DEV=true 开发模式
196
+
197
+ 示例:
198
+ zero-workspace webui # 启动服务
199
+ zero-workspace webui stop # 停止服务
200
+ zero-workspace webui status # 查看状态
201
+ HTTP_PORT=19542 zero-workspace webui # 使用指定端口
202
+ `);
203
+ break;
204
+ default:
205
+ console.error(`未知操作: ${action}`);
206
+ console.error(`使用 zero-workspace webui help 查看帮助`);
207
+ process.exit(1);
208
+ }
209
+ }
210
+ //# sourceMappingURL=webui.js.map