@seanmars/tospec 0.19.0-beta.0 → 0.19.0-beta.13

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 (431) hide show
  1. package/CHANGELOG.md +578 -0
  2. package/README.md +71 -77
  3. package/assets/dashboard/app.js +14 -3
  4. package/assets/dashboard/style.css +7 -0
  5. package/assets/metrics/app.js +22 -0
  6. package/assets/metrics/style.css +8 -0
  7. package/assets/rules/tospec/decision.md +3 -0
  8. package/assets/rules/tospec/single-source-of-truth.md +19 -0
  9. package/dist/cli/index.d.ts.map +1 -1
  10. package/dist/cli/index.js +266 -82
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/commands/config.d.ts +9 -17
  13. package/dist/commands/config.d.ts.map +1 -1
  14. package/dist/commands/config.js +374 -95
  15. package/dist/commands/config.js.map +1 -1
  16. package/dist/commands/dashboard.d.ts +64 -81
  17. package/dist/commands/dashboard.d.ts.map +1 -1
  18. package/dist/commands/dashboard.js +350 -218
  19. package/dist/commands/dashboard.js.map +1 -1
  20. package/dist/commands/decision.d.ts +41 -19
  21. package/dist/commands/decision.d.ts.map +1 -1
  22. package/dist/commands/decision.js +400 -70
  23. package/dist/commands/decision.js.map +1 -1
  24. package/dist/commands/metrics.d.ts +34 -48
  25. package/dist/commands/metrics.d.ts.map +1 -1
  26. package/dist/commands/metrics.js +74 -84
  27. package/dist/commands/metrics.js.map +1 -1
  28. package/dist/commands/shared-output.d.ts +24 -10
  29. package/dist/commands/shared-output.d.ts.map +1 -1
  30. package/dist/commands/shared-output.js +62 -11
  31. package/dist/commands/shared-output.js.map +1 -1
  32. package/dist/commands/show.d.ts +7 -0
  33. package/dist/commands/show.d.ts.map +1 -1
  34. package/dist/commands/show.js +39 -8
  35. package/dist/commands/show.js.map +1 -1
  36. package/dist/commands/validate.d.ts +47 -30
  37. package/dist/commands/validate.d.ts.map +1 -1
  38. package/dist/commands/validate.js +282 -108
  39. package/dist/commands/validate.js.map +1 -1
  40. package/dist/commands/workflow/index.d.ts +6 -10
  41. package/dist/commands/workflow/index.d.ts.map +1 -1
  42. package/dist/commands/workflow/index.js +6 -10
  43. package/dist/commands/workflow/index.js.map +1 -1
  44. package/dist/commands/workflow/instructions.d.ts +21 -8
  45. package/dist/commands/workflow/instructions.d.ts.map +1 -1
  46. package/dist/commands/workflow/instructions.js +254 -95
  47. package/dist/commands/workflow/instructions.js.map +1 -1
  48. package/dist/commands/workflow/new-change.d.ts +4 -5
  49. package/dist/commands/workflow/new-change.d.ts.map +1 -1
  50. package/dist/commands/workflow/new-change.js +90 -25
  51. package/dist/commands/workflow/new-change.js.map +1 -1
  52. package/dist/commands/workflow/schemas.d.ts +3 -5
  53. package/dist/commands/workflow/schemas.d.ts.map +1 -1
  54. package/dist/commands/workflow/schemas.js +37 -11
  55. package/dist/commands/workflow/schemas.js.map +1 -1
  56. package/dist/commands/workflow/shared.d.ts +48 -21
  57. package/dist/commands/workflow/shared.d.ts.map +1 -1
  58. package/dist/commands/workflow/shared.js +36 -33
  59. package/dist/commands/workflow/shared.js.map +1 -1
  60. package/dist/commands/workflow/status.d.ts +10 -6
  61. package/dist/commands/workflow/status.d.ts.map +1 -1
  62. package/dist/commands/workflow/status.js +84 -42
  63. package/dist/commands/workflow/status.js.map +1 -1
  64. package/dist/commands/workflow/templates.d.ts +10 -3
  65. package/dist/commands/workflow/templates.d.ts.map +1 -1
  66. package/dist/commands/workflow/templates.js +39 -40
  67. package/dist/commands/workflow/templates.js.map +1 -1
  68. package/dist/core/archive.d.ts +26 -21
  69. package/dist/core/archive.d.ts.map +1 -1
  70. package/dist/core/archive.js +415 -201
  71. package/dist/core/archive.js.map +1 -1
  72. package/dist/core/artifact-graph/graph.d.ts +29 -36
  73. package/dist/core/artifact-graph/graph.d.ts.map +1 -1
  74. package/dist/core/artifact-graph/graph.js +50 -58
  75. package/dist/core/artifact-graph/graph.js.map +1 -1
  76. package/dist/core/artifact-graph/index.d.ts +2 -2
  77. package/dist/core/artifact-graph/index.d.ts.map +1 -1
  78. package/dist/core/artifact-graph/index.js +2 -2
  79. package/dist/core/artifact-graph/index.js.map +1 -1
  80. package/dist/core/artifact-graph/instruction-loader.d.ts +105 -100
  81. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
  82. package/dist/core/artifact-graph/instruction-loader.js +176 -110
  83. package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
  84. package/dist/core/artifact-graph/outputs.d.ts +13 -6
  85. package/dist/core/artifact-graph/outputs.d.ts.map +1 -1
  86. package/dist/core/artifact-graph/outputs.js +146 -8
  87. package/dist/core/artifact-graph/outputs.js.map +1 -1
  88. package/dist/core/artifact-graph/resolver.d.ts +44 -63
  89. package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
  90. package/dist/core/artifact-graph/resolver.js +85 -86
  91. package/dist/core/artifact-graph/resolver.js.map +1 -1
  92. package/dist/core/artifact-graph/schema.d.ts +0 -6
  93. package/dist/core/artifact-graph/schema.d.ts.map +1 -1
  94. package/dist/core/artifact-graph/schema.js +7 -32
  95. package/dist/core/artifact-graph/schema.js.map +1 -1
  96. package/dist/core/artifact-graph/state.d.ts +1 -8
  97. package/dist/core/artifact-graph/state.d.ts.map +1 -1
  98. package/dist/core/artifact-graph/state.js +2 -17
  99. package/dist/core/artifact-graph/state.js.map +1 -1
  100. package/dist/core/artifact-graph/stub-detection.d.ts +12 -0
  101. package/dist/core/artifact-graph/stub-detection.d.ts.map +1 -0
  102. package/dist/core/artifact-graph/stub-detection.js +39 -0
  103. package/dist/core/artifact-graph/stub-detection.js.map +1 -0
  104. package/dist/core/artifact-graph/types.d.ts +4 -0
  105. package/dist/core/artifact-graph/types.d.ts.map +1 -1
  106. package/dist/core/artifact-graph/types.js +30 -10
  107. package/dist/core/artifact-graph/types.js.map +1 -1
  108. package/dist/core/available-tools.d.ts +3 -12
  109. package/dist/core/available-tools.d.ts.map +1 -1
  110. package/dist/core/available-tools.js +4 -13
  111. package/dist/core/available-tools.js.map +1 -1
  112. package/dist/core/change-metadata/schema.d.ts +1 -1
  113. package/dist/core/change-metadata/schema.d.ts.map +1 -1
  114. package/dist/core/change-metadata/schema.js +10 -7
  115. package/dist/core/change-metadata/schema.js.map +1 -1
  116. package/dist/core/change-presenter.d.ts +23 -18
  117. package/dist/core/change-presenter.d.ts.map +1 -1
  118. package/dist/core/change-presenter.js +102 -43
  119. package/dist/core/change-presenter.js.map +1 -1
  120. package/dist/core/change-status-policy.d.ts +8 -1
  121. package/dist/core/change-status-policy.d.ts.map +1 -1
  122. package/dist/core/change-status-policy.js +25 -1
  123. package/dist/core/change-status-policy.js.map +1 -1
  124. package/dist/core/codex-metrics.d.ts +25 -45
  125. package/dist/core/codex-metrics.d.ts.map +1 -1
  126. package/dist/core/codex-metrics.js +44 -88
  127. package/dist/core/codex-metrics.js.map +1 -1
  128. package/dist/core/codex-residue.d.ts +22 -0
  129. package/dist/core/codex-residue.d.ts.map +1 -0
  130. package/dist/core/codex-residue.js +61 -0
  131. package/dist/core/codex-residue.js.map +1 -0
  132. package/dist/core/command-generation/adapters/claude.d.ts +2 -9
  133. package/dist/core/command-generation/adapters/claude.d.ts.map +1 -1
  134. package/dist/core/command-generation/adapters/claude.js +2 -12
  135. package/dist/core/command-generation/adapters/claude.js.map +1 -1
  136. package/dist/core/command-generation/adapters/index.d.ts +1 -9
  137. package/dist/core/command-generation/adapters/index.d.ts.map +1 -1
  138. package/dist/core/command-generation/adapters/index.js +1 -9
  139. package/dist/core/command-generation/adapters/index.js.map +1 -1
  140. package/dist/core/command-generation/generator.d.ts +0 -17
  141. package/dist/core/command-generation/generator.d.ts.map +1 -1
  142. package/dist/core/command-generation/generator.js +0 -17
  143. package/dist/core/command-generation/generator.js.map +1 -1
  144. package/dist/core/command-generation/index.d.ts +2 -5
  145. package/dist/core/command-generation/index.d.ts.map +1 -1
  146. package/dist/core/command-generation/index.js +0 -9
  147. package/dist/core/command-generation/index.js.map +1 -1
  148. package/dist/core/command-generation/types.d.ts +10 -36
  149. package/dist/core/command-generation/types.d.ts.map +1 -1
  150. package/dist/core/command-generation/types.js +0 -6
  151. package/dist/core/command-generation/types.js.map +1 -1
  152. package/dist/core/command-generation/yaml.d.ts +3 -18
  153. package/dist/core/command-generation/yaml.d.ts.map +1 -1
  154. package/dist/core/command-generation/yaml.js +5 -23
  155. package/dist/core/command-generation/yaml.js.map +1 -1
  156. package/dist/core/config-prompts.d.ts +2 -4
  157. package/dist/core/config-prompts.d.ts.map +1 -1
  158. package/dist/core/config-prompts.js +2 -7
  159. package/dist/core/config-prompts.js.map +1 -1
  160. package/dist/core/config-schema.d.ts +8 -53
  161. package/dist/core/config-schema.d.ts.map +1 -1
  162. package/dist/core/config-schema.js +49 -62
  163. package/dist/core/config-schema.js.map +1 -1
  164. package/dist/core/config.d.ts +56 -0
  165. package/dist/core/config.d.ts.map +1 -1
  166. package/dist/core/config.js +73 -2
  167. package/dist/core/config.js.map +1 -1
  168. package/dist/core/converters/json-converter.d.ts.map +1 -1
  169. package/dist/core/dashboard-activity.d.ts +7 -9
  170. package/dist/core/dashboard-activity.d.ts.map +1 -1
  171. package/dist/core/dashboard-activity.js +26 -24
  172. package/dist/core/dashboard-activity.js.map +1 -1
  173. package/dist/core/dashboard-data.d.ts +40 -22
  174. package/dist/core/dashboard-data.d.ts.map +1 -1
  175. package/dist/core/dashboard-data.js +84 -68
  176. package/dist/core/dashboard-data.js.map +1 -1
  177. package/dist/core/global-config.d.ts +24 -53
  178. package/dist/core/global-config.d.ts.map +1 -1
  179. package/dist/core/global-config.js +43 -62
  180. package/dist/core/global-config.js.map +1 -1
  181. package/dist/core/init.d.ts +29 -11
  182. package/dist/core/init.d.ts.map +1 -1
  183. package/dist/core/init.js +232 -164
  184. package/dist/core/init.js.map +1 -1
  185. package/dist/core/list.d.ts +1 -1
  186. package/dist/core/list.d.ts.map +1 -1
  187. package/dist/core/list.js +121 -28
  188. package/dist/core/list.js.map +1 -1
  189. package/dist/core/local-server.d.ts +63 -39
  190. package/dist/core/local-server.d.ts.map +1 -1
  191. package/dist/core/local-server.js +99 -53
  192. package/dist/core/local-server.js.map +1 -1
  193. package/dist/core/markdown-render.d.ts +25 -0
  194. package/dist/core/markdown-render.d.ts.map +1 -0
  195. package/dist/core/markdown-render.js +94 -0
  196. package/dist/core/markdown-render.js.map +1 -0
  197. package/dist/core/migrate.d.ts +32 -15
  198. package/dist/core/migrate.d.ts.map +1 -1
  199. package/dist/core/migrate.js +220 -108
  200. package/dist/core/migrate.js.map +1 -1
  201. package/dist/core/parsers/change-parser.d.ts +7 -10
  202. package/dist/core/parsers/change-parser.d.ts.map +1 -1
  203. package/dist/core/parsers/change-parser.js +48 -56
  204. package/dist/core/parsers/change-parser.js.map +1 -1
  205. package/dist/core/parsers/markdown-parser.d.ts +8 -9
  206. package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
  207. package/dist/core/parsers/markdown-parser.js +31 -22
  208. package/dist/core/parsers/markdown-parser.js.map +1 -1
  209. package/dist/core/parsers/requirement-blocks.d.ts +53 -11
  210. package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
  211. package/dist/core/parsers/requirement-blocks.js +200 -60
  212. package/dist/core/parsers/requirement-blocks.js.map +1 -1
  213. package/dist/core/parsers/requirement-text.d.ts +73 -79
  214. package/dist/core/parsers/requirement-text.d.ts.map +1 -1
  215. package/dist/core/parsers/requirement-text.js +137 -79
  216. package/dist/core/parsers/requirement-text.js.map +1 -1
  217. package/dist/core/parsers/spec-structure.d.ts +1 -1
  218. package/dist/core/parsers/spec-structure.d.ts.map +1 -1
  219. package/dist/core/parsers/spec-structure.js +30 -3
  220. package/dist/core/parsers/spec-structure.js.map +1 -1
  221. package/dist/core/planning-home.js.map +1 -1
  222. package/dist/core/profiles.d.ts +3 -10
  223. package/dist/core/profiles.d.ts.map +1 -1
  224. package/dist/core/profiles.js +5 -12
  225. package/dist/core/profiles.js.map +1 -1
  226. package/dist/core/project-config.d.ts +43 -44
  227. package/dist/core/project-config.d.ts.map +1 -1
  228. package/dist/core/project-config.js +107 -82
  229. package/dist/core/project-config.js.map +1 -1
  230. package/dist/core/project-layout.d.ts +10 -18
  231. package/dist/core/project-layout.d.ts.map +1 -1
  232. package/dist/core/project-layout.js +16 -26
  233. package/dist/core/project-layout.js.map +1 -1
  234. package/dist/core/root-selection.d.ts +11 -7
  235. package/dist/core/root-selection.d.ts.map +1 -1
  236. package/dist/core/root-selection.js +7 -8
  237. package/dist/core/root-selection.js.map +1 -1
  238. package/dist/core/rules.d.ts +10 -0
  239. package/dist/core/rules.d.ts.map +1 -0
  240. package/dist/core/rules.js +43 -0
  241. package/dist/core/rules.js.map +1 -0
  242. package/dist/core/schema-names.d.ts +16 -0
  243. package/dist/core/schema-names.d.ts.map +1 -0
  244. package/dist/core/schema-names.js +16 -0
  245. package/dist/core/schema-names.js.map +1 -0
  246. package/dist/core/schemas/base.schema.d.ts +3 -0
  247. package/dist/core/schemas/base.schema.d.ts.map +1 -1
  248. package/dist/core/schemas/base.schema.js +22 -6
  249. package/dist/core/schemas/base.schema.js.map +1 -1
  250. package/dist/core/schemas/change.schema.d.ts +16 -0
  251. package/dist/core/schemas/change.schema.d.ts.map +1 -1
  252. package/dist/core/schemas/change.schema.js +41 -10
  253. package/dist/core/schemas/change.schema.js.map +1 -1
  254. package/dist/core/schemas/spec.schema.d.ts +2 -0
  255. package/dist/core/schemas/spec.schema.d.ts.map +1 -1
  256. package/dist/core/shared/index.d.ts +3 -8
  257. package/dist/core/shared/index.d.ts.map +1 -1
  258. package/dist/core/shared/index.js +3 -8
  259. package/dist/core/shared/index.js.map +1 -1
  260. package/dist/core/shared/rules-generation.d.ts +27 -8
  261. package/dist/core/shared/rules-generation.d.ts.map +1 -1
  262. package/dist/core/shared/rules-generation.js +151 -16
  263. package/dist/core/shared/rules-generation.js.map +1 -1
  264. package/dist/core/shared/skill-generation.d.ts +38 -53
  265. package/dist/core/shared/skill-generation.d.ts.map +1 -1
  266. package/dist/core/shared/skill-generation.js +82 -51
  267. package/dist/core/shared/skill-generation.js.map +1 -1
  268. package/dist/core/shared/tool-detection.d.ts +40 -62
  269. package/dist/core/shared/tool-detection.d.ts.map +1 -1
  270. package/dist/core/shared/tool-detection.js +88 -80
  271. package/dist/core/shared/tool-detection.js.map +1 -1
  272. package/dist/core/skill-metrics.d.ts +36 -63
  273. package/dist/core/skill-metrics.d.ts.map +1 -1
  274. package/dist/core/skill-metrics.js +34 -73
  275. package/dist/core/skill-metrics.js.map +1 -1
  276. package/dist/core/spec-presenter.d.ts.map +1 -1
  277. package/dist/core/spec-presenter.js +6 -6
  278. package/dist/core/spec-presenter.js.map +1 -1
  279. package/dist/core/specs-apply.d.ts +24 -23
  280. package/dist/core/specs-apply.d.ts.map +1 -1
  281. package/dist/core/specs-apply.js +188 -173
  282. package/dist/core/specs-apply.js.map +1 -1
  283. package/dist/core/templates/fragments/interview.d.ts +2 -6
  284. package/dist/core/templates/fragments/interview.d.ts.map +1 -1
  285. package/dist/core/templates/fragments/interview.js +2 -6
  286. package/dist/core/templates/fragments/interview.js.map +1 -1
  287. package/dist/core/templates/fragments/next-step.d.ts +4 -8
  288. package/dist/core/templates/fragments/next-step.d.ts.map +1 -1
  289. package/dist/core/templates/fragments/next-step.js +4 -8
  290. package/dist/core/templates/fragments/next-step.js.map +1 -1
  291. package/dist/core/templates/fragments/verify.d.ts +9 -12
  292. package/dist/core/templates/fragments/verify.d.ts.map +1 -1
  293. package/dist/core/templates/fragments/verify.js +9 -12
  294. package/dist/core/templates/fragments/verify.js.map +1 -1
  295. package/dist/core/templates/index.d.ts +0 -6
  296. package/dist/core/templates/index.d.ts.map +1 -1
  297. package/dist/core/templates/index.js +0 -7
  298. package/dist/core/templates/index.js.map +1 -1
  299. package/dist/core/templates/skill-templates.d.ts +1 -5
  300. package/dist/core/templates/skill-templates.d.ts.map +1 -1
  301. package/dist/core/templates/skill-templates.js +0 -5
  302. package/dist/core/templates/skill-templates.js.map +1 -1
  303. package/dist/core/templates/types.d.ts +3 -7
  304. package/dist/core/templates/types.d.ts.map +1 -1
  305. package/dist/core/templates/types.js +0 -3
  306. package/dist/core/templates/types.js.map +1 -1
  307. package/dist/core/templates/workflows/apply.d.ts +3 -9
  308. package/dist/core/templates/workflows/apply.d.ts.map +1 -1
  309. package/dist/core/templates/workflows/apply.js +9 -12
  310. package/dist/core/templates/workflows/apply.js.map +1 -1
  311. package/dist/core/templates/workflows/archive.d.ts +0 -6
  312. package/dist/core/templates/workflows/archive.d.ts.map +1 -1
  313. package/dist/core/templates/workflows/archive.js +7 -5
  314. package/dist/core/templates/workflows/archive.js.map +1 -1
  315. package/dist/core/templates/workflows/decision.js +4 -4
  316. package/dist/core/templates/workflows/decision.js.map +1 -1
  317. package/dist/core/templates/workflows/explore.js +1 -1
  318. package/dist/core/templates/workflows/grill.d.ts.map +1 -1
  319. package/dist/core/templates/workflows/grill.js +0 -2
  320. package/dist/core/templates/workflows/grill.js.map +1 -1
  321. package/dist/core/templates/workflows/issue.d.ts +0 -6
  322. package/dist/core/templates/workflows/issue.d.ts.map +1 -1
  323. package/dist/core/templates/workflows/issue.js +3 -0
  324. package/dist/core/templates/workflows/issue.js.map +1 -1
  325. package/dist/core/templates/workflows/propose.d.ts +0 -6
  326. package/dist/core/templates/workflows/propose.d.ts.map +1 -1
  327. package/dist/core/templates/workflows/propose.js +0 -1
  328. package/dist/core/templates/workflows/propose.js.map +1 -1
  329. package/dist/core/templates/workflows/sync.d.ts +2 -8
  330. package/dist/core/templates/workflows/sync.d.ts.map +1 -1
  331. package/dist/core/templates/workflows/sync.js +2 -2
  332. package/dist/core/templates/workflows/sync.js.map +1 -1
  333. package/dist/core/templates/workflows/update.d.ts +0 -6
  334. package/dist/core/templates/workflows/update.d.ts.map +1 -1
  335. package/dist/core/templates/workflows/update.js.map +1 -1
  336. package/dist/core/update.d.ts +26 -21
  337. package/dist/core/update.d.ts.map +1 -1
  338. package/dist/core/update.js +165 -116
  339. package/dist/core/update.js.map +1 -1
  340. package/dist/core/user-state-migration.d.ts +13 -15
  341. package/dist/core/user-state-migration.d.ts.map +1 -1
  342. package/dist/core/user-state-migration.js +16 -20
  343. package/dist/core/user-state-migration.js.map +1 -1
  344. package/dist/core/validation/constants.d.ts +19 -25
  345. package/dist/core/validation/constants.d.ts.map +1 -1
  346. package/dist/core/validation/constants.js +25 -20
  347. package/dist/core/validation/constants.js.map +1 -1
  348. package/dist/core/validation/prose-length.d.ts +15 -0
  349. package/dist/core/validation/prose-length.d.ts.map +1 -0
  350. package/dist/core/validation/prose-length.js +29 -0
  351. package/dist/core/validation/prose-length.js.map +1 -0
  352. package/dist/core/validation/purpose-placeholder.d.ts +9 -16
  353. package/dist/core/validation/purpose-placeholder.d.ts.map +1 -1
  354. package/dist/core/validation/purpose-placeholder.js +30 -44
  355. package/dist/core/validation/purpose-placeholder.js.map +1 -1
  356. package/dist/core/validation/section-validator.d.ts +4 -4
  357. package/dist/core/validation/section-validator.d.ts.map +1 -1
  358. package/dist/core/validation/section-validator.js +43 -7
  359. package/dist/core/validation/section-validator.js.map +1 -1
  360. package/dist/core/validation/task-numbering.d.ts +6 -3
  361. package/dist/core/validation/task-numbering.d.ts.map +1 -1
  362. package/dist/core/validation/task-numbering.js +23 -11
  363. package/dist/core/validation/task-numbering.js.map +1 -1
  364. package/dist/core/validation/types.d.ts +18 -0
  365. package/dist/core/validation/types.d.ts.map +1 -1
  366. package/dist/core/validation/types.js +12 -1
  367. package/dist/core/validation/types.js.map +1 -1
  368. package/dist/core/validation/validator.d.ts +50 -51
  369. package/dist/core/validation/validator.d.ts.map +1 -1
  370. package/dist/core/validation/validator.js +486 -263
  371. package/dist/core/validation/validator.js.map +1 -1
  372. package/dist/prompts/searchable-multi-select.d.ts +3 -8
  373. package/dist/prompts/searchable-multi-select.d.ts.map +1 -1
  374. package/dist/prompts/searchable-multi-select.js +16 -39
  375. package/dist/prompts/searchable-multi-select.js.map +1 -1
  376. package/dist/utils/change-metadata.d.ts +11 -50
  377. package/dist/utils/change-metadata.d.ts.map +1 -1
  378. package/dist/utils/change-metadata.js +48 -67
  379. package/dist/utils/change-metadata.js.map +1 -1
  380. package/dist/utils/change-utils.d.ts +31 -54
  381. package/dist/utils/change-utils.d.ts.map +1 -1
  382. package/dist/utils/change-utils.js +143 -100
  383. package/dist/utils/change-utils.js.map +1 -1
  384. package/dist/utils/file-lock.d.ts +39 -0
  385. package/dist/utils/file-lock.d.ts.map +1 -0
  386. package/dist/utils/file-lock.js +149 -0
  387. package/dist/utils/file-lock.js.map +1 -0
  388. package/dist/utils/file-system.d.ts +12 -32
  389. package/dist/utils/file-system.d.ts.map +1 -1
  390. package/dist/utils/file-system.js +16 -40
  391. package/dist/utils/file-system.js.map +1 -1
  392. package/dist/utils/frontmatter.d.ts +7 -11
  393. package/dist/utils/frontmatter.d.ts.map +1 -1
  394. package/dist/utils/frontmatter.js +11 -11
  395. package/dist/utils/frontmatter.js.map +1 -1
  396. package/dist/utils/interactive.d.ts +4 -9
  397. package/dist/utils/interactive.d.ts.map +1 -1
  398. package/dist/utils/interactive.js +2 -4
  399. package/dist/utils/interactive.js.map +1 -1
  400. package/dist/utils/item-discovery.d.ts +15 -10
  401. package/dist/utils/item-discovery.d.ts.map +1 -1
  402. package/dist/utils/item-discovery.js +42 -47
  403. package/dist/utils/item-discovery.js.map +1 -1
  404. package/dist/utils/link.d.ts +13 -4
  405. package/dist/utils/link.d.ts.map +1 -1
  406. package/dist/utils/link.js +13 -4
  407. package/dist/utils/link.js.map +1 -1
  408. package/dist/utils/match.js.map +1 -1
  409. package/dist/utils/requirement-diff.d.ts +13 -23
  410. package/dist/utils/requirement-diff.d.ts.map +1 -1
  411. package/dist/utils/requirement-diff.js +13 -23
  412. package/dist/utils/requirement-diff.js.map +1 -1
  413. package/dist/utils/spec-files.d.ts +10 -11
  414. package/dist/utils/spec-files.d.ts.map +1 -1
  415. package/dist/utils/spec-files.js +31 -22
  416. package/dist/utils/spec-files.js.map +1 -1
  417. package/dist/utils/task-progress.d.ts +11 -9
  418. package/dist/utils/task-progress.d.ts.map +1 -1
  419. package/dist/utils/task-progress.js +53 -32
  420. package/dist/utils/task-progress.js.map +1 -1
  421. package/dist/utils/timestamp.d.ts +5 -8
  422. package/dist/utils/timestamp.d.ts.map +1 -1
  423. package/dist/utils/timestamp.js +5 -8
  424. package/dist/utils/timestamp.js.map +1 -1
  425. package/package.json +9 -10
  426. package/schemas/decision/templates/decision.md +3 -1
  427. package/schemas/decision/templates/index.md +2 -2
  428. package/schemas/issue/schema.yaml +11 -2
  429. package/schemas/issue/templates/spec.md +37 -3
  430. package/schemas/sdd/schema.yaml +24 -1
  431. package/schemas/sdd/templates/spec.md +37 -3
@@ -1,83 +1,146 @@
1
- /**
2
- * Update Command
3
- *
4
- * Refreshes Tospec skills for configured tools.
5
- */
1
+ /** Refreshes Tospec skills for configured tools. */
6
2
  import path from 'path';
7
3
  import * as fs from 'fs';
8
4
  import { createRequire } from 'module';
9
5
  import { FileSystemUtils } from '../utils/file-system.js';
10
- import { AI_TOOLS, TOSPEC_DIR_NAME } from './config.js';
11
- import { getToolVersionStatus, getSkillTemplates, writeSkillDir, getConfiguredTools, removeLegacySkillDirs, removeLegacyToolSkillLayout, writeToolCommands, } from './shared/index.js';
6
+ import { AI_TOOLS, TOSPEC_DIR_NAME, dependencyToolIds } from './config.js';
7
+ import { getToolVersionStatus, getSkillTemplates, writeSkillDir, getConfiguredTools, removeLegacySkillDirs, removeUnselectedSkillDirs, removeLegacyToolSkillLayout, writeToolCommands, findWorkflowReferenceGaps, describeWorkflowReferenceGaps, } from './shared/index.js';
12
8
  import { getGlobalConfig } from './global-config.js';
13
9
  import { runLegacyUserStateMigration } from './user-state-migration.js';
14
10
  import { getProfileWorkflows, ALL_WORKFLOWS } from './profiles.js';
15
11
  import { getAvailableTools } from './available-tools.js';
16
12
  import { copyDir } from '../utils/link.js';
13
+ import { planWorkflowRules, writeWorkflowRules } from './shared/rules-generation.js';
14
+ import { hasResidualCodexOutput, RESIDUAL_CODEX_NOTICE, RESIDUAL_CODEX_FIX } from './codex-residue.js';
15
+ import { emitSuccess } from '../commands/shared-output.js';
17
16
  const require = createRequire(import.meta.url);
18
17
  const { version: TOSPEC_VERSION } = require('../../package.json');
19
18
  const OLD_CORE_WORKFLOWS = ['propose', 'explore', 'apply', 'archive'];
20
- const WORKFLOW_TO_SKILL_DIR = Object.fromEntries(getSkillTemplates().map(({ workflowId, dirName }) => [workflowId, dirName]));
19
+ /** The `--json` null-shape; mirrors the success payload with `update` nulled. */
20
+ export const UPDATE_FAILURE_PAYLOAD = { update: null, root: null };
21
21
  export class UpdateCommand {
22
22
  force;
23
+ json;
23
24
  constructor(options = {}) {
24
25
  this.force = options.force ?? false;
26
+ this.json = options.json ?? false;
25
27
  }
28
+ /**
29
+ * Progress prose, suppressed under `--json`: the envelope contract allows only
30
+ * one document on stdout.
31
+ */
32
+ say(...args) {
33
+ if (!this.json)
34
+ console.log(...args);
35
+ }
36
+ /**
37
+ * Unlike `say`, a warning has no other carrier — dropping it under `--json`
38
+ * would leave an agent caller less informed than a human. One helper records
39
+ * and prints, so no call site does half of it.
40
+ */
41
+ warn(code, message, fix) {
42
+ this.jsonWarnings.push({ severity: 'warning', code, message, ...(fix ? { fix } : {}) });
43
+ if (!this.json) {
44
+ console.log(`Warning: ${message}`);
45
+ if (fix)
46
+ console.log(fix);
47
+ }
48
+ }
49
+ /** Emitted alongside the success payload; empty means the key is omitted. */
50
+ jsonWarnings = [];
26
51
  async execute(projectPath) {
27
- // Above every getGlobalConfig() below, so this run reads the migrated file
28
- // rather than the legacy fallback.
29
- await runLegacyUserStateMigration();
30
52
  const resolvedProjectPath = path.resolve(projectPath);
31
53
  const tospecPath = path.join(resolvedProjectPath, TOSPEC_DIR_NAME);
32
- // 1. Check tospec directory exists
33
54
  if (!await FileSystemUtils.directoryExists(tospecPath)) {
34
55
  throw new Error(`No Tospec directory found. Run 'tospec init' first.`);
35
56
  }
36
- // 3. Read global config for profile
57
+ // Plan for every configured agent, independent of the skill-version subset.
58
+ const configuredTools = getConfiguredTools(resolvedProjectPath);
59
+ const rulePlan = await planWorkflowRules(resolvedProjectPath, configuredTools);
60
+ // No migration or generated-file writes until every rule passed preflight.
61
+ await runLegacyUserStateMigration();
37
62
  const globalConfig = getGlobalConfig();
38
63
  const profile = globalConfig.profile ?? 'core';
39
64
  const profileWorkflows = getProfileWorkflows(profile, globalConfig.workflows);
40
65
  const desiredWorkflows = profileWorkflows.filter((workflow) => ALL_WORKFLOWS.includes(workflow));
41
- // 5. Find configured tools
42
- const configuredTools = getConfiguredTools(resolvedProjectPath);
66
+ // An empty selection is legitimate but more often a half-configured profile
67
+ // (`config profile custom` with nothing picked). Either way this run removes
68
+ // every skill dir, so name the setting and its reversal before the deletion.
69
+ if (desiredWorkflows.length === 0) {
70
+ this.warn('update_profile_selects_no_workflows', `Profile '${profile}' selects no workflows, so this update removes every tospec skill.`, 'Run "tospec config profile core" then "tospec update" to restore them.');
71
+ }
72
+ // A selection is a subset; the prose the templates carry is not. Each skill
73
+ // names its siblings unconditionally, so a partial install writes
74
+ // instructions pointing at a workflow that is not there. Reported, not
75
+ // patched: rewriting the generated text per profile would make the installed
76
+ // skills differ from the canonical templates.
77
+ const referenceGaps = findWorkflowReferenceGaps(desiredWorkflows);
78
+ if (referenceGaps.length > 0) {
79
+ const missing = [...new Set(referenceGaps.map((gap) => gap.missing))].sort();
80
+ this.warn('update_workflow_reference_missing', `Installed skills point at workflows this profile leaves out: ${describeWorkflowReferenceGaps(referenceGaps)}.`, `Add them with "tospec config set workflows" (missing: ${missing.join(', ')}), or expect agents to hit instructions they cannot follow.`);
81
+ }
82
+ if (profile !== 'custom' && globalConfig.workflows && globalConfig.workflows.length > 0) {
83
+ this.warn('update_workflows_ignored', `Profile '${profile}' installs every workflow, so the configured workflows list is not used.`, 'Run "tospec config profile custom" to apply it, or "tospec config unset workflows" to drop it.');
84
+ }
43
85
  if (configuredTools.length === 0) {
44
- console.log('No configured tools found.');
45
- console.log('Run "tospec init" to set up tools.');
86
+ this.say('No configured tools found.');
87
+ this.say('Run "tospec init" to set up tools.');
88
+ // A project whose only agent directory is `.codex` lands here, which is
89
+ // the case the notice exists for.
90
+ this.reportResidualCodexOutput(resolvedProjectPath);
91
+ // Not an error, but the empty tool list has to reach a JSON caller, who
92
+ // would otherwise read a bare success as "the update ran".
93
+ if (this.json) {
94
+ emitSuccess({
95
+ update: {
96
+ version: TOSPEC_VERSION,
97
+ tools: [],
98
+ failed: [],
99
+ workflows: desiredWorkflows,
100
+ removedSkillDirs: 0,
101
+ rules: [],
102
+ message: 'No configured tools found.',
103
+ },
104
+ ...(this.jsonWarnings.length ? { status: this.jsonWarnings } : {}),
105
+ }, { path: resolvedProjectPath, source: 'explicit' });
106
+ }
46
107
  return;
47
108
  }
48
- // 6. Check version status for all configured tools
49
- const toolStatuses = configuredTools.map((toolId) => {
50
- const status = getToolVersionStatus(resolvedProjectPath, toolId, TOSPEC_VERSION);
51
- return status;
52
- });
109
+ const toolStatuses = configuredTools.map((toolId) => getToolVersionStatus(resolvedProjectPath, toolId, TOSPEC_VERSION));
53
110
  const statusByTool = new Map(toolStatuses.map((status) => [status.toolId, status]));
54
- // 7. Smart update detection
55
111
  const toolsNeedingVersionUpdate = toolStatuses
56
112
  .filter((s) => s.needsUpdate)
57
113
  .map((s) => s.toolId);
58
114
  const toolsToUpdateSet = new Set(toolsNeedingVersionUpdate);
115
+ // Dependent targets are built from the canonical one, so a stale canonical
116
+ // dir makes all of them stale. Refreshing it alone would leave a dependent
117
+ // pinned at the old version.
118
+ if (dependencyToolIds().some((toolId) => toolsToUpdateSet.has(toolId))) {
119
+ for (const toolId of configuredTools)
120
+ toolsToUpdateSet.add(toolId);
121
+ }
59
122
  const toolsUpToDate = toolStatuses.filter((s) => !toolsToUpdateSet.has(s.toolId));
60
- if (!this.force && toolsToUpdateSet.size === 0) {
61
- // The generated version is current, but update is also the repair path
62
- // for canonical .agents content and broken/stale links. Continue through
63
- // generation instead of returning early.
64
- console.log(`All ${configuredTools.length} configured tool(s) are version-current; refreshing generated skills.`);
123
+ // Nothing changed version, so the run below is a refresh: the same writes,
124
+ // named for what they are so "version-current" and "Updated" do not appear
125
+ // in the same transcript.
126
+ const refreshOnly = !this.force && toolsToUpdateSet.size === 0;
127
+ if (refreshOnly) {
128
+ // The generated version is current, but update is also the repair path for
129
+ // canonical .agents content and stale copies, so generation still runs.
130
+ this.say(`All ${configuredTools.length} configured tool(s) are version-current; refreshing generated skills.`);
65
131
  this.detectNewTools(resolvedProjectPath, configuredTools);
66
132
  this.displayOldCoreCustomProfileNote(profile, globalConfig.workflows);
67
133
  }
68
- // 8. Display update plan
69
134
  if (this.force) {
70
- console.log(`Force updating ${configuredTools.length} tool(s): ${configuredTools.join(', ')}`);
135
+ this.say(`Force updating ${configuredTools.length} tool(s): ${configuredTools.join(', ')}`);
71
136
  }
72
137
  else if (toolsToUpdateSet.size > 0) {
73
138
  this.displayUpdatePlan([...toolsToUpdateSet], statusByTool, toolsUpToDate);
74
139
  }
75
- console.log();
76
- // 9. Determine what to generate
140
+ this.say();
77
141
  const skillTemplates = getSkillTemplates(desiredWorkflows);
78
- // 9b. Refresh canonical .agents/ content — the single source of truth
79
- // every tool links into (or is regenerated from, for non-linkable
80
- // formats). Always rewritten on update, same as init.
142
+ // The canonical content every tool is copied from, always rewritten, as in
143
+ // init.
81
144
  const agentsSkillsDir = path.join(resolvedProjectPath, '.agents', 'skills');
82
145
  for (const { template, dirName } of skillTemplates) {
83
146
  await writeSkillDir(agentsSkillsDir, dirName, template, TOSPEC_VERSION);
@@ -85,24 +148,14 @@ export class UpdateCommand {
85
148
  await removeLegacySkillDirs(agentsSkillsDir);
86
149
  await fs.promises.rm(path.join(resolvedProjectPath, '.agents', 'commands'), { recursive: true, force: true });
87
150
  await fs.promises.rm(path.join(resolvedProjectPath, '.cursor', 'commands'), { recursive: true, force: true });
88
- // Drop the old `.claude/commands/tospec` namespace (replaced by tosx);
89
- // `.claude/commands/tosx` is refreshed per-tool by writeToolCommands below.
151
+ // Drops the old `.claude/commands/tospec` namespace; `tosx` is refreshed
152
+ // per-tool by writeToolCommands below.
90
153
  await fs.promises.rm(path.join(resolvedProjectPath, '.claude', 'commands', 'tospec'), { recursive: true, force: true });
91
- // Deselected workflows (custom profile) must be cleaned up canonically too —
92
- // per-tool cleanup below only removes that tool's link/file, which would
93
- // otherwise leave a stale, unlinked-from entry behind in .agents/ forever.
94
- {
95
- const desiredSet = new Set(desiredWorkflows);
96
- for (const workflow of ALL_WORKFLOWS) {
97
- if (desiredSet.has(workflow))
98
- continue;
99
- const dirName = WORKFLOW_TO_SKILL_DIR[workflow];
100
- if (dirName) {
101
- await fs.promises.rm(path.join(agentsSkillsDir, dirName), { recursive: true, force: true });
102
- }
103
- }
104
- }
105
- // 10. Update tools (all if force, otherwise only those needing update)
154
+ // Deselected workflows are swept canonically too: the per-tool cleanup below
155
+ // reaches only that tool's copy, leaving a stale entry in .agents/. The same
156
+ // helper init uses, so a dir generated under a name WORKFLOW_DEFS no longer
157
+ // has goes as well — an ALL_WORKFLOWS difference cannot name it.
158
+ await removeUnselectedSkillDirs(agentsSkillsDir, desiredWorkflows);
106
159
  const toolsToUpdate = (this.force || toolsToUpdateSet.size === 0)
107
160
  ? configuredTools
108
161
  : [...toolsToUpdateSet];
@@ -113,76 +166,99 @@ export class UpdateCommand {
113
166
  const tool = AI_TOOLS.find((t) => t.value === toolId);
114
167
  if (!tool?.skillsDir)
115
168
  continue;
116
- console.log(`Updating ${tool.name}...`);
169
+ this.say(`${refreshOnly ? 'Refreshing' : 'Updating'} ${tool.name}...`);
117
170
  try {
118
171
  const skillsDir = path.join(resolvedProjectPath, tool.skillsDir, 'skills');
119
172
  await removeLegacyToolSkillLayout(path.join(resolvedProjectPath, tool.skillsDir));
120
173
  await removeLegacySkillDirs(skillsDir);
121
- // Copy each skill dir from .agents/skills/ into the tool's standard
122
- // `skills/` dir, flat and prefixed (`<tool>/skills/tospec-<workflow>/`)
123
- // since project-scope skills can't be nested.
124
- for (const { dirName } of skillTemplates) {
125
- const src = path.join(agentsSkillsDir, dirName);
126
- const dest = path.join(skillsDir, dirName);
127
- await copyDir(src, dest);
174
+ // Flat and prefixed (`<tool>/skills/tospec-<workflow>/`) since
175
+ // project-scope skills cannot be nested. copyDir clears its dest, which
176
+ // repairs a project still holding links from an earlier version — and
177
+ // is why copying .agents onto itself would delete the source.
178
+ if (path.resolve(skillsDir) !== path.resolve(agentsSkillsDir)) {
179
+ for (const { dirName } of skillTemplates) {
180
+ const src = path.join(agentsSkillsDir, dirName);
181
+ const dest = path.join(skillsDir, dirName);
182
+ await copyDir(src, dest);
183
+ }
128
184
  }
129
- removedDeselectedSkillCount += await this.removeUnselectedSkillDirs(skillsDir, desiredWorkflows);
130
- // Refresh slash commands for tools with an adapter (Claude Code):
185
+ removedDeselectedSkillCount += await removeUnselectedSkillDirs(skillsDir, desiredWorkflows);
186
+ // Tools with an adapter (Claude Code) get
131
187
  // `.claude/commands/tosx/<id>.md`, invocable as `/tosx:<id>`.
132
188
  await writeToolCommands(resolvedProjectPath, tool.value, desiredWorkflows);
133
- console.log(`Updated ${tool.name}`);
189
+ this.say(`${refreshOnly ? 'Refreshed' : 'Updated'} ${tool.name}`);
134
190
  updatedTools.push(tool.name);
135
191
  }
136
192
  catch (error) {
137
- console.log(`Failed to update ${tool.name}`);
193
+ this.say(`Failed to update ${tool.name}`);
138
194
  failedTools.push({
139
195
  name: tool.name,
140
196
  error: error instanceof Error ? error.message : String(error)
141
197
  });
142
198
  }
143
199
  }
144
- // 11. Summary
145
- console.log();
200
+ await writeWorkflowRules(rulePlan, { silent: this.json });
201
+ this.say();
146
202
  if (updatedTools.length > 0) {
147
- console.log(`Updated: ${updatedTools.join(', ')} (v${TOSPEC_VERSION})`);
203
+ this.say(`${refreshOnly ? 'Refreshed' : 'Updated'}: ${updatedTools.join(', ')} (v${TOSPEC_VERSION})`);
148
204
  }
149
205
  if (failedTools.length > 0) {
150
- console.log(`Failed: ${failedTools.map(f => `${f.name} (${f.error})`).join(', ')}`);
206
+ this.say(`Failed: ${failedTools.map(f => `${f.name} (${f.error})`).join(', ')}`);
151
207
  }
152
208
  if (removedDeselectedSkillCount > 0) {
153
- console.log(`Removed: ${removedDeselectedSkillCount} skill directories (deselected workflows)`);
209
+ this.say(`Removed: ${removedDeselectedSkillCount} skill directories (deselected workflows)`);
154
210
  }
155
- // 13. Detect new tool directories not currently configured
156
211
  this.detectNewTools(resolvedProjectPath, configuredTools);
157
- // 14. Display note about extra workflows not in profile
158
212
  this.displayOldCoreCustomProfileNote(profile, globalConfig.workflows);
159
- // 15. List affected tools
160
213
  if (updatedTools.length > 0) {
161
- const toolDisplayNames = updatedTools;
162
- console.log(`Tools: ${toolDisplayNames.join(', ')}`);
214
+ this.say(`Tools: ${updatedTools.join(', ')}`);
215
+ }
216
+ this.say();
217
+ this.say('Restart your agent for skills to take effect.');
218
+ this.reportResidualCodexOutput(resolvedProjectPath);
219
+ if (this.json) {
220
+ emitSuccess({
221
+ update: {
222
+ version: TOSPEC_VERSION,
223
+ tools: updatedTools,
224
+ failed: failedTools,
225
+ workflows: desiredWorkflows,
226
+ removedSkillDirs: removedDeselectedSkillCount,
227
+ rules: rulePlan.map((entry) => ({
228
+ tool: entry.toolId,
229
+ rule: entry.rule,
230
+ path: entry.destination,
231
+ action: entry.action,
232
+ ...(entry.retire ? { retiredPath: entry.retire } : {}),
233
+ })),
234
+ },
235
+ ...(this.jsonWarnings.length ? { status: this.jsonWarnings } : {}),
236
+ }, { path: resolvedProjectPath, source: 'explicit' });
163
237
  }
164
- console.log();
165
- console.log('Restart your agent for skills to take effect.');
166
238
  }
167
239
  /**
168
- * Display the update plan showing which tools need updating.
240
+ * Read-only, and called only once a run has otherwise finished: a run that
241
+ * dies in rule preflight must not leave advice about a state it never reached.
242
+ * Routed through `warn` so the notice reaches `status[]` under `--json`.
169
243
  */
244
+ reportResidualCodexOutput(projectPath) {
245
+ if (hasResidualCodexOutput(projectPath)) {
246
+ this.warn('codex_residue', RESIDUAL_CODEX_NOTICE, RESIDUAL_CODEX_FIX);
247
+ }
248
+ }
170
249
  displayUpdatePlan(toolsToUpdate, statusByTool, upToDate) {
171
250
  // Every id in toolsToUpdate came from a status with needsUpdate === true,
172
- // so there is no non-version reason to be in this list.
251
+ // so there is no non-version reason to be here.
173
252
  const updates = toolsToUpdate.map((toolId) => {
174
253
  const fromVersion = statusByTool.get(toolId)?.generatedByVersion ?? 'unknown';
175
254
  return `${toolId} (${fromVersion} → ${TOSPEC_VERSION})`;
176
255
  });
177
- console.log(`Updating ${toolsToUpdate.length} tool(s): ${updates.join(', ')}`);
256
+ this.say(`Updating ${toolsToUpdate.length} tool(s): ${updates.join(', ')}`);
178
257
  if (upToDate.length > 0) {
179
258
  const upToDateNames = upToDate.map((s) => s.toolId);
180
- console.log(`Already up to date: ${upToDateNames.join(', ')}`);
259
+ this.say(`Already up to date: ${upToDateNames.join(', ')}`);
181
260
  }
182
261
  }
183
- /**
184
- * Detects new tool directories that aren't currently configured and displays a hint.
185
- */
186
262
  detectNewTools(projectPath, configuredTools) {
187
263
  const availableTools = getAvailableTools(projectPath);
188
264
  const configuredSet = new Set(configuredTools);
@@ -192,13 +268,13 @@ export class UpdateCommand {
192
268
  const isSingleTool = newToolNames.length === 1;
193
269
  const toolNoun = isSingleTool ? 'tool' : 'tools';
194
270
  const pronoun = isSingleTool ? 'it' : 'them';
195
- console.log();
196
- console.log(`Detected new ${toolNoun}: ${newToolNames.join(', ')}. Run 'tospec init' to add ${pronoun}.`);
271
+ this.say();
272
+ this.say(`Detected new ${toolNoun}: ${newToolNames.join(', ')}. Run 'tospec init' to add ${pronoun}.`);
197
273
  }
198
274
  }
199
275
  /**
200
- * Suggest opting back into core when a custom profile still matches the old
201
- * four-workflow core set. Keep custom profiles user-owned; do not mutate them.
276
+ * Suggests opting back into core when a custom profile still matches the old
277
+ * four-workflow core set. Custom profiles stay user-owned, never mutated.
202
278
  */
203
279
  displayOldCoreCustomProfileNote(profile, workflows) {
204
280
  if (profile !== 'custom' || !workflows) {
@@ -210,35 +286,8 @@ export class UpdateCommand {
210
286
  if (!matchesOldCore) {
211
287
  return;
212
288
  }
213
- console.log('Note: The core profile now includes issue and update. Your custom profile is preserving the old core workflow set.');
214
- console.log('Run `tospec config profile core` and then `tospec update` to add them.');
215
- }
216
- /**
217
- * Removes skill directories for workflows that are no longer selected in the
218
- * active profile, from a tool's `skills/` dir (dirs named `tospec-<workflow>`).
219
- * Returns the number of directories removed.
220
- */
221
- async removeUnselectedSkillDirs(skillsDir, desiredWorkflows) {
222
- const desiredSet = new Set(desiredWorkflows);
223
- let removed = 0;
224
- for (const workflow of ALL_WORKFLOWS) {
225
- if (desiredSet.has(workflow))
226
- continue;
227
- const dirName = WORKFLOW_TO_SKILL_DIR[workflow];
228
- if (!dirName)
229
- continue;
230
- const skillDir = path.join(skillsDir, dirName);
231
- try {
232
- if (fs.existsSync(skillDir)) {
233
- await fs.promises.rm(skillDir, { recursive: true, force: true });
234
- removed++;
235
- }
236
- }
237
- catch {
238
- // Ignore errors
239
- }
240
- }
241
- return removed;
289
+ this.say('Note: The core profile now includes issue and update. Your custom profile is preserving the old core workflow set.');
290
+ this.say('Run `tospec config profile core` and then `tospec update` to add them.');
242
291
  }
243
292
  }
244
293
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,GAE9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAgB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AAEnF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAClE,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAS/E,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAA4B,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE5F,MAAM,OAAO,aAAa;IACP,KAAK,CAAU;IACf,IAAI,CAAU;IAE/B,YAAY,OAAO,GAAyB,EAAE;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACpC,CAAC;IAED;;;OAGG;IACK,GAAG,CAAC,GAAG,IAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,GAAI,IAAW,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACK,IAAI,CAAC,IAAY,EAAE,OAAe,EAAE,GAAY;QACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;YACnC,IAAI,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,6EAA6E;IAC5D,YAAY,GAAwB,EAAE,CAAC;IAExD,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;QAEnE,IAAI,CAAC,MAAM,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,4EAA4E;QAC5E,MAAM,eAAe,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;QAC/E,2EAA2E;QAC3E,MAAM,2BAA2B,EAAE,CAAC;QAEpC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,IAAI,MAAM,CAAC;QAC/C,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAA8C,EAAE,CACvG,aAAmC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxD,CAAC;QAEF,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CACP,qCAAqC,EACrC,YAAY,OAAO,oEAAoE,EACvF,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,kEAAkE;QAClE,uEAAuE;QACvE,6EAA6E;QAC7E,8CAA8C;QAC9C,MAAM,aAAa,GAAG,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;QAClE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7E,IAAI,CAAC,IAAI,CACP,mCAAmC,EACnC,gEAAgE,6BAA6B,CAAC,aAAa,CAAC,GAAG,EAC/G,yDAAyD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,6DAA6D,CACzI,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,KAAK,QAAQ,IAAI,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxF,IAAI,CAAC,IAAI,CACP,0BAA0B,EAC1B,YAAY,OAAO,0EAA0E,EAC7F,gGAAgG,CACjG,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC/C,wEAAwE;YACxE,kCAAkC;YAClC,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;YACpD,wEAAwE;YACxE,2DAA2D;YAC3D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,WAAW,CACT;oBACE,MAAM,EAAE;wBACN,OAAO,EAAE,cAAc;wBACvB,KAAK,EAAE,EAAE;wBACT,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,gBAAgB;wBAC3B,gBAAgB,EAAE,CAAC;wBACnB,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,4BAA4B;qBACtC;oBACD,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnE,EACD,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE,CAClD,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAClD,oBAAoB,CAAC,mBAAmB,EAAE,MAAM,EAAE,cAAc,CAAC,CAClE,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC,CAAC,CAAC;QAE7F,MAAM,yBAAyB,GAAG,YAAY;aAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,yBAAyB,CAAC,CAAC;QACpE,2EAA2E;QAC3E,2EAA2E;QAC3E,6BAA6B;QAC7B,IAAI,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACvE,KAAK,MAAM,MAAM,IAAI,eAAe;gBAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAElF,2EAA2E;QAC3E,2EAA2E;QAC3E,0BAA0B;QAC1B,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,CAAC;QAC/D,IAAI,WAAW,EAAE,CAAC;YAChB,2EAA2E;YAC3E,wEAAwE;YACxE,IAAI,CAAC,GAAG,CAAC,OAAO,eAAe,CAAC,MAAM,uEAAuE,CAAC,CAAC;YAC/G,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;YAC1D,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,kBAAkB,eAAe,CAAC,MAAM,aAAa,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,gBAAgB,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,CAAC;QAEX,MAAM,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAE3D,2EAA2E;QAC3E,QAAQ;QACR,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5E,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,cAAc,EAAE,CAAC;YACnD,MAAM,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9G,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9G,yEAAyE;QACzE,uCAAuC;QACvC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxH,6EAA6E;QAC7E,6EAA6E;QAC7E,4EAA4E;QAC5E,iEAAiE;QACjE,MAAM,yBAAyB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAEnE,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,CAAC;YAC/D,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,WAAW,GAA2C,EAAE,CAAC;QAC/D,IAAI,2BAA2B,GAAG,CAAC,CAAC;QAEpC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,EAAE,SAAS;gBAAE,SAAS;YAE/B,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;YAEvE,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAC3E,MAAM,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClF,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBAEvC,+DAA+D;gBAC/D,wEAAwE;gBACxE,sEAAsE;gBACtE,8DAA8D;gBAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;oBAC9D,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,cAAc,EAAE,CAAC;wBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;wBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBAC3C,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,2BAA2B,IAAI,MAAM,yBAAyB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBAE5F,0CAA0C;gBAC1C,8DAA8D;gBAC9D,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBAE3E,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1C,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,kBAAkB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,WAAW,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,2BAA2B,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,YAAY,2BAA2B,2CAA2C,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;QAC1D,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAEtE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,UAAU,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAE1D,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,WAAW,CACT;gBACE,MAAM,EAAE;oBACN,OAAO,EAAE,cAAc;oBACvB,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,gBAAgB;oBAC3B,gBAAgB,EAAE,2BAA2B;oBAC7C,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAC9B,IAAI,EAAE,KAAK,CAAC,MAAM;wBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,IAAI,EAAE,KAAK,CAAC,WAAW;wBACvB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACvD,CAAC,CAAC;iBACJ;gBACD,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnE,EACD,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,yBAAyB,CAAC,WAAmB;QACnD,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,aAAuB,EACvB,YAA4C,EAC5C,QAA6B;QAE7B,0EAA0E;QAC1E,gDAAgD;QAChD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,kBAAkB,IAAI,SAAS,CAAC;YAC9E,OAAO,GAAG,MAAM,KAAK,WAAW,MAAM,cAAc,GAAG,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,YAAY,aAAa,CAAC,MAAM,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,uBAAuB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,WAAmB,EAAE,eAAyB;QACnE,MAAM,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAE3E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CACN,gBAAgB,QAAQ,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,OAAO,GAAG,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,+BAA+B,CAAC,OAAgB,EAAE,SAA6B;QACrF,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,cAAc,GAClB,WAAW,CAAC,IAAI,KAAK,kBAAkB,CAAC,MAAM;YAC9C,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEpE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,oHAAoH,CAAC,CAAC;QAC/H,IAAI,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACrF,CAAC;CAEF"}
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Every path the migration acts on, resolved by the caller. Taking them rather
3
- * than reading the environment is what keeps this testable without a platform
4
- * whose legacy paths differ from its current ones — and it keeps the one policy
5
- * decision (does XDG_DATA_HOME name the live schema directory?) in one place.
2
+ * Every path the migration acts on, resolved by the caller rather than read from
3
+ * the environment: that keeps this testable on any platform and keeps the one
4
+ * policy decision (does XDG_DATA_HOME name the live schema directory?) in one
5
+ * place.
6
6
  *
7
7
  * `schemasDir: null` means "do not migrate schemas at all": XDG_DATA_HOME names
8
- * a directory the user chose and that is still honoured, so the platform-default
9
- * legacy directory it superseded is left where it is.
8
+ * a directory the user chose and that is still honoured, so the legacy default
9
+ * it superseded is left where it is.
10
10
  */
11
11
  export interface MigrationPaths {
12
12
  configDir: string;
@@ -16,8 +16,7 @@ export interface MigrationPaths {
16
16
  /**
17
17
  * How to move things. Swapped out in tests only: the copy fallback's
18
18
  * mid-flight failure — the one that can leave a half-written destination —
19
- * cannot be provoked portably through the filesystem, and it is the failure
20
- * whose handling matters most.
19
+ * cannot be provoked portably through the filesystem.
21
20
  */
22
21
  move?: MoveOperations;
23
22
  }
@@ -40,19 +39,18 @@ export interface MigrationResult {
40
39
  * Moves user-level state from its pre-`~/.config/tospec` locations exactly once.
41
40
  *
42
41
  * Config file and schema directory are judged independently, so an install that
43
- * already migrated one still migrates the other. Nothing is ever overwritten or
44
- * deleted: a destination that already exists means the legacy copy is left on
45
- * disk and reported, for the user to delete when they are ready.
42
+ * already migrated one still migrates the other. Nothing is overwritten or
43
+ * deleted: an occupied destination leaves the legacy copy on disk, reported for
44
+ * the user to delete.
46
45
  */
47
46
  export declare function migrateLegacyUserState(paths: MigrationPaths): Promise<MigrationResult>;
48
47
  /**
49
48
  * The migration as `init` and `update` call it: resolve today's and yesterday's
50
- * locations from the environment, run it, and report in one line per outcome.
51
- * Failures are warnings — a migration that cannot happen must never stop the
49
+ * locations from the environment, run it, and report one line per outcome.
50
+ * Failures are warnings — a migration that cannot happen must not stop the
52
51
  * command that triggered it.
53
52
  *
54
- * Needs no once-per-process guard: a second run finds the sources gone and does
55
- * nothing, which is also exactly what makes it safe to call from two commands.
53
+ * Needs no once-per-process guard: a second run finds the sources gone.
56
54
  */
57
55
  export declare function runLegacyUserStateMigration(): Promise<void>;
58
56
  //# sourceMappingURL=user-state-migration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-state-migration.d.ts","sourceRoot":"","sources":["../../src/core/user-state-migration.ts"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAID,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6EAA6E;IAC7E,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB5F;AA8DD;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBjE"}
1
+ {"version":3,"file":"user-state-migration.d.ts","sourceRoot":"","sources":["../../src/core/user-state-migration.ts"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAID,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6EAA6E;IAC7E,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB5F;AA2DD;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBjE"}
@@ -7,9 +7,9 @@ const REAL_MOVES = { file: moveFile, directory: moveDirectory };
7
7
  * Moves user-level state from its pre-`~/.config/tospec` locations exactly once.
8
8
  *
9
9
  * Config file and schema directory are judged independently, so an install that
10
- * already migrated one still migrates the other. Nothing is ever overwritten or
11
- * deleted: a destination that already exists means the legacy copy is left on
12
- * disk and reported, for the user to delete when they are ready.
10
+ * already migrated one still migrates the other. Nothing is overwritten or
11
+ * deleted: an occupied destination leaves the legacy copy on disk, reported for
12
+ * the user to delete.
13
13
  */
14
14
  export async function migrateLegacyUserState(paths) {
15
15
  const result = { moved: [], leftBehind: [], failed: [] };
@@ -21,14 +21,13 @@ export async function migrateLegacyUserState(paths) {
21
21
  return result;
22
22
  }
23
23
  async function migrateItem(result, source, destination, move) {
24
- // A missing source is the common case (nothing to migrate) and is also how a
25
- // concurrent run looks to whichever process loses the race — both mean
26
- // "already migrated", and neither is worth a word to the user.
24
+ // A missing source is the common case, and also how a concurrent run looks to
25
+ // whichever process loses the race. Both mean "already migrated".
27
26
  if (!(await exists(source)))
28
27
  return;
29
28
  // The same directory reached by two names: identical paths on macOS/Linux,
30
- // where config never moved, and the junction someone may have created by hand
31
- // as a workaround. Moving either into itself would destroy the data.
29
+ // where config never moved, or a junction someone created by hand. Moving
30
+ // either into itself would destroy the data.
32
31
  if (await sameRealPath(source, destination))
33
32
  return;
34
33
  if (await exists(destination)) {
@@ -36,10 +35,9 @@ async function migrateItem(result, source, destination, move) {
36
35
  return;
37
36
  }
38
37
  try {
39
- // Inside the try: creating the destination's parent is as capable of
40
- // failing as the move itself (a file sitting where the directory belongs,
41
- // a read-only tree), and a migration that cannot happen must never take
42
- // down the command that triggered it.
38
+ // Inside the try: creating the destination's parent can fail just as the
39
+ // move can, and a migration that cannot happen must not take down the
40
+ // command that triggered it.
43
41
  await fs.mkdir(path.dirname(destination), { recursive: true });
44
42
  await move(source, destination);
45
43
  result.moved.push(destination);
@@ -47,8 +45,7 @@ async function migrateItem(result, source, destination, move) {
47
45
  catch (error) {
48
46
  // The move helpers fall back to copy-then-remove, which is not atomic: a
49
47
  // copy that dies partway leaves a destination that later reads as "already
50
- // migrated" and would silently truncate the user's state. Remove it so the
51
- // only two outcomes stay "migrated" and "not migrated".
48
+ // migrated". Remove it so the only outcomes are "migrated" and "not".
52
49
  await fs.rm(destination, { recursive: true, force: true }).catch(() => { });
53
50
  result.failed.push({
54
51
  source,
@@ -76,17 +73,16 @@ async function sameRealPath(source, destination) {
76
73
  }
77
74
  /**
78
75
  * The migration as `init` and `update` call it: resolve today's and yesterday's
79
- * locations from the environment, run it, and report in one line per outcome.
80
- * Failures are warnings — a migration that cannot happen must never stop the
76
+ * locations from the environment, run it, and report one line per outcome.
77
+ * Failures are warnings — a migration that cannot happen must not stop the
81
78
  * command that triggered it.
82
79
  *
83
- * Needs no once-per-process guard: a second run finds the sources gone and does
84
- * nothing, which is also exactly what makes it safe to call from two commands.
80
+ * Needs no once-per-process guard: a second run finds the sources gone.
85
81
  */
86
82
  export async function runLegacyUserStateMigration() {
87
83
  const configDir = getGlobalConfigDir();
88
- // XDG_DATA_HOME still names a live schema override, so when it is set there is
89
- // no legacy schema directory to reclaim.
84
+ // XDG_DATA_HOME still names a live schema override, so when set there is no
85
+ // legacy schema directory to reclaim.
90
86
  const schemasDir = process.env.XDG_DATA_HOME ? null : path.join(configDir, 'schemas');
91
87
  const result = await migrateLegacyUserState({
92
88
  configDir,
@@ -1 +1 @@
1
- {"version":3,"file":"user-state-migration.js","sourceRoot":"","sources":["../../src/core/user-state-migration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-state-migration.js","sourceRoot":"","sources":["../../src/core/user-state-migration.ts"],"names":[],"mappings":"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"}