wingfoil 0.2.2 → 0.3.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 (454) hide show
  1. package/README.md +83 -43
  2. package/dist/agent/discovery.d.ts +72 -0
  3. package/dist/agent/discovery.d.ts.map +1 -0
  4. package/dist/agent/discovery.js +210 -0
  5. package/dist/agent/discovery.js.map +1 -0
  6. package/dist/agent/execute.d.ts +206 -0
  7. package/dist/agent/execute.d.ts.map +1 -0
  8. package/dist/agent/execute.js +581 -0
  9. package/dist/agent/execute.js.map +1 -0
  10. package/dist/agent/index.d.ts +23 -0
  11. package/dist/agent/index.d.ts.map +1 -0
  12. package/dist/agent/index.js +85 -0
  13. package/dist/agent/index.js.map +1 -0
  14. package/dist/agent/launch.d.ts +133 -0
  15. package/dist/agent/launch.d.ts.map +1 -0
  16. package/dist/agent/launch.js +380 -0
  17. package/dist/agent/launch.js.map +1 -0
  18. package/dist/agent/manifest.d.ts +30 -0
  19. package/dist/agent/manifest.d.ts.map +1 -0
  20. package/dist/agent/manifest.js +93 -0
  21. package/dist/agent/manifest.js.map +1 -0
  22. package/dist/agent/placeholders.d.ts +49 -0
  23. package/dist/agent/placeholders.d.ts.map +1 -0
  24. package/dist/agent/placeholders.js +177 -0
  25. package/dist/agent/placeholders.js.map +1 -0
  26. package/dist/agent/run-log.d.ts +254 -0
  27. package/dist/agent/run-log.d.ts.map +1 -0
  28. package/dist/agent/run-log.js +612 -0
  29. package/dist/agent/run-log.js.map +1 -0
  30. package/dist/agent/schema.d.ts +100 -0
  31. package/dist/agent/schema.d.ts.map +1 -0
  32. package/dist/agent/schema.js +89 -0
  33. package/dist/agent/schema.js.map +1 -0
  34. package/dist/agent/step.d.ts +41 -0
  35. package/dist/agent/step.d.ts.map +1 -0
  36. package/dist/agent/step.js +95 -0
  37. package/dist/agent/step.js.map +1 -0
  38. package/dist/build-info.json +4 -0
  39. package/dist/cli/error.d.ts +11 -2
  40. package/dist/cli/error.d.ts.map +1 -1
  41. package/dist/cli/error.js +27 -6
  42. package/dist/cli/error.js.map +1 -1
  43. package/dist/cli/exit.d.ts +33 -3
  44. package/dist/cli/exit.d.ts.map +1 -1
  45. package/dist/cli/exit.js +54 -3
  46. package/dist/cli/exit.js.map +1 -1
  47. package/dist/cli/index.d.ts +1 -1
  48. package/dist/cli/index.d.ts.map +1 -1
  49. package/dist/cli/index.js +2 -1
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/cli/init-command.d.ts.map +1 -1
  52. package/dist/cli/init-command.js +4 -2
  53. package/dist/cli/init-command.js.map +1 -1
  54. package/dist/cli/mcp-command.d.ts +13 -4
  55. package/dist/cli/mcp-command.d.ts.map +1 -1
  56. package/dist/cli/mcp-command.js +25 -8
  57. package/dist/cli/mcp-command.js.map +1 -1
  58. package/dist/cli/output.d.ts +12 -4
  59. package/dist/cli/output.d.ts.map +1 -1
  60. package/dist/cli/output.js +15 -4
  61. package/dist/cli/output.js.map +1 -1
  62. package/dist/cli/program.d.ts +1 -1
  63. package/dist/cli/program.d.ts.map +1 -1
  64. package/dist/cli/program.js +162 -40
  65. package/dist/cli/program.js.map +1 -1
  66. package/dist/cli/registrar.d.ts +1 -1
  67. package/dist/cli/registrar.d.ts.map +1 -1
  68. package/dist/cli/registrar.js +67 -6
  69. package/dist/cli/registrar.js.map +1 -1
  70. package/dist/cli/suggest.d.ts +20 -0
  71. package/dist/cli/suggest.d.ts.map +1 -0
  72. package/dist/cli/suggest.js +49 -0
  73. package/dist/cli/suggest.js.map +1 -0
  74. package/dist/cli/warning.d.ts +26 -0
  75. package/dist/cli/warning.d.ts.map +1 -0
  76. package/dist/cli/warning.js +66 -0
  77. package/dist/cli/warning.js.map +1 -0
  78. package/dist/cli.js +11 -2
  79. package/dist/cli.js.map +1 -1
  80. package/dist/core/agent-execute.d.ts +44 -0
  81. package/dist/core/agent-execute.d.ts.map +1 -0
  82. package/dist/core/agent-execute.js +71 -0
  83. package/dist/core/agent-execute.js.map +1 -0
  84. package/dist/core/agent-list.d.ts +95 -0
  85. package/dist/core/agent-list.d.ts.map +1 -0
  86. package/dist/core/agent-list.js +207 -0
  87. package/dist/core/agent-list.js.map +1 -0
  88. package/dist/core/agent-show.d.ts +44 -0
  89. package/dist/core/agent-show.d.ts.map +1 -0
  90. package/dist/core/agent-show.js +188 -0
  91. package/dist/core/agent-show.js.map +1 -0
  92. package/dist/core/approval-authority.d.ts +17 -14
  93. package/dist/core/approval-authority.d.ts.map +1 -1
  94. package/dist/core/approval-authority.js +9 -9
  95. package/dist/core/approval-authority.js.map +1 -1
  96. package/dist/core/builtin-asset.d.ts +18 -15
  97. package/dist/core/builtin-asset.d.ts.map +1 -1
  98. package/dist/core/builtin-asset.js +17 -14
  99. package/dist/core/builtin-asset.js.map +1 -1
  100. package/dist/core/builtin-integrity.d.ts +12 -2
  101. package/dist/core/builtin-integrity.d.ts.map +1 -1
  102. package/dist/core/builtin-integrity.js +85 -9
  103. package/dist/core/builtin-integrity.js.map +1 -1
  104. package/dist/core/confinement.d.ts +3 -1
  105. package/dist/core/confinement.d.ts.map +1 -1
  106. package/dist/core/confinement.js +7 -4
  107. package/dist/core/confinement.js.map +1 -1
  108. package/dist/core/context.d.ts +150 -98
  109. package/dist/core/context.d.ts.map +1 -1
  110. package/dist/core/context.js +602 -66
  111. package/dist/core/context.js.map +1 -1
  112. package/dist/core/directive-assign.d.ts +33 -7
  113. package/dist/core/directive-assign.d.ts.map +1 -1
  114. package/dist/core/directive-assign.js +67 -27
  115. package/dist/core/directive-assign.js.map +1 -1
  116. package/dist/core/directive-scope.d.ts +36 -0
  117. package/dist/core/directive-scope.d.ts.map +1 -0
  118. package/dist/core/directive-scope.js +34 -0
  119. package/dist/core/directive-scope.js.map +1 -0
  120. package/dist/core/directives-list.d.ts +13 -3
  121. package/dist/core/directives-list.d.ts.map +1 -1
  122. package/dist/core/directives-list.js +18 -6
  123. package/dist/core/directives-list.js.map +1 -1
  124. package/dist/core/dry-run.d.ts +33 -0
  125. package/dist/core/dry-run.d.ts.map +1 -0
  126. package/dist/core/dry-run.js +45 -0
  127. package/dist/core/dry-run.js.map +1 -0
  128. package/dist/core/element-ref.d.ts +23 -0
  129. package/dist/core/element-ref.d.ts.map +1 -0
  130. package/dist/core/element-ref.js +24 -0
  131. package/dist/core/element-ref.js.map +1 -0
  132. package/dist/core/error-details.d.ts +20 -0
  133. package/dist/core/error-details.d.ts.map +1 -0
  134. package/dist/core/error-details.js +65 -0
  135. package/dist/core/error-details.js.map +1 -0
  136. package/dist/core/exit-code.d.ts.map +1 -1
  137. package/dist/core/exit-code.js +6 -7
  138. package/dist/core/exit-code.js.map +1 -1
  139. package/dist/core/git-identity.d.ts +46 -11
  140. package/dist/core/git-identity.d.ts.map +1 -1
  141. package/dist/core/git-identity.js +140 -27
  142. package/dist/core/git-identity.js.map +1 -1
  143. package/dist/core/index.d.ts +184 -10
  144. package/dist/core/index.d.ts.map +1 -1
  145. package/dist/core/index.js +1045 -185
  146. package/dist/core/index.js.map +1 -1
  147. package/dist/core/init.d.ts +45 -5
  148. package/dist/core/init.d.ts.map +1 -1
  149. package/dist/core/init.js +134 -24
  150. package/dist/core/init.js.map +1 -1
  151. package/dist/core/loaders.d.ts +170 -14
  152. package/dist/core/loaders.d.ts.map +1 -1
  153. package/dist/core/loaders.js +570 -89
  154. package/dist/core/loaders.js.map +1 -1
  155. package/dist/core/memory-add-link.d.ts +28 -0
  156. package/dist/core/memory-add-link.d.ts.map +1 -0
  157. package/dist/core/memory-add-link.js +67 -0
  158. package/dist/core/memory-add-link.js.map +1 -0
  159. package/dist/core/memory-add-type.d.ts +25 -1
  160. package/dist/core/memory-add-type.d.ts.map +1 -1
  161. package/dist/core/memory-add-type.js +59 -1
  162. package/dist/core/memory-add-type.js.map +1 -1
  163. package/dist/core/memory-amend.d.ts +80 -0
  164. package/dist/core/memory-amend.d.ts.map +1 -0
  165. package/dist/core/memory-amend.js +160 -0
  166. package/dist/core/memory-amend.js.map +1 -0
  167. package/dist/core/memory-supersede.d.ts +28 -0
  168. package/dist/core/memory-supersede.d.ts.map +1 -0
  169. package/dist/core/memory-supersede.js +79 -0
  170. package/dist/core/memory-supersede.js.map +1 -0
  171. package/dist/core/memory-transition.d.ts +190 -30
  172. package/dist/core/memory-transition.d.ts.map +1 -1
  173. package/dist/core/memory-transition.js +480 -59
  174. package/dist/core/memory-transition.js.map +1 -1
  175. package/dist/core/registry.d.ts +82 -10
  176. package/dist/core/registry.d.ts.map +1 -1
  177. package/dist/core/registry.js +50 -0
  178. package/dist/core/registry.js.map +1 -1
  179. package/dist/core/relevance.d.ts +74 -12
  180. package/dist/core/relevance.d.ts.map +1 -1
  181. package/dist/core/relevance.js +45 -27
  182. package/dist/core/relevance.js.map +1 -1
  183. package/dist/core/require-reason.d.ts.map +1 -1
  184. package/dist/core/require-reason.js +6 -5
  185. package/dist/core/require-reason.js.map +1 -1
  186. package/dist/core/required-fields.d.ts +28 -0
  187. package/dist/core/required-fields.d.ts.map +1 -0
  188. package/dist/core/required-fields.js +60 -0
  189. package/dist/core/required-fields.js.map +1 -0
  190. package/dist/core/revision.d.ts +82 -0
  191. package/dist/core/revision.d.ts.map +1 -0
  192. package/dist/core/revision.js +144 -0
  193. package/dist/core/revision.js.map +1 -0
  194. package/dist/core/types.d.ts +28 -2
  195. package/dist/core/types.d.ts.map +1 -1
  196. package/dist/core/types.js +12 -3
  197. package/dist/core/types.js.map +1 -1
  198. package/dist/core/workflow-core-checks.d.ts +34 -0
  199. package/dist/core/workflow-core-checks.d.ts.map +1 -0
  200. package/dist/core/workflow-core-checks.js +403 -0
  201. package/dist/core/workflow-core-checks.js.map +1 -0
  202. package/dist/core/workflow-create-remove.d.ts +65 -0
  203. package/dist/core/workflow-create-remove.d.ts.map +1 -0
  204. package/dist/core/workflow-create-remove.js +277 -0
  205. package/dist/core/workflow-create-remove.js.map +1 -0
  206. package/dist/core/workflow-deduction.d.ts +48 -0
  207. package/dist/core/workflow-deduction.d.ts.map +1 -0
  208. package/dist/core/workflow-deduction.js +523 -0
  209. package/dist/core/workflow-deduction.js.map +1 -0
  210. package/dist/core/workflow-diagnostics.d.ts +83 -0
  211. package/dist/core/workflow-diagnostics.d.ts.map +1 -0
  212. package/dist/core/workflow-diagnostics.js +375 -0
  213. package/dist/core/workflow-diagnostics.js.map +1 -0
  214. package/dist/core/workflow-exit-state.d.ts +125 -0
  215. package/dist/core/workflow-exit-state.d.ts.map +1 -0
  216. package/dist/core/workflow-exit-state.js +243 -0
  217. package/dist/core/workflow-exit-state.js.map +1 -0
  218. package/dist/core/workflow-finalize.d.ts +37 -0
  219. package/dist/core/workflow-finalize.d.ts.map +1 -0
  220. package/dist/core/workflow-finalize.js +153 -0
  221. package/dist/core/workflow-finalize.js.map +1 -0
  222. package/dist/core/workflow-list-show.d.ts +176 -0
  223. package/dist/core/workflow-list-show.d.ts.map +1 -0
  224. package/dist/core/workflow-list-show.js +268 -0
  225. package/dist/core/workflow-list-show.js.map +1 -0
  226. package/dist/core/workflow-next.d.ts +268 -0
  227. package/dist/core/workflow-next.d.ts.map +1 -0
  228. package/dist/core/workflow-next.js +503 -0
  229. package/dist/core/workflow-next.js.map +1 -0
  230. package/dist/core/workflow-registry.d.ts +52 -0
  231. package/dist/core/workflow-registry.d.ts.map +1 -0
  232. package/dist/core/workflow-registry.js +158 -0
  233. package/dist/core/workflow-registry.js.map +1 -0
  234. package/dist/core/workflow-start-end.d.ts +71 -0
  235. package/dist/core/workflow-start-end.d.ts.map +1 -0
  236. package/dist/core/workflow-start-end.js +298 -0
  237. package/dist/core/workflow-start-end.js.map +1 -0
  238. package/dist/core/workflow-status.d.ts +83 -0
  239. package/dist/core/workflow-status.d.ts.map +1 -0
  240. package/dist/core/workflow-status.js +125 -0
  241. package/dist/core/workflow-status.js.map +1 -0
  242. package/dist/core/write-guard.d.ts +51 -8
  243. package/dist/core/write-guard.d.ts.map +1 -1
  244. package/dist/core/write-guard.js +139 -9
  245. package/dist/core/write-guard.js.map +1 -1
  246. package/dist/directives/index.d.ts +3 -2
  247. package/dist/directives/index.d.ts.map +1 -1
  248. package/dist/directives/index.js +5 -3
  249. package/dist/directives/index.js.map +1 -1
  250. package/dist/directives/schema.d.ts +34 -29
  251. package/dist/directives/schema.d.ts.map +1 -1
  252. package/dist/directives/schema.js +35 -29
  253. package/dist/directives/schema.js.map +1 -1
  254. package/dist/directives/version.d.ts +28 -0
  255. package/dist/directives/version.d.ts.map +1 -0
  256. package/dist/directives/version.js +51 -0
  257. package/dist/directives/version.js.map +1 -0
  258. package/dist/dna/edit.d.ts +7 -6
  259. package/dist/dna/edit.d.ts.map +1 -1
  260. package/dist/dna/edit.js +96 -41
  261. package/dist/dna/edit.js.map +1 -1
  262. package/dist/dna/mutate.js +18 -3
  263. package/dist/dna/mutate.js.map +1 -1
  264. package/dist/dna/path.d.ts +2 -2
  265. package/dist/dna/roles.d.ts +1 -1
  266. package/dist/dna/schema.d.ts +61 -3
  267. package/dist/dna/schema.d.ts.map +1 -1
  268. package/dist/dna/schema.js +121 -6
  269. package/dist/dna/schema.js.map +1 -1
  270. package/dist/mcp/dna-resource.d.ts.map +1 -1
  271. package/dist/mcp/dna-resource.js +4 -4
  272. package/dist/mcp/dna-resource.js.map +1 -1
  273. package/dist/mcp/index.d.ts +8 -4
  274. package/dist/mcp/index.d.ts.map +1 -1
  275. package/dist/mcp/index.js +13 -2
  276. package/dist/mcp/index.js.map +1 -1
  277. package/dist/mcp/memory-resource.d.ts.map +1 -1
  278. package/dist/mcp/memory-resource.js +30 -19
  279. package/dist/mcp/memory-resource.js.map +1 -1
  280. package/dist/mcp/prompt.d.ts +61 -24
  281. package/dist/mcp/prompt.d.ts.map +1 -1
  282. package/dist/mcp/prompt.js +176 -47
  283. package/dist/mcp/prompt.js.map +1 -1
  284. package/dist/mcp/read-only.d.ts +39 -0
  285. package/dist/mcp/read-only.d.ts.map +1 -1
  286. package/dist/mcp/read-only.js +61 -0
  287. package/dist/mcp/read-only.js.map +1 -1
  288. package/dist/mcp/registrar.d.ts +10 -0
  289. package/dist/mcp/registrar.d.ts.map +1 -1
  290. package/dist/mcp/registrar.js +48 -12
  291. package/dist/mcp/registrar.js.map +1 -1
  292. package/dist/mcp/server.d.ts +21 -14
  293. package/dist/mcp/server.d.ts.map +1 -1
  294. package/dist/mcp/server.js +41 -15
  295. package/dist/mcp/server.js.map +1 -1
  296. package/dist/mcp/session-resource.d.ts +13 -0
  297. package/dist/mcp/session-resource.d.ts.map +1 -0
  298. package/dist/mcp/session-resource.js +65 -0
  299. package/dist/mcp/session-resource.js.map +1 -0
  300. package/dist/mcp/workflow-resource.d.ts +18 -0
  301. package/dist/mcp/workflow-resource.d.ts.map +1 -1
  302. package/dist/mcp/workflow-resource.js +37 -8
  303. package/dist/mcp/workflow-resource.js.map +1 -1
  304. package/dist/memory/add.d.ts +110 -24
  305. package/dist/memory/add.d.ts.map +1 -1
  306. package/dist/memory/add.js +251 -64
  307. package/dist/memory/add.js.map +1 -1
  308. package/dist/memory/audit.d.ts +152 -39
  309. package/dist/memory/audit.d.ts.map +1 -1
  310. package/dist/memory/audit.js +257 -103
  311. package/dist/memory/audit.js.map +1 -1
  312. package/dist/memory/commit-message.d.ts +60 -38
  313. package/dist/memory/commit-message.d.ts.map +1 -1
  314. package/dist/memory/commit-message.js +167 -21
  315. package/dist/memory/commit-message.js.map +1 -1
  316. package/dist/memory/entry.d.ts.map +1 -1
  317. package/dist/memory/entry.js +1 -2
  318. package/dist/memory/entry.js.map +1 -1
  319. package/dist/memory/frontmatter-edit.d.ts +16 -4
  320. package/dist/memory/frontmatter-edit.d.ts.map +1 -1
  321. package/dist/memory/frontmatter-edit.js +13 -1
  322. package/dist/memory/frontmatter-edit.js.map +1 -1
  323. package/dist/memory/git-log.d.ts +18 -6
  324. package/dist/memory/git-log.d.ts.map +1 -1
  325. package/dist/memory/git-log.js +40 -13
  326. package/dist/memory/git-log.js.map +1 -1
  327. package/dist/memory/history.d.ts +73 -12
  328. package/dist/memory/history.d.ts.map +1 -1
  329. package/dist/memory/history.js +128 -44
  330. package/dist/memory/history.js.map +1 -1
  331. package/dist/memory/index.d.ts +13 -11
  332. package/dist/memory/index.d.ts.map +1 -1
  333. package/dist/memory/index.js +34 -3
  334. package/dist/memory/index.js.map +1 -1
  335. package/dist/memory/query.d.ts +161 -19
  336. package/dist/memory/query.d.ts.map +1 -1
  337. package/dist/memory/query.js +435 -55
  338. package/dist/memory/query.js.map +1 -1
  339. package/dist/memory/schema.d.ts +52 -3
  340. package/dist/memory/schema.d.ts.map +1 -1
  341. package/dist/memory/schema.js +132 -8
  342. package/dist/memory/schema.js.map +1 -1
  343. package/dist/memory/state-machine.d.ts +65 -10
  344. package/dist/memory/state-machine.d.ts.map +1 -1
  345. package/dist/memory/state-machine.js +134 -46
  346. package/dist/memory/state-machine.js.map +1 -1
  347. package/dist/memory/submit.d.ts +52 -3
  348. package/dist/memory/submit.d.ts.map +1 -1
  349. package/dist/memory/submit.js +118 -11
  350. package/dist/memory/submit.js.map +1 -1
  351. package/dist/storage/build-stamp.d.ts +18 -0
  352. package/dist/storage/build-stamp.d.ts.map +1 -0
  353. package/dist/storage/build-stamp.js +68 -0
  354. package/dist/storage/build-stamp.js.map +1 -0
  355. package/dist/storage/builtin-adapters.d.ts +32 -0
  356. package/dist/storage/builtin-adapters.d.ts.map +1 -0
  357. package/dist/storage/builtin-adapters.js +100 -0
  358. package/dist/storage/builtin-adapters.js.map +1 -0
  359. package/dist/storage/builtin-directives.d.ts +0 -29
  360. package/dist/storage/builtin-directives.d.ts.map +1 -1
  361. package/dist/storage/builtin-directives.js +9 -4
  362. package/dist/storage/builtin-directives.js.map +1 -1
  363. package/dist/storage/commit.d.ts +310 -3
  364. package/dist/storage/commit.d.ts.map +1 -1
  365. package/dist/storage/commit.js +807 -33
  366. package/dist/storage/commit.js.map +1 -1
  367. package/dist/storage/document.d.ts +6 -0
  368. package/dist/storage/document.d.ts.map +1 -1
  369. package/dist/storage/document.js +10 -1
  370. package/dist/storage/document.js.map +1 -1
  371. package/dist/storage/dry-run.d.ts +65 -0
  372. package/dist/storage/dry-run.d.ts.map +1 -0
  373. package/dist/storage/dry-run.js +150 -0
  374. package/dist/storage/dry-run.js.map +1 -0
  375. package/dist/storage/errors.d.ts +26 -0
  376. package/dist/storage/errors.d.ts.map +1 -1
  377. package/dist/storage/errors.js +27 -1
  378. package/dist/storage/errors.js.map +1 -1
  379. package/dist/storage/frontmatter.d.ts +1 -1
  380. package/dist/storage/frontmatter.js +1 -1
  381. package/dist/storage/git-read.d.ts +64 -0
  382. package/dist/storage/git-read.d.ts.map +1 -0
  383. package/dist/storage/git-read.js +107 -0
  384. package/dist/storage/git-read.js.map +1 -0
  385. package/dist/storage/index.d.ts +13 -5
  386. package/dist/storage/index.d.ts.map +1 -1
  387. package/dist/storage/index.js +39 -2
  388. package/dist/storage/index.js.map +1 -1
  389. package/dist/storage/layout.d.ts +2 -2
  390. package/dist/storage/layout.d.ts.map +1 -1
  391. package/dist/storage/layout.js +2 -7
  392. package/dist/storage/layout.js.map +1 -1
  393. package/dist/storage/memory-path.d.ts +18 -5
  394. package/dist/storage/memory-path.d.ts.map +1 -1
  395. package/dist/storage/memory-path.js +41 -5
  396. package/dist/storage/memory-path.js.map +1 -1
  397. package/dist/storage/snapshot.js +1 -1
  398. package/dist/storage/templates.d.ts +33 -6
  399. package/dist/storage/templates.d.ts.map +1 -1
  400. package/dist/storage/templates.js +170 -16
  401. package/dist/storage/templates.js.map +1 -1
  402. package/dist/validation/config-version.d.ts +19 -0
  403. package/dist/validation/config-version.d.ts.map +1 -0
  404. package/dist/validation/config-version.js +53 -0
  405. package/dist/validation/config-version.js.map +1 -0
  406. package/dist/validation/diagnostic.d.ts +40 -0
  407. package/dist/validation/diagnostic.d.ts.map +1 -0
  408. package/dist/validation/diagnostic.js +41 -0
  409. package/dist/validation/diagnostic.js.map +1 -0
  410. package/dist/validation/format.d.ts +74 -0
  411. package/dist/validation/format.d.ts.map +1 -0
  412. package/dist/validation/format.js +104 -0
  413. package/dist/validation/format.js.map +1 -0
  414. package/dist/validation/id.d.ts +14 -0
  415. package/dist/validation/id.d.ts.map +1 -1
  416. package/dist/validation/id.js +35 -11
  417. package/dist/validation/id.js.map +1 -1
  418. package/dist/validation/identity.d.ts +40 -0
  419. package/dist/validation/identity.d.ts.map +1 -0
  420. package/dist/validation/identity.js +78 -0
  421. package/dist/validation/identity.js.map +1 -0
  422. package/dist/validation/index.d.ts +9 -3
  423. package/dist/validation/index.d.ts.map +1 -1
  424. package/dist/validation/index.js +30 -1
  425. package/dist/validation/index.js.map +1 -1
  426. package/dist/validation/secret-scan.d.ts +3 -2
  427. package/dist/validation/secret-scan.d.ts.map +1 -1
  428. package/dist/validation/secret-scan.js +32 -11
  429. package/dist/validation/secret-scan.js.map +1 -1
  430. package/dist/validation/warning.d.ts +30 -16
  431. package/dist/validation/warning.d.ts.map +1 -1
  432. package/dist/validation/warning.js +74 -7
  433. package/dist/validation/warning.js.map +1 -1
  434. package/dist/workflow/bindings.d.ts +152 -0
  435. package/dist/workflow/bindings.d.ts.map +1 -0
  436. package/dist/workflow/bindings.js +249 -0
  437. package/dist/workflow/bindings.js.map +1 -0
  438. package/dist/workflow/create.d.ts +13 -0
  439. package/dist/workflow/create.d.ts.map +1 -0
  440. package/dist/workflow/create.js +41 -0
  441. package/dist/workflow/create.js.map +1 -0
  442. package/dist/workflow/deduce.d.ts +400 -0
  443. package/dist/workflow/deduce.d.ts.map +1 -0
  444. package/dist/workflow/deduce.js +1109 -0
  445. package/dist/workflow/deduce.js.map +1 -0
  446. package/dist/workflow/manifest-edit.d.ts +19 -0
  447. package/dist/workflow/manifest-edit.d.ts.map +1 -0
  448. package/dist/workflow/manifest-edit.js +124 -0
  449. package/dist/workflow/manifest-edit.js.map +1 -0
  450. package/dist/workflow/schema.d.ts +158 -19
  451. package/dist/workflow/schema.d.ts.map +1 -1
  452. package/dist/workflow/schema.js +163 -15
  453. package/dist/workflow/schema.js.map +1 -1
  454. package/package.json +18 -8
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.machineStates = machineStates;
4
+ exports.iterationStartState = iterationStartState;
5
+ exports.workflowExitStates = workflowExitStates;
6
+ const state_machine_1 = require("../memory/state-machine");
7
+ const bindings_1 = require("../workflow/bindings");
8
+ const schema_1 = require("../workflow/schema");
9
+ /** The machine of `type`, or `null` when `memory.yaml` does not register it (that is a separate diagnostic). */
10
+ function machineOf(memoryYaml, type) {
11
+ return Object.prototype.hasOwnProperty.call(memoryYaml.types, type) ? (0, state_machine_1.resolveStateMachine)(memoryYaml, type) : null;
12
+ }
13
+ /** Every state an element of a type can be in: its `sequence`, its reject and return targets, and `deprecated`. */
14
+ function machineStates(machine) {
15
+ const states = new Set(machine.sequence);
16
+ for (const gate of Object.values(machine.gates ?? {}))
17
+ states.add(gate.reject);
18
+ for (const target of Object.values(machine.returns ?? {}))
19
+ states.add(target);
20
+ states.add(state_machine_1.DEPRECATED_STATE);
21
+ return states;
22
+ }
23
+ /**
24
+ * The state an element enters a workflow run under `iterate_over` in (`spec-017` §4.4): the
25
+ * lowest-`sequence` value of the governing `where.status`, otherwise the type's first state. `null`
26
+ * when `memory.yaml` does not register `type`.
27
+ */
28
+ function iterationStartState(memoryYaml, type, where) {
29
+ const machine = machineOf(memoryYaml, type);
30
+ if (!machine)
31
+ return null;
32
+ const raw = where?.['status'];
33
+ const statuses = (Array.isArray(raw) ? raw : raw === undefined ? [] : [raw]).map(String);
34
+ const positions = statuses.map((status) => machine.sequence.indexOf(status)).filter((index) => index !== -1);
35
+ return machine.sequence[positions.length > 0 ? Math.min(...positions) : 0]; // a sequence is never empty (spec-001)
36
+ }
37
+ /** The first state of `type`, or `null` for an unregistered type. */
38
+ function firstState(memoryYaml, type) {
39
+ return machineOf(memoryYaml, type)?.sequence[0] ?? null;
40
+ }
41
+ /** An untyped Memory verb token's transition, or `null` for any other token. */
42
+ const UNTYPED_VERBS = {
43
+ 'memory.submit': 'submit',
44
+ 'memory.approve': 'approve',
45
+ 'memory.reject': 'reject',
46
+ 'memory.deprecate': 'deprecate',
47
+ };
48
+ /** The `s` of `….set_state(s)`, unquoted, or `null`. */
49
+ function setStateArgument(token) {
50
+ const match = /\(\s*["']?([^"'()\s]+)["']?\s*\)/.exec(token);
51
+ return match ? match[1] : null;
52
+ }
53
+ /** A selection's types and statuses, each a list (`spec-003` § "Selections"). */
54
+ function asList(value) {
55
+ if (value === undefined)
56
+ return [];
57
+ return (Array.isArray(value) ? value : [value]).map(String);
58
+ }
59
+ /**
60
+ * The exit states of every phase of `workflow` (`spec-017` §4.4), in declared order.
61
+ *
62
+ * A plain `include:` phase runs the included workflow on the same element (§4.5) — found by name in
63
+ * `workflows` — and leaves the element in the state the included workflow's last phase leaves it in.
64
+ * An `iterate_over` phase runs its sub on other elements: the bound element's state is unchanged.
65
+ *
66
+ * @param workflow - The workflow whose phases are computed.
67
+ * @param memoryYaml - The `memory.yaml` the machines come from.
68
+ * @param start - The bound element's type and state at the first phase.
69
+ * @param workflows - The registry, by name, a plain `include:` is resolved in (default: none).
70
+ */
71
+ function workflowExitStates(workflow, memoryYaml, start, workflows = new Map()) {
72
+ return compute(workflow, memoryYaml, start, workflows, new Set([workflow.name]));
73
+ }
74
+ function compute(workflow, memoryYaml, start, workflows, visiting) {
75
+ const creating = start.instance && start.boundType === null && workflow.element === undefined && (0, schema_1.workflowFacts)(workflow).startable
76
+ ? workflow.phases.findIndex((phase) => (phase.actions ?? []).some((action) => (0, bindings_1.tokenName)(action) === 'memory.add'))
77
+ : -1;
78
+ let bound = start.boundType === null ? null : { type: start.boundType, action: -1, state: start.state };
79
+ // The elements created by earlier phases of this pass, the targets of a typed `<T>.set_state`.
80
+ const earlier = [];
81
+ const out = [];
82
+ workflow.phases.forEach((phase, p) => {
83
+ const entry = bound?.state ?? null;
84
+ const held = [];
85
+ const created = [];
86
+ const run = new Set();
87
+ let undetermined = null;
88
+ const hold = (type, gate, reject) => {
89
+ if (!held.some((h) => h.type === type && h.gate === gate))
90
+ held.push({ type, gate, reject });
91
+ };
92
+ /** Apply one transition to `target`, recording the first refusal and the gates it holds. */
93
+ const apply = (target, action, op) => {
94
+ const machine = machineOf(memoryYaml, target.type);
95
+ if (!machine)
96
+ return; // an unregistered type is E_WORKFLOW_ELEMENT_TYPE_UNKNOWN's, not this
97
+ const from = target.state;
98
+ const refuse = (reason) => {
99
+ undetermined ??= { action, type: target.type, from, reason };
100
+ target.state = null;
101
+ };
102
+ if (typeof op === 'object') {
103
+ const to = op.setState;
104
+ if (!machineStates(machine).has(to))
105
+ return refuse(`'${to}' is not a state of ${target.type}`);
106
+ if (from !== null) {
107
+ const fromIndex = machine.sequence.indexOf(from);
108
+ const toIndex = machine.sequence.indexOf(to);
109
+ if (fromIndex !== -1 && toIndex !== -1 && toIndex <= fromIndex) {
110
+ return refuse(`'${to}' does not lie after '${from}' in ${target.type}'s sequence`);
111
+ }
112
+ const gate = machine.gates?.[from];
113
+ if (gate && fromIndex !== -1 && machine.sequence[fromIndex + 1] === to)
114
+ hold(target.type, from, gate.reject);
115
+ }
116
+ target.state = to;
117
+ return;
118
+ }
119
+ if (from === null) {
120
+ if (op === 'deprecate')
121
+ target.state = state_machine_1.DEPRECATED_STATE;
122
+ else
123
+ refuse('the state it starts from is undetermined');
124
+ return;
125
+ }
126
+ let to;
127
+ try {
128
+ to = (0, state_machine_1.resolveTransitionTarget)(machine, from, op);
129
+ }
130
+ catch (error) {
131
+ // `resolveTransitionTarget` refuses only with an `E_INVALID_TRANSITION` ValidationError.
132
+ return refuse(error.issues[0].message);
133
+ }
134
+ const leftGate = machine.gates?.[from];
135
+ if ((op === 'approve' || op === 'reject') && leftGate)
136
+ hold(target.type, from, leftGate.reject);
137
+ const enteredGate = machine.gates?.[to];
138
+ if (op === 'submit' && enteredGate)
139
+ hold(target.type, to, enteredGate.reject);
140
+ target.state = to;
141
+ };
142
+ if (phase.include !== undefined) {
143
+ const sub = workflows.get(phase.include);
144
+ if (phase.iterate_over === undefined && sub && !visiting.has(sub.name)) {
145
+ const subType = sub.element ?? bound?.type ?? null;
146
+ const sameElement = bound !== null && subType === bound.type;
147
+ const subStates = compute(sub, memoryYaml, { boundType: subType, state: sameElement ? bound.state : subType === null ? null : firstState(memoryYaml, subType), instance: false }, workflows, new Set([...visiting, sub.name]));
148
+ const last = subStates[subStates.length - 1];
149
+ if (sameElement && last)
150
+ bound.state = last.exit;
151
+ }
152
+ out.push({ phase: phase.name, boundType: bound?.type ?? null, entry, exit: bound?.state ?? null, undetermined: null, created: [], run: [], held: [], actionStates: [] });
153
+ return;
154
+ }
155
+ const selection = phase.where !== undefined && phase.iterate_over === undefined;
156
+ let latest = null;
157
+ let actsOnSelection = false;
158
+ // `<T>.set_state(s)` on the selection (§4.2 last fallback): the `(T, s)` pairs, in action order.
159
+ const selectionSets = [];
160
+ const actionStates = [];
161
+ (phase.actions ?? []).forEach((action, a) => {
162
+ actionStates.push(bound?.state ?? null);
163
+ const name = (0, bindings_1.tokenName)(action);
164
+ if (name === 'memory.add') {
165
+ const type = (0, bindings_1.memoryAddType)(action);
166
+ if (type === null)
167
+ return;
168
+ const element = { type, action: a, state: firstState(memoryYaml, type) };
169
+ created.push(element);
170
+ latest = element;
171
+ if (p === creating && bound === null)
172
+ bound = element;
173
+ return;
174
+ }
175
+ const verb = UNTYPED_VERBS[name];
176
+ const untypedSet = name === 'element.set_state';
177
+ if (verb !== undefined || untypedSet) {
178
+ const op = untypedSet ? { setState: setStateArgument(action) ?? '' } : verb;
179
+ if (latest)
180
+ apply(latest, a, op);
181
+ else if (selection)
182
+ actsOnSelection = true;
183
+ else if (bound)
184
+ apply(bound, a, op);
185
+ return;
186
+ }
187
+ const typed = /^([a-z][a-z0-9-]*)\.set_state$/.exec(name);
188
+ if (typed) {
189
+ const type = typed[1];
190
+ const op = { setState: setStateArgument(action) ?? '' };
191
+ if (bound && bound.type === type) {
192
+ apply(bound, a, op);
193
+ return;
194
+ }
195
+ const earlierOfType = earlier.filter((candidate) => candidate.type === type);
196
+ for (const element of earlierOfType) {
197
+ apply(element, a, op);
198
+ run.add(element);
199
+ }
200
+ if (earlierOfType.length === 0 && selection && asList(phase.where['type']).includes(type)) {
201
+ selectionSets.push({ type, to: op.setState });
202
+ }
203
+ }
204
+ });
205
+ if (selection && actsOnSelection) {
206
+ const statuses = asList(phase.where['status']);
207
+ for (const type of asList(phase.where['type'])) {
208
+ const machine = machineOf(memoryYaml, type);
209
+ if (!machine)
210
+ continue;
211
+ for (const status of statuses) {
212
+ const gate = machine.gates?.[status];
213
+ if (gate)
214
+ hold(type, status, gate.reject);
215
+ }
216
+ }
217
+ }
218
+ for (const { type, to } of selectionSets) {
219
+ const machine = machineOf(memoryYaml, type);
220
+ if (!machine)
221
+ continue;
222
+ for (const status of asList(phase.where['status'])) {
223
+ const gate = machine.gates?.[status];
224
+ if (gate && machine.sequence[machine.sequence.indexOf(status) + 1] === to)
225
+ hold(type, status, gate.reject);
226
+ }
227
+ }
228
+ earlier.push(...created.filter((element) => element !== bound));
229
+ out.push({
230
+ phase: phase.name,
231
+ boundType: bound?.type ?? null,
232
+ entry,
233
+ exit: bound?.state ?? null,
234
+ undetermined,
235
+ created: created.map((element) => ({ type: element.type, action: element.action, state: element.state })),
236
+ run: [...run].map((element) => ({ type: element.type, action: element.action, state: element.state })),
237
+ held,
238
+ actionStates,
239
+ });
240
+ });
241
+ return out;
242
+ }
243
+ //# sourceMappingURL=workflow-exit-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-exit-state.js","sourceRoot":"","sources":["../../src/core/workflow-exit-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type Baseline, type DeducedStep, type Instance } from '../workflow/deduce';
2
+ import { type CoreResult } from './types';
3
+ import { type Step } from './workflow-next';
4
+ /** The refusal when no `<ref>` is given and no instance is open (as `workflow end`'s, `spec-017` §10). */
5
+ export declare const NO_ACTIVE_WORKFLOW_TO_FINALIZE = "no active workflow to finalize";
6
+ /** `workflow finalize`'s payload (`spec-017` §8 `FinalizeResult`). */
7
+ export interface FinalizeResult {
8
+ /** The commit the finalize gated on — `HEAD` before its record. */
9
+ readonly baseline: Baseline;
10
+ readonly instance: Instance;
11
+ /** The step the record completes, as `workflow next` reported it at the baseline. */
12
+ readonly finalized: Step;
13
+ /** The instance's next step after the record, deduced at the new `HEAD`; `null` when it has none. */
14
+ readonly next: Step | null;
15
+ /** The record's commit sha. */
16
+ readonly commit: string;
17
+ }
18
+ /** What the caller asked for: `<ref>`, `--step`, and the raw `--reason` (as `optionalReason` reads it). */
19
+ export interface FinalizeRequest {
20
+ readonly ref?: string;
21
+ readonly step?: string;
22
+ readonly options?: Readonly<Record<string, string>>;
23
+ }
24
+ /** The phase-record trailers of `step` (`spec-003` § "Evidence"), in the order the spec lists them. */
25
+ export declare function phaseRecordTrailers(step: Pick<DeducedStep, 'workflow' | 'phase' | 'instance' | 'scope'>): string[];
26
+ /**
27
+ * `workflow finalize` at `HEAD` (`spec-017` §7.9). See the module comment for the record and the order of
28
+ * the refusals.
29
+ *
30
+ * @throws `UsageError` (exit 2) for an unrecordable `--reason`, or a missing one on an `approval:` phase.
31
+ * @throws `DiagnosticsError` (`VALIDATION`) when the registry at `HEAD` has a `spec-003` error;
32
+ * `StorageError` when git cannot answer; `CommitFailure` when git refuses the commit.
33
+ */
34
+ export declare function workflowFinalizeAtHead(root: string, request: FinalizeRequest): CoreResult<FinalizeResult>;
35
+ /** `workflow finalize`'s `--format console` rendering (`spec-017` §8). Pure. */
36
+ export declare function renderFinalizeConsole(result: FinalizeResult): string;
37
+ //# sourceMappingURL=workflow-finalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-finalize.d.ts","sourceRoot":"","sources":["../../src/core/workflow-finalize.ts"],"names":[],"mappings":"AAoCA,OAAO,EAA2C,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAK5I,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAA6E,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvH,0GAA0G;AAC1G,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAE/E,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,qFAAqF;IACrF,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,qGAAqG;IACrG,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,2GAA2G;AAC3G,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAOD,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,MAAM,EAAE,CAElH;AA0BD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,CAiDzG;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAKpE"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NO_ACTIVE_WORKFLOW_TO_FINALIZE = void 0;
4
+ exports.phaseRecordTrailers = phaseRecordTrailers;
5
+ exports.workflowFinalizeAtHead = workflowFinalizeAtHead;
6
+ exports.renderFinalizeConsole = renderFinalizeConsole;
7
+ /**
8
+ * `wingfoil workflow finalize [<ref>] [--step <key>] [--reason <text>]` (task-226; `spec-017` §7.9, §4.3
9
+ * `record`, §5.1, §5.4, §8 `FinalizeResult`, §10, §11; ruling R11; `dl-104` D1 (b)–(c); REQ-SEC-01,
10
+ * REQ-SEC-03, P1.7).
11
+ *
12
+ * Records a phase's completion where the phase has no Memory or file evidence to deduce it from: a
13
+ * checkpoint, an `awaits` (§5.4), a `created` step that created nothing, and an approval no element carries
14
+ * (§5.1). The record is **one commit with no file change** (`commitEmpty`, `src/storage/commit.ts`):
15
+ *
16
+ * ```
17
+ * workflow: finalize <instance-id> <key>
18
+ *
19
+ * Approver: <name> <<email>> (approver) ← an `approval:` phase only
20
+ * Reason: <the dl-067 block> ← when `--reason` is given
21
+ *
22
+ * WingFoil-Phase: <workflow>.<phase> completed
23
+ * WingFoil-Instance: <instance-id>
24
+ * WingFoil-Element: <type>:<id> ← or WingFoil-Item: <collection>#<key>; none when unscoped
25
+ * WingFoil-Version: <semver> (<sha>)
26
+ * ```
27
+ *
28
+ * The subject is outside the `wf(<type>)` grammar (`spec-003` verb table), so `memory history` never reads it
29
+ * as a Memory operation; the trailers are the phase record of `spec-003` § "Evidence", which the deduction
30
+ * reads with git's `%(trailers)` — from the **final** paragraph only, which is why they share it with the
31
+ * build signature (`CommitOptions.trailers`).
32
+ *
33
+ * **Baseline: `HEAD`, gating** (`spec-017` §1.1, §11): the deduction that names the frontier, and
34
+ * `dna.yaml` for approval authority, are read at `HEAD`; nothing is read from the working tree except the
35
+ * index, whose staged changes refuse the commit (`requireCleanIndex`, `dl-106`).
36
+ *
37
+ * **Refusal order**, every one before the commit: an unrecordable `--reason` (exit 2, before any read) →
38
+ * the git identity (REQ-SEC-01) → the instance → the step on the frontier → its evidence → on an
39
+ * `approval:` phase, a missing `--reason` (exit 2) and approver authority (REQ-SEC-03, the identity read
40
+ * once, `bug-149`) → a dirty index.
41
+ */
42
+ const storage_1 = require("../storage");
43
+ const deduce_1 = require("../workflow/deduce");
44
+ const approval_authority_1 = require("./approval-authority");
45
+ const git_identity_1 = require("./git-identity");
46
+ const require_reason_1 = require("./require-reason");
47
+ const types_1 = require("./types");
48
+ const workflow_deduction_1 = require("./workflow-deduction");
49
+ const workflow_next_1 = require("./workflow-next");
50
+ const write_guard_1 = require("./write-guard");
51
+ /** The refusal when no `<ref>` is given and no instance is open (as `workflow end`'s, `spec-017` §10). */
52
+ exports.NO_ACTIVE_WORKFLOW_TO_FINALIZE = 'no active workflow to finalize';
53
+ /** `<type>:<id>` or `<collection>#<key>`, as the record's trailer and the step key write a scope. */
54
+ function scopeTrailer(scope) {
55
+ return 'item' in scope ? `WingFoil-Item: ${scope.item.collection}#${scope.item.key}` : `WingFoil-Element: ${scope.element.type}:${scope.element.id}`;
56
+ }
57
+ /** The phase-record trailers of `step` (`spec-003` § "Evidence"), in the order the spec lists them. */
58
+ function phaseRecordTrailers(step) {
59
+ return [`WingFoil-Phase: ${step.workflow}.${step.phase} completed`, `WingFoil-Instance: ${step.instance}`, ...(step.scope === null ? [] : [scopeTrailer(step.scope)])];
60
+ }
61
+ /**
62
+ * The Memory type named in the authority refusal (`user not authorized to approve type '<type>'`): the
63
+ * step's scope element's type, else the instance's bound element's, else `plan` — the instance itself.
64
+ */
65
+ function authorityType(step, instance) {
66
+ if (step.scope !== null && 'element' in step.scope)
67
+ return step.scope.element.type;
68
+ return instance.element?.type ?? 'plan';
69
+ }
70
+ /**
71
+ * Why `step` cannot be finalized: its phase completes from other evidence (`spec-017` §7.9, `dl-104` D1
72
+ * rationale). Names the missing kinds other than `record`, or — when none is missing — the kinds the phase
73
+ * declares other than `record`.
74
+ */
75
+ function evidenceRefusal(step) {
76
+ const missing = step.evidence.missing.filter((kind) => kind !== 'record');
77
+ const kinds = missing.length > 0 ? missing : step.evidence.kinds.filter((kind) => kind !== 'record');
78
+ return (0, types_1.coreErr)({
79
+ code: 'CONFLICT',
80
+ message: `phase '${step.workflow}.${step.phase}' completes from its evidence: ${kinds.join(', ')}`,
81
+ details: { step: step.key, kinds: [...step.evidence.kinds], missing: [...step.evidence.missing] },
82
+ });
83
+ }
84
+ /**
85
+ * `workflow finalize` at `HEAD` (`spec-017` §7.9). See the module comment for the record and the order of
86
+ * the refusals.
87
+ *
88
+ * @throws `UsageError` (exit 2) for an unrecordable `--reason`, or a missing one on an `approval:` phase.
89
+ * @throws `DiagnosticsError` (`VALIDATION`) when the registry at `HEAD` has a `spec-003` error;
90
+ * `StorageError` when git cannot answer; `CommitFailure` when git refuses the commit.
91
+ */
92
+ function workflowFinalizeAtHead(root, request) {
93
+ const given = (0, require_reason_1.optionalReason)(request.options);
94
+ const identity = (0, git_identity_1.requireGitIdentity)(root);
95
+ if (!identity.ok)
96
+ return identity;
97
+ const snapshot = (0, workflow_deduction_1.readDeductionSnapshotAtHead)(root);
98
+ const deduction = (0, deduce_1.deduceWorkflowState)(snapshot);
99
+ const selected = (0, deduce_1.resolveInstanceRef)(deduction, request.ref);
100
+ if (selected === null) {
101
+ if (request.ref !== undefined)
102
+ return (0, workflow_next_1.unresolvedRef)({ workflows: snapshot.workflows, plans: (0, workflow_deduction_1.instancePlanIds)(snapshot.documents) }, request.ref);
103
+ return (0, types_1.coreErr)({ code: 'NOT_FOUND', message: exports.NO_ACTIVE_WORKFLOW_TO_FINALIZE });
104
+ }
105
+ const { instance, frontier } = selected;
106
+ if (frontier.length === 0)
107
+ return (0, types_1.coreErr)({ code: 'CONFLICT', message: (0, workflow_next_1.emptyFrontierMessage)(selected), details: { instance: instance.id } });
108
+ const step = request.step === undefined ? frontier[0] : frontier.find((candidate) => candidate.key === request.step);
109
+ if (step === undefined) {
110
+ return (0, types_1.coreErr)({
111
+ code: 'CONFLICT',
112
+ message: `step '${request.step}' is not on the frontier of ${instance.id}`,
113
+ details: { frontier: frontier.map((candidate) => candidate.key) },
114
+ });
115
+ }
116
+ if (!step.evidence.finalizable)
117
+ return evidenceRefusal(step);
118
+ // A frontier step's workflow and phase are loaded (deduction puts only loaded phases on a frontier).
119
+ const phase = snapshot.workflows.find((workflow) => workflow.name === step.workflow).phases.find((candidate) => candidate.name === step.phase);
120
+ const body = [];
121
+ if (phase.approval !== undefined) {
122
+ const reason = (0, require_reason_1.requireReason)(request.options);
123
+ const authorized = (0, approval_authority_1.requireApprovalAuthority)(root, authorityType(step, instance), identity.value);
124
+ if (!authorized.ok)
125
+ return authorized;
126
+ body.push(`Approver: ${identity.value.name} <${identity.value.email}> (${approval_authority_1.APPROVER_ROLE})`, `Reason: ${reason}`);
127
+ }
128
+ else if (given !== undefined) {
129
+ body.push(`Reason: ${given}`);
130
+ }
131
+ const subject = `workflow: finalize ${instance.id} ${step.key}`;
132
+ const clean = (0, write_guard_1.requireCleanIndex)(root, subject);
133
+ if (!clean.ok)
134
+ return clean;
135
+ const finalized = (0, workflow_next_1.buildStep)(step, (0, workflow_next_1.readNextInputs)(root, snapshot, deduction));
136
+ const message = body.length === 0 ? subject : `${subject}\n\n${body.join('\n')}`;
137
+ const sha = (0, storage_1.commitEmpty)(root, message, { author: identity.value, trailers: phaseRecordTrailers(step) });
138
+ const after = (0, workflow_deduction_1.readDeductionSnapshotAtHead)(root);
139
+ const deducedAfter = (0, deduce_1.deduceWorkflowState)(after);
140
+ const nextStep = deducedAfter.instances.find((entry) => entry.instance.id === instance.id)?.frontier[0];
141
+ const next = nextStep === undefined ? null : (0, workflow_next_1.buildStep)(nextStep, (0, workflow_next_1.readNextInputs)(root, after, deducedAfter));
142
+ return (0, types_1.coreOk)({ baseline: deduction.baseline, instance, finalized, next, commit: sha }, { sha, message });
143
+ }
144
+ /** `workflow finalize`'s `--format console` rendering (`spec-017` §8). Pure. */
145
+ function renderFinalizeConsole(result) {
146
+ const lines = [`workflow: ${result.instance.workflow} (${result.instance.id})`, `finalized: ${result.finalized.key} (${result.commit})`];
147
+ if (result.next === null)
148
+ lines.push('no next step');
149
+ else
150
+ lines.push(...(0, workflow_next_1.stepLines)(result.next, 'next step'));
151
+ return `${lines.join('\n')}\n`;
152
+ }
153
+ //# sourceMappingURL=workflow-finalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-finalize.js","sourceRoot":"","sources":["../../src/core/workflow-finalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * `wingfoil workflow list [--all]` and `wingfoil workflow show <ref>` (task-204; `spec-017` §7.5, §7.6, §8,
3
+ * §10; BDD P4.6, P4.7).
4
+ *
5
+ * **Baseline: `HEAD`, declared** (`spec-017` §1.1, approver ruling R15; `spec-006` §6 item 6; `spec-008`
6
+ * §11). Both commands answer from one snapshot of the repository as committed at `HEAD` —
7
+ * `readDeductionSnapshotAtHead` — and from the deduction computed on it (`deduceWorkflowState`), the one
8
+ * `workflow next` / `status` answer from, so a workflow "executable now" here is one a frontier step there
9
+ * enters. The working tree only explains: a deduction input that differs from `HEAD` is the warning
10
+ * `W_UNCOMMITTED_INPUTS` (§1.2), never the answer. `show`'s further reads — `workflows/bindings.yaml`,
11
+ * `roles.yaml` and the directive files — are made at the snapshot's commit, so one answer has one baseline.
12
+ *
13
+ * Both payloads carry the `baseline` and the deduction's ordered `diagnostics` (§1.3). A `spec-003` error
14
+ * refuses both: the snapshot reader throws `DiagnosticsError`, which the read-only operations map to
15
+ * `VALIDATION` with every diagnostic in `details` (exit `1`, §10).
16
+ *
17
+ * The MCP Resources `wingfoil://workflows` and `wingfoil://workflows/{name}` are not these operations: they
18
+ * keep their payload and their working-tree baseline in v0.3 (§9, `src/mcp/workflow-resource.ts`).
19
+ */
20
+ import type { RolesYaml } from '../directives/schema';
21
+ import type { MemoryYaml } from '../memory/schema';
22
+ import type { Diagnostic } from '../validation';
23
+ import { type BindingsYaml, type TokenBinding } from '../workflow/bindings';
24
+ import { type Baseline, type Deduction, type EvidenceKind } from '../workflow/deduce';
25
+ import { type Cadence, type PhaseMode, type Workflow } from '../workflow/schema';
26
+ import { type DirectiveFile } from './loaders';
27
+ import { type CoreResult } from './types';
28
+ /** `ListResult.message` when `HEAD` holds no manifest (BDD P4.6 sc. 4; `spec-003` Layer 1). */
29
+ export declare const NO_WORKFLOWS_DEFINED = "no workflows defined";
30
+ /** The refusal of a `<ref>` that names no workflow (`spec-017` §10, BDD P4.7 sc. 3). */
31
+ export declare const unknownWorkflowMessage: (name: string) => string;
32
+ /** One entry of `workflow list` (`spec-017` §8 `ListResult`). */
33
+ export interface ListEntry {
34
+ readonly name: string;
35
+ readonly startable: boolean;
36
+ readonly includable: boolean;
37
+ readonly description: string | null;
38
+ /** Startable, or the sub a phase on an open instance's frontier includes (§7.5). */
39
+ readonly executableNow: boolean;
40
+ }
41
+ /** `workflow list`'s payload (`spec-017` §8). */
42
+ export interface ListResult {
43
+ readonly baseline: Baseline;
44
+ readonly workflows: readonly ListEntry[];
45
+ /** `no workflows defined` when `HEAD` holds no manifest; absent otherwise. */
46
+ readonly message?: string;
47
+ readonly diagnostics: readonly Diagnostic[];
48
+ }
49
+ /** An action or check token with its binding (`spec-017` §6.1); a check is never evaluated in v0.3. */
50
+ export interface TokenView {
51
+ readonly token: string;
52
+ readonly binding: TokenBinding;
53
+ }
54
+ /** A check token: listed with its binding, `evaluated: false` (`spec-017` §6.1, P4.12 is v1.0). */
55
+ export interface CheckTokenView extends TokenView {
56
+ readonly evaluated: false;
57
+ }
58
+ /** One phase of a resolved declaration (`spec-017` §7.6). */
59
+ export interface PhaseView {
60
+ readonly name: string;
61
+ readonly description: string | null;
62
+ readonly role: string | null;
63
+ readonly optional: boolean;
64
+ /** The role's directives, role-bound and global, ascending by id (`spec-012` §5); empty without a role. */
65
+ readonly directives: readonly {
66
+ readonly id: string;
67
+ readonly title: string;
68
+ }[];
69
+ /** That resolution's warnings (`resolveRoleDirectives`), or why none was made. */
70
+ readonly directiveWarnings: readonly string[];
71
+ readonly actions: readonly TokenView[];
72
+ readonly checks: {
73
+ readonly pre: readonly CheckTokenView[];
74
+ readonly post: readonly CheckTokenView[];
75
+ };
76
+ /** Each entry with its owner type (`null`: no element, or an implicit owner) and whether it is evidence (§4.3). */
77
+ readonly produces: readonly {
78
+ readonly pattern: string;
79
+ readonly owner: string | null;
80
+ readonly evidence: boolean;
81
+ }[];
82
+ readonly approval: {
83
+ readonly byRole: string;
84
+ } | {
85
+ readonly byPerson: string;
86
+ } | null;
87
+ readonly awaits: {
88
+ readonly party: string;
89
+ readonly evidence: CheckTokenView;
90
+ } | null;
91
+ readonly fallback: {
92
+ readonly step: string;
93
+ readonly setState: string | null;
94
+ } | null;
95
+ /** `iterate_over` and its filter (§4.6). */
96
+ readonly iterate: {
97
+ readonly over: string;
98
+ readonly where: Readonly<Record<string, unknown>> | null;
99
+ } | null;
100
+ /** A `where` without `iterate_over` (`spec-003` § "Selections"). */
101
+ readonly selection: {
102
+ readonly where: Readonly<Record<string, unknown>>;
103
+ } | null;
104
+ /** The declared mode, `fresh` when absent (`spec-003` § "Execution independence"). */
105
+ readonly mode: PhaseMode;
106
+ readonly allowedModes: readonly PhaseMode[];
107
+ readonly distinctFrom: readonly string[];
108
+ readonly cadence: Cadence;
109
+ /** The evidence kinds the phase declares (§4.3), in the deduction's order. */
110
+ readonly evidence: readonly EvidenceKind[];
111
+ readonly include: string | null;
112
+ /** The included workflow, resolved the same way, nested under this phase (P4.7 sc. 2). */
113
+ readonly sub: WorkflowView | null;
114
+ }
115
+ /** A workflow's declaration resolved (`spec-017` §7.6). */
116
+ export interface WorkflowView {
117
+ readonly name: string;
118
+ /** Repository-relative (`.wingfoil/workflows/custom/<name>.yaml`). */
119
+ readonly file: string;
120
+ readonly startable: boolean;
121
+ readonly includable: boolean;
122
+ readonly description: string | null;
123
+ readonly element: string | null;
124
+ readonly phases: readonly PhaseView[];
125
+ }
126
+ /** `workflow show`'s payload: the resolved declaration with the baseline and the diagnostics (`spec-017` §8). */
127
+ export interface ShowResult {
128
+ readonly baseline: Baseline;
129
+ readonly workflow: WorkflowView;
130
+ readonly diagnostics: readonly Diagnostic[];
131
+ }
132
+ /**
133
+ * `workflow list`'s answer from one deduction (`spec-017` §7.5): without `all`, the startable workflows and
134
+ * every includable one a frontier enters; with it, every loaded workflow. Pure.
135
+ */
136
+ export declare function listWorkflows(workflows: readonly Workflow[], deduction: Deduction, all: boolean): ListResult;
137
+ /**
138
+ * `workflow list [--all]` at `HEAD` (`spec-017` §7.5).
139
+ *
140
+ * @throws `DiagnosticsError` (`VALIDATION`) when the registry at `HEAD` has a `spec-003` error;
141
+ * `StorageError` when git cannot answer.
142
+ */
143
+ export declare function workflowListAtHead(root: string, all: boolean): ListResult;
144
+ /** What resolving one declaration reads, all at the snapshot's commit. */
145
+ export interface ShowInputs {
146
+ readonly workflows: readonly Workflow[];
147
+ /** Each workflow's file, repository-relative, parallel to `workflows`. */
148
+ readonly workflowFiles: readonly string[];
149
+ readonly memoryYaml: MemoryYaml | null;
150
+ readonly bindings: BindingsYaml | null;
151
+ readonly rolesYaml: RolesYaml | null;
152
+ readonly directiveFiles: readonly DirectiveFile[];
153
+ }
154
+ /**
155
+ * The evidence kinds `phase` declares (`spec-017` §4.3), by the rules the deduction's leaf step applies
156
+ * (`src/workflow/deduce.ts`), in its order: a plain `include` is `include` alone (§4.5); otherwise
157
+ * `include` for an `iterate_over`, `state` (`declaresState`, shared), `created`, `produces` (string
158
+ * entries with an explicit owner), `selection`, `awaits`, then `record` for an `awaits`, a phase with
159
+ * no kind but `created`, or an `approval:` whose phase holds no gate (`holdsGate: false`, §5.1, task-225).
160
+ */
161
+ export declare function declaredEvidenceKinds(workflow: Workflow, p: number, boundType: string | null, holdsGate: boolean): EvidenceKind[];
162
+ /**
163
+ * `workflow show <ref>`'s answer (`spec-017` §7.6, §10): `ref` names a loaded workflow, or an open instance
164
+ * standing for its workflow; anything else is `NOT_FOUND` `unknown workflow: <ref>`. Pure.
165
+ */
166
+ export declare function showWorkflow(inputs: ShowInputs, deduction: Deduction, ref: string): CoreResult<ShowResult>;
167
+ /**
168
+ * `workflow show <ref>` at `HEAD` (`spec-017` §7.6): the deduction snapshot (which carries `bindings.yaml`),
169
+ * then `roles.yaml` and the directive files at the snapshot's commit.
170
+ *
171
+ * @throws `DiagnosticsError` (`VALIDATION`) when the registry at `HEAD` has a `spec-003` error; a
172
+ * `ValidationError` for an invalid `roles.yaml` or directive file at `HEAD`; `StorageError` when git
173
+ * cannot answer.
174
+ */
175
+ export declare function workflowShowAtHead(root: string, ref: string): CoreResult<ShowResult>;
176
+ //# sourceMappingURL=workflow-list-show.d.ts.map