mewkit 1.15.0 → 1.16.1

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 (494) hide show
  1. package/NOTICE +24 -0
  2. package/README.md +29 -70
  3. package/dist/commands/visual-plan.d.ts +23 -0
  4. package/dist/commands/visual-plan.d.ts.map +1 -0
  5. package/dist/commands/visual-plan.js +26 -0
  6. package/dist/commands/visual-plan.js.map +1 -0
  7. package/dist/core/capability.d.ts +81 -81
  8. package/dist/core/consolidation-ledger.d.ts.map +1 -1
  9. package/dist/core/consolidation-ledger.js +13 -11
  10. package/dist/core/consolidation-ledger.js.map +1 -1
  11. package/dist/core/install-metadata.d.ts +27 -27
  12. package/dist/core/plugin-manifest.d.ts +16 -16
  13. package/dist/core/release-metadata.d.ts +2 -2
  14. package/dist/core/task-record.d.ts +8 -8
  15. package/dist/index.js +33 -21
  16. package/dist/index.js.map +1 -1
  17. package/dist/local-web/atomic-write.d.ts +15 -0
  18. package/dist/local-web/atomic-write.d.ts.map +1 -0
  19. package/dist/local-web/atomic-write.js +69 -0
  20. package/dist/local-web/atomic-write.js.map +1 -0
  21. package/dist/local-web/constants.d.ts +13 -0
  22. package/dist/local-web/constants.d.ts.map +1 -0
  23. package/dist/local-web/constants.js +13 -0
  24. package/dist/local-web/constants.js.map +1 -0
  25. package/dist/local-web/etag.d.ts +19 -0
  26. package/dist/local-web/etag.d.ts.map +1 -0
  27. package/dist/local-web/etag.js +32 -0
  28. package/dist/local-web/etag.js.map +1 -0
  29. package/dist/local-web/host-guard.d.ts +12 -0
  30. package/dist/local-web/host-guard.d.ts.map +1 -0
  31. package/dist/local-web/host-guard.js +18 -0
  32. package/dist/local-web/host-guard.js.map +1 -0
  33. package/dist/local-web/index.d.ts +23 -0
  34. package/dist/local-web/index.d.ts.map +1 -0
  35. package/dist/local-web/index.js +23 -0
  36. package/dist/local-web/index.js.map +1 -0
  37. package/dist/local-web/local-server.d.ts +37 -0
  38. package/dist/local-web/local-server.d.ts.map +1 -0
  39. package/dist/local-web/local-server.js +85 -0
  40. package/dist/local-web/local-server.js.map +1 -0
  41. package/dist/local-web/open-browser.d.ts +12 -0
  42. package/dist/local-web/open-browser.d.ts.map +1 -0
  43. package/dist/{orchviz/open-url.js → local-web/open-browser.js} +9 -8
  44. package/dist/local-web/open-browser.js.map +1 -0
  45. package/dist/local-web/origin-guard.d.ts +11 -0
  46. package/dist/local-web/origin-guard.d.ts.map +1 -0
  47. package/dist/local-web/origin-guard.js +15 -0
  48. package/dist/local-web/origin-guard.js.map +1 -0
  49. package/dist/local-web/path-boundary.d.ts +20 -0
  50. package/dist/local-web/path-boundary.d.ts.map +1 -0
  51. package/dist/local-web/path-boundary.js +39 -0
  52. package/dist/local-web/path-boundary.js.map +1 -0
  53. package/dist/local-web/request-body.d.ts +24 -0
  54. package/dist/local-web/request-body.d.ts.map +1 -0
  55. package/dist/local-web/request-body.js +68 -0
  56. package/dist/local-web/request-body.js.map +1 -0
  57. package/dist/local-web/static-handler.d.ts +14 -0
  58. package/dist/local-web/static-handler.d.ts.map +1 -0
  59. package/dist/{orchviz/server → local-web}/static-handler.js +11 -6
  60. package/dist/local-web/static-handler.js.map +1 -0
  61. package/dist/migrate/reconcile/portable-manifest.d.ts +12 -12
  62. package/dist/migrate/reconcile/portable-registry.d.ts +24 -24
  63. package/dist/migrate/types.d.ts +10 -10
  64. package/dist/{orchviz/token-estimator.d.ts → token-estimator/index.d.ts} +6 -1
  65. package/dist/token-estimator/index.d.ts.map +1 -0
  66. package/dist/{orchviz/token-estimator.js → token-estimator/index.js} +11 -2
  67. package/dist/token-estimator/index.js.map +1 -0
  68. package/dist/visual-plan/__fixtures__/valid-plan.d.ts +15 -0
  69. package/dist/visual-plan/__fixtures__/valid-plan.d.ts.map +1 -0
  70. package/dist/visual-plan/__fixtures__/valid-plan.js +79 -0
  71. package/dist/visual-plan/__fixtures__/valid-plan.js.map +1 -0
  72. package/dist/visual-plan/application/apply-feedback.d.ts +31 -0
  73. package/dist/visual-plan/application/apply-feedback.d.ts.map +1 -0
  74. package/dist/visual-plan/application/apply-feedback.js +85 -0
  75. package/dist/visual-plan/application/apply-feedback.js.map +1 -0
  76. package/dist/visual-plan/application/apply-patch-op.d.ts +13 -0
  77. package/dist/visual-plan/application/apply-patch-op.d.ts.map +1 -0
  78. package/dist/visual-plan/application/apply-patch-op.js +72 -0
  79. package/dist/visual-plan/application/apply-patch-op.js.map +1 -0
  80. package/dist/visual-plan/application/approve.d.ts +24 -0
  81. package/dist/visual-plan/application/approve.d.ts.map +1 -0
  82. package/dist/visual-plan/application/approve.js +53 -0
  83. package/dist/visual-plan/application/approve.js.map +1 -0
  84. package/dist/visual-plan/application/clock.d.ts +8 -0
  85. package/dist/visual-plan/application/clock.d.ts.map +1 -0
  86. package/dist/visual-plan/application/clock.js +10 -0
  87. package/dist/visual-plan/application/clock.js.map +1 -0
  88. package/dist/visual-plan/application/export-plan.d.ts +19 -0
  89. package/dist/visual-plan/application/export-plan.d.ts.map +1 -0
  90. package/dist/visual-plan/application/export-plan.js +74 -0
  91. package/dist/visual-plan/application/export-plan.js.map +1 -0
  92. package/dist/visual-plan/application/patch-plan.d.ts +26 -0
  93. package/dist/visual-plan/application/patch-plan.d.ts.map +1 -0
  94. package/dist/visual-plan/application/patch-plan.js +48 -0
  95. package/dist/visual-plan/application/patch-plan.js.map +1 -0
  96. package/dist/visual-plan/application/prepare-feedback.d.ts +24 -0
  97. package/dist/visual-plan/application/prepare-feedback.d.ts.map +1 -0
  98. package/dist/visual-plan/application/prepare-feedback.js +70 -0
  99. package/dist/visual-plan/application/prepare-feedback.js.map +1 -0
  100. package/dist/visual-plan/application/rehash.d.ts +19 -0
  101. package/dist/visual-plan/application/rehash.d.ts.map +1 -0
  102. package/dist/visual-plan/application/rehash.js +43 -0
  103. package/dist/visual-plan/application/rehash.js.map +1 -0
  104. package/dist/visual-plan/application/status.d.ts +20 -0
  105. package/dist/visual-plan/application/status.d.ts.map +1 -0
  106. package/dist/visual-plan/application/status.js +27 -0
  107. package/dist/visual-plan/application/status.js.map +1 -0
  108. package/dist/visual-plan/application/validate-plan.d.ts +30 -0
  109. package/dist/visual-plan/application/validate-plan.d.ts.map +1 -0
  110. package/dist/visual-plan/application/validate-plan.js +59 -0
  111. package/dist/visual-plan/application/validate-plan.js.map +1 -0
  112. package/dist/visual-plan/domain/coverage.d.ts +35 -0
  113. package/dist/visual-plan/domain/coverage.d.ts.map +1 -0
  114. package/dist/visual-plan/domain/coverage.js +99 -0
  115. package/dist/visual-plan/domain/coverage.js.map +1 -0
  116. package/dist/visual-plan/domain/cross-refs.d.ts +20 -0
  117. package/dist/visual-plan/domain/cross-refs.d.ts.map +1 -0
  118. package/dist/visual-plan/domain/cross-refs.js +92 -0
  119. package/dist/visual-plan/domain/cross-refs.js.map +1 -0
  120. package/dist/visual-plan/domain/errors.d.ts +43 -0
  121. package/dist/visual-plan/domain/errors.d.ts.map +1 -0
  122. package/dist/visual-plan/domain/errors.js +33 -0
  123. package/dist/visual-plan/domain/errors.js.map +1 -0
  124. package/dist/visual-plan/domain/feedback-schemas.d.ts +160 -0
  125. package/dist/visual-plan/domain/feedback-schemas.d.ts.map +1 -0
  126. package/dist/visual-plan/domain/feedback-schemas.js +71 -0
  127. package/dist/visual-plan/domain/feedback-schemas.js.map +1 -0
  128. package/dist/visual-plan/domain/ids.d.ts +21 -0
  129. package/dist/visual-plan/domain/ids.d.ts.map +1 -0
  130. package/dist/visual-plan/domain/ids.js +25 -0
  131. package/dist/visual-plan/domain/ids.js.map +1 -0
  132. package/dist/visual-plan/domain/patches.d.ts +176 -0
  133. package/dist/visual-plan/domain/patches.d.ts.map +1 -0
  134. package/dist/visual-plan/domain/patches.js +41 -0
  135. package/dist/visual-plan/domain/patches.js.map +1 -0
  136. package/dist/visual-plan/domain/sanitizer-config.d.ts +61 -0
  137. package/dist/visual-plan/domain/sanitizer-config.d.ts.map +1 -0
  138. package/dist/visual-plan/domain/sanitizer-config.js +70 -0
  139. package/dist/visual-plan/domain/sanitizer-config.js.map +1 -0
  140. package/dist/visual-plan/domain/schemas.d.ts +1492 -0
  141. package/dist/visual-plan/domain/schemas.d.ts.map +1 -0
  142. package/dist/visual-plan/domain/schemas.js +166 -0
  143. package/dist/visual-plan/domain/schemas.js.map +1 -0
  144. package/dist/visual-plan/domain/wireframe-theme.d.ts +24 -0
  145. package/dist/visual-plan/domain/wireframe-theme.d.ts.map +1 -0
  146. package/dist/visual-plan/domain/wireframe-theme.js +169 -0
  147. package/dist/visual-plan/domain/wireframe-theme.js.map +1 -0
  148. package/dist/visual-plan/infrastructure/atomic-write.d.ts +11 -0
  149. package/dist/visual-plan/infrastructure/atomic-write.d.ts.map +1 -0
  150. package/dist/visual-plan/infrastructure/atomic-write.js +44 -0
  151. package/dist/visual-plan/infrastructure/atomic-write.js.map +1 -0
  152. package/dist/visual-plan/infrastructure/feedback-repository.d.ts +18 -0
  153. package/dist/visual-plan/infrastructure/feedback-repository.d.ts.map +1 -0
  154. package/dist/visual-plan/infrastructure/feedback-repository.js +59 -0
  155. package/dist/visual-plan/infrastructure/feedback-repository.js.map +1 -0
  156. package/dist/visual-plan/infrastructure/hashing.d.ts +37 -0
  157. package/dist/visual-plan/infrastructure/hashing.d.ts.map +1 -0
  158. package/dist/visual-plan/infrastructure/hashing.js +81 -0
  159. package/dist/visual-plan/infrastructure/hashing.js.map +1 -0
  160. package/dist/visual-plan/infrastructure/plan-state.d.ts +32 -0
  161. package/dist/visual-plan/infrastructure/plan-state.d.ts.map +1 -0
  162. package/dist/visual-plan/infrastructure/plan-state.js +58 -0
  163. package/dist/visual-plan/infrastructure/plan-state.js.map +1 -0
  164. package/dist/visual-plan/infrastructure/receipt-repository.d.ts +17 -0
  165. package/dist/visual-plan/infrastructure/receipt-repository.d.ts.map +1 -0
  166. package/dist/visual-plan/infrastructure/receipt-repository.js +59 -0
  167. package/dist/visual-plan/infrastructure/receipt-repository.js.map +1 -0
  168. package/dist/visual-plan/infrastructure/visual-plan-repository.d.ts +38 -0
  169. package/dist/visual-plan/infrastructure/visual-plan-repository.d.ts.map +1 -0
  170. package/dist/visual-plan/infrastructure/visual-plan-repository.js +97 -0
  171. package/dist/visual-plan/infrastructure/visual-plan-repository.js.map +1 -0
  172. package/dist/visual-plan/infrastructure/wireframe-sanitizer.d.ts +41 -0
  173. package/dist/visual-plan/infrastructure/wireframe-sanitizer.d.ts.map +1 -0
  174. package/dist/visual-plan/infrastructure/wireframe-sanitizer.js +72 -0
  175. package/dist/visual-plan/infrastructure/wireframe-sanitizer.js.map +1 -0
  176. package/dist/visual-plan/interface/cli.d.ts +29 -0
  177. package/dist/visual-plan/interface/cli.d.ts.map +1 -0
  178. package/dist/visual-plan/interface/cli.js +280 -0
  179. package/dist/visual-plan/interface/cli.js.map +1 -0
  180. package/dist/visual-plan/interface/studio.d.ts +20 -0
  181. package/dist/visual-plan/interface/studio.d.ts.map +1 -0
  182. package/dist/visual-plan/interface/studio.js +74 -0
  183. package/dist/visual-plan/interface/studio.js.map +1 -0
  184. package/dist/visual-plan/server/csp.d.ts +13 -0
  185. package/dist/visual-plan/server/csp.d.ts.map +1 -0
  186. package/dist/visual-plan/server/csp.js +17 -0
  187. package/dist/visual-plan/server/csp.js.map +1 -0
  188. package/dist/visual-plan/server/edit-lock.d.ts +28 -0
  189. package/dist/visual-plan/server/edit-lock.d.ts.map +1 -0
  190. package/dist/visual-plan/server/edit-lock.js +71 -0
  191. package/dist/visual-plan/server/edit-lock.js.map +1 -0
  192. package/dist/visual-plan/server/routes/feedback.d.ts +12 -0
  193. package/dist/visual-plan/server/routes/feedback.d.ts.map +1 -0
  194. package/dist/visual-plan/server/routes/feedback.js +63 -0
  195. package/dist/visual-plan/server/routes/feedback.js.map +1 -0
  196. package/dist/visual-plan/server/routes/get-plan.d.ts +14 -0
  197. package/dist/visual-plan/server/routes/get-plan.d.ts.map +1 -0
  198. package/dist/visual-plan/server/routes/get-plan.js +38 -0
  199. package/dist/visual-plan/server/routes/get-plan.js.map +1 -0
  200. package/dist/visual-plan/server/routes/patch.d.ts +10 -0
  201. package/dist/visual-plan/server/routes/patch.d.ts.map +1 -0
  202. package/dist/visual-plan/server/routes/patch.js +66 -0
  203. package/dist/visual-plan/server/routes/patch.js.map +1 -0
  204. package/dist/visual-plan/server/visual-plan-server.d.ts +30 -0
  205. package/dist/visual-plan/server/visual-plan-server.d.ts.map +1 -0
  206. package/dist/visual-plan/server/visual-plan-server.js +79 -0
  207. package/dist/visual-plan/server/visual-plan-server.js.map +1 -0
  208. package/dist/visual-plan-web/architects-daughter-latin-400-normal.woff +0 -0
  209. package/dist/visual-plan-web/architects-daughter-latin-400-normal.woff2 +0 -0
  210. package/dist/visual-plan-web/architects-daughter-latin-ext-400-normal.woff +0 -0
  211. package/dist/visual-plan-web/architects-daughter-latin-ext-400-normal.woff2 +0 -0
  212. package/dist/visual-plan-web/index.css +1 -0
  213. package/dist/visual-plan-web/index.html +17 -0
  214. package/dist/visual-plan-web/index.js +187 -0
  215. package/package.json +15 -18
  216. package/dist/commands/orchviz.d.ts +0 -12
  217. package/dist/commands/orchviz.d.ts.map +0 -1
  218. package/dist/commands/orchviz.js +0 -157
  219. package/dist/commands/orchviz.js.map +0 -1
  220. package/dist/migrate/converters/md-to-codex-rules.d.ts +0 -10
  221. package/dist/migrate/converters/md-to-codex-rules.d.ts.map +0 -1
  222. package/dist/migrate/converters/md-to-codex-rules.js +0 -133
  223. package/dist/migrate/converters/md-to-codex-rules.js.map +0 -1
  224. package/dist/orchviz/constants.d.ts +0 -72
  225. package/dist/orchviz/constants.d.ts.map +0 -1
  226. package/dist/orchviz/constants.js +0 -105
  227. package/dist/orchviz/constants.js.map +0 -1
  228. package/dist/orchviz/fs-utils.d.ts +0 -24
  229. package/dist/orchviz/fs-utils.d.ts.map +0 -1
  230. package/dist/orchviz/fs-utils.js +0 -49
  231. package/dist/orchviz/fs-utils.js.map +0 -1
  232. package/dist/orchviz/index.d.ts +0 -29
  233. package/dist/orchviz/index.d.ts.map +0 -1
  234. package/dist/orchviz/index.js +0 -28
  235. package/dist/orchviz/index.js.map +0 -1
  236. package/dist/orchviz/log-persister.d.ts +0 -22
  237. package/dist/orchviz/log-persister.d.ts.map +0 -1
  238. package/dist/orchviz/log-persister.js +0 -96
  239. package/dist/orchviz/log-persister.js.map +0 -1
  240. package/dist/orchviz/logger.d.ts +0 -13
  241. package/dist/orchviz/logger.d.ts.map +0 -1
  242. package/dist/orchviz/logger.js +0 -47
  243. package/dist/orchviz/logger.js.map +0 -1
  244. package/dist/orchviz/open-url.d.ts +0 -11
  245. package/dist/orchviz/open-url.d.ts.map +0 -1
  246. package/dist/orchviz/open-url.js.map +0 -1
  247. package/dist/orchviz/overlay/collector.d.ts +0 -29
  248. package/dist/orchviz/overlay/collector.d.ts.map +0 -1
  249. package/dist/orchviz/overlay/collector.js +0 -38
  250. package/dist/orchviz/overlay/collector.js.map +0 -1
  251. package/dist/orchviz/overlay/gate-readers.d.ts +0 -18
  252. package/dist/orchviz/overlay/gate-readers.d.ts.map +0 -1
  253. package/dist/orchviz/overlay/gate-readers.js +0 -111
  254. package/dist/orchviz/overlay/gate-readers.js.map +0 -1
  255. package/dist/orchviz/overlay/session-state-readers.d.ts +0 -18
  256. package/dist/orchviz/overlay/session-state-readers.d.ts.map +0 -1
  257. package/dist/orchviz/overlay/session-state-readers.js +0 -78
  258. package/dist/orchviz/overlay/session-state-readers.js.map +0 -1
  259. package/dist/orchviz/parser/handle-progress.d.ts +0 -9
  260. package/dist/orchviz/parser/handle-progress.d.ts.map +0 -1
  261. package/dist/orchviz/parser/handle-progress.js +0 -38
  262. package/dist/orchviz/parser/handle-progress.js.map +0 -1
  263. package/dist/orchviz/parser/handle-system.d.ts +0 -22
  264. package/dist/orchviz/parser/handle-system.d.ts.map +0 -1
  265. package/dist/orchviz/parser/handle-system.js +0 -99
  266. package/dist/orchviz/parser/handle-system.js.map +0 -1
  267. package/dist/orchviz/parser/handle-text.d.ts +0 -10
  268. package/dist/orchviz/parser/handle-text.d.ts.map +0 -1
  269. package/dist/orchviz/parser/handle-text.js +0 -83
  270. package/dist/orchviz/parser/handle-text.js.map +0 -1
  271. package/dist/orchviz/parser/handle-thinking.d.ts +0 -10
  272. package/dist/orchviz/parser/handle-thinking.d.ts.map +0 -1
  273. package/dist/orchviz/parser/handle-thinking.js +0 -35
  274. package/dist/orchviz/parser/handle-thinking.js.map +0 -1
  275. package/dist/orchviz/parser/handle-tool-result.d.ts +0 -10
  276. package/dist/orchviz/parser/handle-tool-result.d.ts.map +0 -1
  277. package/dist/orchviz/parser/handle-tool-result.js +0 -130
  278. package/dist/orchviz/parser/handle-tool-result.js.map +0 -1
  279. package/dist/orchviz/parser/handle-tool-use.d.ts +0 -11
  280. package/dist/orchviz/parser/handle-tool-use.d.ts.map +0 -1
  281. package/dist/orchviz/parser/handle-tool-use.js +0 -120
  282. package/dist/orchviz/parser/handle-tool-use.js.map +0 -1
  283. package/dist/orchviz/parser/index.d.ts +0 -38
  284. package/dist/orchviz/parser/index.d.ts.map +0 -1
  285. package/dist/orchviz/parser/index.js +0 -144
  286. package/dist/orchviz/parser/index.js.map +0 -1
  287. package/dist/orchviz/parser/label-helpers.d.ts +0 -9
  288. package/dist/orchviz/parser/label-helpers.d.ts.map +0 -1
  289. package/dist/orchviz/parser/label-helpers.js +0 -44
  290. package/dist/orchviz/parser/label-helpers.js.map +0 -1
  291. package/dist/orchviz/parser/strip-ansi.d.ts +0 -6
  292. package/dist/orchviz/parser/strip-ansi.d.ts.map +0 -1
  293. package/dist/orchviz/parser/strip-ansi.js +0 -14
  294. package/dist/orchviz/parser/strip-ansi.js.map +0 -1
  295. package/dist/orchviz/parser/utils.d.ts +0 -20
  296. package/dist/orchviz/parser/utils.d.ts.map +0 -1
  297. package/dist/orchviz/parser/utils.js +0 -54
  298. package/dist/orchviz/parser/utils.js.map +0 -1
  299. package/dist/orchviz/permission-detection.d.ts +0 -32
  300. package/dist/orchviz/permission-detection.d.ts.map +0 -1
  301. package/dist/orchviz/permission-detection.js +0 -104
  302. package/dist/orchviz/permission-detection.js.map +0 -1
  303. package/dist/orchviz/plan/apply-todo-toggle.d.ts +0 -29
  304. package/dist/orchviz/plan/apply-todo-toggle.d.ts.map +0 -1
  305. package/dist/orchviz/plan/apply-todo-toggle.js +0 -129
  306. package/dist/orchviz/plan/apply-todo-toggle.js.map +0 -1
  307. package/dist/orchviz/plan/atomic-write.d.ts +0 -25
  308. package/dist/orchviz/plan/atomic-write.d.ts.map +0 -1
  309. package/dist/orchviz/plan/atomic-write.js +0 -85
  310. package/dist/orchviz/plan/atomic-write.js.map +0 -1
  311. package/dist/orchviz/plan/collector.d.ts +0 -49
  312. package/dist/orchviz/plan/collector.d.ts.map +0 -1
  313. package/dist/orchviz/plan/collector.js +0 -169
  314. package/dist/orchviz/plan/collector.js.map +0 -1
  315. package/dist/orchviz/plan/etag.d.ts +0 -24
  316. package/dist/orchviz/plan/etag.d.ts.map +0 -1
  317. package/dist/orchviz/plan/etag.js +0 -58
  318. package/dist/orchviz/plan/etag.js.map +0 -1
  319. package/dist/orchviz/plan/find-active-plan.d.ts +0 -9
  320. package/dist/orchviz/plan/find-active-plan.d.ts.map +0 -1
  321. package/dist/orchviz/plan/find-active-plan.js +0 -90
  322. package/dist/orchviz/plan/find-active-plan.js.map +0 -1
  323. package/dist/orchviz/plan/index.d.ts +0 -23
  324. package/dist/orchviz/plan/index.d.ts.map +0 -1
  325. package/dist/orchviz/plan/index.js +0 -91
  326. package/dist/orchviz/plan/index.js.map +0 -1
  327. package/dist/orchviz/plan/list-plans.d.ts +0 -19
  328. package/dist/orchviz/plan/list-plans.d.ts.map +0 -1
  329. package/dist/orchviz/plan/list-plans.js +0 -143
  330. package/dist/orchviz/plan/list-plans.js.map +0 -1
  331. package/dist/orchviz/plan/parse-phase-file.d.ts +0 -13
  332. package/dist/orchviz/plan/parse-phase-file.d.ts.map +0 -1
  333. package/dist/orchviz/plan/parse-phase-file.js +0 -134
  334. package/dist/orchviz/plan/parse-phase-file.js.map +0 -1
  335. package/dist/orchviz/plan/parse-plan-file.d.ts +0 -19
  336. package/dist/orchviz/plan/parse-plan-file.d.ts.map +0 -1
  337. package/dist/orchviz/plan/parse-plan-file.js +0 -62
  338. package/dist/orchviz/plan/parse-plan-file.js.map +0 -1
  339. package/dist/orchviz/plan/plan-constants.d.ts +0 -17
  340. package/dist/orchviz/plan/plan-constants.d.ts.map +0 -1
  341. package/dist/orchviz/plan/plan-constants.js +0 -19
  342. package/dist/orchviz/plan/plan-constants.js.map +0 -1
  343. package/dist/orchviz/plan/plan-lifecycle.d.ts +0 -17
  344. package/dist/orchviz/plan/plan-lifecycle.d.ts.map +0 -1
  345. package/dist/orchviz/plan/plan-lifecycle.js +0 -97
  346. package/dist/orchviz/plan/plan-lifecycle.js.map +0 -1
  347. package/dist/orchviz/plan/types.d.ts +0 -46
  348. package/dist/orchviz/plan/types.d.ts.map +0 -1
  349. package/dist/orchviz/plan/types.js +0 -6
  350. package/dist/orchviz/plan/types.js.map +0 -1
  351. package/dist/orchviz/protocol.d.ts +0 -171
  352. package/dist/orchviz/protocol.d.ts.map +0 -1
  353. package/dist/orchviz/protocol.js +0 -23
  354. package/dist/orchviz/protocol.js.map +0 -1
  355. package/dist/orchviz/redact.d.ts +0 -10
  356. package/dist/orchviz/redact.d.ts.map +0 -1
  357. package/dist/orchviz/redact.js +0 -38
  358. package/dist/orchviz/redact.js.map +0 -1
  359. package/dist/orchviz/sanitize.d.ts +0 -11
  360. package/dist/orchviz/sanitize.d.ts.map +0 -1
  361. package/dist/orchviz/sanitize.js +0 -38
  362. package/dist/orchviz/sanitize.js.map +0 -1
  363. package/dist/orchviz/server/api-handlers.d.ts +0 -55
  364. package/dist/orchviz/server/api-handlers.d.ts.map +0 -1
  365. package/dist/orchviz/server/api-handlers.js +0 -112
  366. package/dist/orchviz/server/api-handlers.js.map +0 -1
  367. package/dist/orchviz/server/index.d.ts +0 -36
  368. package/dist/orchviz/server/index.d.ts.map +0 -1
  369. package/dist/orchviz/server/index.js +0 -144
  370. package/dist/orchviz/server/index.js.map +0 -1
  371. package/dist/orchviz/server/sse-handler.d.ts +0 -28
  372. package/dist/orchviz/server/sse-handler.d.ts.map +0 -1
  373. package/dist/orchviz/server/sse-handler.js +0 -217
  374. package/dist/orchviz/server/sse-handler.js.map +0 -1
  375. package/dist/orchviz/server/static-handler.d.ts +0 -9
  376. package/dist/orchviz/server/static-handler.d.ts.map +0 -1
  377. package/dist/orchviz/server/static-handler.js.map +0 -1
  378. package/dist/orchviz/server/write-handlers.d.ts +0 -20
  379. package/dist/orchviz/server/write-handlers.d.ts.map +0 -1
  380. package/dist/orchviz/server/write-handlers.js +0 -184
  381. package/dist/orchviz/server/write-handlers.js.map +0 -1
  382. package/dist/orchviz/server/write-utils.d.ts +0 -59
  383. package/dist/orchviz/server/write-utils.d.ts.map +0 -1
  384. package/dist/orchviz/server/write-utils.js +0 -161
  385. package/dist/orchviz/server/write-utils.js.map +0 -1
  386. package/dist/orchviz/session-discovery.d.ts +0 -19
  387. package/dist/orchviz/session-discovery.d.ts.map +0 -1
  388. package/dist/orchviz/session-discovery.js +0 -104
  389. package/dist/orchviz/session-discovery.js.map +0 -1
  390. package/dist/orchviz/session-manager.d.ts +0 -17
  391. package/dist/orchviz/session-manager.d.ts.map +0 -1
  392. package/dist/orchviz/session-manager.js +0 -63
  393. package/dist/orchviz/session-manager.js.map +0 -1
  394. package/dist/orchviz/session-runtime.d.ts +0 -21
  395. package/dist/orchviz/session-runtime.d.ts.map +0 -1
  396. package/dist/orchviz/session-runtime.js +0 -135
  397. package/dist/orchviz/session-runtime.js.map +0 -1
  398. package/dist/orchviz/session-watcher.d.ts +0 -33
  399. package/dist/orchviz/session-watcher.d.ts.map +0 -1
  400. package/dist/orchviz/session-watcher.js +0 -135
  401. package/dist/orchviz/session-watcher.js.map +0 -1
  402. package/dist/orchviz/subagent-meta.d.ts +0 -12
  403. package/dist/orchviz/subagent-meta.d.ts.map +0 -1
  404. package/dist/orchviz/subagent-meta.js +0 -34
  405. package/dist/orchviz/subagent-meta.js.map +0 -1
  406. package/dist/orchviz/subagent-scanner.d.ts +0 -15
  407. package/dist/orchviz/subagent-scanner.d.ts.map +0 -1
  408. package/dist/orchviz/subagent-scanner.js +0 -27
  409. package/dist/orchviz/subagent-scanner.js.map +0 -1
  410. package/dist/orchviz/subagent-watcher.d.ts +0 -20
  411. package/dist/orchviz/subagent-watcher.d.ts.map +0 -1
  412. package/dist/orchviz/subagent-watcher.js +0 -160
  413. package/dist/orchviz/subagent-watcher.js.map +0 -1
  414. package/dist/orchviz/token-estimator.d.ts.map +0 -1
  415. package/dist/orchviz/token-estimator.js.map +0 -1
  416. package/dist/orchviz/tool-input-data.d.ts +0 -11
  417. package/dist/orchviz/tool-input-data.d.ts.map +0 -1
  418. package/dist/orchviz/tool-input-data.js +0 -74
  419. package/dist/orchviz/tool-input-data.js.map +0 -1
  420. package/dist/orchviz/tool-summarizer.d.ts +0 -16
  421. package/dist/orchviz/tool-summarizer.d.ts.map +0 -1
  422. package/dist/orchviz/tool-summarizer.js +0 -129
  423. package/dist/orchviz/tool-summarizer.js.map +0 -1
  424. package/dist/orchviz-web/fira-code-cyrillic-400-normal.woff +0 -0
  425. package/dist/orchviz-web/fira-code-cyrillic-400-normal.woff2 +0 -0
  426. package/dist/orchviz-web/fira-code-cyrillic-500-normal.woff +0 -0
  427. package/dist/orchviz-web/fira-code-cyrillic-500-normal.woff2 +0 -0
  428. package/dist/orchviz-web/fira-code-cyrillic-ext-400-normal.woff +0 -0
  429. package/dist/orchviz-web/fira-code-cyrillic-ext-400-normal.woff2 +0 -0
  430. package/dist/orchviz-web/fira-code-cyrillic-ext-500-normal.woff +0 -0
  431. package/dist/orchviz-web/fira-code-cyrillic-ext-500-normal.woff2 +0 -0
  432. package/dist/orchviz-web/fira-code-greek-400-normal.woff +0 -0
  433. package/dist/orchviz-web/fira-code-greek-400-normal.woff2 +0 -0
  434. package/dist/orchviz-web/fira-code-greek-500-normal.woff +0 -0
  435. package/dist/orchviz-web/fira-code-greek-500-normal.woff2 +0 -0
  436. package/dist/orchviz-web/fira-code-greek-ext-400-normal.woff +0 -0
  437. package/dist/orchviz-web/fira-code-greek-ext-400-normal.woff2 +0 -0
  438. package/dist/orchviz-web/fira-code-greek-ext-500-normal.woff +0 -0
  439. package/dist/orchviz-web/fira-code-greek-ext-500-normal.woff2 +0 -0
  440. package/dist/orchviz-web/fira-code-latin-400-normal.woff +0 -0
  441. package/dist/orchviz-web/fira-code-latin-400-normal.woff2 +0 -0
  442. package/dist/orchviz-web/fira-code-latin-500-normal.woff +0 -0
  443. package/dist/orchviz-web/fira-code-latin-500-normal.woff2 +0 -0
  444. package/dist/orchviz-web/fira-code-latin-ext-400-normal.woff +0 -0
  445. package/dist/orchviz-web/fira-code-latin-ext-400-normal.woff2 +0 -0
  446. package/dist/orchviz-web/fira-code-latin-ext-500-normal.woff +0 -0
  447. package/dist/orchviz-web/fira-code-latin-ext-500-normal.woff2 +0 -0
  448. package/dist/orchviz-web/fira-code-symbols2-400-normal.woff +0 -0
  449. package/dist/orchviz-web/fira-code-symbols2-500-normal.woff +0 -0
  450. package/dist/orchviz-web/index.css +0 -1
  451. package/dist/orchviz-web/index.html +0 -18
  452. package/dist/orchviz-web/index.js +0 -53
  453. package/dist/orchviz-web/inter-cyrillic-400-normal.woff +0 -0
  454. package/dist/orchviz-web/inter-cyrillic-400-normal.woff2 +0 -0
  455. package/dist/orchviz-web/inter-cyrillic-500-normal.woff +0 -0
  456. package/dist/orchviz-web/inter-cyrillic-500-normal.woff2 +0 -0
  457. package/dist/orchviz-web/inter-cyrillic-600-normal.woff +0 -0
  458. package/dist/orchviz-web/inter-cyrillic-600-normal.woff2 +0 -0
  459. package/dist/orchviz-web/inter-cyrillic-ext-400-normal.woff +0 -0
  460. package/dist/orchviz-web/inter-cyrillic-ext-400-normal.woff2 +0 -0
  461. package/dist/orchviz-web/inter-cyrillic-ext-500-normal.woff +0 -0
  462. package/dist/orchviz-web/inter-cyrillic-ext-500-normal.woff2 +0 -0
  463. package/dist/orchviz-web/inter-cyrillic-ext-600-normal.woff +0 -0
  464. package/dist/orchviz-web/inter-cyrillic-ext-600-normal.woff2 +0 -0
  465. package/dist/orchviz-web/inter-greek-400-normal.woff +0 -0
  466. package/dist/orchviz-web/inter-greek-400-normal.woff2 +0 -0
  467. package/dist/orchviz-web/inter-greek-500-normal.woff +0 -0
  468. package/dist/orchviz-web/inter-greek-500-normal.woff2 +0 -0
  469. package/dist/orchviz-web/inter-greek-600-normal.woff +0 -0
  470. package/dist/orchviz-web/inter-greek-600-normal.woff2 +0 -0
  471. package/dist/orchviz-web/inter-greek-ext-400-normal.woff +0 -0
  472. package/dist/orchviz-web/inter-greek-ext-400-normal.woff2 +0 -0
  473. package/dist/orchviz-web/inter-greek-ext-500-normal.woff +0 -0
  474. package/dist/orchviz-web/inter-greek-ext-500-normal.woff2 +0 -0
  475. package/dist/orchviz-web/inter-greek-ext-600-normal.woff +0 -0
  476. package/dist/orchviz-web/inter-greek-ext-600-normal.woff2 +0 -0
  477. package/dist/orchviz-web/inter-latin-400-normal.woff +0 -0
  478. package/dist/orchviz-web/inter-latin-400-normal.woff2 +0 -0
  479. package/dist/orchviz-web/inter-latin-500-normal.woff +0 -0
  480. package/dist/orchviz-web/inter-latin-500-normal.woff2 +0 -0
  481. package/dist/orchviz-web/inter-latin-600-normal.woff +0 -0
  482. package/dist/orchviz-web/inter-latin-600-normal.woff2 +0 -0
  483. package/dist/orchviz-web/inter-latin-ext-400-normal.woff +0 -0
  484. package/dist/orchviz-web/inter-latin-ext-400-normal.woff2 +0 -0
  485. package/dist/orchviz-web/inter-latin-ext-500-normal.woff +0 -0
  486. package/dist/orchviz-web/inter-latin-ext-500-normal.woff2 +0 -0
  487. package/dist/orchviz-web/inter-latin-ext-600-normal.woff +0 -0
  488. package/dist/orchviz-web/inter-latin-ext-600-normal.woff2 +0 -0
  489. package/dist/orchviz-web/inter-vietnamese-400-normal.woff +0 -0
  490. package/dist/orchviz-web/inter-vietnamese-400-normal.woff2 +0 -0
  491. package/dist/orchviz-web/inter-vietnamese-500-normal.woff +0 -0
  492. package/dist/orchviz-web/inter-vietnamese-500-normal.woff2 +0 -0
  493. package/dist/orchviz-web/inter-vietnamese-600-normal.woff +0 -0
  494. package/dist/orchviz-web/inter-vietnamese-600-normal.woff2 +0 -0
@@ -1,24 +0,0 @@
1
- /**
2
- * ETag helpers — per-phase-file sha256 hash.
3
- *
4
- * Per red-team H2 / R2-2: ETag scope is per-FILE, NOT a bundle hash.
5
- * Concurrent writes to different phases do not produce false 409s.
6
- *
7
- * computePhaseFileEtag(phaseFilePath) → 64-char lowercase hex sha256.
8
- * Missing file → "" (not an error; caller decides how to handle absent files).
9
- *
10
- * computeAllPhaseEtags(planDir) → Record<phaseNumber, hex64>
11
- * for every phase-NN-*.md in the directory.
12
- */
13
- /**
14
- * Compute sha256 of a single phase file's bytes.
15
- * Returns 64-char lowercase hex, or "" if the file cannot be read.
16
- */
17
- export declare function computePhaseFileEtag(phaseFilePath: string): string;
18
- /**
19
- * Compute etags for every phase-NN-*.md file in planDir.
20
- * Returns a Record keyed by phase number (integer).
21
- * Missing or unreadable files are omitted.
22
- */
23
- export declare function computeAllPhaseEtags(planDir: string): Record<number, string>;
24
- //# sourceMappingURL=etag.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"etag.d.ts","sourceRoot":"","sources":["../../../src/orchviz/plan/etag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB5E"}
@@ -1,58 +0,0 @@
1
- /**
2
- * ETag helpers — per-phase-file sha256 hash.
3
- *
4
- * Per red-team H2 / R2-2: ETag scope is per-FILE, NOT a bundle hash.
5
- * Concurrent writes to different phases do not produce false 409s.
6
- *
7
- * computePhaseFileEtag(phaseFilePath) → 64-char lowercase hex sha256.
8
- * Missing file → "" (not an error; caller decides how to handle absent files).
9
- *
10
- * computeAllPhaseEtags(planDir) → Record<phaseNumber, hex64>
11
- * for every phase-NN-*.md in the directory.
12
- */
13
- import * as crypto from "node:crypto";
14
- import * as fs from "node:fs";
15
- import * as path from "node:path";
16
- import { PHASE_FILE_NUM_RE } from "./plan-constants.js";
17
- /**
18
- * Compute sha256 of a single phase file's bytes.
19
- * Returns 64-char lowercase hex, or "" if the file cannot be read.
20
- */
21
- export function computePhaseFileEtag(phaseFilePath) {
22
- let buf;
23
- try {
24
- buf = fs.readFileSync(phaseFilePath);
25
- }
26
- catch {
27
- return "";
28
- }
29
- return crypto.createHash("sha256").update(buf).digest("hex");
30
- }
31
- /**
32
- * Compute etags for every phase-NN-*.md file in planDir.
33
- * Returns a Record keyed by phase number (integer).
34
- * Missing or unreadable files are omitted.
35
- */
36
- export function computeAllPhaseEtags(planDir) {
37
- let entries;
38
- try {
39
- entries = fs.readdirSync(planDir);
40
- }
41
- catch {
42
- return {};
43
- }
44
- const out = {};
45
- for (const name of entries) {
46
- const m = name.match(PHASE_FILE_NUM_RE);
47
- if (!m)
48
- continue;
49
- const phaseNum = parseInt(m[1], 10);
50
- const filePath = path.join(planDir, name);
51
- const etag = computePhaseFileEtag(filePath);
52
- if (etag !== "") {
53
- out[phaseNum] = etag;
54
- }
55
- }
56
- return out;
57
- }
58
- //# sourceMappingURL=etag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"etag.js","sourceRoot":"","sources":["../../../src/orchviz/plan/etag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAAqB;IACzD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IACnD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * findActivePlan — discover the most-recent non-archived plan dir.
3
- *
4
- * Per red-team C1 (orchviz redesign plan): every candidate path is realpath-resolved
5
- * and asserted to live inside `${projectRoot}/tasks/plans/`. Symlinks pointing
6
- * outside the boundary are rejected to prevent path-disclosure via /api/plan.
7
- */
8
- export declare function findActivePlan(projectRoot: string): string | null;
9
- //# sourceMappingURL=find-active-plan.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-active-plan.d.ts","sourceRoot":"","sources":["../../../src/orchviz/plan/find-active-plan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiDjE"}
@@ -1,90 +0,0 @@
1
- /**
2
- * findActivePlan — discover the most-recent non-archived plan dir.
3
- *
4
- * Per red-team C1 (orchviz redesign plan): every candidate path is realpath-resolved
5
- * and asserted to live inside `${projectRoot}/tasks/plans/`. Symlinks pointing
6
- * outside the boundary are rejected to prevent path-disclosure via /api/plan.
7
- */
8
- import * as fs from "node:fs";
9
- import * as path from "node:path";
10
- import yaml from "js-yaml";
11
- import { FRONTMATTER_RE } from "./plan-constants.js";
12
- import { createLogger } from "../logger.js";
13
- const log = createLogger("PlanFinder");
14
- export function findActivePlan(projectRoot) {
15
- const plansDir = path.join(projectRoot, "tasks", "plans");
16
- let resolvedPlansDir;
17
- try {
18
- resolvedPlansDir = fs.realpathSync(plansDir);
19
- }
20
- catch {
21
- return null;
22
- }
23
- const boundary = resolvedPlansDir + path.sep;
24
- let entries;
25
- try {
26
- entries = fs.readdirSync(plansDir, { withFileTypes: true });
27
- }
28
- catch {
29
- return null;
30
- }
31
- const candidates = [];
32
- for (const entry of entries) {
33
- if (!entry.isDirectory())
34
- continue;
35
- const dir = path.join(plansDir, entry.name);
36
- const planFile = path.join(dir, "plan.md");
37
- // Boundary check (red-team C1)
38
- let resolved;
39
- try {
40
- resolved = fs.realpathSync(dir);
41
- }
42
- catch {
43
- continue;
44
- }
45
- if (!(resolved + path.sep).startsWith(boundary)) {
46
- log.warn(`rejecting plan dir outside boundary: ${dir} -> ${resolved}`);
47
- continue;
48
- }
49
- let stat;
50
- try {
51
- stat = fs.statSync(planFile);
52
- }
53
- catch {
54
- continue;
55
- }
56
- if (!stat.isFile())
57
- continue;
58
- if (isArchived(planFile))
59
- continue;
60
- candidates.push({ dir, mtimeMs: stat.mtimeMs });
61
- }
62
- if (candidates.length === 0)
63
- return null;
64
- candidates.sort((a, b) => b.mtimeMs - a.mtimeMs);
65
- return candidates[0].dir;
66
- }
67
- function isArchived(planFile) {
68
- let raw;
69
- try {
70
- raw = fs.readFileSync(planFile, "utf-8");
71
- }
72
- catch {
73
- return false;
74
- }
75
- const fmMatch = raw.match(FRONTMATTER_RE);
76
- if (!fmMatch)
77
- return false;
78
- let parsed;
79
- try {
80
- parsed = yaml.load(fmMatch[1], { schema: yaml.FAILSAFE_SCHEMA });
81
- }
82
- catch {
83
- return false;
84
- }
85
- if (!parsed || typeof parsed !== "object")
86
- return false;
87
- const status = parsed.status;
88
- return typeof status === "string" && status.toLowerCase() === "archived";
89
- }
90
- //# sourceMappingURL=find-active-plan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-active-plan.js","sourceRoot":"","sources":["../../../src/orchviz/plan/find-active-plan.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- /**
2
- * orchviz plan parser — orchestrator for plan + phase files.
3
- *
4
- * Public API:
5
- * - findActivePlan(projectRoot)
6
- * - readPlan(planDir)
7
- *
8
- * Read-only by design. v1.1 does not write to plan files.
9
- */
10
- import type { PlanState } from "./types.js";
11
- export type { PhaseState, PhaseStatus, PlanState, PlanStatus, PlanSummary, TodoItem } from "./types.js";
12
- export { findActivePlan } from "./find-active-plan.js";
13
- export { parsePlanFile, type PlanScaffold } from "./parse-plan-file.js";
14
- export { parsePhaseFile } from "./parse-phase-file.js";
15
- export { listPlans } from "./list-plans.js";
16
- export { computePhaseFileEtag, computeAllPhaseEtags } from "./etag.js";
17
- export declare function readPlan(planDir: string): PlanState | null;
18
- /**
19
- * Compute a cache key from filesystem mtimes (red-team H3).
20
- * Returns a string like "1730403600000:1730403700000" or null if planDir gone.
21
- */
22
- export declare function planMtimeKey(planDir: string): string | null;
23
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orchviz/plan/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,YAAY,CAAC;AAGxD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAQvE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA6C1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa3D"}
@@ -1,91 +0,0 @@
1
- /**
2
- * orchviz plan parser — orchestrator for plan + phase files.
3
- *
4
- * Public API:
5
- * - findActivePlan(projectRoot)
6
- * - readPlan(planDir)
7
- *
8
- * Read-only by design. v1.1 does not write to plan files.
9
- */
10
- import * as fs from "node:fs";
11
- import * as path from "node:path";
12
- import { PHASE_FILE_RE } from "./plan-constants.js";
13
- export { findActivePlan } from "./find-active-plan.js";
14
- export { parsePlanFile } from "./parse-plan-file.js";
15
- export { parsePhaseFile } from "./parse-phase-file.js";
16
- export { listPlans } from "./list-plans.js";
17
- export { computePhaseFileEtag, computeAllPhaseEtags } from "./etag.js";
18
- import { parsePlanFile } from "./parse-plan-file.js";
19
- import { parsePhaseFile } from "./parse-phase-file.js";
20
- import { createLogger } from "../logger.js";
21
- const log = createLogger("PlanReader");
22
- export function readPlan(planDir) {
23
- const scaffold = parsePlanFile(planDir);
24
- if (!scaffold)
25
- return null;
26
- // Use realpathSync for boundary so macOS /var→/private/var symlink doesn't break check
27
- let resolvedPlanDir;
28
- try {
29
- resolvedPlanDir = fs.realpathSync(planDir);
30
- }
31
- catch {
32
- return null;
33
- }
34
- const boundary = resolvedPlanDir + path.sep;
35
- let entries;
36
- try {
37
- entries = fs.readdirSync(planDir);
38
- }
39
- catch {
40
- return null;
41
- }
42
- const phaseFiles = [];
43
- for (const name of entries) {
44
- if (!PHASE_FILE_RE.test(name))
45
- continue;
46
- const full = path.join(planDir, name);
47
- // Boundary check (red-team C1) — defense in depth even though planDir already checked.
48
- let resolved;
49
- try {
50
- resolved = fs.realpathSync(full);
51
- }
52
- catch {
53
- continue;
54
- }
55
- if (!resolved.startsWith(boundary)) {
56
- log.warn(`rejecting phase file outside boundary: ${full}`);
57
- continue;
58
- }
59
- phaseFiles.push(full);
60
- }
61
- const phases = [];
62
- for (const filePath of phaseFiles) {
63
- const phase = parsePhaseFile(filePath);
64
- if (phase)
65
- phases.push(phase);
66
- }
67
- phases.sort((a, b) => a.number - b.number);
68
- return { ...scaffold, phases };
69
- }
70
- /**
71
- * Compute a cache key from filesystem mtimes (red-team H3).
72
- * Returns a string like "1730403600000:1730403700000" or null if planDir gone.
73
- */
74
- export function planMtimeKey(planDir) {
75
- try {
76
- const planStat = fs.statSync(path.join(planDir, "plan.md"));
77
- let maxPhaseMtime = 0;
78
- for (const name of fs.readdirSync(planDir)) {
79
- if (!PHASE_FILE_RE.test(name))
80
- continue;
81
- const stat = fs.statSync(path.join(planDir, name));
82
- if (stat.mtimeMs > maxPhaseMtime)
83
- maxPhaseMtime = stat.mtimeMs;
84
- }
85
- return `${planStat.mtimeMs}:${maxPhaseMtime}`;
86
- }
87
- catch {
88
- return null;
89
- }
90
- }
91
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/orchviz/plan/index.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * listPlans — enumerate all non-archived plan dirs in tasks/plans/.
3
- *
4
- * Per red-team SEC#6: realpath boundary check is applied to EVERY subdir before
5
- * any file inside is read. This mirrors the check in findActivePlan.
6
- *
7
- * Returns up to `limit` (default 100) PlanSummary objects sorted by plan.md
8
- * mtimeMs descending (most recently modified first).
9
- */
10
- import type { PlanSummary } from "./types.js";
11
- export interface ListPlansOptions {
12
- limit?: number;
13
- }
14
- /**
15
- * List all non-archived plans in projectRoot/tasks/plans/.
16
- * Each candidate subdir is realpath-checked against the boundary before read.
17
- */
18
- export declare function listPlans(projectRoot: string, opts?: ListPlansOptions): PlanSummary[];
19
- //# sourceMappingURL=list-plans.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-plans.d.ts","sourceRoot":"","sources":["../../../src/orchviz/plan/list-plans.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;AA6D1D,MAAM,WAAW,gBAAgB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,WAAW,EAAE,CAyEzF"}
@@ -1,143 +0,0 @@
1
- /**
2
- * listPlans — enumerate all non-archived plan dirs in tasks/plans/.
3
- *
4
- * Per red-team SEC#6: realpath boundary check is applied to EVERY subdir before
5
- * any file inside is read. This mirrors the check in findActivePlan.
6
- *
7
- * Returns up to `limit` (default 100) PlanSummary objects sorted by plan.md
8
- * mtimeMs descending (most recently modified first).
9
- */
10
- import * as fs from "node:fs";
11
- import * as path from "node:path";
12
- import yaml from "js-yaml";
13
- import { FRONTMATTER_RE, PHASE_FILE_RE, SLUG_RE } from "./plan-constants.js";
14
- const DEFAULT_LIMIT = 100;
15
- const VALID_PLAN_STATUSES = new Set([
16
- "draft",
17
- "in_progress",
18
- "active",
19
- "completed",
20
- "archived",
21
- "blocked",
22
- "unknown",
23
- ]);
24
- function normalizePlanStatus(raw) {
25
- if (typeof raw !== "string")
26
- return "unknown";
27
- const lower = raw
28
- .toLowerCase()
29
- .replace(/[-\s]+/g, "_")
30
- .trim();
31
- if (VALID_PLAN_STATUSES.has(lower))
32
- return lower;
33
- return "unknown";
34
- }
35
- function parsePlanFrontmatter(planFile) {
36
- let raw;
37
- try {
38
- raw = fs.readFileSync(planFile, "utf-8");
39
- }
40
- catch {
41
- return null;
42
- }
43
- const slug = path.basename(path.dirname(planFile));
44
- const fmMatch = raw.match(FRONTMATTER_RE);
45
- if (!fmMatch) {
46
- return { title: slug, status: "unknown", created: "", effort: "?" };
47
- }
48
- let parsed;
49
- try {
50
- parsed = yaml.load(fmMatch[1], { schema: yaml.FAILSAFE_SCHEMA });
51
- }
52
- catch {
53
- return null;
54
- }
55
- if (!parsed || typeof parsed !== "object") {
56
- return { title: slug, status: "unknown", created: "", effort: "?" };
57
- }
58
- const obj = parsed;
59
- const status = normalizePlanStatus(obj.status);
60
- const title = typeof obj.title === "string" ? obj.title : slug;
61
- const created = typeof obj.created === "string" ? obj.created : typeof obj.created === "number" ? String(obj.created) : "";
62
- const effort = typeof obj.effort === "string" ? obj.effort : typeof obj.effort === "number" ? String(obj.effort) : "?";
63
- return { title, status, created, effort };
64
- }
65
- /**
66
- * List all non-archived plans in projectRoot/tasks/plans/.
67
- * Each candidate subdir is realpath-checked against the boundary before read.
68
- */
69
- export function listPlans(projectRoot, opts = {}) {
70
- const limit = opts.limit ?? DEFAULT_LIMIT;
71
- const plansDir = path.join(projectRoot, "tasks", "plans");
72
- let resolvedPlansDir;
73
- try {
74
- resolvedPlansDir = fs.realpathSync(plansDir);
75
- }
76
- catch {
77
- return [];
78
- }
79
- const boundary = resolvedPlansDir + path.sep;
80
- let entries;
81
- try {
82
- entries = fs.readdirSync(plansDir, { withFileTypes: true });
83
- }
84
- catch {
85
- return [];
86
- }
87
- const results = [];
88
- for (const entry of entries) {
89
- if (!entry.isDirectory())
90
- continue;
91
- if (!SLUG_RE.test(entry.name))
92
- continue;
93
- const dir = path.join(plansDir, entry.name);
94
- let resolved;
95
- try {
96
- resolved = fs.realpathSync(dir);
97
- }
98
- catch {
99
- continue;
100
- }
101
- if (!(resolved + path.sep).startsWith(boundary))
102
- continue;
103
- // One readdir per plan dir — covers both phase-count and (later, if needed)
104
- // any other phase-aware checks. Avoids a second readdirSync.
105
- let dirEntries;
106
- try {
107
- dirEntries = fs.readdirSync(dir);
108
- }
109
- catch {
110
- continue;
111
- }
112
- if (!dirEntries.includes("plan.md"))
113
- continue;
114
- const planFile = path.join(dir, "plan.md");
115
- let planStat;
116
- try {
117
- planStat = fs.statSync(planFile);
118
- }
119
- catch {
120
- continue;
121
- }
122
- if (!planStat.isFile())
123
- continue;
124
- const fm = parsePlanFrontmatter(planFile);
125
- if (!fm)
126
- continue;
127
- if (fm.status === "archived")
128
- continue;
129
- const phaseCount = dirEntries.filter((name) => PHASE_FILE_RE.test(name)).length;
130
- results.push({
131
- slug: entry.name,
132
- title: fm.title,
133
- status: fm.status,
134
- created: fm.created,
135
- effort: fm.effort,
136
- mtimeMs: planStat.mtimeMs,
137
- phaseCount,
138
- });
139
- }
140
- results.sort((a, b) => b.mtimeMs - a.mtimeMs);
141
- return results.slice(0, limit);
142
- }
143
- //# sourceMappingURL=list-plans.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-plans.js","sourceRoot":"","sources":["../../../src/orchviz/plan/list-plans.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * parse-phase-file — extract status + todos + metadata from a phase-NN-*.md file.
3
- *
4
- * Per red-team H1: status extraction tries 3 sources (frontmatter, permissive
5
- * regex against `## Overview`, lowercase scan) before falling back to "unknown"
6
- * — never silently coerce to "pending".
7
- *
8
- * Per red-team C1: caller is responsible for boundary checks before this runs.
9
- * Per red-team M2: frontmatter regex tolerates `\r\n`.
10
- */
11
- import type { PhaseState } from "./types.js";
12
- export declare function parsePhaseFile(filePath: string): PhaseState | null;
13
- //# sourceMappingURL=parse-phase-file.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-phase-file.d.ts","sourceRoot":"","sources":["../../../src/orchviz/plan/parse-phase-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,YAAY,CAAC;AA2BpE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA4DlE"}
@@ -1,134 +0,0 @@
1
- /**
2
- * parse-phase-file — extract status + todos + metadata from a phase-NN-*.md file.
3
- *
4
- * Per red-team H1: status extraction tries 3 sources (frontmatter, permissive
5
- * regex against `## Overview`, lowercase scan) before falling back to "unknown"
6
- * — never silently coerce to "pending".
7
- *
8
- * Per red-team C1: caller is responsible for boundary checks before this runs.
9
- * Per red-team M2: frontmatter regex tolerates `\r\n`.
10
- */
11
- import * as fs from "node:fs";
12
- import * as path from "node:path";
13
- import yaml from "js-yaml";
14
- import { FRONTMATTER_RE } from "./plan-constants.js";
15
- const STATUS_BOLD_RE = /\*+\s*Status\s*:?\s*\*+\s*([A-Za-z_-]+)/i;
16
- const STATUS_PLAIN_RE = /\bstatus\s*:\s*([a-z_-]+)/i;
17
- const TODO_RE = /^\s*-\s*\[(\s|x|X|~|✓)\]\s+(.+?)\s*$/;
18
- const PHASE_NUM_RE = /^phase-(\d+)/;
19
- const HEADING_RE = /^#\s+Phase\s+\d+\s*[:.\-—]?\s*(.+?)\s*$/im;
20
- const VALID_STATUSES = new Set([
21
- "pending",
22
- "active",
23
- "in_progress",
24
- "completed",
25
- "failed",
26
- "abandoned",
27
- "unknown",
28
- ]);
29
- function normalizeStatus(raw) {
30
- const lower = raw.toLowerCase().replace(/\s+/g, "_");
31
- if (VALID_STATUSES.has(lower))
32
- return lower;
33
- if (lower === "in-progress")
34
- return "in_progress";
35
- if (lower === "done")
36
- return "completed";
37
- return "unknown";
38
- }
39
- export function parsePhaseFile(filePath) {
40
- const fileName = path.basename(filePath);
41
- let raw;
42
- try {
43
- raw = fs.readFileSync(filePath, "utf-8");
44
- }
45
- catch {
46
- return null;
47
- }
48
- const numMatch = fileName.match(PHASE_NUM_RE);
49
- const number = numMatch ? parseInt(numMatch[1], 10) : 0;
50
- const abandonedFromName = fileName.toUpperCase().includes("ABANDONED");
51
- let frontmatter = {};
52
- const fmMatch = raw.match(FRONTMATTER_RE);
53
- if (fmMatch) {
54
- try {
55
- const parsed = yaml.load(fmMatch[1], { schema: yaml.FAILSAFE_SCHEMA });
56
- if (parsed && typeof parsed === "object") {
57
- frontmatter = parsed;
58
- }
59
- }
60
- catch {
61
- /* malformed frontmatter; treat as absent */
62
- }
63
- }
64
- const fmStatus = typeof frontmatter.status === "string" ? frontmatter.status.toLowerCase() : null;
65
- const abandoned = abandonedFromName || fmStatus === "abandoned";
66
- let status = "unknown";
67
- if (abandoned) {
68
- status = "abandoned";
69
- }
70
- else if (fmStatus) {
71
- status = normalizeStatus(fmStatus);
72
- }
73
- else {
74
- const boldMatch = raw.match(STATUS_BOLD_RE);
75
- if (boldMatch) {
76
- status = normalizeStatus(boldMatch[1]);
77
- }
78
- else {
79
- const plainMatch = raw.match(STATUS_PLAIN_RE);
80
- if (plainMatch)
81
- status = normalizeStatus(plainMatch[1]);
82
- }
83
- }
84
- const headingMatch = raw.match(HEADING_RE);
85
- const title = headingMatch ? headingMatch[1].trim() : fileName.replace(/\.md$/, "");
86
- const effort = typeof frontmatter.effort === "string" ? frontmatter.effort : (extractEffort(raw) ?? "?");
87
- const todos = extractTodos(raw);
88
- return {
89
- number,
90
- title,
91
- status,
92
- effort,
93
- todos,
94
- filePath,
95
- abandoned,
96
- };
97
- }
98
- function extractEffort(raw) {
99
- const match = raw.match(/\*+\s*Effort\s*:?\s*\*+\s*([^\n*]+?)\s*(?:\(|$)/im);
100
- return match ? match[1].trim() : null;
101
- }
102
- /**
103
- * Extract todos from the ## Todo List section.
104
- *
105
- * Per red-team C1: tracks ``` fence depth and skips checkbox lines inside
106
- * fenced code blocks. This makes the reader's todoIdx consistent with the
107
- * writer's applyTodoToggle walk (Phase 2). Reader and writer use the SAME
108
- * counting logic — only checkboxes OUTSIDE fences are counted.
109
- */
110
- function extractTodos(raw) {
111
- const todoSection = raw.match(/##\s+Todo\s+List\s*\n([\s\S]*?)(?=\n##\s|\n#\s|$)/i);
112
- if (!todoSection)
113
- return [];
114
- const out = [];
115
- let fenceDepth = 0;
116
- for (const line of todoSection[1].split(/\r?\n/)) {
117
- if (/^```/.test(line)) {
118
- fenceDepth = fenceDepth === 0 ? 1 : 0;
119
- continue;
120
- }
121
- if (fenceDepth > 0)
122
- continue;
123
- const m = line.match(TODO_RE);
124
- if (!m)
125
- continue;
126
- const marker = m[1];
127
- const text = m[2].trim();
128
- if (!text)
129
- continue;
130
- out.push({ checked: marker !== " " && marker !== "", text });
131
- }
132
- return out;
133
- }
134
- //# sourceMappingURL=parse-phase-file.js.map