xtep-workspace 1.10.10

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 (418) hide show
  1. package/CHANGELOG.md +525 -0
  2. package/README.md +188 -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 +89 -0
  386. package/plugin/README.md +141 -0
  387. package/plugin/agents/xtep-executor.md +114 -0
  388. package/plugin/agents/xtep-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//351/205/215/347/275/256/346/226/271/345/274/217.md +330 -0
@@ -0,0 +1,259 @@
1
+ // src/services/GuidanceService.ts
2
+ // 引导内容生成服务 - 场景检测与内容生成
3
+ import { getGuidanceConfig } from "../prompts/guidanceContent.js";
4
+ /**
5
+ * 引导服务
6
+ * 实现场景检测和引导内容生成
7
+ */
8
+ export class GuidanceService {
9
+ /**
10
+ * 检测当前场景
11
+ * @param context 当前操作上下文
12
+ * @returns 检测到的场景类型
13
+ */
14
+ detectScenario(context) {
15
+ // 1. 优先检查错误场景
16
+ if (context.error) {
17
+ return this.detectErrorScenario(context);
18
+ }
19
+ // 2. 检查工具名称,确定操作类型
20
+ const toolName = context.toolName;
21
+ if (!toolName) {
22
+ return "unknown";
23
+ }
24
+ // 3. 根据工具名称分发到具体的检测逻辑
25
+ switch (toolName) {
26
+ case "workspace_init":
27
+ return "workspace_init";
28
+ case "workspace_archive":
29
+ return "workspace_archived";
30
+ case "workspace_restore":
31
+ return "workspace_restored";
32
+ case "node_create":
33
+ return this.detectNodeCreateScenario(context);
34
+ case "node_transition":
35
+ return this.detectNodeTransitionScenario(context);
36
+ case "node_get":
37
+ case "context_get":
38
+ return this.detectContextScenario(context);
39
+ default:
40
+ return "unknown";
41
+ }
42
+ }
43
+ /**
44
+ * 检测错误场景
45
+ */
46
+ detectErrorScenario(context) {
47
+ const errorCode = context.error?.code;
48
+ if (!errorCode) {
49
+ return "unknown";
50
+ }
51
+ // 映射错误代码到场景
52
+ if (errorCode === "INVALID_TRANSITION") {
53
+ return "error_invalid_transition";
54
+ }
55
+ if (errorCode === "EXECUTION_HAS_CHILDREN") {
56
+ return "error_execution_has_children";
57
+ }
58
+ if (errorCode === "WORKSPACE_NOT_FOUND" ||
59
+ errorCode === "NODE_NOT_FOUND") {
60
+ return "error_workspace_not_found";
61
+ }
62
+ return "unknown";
63
+ }
64
+ /**
65
+ * 检测节点创建场景
66
+ */
67
+ detectNodeCreateScenario(context) {
68
+ const nodeType = context.nodeType;
69
+ const nodeRole = context.nodeRole;
70
+ // 信息收集节点优先识别
71
+ if (nodeRole === "info_collection") {
72
+ return "node_create_info_collection";
73
+ }
74
+ // 根据节点类型
75
+ if (nodeType === "planning") {
76
+ return "node_create_planning";
77
+ }
78
+ if (nodeType === "execution") {
79
+ return "node_create_execution";
80
+ }
81
+ return "unknown";
82
+ }
83
+ /**
84
+ * 检测节点状态转换场景
85
+ */
86
+ detectNodeTransitionScenario(context) {
87
+ const action = context.toolInput?.action;
88
+ const nodeType = context.nodeType;
89
+ const nodeStatus = context.nodeStatus;
90
+ const hasChildren = context.hasChildren;
91
+ if (!action || !nodeType) {
92
+ return "unknown";
93
+ }
94
+ // 检查 reopen 已有子节点的情况
95
+ if (action === "reopen" && hasChildren) {
96
+ return "node_reopen_with_children";
97
+ }
98
+ // 检查是否是根节点首次 start
99
+ if (action === "start" &&
100
+ nodeType === "planning" &&
101
+ nodeStatus === "pending" &&
102
+ context.extra?.isRootNode) {
103
+ return "workspace_first_planning";
104
+ }
105
+ // 执行节点状态转换
106
+ if (nodeType === "execution") {
107
+ switch (action) {
108
+ case "start":
109
+ return "execution_start";
110
+ case "complete":
111
+ return "execution_complete";
112
+ case "fail":
113
+ return "execution_fail";
114
+ default:
115
+ return "unknown";
116
+ }
117
+ }
118
+ // 规划节点状态转换
119
+ if (nodeType === "planning") {
120
+ switch (action) {
121
+ case "start":
122
+ return "planning_start";
123
+ case "complete":
124
+ return "planning_complete";
125
+ default:
126
+ return "unknown";
127
+ }
128
+ }
129
+ // 规划节点进入 monitoring
130
+ if (nodeType === "planning" && nodeStatus === "monitoring") {
131
+ return "planning_monitoring";
132
+ }
133
+ return "unknown";
134
+ }
135
+ /**
136
+ * 检测上下文查询场景
137
+ * 用于检测特殊情况(如缺少信息收集节点、文档派发等)
138
+ */
139
+ detectContextScenario(context) {
140
+ // 检查是否有 actionRequired
141
+ if (context.toolOutput?.actionRequired) {
142
+ const actionRequired = context.toolOutput.actionRequired;
143
+ if (actionRequired.confirmationToken) {
144
+ return "confirmation_required";
145
+ }
146
+ return "actionRequired_triggered";
147
+ }
148
+ // 检查是否缺少信息收集节点
149
+ if (context.extra?.needsInfoCollection) {
150
+ return "info_collection_missing";
151
+ }
152
+ // 检查是否缺少文档派发
153
+ if (context.extra?.docsNotDispatched) {
154
+ return "docs_派发_missing";
155
+ }
156
+ return "unknown";
157
+ }
158
+ /**
159
+ * 生成引导内容
160
+ * @param scenario 场景类型
161
+ * @param level 引导级别
162
+ * @param context 上下文数据(用于动态填充)
163
+ * @returns 引导内容
164
+ */
165
+ generate(scenario, level, context) {
166
+ const config = this.getConfig(scenario);
167
+ if (!config) {
168
+ return {
169
+ level,
170
+ scenario,
171
+ content: "未找到对应的引导内容配置",
172
+ expandable: false,
173
+ };
174
+ }
175
+ // 根据级别选择内容
176
+ let content;
177
+ let expandable;
178
+ switch (level) {
179
+ case 0:
180
+ content = config.l0;
181
+ expandable = true;
182
+ break;
183
+ case 1:
184
+ content = config.l1;
185
+ expandable = true;
186
+ break;
187
+ case 2:
188
+ content = config.l2;
189
+ expandable = false;
190
+ break;
191
+ default:
192
+ content = config.l0;
193
+ expandable = true;
194
+ }
195
+ // 动态替换占位符(如果有 context)
196
+ if (context) {
197
+ content = this.replacePlaceholders(content, context);
198
+ }
199
+ return {
200
+ level,
201
+ scenario,
202
+ content,
203
+ expandable,
204
+ expandTo: expandable && level < 2 ? scenario : undefined,
205
+ relatedHelpTopics: config.relatedHelpTopics,
206
+ metadata: config.metadata,
207
+ };
208
+ }
209
+ /**
210
+ * 替换内容中的占位符
211
+ */
212
+ replacePlaceholders(content, context) {
213
+ let result = content;
214
+ // 替换节点类型
215
+ if (context.nodeType) {
216
+ result = result.replace(/\{nodeType\}/g, context.nodeType);
217
+ }
218
+ // 替换节点状态
219
+ if (context.nodeStatus) {
220
+ result = result.replace(/\{nodeStatus\}/g, context.nodeStatus);
221
+ }
222
+ // 替换错误信息
223
+ if (context.error) {
224
+ result = result.replace(/\{errorCode\}/g, context.error.code);
225
+ result = result.replace(/\{errorMessage\}/g, context.error.message);
226
+ }
227
+ return result;
228
+ }
229
+ /**
230
+ * 获取场景的完整配置
231
+ * @param scenario 场景类型
232
+ * @returns 引导配置
233
+ */
234
+ getConfig(scenario) {
235
+ return getGuidanceConfig(scenario);
236
+ }
237
+ /**
238
+ * 便捷方法:直接获取指定场景和级别的内容
239
+ * @param scenario 场景类型
240
+ * @param level 引导级别(默认 L0)
241
+ * @param context 上下文数据
242
+ * @returns 引导内容字符串,如果未找到则返回空字符串
243
+ */
244
+ getContent(scenario, level = 0, context) {
245
+ const guidance = this.generate(scenario, level, context);
246
+ return guidance.content;
247
+ }
248
+ /**
249
+ * 便捷方法:从上下文自动检测场景并生成引导
250
+ * @param context 上下文数据
251
+ * @param level 引导级别(默认 L0)
252
+ * @returns 引导内容
253
+ */
254
+ generateFromContext(context, level = 0) {
255
+ const scenario = this.detectScenario(context);
256
+ return this.generate(scenario, level, context);
257
+ }
258
+ }
259
+ //# sourceMappingURL=GuidanceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuidanceService.js","sourceRoot":"","sources":["../../src/services/GuidanceService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { JsonStorage } from "../storage/JsonStorage.js";
2
+ import type { FileSystemAdapter } from "../storage/FileSystemAdapter.js";
3
+ import type { HealthReport } from "../types/health.js";
4
+ import type { WorkspaceService } from "./WorkspaceService.js";
5
+ /**
6
+ * 健康检测服务
7
+ * 提供工作区健康状态检测功能
8
+ */
9
+ export declare class HealthService {
10
+ private json;
11
+ private fs;
12
+ private static readonly DIAGNOSTIC_TOKEN;
13
+ private currentCodeVersion;
14
+ private workspaceService?;
15
+ constructor(json: JsonStorage, fs: FileSystemAdapter);
16
+ /**
17
+ * 设置 WorkspaceService 依赖(用于警告标记管理)
18
+ */
19
+ setWorkspaceService(workspaceService: WorkspaceService): void;
20
+ /**
21
+ * 获取当前代码版本
22
+ */
23
+ private getCurrentCodeVersion;
24
+ /**
25
+ * 获取诊断指南路径
26
+ */
27
+ getGuidePath(): string;
28
+ /**
29
+ * 验证诊断令牌
30
+ */
31
+ validateToken(token: string): boolean;
32
+ /**
33
+ * 执行健康检测
34
+ * @param workspaceId 可选,指定则只检测该工作区
35
+ * @returns 健康报告
36
+ */
37
+ checkHealth(workspaceId?: string): Promise<HealthReport>;
38
+ /**
39
+ * 检测单个工作区
40
+ */
41
+ private checkWorkspace;
42
+ }
43
+ //# sourceMappingURL=HealthService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthService.d.ts","sourceRoot":"","sources":["../../src/services/HealthService.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,oBAAoB,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,qBAAa,aAAa;IAMtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,EAAE;IANZ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;IAC/D,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,gBAAgB,CAAC,CAAmB;gBAGlC,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,iBAAiB;IAG/B;;OAEG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAI7D;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,YAAY,IAAI,MAAM;IAMtB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;OAIG;IACG,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0D9D;;OAEG;YACW,cAAc;CAyK7B"}
@@ -0,0 +1,276 @@
1
+ // src/services/HealthService.ts
2
+ import { fileURLToPath } from "url";
3
+ import { dirname, join } from "path";
4
+ import { createRequire } from "module";
5
+ /**
6
+ * 健康检测服务
7
+ * 提供工作区健康状态检测功能
8
+ */
9
+ export class HealthService {
10
+ json;
11
+ fs;
12
+ static DIAGNOSTIC_TOKEN = "HEALTH_CHECK_2025";
13
+ currentCodeVersion = null;
14
+ workspaceService;
15
+ constructor(json, fs) {
16
+ this.json = json;
17
+ this.fs = fs;
18
+ }
19
+ /**
20
+ * 设置 WorkspaceService 依赖(用于警告标记管理)
21
+ */
22
+ setWorkspaceService(workspaceService) {
23
+ this.workspaceService = workspaceService;
24
+ }
25
+ /**
26
+ * 获取当前代码版本
27
+ */
28
+ getCurrentCodeVersion() {
29
+ if (this.currentCodeVersion)
30
+ return this.currentCodeVersion;
31
+ try {
32
+ const __filename = fileURLToPath(import.meta.url);
33
+ const __dirname = dirname(__filename);
34
+ const require = createRequire(import.meta.url);
35
+ const pkg = require(join(__dirname, "..", "..", "package.json"));
36
+ this.currentCodeVersion = pkg.version;
37
+ return this.currentCodeVersion;
38
+ }
39
+ catch {
40
+ return "0.0.0";
41
+ }
42
+ }
43
+ /**
44
+ * 获取诊断指南路径
45
+ */
46
+ getGuidePath() {
47
+ const __filename = fileURLToPath(import.meta.url);
48
+ const __dirname = dirname(__filename);
49
+ return join(__dirname, "..", "..", "plugin", "docs", "diagnostic-guide.md");
50
+ }
51
+ /**
52
+ * 验证诊断令牌
53
+ */
54
+ validateToken(token) {
55
+ return token === HealthService.DIAGNOSTIC_TOKEN;
56
+ }
57
+ /**
58
+ * 执行健康检测
59
+ * @param workspaceId 可选,指定则只检测该工作区
60
+ * @returns 健康报告
61
+ */
62
+ async checkHealth(workspaceId) {
63
+ const index = await this.json.readIndex();
64
+ const issues = [];
65
+ const workspaceResults = [];
66
+ // 确定检测范围
67
+ const workspaces = workspaceId
68
+ ? index.workspaces.filter(ws => ws.id === workspaceId)
69
+ : index.workspaces.filter(ws => ws.status !== "error");
70
+ // 并行检测所有工作区
71
+ const results = await Promise.all(workspaces.map(ws => this.checkWorkspace(ws)));
72
+ for (const result of results) {
73
+ workspaceResults.push(result);
74
+ issues.push(...result.issues);
75
+ // 更新警告标记
76
+ if (this.workspaceService) {
77
+ if (result.status === "healthy") {
78
+ // 检测通过,清除警告标记
79
+ await this.workspaceService.clearWarningFlag(result.workspaceId);
80
+ }
81
+ else if (result.issues.length > 0) {
82
+ // 检测到问题,设置警告标记
83
+ await this.workspaceService.setWarningFlag(result.workspaceId, result.issues);
84
+ }
85
+ }
86
+ }
87
+ // 统计
88
+ const healthyCount = workspaceResults.filter(r => r.status === "healthy").length;
89
+ const warningCount = workspaceResults.filter(r => r.status === "warning").length;
90
+ const errorCount = workspaceResults.filter(r => r.status === "error").length;
91
+ // 确定整体状态
92
+ let status = "healthy";
93
+ if (errorCount > 0) {
94
+ status = "error";
95
+ }
96
+ else if (warningCount > 0) {
97
+ status = "warning";
98
+ }
99
+ return {
100
+ status,
101
+ checkedAt: new Date().toISOString(),
102
+ codeVersion: this.getCurrentCodeVersion(),
103
+ issues,
104
+ summary: {
105
+ totalWorkspaces: workspaceResults.length,
106
+ healthyWorkspaces: healthyCount,
107
+ warningWorkspaces: warningCount,
108
+ errorWorkspaces: errorCount,
109
+ },
110
+ };
111
+ }
112
+ /**
113
+ * 检测单个工作区
114
+ */
115
+ async checkWorkspace(entry) {
116
+ const issues = [];
117
+ const { id, name, dirName, projectRoot, status } = entry;
118
+ const wsDirName = dirName || id;
119
+ // 跳过 error 状态的工作区
120
+ if (status === "error") {
121
+ return {
122
+ workspaceId: id,
123
+ workspaceName: name,
124
+ status: "error",
125
+ issues: [{
126
+ type: "dir_missing",
127
+ severity: "error",
128
+ target: id,
129
+ message: entry.errorInfo?.message || "工作区已标记为错误状态",
130
+ suggestion: "检查错误详情并尝试修复或删除",
131
+ }],
132
+ };
133
+ }
134
+ const isArchived = status === "archived";
135
+ // 1. 目录存在检测
136
+ const workspacePath = isArchived
137
+ ? this.fs.getArchivePath(projectRoot, wsDirName)
138
+ : this.fs.getWorkspacePath(projectRoot, wsDirName);
139
+ if (!(await this.fs.exists(workspacePath))) {
140
+ issues.push({
141
+ type: "dir_missing",
142
+ severity: "error",
143
+ target: id,
144
+ message: `工作区目录不存在: ${workspacePath}`,
145
+ suggestion: "从备份恢复或删除该工作区",
146
+ });
147
+ return {
148
+ workspaceId: id,
149
+ workspaceName: name,
150
+ status: "error",
151
+ issues,
152
+ };
153
+ }
154
+ // 2. 配置文件检测
155
+ const configPath = isArchived
156
+ ? `${this.fs.getArchivePath(projectRoot, wsDirName)}/workspace.json`
157
+ : this.fs.getWorkspaceConfigPath(projectRoot, wsDirName);
158
+ if (!(await this.fs.exists(configPath))) {
159
+ issues.push({
160
+ type: "config_corrupt",
161
+ severity: "error",
162
+ target: id,
163
+ message: "配置文件不存在: workspace.json",
164
+ suggestion: "从备份恢复配置文件",
165
+ });
166
+ }
167
+ else {
168
+ try {
169
+ const content = await this.fs.readFile(configPath);
170
+ JSON.parse(content);
171
+ }
172
+ catch {
173
+ issues.push({
174
+ type: "config_corrupt",
175
+ severity: "error",
176
+ target: id,
177
+ message: "配置文件 JSON 格式无效",
178
+ suggestion: "从备份恢复或手动修复配置文件",
179
+ });
180
+ }
181
+ }
182
+ // 3. 图文件检测
183
+ const graphPath = isArchived
184
+ ? this.fs.getGraphPathWithArchive(projectRoot, wsDirName, true)
185
+ : this.fs.getGraphPath(projectRoot, wsDirName);
186
+ if (!(await this.fs.exists(graphPath))) {
187
+ issues.push({
188
+ type: "graph_corrupt",
189
+ severity: "error",
190
+ target: id,
191
+ message: "图文件不存在: graph.json",
192
+ suggestion: "从备份恢复图文件",
193
+ });
194
+ }
195
+ else {
196
+ try {
197
+ const content = await this.fs.readFile(graphPath);
198
+ const graph = JSON.parse(content);
199
+ // 4. 版本检测
200
+ if (graph.lastWriteCodeVersion) {
201
+ const currentVersion = this.getCurrentCodeVersion();
202
+ const dataVersion = graph.lastWriteCodeVersion;
203
+ const [dataMajor, dataMinor] = dataVersion.split(".").map(Number);
204
+ const [curMajor, curMinor] = currentVersion.split(".").map(Number);
205
+ if (dataMajor > curMajor || (dataMajor === curMajor && dataMinor > curMinor)) {
206
+ issues.push({
207
+ type: "version_mismatch",
208
+ severity: "warning",
209
+ target: id,
210
+ message: `数据版本 ${dataVersion} 高于当前代码版本 ${currentVersion}`,
211
+ suggestion: "升级 xtep-workspace 或使用兼容版本",
212
+ });
213
+ }
214
+ }
215
+ // 5. 节点完整性检测
216
+ const nodesDir = isArchived
217
+ ? `${this.fs.getArchivePath(projectRoot, wsDirName)}/nodes`
218
+ : this.fs.getNodesDir(projectRoot, wsDirName);
219
+ if (graph.nodes) {
220
+ for (const [nodeId, node] of Object.entries(graph.nodes)) {
221
+ const nodeMeta = node;
222
+ const nodeDirName = nodeMeta.dirName || nodeId;
223
+ const nodePath = `${nodesDir}/${nodeDirName}`;
224
+ if (!(await this.fs.exists(nodePath))) {
225
+ issues.push({
226
+ type: "node_corrupt",
227
+ severity: "error",
228
+ target: nodeId,
229
+ message: `节点目录不存在: ${nodeDirName}`,
230
+ suggestion: "从备份恢复或删除该节点",
231
+ });
232
+ }
233
+ else {
234
+ const infoPath = `${nodePath}/Info.md`;
235
+ if (!(await this.fs.exists(infoPath))) {
236
+ issues.push({
237
+ type: "node_corrupt",
238
+ severity: "warning",
239
+ target: nodeId,
240
+ message: `节点 Info.md 缺失: ${nodeDirName}`,
241
+ suggestion: "可尝试重建节点信息文件",
242
+ });
243
+ }
244
+ }
245
+ }
246
+ }
247
+ }
248
+ catch {
249
+ issues.push({
250
+ type: "graph_corrupt",
251
+ severity: "error",
252
+ target: id,
253
+ message: "图文件 JSON 格式无效",
254
+ suggestion: "从备份恢复或手动修复图文件",
255
+ });
256
+ }
257
+ }
258
+ // 确定状态
259
+ const hasError = issues.some(i => i.severity === "error");
260
+ const hasWarning = issues.some(i => i.severity === "warning");
261
+ let wsStatus = "healthy";
262
+ if (hasError) {
263
+ wsStatus = "error";
264
+ }
265
+ else if (hasWarning) {
266
+ wsStatus = "warning";
267
+ }
268
+ return {
269
+ workspaceId: id,
270
+ workspaceName: name,
271
+ status: wsStatus,
272
+ issues,
273
+ };
274
+ }
275
+ }
276
+ //# sourceMappingURL=HealthService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthService.js","sourceRoot":"","sources":["../../src/services/HealthService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { InstallationMeta, PlatformType, PlatformInstallation } from "../types/settings.js";
2
+ /**
3
+ * 安装服务
4
+ * 管理安装元信息文件 ~/.xtep-workspace/installation-meta.json
5
+ * 用于跟踪各平台组件的安装状态和版本
6
+ */
7
+ export declare class InstallationService {
8
+ private metaPath;
9
+ private packageVersion;
10
+ constructor();
11
+ /**
12
+ * 获取包版本号
13
+ */
14
+ private loadPackageVersion;
15
+ /**
16
+ * 获取元信息文件路径
17
+ */
18
+ getPath(): string;
19
+ /**
20
+ * 获取当前包版本
21
+ */
22
+ getPackageVersion(): string;
23
+ /**
24
+ * 读取安装元信息
25
+ * 如果文件不存在,返回默认结构
26
+ */
27
+ read(): Promise<InstallationMeta>;
28
+ /**
29
+ * 写入安装元信息
30
+ */
31
+ write(meta: InstallationMeta): Promise<void>;
32
+ /**
33
+ * 更新指定平台的安装信息
34
+ */
35
+ updatePlatform(platform: PlatformType, info: Partial<PlatformInstallation>): Promise<InstallationMeta>;
36
+ /**
37
+ * 合并组件信息
38
+ */
39
+ private mergeComponent;
40
+ /**
41
+ * 更新单个组件
42
+ */
43
+ updateComponent(platform: PlatformType, component: string, installed: boolean, version?: string): Promise<InstallationMeta>;
44
+ /**
45
+ * 获取指定平台的安装信息
46
+ */
47
+ getPlatform(platform: PlatformType): Promise<PlatformInstallation | undefined>;
48
+ /**
49
+ * 检查平台组件版本
50
+ * 返回需要更新的组件列表
51
+ */
52
+ checkComponentUpdates(platform: PlatformType): Promise<Array<{
53
+ component: string;
54
+ installedVersion: string;
55
+ currentVersion: string;
56
+ }>>;
57
+ /**
58
+ * 创建默认的元信息结构
59
+ */
60
+ private createDefaultMeta;
61
+ }
62
+ //# sourceMappingURL=InstallationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstallationService.d.ts","sourceRoot":"","sources":["../../src/services/InstallationService.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAG9B;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;;IAS/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqBvC;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlD;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAClC,OAAO,CAAC,gBAAgB,CAAC;IA6B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACG,eAAe,CACnB,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC;IAgC5B;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAKpF;;;OAGG;IACG,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QACjE,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IA0BH;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAY1B"}