open-wiki-spec 0.1.0

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 (487) hide show
  1. package/README.md +294 -0
  2. package/bin/open-wiki-spec.js +2 -0
  3. package/dist/cli/commands/apply.d.ts +3 -0
  4. package/dist/cli/commands/apply.d.ts.map +1 -0
  5. package/dist/cli/commands/apply.js +60 -0
  6. package/dist/cli/commands/apply.js.map +1 -0
  7. package/dist/cli/commands/archive.d.ts +20 -0
  8. package/dist/cli/commands/archive.d.ts.map +1 -0
  9. package/dist/cli/commands/archive.js +87 -0
  10. package/dist/cli/commands/archive.js.map +1 -0
  11. package/dist/cli/commands/continue.d.ts +6 -0
  12. package/dist/cli/commands/continue.d.ts.map +1 -0
  13. package/dist/cli/commands/continue.js +35 -0
  14. package/dist/cli/commands/continue.js.map +1 -0
  15. package/dist/cli/commands/formatters.d.ts +9 -0
  16. package/dist/cli/commands/formatters.d.ts.map +1 -0
  17. package/dist/cli/commands/formatters.js +55 -0
  18. package/dist/cli/commands/formatters.js.map +1 -0
  19. package/dist/cli/commands/init.d.ts +6 -0
  20. package/dist/cli/commands/init.d.ts.map +1 -0
  21. package/dist/cli/commands/init.js +36 -0
  22. package/dist/cli/commands/init.js.map +1 -0
  23. package/dist/cli/commands/list.d.ts +28 -0
  24. package/dist/cli/commands/list.d.ts.map +1 -0
  25. package/dist/cli/commands/list.js +85 -0
  26. package/dist/cli/commands/list.js.map +1 -0
  27. package/dist/cli/commands/migrate.d.ts +6 -0
  28. package/dist/cli/commands/migrate.d.ts.map +1 -0
  29. package/dist/cli/commands/migrate.js +103 -0
  30. package/dist/cli/commands/migrate.js.map +1 -0
  31. package/dist/cli/commands/propose.d.ts +3 -0
  32. package/dist/cli/commands/propose.d.ts.map +1 -0
  33. package/dist/cli/commands/propose.js +64 -0
  34. package/dist/cli/commands/propose.js.map +1 -0
  35. package/dist/cli/commands/query.d.ts +3 -0
  36. package/dist/cli/commands/query.d.ts.map +1 -0
  37. package/dist/cli/commands/query.js +62 -0
  38. package/dist/cli/commands/query.js.map +1 -0
  39. package/dist/cli/commands/status.d.ts +30 -0
  40. package/dist/cli/commands/status.d.ts.map +1 -0
  41. package/dist/cli/commands/status.js +144 -0
  42. package/dist/cli/commands/status.js.map +1 -0
  43. package/dist/cli/commands/verify.d.ts +3 -0
  44. package/dist/cli/commands/verify.d.ts.map +1 -0
  45. package/dist/cli/commands/verify.js +38 -0
  46. package/dist/cli/commands/verify.js.map +1 -0
  47. package/dist/cli/index.d.ts +6 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +40 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/init/init-engine.d.ts +6 -0
  52. package/dist/cli/init/init-engine.d.ts.map +1 -0
  53. package/dist/cli/init/init-engine.js +107 -0
  54. package/dist/cli/init/init-engine.js.map +1 -0
  55. package/dist/cli/init/meta-files.d.ts +9 -0
  56. package/dist/cli/init/meta-files.d.ts.map +1 -0
  57. package/dist/cli/init/meta-files.js +156 -0
  58. package/dist/cli/init/meta-files.js.map +1 -0
  59. package/dist/cli/init/skill-generator.d.ts +11 -0
  60. package/dist/cli/init/skill-generator.d.ts.map +1 -0
  61. package/dist/cli/init/skill-generator.js +753 -0
  62. package/dist/cli/init/skill-generator.js.map +1 -0
  63. package/dist/cli/init/types.d.ts +27 -0
  64. package/dist/cli/init/types.d.ts.map +1 -0
  65. package/dist/cli/init/types.js +5 -0
  66. package/dist/cli/init/types.js.map +1 -0
  67. package/dist/cli/vault-discovery.d.ts +9 -0
  68. package/dist/cli/vault-discovery.d.ts.map +1 -0
  69. package/dist/cli/vault-discovery.js +31 -0
  70. package/dist/cli/vault-discovery.js.map +1 -0
  71. package/dist/core/config/index.d.ts +2 -0
  72. package/dist/core/config/index.d.ts.map +1 -0
  73. package/dist/core/config/index.js +3 -0
  74. package/dist/core/config/index.js.map +1 -0
  75. package/dist/core/index/build.d.ts +10 -0
  76. package/dist/core/index/build.d.ts.map +1 -0
  77. package/dist/core/index/build.js +190 -0
  78. package/dist/core/index/build.js.map +1 -0
  79. package/dist/core/index/index.d.ts +7 -0
  80. package/dist/core/index/index.d.ts.map +1 -0
  81. package/dist/core/index/index.js +7 -0
  82. package/dist/core/index/index.js.map +1 -0
  83. package/dist/core/index/resolve.d.ts +41 -0
  84. package/dist/core/index/resolve.d.ts.map +1 -0
  85. package/dist/core/index/resolve.js +63 -0
  86. package/dist/core/index/resolve.js.map +1 -0
  87. package/dist/core/index/reverse.d.ts +7 -0
  88. package/dist/core/index/reverse.d.ts.map +1 -0
  89. package/dist/core/index/reverse.js +24 -0
  90. package/dist/core/index/reverse.js.map +1 -0
  91. package/dist/core/index/scan.d.ts +16 -0
  92. package/dist/core/index/scan.d.ts.map +1 -0
  93. package/dist/core/index/scan.js +19 -0
  94. package/dist/core/index/scan.js.map +1 -0
  95. package/dist/core/index/schema-version.d.ts +5 -0
  96. package/dist/core/index/schema-version.d.ts.map +1 -0
  97. package/dist/core/index/schema-version.js +19 -0
  98. package/dist/core/index/schema-version.js.map +1 -0
  99. package/dist/core/index/validate.d.ts +14 -0
  100. package/dist/core/index/validate.d.ts.map +1 -0
  101. package/dist/core/index/validate.js +77 -0
  102. package/dist/core/index/validate.js.map +1 -0
  103. package/dist/core/migrate/change-converter.d.ts +18 -0
  104. package/dist/core/migrate/change-converter.d.ts.map +1 -0
  105. package/dist/core/migrate/change-converter.js +475 -0
  106. package/dist/core/migrate/change-converter.js.map +1 -0
  107. package/dist/core/migrate/index.d.ts +8 -0
  108. package/dist/core/migrate/index.d.ts.map +1 -0
  109. package/dist/core/migrate/index.js +7 -0
  110. package/dist/core/migrate/index.js.map +1 -0
  111. package/dist/core/migrate/migrate.d.ts +15 -0
  112. package/dist/core/migrate/migrate.d.ts.map +1 -0
  113. package/dist/core/migrate/migrate.js +149 -0
  114. package/dist/core/migrate/migrate.js.map +1 -0
  115. package/dist/core/migrate/scanner.d.ts +10 -0
  116. package/dist/core/migrate/scanner.d.ts.map +1 -0
  117. package/dist/core/migrate/scanner.js +188 -0
  118. package/dist/core/migrate/scanner.js.map +1 -0
  119. package/dist/core/migrate/source-converter.d.ts +6 -0
  120. package/dist/core/migrate/source-converter.d.ts.map +1 -0
  121. package/dist/core/migrate/source-converter.js +63 -0
  122. package/dist/core/migrate/source-converter.js.map +1 -0
  123. package/dist/core/migrate/spec-converter.d.ts +16 -0
  124. package/dist/core/migrate/spec-converter.d.ts.map +1 -0
  125. package/dist/core/migrate/spec-converter.js +157 -0
  126. package/dist/core/migrate/spec-converter.js.map +1 -0
  127. package/dist/core/migrate/system-inferrer.d.ts +23 -0
  128. package/dist/core/migrate/system-inferrer.d.ts.map +1 -0
  129. package/dist/core/migrate/system-inferrer.js +118 -0
  130. package/dist/core/migrate/system-inferrer.js.map +1 -0
  131. package/dist/core/migrate/types.d.ts +125 -0
  132. package/dist/core/migrate/types.d.ts.map +1 -0
  133. package/dist/core/migrate/types.js +5 -0
  134. package/dist/core/migrate/types.js.map +1 -0
  135. package/dist/core/parser/delta-summary-parser.d.ts +10 -0
  136. package/dist/core/parser/delta-summary-parser.d.ts.map +1 -0
  137. package/dist/core/parser/delta-summary-parser.js +101 -0
  138. package/dist/core/parser/delta-summary-parser.js.map +1 -0
  139. package/dist/core/parser/frontmatter-parser.d.ts +21 -0
  140. package/dist/core/parser/frontmatter-parser.d.ts.map +1 -0
  141. package/dist/core/parser/frontmatter-parser.js +87 -0
  142. package/dist/core/parser/frontmatter-parser.js.map +1 -0
  143. package/dist/core/parser/index.d.ts +9 -0
  144. package/dist/core/parser/index.d.ts.map +1 -0
  145. package/dist/core/parser/index.js +8 -0
  146. package/dist/core/parser/index.js.map +1 -0
  147. package/dist/core/parser/note-parser.d.ts +9 -0
  148. package/dist/core/parser/note-parser.d.ts.map +1 -0
  149. package/dist/core/parser/note-parser.js +106 -0
  150. package/dist/core/parser/note-parser.js.map +1 -0
  151. package/dist/core/parser/requirement-parser.d.ts +13 -0
  152. package/dist/core/parser/requirement-parser.d.ts.map +1 -0
  153. package/dist/core/parser/requirement-parser.js +127 -0
  154. package/dist/core/parser/requirement-parser.js.map +1 -0
  155. package/dist/core/parser/section-parser.d.ts +15 -0
  156. package/dist/core/parser/section-parser.d.ts.map +1 -0
  157. package/dist/core/parser/section-parser.js +90 -0
  158. package/dist/core/parser/section-parser.js.map +1 -0
  159. package/dist/core/parser/task-parser.d.ts +9 -0
  160. package/dist/core/parser/task-parser.d.ts.map +1 -0
  161. package/dist/core/parser/task-parser.js +35 -0
  162. package/dist/core/parser/task-parser.js.map +1 -0
  163. package/dist/core/parser/types.d.ts +94 -0
  164. package/dist/core/parser/types.d.ts.map +1 -0
  165. package/dist/core/parser/types.js +2 -0
  166. package/dist/core/parser/types.js.map +1 -0
  167. package/dist/core/parser/wikilink-parser.d.ts +19 -0
  168. package/dist/core/parser/wikilink-parser.d.ts.map +1 -0
  169. package/dist/core/parser/wikilink-parser.js +74 -0
  170. package/dist/core/parser/wikilink-parser.js.map +1 -0
  171. package/dist/core/retrieval/classify.d.ts +11 -0
  172. package/dist/core/retrieval/classify.d.ts.map +1 -0
  173. package/dist/core/retrieval/classify.js +92 -0
  174. package/dist/core/retrieval/classify.js.map +1 -0
  175. package/dist/core/retrieval/constants.d.ts +49 -0
  176. package/dist/core/retrieval/constants.d.ts.map +1 -0
  177. package/dist/core/retrieval/constants.js +29 -0
  178. package/dist/core/retrieval/constants.js.map +1 -0
  179. package/dist/core/retrieval/graph-expand.d.ts +7 -0
  180. package/dist/core/retrieval/graph-expand.d.ts.map +1 -0
  181. package/dist/core/retrieval/graph-expand.js +20 -0
  182. package/dist/core/retrieval/graph-expand.js.map +1 -0
  183. package/dist/core/retrieval/helpers.d.ts +15 -0
  184. package/dist/core/retrieval/helpers.d.ts.map +1 -0
  185. package/dist/core/retrieval/helpers.js +36 -0
  186. package/dist/core/retrieval/helpers.js.map +1 -0
  187. package/dist/core/retrieval/index.d.ts +11 -0
  188. package/dist/core/retrieval/index.d.ts.map +1 -0
  189. package/dist/core/retrieval/index.js +9 -0
  190. package/dist/core/retrieval/index.js.map +1 -0
  191. package/dist/core/retrieval/lexical.d.ts +8 -0
  192. package/dist/core/retrieval/lexical.d.ts.map +1 -0
  193. package/dist/core/retrieval/lexical.js +107 -0
  194. package/dist/core/retrieval/lexical.js.map +1 -0
  195. package/dist/core/retrieval/retrieve.d.ts +16 -0
  196. package/dist/core/retrieval/retrieve.d.ts.map +1 -0
  197. package/dist/core/retrieval/retrieve.js +58 -0
  198. package/dist/core/retrieval/retrieve.js.map +1 -0
  199. package/dist/core/retrieval/scoring.d.ts +14 -0
  200. package/dist/core/retrieval/scoring.d.ts.map +1 -0
  201. package/dist/core/retrieval/scoring.js +169 -0
  202. package/dist/core/retrieval/scoring.js.map +1 -0
  203. package/dist/core/retrieval/warnings.d.ts +16 -0
  204. package/dist/core/retrieval/warnings.d.ts.map +1 -0
  205. package/dist/core/retrieval/warnings.js +73 -0
  206. package/dist/core/retrieval/warnings.js.map +1 -0
  207. package/dist/core/schema/base.schema.d.ts +31 -0
  208. package/dist/core/schema/base.schema.d.ts.map +1 -0
  209. package/dist/core/schema/base.schema.js +32 -0
  210. package/dist/core/schema/base.schema.js.map +1 -0
  211. package/dist/core/schema/change.schema.d.ts +96 -0
  212. package/dist/core/schema/change.schema.d.ts.map +1 -0
  213. package/dist/core/schema/change.schema.js +64 -0
  214. package/dist/core/schema/change.schema.js.map +1 -0
  215. package/dist/core/schema/decision.schema.d.ts +33 -0
  216. package/dist/core/schema/decision.schema.d.ts.map +1 -0
  217. package/dist/core/schema/decision.schema.js +19 -0
  218. package/dist/core/schema/decision.schema.js.map +1 -0
  219. package/dist/core/schema/delta-summary.d.ts +57 -0
  220. package/dist/core/schema/delta-summary.d.ts.map +1 -0
  221. package/dist/core/schema/delta-summary.js +38 -0
  222. package/dist/core/schema/delta-summary.js.map +1 -0
  223. package/dist/core/schema/feature.schema.d.ts +40 -0
  224. package/dist/core/schema/feature.schema.d.ts.map +1 -0
  225. package/dist/core/schema/feature.schema.js +25 -0
  226. package/dist/core/schema/feature.schema.js.map +1 -0
  227. package/dist/core/schema/frontmatter.d.ts +207 -0
  228. package/dist/core/schema/frontmatter.d.ts.map +1 -0
  229. package/dist/core/schema/frontmatter.js +23 -0
  230. package/dist/core/schema/frontmatter.js.map +1 -0
  231. package/dist/core/schema/index.d.ts +235 -0
  232. package/dist/core/schema/index.d.ts.map +1 -0
  233. package/dist/core/schema/index.js +52 -0
  234. package/dist/core/schema/index.js.map +1 -0
  235. package/dist/core/schema/query.schema.d.ts +39 -0
  236. package/dist/core/schema/query.schema.d.ts.map +1 -0
  237. package/dist/core/schema/query.schema.js +20 -0
  238. package/dist/core/schema/query.schema.js.map +1 -0
  239. package/dist/core/schema/requirement.d.ts +69 -0
  240. package/dist/core/schema/requirement.d.ts.map +1 -0
  241. package/dist/core/schema/requirement.js +35 -0
  242. package/dist/core/schema/requirement.js.map +1 -0
  243. package/dist/core/schema/source.schema.d.ts +33 -0
  244. package/dist/core/schema/source.schema.d.ts.map +1 -0
  245. package/dist/core/schema/source.schema.js +24 -0
  246. package/dist/core/schema/source.schema.js.map +1 -0
  247. package/dist/core/schema/system.schema.d.ts +27 -0
  248. package/dist/core/schema/system.schema.d.ts.map +1 -0
  249. package/dist/core/schema/system.schema.js +17 -0
  250. package/dist/core/schema/system.schema.js.map +1 -0
  251. package/dist/core/schema/templates.d.ts +14 -0
  252. package/dist/core/schema/templates.d.ts.map +1 -0
  253. package/dist/core/schema/templates.js +220 -0
  254. package/dist/core/schema/templates.js.map +1 -0
  255. package/dist/core/schema/validation-constants.d.ts +5 -0
  256. package/dist/core/schema/validation-constants.d.ts.map +1 -0
  257. package/dist/core/schema/validation-constants.js +5 -0
  258. package/dist/core/schema/validation-constants.js.map +1 -0
  259. package/dist/core/sequencing/analyze.d.ts +13 -0
  260. package/dist/core/sequencing/analyze.d.ts.map +1 -0
  261. package/dist/core/sequencing/analyze.js +107 -0
  262. package/dist/core/sequencing/analyze.js.map +1 -0
  263. package/dist/core/sequencing/index.d.ts +8 -0
  264. package/dist/core/sequencing/index.d.ts.map +1 -0
  265. package/dist/core/sequencing/index.js +8 -0
  266. package/dist/core/sequencing/index.js.map +1 -0
  267. package/dist/core/sequencing/ordering.d.ts +11 -0
  268. package/dist/core/sequencing/ordering.d.ts.map +1 -0
  269. package/dist/core/sequencing/ordering.js +148 -0
  270. package/dist/core/sequencing/ordering.js.map +1 -0
  271. package/dist/core/sequencing/out-of-order-detector.d.ts +9 -0
  272. package/dist/core/sequencing/out-of-order-detector.d.ts.map +1 -0
  273. package/dist/core/sequencing/out-of-order-detector.js +42 -0
  274. package/dist/core/sequencing/out-of-order-detector.js.map +1 -0
  275. package/dist/core/sequencing/priority-queue.d.ts +18 -0
  276. package/dist/core/sequencing/priority-queue.d.ts.map +1 -0
  277. package/dist/core/sequencing/priority-queue.js +31 -0
  278. package/dist/core/sequencing/priority-queue.js.map +1 -0
  279. package/dist/core/sequencing/requirement-conflict-detector.d.ts +9 -0
  280. package/dist/core/sequencing/requirement-conflict-detector.d.ts.map +1 -0
  281. package/dist/core/sequencing/requirement-conflict-detector.js +90 -0
  282. package/dist/core/sequencing/requirement-conflict-detector.js.map +1 -0
  283. package/dist/core/sequencing/stale-detector.d.ts +9 -0
  284. package/dist/core/sequencing/stale-detector.d.ts.map +1 -0
  285. package/dist/core/sequencing/stale-detector.js +49 -0
  286. package/dist/core/sequencing/stale-detector.js.map +1 -0
  287. package/dist/core/sequencing/touches-analyzer.d.ts +8 -0
  288. package/dist/core/sequencing/touches-analyzer.d.ts.map +1 -0
  289. package/dist/core/sequencing/touches-analyzer.js +91 -0
  290. package/dist/core/sequencing/touches-analyzer.js.map +1 -0
  291. package/dist/core/vault/index.d.ts +2 -0
  292. package/dist/core/vault/index.d.ts.map +1 -0
  293. package/dist/core/vault/index.js +3 -0
  294. package/dist/core/vault/index.js.map +1 -0
  295. package/dist/core/workflow/apply/apply.d.ts +17 -0
  296. package/dist/core/workflow/apply/apply.d.ts.map +1 -0
  297. package/dist/core/workflow/apply/apply.js +302 -0
  298. package/dist/core/workflow/apply/apply.js.map +1 -0
  299. package/dist/core/workflow/apply/delta-parser.d.ts +11 -0
  300. package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -0
  301. package/dist/core/workflow/apply/delta-parser.js +164 -0
  302. package/dist/core/workflow/apply/delta-parser.js.map +1 -0
  303. package/dist/core/workflow/apply/feature-updater.d.ts +12 -0
  304. package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -0
  305. package/dist/core/workflow/apply/feature-updater.js +75 -0
  306. package/dist/core/workflow/apply/feature-updater.js.map +1 -0
  307. package/dist/core/workflow/apply/index.d.ts +7 -0
  308. package/dist/core/workflow/apply/index.d.ts.map +1 -0
  309. package/dist/core/workflow/apply/index.js +6 -0
  310. package/dist/core/workflow/apply/index.js.map +1 -0
  311. package/dist/core/workflow/apply/stale-checker.d.ts +17 -0
  312. package/dist/core/workflow/apply/stale-checker.d.ts.map +1 -0
  313. package/dist/core/workflow/apply/stale-checker.js +99 -0
  314. package/dist/core/workflow/apply/stale-checker.js.map +1 -0
  315. package/dist/core/workflow/apply/types.d.ts +112 -0
  316. package/dist/core/workflow/apply/types.d.ts.map +1 -0
  317. package/dist/core/workflow/apply/types.js +2 -0
  318. package/dist/core/workflow/apply/types.js.map +1 -0
  319. package/dist/core/workflow/apply/verify-apply.d.ts +16 -0
  320. package/dist/core/workflow/apply/verify-apply.d.ts.map +1 -0
  321. package/dist/core/workflow/apply/verify-apply.js +81 -0
  322. package/dist/core/workflow/apply/verify-apply.js.map +1 -0
  323. package/dist/core/workflow/continue/continue.d.ts +17 -0
  324. package/dist/core/workflow/continue/continue.d.ts.map +1 -0
  325. package/dist/core/workflow/continue/continue.js +213 -0
  326. package/dist/core/workflow/continue/continue.js.map +1 -0
  327. package/dist/core/workflow/continue/decision-promoter.d.ts +20 -0
  328. package/dist/core/workflow/continue/decision-promoter.d.ts.map +1 -0
  329. package/dist/core/workflow/continue/decision-promoter.js +36 -0
  330. package/dist/core/workflow/continue/decision-promoter.js.map +1 -0
  331. package/dist/core/workflow/continue/index.d.ts +6 -0
  332. package/dist/core/workflow/continue/index.d.ts.map +1 -0
  333. package/dist/core/workflow/continue/index.js +5 -0
  334. package/dist/core/workflow/continue/index.js.map +1 -0
  335. package/dist/core/workflow/continue/next-action.d.ts +13 -0
  336. package/dist/core/workflow/continue/next-action.d.ts.map +1 -0
  337. package/dist/core/workflow/continue/next-action.js +129 -0
  338. package/dist/core/workflow/continue/next-action.js.map +1 -0
  339. package/dist/core/workflow/continue/section-checker.d.ts +18 -0
  340. package/dist/core/workflow/continue/section-checker.d.ts.map +1 -0
  341. package/dist/core/workflow/continue/section-checker.js +114 -0
  342. package/dist/core/workflow/continue/section-checker.js.map +1 -0
  343. package/dist/core/workflow/continue/types.d.ts +113 -0
  344. package/dist/core/workflow/continue/types.d.ts.map +1 -0
  345. package/dist/core/workflow/continue/types.js +2 -0
  346. package/dist/core/workflow/continue/types.js.map +1 -0
  347. package/dist/core/workflow/index.d.ts +11 -0
  348. package/dist/core/workflow/index.d.ts.map +1 -0
  349. package/dist/core/workflow/index.js +12 -0
  350. package/dist/core/workflow/index.js.map +1 -0
  351. package/dist/core/workflow/propose/index.d.ts +6 -0
  352. package/dist/core/workflow/propose/index.d.ts.map +1 -0
  353. package/dist/core/workflow/propose/index.js +5 -0
  354. package/dist/core/workflow/propose/index.js.map +1 -0
  355. package/dist/core/workflow/propose/note-creator.d.ts +35 -0
  356. package/dist/core/workflow/propose/note-creator.d.ts.map +1 -0
  357. package/dist/core/workflow/propose/note-creator.js +178 -0
  358. package/dist/core/workflow/propose/note-creator.js.map +1 -0
  359. package/dist/core/workflow/propose/prerequisites.d.ts +17 -0
  360. package/dist/core/workflow/propose/prerequisites.d.ts.map +1 -0
  361. package/dist/core/workflow/propose/prerequisites.js +78 -0
  362. package/dist/core/workflow/propose/prerequisites.js.map +1 -0
  363. package/dist/core/workflow/propose/propose.d.ts +13 -0
  364. package/dist/core/workflow/propose/propose.d.ts.map +1 -0
  365. package/dist/core/workflow/propose/propose.js +204 -0
  366. package/dist/core/workflow/propose/propose.js.map +1 -0
  367. package/dist/core/workflow/propose/query-normalizer.d.ts +7 -0
  368. package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -0
  369. package/dist/core/workflow/propose/query-normalizer.js +77 -0
  370. package/dist/core/workflow/propose/query-normalizer.js.map +1 -0
  371. package/dist/core/workflow/propose/types.d.ts +71 -0
  372. package/dist/core/workflow/propose/types.d.ts.map +1 -0
  373. package/dist/core/workflow/propose/types.js +2 -0
  374. package/dist/core/workflow/propose/types.js.map +1 -0
  375. package/dist/core/workflow/query/index.d.ts +6 -0
  376. package/dist/core/workflow/query/index.d.ts.map +1 -0
  377. package/dist/core/workflow/query/index.js +5 -0
  378. package/dist/core/workflow/query/index.js.map +1 -0
  379. package/dist/core/workflow/query/noteworthiness.d.ts +14 -0
  380. package/dist/core/workflow/query/noteworthiness.d.ts.map +1 -0
  381. package/dist/core/workflow/query/noteworthiness.js +48 -0
  382. package/dist/core/workflow/query/noteworthiness.js.map +1 -0
  383. package/dist/core/workflow/query/query-note-creator.d.ts +13 -0
  384. package/dist/core/workflow/query/query-note-creator.d.ts.map +1 -0
  385. package/dist/core/workflow/query/query-note-creator.js +168 -0
  386. package/dist/core/workflow/query/query-note-creator.js.map +1 -0
  387. package/dist/core/workflow/query/query-search.d.ts +19 -0
  388. package/dist/core/workflow/query/query-search.d.ts.map +1 -0
  389. package/dist/core/workflow/query/query-search.js +252 -0
  390. package/dist/core/workflow/query/query-search.js.map +1 -0
  391. package/dist/core/workflow/query/query.d.ts +18 -0
  392. package/dist/core/workflow/query/query.d.ts.map +1 -0
  393. package/dist/core/workflow/query/query.js +29 -0
  394. package/dist/core/workflow/query/query.js.map +1 -0
  395. package/dist/core/workflow/query/types.d.ts +67 -0
  396. package/dist/core/workflow/query/types.d.ts.map +1 -0
  397. package/dist/core/workflow/query/types.js +2 -0
  398. package/dist/core/workflow/query/types.js.map +1 -0
  399. package/dist/core/workflow/verify/coherence.d.ts +30 -0
  400. package/dist/core/workflow/verify/coherence.d.ts.map +1 -0
  401. package/dist/core/workflow/verify/coherence.js +206 -0
  402. package/dist/core/workflow/verify/coherence.js.map +1 -0
  403. package/dist/core/workflow/verify/completeness.d.ts +24 -0
  404. package/dist/core/workflow/verify/completeness.d.ts.map +1 -0
  405. package/dist/core/workflow/verify/completeness.js +172 -0
  406. package/dist/core/workflow/verify/completeness.js.map +1 -0
  407. package/dist/core/workflow/verify/correctness.d.ts +38 -0
  408. package/dist/core/workflow/verify/correctness.d.ts.map +1 -0
  409. package/dist/core/workflow/verify/correctness.js +352 -0
  410. package/dist/core/workflow/verify/correctness.js.map +1 -0
  411. package/dist/core/workflow/verify/index.d.ts +7 -0
  412. package/dist/core/workflow/verify/index.d.ts.map +1 -0
  413. package/dist/core/workflow/verify/index.js +6 -0
  414. package/dist/core/workflow/verify/index.js.map +1 -0
  415. package/dist/core/workflow/verify/vault-integrity.d.ts +45 -0
  416. package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -0
  417. package/dist/core/workflow/verify/vault-integrity.js +141 -0
  418. package/dist/core/workflow/verify/vault-integrity.js.map +1 -0
  419. package/dist/core/workflow/verify/verify.d.ts +23 -0
  420. package/dist/core/workflow/verify/verify.d.ts.map +1 -0
  421. package/dist/core/workflow/verify/verify.js +122 -0
  422. package/dist/core/workflow/verify/verify.js.map +1 -0
  423. package/dist/index.d.ts +10 -0
  424. package/dist/index.d.ts.map +1 -0
  425. package/dist/index.js +2 -0
  426. package/dist/index.js.map +1 -0
  427. package/dist/types/delta.d.ts +17 -0
  428. package/dist/types/delta.d.ts.map +1 -0
  429. package/dist/types/delta.js +2 -0
  430. package/dist/types/delta.js.map +1 -0
  431. package/dist/types/frontmatter.d.ts +51 -0
  432. package/dist/types/frontmatter.d.ts.map +1 -0
  433. package/dist/types/frontmatter.js +2 -0
  434. package/dist/types/frontmatter.js.map +1 -0
  435. package/dist/types/index-record.d.ts +46 -0
  436. package/dist/types/index-record.d.ts.map +1 -0
  437. package/dist/types/index-record.js +2 -0
  438. package/dist/types/index-record.js.map +1 -0
  439. package/dist/types/index.d.ts +11 -0
  440. package/dist/types/index.d.ts.map +1 -0
  441. package/dist/types/index.js +2 -0
  442. package/dist/types/index.js.map +1 -0
  443. package/dist/types/next-action.d.ts +10 -0
  444. package/dist/types/next-action.d.ts.map +1 -0
  445. package/dist/types/next-action.js +2 -0
  446. package/dist/types/next-action.js.map +1 -0
  447. package/dist/types/notes.d.ts +9 -0
  448. package/dist/types/notes.d.ts.map +1 -0
  449. package/dist/types/notes.js +2 -0
  450. package/dist/types/notes.js.map +1 -0
  451. package/dist/types/requirement.d.ts +19 -0
  452. package/dist/types/requirement.d.ts.map +1 -0
  453. package/dist/types/requirement.js +2 -0
  454. package/dist/types/requirement.js.map +1 -0
  455. package/dist/types/retrieval.d.ts +32 -0
  456. package/dist/types/retrieval.d.ts.map +1 -0
  457. package/dist/types/retrieval.js +2 -0
  458. package/dist/types/retrieval.js.map +1 -0
  459. package/dist/types/sequencing.d.ts +83 -0
  460. package/dist/types/sequencing.d.ts.map +1 -0
  461. package/dist/types/sequencing.js +2 -0
  462. package/dist/types/sequencing.js.map +1 -0
  463. package/dist/types/task.d.ts +7 -0
  464. package/dist/types/task.d.ts.map +1 -0
  465. package/dist/types/task.js +2 -0
  466. package/dist/types/task.js.map +1 -0
  467. package/dist/types/verify.d.ts +23 -0
  468. package/dist/types/verify.d.ts.map +1 -0
  469. package/dist/types/verify.js +2 -0
  470. package/dist/types/verify.js.map +1 -0
  471. package/dist/utils/hash.d.ts +6 -0
  472. package/dist/utils/hash.d.ts.map +1 -0
  473. package/dist/utils/hash.js +9 -0
  474. package/dist/utils/hash.js.map +1 -0
  475. package/dist/utils/id-generator.d.ts +17 -0
  476. package/dist/utils/id-generator.d.ts.map +1 -0
  477. package/dist/utils/id-generator.js +24 -0
  478. package/dist/utils/id-generator.js.map +1 -0
  479. package/dist/utils/index.d.ts +4 -0
  480. package/dist/utils/index.d.ts.map +1 -0
  481. package/dist/utils/index.js +4 -0
  482. package/dist/utils/index.js.map +1 -0
  483. package/dist/utils/normalize.d.ts +11 -0
  484. package/dist/utils/normalize.d.ts.map +1 -0
  485. package/dist/utils/normalize.js +15 -0
  486. package/dist/utils/normalize.js.map +1 -0
  487. package/package.json +61 -0
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Migration orchestrator: coordinates scanning, conversion, and writing
3
+ * to migrate an OpenSpec project to open-wiki-spec format.
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import { scanOpenSpec, findOpenSpecDir } from './scanner.js';
8
+ import { convertAllSpecs } from './spec-converter.js';
9
+ import { convertAllChanges } from './change-converter.js';
10
+ import { convertConfigToSource } from './source-converter.js';
11
+ import { inferSystems, convertSystems, buildSystemRefMap, buildFeatureRefMap, } from './system-inferrer.js';
12
+ import { initVault } from '../../cli/init/init-engine.js';
13
+ /**
14
+ * Plan a migration from OpenSpec to open-wiki-spec.
15
+ * Does not write any files - just produces a plan.
16
+ */
17
+ export function planMigration(options) {
18
+ const projectPath = path.resolve(options.projectPath ?? '.');
19
+ const openspecPath = options.openspecDir
20
+ ? path.resolve(options.openspecDir)
21
+ : findOpenSpecDir(projectPath) ?? '';
22
+ if (!openspecPath || !fs.existsSync(openspecPath)) {
23
+ throw new Error(`OpenSpec directory not found. Specify with --openspec-dir or ensure openspec/ exists in ${projectPath}`);
24
+ }
25
+ const wikiPath = path.join(projectPath, 'wiki');
26
+ // Step 1: Scan
27
+ const scan = scanOpenSpec(openspecPath);
28
+ const scanStep = {
29
+ name: 'Scan OpenSpec',
30
+ description: `Found ${scan.specs.length} specs, ${scan.activeChanges.length} active changes, ${scan.archivedChanges.length} archived changes`,
31
+ outputs: [],
32
+ warnings: [...scan.warnings],
33
+ };
34
+ // Step 2: Generate source note from config context
35
+ const sourceOutputs = [];
36
+ if (scan.config?.context) {
37
+ sourceOutputs.push(convertConfigToSource(scan.config.context, scan.config));
38
+ }
39
+ const sourceStep = {
40
+ name: 'Generate Source Notes',
41
+ description: sourceOutputs.length > 0
42
+ ? `Generated ${sourceOutputs.length} source note from config.yaml context`
43
+ : 'No config context found, skipping source generation',
44
+ outputs: sourceOutputs,
45
+ warnings: [],
46
+ };
47
+ // Step 3: Infer systems
48
+ const systems = inferSystems(scan.specs);
49
+ const systemRefMap = buildSystemRefMap(systems);
50
+ const systemOutputs = convertSystems(systems);
51
+ const systemStep = {
52
+ name: 'Infer Systems',
53
+ description: `Inferred ${systems.length} systems from capability domains`,
54
+ outputs: systemOutputs,
55
+ warnings: [],
56
+ };
57
+ // Step 4: Convert specs to features
58
+ const featureRefMap = buildFeatureRefMap(scan.specs.map(s => s.capability));
59
+ const { results: featureOutputs, warnings: featureWarnings } = convertAllSpecs(scan.specs, systemRefMap);
60
+ const featureStep = {
61
+ name: 'Convert Specs to Features',
62
+ description: `Converted ${featureOutputs.length} specs to Feature notes`,
63
+ outputs: featureOutputs,
64
+ warnings: featureWarnings,
65
+ };
66
+ // Step 5: Convert active changes
67
+ const { results: activeChangeOutputs, warnings: activeChangeWarnings } = convertAllChanges(scan.activeChanges, featureRefMap, systemRefMap);
68
+ const activeChangeStep = {
69
+ name: 'Convert Active Changes',
70
+ description: `Converted ${scan.activeChanges.length} active changes`,
71
+ outputs: activeChangeOutputs,
72
+ warnings: activeChangeWarnings,
73
+ };
74
+ // Step 6: Convert archived changes (optional)
75
+ const steps = [scanStep, sourceStep, systemStep, featureStep, activeChangeStep];
76
+ if (!options.skipArchive) {
77
+ const { results: archiveOutputs, warnings: archiveWarnings } = convertAllChanges(scan.archivedChanges, featureRefMap, systemRefMap);
78
+ const archiveStep = {
79
+ name: 'Convert Archived Changes',
80
+ description: `Converted ${scan.archivedChanges.length} archived changes`,
81
+ outputs: archiveOutputs,
82
+ warnings: archiveWarnings,
83
+ };
84
+ steps.push(archiveStep);
85
+ }
86
+ // Count totals
87
+ const totalFiles = steps.reduce((sum, s) => sum + s.outputs.length, 0);
88
+ const totalWarnings = steps.reduce((sum, s) => sum + s.warnings.length, 0);
89
+ return {
90
+ openspecPath,
91
+ wikiPath,
92
+ steps,
93
+ totalFiles,
94
+ totalWarnings,
95
+ };
96
+ }
97
+ /**
98
+ * Execute a migration plan: init vault structure and write all files.
99
+ */
100
+ export async function executeMigration(plan, dryRun = false) {
101
+ const filesWritten = [];
102
+ const filesSkipped = [];
103
+ const errors = [];
104
+ if (!dryRun) {
105
+ // Initialize vault structure (creates directories and meta files)
106
+ try {
107
+ await initVault({ path: path.dirname(plan.wikiPath) });
108
+ }
109
+ catch (err) {
110
+ errors.push(`Failed to init vault: ${err.message}`);
111
+ }
112
+ // Write all outputs
113
+ for (const step of plan.steps) {
114
+ for (const output of step.outputs) {
115
+ const fullPath = path.join(path.dirname(plan.wikiPath), output.targetPath);
116
+ try {
117
+ if (fs.existsSync(fullPath)) {
118
+ filesSkipped.push(output.targetPath);
119
+ continue;
120
+ }
121
+ const dir = path.dirname(fullPath);
122
+ if (!fs.existsSync(dir)) {
123
+ fs.mkdirSync(dir, { recursive: true });
124
+ }
125
+ fs.writeFileSync(fullPath, output.content, 'utf-8');
126
+ filesWritten.push(output.targetPath);
127
+ }
128
+ catch (err) {
129
+ errors.push(`Failed to write ${output.targetPath}: ${err.message}`);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ return {
135
+ plan,
136
+ filesWritten,
137
+ filesSkipped,
138
+ dryRun,
139
+ errors,
140
+ };
141
+ }
142
+ /**
143
+ * Run the full migration: plan and execute.
144
+ */
145
+ export async function migrate(options) {
146
+ const plan = planMigration(options);
147
+ return executeMigration(plan, options.dryRun);
148
+ }
149
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/core/migrate/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ScanResult } from './types.js';
2
+ /**
3
+ * Scan an OpenSpec directory and return all discovered artifacts.
4
+ */
5
+ export declare function scanOpenSpec(openspecPath: string): ScanResult;
6
+ /**
7
+ * Auto-detect the openspec/ directory from a project root.
8
+ */
9
+ export declare function findOpenSpecDir(projectPath: string): string | null;
10
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/scanner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,CAmB7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMlE"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Scanner for OpenSpec directory structure.
3
+ * Reads and catalogs all specs, changes, and config from an openspec/ directory.
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import { parse as parseYaml } from 'yaml';
8
+ /**
9
+ * Scan an OpenSpec directory and return all discovered artifacts.
10
+ */
11
+ export function scanOpenSpec(openspecPath) {
12
+ const warnings = [];
13
+ if (!fs.existsSync(openspecPath)) {
14
+ throw new Error(`OpenSpec directory not found: ${openspecPath}`);
15
+ }
16
+ const config = readConfig(openspecPath, warnings);
17
+ const specs = scanSpecs(openspecPath, warnings);
18
+ const { activeChanges, archivedChanges } = scanChanges(openspecPath, warnings);
19
+ return {
20
+ openspecPath,
21
+ config,
22
+ specs,
23
+ activeChanges,
24
+ archivedChanges,
25
+ warnings,
26
+ };
27
+ }
28
+ /**
29
+ * Auto-detect the openspec/ directory from a project root.
30
+ */
31
+ export function findOpenSpecDir(projectPath) {
32
+ const candidate = path.join(projectPath, 'openspec');
33
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
34
+ return candidate;
35
+ }
36
+ return null;
37
+ }
38
+ function readConfig(openspecPath, warnings) {
39
+ const configPath = path.join(openspecPath, 'config.yaml');
40
+ if (!fs.existsSync(configPath)) {
41
+ warnings.push('No config.yaml found in OpenSpec directory');
42
+ return null;
43
+ }
44
+ try {
45
+ const raw = fs.readFileSync(configPath, 'utf-8');
46
+ const data = parseYaml(raw);
47
+ if (typeof data !== 'object' || data === null || Array.isArray(data)) {
48
+ warnings.push('config.yaml does not contain a valid YAML object');
49
+ return null;
50
+ }
51
+ return data;
52
+ }
53
+ catch (err) {
54
+ warnings.push(`Failed to parse config.yaml: ${err.message}`);
55
+ return null;
56
+ }
57
+ }
58
+ function scanSpecs(openspecPath, warnings) {
59
+ const specsDir = path.join(openspecPath, 'specs');
60
+ if (!fs.existsSync(specsDir)) {
61
+ warnings.push('No specs/ directory found');
62
+ return [];
63
+ }
64
+ const specs = [];
65
+ const entries = fs.readdirSync(specsDir, { withFileTypes: true });
66
+ for (const entry of entries) {
67
+ if (!entry.isDirectory())
68
+ continue;
69
+ const specFile = path.join(specsDir, entry.name, 'spec.md');
70
+ if (!fs.existsSync(specFile)) {
71
+ warnings.push(`Spec directory ${entry.name}/ has no spec.md`);
72
+ continue;
73
+ }
74
+ try {
75
+ const content = fs.readFileSync(specFile, 'utf-8');
76
+ specs.push({
77
+ capability: entry.name,
78
+ specPath: path.join('specs', entry.name, 'spec.md'),
79
+ content,
80
+ });
81
+ }
82
+ catch (err) {
83
+ warnings.push(`Failed to read ${specFile}: ${err.message}`);
84
+ }
85
+ }
86
+ return specs;
87
+ }
88
+ function scanChanges(openspecPath, warnings) {
89
+ const changesDir = path.join(openspecPath, 'changes');
90
+ if (!fs.existsSync(changesDir)) {
91
+ warnings.push('No changes/ directory found');
92
+ return { activeChanges: [], archivedChanges: [] };
93
+ }
94
+ const activeChanges = [];
95
+ const archivedChanges = [];
96
+ // Scan active changes
97
+ const entries = fs.readdirSync(changesDir, { withFileTypes: true });
98
+ for (const entry of entries) {
99
+ if (!entry.isDirectory())
100
+ continue;
101
+ if (entry.name === 'archive')
102
+ continue;
103
+ const change = scanSingleChange(path.join(changesDir, entry.name), entry.name, false, warnings);
104
+ if (change)
105
+ activeChanges.push(change);
106
+ }
107
+ // Scan archived changes
108
+ const archiveDir = path.join(changesDir, 'archive');
109
+ if (fs.existsSync(archiveDir)) {
110
+ const archiveEntries = fs.readdirSync(archiveDir, { withFileTypes: true });
111
+ for (const entry of archiveEntries) {
112
+ if (!entry.isDirectory())
113
+ continue;
114
+ const change = scanSingleChange(path.join(archiveDir, entry.name), entry.name, true, warnings);
115
+ if (change)
116
+ archivedChanges.push(change);
117
+ }
118
+ }
119
+ return { activeChanges, archivedChanges };
120
+ }
121
+ function scanSingleChange(changePath, name, archived, warnings) {
122
+ const proposal = readFileOrNull(path.join(changePath, 'proposal.md'));
123
+ const design = readFileOrNull(path.join(changePath, 'design.md'));
124
+ const tasks = readFileOrNull(path.join(changePath, 'tasks.md'));
125
+ const metadata = readChangeMetadata(path.join(changePath, '.openspec.yaml'), warnings);
126
+ if (!proposal) {
127
+ warnings.push(`Change ${name} has no proposal.md, skipping`);
128
+ return null;
129
+ }
130
+ // Scan delta specs
131
+ const deltaSpecs = [];
132
+ const specsDir = path.join(changePath, 'specs');
133
+ if (fs.existsSync(specsDir)) {
134
+ const specEntries = fs.readdirSync(specsDir, { withFileTypes: true });
135
+ for (const entry of specEntries) {
136
+ if (!entry.isDirectory())
137
+ continue;
138
+ const specFile = path.join(specsDir, entry.name, 'spec.md');
139
+ if (fs.existsSync(specFile)) {
140
+ try {
141
+ deltaSpecs.push({
142
+ capability: entry.name,
143
+ content: fs.readFileSync(specFile, 'utf-8'),
144
+ });
145
+ }
146
+ catch {
147
+ warnings.push(`Failed to read delta spec ${entry.name}/spec.md in change ${name}`);
148
+ }
149
+ }
150
+ }
151
+ }
152
+ return {
153
+ name,
154
+ dirPath: changePath,
155
+ proposal,
156
+ design,
157
+ tasks,
158
+ metadata,
159
+ deltaSpecs,
160
+ archived,
161
+ };
162
+ }
163
+ function readFileOrNull(filePath) {
164
+ try {
165
+ if (!fs.existsSync(filePath))
166
+ return null;
167
+ return fs.readFileSync(filePath, 'utf-8');
168
+ }
169
+ catch {
170
+ return null;
171
+ }
172
+ }
173
+ function readChangeMetadata(filePath, warnings) {
174
+ const raw = readFileOrNull(filePath);
175
+ if (!raw)
176
+ return null;
177
+ try {
178
+ const data = parseYaml(raw);
179
+ if (typeof data !== 'object' || data === null)
180
+ return null;
181
+ return data;
182
+ }
183
+ catch (err) {
184
+ warnings.push(`Failed to parse .openspec.yaml: ${err.message}`);
185
+ return null;
186
+ }
187
+ }
188
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/core/migrate/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { OpenSpecConfig, ConversionResult } from './types.js';
2
+ /**
3
+ * Convert the config.yaml context field into a Source note.
4
+ */
5
+ export declare function convertConfigToSource(context: string, config: OpenSpecConfig): ConversionResult;
6
+ //# sourceMappingURL=source-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-converter.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/source-converter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GACrB,gBAAgB,CAmClB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Converts OpenSpec config.yaml context into an open-wiki-spec Source note.
3
+ * Rich config contexts (project architecture, stack, conventions) become
4
+ * project-context Source notes for reference.
5
+ */
6
+ import * as path from 'node:path';
7
+ /**
8
+ * Convert the config.yaml context field into a Source note.
9
+ */
10
+ export function convertConfigToSource(context, config) {
11
+ const id = 'project-context';
12
+ const rulesBlock = config.rules ? formatRules(config.rules) : '';
13
+ const content = `---
14
+ type: source
15
+ id: ${id}
16
+ status: active
17
+ source_type: other
18
+ tags:
19
+ - source
20
+ - migrated
21
+ - project-context
22
+ ---
23
+
24
+ # Source: Project Context
25
+
26
+ ## Summary
27
+
28
+ Project context and conventions migrated from OpenSpec config.yaml.
29
+
30
+ ## Key Points
31
+
32
+ ${context.trim()}
33
+
34
+ ${rulesBlock ? `## OpenSpec Rules\n\n${rulesBlock}` : ''}
35
+
36
+ ## Related Notes
37
+ `;
38
+ return {
39
+ targetPath: path.join('wiki', '01-sources', `${id}.md`),
40
+ content,
41
+ sourceDescription: 'openspec/config.yaml (context field)',
42
+ };
43
+ }
44
+ function formatRules(rules) {
45
+ const lines = [];
46
+ for (const [key, value] of Object.entries(rules)) {
47
+ lines.push(`### ${key}`);
48
+ if (Array.isArray(value)) {
49
+ for (const item of value) {
50
+ lines.push(`- ${item}`);
51
+ }
52
+ }
53
+ else if (typeof value === 'string') {
54
+ lines.push(value);
55
+ }
56
+ else {
57
+ lines.push(String(value));
58
+ }
59
+ lines.push('');
60
+ }
61
+ return lines.join('\n');
62
+ }
63
+ //# sourceMappingURL=source-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-converter.js","sourceRoot":"","sources":["../../../src/core/migrate/source-converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,MAAsB;IAEtB,MAAM,EAAE,GAAG,iBAAiB,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjE,MAAM,OAAO,GAAG;;MAEZ,EAAE;;;;;;;;;;;;;;;;;EAiBN,OAAO,CAAC,IAAI,EAAE;;EAEd,UAAU,CAAC,CAAC,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;;;CAGvD,CAAC;IAEA,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC;QACvD,OAAO;QACP,iBAAiB,EAAE,sCAAsC;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Converts OpenSpec spec.md files into open-wiki-spec Feature notes.
3
+ */
4
+ import type { ScannedSpec, ConversionResult } from './types.js';
5
+ /**
6
+ * Convert a single OpenSpec spec into a Feature note.
7
+ */
8
+ export declare function convertSpec(spec: ScannedSpec, systemRef: string): ConversionResult;
9
+ /**
10
+ * Convert all specs into Feature notes.
11
+ */
12
+ export declare function convertAllSpecs(specs: ScannedSpec[], systemRefs: Map<string, string>): {
13
+ results: ConversionResult[];
14
+ warnings: string[];
15
+ };
16
+ //# sourceMappingURL=spec-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-converter.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/spec-converter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAShE;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAuBlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAcrD"}
@@ -0,0 +1,157 @@
1
+ import * as path from 'node:path';
2
+ const REQUIREMENT_HEADING_RE = /^###\s+Requirement:\s*(.+)$/;
3
+ const SCENARIO_HEADING_RE = /^####\s+Scenario:\s*(.+)$/;
4
+ const PURPOSE_SECTION_RE = /^##\s+Purpose$/m;
5
+ const REQUIREMENTS_SECTION_RE = /^##\s+Requirements$/m;
6
+ const WHY_SECTION_RE = /^##\s+Why$/m;
7
+ /**
8
+ * Convert a single OpenSpec spec into a Feature note.
9
+ */
10
+ export function convertSpec(spec, systemRef) {
11
+ const id = spec.capability;
12
+ const title = formatTitle(spec.capability);
13
+ const purpose = extractPurpose(spec.content);
14
+ const requirementsBlock = extractRequirementsBlock(spec.content);
15
+ const constraints = extractConstraints(spec.content);
16
+ const knownGaps = extractKnownGaps(spec.content);
17
+ const content = buildFeatureNote({
18
+ id,
19
+ title,
20
+ systemRef,
21
+ purpose,
22
+ requirementsBlock,
23
+ constraints,
24
+ knownGaps,
25
+ });
26
+ return {
27
+ targetPath: path.join('wiki', '03-features', `${id}.md`),
28
+ content,
29
+ sourceDescription: `openspec/specs/${spec.capability}/spec.md`,
30
+ };
31
+ }
32
+ /**
33
+ * Convert all specs into Feature notes.
34
+ */
35
+ export function convertAllSpecs(specs, systemRefs) {
36
+ const results = [];
37
+ const warnings = [];
38
+ for (const spec of specs) {
39
+ const systemRef = systemRefs.get(spec.capability) ?? 'default-system';
40
+ try {
41
+ results.push(convertSpec(spec, systemRef));
42
+ }
43
+ catch (err) {
44
+ warnings.push(`Failed to convert spec ${spec.capability}: ${err.message}`);
45
+ }
46
+ }
47
+ return { results, warnings };
48
+ }
49
+ function buildFeatureNote(opts) {
50
+ return `---
51
+ type: feature
52
+ id: ${opts.id}
53
+ status: active
54
+ systems:
55
+ - "${opts.systemRef}"
56
+ sources:
57
+ - "[[Source: Project Context]]"
58
+ decisions: []
59
+ changes: []
60
+ tags:
61
+ - feature
62
+ - migrated
63
+ ---
64
+
65
+ # Feature: ${opts.title}
66
+
67
+ ## Purpose
68
+
69
+ ${opts.purpose || '<!-- Migrated from OpenSpec - purpose not specified -->'}
70
+
71
+ ## Current Behavior
72
+
73
+ <!-- Migrated from OpenSpec spec. See requirements below for current behavior. -->
74
+
75
+ ## Constraints
76
+
77
+ ${opts.constraints || '<!-- No constraints specified in original spec -->'}
78
+
79
+ ## Known Gaps
80
+
81
+ ${opts.knownGaps || '<!-- No known gaps specified in original spec -->'}
82
+
83
+ ## Requirements
84
+
85
+ ${opts.requirementsBlock || '<!-- No requirements found in original spec -->'}
86
+
87
+ ## Related Notes
88
+ `;
89
+ }
90
+ /**
91
+ * Extract the Purpose section content from an OpenSpec spec.
92
+ */
93
+ function extractPurpose(content) {
94
+ const match = content.match(PURPOSE_SECTION_RE);
95
+ if (!match) {
96
+ // Try extracting from first paragraph after H1
97
+ const h1End = content.indexOf('\n## ');
98
+ if (h1End === -1)
99
+ return '';
100
+ const h1Match = content.match(/^#\s+.+\n+([\s\S]*?)(?=\n##\s)/);
101
+ if (h1Match)
102
+ return h1Match[1].trim();
103
+ return '';
104
+ }
105
+ const startIdx = match.index + match[0].length;
106
+ const nextSection = content.indexOf('\n## ', startIdx);
107
+ const sectionContent = nextSection === -1
108
+ ? content.slice(startIdx)
109
+ : content.slice(startIdx, nextSection);
110
+ return sectionContent.trim();
111
+ }
112
+ /**
113
+ * Extract the Requirements block preserving its markdown structure.
114
+ */
115
+ function extractRequirementsBlock(content) {
116
+ const match = content.match(REQUIREMENTS_SECTION_RE);
117
+ if (!match)
118
+ return '';
119
+ const startIdx = match.index + match[0].length;
120
+ // Find next H2 that is NOT a requirement sub-section (i.e., at ## level)
121
+ const remaining = content.slice(startIdx);
122
+ const nextH2 = remaining.match(/\n## (?!Requirements)/);
123
+ const block = nextH2 ? remaining.slice(0, nextH2.index) : remaining;
124
+ return block.trim();
125
+ }
126
+ /**
127
+ * Extract constraints from spec content (if any section matches).
128
+ */
129
+ function extractConstraints(content) {
130
+ const match = content.match(/^##\s+Constraints$/m);
131
+ if (!match)
132
+ return '';
133
+ const startIdx = match.index + match[0].length;
134
+ const nextSection = content.indexOf('\n## ', startIdx);
135
+ return (nextSection === -1 ? content.slice(startIdx) : content.slice(startIdx, nextSection)).trim();
136
+ }
137
+ /**
138
+ * Extract known gaps from spec content.
139
+ */
140
+ function extractKnownGaps(content) {
141
+ const match = content.match(/^##\s+Known\s+Gaps$/m);
142
+ if (!match)
143
+ return '';
144
+ const startIdx = match.index + match[0].length;
145
+ const nextSection = content.indexOf('\n## ', startIdx);
146
+ return (nextSection === -1 ? content.slice(startIdx) : content.slice(startIdx, nextSection)).trim();
147
+ }
148
+ /**
149
+ * Convert kebab-case capability name to a readable title.
150
+ */
151
+ function formatTitle(capability) {
152
+ return capability
153
+ .split('-')
154
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
155
+ .join(' ');
156
+ }
157
+ //# sourceMappingURL=spec-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-converter.js","sourceRoot":"","sources":["../../../src/core/migrate/spec-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ScannedSpec, ConversionResult } from './types.js';
2
+ export interface InferredSystem {
3
+ id: string;
4
+ title: string;
5
+ capabilities: string[];
6
+ }
7
+ /**
8
+ * Infer systems from a list of specs by grouping capabilities by domain prefix.
9
+ */
10
+ export declare function inferSystems(specs: ScannedSpec[]): InferredSystem[];
11
+ /**
12
+ * Build a mapping from capability name to system wikilink ref.
13
+ */
14
+ export declare function buildSystemRefMap(systems: InferredSystem[]): Map<string, string>;
15
+ /**
16
+ * Build a mapping from capability name to feature wikilink ref.
17
+ */
18
+ export declare function buildFeatureRefMap(capabilities: string[]): Map<string, string>;
19
+ /**
20
+ * Convert inferred systems into System note ConversionResults.
21
+ */
22
+ export declare function convertSystems(systems: InferredSystem[]): ConversionResult[];
23
+ //# sourceMappingURL=system-inferrer.d.ts.map