mewkit 1.15.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) 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 +59 -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/infrastructure/atomic-write.d.ts +11 -0
  145. package/dist/visual-plan/infrastructure/atomic-write.d.ts.map +1 -0
  146. package/dist/visual-plan/infrastructure/atomic-write.js +44 -0
  147. package/dist/visual-plan/infrastructure/atomic-write.js.map +1 -0
  148. package/dist/visual-plan/infrastructure/feedback-repository.d.ts +18 -0
  149. package/dist/visual-plan/infrastructure/feedback-repository.d.ts.map +1 -0
  150. package/dist/visual-plan/infrastructure/feedback-repository.js +59 -0
  151. package/dist/visual-plan/infrastructure/feedback-repository.js.map +1 -0
  152. package/dist/visual-plan/infrastructure/hashing.d.ts +37 -0
  153. package/dist/visual-plan/infrastructure/hashing.d.ts.map +1 -0
  154. package/dist/visual-plan/infrastructure/hashing.js +81 -0
  155. package/dist/visual-plan/infrastructure/hashing.js.map +1 -0
  156. package/dist/visual-plan/infrastructure/plan-state.d.ts +32 -0
  157. package/dist/visual-plan/infrastructure/plan-state.d.ts.map +1 -0
  158. package/dist/visual-plan/infrastructure/plan-state.js +58 -0
  159. package/dist/visual-plan/infrastructure/plan-state.js.map +1 -0
  160. package/dist/visual-plan/infrastructure/receipt-repository.d.ts +17 -0
  161. package/dist/visual-plan/infrastructure/receipt-repository.d.ts.map +1 -0
  162. package/dist/visual-plan/infrastructure/receipt-repository.js +59 -0
  163. package/dist/visual-plan/infrastructure/receipt-repository.js.map +1 -0
  164. package/dist/visual-plan/infrastructure/visual-plan-repository.d.ts +38 -0
  165. package/dist/visual-plan/infrastructure/visual-plan-repository.d.ts.map +1 -0
  166. package/dist/visual-plan/infrastructure/visual-plan-repository.js +97 -0
  167. package/dist/visual-plan/infrastructure/visual-plan-repository.js.map +1 -0
  168. package/dist/visual-plan/infrastructure/wireframe-sanitizer.d.ts +41 -0
  169. package/dist/visual-plan/infrastructure/wireframe-sanitizer.d.ts.map +1 -0
  170. package/dist/visual-plan/infrastructure/wireframe-sanitizer.js +72 -0
  171. package/dist/visual-plan/infrastructure/wireframe-sanitizer.js.map +1 -0
  172. package/dist/visual-plan/interface/cli.d.ts +29 -0
  173. package/dist/visual-plan/interface/cli.d.ts.map +1 -0
  174. package/dist/visual-plan/interface/cli.js +280 -0
  175. package/dist/visual-plan/interface/cli.js.map +1 -0
  176. package/dist/visual-plan/interface/studio.d.ts +20 -0
  177. package/dist/visual-plan/interface/studio.d.ts.map +1 -0
  178. package/dist/visual-plan/interface/studio.js +74 -0
  179. package/dist/visual-plan/interface/studio.js.map +1 -0
  180. package/dist/visual-plan/server/csp.d.ts +13 -0
  181. package/dist/visual-plan/server/csp.d.ts.map +1 -0
  182. package/dist/visual-plan/server/csp.js +17 -0
  183. package/dist/visual-plan/server/csp.js.map +1 -0
  184. package/dist/visual-plan/server/edit-lock.d.ts +28 -0
  185. package/dist/visual-plan/server/edit-lock.d.ts.map +1 -0
  186. package/dist/visual-plan/server/edit-lock.js +71 -0
  187. package/dist/visual-plan/server/edit-lock.js.map +1 -0
  188. package/dist/visual-plan/server/routes/feedback.d.ts +12 -0
  189. package/dist/visual-plan/server/routes/feedback.d.ts.map +1 -0
  190. package/dist/visual-plan/server/routes/feedback.js +63 -0
  191. package/dist/visual-plan/server/routes/feedback.js.map +1 -0
  192. package/dist/visual-plan/server/routes/get-plan.d.ts +14 -0
  193. package/dist/visual-plan/server/routes/get-plan.d.ts.map +1 -0
  194. package/dist/visual-plan/server/routes/get-plan.js +38 -0
  195. package/dist/visual-plan/server/routes/get-plan.js.map +1 -0
  196. package/dist/visual-plan/server/routes/patch.d.ts +10 -0
  197. package/dist/visual-plan/server/routes/patch.d.ts.map +1 -0
  198. package/dist/visual-plan/server/routes/patch.js +66 -0
  199. package/dist/visual-plan/server/routes/patch.js.map +1 -0
  200. package/dist/visual-plan/server/visual-plan-server.d.ts +30 -0
  201. package/dist/visual-plan/server/visual-plan-server.d.ts.map +1 -0
  202. package/dist/visual-plan/server/visual-plan-server.js +79 -0
  203. package/dist/visual-plan/server/visual-plan-server.js.map +1 -0
  204. package/dist/visual-plan-web/architects-daughter-latin-400-normal.woff +0 -0
  205. package/dist/visual-plan-web/architects-daughter-latin-400-normal.woff2 +0 -0
  206. package/dist/visual-plan-web/architects-daughter-latin-ext-400-normal.woff +0 -0
  207. package/dist/visual-plan-web/architects-daughter-latin-ext-400-normal.woff2 +0 -0
  208. package/dist/visual-plan-web/index.css +1 -0
  209. package/dist/visual-plan-web/index.html +17 -0
  210. package/dist/visual-plan-web/index.js +51 -0
  211. package/package.json +14 -17
  212. package/dist/commands/orchviz.d.ts +0 -12
  213. package/dist/commands/orchviz.d.ts.map +0 -1
  214. package/dist/commands/orchviz.js +0 -157
  215. package/dist/commands/orchviz.js.map +0 -1
  216. package/dist/migrate/converters/md-to-codex-rules.d.ts +0 -10
  217. package/dist/migrate/converters/md-to-codex-rules.d.ts.map +0 -1
  218. package/dist/migrate/converters/md-to-codex-rules.js +0 -133
  219. package/dist/migrate/converters/md-to-codex-rules.js.map +0 -1
  220. package/dist/orchviz/constants.d.ts +0 -72
  221. package/dist/orchviz/constants.d.ts.map +0 -1
  222. package/dist/orchviz/constants.js +0 -105
  223. package/dist/orchviz/constants.js.map +0 -1
  224. package/dist/orchviz/fs-utils.d.ts +0 -24
  225. package/dist/orchviz/fs-utils.d.ts.map +0 -1
  226. package/dist/orchviz/fs-utils.js +0 -49
  227. package/dist/orchviz/fs-utils.js.map +0 -1
  228. package/dist/orchviz/index.d.ts +0 -29
  229. package/dist/orchviz/index.d.ts.map +0 -1
  230. package/dist/orchviz/index.js +0 -28
  231. package/dist/orchviz/index.js.map +0 -1
  232. package/dist/orchviz/log-persister.d.ts +0 -22
  233. package/dist/orchviz/log-persister.d.ts.map +0 -1
  234. package/dist/orchviz/log-persister.js +0 -96
  235. package/dist/orchviz/log-persister.js.map +0 -1
  236. package/dist/orchviz/logger.d.ts +0 -13
  237. package/dist/orchviz/logger.d.ts.map +0 -1
  238. package/dist/orchviz/logger.js +0 -47
  239. package/dist/orchviz/logger.js.map +0 -1
  240. package/dist/orchviz/open-url.d.ts +0 -11
  241. package/dist/orchviz/open-url.d.ts.map +0 -1
  242. package/dist/orchviz/open-url.js.map +0 -1
  243. package/dist/orchviz/overlay/collector.d.ts +0 -29
  244. package/dist/orchviz/overlay/collector.d.ts.map +0 -1
  245. package/dist/orchviz/overlay/collector.js +0 -38
  246. package/dist/orchviz/overlay/collector.js.map +0 -1
  247. package/dist/orchviz/overlay/gate-readers.d.ts +0 -18
  248. package/dist/orchviz/overlay/gate-readers.d.ts.map +0 -1
  249. package/dist/orchviz/overlay/gate-readers.js +0 -111
  250. package/dist/orchviz/overlay/gate-readers.js.map +0 -1
  251. package/dist/orchviz/overlay/session-state-readers.d.ts +0 -18
  252. package/dist/orchviz/overlay/session-state-readers.d.ts.map +0 -1
  253. package/dist/orchviz/overlay/session-state-readers.js +0 -78
  254. package/dist/orchviz/overlay/session-state-readers.js.map +0 -1
  255. package/dist/orchviz/parser/handle-progress.d.ts +0 -9
  256. package/dist/orchviz/parser/handle-progress.d.ts.map +0 -1
  257. package/dist/orchviz/parser/handle-progress.js +0 -38
  258. package/dist/orchviz/parser/handle-progress.js.map +0 -1
  259. package/dist/orchviz/parser/handle-system.d.ts +0 -22
  260. package/dist/orchviz/parser/handle-system.d.ts.map +0 -1
  261. package/dist/orchviz/parser/handle-system.js +0 -99
  262. package/dist/orchviz/parser/handle-system.js.map +0 -1
  263. package/dist/orchviz/parser/handle-text.d.ts +0 -10
  264. package/dist/orchviz/parser/handle-text.d.ts.map +0 -1
  265. package/dist/orchviz/parser/handle-text.js +0 -83
  266. package/dist/orchviz/parser/handle-text.js.map +0 -1
  267. package/dist/orchviz/parser/handle-thinking.d.ts +0 -10
  268. package/dist/orchviz/parser/handle-thinking.d.ts.map +0 -1
  269. package/dist/orchviz/parser/handle-thinking.js +0 -35
  270. package/dist/orchviz/parser/handle-thinking.js.map +0 -1
  271. package/dist/orchviz/parser/handle-tool-result.d.ts +0 -10
  272. package/dist/orchviz/parser/handle-tool-result.d.ts.map +0 -1
  273. package/dist/orchviz/parser/handle-tool-result.js +0 -130
  274. package/dist/orchviz/parser/handle-tool-result.js.map +0 -1
  275. package/dist/orchviz/parser/handle-tool-use.d.ts +0 -11
  276. package/dist/orchviz/parser/handle-tool-use.d.ts.map +0 -1
  277. package/dist/orchviz/parser/handle-tool-use.js +0 -120
  278. package/dist/orchviz/parser/handle-tool-use.js.map +0 -1
  279. package/dist/orchviz/parser/index.d.ts +0 -38
  280. package/dist/orchviz/parser/index.d.ts.map +0 -1
  281. package/dist/orchviz/parser/index.js +0 -144
  282. package/dist/orchviz/parser/index.js.map +0 -1
  283. package/dist/orchviz/parser/label-helpers.d.ts +0 -9
  284. package/dist/orchviz/parser/label-helpers.d.ts.map +0 -1
  285. package/dist/orchviz/parser/label-helpers.js +0 -44
  286. package/dist/orchviz/parser/label-helpers.js.map +0 -1
  287. package/dist/orchviz/parser/strip-ansi.d.ts +0 -6
  288. package/dist/orchviz/parser/strip-ansi.d.ts.map +0 -1
  289. package/dist/orchviz/parser/strip-ansi.js +0 -14
  290. package/dist/orchviz/parser/strip-ansi.js.map +0 -1
  291. package/dist/orchviz/parser/utils.d.ts +0 -20
  292. package/dist/orchviz/parser/utils.d.ts.map +0 -1
  293. package/dist/orchviz/parser/utils.js +0 -54
  294. package/dist/orchviz/parser/utils.js.map +0 -1
  295. package/dist/orchviz/permission-detection.d.ts +0 -32
  296. package/dist/orchviz/permission-detection.d.ts.map +0 -1
  297. package/dist/orchviz/permission-detection.js +0 -104
  298. package/dist/orchviz/permission-detection.js.map +0 -1
  299. package/dist/orchviz/plan/apply-todo-toggle.d.ts +0 -29
  300. package/dist/orchviz/plan/apply-todo-toggle.d.ts.map +0 -1
  301. package/dist/orchviz/plan/apply-todo-toggle.js +0 -129
  302. package/dist/orchviz/plan/apply-todo-toggle.js.map +0 -1
  303. package/dist/orchviz/plan/atomic-write.d.ts +0 -25
  304. package/dist/orchviz/plan/atomic-write.d.ts.map +0 -1
  305. package/dist/orchviz/plan/atomic-write.js +0 -85
  306. package/dist/orchviz/plan/atomic-write.js.map +0 -1
  307. package/dist/orchviz/plan/collector.d.ts +0 -49
  308. package/dist/orchviz/plan/collector.d.ts.map +0 -1
  309. package/dist/orchviz/plan/collector.js +0 -169
  310. package/dist/orchviz/plan/collector.js.map +0 -1
  311. package/dist/orchviz/plan/etag.d.ts +0 -24
  312. package/dist/orchviz/plan/etag.d.ts.map +0 -1
  313. package/dist/orchviz/plan/etag.js +0 -58
  314. package/dist/orchviz/plan/etag.js.map +0 -1
  315. package/dist/orchviz/plan/find-active-plan.d.ts +0 -9
  316. package/dist/orchviz/plan/find-active-plan.d.ts.map +0 -1
  317. package/dist/orchviz/plan/find-active-plan.js +0 -90
  318. package/dist/orchviz/plan/find-active-plan.js.map +0 -1
  319. package/dist/orchviz/plan/index.d.ts +0 -23
  320. package/dist/orchviz/plan/index.d.ts.map +0 -1
  321. package/dist/orchviz/plan/index.js +0 -91
  322. package/dist/orchviz/plan/index.js.map +0 -1
  323. package/dist/orchviz/plan/list-plans.d.ts +0 -19
  324. package/dist/orchviz/plan/list-plans.d.ts.map +0 -1
  325. package/dist/orchviz/plan/list-plans.js +0 -143
  326. package/dist/orchviz/plan/list-plans.js.map +0 -1
  327. package/dist/orchviz/plan/parse-phase-file.d.ts +0 -13
  328. package/dist/orchviz/plan/parse-phase-file.d.ts.map +0 -1
  329. package/dist/orchviz/plan/parse-phase-file.js +0 -134
  330. package/dist/orchviz/plan/parse-phase-file.js.map +0 -1
  331. package/dist/orchviz/plan/parse-plan-file.d.ts +0 -19
  332. package/dist/orchviz/plan/parse-plan-file.d.ts.map +0 -1
  333. package/dist/orchviz/plan/parse-plan-file.js +0 -62
  334. package/dist/orchviz/plan/parse-plan-file.js.map +0 -1
  335. package/dist/orchviz/plan/plan-constants.d.ts +0 -17
  336. package/dist/orchviz/plan/plan-constants.d.ts.map +0 -1
  337. package/dist/orchviz/plan/plan-constants.js +0 -19
  338. package/dist/orchviz/plan/plan-constants.js.map +0 -1
  339. package/dist/orchviz/plan/plan-lifecycle.d.ts +0 -17
  340. package/dist/orchviz/plan/plan-lifecycle.d.ts.map +0 -1
  341. package/dist/orchviz/plan/plan-lifecycle.js +0 -97
  342. package/dist/orchviz/plan/plan-lifecycle.js.map +0 -1
  343. package/dist/orchviz/plan/types.d.ts +0 -46
  344. package/dist/orchviz/plan/types.d.ts.map +0 -1
  345. package/dist/orchviz/plan/types.js +0 -6
  346. package/dist/orchviz/plan/types.js.map +0 -1
  347. package/dist/orchviz/protocol.d.ts +0 -171
  348. package/dist/orchviz/protocol.d.ts.map +0 -1
  349. package/dist/orchviz/protocol.js +0 -23
  350. package/dist/orchviz/protocol.js.map +0 -1
  351. package/dist/orchviz/redact.d.ts +0 -10
  352. package/dist/orchviz/redact.d.ts.map +0 -1
  353. package/dist/orchviz/redact.js +0 -38
  354. package/dist/orchviz/redact.js.map +0 -1
  355. package/dist/orchviz/sanitize.d.ts +0 -11
  356. package/dist/orchviz/sanitize.d.ts.map +0 -1
  357. package/dist/orchviz/sanitize.js +0 -38
  358. package/dist/orchviz/sanitize.js.map +0 -1
  359. package/dist/orchviz/server/api-handlers.d.ts +0 -55
  360. package/dist/orchviz/server/api-handlers.d.ts.map +0 -1
  361. package/dist/orchviz/server/api-handlers.js +0 -112
  362. package/dist/orchviz/server/api-handlers.js.map +0 -1
  363. package/dist/orchviz/server/index.d.ts +0 -36
  364. package/dist/orchviz/server/index.d.ts.map +0 -1
  365. package/dist/orchviz/server/index.js +0 -144
  366. package/dist/orchviz/server/index.js.map +0 -1
  367. package/dist/orchviz/server/sse-handler.d.ts +0 -28
  368. package/dist/orchviz/server/sse-handler.d.ts.map +0 -1
  369. package/dist/orchviz/server/sse-handler.js +0 -217
  370. package/dist/orchviz/server/sse-handler.js.map +0 -1
  371. package/dist/orchviz/server/static-handler.d.ts +0 -9
  372. package/dist/orchviz/server/static-handler.d.ts.map +0 -1
  373. package/dist/orchviz/server/static-handler.js.map +0 -1
  374. package/dist/orchviz/server/write-handlers.d.ts +0 -20
  375. package/dist/orchviz/server/write-handlers.d.ts.map +0 -1
  376. package/dist/orchviz/server/write-handlers.js +0 -184
  377. package/dist/orchviz/server/write-handlers.js.map +0 -1
  378. package/dist/orchviz/server/write-utils.d.ts +0 -59
  379. package/dist/orchviz/server/write-utils.d.ts.map +0 -1
  380. package/dist/orchviz/server/write-utils.js +0 -161
  381. package/dist/orchviz/server/write-utils.js.map +0 -1
  382. package/dist/orchviz/session-discovery.d.ts +0 -19
  383. package/dist/orchviz/session-discovery.d.ts.map +0 -1
  384. package/dist/orchviz/session-discovery.js +0 -104
  385. package/dist/orchviz/session-discovery.js.map +0 -1
  386. package/dist/orchviz/session-manager.d.ts +0 -17
  387. package/dist/orchviz/session-manager.d.ts.map +0 -1
  388. package/dist/orchviz/session-manager.js +0 -63
  389. package/dist/orchviz/session-manager.js.map +0 -1
  390. package/dist/orchviz/session-runtime.d.ts +0 -21
  391. package/dist/orchviz/session-runtime.d.ts.map +0 -1
  392. package/dist/orchviz/session-runtime.js +0 -135
  393. package/dist/orchviz/session-runtime.js.map +0 -1
  394. package/dist/orchviz/session-watcher.d.ts +0 -33
  395. package/dist/orchviz/session-watcher.d.ts.map +0 -1
  396. package/dist/orchviz/session-watcher.js +0 -135
  397. package/dist/orchviz/session-watcher.js.map +0 -1
  398. package/dist/orchviz/subagent-meta.d.ts +0 -12
  399. package/dist/orchviz/subagent-meta.d.ts.map +0 -1
  400. package/dist/orchviz/subagent-meta.js +0 -34
  401. package/dist/orchviz/subagent-meta.js.map +0 -1
  402. package/dist/orchviz/subagent-scanner.d.ts +0 -15
  403. package/dist/orchviz/subagent-scanner.d.ts.map +0 -1
  404. package/dist/orchviz/subagent-scanner.js +0 -27
  405. package/dist/orchviz/subagent-scanner.js.map +0 -1
  406. package/dist/orchviz/subagent-watcher.d.ts +0 -20
  407. package/dist/orchviz/subagent-watcher.d.ts.map +0 -1
  408. package/dist/orchviz/subagent-watcher.js +0 -160
  409. package/dist/orchviz/subagent-watcher.js.map +0 -1
  410. package/dist/orchviz/token-estimator.d.ts.map +0 -1
  411. package/dist/orchviz/token-estimator.js.map +0 -1
  412. package/dist/orchviz/tool-input-data.d.ts +0 -11
  413. package/dist/orchviz/tool-input-data.d.ts.map +0 -1
  414. package/dist/orchviz/tool-input-data.js +0 -74
  415. package/dist/orchviz/tool-input-data.js.map +0 -1
  416. package/dist/orchviz/tool-summarizer.d.ts +0 -16
  417. package/dist/orchviz/tool-summarizer.d.ts.map +0 -1
  418. package/dist/orchviz/tool-summarizer.js +0 -129
  419. package/dist/orchviz/tool-summarizer.js.map +0 -1
  420. package/dist/orchviz-web/fira-code-cyrillic-400-normal.woff +0 -0
  421. package/dist/orchviz-web/fira-code-cyrillic-400-normal.woff2 +0 -0
  422. package/dist/orchviz-web/fira-code-cyrillic-500-normal.woff +0 -0
  423. package/dist/orchviz-web/fira-code-cyrillic-500-normal.woff2 +0 -0
  424. package/dist/orchviz-web/fira-code-cyrillic-ext-400-normal.woff +0 -0
  425. package/dist/orchviz-web/fira-code-cyrillic-ext-400-normal.woff2 +0 -0
  426. package/dist/orchviz-web/fira-code-cyrillic-ext-500-normal.woff +0 -0
  427. package/dist/orchviz-web/fira-code-cyrillic-ext-500-normal.woff2 +0 -0
  428. package/dist/orchviz-web/fira-code-greek-400-normal.woff +0 -0
  429. package/dist/orchviz-web/fira-code-greek-400-normal.woff2 +0 -0
  430. package/dist/orchviz-web/fira-code-greek-500-normal.woff +0 -0
  431. package/dist/orchviz-web/fira-code-greek-500-normal.woff2 +0 -0
  432. package/dist/orchviz-web/fira-code-greek-ext-400-normal.woff +0 -0
  433. package/dist/orchviz-web/fira-code-greek-ext-400-normal.woff2 +0 -0
  434. package/dist/orchviz-web/fira-code-greek-ext-500-normal.woff +0 -0
  435. package/dist/orchviz-web/fira-code-greek-ext-500-normal.woff2 +0 -0
  436. package/dist/orchviz-web/fira-code-latin-400-normal.woff +0 -0
  437. package/dist/orchviz-web/fira-code-latin-400-normal.woff2 +0 -0
  438. package/dist/orchviz-web/fira-code-latin-500-normal.woff +0 -0
  439. package/dist/orchviz-web/fira-code-latin-500-normal.woff2 +0 -0
  440. package/dist/orchviz-web/fira-code-latin-ext-400-normal.woff +0 -0
  441. package/dist/orchviz-web/fira-code-latin-ext-400-normal.woff2 +0 -0
  442. package/dist/orchviz-web/fira-code-latin-ext-500-normal.woff +0 -0
  443. package/dist/orchviz-web/fira-code-latin-ext-500-normal.woff2 +0 -0
  444. package/dist/orchviz-web/fira-code-symbols2-400-normal.woff +0 -0
  445. package/dist/orchviz-web/fira-code-symbols2-500-normal.woff +0 -0
  446. package/dist/orchviz-web/index.css +0 -1
  447. package/dist/orchviz-web/index.html +0 -18
  448. package/dist/orchviz-web/index.js +0 -53
  449. package/dist/orchviz-web/inter-cyrillic-400-normal.woff +0 -0
  450. package/dist/orchviz-web/inter-cyrillic-400-normal.woff2 +0 -0
  451. package/dist/orchviz-web/inter-cyrillic-500-normal.woff +0 -0
  452. package/dist/orchviz-web/inter-cyrillic-500-normal.woff2 +0 -0
  453. package/dist/orchviz-web/inter-cyrillic-600-normal.woff +0 -0
  454. package/dist/orchviz-web/inter-cyrillic-600-normal.woff2 +0 -0
  455. package/dist/orchviz-web/inter-cyrillic-ext-400-normal.woff +0 -0
  456. package/dist/orchviz-web/inter-cyrillic-ext-400-normal.woff2 +0 -0
  457. package/dist/orchviz-web/inter-cyrillic-ext-500-normal.woff +0 -0
  458. package/dist/orchviz-web/inter-cyrillic-ext-500-normal.woff2 +0 -0
  459. package/dist/orchviz-web/inter-cyrillic-ext-600-normal.woff +0 -0
  460. package/dist/orchviz-web/inter-cyrillic-ext-600-normal.woff2 +0 -0
  461. package/dist/orchviz-web/inter-greek-400-normal.woff +0 -0
  462. package/dist/orchviz-web/inter-greek-400-normal.woff2 +0 -0
  463. package/dist/orchviz-web/inter-greek-500-normal.woff +0 -0
  464. package/dist/orchviz-web/inter-greek-500-normal.woff2 +0 -0
  465. package/dist/orchviz-web/inter-greek-600-normal.woff +0 -0
  466. package/dist/orchviz-web/inter-greek-600-normal.woff2 +0 -0
  467. package/dist/orchviz-web/inter-greek-ext-400-normal.woff +0 -0
  468. package/dist/orchviz-web/inter-greek-ext-400-normal.woff2 +0 -0
  469. package/dist/orchviz-web/inter-greek-ext-500-normal.woff +0 -0
  470. package/dist/orchviz-web/inter-greek-ext-500-normal.woff2 +0 -0
  471. package/dist/orchviz-web/inter-greek-ext-600-normal.woff +0 -0
  472. package/dist/orchviz-web/inter-greek-ext-600-normal.woff2 +0 -0
  473. package/dist/orchviz-web/inter-latin-400-normal.woff +0 -0
  474. package/dist/orchviz-web/inter-latin-400-normal.woff2 +0 -0
  475. package/dist/orchviz-web/inter-latin-500-normal.woff +0 -0
  476. package/dist/orchviz-web/inter-latin-500-normal.woff2 +0 -0
  477. package/dist/orchviz-web/inter-latin-600-normal.woff +0 -0
  478. package/dist/orchviz-web/inter-latin-600-normal.woff2 +0 -0
  479. package/dist/orchviz-web/inter-latin-ext-400-normal.woff +0 -0
  480. package/dist/orchviz-web/inter-latin-ext-400-normal.woff2 +0 -0
  481. package/dist/orchviz-web/inter-latin-ext-500-normal.woff +0 -0
  482. package/dist/orchviz-web/inter-latin-ext-500-normal.woff2 +0 -0
  483. package/dist/orchviz-web/inter-latin-ext-600-normal.woff +0 -0
  484. package/dist/orchviz-web/inter-latin-ext-600-normal.woff2 +0 -0
  485. package/dist/orchviz-web/inter-vietnamese-400-normal.woff +0 -0
  486. package/dist/orchviz-web/inter-vietnamese-400-normal.woff2 +0 -0
  487. package/dist/orchviz-web/inter-vietnamese-500-normal.woff +0 -0
  488. package/dist/orchviz-web/inter-vietnamese-500-normal.woff2 +0 -0
  489. package/dist/orchviz-web/inter-vietnamese-600-normal.woff +0 -0
  490. package/dist/orchviz-web/inter-vietnamese-600-normal.woff2 +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rehash.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/application/rehash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3E,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CACzB;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA4BxD"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `rehash` — the ONLY sanctioned way to refresh pinned source hashes after an
3
+ * intentional Markdown edit (red-team M1).
4
+ *
5
+ * When a human deliberately edits `plan.md`/`phase-*.md`, the artifact's pinned
6
+ * hashes go stale and validation blocks. `rehash` recomputes them from disk and
7
+ * — critically — CLEARS any prior approval (an approval was tied to the old
8
+ * source bytes; refreshing the hash silently would let stale-reviewed content
9
+ * pass Gate 1). It changes nothing else. Re-review + re-`approve` must follow.
10
+ */
11
+ import { err, ErrorCode } from "../domain/errors.js";
12
+ import { VisualPlanSchema } from "../domain/schemas.js";
13
+ import { computeSourceHashes } from "../infrastructure/hashing.js";
14
+ import { readArtifactRaw, writeArtifact } from "../infrastructure/visual-plan-repository.js";
15
+ import { buildVisualBlock, writeVisualBlock } from "../infrastructure/plan-state.js";
16
+ /** Recompute `source.planHash`/`phaseHashes` from disk and clear any approval. */
17
+ export function rehashPlan(planDir) {
18
+ const read = readArtifactRaw(planDir);
19
+ if (read.error)
20
+ return { ok: false, errors: [read.error], clearedApproval: false };
21
+ const parsed = VisualPlanSchema.safeParse(read.raw);
22
+ if (!parsed.success) {
23
+ return {
24
+ ok: false,
25
+ errors: [err("<root>", ErrorCode.SCHEMA, "artifact must be schema-valid before rehash")],
26
+ clearedApproval: false,
27
+ };
28
+ }
29
+ const plan = parsed.data;
30
+ const fresh = computeSourceHashes(planDir, plan.source.planPath);
31
+ plan.source.planHash = fresh.planHash;
32
+ plan.source.phaseHashes = fresh.phaseHashes;
33
+ const clearedApproval = plan.review.status === "approved" || plan.review.approvedRevision !== null;
34
+ if (plan.review.status === "approved" || plan.review.status === "stale") {
35
+ plan.review.status = "draft";
36
+ }
37
+ plan.review.approvedRevision = null;
38
+ plan.review.approvedAt = null;
39
+ writeArtifact(planDir, plan);
40
+ writeVisualBlock(planDir, buildVisualBlock(plan, planDir));
41
+ return { ok: true, errors: [], clearedApproval };
42
+ }
43
+ //# sourceMappingURL=rehash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rehash.js","sourceRoot":"","sources":["../../../src/visual-plan/application/rehash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAwB,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQrF,kFAAkF;AAClF,MAAM,UAAU,UAAU,CAAC,OAAe;IACzC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAEnF,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,6CAA6C,CAAC,CAAC;YACxF,eAAe,EAAE,KAAK;SACtB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAE5C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC;IACnG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAE9B,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `status` — a read-only summary of the visual artifact's health.
3
+ *
4
+ * Reuses the validation pass so the reported coverage counts and validity are
5
+ * exactly what Gate 1 would see. Never mutates. Absent artifact is reported as
6
+ * `exists:false` (not an error) so `status` is safe to run on any plan dir.
7
+ */
8
+ import type { CoverageSummary } from "../domain/coverage.js";
9
+ export interface PlanStatus {
10
+ exists: boolean;
11
+ valid: boolean;
12
+ revision: number | null;
13
+ reviewStatus: string | null;
14
+ coverage: CoverageSummary | null;
15
+ pendingFeedback: string[];
16
+ errorCount: number;
17
+ }
18
+ /** Summarize the artifact at `planDir` without mutating anything. */
19
+ export declare function planStatus(planDir: string): PlanStatus;
20
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/application/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAetD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `status` — a read-only summary of the visual artifact's health.
3
+ *
4
+ * Reuses the validation pass so the reported coverage counts and validity are
5
+ * exactly what Gate 1 would see. Never mutates. Absent artifact is reported as
6
+ * `exists:false` (not an error) so `status` is safe to run on any plan dir.
7
+ */
8
+ import { validatePlan } from "./validate-plan.js";
9
+ import { ErrorCode } from "../domain/errors.js";
10
+ /** Summarize the artifact at `planDir` without mutating anything. */
11
+ export function planStatus(planDir) {
12
+ const result = validatePlan(planDir);
13
+ const missing = result.errors.some((e) => e.code === ErrorCode.ARTIFACT_MISSING);
14
+ if (missing) {
15
+ return { exists: false, valid: false, revision: null, reviewStatus: null, coverage: null, pendingFeedback: [], errorCount: 0 };
16
+ }
17
+ return {
18
+ exists: true,
19
+ valid: result.ok,
20
+ revision: result.plan?.revision ?? null,
21
+ reviewStatus: result.plan?.review.status ?? null,
22
+ coverage: result.coverage ?? null,
23
+ pendingFeedback: result.plan?.review.pendingFeedbackBatchIds ?? [],
24
+ errorCount: result.errors.length,
25
+ };
26
+ }
27
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/visual-plan/application/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAahD,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,OAAe;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACjF,IAAI,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAChI,CAAC;IACD,OAAO;QACN,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,MAAM,CAAC,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI;QACvC,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAChD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACjC,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,uBAAuB,IAAI,EAAE;QAClE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;KAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Validation orchestration — the single deterministic pass Gate 1 depends on.
3
+ *
4
+ * Order: read → schema → cross-refs → coverage → HTML safety → source freshness.
5
+ * Schema failure short-circuits (cross-checks need a well-typed object); every
6
+ * later pass is additive so one artifact can surface many findings at once,
7
+ * each with an exact JSON path and a stable code for agent self-repair.
8
+ */
9
+ import { type ValidationError } from "../domain/errors.js";
10
+ import { type VisualPlan } from "../domain/schemas.js";
11
+ import { type CoverageSummary } from "../domain/coverage.js";
12
+ export interface ValidatePlanResult {
13
+ ok: boolean;
14
+ errors: ValidationError[];
15
+ plan?: VisualPlan;
16
+ coverage?: CoverageSummary;
17
+ }
18
+ /**
19
+ * Run the deterministic passes on an ALREADY-PARSED plan (cross-refs, coverage,
20
+ * HTML safety, source freshness). Used by `validatePlan` and by the patch
21
+ * pipeline (Phase 5) to re-validate a mutated plan in memory before writing —
22
+ * so a patch can never persist a structurally-invalid or unsafe artifact.
23
+ */
24
+ export declare function validateParsed(plan: VisualPlan, planDir: string): {
25
+ errors: ValidationError[];
26
+ coverage: CoverageSummary;
27
+ };
28
+ /** Run every deterministic pass against the artifact in `planDir`. */
29
+ export declare function validatePlan(planDir: string): ValidatePlanResult;
30
+ //# sourceMappingURL=validate-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-plan.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/application/validate-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK9E,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC3B;AAeD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAa1H;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAUhE"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Validation orchestration — the single deterministic pass Gate 1 depends on.
3
+ *
4
+ * Order: read → schema → cross-refs → coverage → HTML safety → source freshness.
5
+ * Schema failure short-circuits (cross-checks need a well-typed object); every
6
+ * later pass is additive so one artifact can surface many findings at once,
7
+ * each with an exact JSON path and a stable code for agent self-repair.
8
+ */
9
+ import { err, ErrorCode } from "../domain/errors.js";
10
+ import { VisualPlanSchema } from "../domain/schemas.js";
11
+ import { checkCrossReferences } from "../domain/cross-refs.js";
12
+ import { computeCoverage } from "../domain/coverage.js";
13
+ import { checkWireframeHtml } from "../infrastructure/wireframe-sanitizer.js";
14
+ import { checkSourceFreshness } from "../infrastructure/hashing.js";
15
+ import { readArtifactRaw } from "../infrastructure/visual-plan-repository.js";
16
+ /** Render a Zod issue path (`["canvas","frames",0,"id"]`) as `canvas.frames[0].id`. */
17
+ function jsonPath(segments) {
18
+ return segments
19
+ .map((s) => (typeof s === "number" ? `[${s}]` : s))
20
+ .join(".")
21
+ .replace(/\.\[/g, "[");
22
+ }
23
+ /** Map a Zod error into deterministic `SCHEMA` findings. */
24
+ function fromZod(error) {
25
+ return error.issues.map((i) => err(jsonPath(i.path) || "<root>", ErrorCode.SCHEMA, i.message));
26
+ }
27
+ /**
28
+ * Run the deterministic passes on an ALREADY-PARSED plan (cross-refs, coverage,
29
+ * HTML safety, source freshness). Used by `validatePlan` and by the patch
30
+ * pipeline (Phase 5) to re-validate a mutated plan in memory before writing —
31
+ * so a patch can never persist a structurally-invalid or unsafe artifact.
32
+ */
33
+ export function validateParsed(plan, planDir) {
34
+ const errors = [];
35
+ errors.push(...checkCrossReferences(plan));
36
+ const coverage = computeCoverage(plan);
37
+ errors.push(...coverage.errors);
38
+ plan.canvas.frames.forEach((frame, i) => {
39
+ const check = checkWireframeHtml(frame.wireframe.html);
40
+ if (!check.safe) {
41
+ errors.push(err(`canvas.frames[${i}].wireframe.html`, ErrorCode.UNSAFE_HTML, check.reason ?? "unsafe HTML"));
42
+ }
43
+ });
44
+ errors.push(...checkSourceFreshness(plan, planDir));
45
+ return { errors, coverage: coverage.summary };
46
+ }
47
+ /** Run every deterministic pass against the artifact in `planDir`. */
48
+ export function validatePlan(planDir) {
49
+ const read = readArtifactRaw(planDir);
50
+ if (read.error)
51
+ return { ok: false, errors: [read.error] };
52
+ const parsed = VisualPlanSchema.safeParse(read.raw);
53
+ if (!parsed.success)
54
+ return { ok: false, errors: fromZod(parsed.error) };
55
+ const plan = parsed.data;
56
+ const { errors, coverage } = validateParsed(plan, planDir);
57
+ return { ok: errors.length === 0, errors, plan, coverage };
58
+ }
59
+ //# sourceMappingURL=validate-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-plan.js","sourceRoot":"","sources":["../../../src/visual-plan/application/validate-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Deterministic coverage-closure algorithm.
3
+ *
4
+ * Every `uiCoverage.surfaces[*].states[*]` MUST close via exactly one mode:
5
+ * - framed — non-empty `frameIds`
6
+ * - omitted — a typed `omitted` block (equivalent-layout needs a valid
7
+ * `representedBy`; accepted-risk needs a `riskId`)
8
+ * Zero modes OR both modes ⇒ unresolved (a hard gate: `unresolved > 0` blocks
9
+ * Gate 1). Framed states are further split into `resolved` (backed by ≥1 code
10
+ * source ref — existing UI proven in code) and `planned` (framed net-new UI
11
+ * with no code evidence yet).
12
+ *
13
+ * The summary is COMPUTED here and never trusted from the author (red-team M6:
14
+ * the validator guarantees "no structurally-unaccounted state"; whether a
15
+ * `planned`/`omitted` tag is HONEST is the Step-5 red-team's job, not this).
16
+ *
17
+ * `representedBy` forms an equivalence graph; cycles and self-reference are
18
+ * rejected (the chain must terminate, it cannot close by pointing in a loop).
19
+ */
20
+ import { type ValidationError } from "./errors.js";
21
+ import type { VisualPlan } from "./schemas.js";
22
+ export interface CoverageSummary {
23
+ total: number;
24
+ resolved: number;
25
+ planned: number;
26
+ omitted: number;
27
+ unresolved: number;
28
+ }
29
+ export interface CoverageResult {
30
+ summary: CoverageSummary;
31
+ errors: ValidationError[];
32
+ }
33
+ /** Compute the coverage summary and every closure error for the whole artifact. */
34
+ export declare function computeCoverage(plan: VisualPlan): CoverageResult;
35
+ //# sourceMappingURL=coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/domain/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC1B;AAwDD,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CA+BhE"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Deterministic coverage-closure algorithm.
3
+ *
4
+ * Every `uiCoverage.surfaces[*].states[*]` MUST close via exactly one mode:
5
+ * - framed — non-empty `frameIds`
6
+ * - omitted — a typed `omitted` block (equivalent-layout needs a valid
7
+ * `representedBy`; accepted-risk needs a `riskId`)
8
+ * Zero modes OR both modes ⇒ unresolved (a hard gate: `unresolved > 0` blocks
9
+ * Gate 1). Framed states are further split into `resolved` (backed by ≥1 code
10
+ * source ref — existing UI proven in code) and `planned` (framed net-new UI
11
+ * with no code evidence yet).
12
+ *
13
+ * The summary is COMPUTED here and never trusted from the author (red-team M6:
14
+ * the validator guarantees "no structurally-unaccounted state"; whether a
15
+ * `planned`/`omitted` tag is HONEST is the Step-5 red-team's job, not this).
16
+ *
17
+ * `representedBy` forms an equivalence graph; cycles and self-reference are
18
+ * rejected (the chain must terminate, it cannot close by pointing in a loop).
19
+ */
20
+ import { err, ErrorCode } from "./errors.js";
21
+ /** Which closure mode a state uses, or `unresolved` for zero/both. */
22
+ function closureMode(state) {
23
+ const framed = state.frameIds.length > 0;
24
+ const omitted = state.omitted !== undefined;
25
+ if (framed === omitted)
26
+ return "unresolved"; // neither or both
27
+ return framed ? "framed" : "omitted";
28
+ }
29
+ /** A framed state is `resolved` if any of its source refs is code-backed, else `planned`. */
30
+ function framedBucket(state, codeRefIds) {
31
+ return state.sourceRefIds.some((id) => codeRefIds.has(id)) ? "resolved" : "planned";
32
+ }
33
+ /**
34
+ * Walk the `representedBy` chain from an equivalent-layout omission. The chain
35
+ * MUST resolve, be acyclic/non-self-referential, AND terminate at a framed
36
+ * state — a state is only "covered by equivalence" if the layout it claims to
37
+ * equal is actually rendered somewhere. Terminating at a frameless state (an
38
+ * omission of any kind) defeats the closure guarantee and is rejected. Emits at
39
+ * most one error per starting state.
40
+ */
41
+ function checkEquivalence(stateId, byId, path, errors) {
42
+ const visited = new Set([stateId]);
43
+ let current = byId.get(stateId);
44
+ while (current?.omitted?.reason === "equivalent-layout") {
45
+ const target = current.omitted.representedBy;
46
+ if (target === undefined) {
47
+ errors.push(err(`${path}.omitted`, ErrorCode.COVERAGE_MISSING_REPRESENTED_BY, "equivalent-layout omission requires representedBy"));
48
+ return;
49
+ }
50
+ if (!byId.has(target)) {
51
+ errors.push(err(`${path}.omitted.representedBy`, ErrorCode.DANGLING_REPRESENTED_BY, `references unknown coverage state "${target}"`));
52
+ return;
53
+ }
54
+ if (visited.has(target)) {
55
+ errors.push(err(`${path}.omitted.representedBy`, ErrorCode.COVERAGE_EQUIVALENCE_CYCLE, `equivalence cycle through "${target}"`));
56
+ return;
57
+ }
58
+ visited.add(target);
59
+ current = byId.get(target);
60
+ }
61
+ // Terminal reached (a non-equivalent-layout state). It must render a frame.
62
+ if (current === undefined || current.frameIds.length === 0) {
63
+ errors.push(err(`${path}.omitted.representedBy`, ErrorCode.COVERAGE_EQUIVALENCE_UNBACKED, "equivalent-layout chain must terminate at a framed state (it resolves to no rendered layout)"));
64
+ }
65
+ }
66
+ /** Compute the coverage summary and every closure error for the whole artifact. */
67
+ export function computeCoverage(plan) {
68
+ const errors = [];
69
+ const summary = { total: 0, resolved: 0, planned: 0, omitted: 0, unresolved: 0 };
70
+ const codeRefIds = new Set(plan.sourceRefs.filter((r) => r.kind === "code").map((r) => r.id));
71
+ const byId = new Map();
72
+ for (const s of plan.uiCoverage.surfaces)
73
+ for (const st of s.states)
74
+ byId.set(st.id, st);
75
+ plan.uiCoverage.surfaces.forEach((surface, si) => surface.states.forEach((state, ti) => {
76
+ summary.total += 1;
77
+ const path = `uiCoverage.surfaces[${si}].states[${ti}]`;
78
+ const mode = closureMode(state);
79
+ if (mode === "unresolved") {
80
+ summary.unresolved += 1;
81
+ errors.push(err(path, ErrorCode.COVERAGE_UNRESOLVED, "state closes via zero or multiple modes (need exactly one of frameIds / omitted)"));
82
+ return;
83
+ }
84
+ if (mode === "framed") {
85
+ summary[framedBucket(state, codeRefIds)] += 1;
86
+ return;
87
+ }
88
+ // omitted
89
+ summary.omitted += 1;
90
+ const o = state.omitted;
91
+ if (o.reason === "accepted-risk" && (o.riskId === undefined || o.riskId.length === 0)) {
92
+ errors.push(err(`${path}.omitted`, ErrorCode.COVERAGE_MISSING_RISK_ID, "accepted-risk omission requires a riskId"));
93
+ }
94
+ if (o.reason === "equivalent-layout")
95
+ checkEquivalence(state.id, byId, path, errors);
96
+ }));
97
+ return { summary, errors };
98
+ }
99
+ //# sourceMappingURL=coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/visual-plan/domain/coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Cross-reference integrity for a schema-valid `visual-plan/v1` artifact.
3
+ *
4
+ * Agent-native only checks id uniqueness + `frame.blockId`, and its renderer
5
+ * silently SKIPS dangling connector endpoints, annotation targets, and section
6
+ * artboard ids (verified gap). MeowKit rejects every dangling reference with an
7
+ * exact JSON path so nothing renders-by-omission.
8
+ *
9
+ * Two passes: (1) every id is unique across ALL entity kinds; (2) every
10
+ * reference resolves to a declared id. Equivalence-cycle detection lives in
11
+ * `coverage.ts` (it needs the closure walk).
12
+ */
13
+ import { type ValidationError } from "./errors.js";
14
+ import type { VisualPlan } from "./schemas.js";
15
+ /**
16
+ * Validate uniqueness + reference resolution. Returns every finding; an empty
17
+ * array means the artifact is referentially sound.
18
+ */
19
+ export declare function checkCrossReferences(plan: VisualPlan): ValidationError[];
20
+ //# sourceMappingURL=cross-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-refs.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/domain/cross-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA0C/C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,EAAE,CA0CxE"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Cross-reference integrity for a schema-valid `visual-plan/v1` artifact.
3
+ *
4
+ * Agent-native only checks id uniqueness + `frame.blockId`, and its renderer
5
+ * silently SKIPS dangling connector endpoints, annotation targets, and section
6
+ * artboard ids (verified gap). MeowKit rejects every dangling reference with an
7
+ * exact JSON path so nothing renders-by-omission.
8
+ *
9
+ * Two passes: (1) every id is unique across ALL entity kinds; (2) every
10
+ * reference resolves to a declared id. Equivalence-cycle detection lives in
11
+ * `coverage.ts` (it needs the closure walk).
12
+ */
13
+ import { err, ErrorCode } from "./errors.js";
14
+ /** Collect every declared id with the JSON path where it was declared. */
15
+ function collectIds(plan) {
16
+ const seen = new Map();
17
+ const errors = [];
18
+ const add = (id, path) => {
19
+ const prior = seen.get(id);
20
+ if (prior !== undefined) {
21
+ errors.push(err(path, ErrorCode.DUPLICATE_ID, `id "${id}" already declared at ${prior}`));
22
+ return;
23
+ }
24
+ seen.set(id, path);
25
+ };
26
+ plan.canvas.lanes.forEach((l, i) => add(l.id, `canvas.lanes[${i}].id`));
27
+ plan.canvas.frames.forEach((f, i) => add(f.id, `canvas.frames[${i}].id`));
28
+ plan.canvas.connectors.forEach((c, i) => add(c.id, `canvas.connectors[${i}].id`));
29
+ plan.canvas.annotations.forEach((a, i) => add(a.id, `canvas.annotations[${i}].id`));
30
+ plan.documentBlocks.forEach((b, i) => add(b.id, `documentBlocks[${i}].id`));
31
+ plan.sourceRefs.forEach((s, i) => add(s.id, `sourceRefs[${i}].id`));
32
+ plan.uiCoverage.surfaces.forEach((s, si) => {
33
+ add(s.id, `uiCoverage.surfaces[${si}].id`);
34
+ s.states.forEach((st, ti) => add(st.id, `uiCoverage.surfaces[${si}].states[${ti}].id`));
35
+ });
36
+ return { seen, errors };
37
+ }
38
+ /** Build the typed id sets used to resolve references. */
39
+ function idSets(plan) {
40
+ return {
41
+ frames: new Set(plan.canvas.frames.map((f) => f.id)),
42
+ lanes: new Set(plan.canvas.lanes.map((l) => l.id)),
43
+ sourceRefs: new Set(plan.sourceRefs.map((s) => s.id)),
44
+ states: new Set(plan.uiCoverage.surfaces.flatMap((s) => s.states.map((st) => st.id))),
45
+ };
46
+ }
47
+ /**
48
+ * Validate uniqueness + reference resolution. Returns every finding; an empty
49
+ * array means the artifact is referentially sound.
50
+ */
51
+ export function checkCrossReferences(plan) {
52
+ const { errors } = collectIds(plan);
53
+ const ids = idSets(plan);
54
+ const need = (id, set, path, code, kind) => {
55
+ if (!set.has(id))
56
+ errors.push(err(path, code, `references unknown ${kind} "${id}"`));
57
+ };
58
+ plan.canvas.connectors.forEach((c, i) => {
59
+ need(c.from, ids.frames, `canvas.connectors[${i}].from`, ErrorCode.DANGLING_CONNECTOR_ENDPOINT, "frame");
60
+ need(c.to, ids.frames, `canvas.connectors[${i}].to`, ErrorCode.DANGLING_CONNECTOR_ENDPOINT, "frame");
61
+ });
62
+ plan.canvas.frames.forEach((f, i) => {
63
+ need(f.laneId, ids.lanes, `canvas.frames[${i}].laneId`, ErrorCode.DANGLING_LANE, "lane");
64
+ f.coverageStateIds.forEach((sid, j) => need(sid, ids.states, `canvas.frames[${i}].coverageStateIds[${j}]`, ErrorCode.DANGLING_COVERAGE_FRAME, "coverage state"));
65
+ f.sourceRefIds.forEach((sid, j) => need(sid, ids.sourceRefs, `canvas.frames[${i}].sourceRefIds[${j}]`, ErrorCode.DANGLING_SOURCE_REF, "source ref"));
66
+ });
67
+ plan.uiCoverage.surfaces.forEach((s, si) => s.states.forEach((st, ti) => {
68
+ const base = `uiCoverage.surfaces[${si}].states[${ti}]`;
69
+ st.frameIds.forEach((fid, j) => need(fid, ids.frames, `${base}.frameIds[${j}]`, ErrorCode.DANGLING_COVERAGE_FRAME, "frame"));
70
+ st.sourceRefIds.forEach((sid, j) => need(sid, ids.sourceRefs, `${base}.sourceRefIds[${j}]`, ErrorCode.DANGLING_SOURCE_REF, "source ref"));
71
+ }));
72
+ checkAnnotations(plan, ids.frames, errors);
73
+ return errors;
74
+ }
75
+ /** Annotation shape + target resolution: `note` is anchored, `markup` is free. */
76
+ function checkAnnotations(plan, frames, errors) {
77
+ plan.canvas.annotations.forEach((a, i) => {
78
+ const base = `canvas.annotations[${i}]`;
79
+ if (a.kind === "note") {
80
+ if (a.targetId === undefined || a.placement === undefined) {
81
+ errors.push(err(`${base}`, ErrorCode.DANGLING_ANNOTATION_TARGET, "note annotation requires targetId + placement"));
82
+ }
83
+ else if (!frames.has(a.targetId)) {
84
+ errors.push(err(`${base}.targetId`, ErrorCode.DANGLING_ANNOTATION_TARGET, `references unknown frame "${a.targetId}"`));
85
+ }
86
+ }
87
+ else if (a.points === undefined || a.points.length === 0) {
88
+ errors.push(err(`${base}.points`, ErrorCode.DANGLING_ANNOTATION_TARGET, "markup annotation requires at least one point"));
89
+ }
90
+ });
91
+ }
92
+ //# sourceMappingURL=cross-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-refs.js","sourceRoot":"","sources":["../../../src/visual-plan/domain/cross-refs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Validation error vocabulary for the visual-plan contracts.
3
+ *
4
+ * Every deterministic check emits a `ValidationError` carrying an exact JSON
5
+ * path into the artifact, a stable machine code, and a human message. The
6
+ * `--json` reporter surfaces these verbatim so a fresh agent session can
7
+ * self-repair a rejected artifact from the path alone.
8
+ */
9
+ /** Stable, machine-readable error codes. Never renumber — consumers match on these. */
10
+ export declare const ErrorCode: {
11
+ readonly ARTIFACT_MISSING: "ARTIFACT_MISSING";
12
+ readonly ARTIFACT_INVALID_JSON: "ARTIFACT_INVALID_JSON";
13
+ readonly SCHEMA: "SCHEMA";
14
+ readonly DUPLICATE_ID: "DUPLICATE_ID";
15
+ readonly DANGLING_CONNECTOR_ENDPOINT: "DANGLING_CONNECTOR_ENDPOINT";
16
+ readonly DANGLING_ANNOTATION_TARGET: "DANGLING_ANNOTATION_TARGET";
17
+ readonly DANGLING_LANE: "DANGLING_LANE";
18
+ readonly DANGLING_COVERAGE_FRAME: "DANGLING_COVERAGE_FRAME";
19
+ readonly DANGLING_SOURCE_REF: "DANGLING_SOURCE_REF";
20
+ readonly DANGLING_REPRESENTED_BY: "DANGLING_REPRESENTED_BY";
21
+ readonly COVERAGE_UNRESOLVED: "COVERAGE_UNRESOLVED";
22
+ readonly COVERAGE_EQUIVALENCE_CYCLE: "COVERAGE_EQUIVALENCE_CYCLE";
23
+ readonly COVERAGE_EQUIVALENCE_UNBACKED: "COVERAGE_EQUIVALENCE_UNBACKED";
24
+ readonly COVERAGE_MISSING_RISK_ID: "COVERAGE_MISSING_RISK_ID";
25
+ readonly COVERAGE_MISSING_REPRESENTED_BY: "COVERAGE_MISSING_REPRESENTED_BY";
26
+ readonly UNSAFE_HTML: "UNSAFE_HTML";
27
+ readonly STALE_SOURCE_HASH: "STALE_SOURCE_HASH";
28
+ };
29
+ export type ErrorCodeValue = (typeof ErrorCode)[keyof typeof ErrorCode];
30
+ /** One deterministic finding. `path` is a dotted/bracketed JSON path into the artifact. */
31
+ export interface ValidationError {
32
+ path: string;
33
+ code: ErrorCodeValue;
34
+ message: string;
35
+ }
36
+ /** Machine-readable result of any validation pass. `ok` is derived from `errors`. */
37
+ export interface ValidationResult {
38
+ ok: boolean;
39
+ errors: ValidationError[];
40
+ }
41
+ /** Build a `ValidationError` (thin helper to keep call sites terse and consistent). */
42
+ export declare function err(path: string, code: ErrorCodeValue, message: string): ValidationError;
43
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/visual-plan/domain/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,uFAAuF;AACvF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;CAkBZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAExE,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,uFAAuF;AACvF,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAExF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Validation error vocabulary for the visual-plan contracts.
3
+ *
4
+ * Every deterministic check emits a `ValidationError` carrying an exact JSON
5
+ * path into the artifact, a stable machine code, and a human message. The
6
+ * `--json` reporter surfaces these verbatim so a fresh agent session can
7
+ * self-repair a rejected artifact from the path alone.
8
+ */
9
+ /** Stable, machine-readable error codes. Never renumber — consumers match on these. */
10
+ export const ErrorCode = {
11
+ ARTIFACT_MISSING: "ARTIFACT_MISSING",
12
+ ARTIFACT_INVALID_JSON: "ARTIFACT_INVALID_JSON",
13
+ SCHEMA: "SCHEMA",
14
+ DUPLICATE_ID: "DUPLICATE_ID",
15
+ DANGLING_CONNECTOR_ENDPOINT: "DANGLING_CONNECTOR_ENDPOINT",
16
+ DANGLING_ANNOTATION_TARGET: "DANGLING_ANNOTATION_TARGET",
17
+ DANGLING_LANE: "DANGLING_LANE",
18
+ DANGLING_COVERAGE_FRAME: "DANGLING_COVERAGE_FRAME",
19
+ DANGLING_SOURCE_REF: "DANGLING_SOURCE_REF",
20
+ DANGLING_REPRESENTED_BY: "DANGLING_REPRESENTED_BY",
21
+ COVERAGE_UNRESOLVED: "COVERAGE_UNRESOLVED",
22
+ COVERAGE_EQUIVALENCE_CYCLE: "COVERAGE_EQUIVALENCE_CYCLE",
23
+ COVERAGE_EQUIVALENCE_UNBACKED: "COVERAGE_EQUIVALENCE_UNBACKED",
24
+ COVERAGE_MISSING_RISK_ID: "COVERAGE_MISSING_RISK_ID",
25
+ COVERAGE_MISSING_REPRESENTED_BY: "COVERAGE_MISSING_REPRESENTED_BY",
26
+ UNSAFE_HTML: "UNSAFE_HTML",
27
+ STALE_SOURCE_HASH: "STALE_SOURCE_HASH",
28
+ };
29
+ /** Build a `ValidationError` (thin helper to keep call sites terse and consistent). */
30
+ export function err(path, code, message) {
31
+ return { path, code, message };
32
+ }
33
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/visual-plan/domain/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAC9C,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,cAAc;IAC5B,2BAA2B,EAAE,6BAA6B;IAC1D,0BAA0B,EAAE,4BAA4B;IACxD,aAAa,EAAE,eAAe;IAC9B,uBAAuB,EAAE,yBAAyB;IAClD,mBAAmB,EAAE,qBAAqB;IAC1C,uBAAuB,EAAE,yBAAyB;IAClD,mBAAmB,EAAE,qBAAqB;IAC1C,0BAA0B,EAAE,4BAA4B;IACxD,6BAA6B,EAAE,+BAA+B;IAC9D,wBAAwB,EAAE,0BAA0B;IACpD,+BAA+B,EAAE,iCAAiC;IAClE,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;CAC7B,CAAC;AAiBX,uFAAuF;AACvF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAoB,EAAE,OAAe;IACtE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}