mstro-app 0.4.3 → 0.4.4

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 (306) hide show
  1. package/dist/server/cli/headless/claude-invoker-process.d.ts +11 -0
  2. package/dist/server/cli/headless/claude-invoker-process.d.ts.map +1 -0
  3. package/dist/server/cli/headless/claude-invoker-process.js +140 -0
  4. package/dist/server/cli/headless/claude-invoker-process.js.map +1 -0
  5. package/dist/server/cli/headless/claude-invoker-stall.d.ts +40 -0
  6. package/dist/server/cli/headless/claude-invoker-stall.d.ts.map +1 -0
  7. package/dist/server/cli/headless/claude-invoker-stall.js +98 -0
  8. package/dist/server/cli/headless/claude-invoker-stall.js.map +1 -0
  9. package/dist/server/cli/headless/claude-invoker-stream.d.ts +44 -0
  10. package/dist/server/cli/headless/claude-invoker-stream.d.ts.map +1 -0
  11. package/dist/server/cli/headless/claude-invoker-stream.js +276 -0
  12. package/dist/server/cli/headless/claude-invoker-stream.js.map +1 -0
  13. package/dist/server/cli/headless/claude-invoker-tools.d.ts +21 -0
  14. package/dist/server/cli/headless/claude-invoker-tools.d.ts.map +1 -0
  15. package/dist/server/cli/headless/claude-invoker-tools.js +137 -0
  16. package/dist/server/cli/headless/claude-invoker-tools.js.map +1 -0
  17. package/dist/server/cli/headless/claude-invoker.d.ts +6 -4
  18. package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -1
  19. package/dist/server/cli/headless/claude-invoker.js +10 -807
  20. package/dist/server/cli/headless/claude-invoker.js.map +1 -1
  21. package/dist/server/cli/headless/haiku-assessments.d.ts +62 -0
  22. package/dist/server/cli/headless/haiku-assessments.d.ts.map +1 -0
  23. package/dist/server/cli/headless/haiku-assessments.js +281 -0
  24. package/dist/server/cli/headless/haiku-assessments.js.map +1 -0
  25. package/dist/server/cli/headless/headless-logger.d.ts +3 -2
  26. package/dist/server/cli/headless/headless-logger.d.ts.map +1 -1
  27. package/dist/server/cli/headless/headless-logger.js +28 -5
  28. package/dist/server/cli/headless/headless-logger.js.map +1 -1
  29. package/dist/server/cli/headless/native-timeout-detector.d.ts +44 -0
  30. package/dist/server/cli/headless/native-timeout-detector.d.ts.map +1 -0
  31. package/dist/server/cli/headless/native-timeout-detector.js +99 -0
  32. package/dist/server/cli/headless/native-timeout-detector.js.map +1 -0
  33. package/dist/server/cli/headless/stall-assessor.d.ts +2 -110
  34. package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
  35. package/dist/server/cli/headless/stall-assessor.js +65 -457
  36. package/dist/server/cli/headless/stall-assessor.js.map +1 -1
  37. package/dist/server/cli/improvisation-attachments.d.ts +21 -0
  38. package/dist/server/cli/improvisation-attachments.d.ts.map +1 -0
  39. package/dist/server/cli/improvisation-attachments.js +116 -0
  40. package/dist/server/cli/improvisation-attachments.js.map +1 -0
  41. package/dist/server/cli/improvisation-retry.d.ts +52 -0
  42. package/dist/server/cli/improvisation-retry.d.ts.map +1 -0
  43. package/dist/server/cli/improvisation-retry.js +434 -0
  44. package/dist/server/cli/improvisation-retry.js.map +1 -0
  45. package/dist/server/cli/improvisation-session-manager.d.ts +10 -266
  46. package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
  47. package/dist/server/cli/improvisation-session-manager.js +117 -1079
  48. package/dist/server/cli/improvisation-session-manager.js.map +1 -1
  49. package/dist/server/cli/improvisation-types.d.ts +86 -0
  50. package/dist/server/cli/improvisation-types.d.ts.map +1 -0
  51. package/dist/server/cli/improvisation-types.js +10 -0
  52. package/dist/server/cli/improvisation-types.js.map +1 -0
  53. package/dist/server/cli/prompt-builders.d.ts +68 -0
  54. package/dist/server/cli/prompt-builders.d.ts.map +1 -0
  55. package/dist/server/cli/prompt-builders.js +312 -0
  56. package/dist/server/cli/prompt-builders.js.map +1 -0
  57. package/dist/server/index.js +33 -212
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/mcp/bouncer-haiku.d.ts +10 -0
  60. package/dist/server/mcp/bouncer-haiku.d.ts.map +1 -0
  61. package/dist/server/mcp/bouncer-haiku.js +152 -0
  62. package/dist/server/mcp/bouncer-haiku.js.map +1 -0
  63. package/dist/server/mcp/bouncer-integration.d.ts +3 -4
  64. package/dist/server/mcp/bouncer-integration.d.ts.map +1 -1
  65. package/dist/server/mcp/bouncer-integration.js +50 -196
  66. package/dist/server/mcp/bouncer-integration.js.map +1 -1
  67. package/dist/server/mcp/security-analysis.d.ts +38 -0
  68. package/dist/server/mcp/security-analysis.d.ts.map +1 -0
  69. package/dist/server/mcp/security-analysis.js +183 -0
  70. package/dist/server/mcp/security-analysis.js.map +1 -0
  71. package/dist/server/mcp/security-audit.d.ts +1 -1
  72. package/dist/server/mcp/security-audit.d.ts.map +1 -1
  73. package/dist/server/mcp/security-patterns.d.ts +1 -25
  74. package/dist/server/mcp/security-patterns.d.ts.map +1 -1
  75. package/dist/server/mcp/security-patterns.js +55 -260
  76. package/dist/server/mcp/security-patterns.js.map +1 -1
  77. package/dist/server/server-setup.d.ts +22 -0
  78. package/dist/server/server-setup.d.ts.map +1 -0
  79. package/dist/server/server-setup.js +101 -0
  80. package/dist/server/server-setup.js.map +1 -0
  81. package/dist/server/services/file-explorer-ops.d.ts +24 -0
  82. package/dist/server/services/file-explorer-ops.d.ts.map +1 -0
  83. package/dist/server/services/file-explorer-ops.js +211 -0
  84. package/dist/server/services/file-explorer-ops.js.map +1 -0
  85. package/dist/server/services/files.d.ts +2 -85
  86. package/dist/server/services/files.d.ts.map +1 -1
  87. package/dist/server/services/files.js +7 -427
  88. package/dist/server/services/files.js.map +1 -1
  89. package/dist/server/services/plan/composer.d.ts.map +1 -1
  90. package/dist/server/services/plan/composer.js +2 -1
  91. package/dist/server/services/plan/composer.js.map +1 -1
  92. package/dist/server/services/plan/executor.d.ts.map +1 -1
  93. package/dist/server/services/plan/executor.js +3 -1
  94. package/dist/server/services/plan/executor.js.map +1 -1
  95. package/dist/server/services/plan/parser-core.d.ts +20 -0
  96. package/dist/server/services/plan/parser-core.d.ts.map +1 -0
  97. package/dist/server/services/plan/parser-core.js +350 -0
  98. package/dist/server/services/plan/parser-core.js.map +1 -0
  99. package/dist/server/services/plan/parser-migration.d.ts +5 -0
  100. package/dist/server/services/plan/parser-migration.d.ts.map +1 -0
  101. package/dist/server/services/plan/parser-migration.js +124 -0
  102. package/dist/server/services/plan/parser-migration.js.map +1 -0
  103. package/dist/server/services/plan/parser.d.ts +0 -8
  104. package/dist/server/services/plan/parser.d.ts.map +1 -1
  105. package/dist/server/services/plan/parser.js +50 -569
  106. package/dist/server/services/plan/parser.js.map +1 -1
  107. package/dist/server/services/plan/review-gate.d.ts +2 -0
  108. package/dist/server/services/plan/review-gate.d.ts.map +1 -1
  109. package/dist/server/services/plan/review-gate.js +2 -2
  110. package/dist/server/services/plan/review-gate.js.map +1 -1
  111. package/dist/server/services/plan/types.d.ts +2 -0
  112. package/dist/server/services/plan/types.d.ts.map +1 -1
  113. package/dist/server/services/platform-credentials.d.ts +24 -0
  114. package/dist/server/services/platform-credentials.d.ts.map +1 -0
  115. package/dist/server/services/platform-credentials.js +68 -0
  116. package/dist/server/services/platform-credentials.js.map +1 -0
  117. package/dist/server/services/platform.d.ts +1 -31
  118. package/dist/server/services/platform.d.ts.map +1 -1
  119. package/dist/server/services/platform.js +10 -119
  120. package/dist/server/services/platform.js.map +1 -1
  121. package/dist/server/services/terminal/pty-manager.d.ts +7 -97
  122. package/dist/server/services/terminal/pty-manager.d.ts.map +1 -1
  123. package/dist/server/services/terminal/pty-manager.js +53 -266
  124. package/dist/server/services/terminal/pty-manager.js.map +1 -1
  125. package/dist/server/services/terminal/pty-utils.d.ts +57 -0
  126. package/dist/server/services/terminal/pty-utils.d.ts.map +1 -0
  127. package/dist/server/services/terminal/pty-utils.js +141 -0
  128. package/dist/server/services/terminal/pty-utils.js.map +1 -0
  129. package/dist/server/services/websocket/file-definition-handlers.d.ts +4 -0
  130. package/dist/server/services/websocket/file-definition-handlers.d.ts.map +1 -0
  131. package/dist/server/services/websocket/file-definition-handlers.js +153 -0
  132. package/dist/server/services/websocket/file-definition-handlers.js.map +1 -0
  133. package/dist/server/services/websocket/file-explorer-handlers.d.ts.map +1 -1
  134. package/dist/server/services/websocket/file-explorer-handlers.js +52 -391
  135. package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -1
  136. package/dist/server/services/websocket/file-search-handlers.d.ts +5 -0
  137. package/dist/server/services/websocket/file-search-handlers.d.ts.map +1 -0
  138. package/dist/server/services/websocket/file-search-handlers.js +238 -0
  139. package/dist/server/services/websocket/file-search-handlers.js.map +1 -0
  140. package/dist/server/services/websocket/file-utils.js +3 -3
  141. package/dist/server/services/websocket/file-utils.js.map +1 -1
  142. package/dist/server/services/websocket/git-branch-handlers.d.ts +7 -0
  143. package/dist/server/services/websocket/git-branch-handlers.d.ts.map +1 -0
  144. package/dist/server/services/websocket/git-branch-handlers.js +110 -0
  145. package/dist/server/services/websocket/git-branch-handlers.js.map +1 -0
  146. package/dist/server/services/websocket/git-diff-handlers.d.ts +6 -0
  147. package/dist/server/services/websocket/git-diff-handlers.d.ts.map +1 -0
  148. package/dist/server/services/websocket/git-diff-handlers.js +123 -0
  149. package/dist/server/services/websocket/git-diff-handlers.js.map +1 -0
  150. package/dist/server/services/websocket/git-handlers.d.ts +2 -31
  151. package/dist/server/services/websocket/git-handlers.d.ts.map +1 -1
  152. package/dist/server/services/websocket/git-handlers.js +35 -541
  153. package/dist/server/services/websocket/git-handlers.js.map +1 -1
  154. package/dist/server/services/websocket/git-log-handlers.d.ts +6 -0
  155. package/dist/server/services/websocket/git-log-handlers.d.ts.map +1 -0
  156. package/dist/server/services/websocket/git-log-handlers.js +128 -0
  157. package/dist/server/services/websocket/git-log-handlers.js.map +1 -0
  158. package/dist/server/services/websocket/git-pr-handlers.d.ts.map +1 -1
  159. package/dist/server/services/websocket/git-pr-handlers.js +13 -53
  160. package/dist/server/services/websocket/git-pr-handlers.js.map +1 -1
  161. package/dist/server/services/websocket/git-tag-handlers.d.ts +6 -0
  162. package/dist/server/services/websocket/git-tag-handlers.d.ts.map +1 -0
  163. package/dist/server/services/websocket/git-tag-handlers.js +76 -0
  164. package/dist/server/services/websocket/git-tag-handlers.js.map +1 -0
  165. package/dist/server/services/websocket/git-utils.d.ts +43 -0
  166. package/dist/server/services/websocket/git-utils.d.ts.map +1 -0
  167. package/dist/server/services/websocket/git-utils.js +201 -0
  168. package/dist/server/services/websocket/git-utils.js.map +1 -0
  169. package/dist/server/services/websocket/handler.d.ts +2 -0
  170. package/dist/server/services/websocket/handler.d.ts.map +1 -1
  171. package/dist/server/services/websocket/handler.js +37 -126
  172. package/dist/server/services/websocket/handler.js.map +1 -1
  173. package/dist/server/services/websocket/plan-board-handlers.d.ts +11 -0
  174. package/dist/server/services/websocket/plan-board-handlers.d.ts.map +1 -0
  175. package/dist/server/services/websocket/plan-board-handlers.js +218 -0
  176. package/dist/server/services/websocket/plan-board-handlers.js.map +1 -0
  177. package/dist/server/services/websocket/plan-execution-handlers.d.ts +9 -0
  178. package/dist/server/services/websocket/plan-execution-handlers.d.ts.map +1 -0
  179. package/dist/server/services/websocket/plan-execution-handlers.js +142 -0
  180. package/dist/server/services/websocket/plan-execution-handlers.js.map +1 -0
  181. package/dist/server/services/websocket/plan-handlers.d.ts +7 -2
  182. package/dist/server/services/websocket/plan-handlers.d.ts.map +1 -1
  183. package/dist/server/services/websocket/plan-handlers.js +6 -925
  184. package/dist/server/services/websocket/plan-handlers.js.map +1 -1
  185. package/dist/server/services/websocket/plan-helpers.d.ts +19 -0
  186. package/dist/server/services/websocket/plan-helpers.d.ts.map +1 -0
  187. package/dist/server/services/websocket/plan-helpers.js +199 -0
  188. package/dist/server/services/websocket/plan-helpers.js.map +1 -0
  189. package/dist/server/services/websocket/plan-issue-handlers.d.ts +12 -0
  190. package/dist/server/services/websocket/plan-issue-handlers.d.ts.map +1 -0
  191. package/dist/server/services/websocket/plan-issue-handlers.js +162 -0
  192. package/dist/server/services/websocket/plan-issue-handlers.js.map +1 -0
  193. package/dist/server/services/websocket/plan-sprint-handlers.d.ts +7 -0
  194. package/dist/server/services/websocket/plan-sprint-handlers.d.ts.map +1 -0
  195. package/dist/server/services/websocket/plan-sprint-handlers.js +206 -0
  196. package/dist/server/services/websocket/plan-sprint-handlers.js.map +1 -0
  197. package/dist/server/services/websocket/quality-complexity.d.ts +14 -0
  198. package/dist/server/services/websocket/quality-complexity.d.ts.map +1 -0
  199. package/dist/server/services/websocket/quality-complexity.js +262 -0
  200. package/dist/server/services/websocket/quality-complexity.js.map +1 -0
  201. package/dist/server/services/websocket/quality-fix-agent.d.ts +16 -0
  202. package/dist/server/services/websocket/quality-fix-agent.d.ts.map +1 -0
  203. package/dist/server/services/websocket/quality-fix-agent.js +140 -0
  204. package/dist/server/services/websocket/quality-fix-agent.js.map +1 -0
  205. package/dist/server/services/websocket/quality-handlers.d.ts.map +1 -1
  206. package/dist/server/services/websocket/quality-handlers.js +34 -346
  207. package/dist/server/services/websocket/quality-handlers.js.map +1 -1
  208. package/dist/server/services/websocket/quality-linting.d.ts +9 -0
  209. package/dist/server/services/websocket/quality-linting.d.ts.map +1 -0
  210. package/dist/server/services/websocket/quality-linting.js +178 -0
  211. package/dist/server/services/websocket/quality-linting.js.map +1 -0
  212. package/dist/server/services/websocket/quality-review-agent.d.ts +19 -0
  213. package/dist/server/services/websocket/quality-review-agent.d.ts.map +1 -0
  214. package/dist/server/services/websocket/quality-review-agent.js +206 -0
  215. package/dist/server/services/websocket/quality-review-agent.js.map +1 -0
  216. package/dist/server/services/websocket/quality-service.d.ts +3 -51
  217. package/dist/server/services/websocket/quality-service.d.ts.map +1 -1
  218. package/dist/server/services/websocket/quality-service.js +9 -651
  219. package/dist/server/services/websocket/quality-service.js.map +1 -1
  220. package/dist/server/services/websocket/quality-tools.d.ts +23 -0
  221. package/dist/server/services/websocket/quality-tools.d.ts.map +1 -0
  222. package/dist/server/services/websocket/quality-tools.js +208 -0
  223. package/dist/server/services/websocket/quality-tools.js.map +1 -0
  224. package/dist/server/services/websocket/quality-types.d.ts +59 -0
  225. package/dist/server/services/websocket/quality-types.d.ts.map +1 -0
  226. package/dist/server/services/websocket/quality-types.js +101 -0
  227. package/dist/server/services/websocket/quality-types.js.map +1 -0
  228. package/dist/server/services/websocket/session-handlers.d.ts +3 -4
  229. package/dist/server/services/websocket/session-handlers.d.ts.map +1 -1
  230. package/dist/server/services/websocket/session-handlers.js +3 -378
  231. package/dist/server/services/websocket/session-handlers.js.map +1 -1
  232. package/dist/server/services/websocket/session-history.d.ts +4 -0
  233. package/dist/server/services/websocket/session-history.d.ts.map +1 -0
  234. package/dist/server/services/websocket/session-history.js +208 -0
  235. package/dist/server/services/websocket/session-history.js.map +1 -0
  236. package/dist/server/services/websocket/session-initialization.d.ts +5 -0
  237. package/dist/server/services/websocket/session-initialization.d.ts.map +1 -0
  238. package/dist/server/services/websocket/session-initialization.js +163 -0
  239. package/dist/server/services/websocket/session-initialization.js.map +1 -0
  240. package/dist/server/services/websocket/types.d.ts +12 -2
  241. package/dist/server/services/websocket/types.d.ts.map +1 -1
  242. package/package.json +1 -1
  243. package/server/cli/headless/claude-invoker-process.ts +204 -0
  244. package/server/cli/headless/claude-invoker-stall.ts +164 -0
  245. package/server/cli/headless/claude-invoker-stream.ts +353 -0
  246. package/server/cli/headless/claude-invoker-tools.ts +187 -0
  247. package/server/cli/headless/claude-invoker.ts +15 -1096
  248. package/server/cli/headless/haiku-assessments.ts +365 -0
  249. package/server/cli/headless/headless-logger.ts +26 -5
  250. package/server/cli/headless/native-timeout-detector.ts +117 -0
  251. package/server/cli/headless/stall-assessor.ts +65 -618
  252. package/server/cli/improvisation-attachments.ts +148 -0
  253. package/server/cli/improvisation-retry.ts +602 -0
  254. package/server/cli/improvisation-session-manager.ts +140 -1349
  255. package/server/cli/improvisation-types.ts +98 -0
  256. package/server/cli/prompt-builders.ts +370 -0
  257. package/server/index.ts +35 -246
  258. package/server/mcp/bouncer-haiku.ts +182 -0
  259. package/server/mcp/bouncer-integration.ts +87 -248
  260. package/server/mcp/security-analysis.ts +217 -0
  261. package/server/mcp/security-audit.ts +1 -1
  262. package/server/mcp/security-patterns.ts +60 -283
  263. package/server/server-setup.ts +114 -0
  264. package/server/services/file-explorer-ops.ts +293 -0
  265. package/server/services/files.ts +20 -532
  266. package/server/services/plan/composer.ts +2 -1
  267. package/server/services/plan/executor.ts +3 -1
  268. package/server/services/plan/parser-core.ts +406 -0
  269. package/server/services/plan/parser-migration.ts +128 -0
  270. package/server/services/plan/parser.ts +52 -620
  271. package/server/services/plan/review-gate.ts +4 -2
  272. package/server/services/plan/types.ts +2 -0
  273. package/server/services/platform-credentials.ts +83 -0
  274. package/server/services/platform.ts +15 -141
  275. package/server/services/terminal/pty-manager.ts +66 -313
  276. package/server/services/terminal/pty-utils.ts +176 -0
  277. package/server/services/websocket/file-definition-handlers.ts +165 -0
  278. package/server/services/websocket/file-explorer-handlers.ts +37 -452
  279. package/server/services/websocket/file-search-handlers.ts +291 -0
  280. package/server/services/websocket/file-utils.ts +3 -3
  281. package/server/services/websocket/git-branch-handlers.ts +130 -0
  282. package/server/services/websocket/git-diff-handlers.ts +140 -0
  283. package/server/services/websocket/git-handlers.ts +40 -625
  284. package/server/services/websocket/git-log-handlers.ts +149 -0
  285. package/server/services/websocket/git-pr-handlers.ts +17 -62
  286. package/server/services/websocket/git-tag-handlers.ts +91 -0
  287. package/server/services/websocket/git-utils.ts +230 -0
  288. package/server/services/websocket/handler.ts +39 -126
  289. package/server/services/websocket/plan-board-handlers.ts +277 -0
  290. package/server/services/websocket/plan-execution-handlers.ts +184 -0
  291. package/server/services/websocket/plan-handlers.ts +8 -1114
  292. package/server/services/websocket/plan-helpers.ts +215 -0
  293. package/server/services/websocket/plan-issue-handlers.ts +204 -0
  294. package/server/services/websocket/plan-sprint-handlers.ts +252 -0
  295. package/server/services/websocket/quality-complexity.ts +294 -0
  296. package/server/services/websocket/quality-fix-agent.ts +181 -0
  297. package/server/services/websocket/quality-handlers.ts +36 -404
  298. package/server/services/websocket/quality-linting.ts +187 -0
  299. package/server/services/websocket/quality-review-agent.ts +246 -0
  300. package/server/services/websocket/quality-service.ts +11 -762
  301. package/server/services/websocket/quality-tools.ts +209 -0
  302. package/server/services/websocket/quality-types.ts +169 -0
  303. package/server/services/websocket/session-handlers.ts +5 -437
  304. package/server/services/websocket/session-history.ts +222 -0
  305. package/server/services/websocket/session-initialization.ts +209 -0
  306. package/server/services/websocket/types.ts +17 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * YAML front-matter parsing and entity parsers for PPS (.pm/) files.
3
+ */
4
+ import type { AcceptanceCriterion, Board, Issue, Milestone, ProjectConfig, ProjectState, Sprint, Workspace } from './types.js';
5
+ export interface ParsedFile {
6
+ frontMatter: Record<string, unknown>;
7
+ body: string;
8
+ }
9
+ export declare function parseFrontMatter(content: string): ParsedFile;
10
+ export declare function extractSections(body: string): Map<string, string>;
11
+ export declare function parseCheckboxes(content: string): AcceptanceCriterion[];
12
+ export declare function parseListItems(content: string): string[];
13
+ export declare function parseProjectConfig(content: string): ProjectConfig;
14
+ export declare function parseProjectState(content: string): ProjectState;
15
+ export declare function parseIssue(content: string, filePath: string): Issue;
16
+ export declare function parseSprint(content: string, filePath: string): Sprint;
17
+ export declare function parseMilestone(content: string, filePath: string): Milestone;
18
+ export declare function parseBoard(content: string, filePath: string): Board;
19
+ export declare function parseWorkspace(content: string): Workspace;
20
+ //# sourceMappingURL=parser-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-core.d.ts","sourceRoot":"","sources":["../../../../server/services/plan/parser-core.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,KAAK,EAEL,KAAK,EAEL,SAAS,EAET,aAAa,EACb,YAAY,EACZ,MAAM,EAKN,SAAS,EACV,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAkCD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA2B5D;AAMD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBjE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAOxD;AAqED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAqBjE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAgB/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAkCnE;AAcD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuCrE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAyB3E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CA0BnE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAUzD"}
@@ -0,0 +1,350 @@
1
+ // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file for details.
3
+ function stripQuotes(v) {
4
+ if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'"))) {
5
+ return v.slice(1, -1);
6
+ }
7
+ return v;
8
+ }
9
+ function parseYamlValue(v) {
10
+ if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'"))) {
11
+ return v.slice(1, -1);
12
+ }
13
+ if (v.startsWith('[') && v.endsWith(']')) {
14
+ return v.slice(1, -1).split(',').map(s => stripQuotes(s.trim())).filter(Boolean);
15
+ }
16
+ if (v === 'true')
17
+ return true;
18
+ if (v === 'false')
19
+ return false;
20
+ if (v === 'null' || v === '~' || v === '')
21
+ return null;
22
+ if (/^-?\d+(\.\d+)?$/.test(v))
23
+ return Number(v);
24
+ return v;
25
+ }
26
+ function consumeIndentedList(lines, startIdx) {
27
+ const items = [];
28
+ let i = startIdx;
29
+ while (i + 1 < lines.length && /^\s+-\s/.test(lines[i + 1])) {
30
+ i++;
31
+ const item = lines[i].trim().replace(/^-\s+/, '');
32
+ items.push(stripQuotes(item));
33
+ }
34
+ return [items, i];
35
+ }
36
+ export function parseFrontMatter(content) {
37
+ const match = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
38
+ if (!match) {
39
+ return { frontMatter: {}, body: content };
40
+ }
41
+ const frontMatter = {};
42
+ const lines = match[1].split('\n');
43
+ for (let i = 0; i < lines.length; i++) {
44
+ const trimmed = lines[i].trim();
45
+ if (!trimmed || trimmed.startsWith('#'))
46
+ continue;
47
+ const colonIdx = trimmed.indexOf(':');
48
+ if (colonIdx === -1)
49
+ continue;
50
+ const key = trimmed.slice(0, colonIdx).trim();
51
+ const rawValue = trimmed.slice(colonIdx + 1).trim();
52
+ if (!rawValue) {
53
+ const [items, newIdx] = consumeIndentedList(lines, i);
54
+ i = newIdx;
55
+ frontMatter[key] = items.length > 0 ? items : null;
56
+ }
57
+ else {
58
+ frontMatter[key] = parseYamlValue(rawValue);
59
+ }
60
+ }
61
+ return { frontMatter, body: match[2] };
62
+ }
63
+ // ============================================================================
64
+ // Section Extraction
65
+ // ============================================================================
66
+ export function extractSections(body) {
67
+ const sections = new Map();
68
+ const lines = body.split('\n');
69
+ let currentSection = '';
70
+ let currentContent = [];
71
+ for (const line of lines) {
72
+ if (line.startsWith('## ')) {
73
+ if (currentSection) {
74
+ sections.set(currentSection, currentContent.join('\n').trim());
75
+ }
76
+ currentSection = line.slice(3).trim();
77
+ currentContent = [];
78
+ }
79
+ else {
80
+ currentContent.push(line);
81
+ }
82
+ }
83
+ if (currentSection) {
84
+ sections.set(currentSection, currentContent.join('\n').trim());
85
+ }
86
+ return sections;
87
+ }
88
+ export function parseCheckboxes(content) {
89
+ const items = [];
90
+ for (const line of content.split('\n')) {
91
+ const match = line.match(/^[-*]\s+\[([ xX])\]\s+(.+)$/);
92
+ if (match) {
93
+ items.push({ text: match[2].trim(), checked: match[1] !== ' ' });
94
+ }
95
+ }
96
+ return items;
97
+ }
98
+ export function parseListItems(content) {
99
+ const items = [];
100
+ for (const line of content.split('\n')) {
101
+ const match = line.match(/^[-*]\s+(.+)$/);
102
+ if (match)
103
+ items.push(match[1].trim());
104
+ }
105
+ return items;
106
+ }
107
+ function parseIssueSummaries(content) {
108
+ const summaries = [];
109
+ for (const line of content.split('\n')) {
110
+ const match = line.match(/\d+\.\s+\[([^\]]+)\]\(([^)]+)\)\s*[—–-]\s*(.+?)(?:\s*\((\w+)\))?\s*$/);
111
+ if (match) {
112
+ summaries.push({ id: match[1], path: match[2], title: match[3].trim(), priority: match[4] || '' });
113
+ continue;
114
+ }
115
+ const match2 = line.match(/^[-*]\s+\[([^\]]+)\]\(([^)]+)\)\s*[—–-]\s*(.+?)(?:\s*[→→]\s*blocked by\s+\[([^\]]+)\])?\s*$/i);
116
+ if (match2) {
117
+ summaries.push({ id: match2[1], path: match2[2], title: match2[3].trim(), priority: '', blockedBy: match2[4] || undefined });
118
+ }
119
+ }
120
+ return summaries;
121
+ }
122
+ function parseCompletedSummaries(content) {
123
+ const summaries = [];
124
+ for (const line of content.split('\n')) {
125
+ const match = line.match(/^[-*]\s+\[([^\]]+)\]\(([^)]+)\)\s*[—–-]\s*(.+?)(?:\s*✓)?\s*$/);
126
+ if (match) {
127
+ summaries.push({ id: match[1], path: match[2], title: match[3].trim(), priority: '' });
128
+ }
129
+ }
130
+ return summaries;
131
+ }
132
+ // ============================================================================
133
+ // Entity Parsers
134
+ // ============================================================================
135
+ function parseWorkflows(section) {
136
+ if (!section)
137
+ return [];
138
+ const workflows = [];
139
+ for (const line of section.split('\n')) {
140
+ const match = line.match(/\|\s*(\w+)\s*\|\s*(\w+)\s*\|\s*(.+?)\s*\|/);
141
+ if (match && match[1] !== 'Status') {
142
+ workflows.push({ status: match[1], category: match[2], description: match[3].trim() });
143
+ }
144
+ }
145
+ return workflows;
146
+ }
147
+ function parseTeams(section) {
148
+ if (!section)
149
+ return [];
150
+ const teams = [];
151
+ for (const line of section.split('\n')) {
152
+ const match = line.match(/^[-*]\s+(\w+)(?:\s*[—–-]\s*(.+))?$/);
153
+ if (match)
154
+ teams.push({ name: match[1], description: match[2]?.trim() });
155
+ }
156
+ return teams;
157
+ }
158
+ function toStringArray(val) {
159
+ return Array.isArray(val) ? val.map(String) : [];
160
+ }
161
+ function optionalString(val) {
162
+ if (val == null)
163
+ return null;
164
+ const s = String(val);
165
+ return s === '' ? null : s;
166
+ }
167
+ function optionalNumber(val) {
168
+ return val != null ? Number(val) : null;
169
+ }
170
+ export function parseProjectConfig(content) {
171
+ const { frontMatter, body } = parseFrontMatter(content);
172
+ const sections = extractSections(body);
173
+ const idPrefixes = {};
174
+ const rawPrefixes = frontMatter.id_prefixes;
175
+ if (rawPrefixes && typeof rawPrefixes === 'object') {
176
+ Object.assign(idPrefixes, rawPrefixes);
177
+ }
178
+ return {
179
+ name: String(frontMatter.name || ''),
180
+ id: String(frontMatter.id || ''),
181
+ created: String(frontMatter.created || ''),
182
+ status: frontMatter.status || 'active',
183
+ estimation: frontMatter.estimation || 'none',
184
+ idPrefixes,
185
+ workflows: parseWorkflows(sections.get('Workflows')),
186
+ labels: (Array.isArray(frontMatter.labels) ? frontMatter.labels : []),
187
+ teams: parseTeams(sections.get('Teams')),
188
+ };
189
+ }
190
+ export function parseProjectState(content) {
191
+ const { frontMatter, body } = parseFrontMatter(content);
192
+ const sections = extractSections(body);
193
+ return {
194
+ project: String(frontMatter.project || ''),
195
+ currentSprint: frontMatter.current_sprint || null,
196
+ activeMilestone: frontMatter.active_milestone || null,
197
+ paused: frontMatter.paused === true,
198
+ lastSession: frontMatter.last_session || null,
199
+ readyToWork: parseIssueSummaries(sections.get('Ready to Work') || ''),
200
+ inProgress: parseIssueSummaries(sections.get('In Progress') || ''),
201
+ blocked: parseIssueSummaries(sections.get('Blocked') || ''),
202
+ recentlyCompleted: parseCompletedSummaries(sections.get('Recently Completed') || ''),
203
+ warnings: parseListItems(sections.get('Warnings') || ''),
204
+ };
205
+ }
206
+ export function parseIssue(content, filePath) {
207
+ const { frontMatter: fm, body } = parseFrontMatter(content);
208
+ const sections = extractSections(body);
209
+ return {
210
+ id: String(fm.id || ''),
211
+ title: String(fm.title || ''),
212
+ type: fm.type || 'issue',
213
+ status: String(fm.status || 'backlog'),
214
+ priority: String(fm.priority || 'P2'),
215
+ estimate: fm.estimate != null ? fm.estimate : null,
216
+ labels: toStringArray(fm.labels),
217
+ epic: optionalString(fm.epic),
218
+ sprint: optionalString(fm.sprint),
219
+ milestone: optionalString(fm.milestone),
220
+ assigned: optionalString(fm.assigned),
221
+ created: String(fm.created || ''),
222
+ updated: optionalString(fm.updated),
223
+ due: optionalString(fm.due),
224
+ blockedBy: toStringArray(fm.blocked_by),
225
+ blocks: toStringArray(fm.blocks),
226
+ relatesTo: toStringArray(fm.relates_to),
227
+ children: toStringArray(fm.children),
228
+ progress: optionalString(fm.progress),
229
+ description: sections.get('Description') || '',
230
+ acceptanceCriteria: parseCheckboxes(sections.get('Acceptance Criteria') || ''),
231
+ technicalNotes: sections.get('Technical Notes') || null,
232
+ filesToModify: parseListItems(sections.get('Files to Modify') || ''),
233
+ activity: parseListItems(sections.get('Activity') || ''),
234
+ reviewGate: (['none', 'auto', 'required'].includes(String(fm.review_gate)) ? String(fm.review_gate) : 'auto'),
235
+ outputFile: optionalString(fm.output_file),
236
+ body,
237
+ path: filePath,
238
+ };
239
+ }
240
+ function parseSprintIssues(section) {
241
+ if (!section)
242
+ return [];
243
+ const issues = [];
244
+ for (const line of section.split('\n')) {
245
+ const match = line.match(/\|\s*\[([^\]]+)\]\(([^)]+)\)\s*\|\s*(.+?)\s*\|\s*(\S+)\s*\|\s*(\S+)\s*\|/);
246
+ if (match) {
247
+ issues.push({ id: match[1], path: match[2], title: match[3].trim(), points: /^\d+$/.test(match[4]) ? Number(match[4]) : match[4], status: match[5] });
248
+ }
249
+ }
250
+ return issues;
251
+ }
252
+ export function parseSprint(content, filePath) {
253
+ const { frontMatter: fm, body } = parseFrontMatter(content);
254
+ const sections = extractSections(body);
255
+ let issues = parseSprintIssues(sections.get('Issues'));
256
+ if (issues.length === 0 && Array.isArray(fm.issues)) {
257
+ issues = fm.issues.map(path => {
258
+ const id = path.replace(/^backlog\//, '').replace(/\.md$/, '');
259
+ return { id, path, title: '', points: null, status: '' };
260
+ });
261
+ }
262
+ let executionSummary = null;
263
+ if (fm.execution_summary && typeof fm.execution_summary === 'object') {
264
+ const es = fm.execution_summary;
265
+ executionSummary = {
266
+ totalIssues: Number(es.total_issues ?? 0),
267
+ completedIssues: Number(es.completed_issues ?? 0),
268
+ failedIssues: Number(es.failed_issues ?? 0),
269
+ totalDuration: Number(es.total_duration ?? 0),
270
+ waves: Number(es.waves ?? 0),
271
+ };
272
+ }
273
+ return {
274
+ id: String(fm.id || ''),
275
+ title: String(fm.title || ''),
276
+ status: fm.status || 'planned',
277
+ start: String(fm.start || fm.start_date || ''),
278
+ end: String(fm.end || fm.end_date || ''),
279
+ goal: String(fm.goal || sections.get('Goal') || sections.get('Sprint Goal') || ''),
280
+ capacity: optionalNumber(fm.capacity),
281
+ committed: optionalNumber(fm.committed),
282
+ completed: optionalNumber(fm.completed),
283
+ issues,
284
+ path: filePath,
285
+ completedAt: optionalString(fm.completed_at),
286
+ executionSummary,
287
+ };
288
+ }
289
+ export function parseMilestone(content, filePath) {
290
+ const { frontMatter, body } = parseFrontMatter(content);
291
+ const sections = extractSections(body);
292
+ const epics = [];
293
+ const epicSection = sections.get('Epics');
294
+ if (epicSection) {
295
+ for (const line of epicSection.split('\n')) {
296
+ const match = line.match(/\|\s*\[([^\]]+)\]\(([^)]+)\)\s*\|\s*(.+?)\s*\|\s*(\S+)\s*\|/);
297
+ if (match) {
298
+ epics.push({ id: match[1], path: match[2], title: match[3].trim(), progress: match[4] });
299
+ }
300
+ }
301
+ }
302
+ return {
303
+ id: String(frontMatter.id || ''),
304
+ title: String(frontMatter.title || ''),
305
+ status: frontMatter.status || 'planned',
306
+ targetDate: frontMatter.target_date || null,
307
+ progress: frontMatter.progress || null,
308
+ definition: sections.get('Definition of Done') || '',
309
+ epics,
310
+ path: filePath,
311
+ };
312
+ }
313
+ export function parseBoard(content, filePath) {
314
+ const { frontMatter: fm, body } = parseFrontMatter(content);
315
+ const sections = extractSections(body);
316
+ let executionSummary = null;
317
+ if (fm.execution_summary && typeof fm.execution_summary === 'object') {
318
+ const es = fm.execution_summary;
319
+ executionSummary = {
320
+ totalIssues: Number(es.total_issues ?? 0),
321
+ completedIssues: Number(es.completed_issues ?? 0),
322
+ failedIssues: Number(es.failed_issues ?? 0),
323
+ totalDuration: Number(es.total_duration ?? 0),
324
+ waves: Number(es.waves ?? 0),
325
+ };
326
+ }
327
+ return {
328
+ id: String(fm.id || ''),
329
+ title: String(fm.title || ''),
330
+ status: fm.status || 'draft',
331
+ created: String(fm.created || ''),
332
+ completedAt: optionalString(fm.completed_at),
333
+ goal: String(fm.goal || sections.get('Goal') || ''),
334
+ executionSummary,
335
+ path: filePath,
336
+ };
337
+ }
338
+ export function parseWorkspace(content) {
339
+ try {
340
+ const parsed = JSON.parse(content);
341
+ return {
342
+ activeBoardId: typeof parsed.activeBoardId === 'string' ? parsed.activeBoardId : null,
343
+ boardOrder: Array.isArray(parsed.boardOrder) ? parsed.boardOrder.map(String) : [],
344
+ };
345
+ }
346
+ catch {
347
+ return { activeBoardId: null, boardOrder: [] };
348
+ }
349
+ }
350
+ //# sourceMappingURL=parser-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-core.js","sourceRoot":"","sources":["../../../../server/services/plan/parser-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Check whether a .pm/ directory uses the legacy flat format (has backlog/ at root, no boards/). */
2
+ export declare function isLegacyFormat(pmDir: string): boolean;
3
+ /** Migrate a legacy flat .pm/ directory to the board-centric format. */
4
+ export declare function migrateToBoards(pmDir: string): void;
5
+ //# sourceMappingURL=parser-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-migration.d.ts","sourceRoot":"","sources":["../../../../server/services/plan/parser-migration.ts"],"names":[],"mappings":"AAWA,qGAAqG;AACrG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AA4FD,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAoBnD"}
@@ -0,0 +1,124 @@
1
+ // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file for details.
3
+ /**
4
+ * Legacy → Board-centric migration for .pm/ directories.
5
+ */
6
+ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { parseFrontMatter } from './parser-core.js';
9
+ /** Check whether a .pm/ directory uses the legacy flat format (has backlog/ at root, no boards/). */
10
+ export function isLegacyFormat(pmDir) {
11
+ return existsSync(join(pmDir, 'backlog')) && !existsSync(join(pmDir, 'boards'));
12
+ }
13
+ function readFileIfExists(path) {
14
+ try {
15
+ if (existsSync(path))
16
+ return readFileSync(path, 'utf-8');
17
+ }
18
+ catch { /* skip */ }
19
+ return null;
20
+ }
21
+ /** Move all files from a legacy directory into a board subdirectory and remove the source. */
22
+ function moveLegacyDir(srcDir, destDir) {
23
+ if (!existsSync(srcDir))
24
+ return;
25
+ for (const file of readdirSync(srcDir)) {
26
+ renameSync(join(srcDir, file), join(destDir, file));
27
+ }
28
+ rmSync(srcDir, { recursive: true });
29
+ }
30
+ /** Move a single file if it exists. */
31
+ function moveLegacyFile(src, dest) {
32
+ if (existsSync(src))
33
+ renameSync(src, dest);
34
+ }
35
+ /** Copy review files from sprint sandbox directories into the board reviews dir. */
36
+ function copySprintReviews(sprintsDir, boardReviewsDir) {
37
+ for (const entry of readdirSync(sprintsDir)) {
38
+ if (entry.endsWith('.md'))
39
+ continue;
40
+ const reviewsDir = join(sprintsDir, entry, 'reviews');
41
+ if (!existsSync(reviewsDir))
42
+ continue;
43
+ for (const reviewFile of readdirSync(reviewsDir)) {
44
+ cpSync(join(reviewsDir, reviewFile), join(boardReviewsDir, reviewFile));
45
+ }
46
+ }
47
+ }
48
+ /** Find and return the goal from the active sprint .md file. */
49
+ function extractActiveSprintGoal(sprintsDir) {
50
+ for (const entry of readdirSync(sprintsDir).filter(e => e.endsWith('.md'))) {
51
+ const content = readFileIfExists(join(sprintsDir, entry));
52
+ if (!content)
53
+ continue;
54
+ const fm = parseFrontMatter(content).frontMatter;
55
+ if (fm.status === 'active')
56
+ return String(fm.goal || '');
57
+ }
58
+ return '';
59
+ }
60
+ /** Migrate active sprint data into the board and archive sprints dir. */
61
+ function migrateLegacySprints(sprintsDir, boardReviewsDir) {
62
+ if (!existsSync(sprintsDir))
63
+ return '';
64
+ const goal = extractActiveSprintGoal(sprintsDir);
65
+ copySprintReviews(sprintsDir, boardReviewsDir);
66
+ return goal;
67
+ }
68
+ /** Remove issues from the board backlog that are already tracked via paths in STATE.md */
69
+ function cleanupMigratedIssues(boardBacklogDir) {
70
+ let hasActive = false;
71
+ for (const f of readdirSync(boardBacklogDir).filter(f => f.endsWith('.md'))) {
72
+ const content = readFileIfExists(join(boardBacklogDir, f));
73
+ if (!content)
74
+ continue;
75
+ const fm = parseFrontMatter(content).frontMatter;
76
+ const status = String(fm.status || 'backlog');
77
+ if (status === 'done' || status === 'closed' || status === 'cancelled') {
78
+ rmSync(join(boardBacklogDir, f));
79
+ }
80
+ else if (status !== 'backlog') {
81
+ hasActive = true;
82
+ }
83
+ }
84
+ return hasActive;
85
+ }
86
+ /** Write the board.md metadata file and optionally a STATE.md for active boards. */
87
+ function writeBoardMetadata(pmDir, boardDir, boardId, sprintGoal, hasActive) {
88
+ const today = new Date().toISOString().split('T')[0];
89
+ const goal = sprintGoal || 'Migrated board';
90
+ writeFileSync(join(boardDir, 'board.md'), [
91
+ '---', `id: ${boardId}`, `title: Board 1`, `status: ${hasActive ? 'active' : 'draft'}`,
92
+ `created: ${today}`, `goal: ${goal}`, '---', '', `# Board 1`, '', `## Goal`, '', goal, '',
93
+ ].join('\n'));
94
+ // Copy existing STATE.md into the board directory
95
+ const legacyState = readFileIfExists(join(pmDir, 'STATE.md'));
96
+ if (legacyState) {
97
+ writeFileSync(join(boardDir, 'STATE.md'), legacyState);
98
+ }
99
+ // Write workspace.json pointing at the new board
100
+ writeFileSync(join(pmDir, 'workspace.json'), JSON.stringify({
101
+ activeBoardId: boardId, boardOrder: [boardId],
102
+ }, null, 2));
103
+ }
104
+ /** Migrate a legacy flat .pm/ directory to the board-centric format. */
105
+ export function migrateToBoards(pmDir) {
106
+ const boardId = 'BOARD-001';
107
+ const boardDir = join(pmDir, 'boards', boardId);
108
+ mkdirSync(join(boardDir, 'backlog'), { recursive: true });
109
+ mkdirSync(join(boardDir, 'reviews'), { recursive: true });
110
+ mkdirSync(join(boardDir, 'out'), { recursive: true });
111
+ moveLegacyDir(join(pmDir, 'backlog'), join(boardDir, 'backlog'));
112
+ moveLegacyFile(join(pmDir, 'progress.md'), join(boardDir, 'progress.md'));
113
+ const boardReviewsDir = join(boardDir, 'reviews');
114
+ const sprintGoal = migrateLegacySprints(join(pmDir, 'sprints'), boardReviewsDir);
115
+ const hasActive = cleanupMigratedIssues(join(boardDir, 'backlog'));
116
+ writeBoardMetadata(pmDir, boardDir, boardId, sprintGoal, hasActive);
117
+ // Remove migrated top-level items (STATE.md is now inside the board)
118
+ for (const f of ['STATE.md']) {
119
+ const p = join(pmDir, f);
120
+ if (existsSync(p))
121
+ rmSync(p);
122
+ }
123
+ }
124
+ //# sourceMappingURL=parser-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-migration.js","sourceRoot":"","sources":["../../../../server/services/plan/parser-migration.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,16 @@
1
1
  import type { Board, BoardArtifacts, BoardFullState, Issue, Milestone, PlanFullState, Sprint, SprintArtifacts } from './types.js';
2
- /** Check whether a .pm/ directory uses the board-centric format (has boards/ subdirectory). */
3
2
  export declare function isBoardCentricFormat(pmDir: string): boolean;
4
- /** Resolve the PM directory — prefers .mstro/pm/, falls back to legacy .pm/ and .plan/ */
5
3
  export declare function resolvePmDir(workingDir: string): string | null;
6
- /** Default PM directory path for new projects */
7
4
  export declare function defaultPmDir(workingDir: string): string;
8
5
  export declare function planDirExists(workingDir: string): boolean;
9
- /** Parse a single board's full state (board.md + STATE.md + backlog/). */
10
6
  export declare function parseBoardDirectory(pmDir: string, boardId: string): BoardFullState | null;
11
7
  export declare function parsePlanDirectory(workingDir: string): PlanFullState | null;
12
8
  export declare function parseSingleIssue(workingDir: string, issuePath: string): Issue | null;
13
9
  export declare function parseSingleSprint(workingDir: string, sprintPath: string): Sprint | null;
14
10
  export declare function parseSingleMilestone(workingDir: string, milestonePath: string): Milestone | null;
15
- /** Compute the next available ID for a given prefix (e.g., "IS" → "IS-004") */
16
11
  export declare function getNextId(issues: Issue[], prefix: string): string;
17
- /** Compute the next available board ID (e.g., "BOARD-003") */
18
12
  export declare function getNextBoardId(boards: Board[]): string;
19
- /** Compute the next available board number for display title (e.g., "Board 3") */
20
13
  export declare function getNextBoardNumber(boards: Board[]): number;
21
- /** Parse board artifacts from boards/BOARD-N/ directory. */
22
14
  export declare function parseBoardArtifacts(workingDir: string, boardId: string): BoardArtifacts | null;
23
15
  /** @deprecated Use getNextBoardId — kept for migration compatibility */
24
16
  export declare function getNextSprintId(sprints: Sprint[]): string;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../server/services/plan/parser.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,KAAK,EACL,cAAc,EAEd,cAAc,EACd,KAAK,EAEL,SAAS,EAET,aAAa,EAIb,MAAM,EACN,eAAe,EAMhB,MAAM,YAAY,CAAC;AA0apB,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AA+HD,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzD;AAgCD,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAuBzF;AAwBD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAwB3E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAOpF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAOhG;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAYjE;AAED,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAUtD;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAU1D;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA+B9F;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAUzD;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA+BjG"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../server/services/plan/parser.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,KAAK,EACL,cAAc,EACd,cAAc,EACd,KAAK,EACL,SAAS,EACT,aAAa,EAIb,MAAM,EACN,eAAe,EAEhB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzD;AAyDD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAsBzF;AAuBD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAwB3E;AAMD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAMpF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMvF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAMhG;AAMD,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAYjE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAUtD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAU1D;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAa9F;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAUzD;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAYjG"}