wingfoil 0.2.1 → 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 (452) hide show
  1. package/README.md +88 -42
  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 +2 -2
  48. package/dist/cli/index.d.ts.map +1 -1
  49. package/dist/cli/index.js +3 -2
  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 +6 -3
  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 +270 -60
  65. package/dist/cli/program.js.map +1 -1
  66. package/dist/cli/registrar.d.ts +16 -7
  67. package/dist/cli/registrar.d.ts.map +1 -1
  68. package/dist/cli/registrar.js +71 -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.js +6 -6
  137. package/dist/core/git-identity.d.ts +46 -11
  138. package/dist/core/git-identity.d.ts.map +1 -1
  139. package/dist/core/git-identity.js +140 -27
  140. package/dist/core/git-identity.js.map +1 -1
  141. package/dist/core/index.d.ts +189 -14
  142. package/dist/core/index.d.ts.map +1 -1
  143. package/dist/core/index.js +1241 -238
  144. package/dist/core/index.js.map +1 -1
  145. package/dist/core/init.d.ts +50 -8
  146. package/dist/core/init.d.ts.map +1 -1
  147. package/dist/core/init.js +139 -27
  148. package/dist/core/init.js.map +1 -1
  149. package/dist/core/loaders.d.ts +170 -14
  150. package/dist/core/loaders.d.ts.map +1 -1
  151. package/dist/core/loaders.js +570 -89
  152. package/dist/core/loaders.js.map +1 -1
  153. package/dist/core/memory-add-link.d.ts +28 -0
  154. package/dist/core/memory-add-link.d.ts.map +1 -0
  155. package/dist/core/memory-add-link.js +67 -0
  156. package/dist/core/memory-add-link.js.map +1 -0
  157. package/dist/core/memory-add-type.d.ts +25 -1
  158. package/dist/core/memory-add-type.d.ts.map +1 -1
  159. package/dist/core/memory-add-type.js +59 -1
  160. package/dist/core/memory-add-type.js.map +1 -1
  161. package/dist/core/memory-amend.d.ts +80 -0
  162. package/dist/core/memory-amend.d.ts.map +1 -0
  163. package/dist/core/memory-amend.js +160 -0
  164. package/dist/core/memory-amend.js.map +1 -0
  165. package/dist/core/memory-supersede.d.ts +28 -0
  166. package/dist/core/memory-supersede.d.ts.map +1 -0
  167. package/dist/core/memory-supersede.js +79 -0
  168. package/dist/core/memory-supersede.js.map +1 -0
  169. package/dist/core/memory-transition.d.ts +190 -30
  170. package/dist/core/memory-transition.d.ts.map +1 -1
  171. package/dist/core/memory-transition.js +480 -59
  172. package/dist/core/memory-transition.js.map +1 -1
  173. package/dist/core/registry.d.ts +147 -23
  174. package/dist/core/registry.d.ts.map +1 -1
  175. package/dist/core/registry.js +50 -0
  176. package/dist/core/registry.js.map +1 -1
  177. package/dist/core/relevance.d.ts +74 -12
  178. package/dist/core/relevance.d.ts.map +1 -1
  179. package/dist/core/relevance.js +45 -27
  180. package/dist/core/relevance.js.map +1 -1
  181. package/dist/core/require-reason.d.ts.map +1 -1
  182. package/dist/core/require-reason.js +6 -5
  183. package/dist/core/require-reason.js.map +1 -1
  184. package/dist/core/required-fields.d.ts +28 -0
  185. package/dist/core/required-fields.d.ts.map +1 -0
  186. package/dist/core/required-fields.js +60 -0
  187. package/dist/core/required-fields.js.map +1 -0
  188. package/dist/core/revision.d.ts +82 -0
  189. package/dist/core/revision.d.ts.map +1 -0
  190. package/dist/core/revision.js +144 -0
  191. package/dist/core/revision.js.map +1 -0
  192. package/dist/core/types.d.ts +28 -2
  193. package/dist/core/types.d.ts.map +1 -1
  194. package/dist/core/types.js +12 -3
  195. package/dist/core/types.js.map +1 -1
  196. package/dist/core/workflow-core-checks.d.ts +34 -0
  197. package/dist/core/workflow-core-checks.d.ts.map +1 -0
  198. package/dist/core/workflow-core-checks.js +403 -0
  199. package/dist/core/workflow-core-checks.js.map +1 -0
  200. package/dist/core/workflow-create-remove.d.ts +65 -0
  201. package/dist/core/workflow-create-remove.d.ts.map +1 -0
  202. package/dist/core/workflow-create-remove.js +277 -0
  203. package/dist/core/workflow-create-remove.js.map +1 -0
  204. package/dist/core/workflow-deduction.d.ts +48 -0
  205. package/dist/core/workflow-deduction.d.ts.map +1 -0
  206. package/dist/core/workflow-deduction.js +523 -0
  207. package/dist/core/workflow-deduction.js.map +1 -0
  208. package/dist/core/workflow-diagnostics.d.ts +83 -0
  209. package/dist/core/workflow-diagnostics.d.ts.map +1 -0
  210. package/dist/core/workflow-diagnostics.js +375 -0
  211. package/dist/core/workflow-diagnostics.js.map +1 -0
  212. package/dist/core/workflow-exit-state.d.ts +125 -0
  213. package/dist/core/workflow-exit-state.d.ts.map +1 -0
  214. package/dist/core/workflow-exit-state.js +243 -0
  215. package/dist/core/workflow-exit-state.js.map +1 -0
  216. package/dist/core/workflow-finalize.d.ts +37 -0
  217. package/dist/core/workflow-finalize.d.ts.map +1 -0
  218. package/dist/core/workflow-finalize.js +153 -0
  219. package/dist/core/workflow-finalize.js.map +1 -0
  220. package/dist/core/workflow-list-show.d.ts +176 -0
  221. package/dist/core/workflow-list-show.d.ts.map +1 -0
  222. package/dist/core/workflow-list-show.js +268 -0
  223. package/dist/core/workflow-list-show.js.map +1 -0
  224. package/dist/core/workflow-next.d.ts +268 -0
  225. package/dist/core/workflow-next.d.ts.map +1 -0
  226. package/dist/core/workflow-next.js +503 -0
  227. package/dist/core/workflow-next.js.map +1 -0
  228. package/dist/core/workflow-registry.d.ts +52 -0
  229. package/dist/core/workflow-registry.d.ts.map +1 -0
  230. package/dist/core/workflow-registry.js +158 -0
  231. package/dist/core/workflow-registry.js.map +1 -0
  232. package/dist/core/workflow-start-end.d.ts +71 -0
  233. package/dist/core/workflow-start-end.d.ts.map +1 -0
  234. package/dist/core/workflow-start-end.js +298 -0
  235. package/dist/core/workflow-start-end.js.map +1 -0
  236. package/dist/core/workflow-status.d.ts +83 -0
  237. package/dist/core/workflow-status.d.ts.map +1 -0
  238. package/dist/core/workflow-status.js +125 -0
  239. package/dist/core/workflow-status.js.map +1 -0
  240. package/dist/core/write-guard.d.ts +51 -8
  241. package/dist/core/write-guard.d.ts.map +1 -1
  242. package/dist/core/write-guard.js +139 -9
  243. package/dist/core/write-guard.js.map +1 -1
  244. package/dist/directives/index.d.ts +3 -2
  245. package/dist/directives/index.d.ts.map +1 -1
  246. package/dist/directives/index.js +5 -3
  247. package/dist/directives/index.js.map +1 -1
  248. package/dist/directives/schema.d.ts +35 -30
  249. package/dist/directives/schema.d.ts.map +1 -1
  250. package/dist/directives/schema.js +36 -30
  251. package/dist/directives/schema.js.map +1 -1
  252. package/dist/directives/version.d.ts +28 -0
  253. package/dist/directives/version.d.ts.map +1 -0
  254. package/dist/directives/version.js +51 -0
  255. package/dist/directives/version.js.map +1 -0
  256. package/dist/dna/edit.d.ts +7 -6
  257. package/dist/dna/edit.d.ts.map +1 -1
  258. package/dist/dna/edit.js +96 -41
  259. package/dist/dna/edit.js.map +1 -1
  260. package/dist/dna/mutate.js +18 -3
  261. package/dist/dna/mutate.js.map +1 -1
  262. package/dist/dna/path.d.ts +2 -2
  263. package/dist/dna/roles.d.ts +1 -1
  264. package/dist/dna/schema.d.ts +61 -3
  265. package/dist/dna/schema.d.ts.map +1 -1
  266. package/dist/dna/schema.js +121 -6
  267. package/dist/dna/schema.js.map +1 -1
  268. package/dist/mcp/dna-resource.d.ts.map +1 -1
  269. package/dist/mcp/dna-resource.js +4 -4
  270. package/dist/mcp/dna-resource.js.map +1 -1
  271. package/dist/mcp/index.d.ts +9 -5
  272. package/dist/mcp/index.d.ts.map +1 -1
  273. package/dist/mcp/index.js +13 -2
  274. package/dist/mcp/index.js.map +1 -1
  275. package/dist/mcp/memory-resource.d.ts.map +1 -1
  276. package/dist/mcp/memory-resource.js +30 -19
  277. package/dist/mcp/memory-resource.js.map +1 -1
  278. package/dist/mcp/prompt.d.ts +61 -24
  279. package/dist/mcp/prompt.d.ts.map +1 -1
  280. package/dist/mcp/prompt.js +176 -47
  281. package/dist/mcp/prompt.js.map +1 -1
  282. package/dist/mcp/read-only.d.ts +39 -0
  283. package/dist/mcp/read-only.d.ts.map +1 -1
  284. package/dist/mcp/read-only.js +61 -0
  285. package/dist/mcp/read-only.js.map +1 -1
  286. package/dist/mcp/registrar.d.ts +10 -0
  287. package/dist/mcp/registrar.d.ts.map +1 -1
  288. package/dist/mcp/registrar.js +48 -12
  289. package/dist/mcp/registrar.js.map +1 -1
  290. package/dist/mcp/server.d.ts +21 -14
  291. package/dist/mcp/server.d.ts.map +1 -1
  292. package/dist/mcp/server.js +41 -15
  293. package/dist/mcp/server.js.map +1 -1
  294. package/dist/mcp/session-resource.d.ts +13 -0
  295. package/dist/mcp/session-resource.d.ts.map +1 -0
  296. package/dist/mcp/session-resource.js +65 -0
  297. package/dist/mcp/session-resource.js.map +1 -0
  298. package/dist/mcp/workflow-resource.d.ts +18 -0
  299. package/dist/mcp/workflow-resource.d.ts.map +1 -1
  300. package/dist/mcp/workflow-resource.js +37 -8
  301. package/dist/mcp/workflow-resource.js.map +1 -1
  302. package/dist/memory/add.d.ts +160 -17
  303. package/dist/memory/add.d.ts.map +1 -1
  304. package/dist/memory/add.js +361 -51
  305. package/dist/memory/add.js.map +1 -1
  306. package/dist/memory/audit.d.ts +165 -32
  307. package/dist/memory/audit.d.ts.map +1 -1
  308. package/dist/memory/audit.js +267 -97
  309. package/dist/memory/audit.js.map +1 -1
  310. package/dist/memory/commit-message.d.ts +60 -38
  311. package/dist/memory/commit-message.d.ts.map +1 -1
  312. package/dist/memory/commit-message.js +167 -21
  313. package/dist/memory/commit-message.js.map +1 -1
  314. package/dist/memory/entry.d.ts.map +1 -1
  315. package/dist/memory/entry.js +1 -2
  316. package/dist/memory/entry.js.map +1 -1
  317. package/dist/memory/frontmatter-edit.d.ts +16 -4
  318. package/dist/memory/frontmatter-edit.d.ts.map +1 -1
  319. package/dist/memory/frontmatter-edit.js +13 -1
  320. package/dist/memory/frontmatter-edit.js.map +1 -1
  321. package/dist/memory/git-log.d.ts +18 -6
  322. package/dist/memory/git-log.d.ts.map +1 -1
  323. package/dist/memory/git-log.js +40 -13
  324. package/dist/memory/git-log.js.map +1 -1
  325. package/dist/memory/history.d.ts +74 -13
  326. package/dist/memory/history.d.ts.map +1 -1
  327. package/dist/memory/history.js +129 -45
  328. package/dist/memory/history.js.map +1 -1
  329. package/dist/memory/index.d.ts +13 -11
  330. package/dist/memory/index.d.ts.map +1 -1
  331. package/dist/memory/index.js +38 -3
  332. package/dist/memory/index.js.map +1 -1
  333. package/dist/memory/query.d.ts +161 -19
  334. package/dist/memory/query.d.ts.map +1 -1
  335. package/dist/memory/query.js +435 -55
  336. package/dist/memory/query.js.map +1 -1
  337. package/dist/memory/schema.d.ts +52 -3
  338. package/dist/memory/schema.d.ts.map +1 -1
  339. package/dist/memory/schema.js +132 -8
  340. package/dist/memory/schema.js.map +1 -1
  341. package/dist/memory/state-machine.d.ts +65 -10
  342. package/dist/memory/state-machine.d.ts.map +1 -1
  343. package/dist/memory/state-machine.js +136 -48
  344. package/dist/memory/state-machine.js.map +1 -1
  345. package/dist/memory/submit.d.ts +52 -3
  346. package/dist/memory/submit.d.ts.map +1 -1
  347. package/dist/memory/submit.js +118 -11
  348. package/dist/memory/submit.js.map +1 -1
  349. package/dist/storage/build-stamp.d.ts +18 -0
  350. package/dist/storage/build-stamp.d.ts.map +1 -0
  351. package/dist/storage/build-stamp.js +68 -0
  352. package/dist/storage/build-stamp.js.map +1 -0
  353. package/dist/storage/builtin-adapters.d.ts +32 -0
  354. package/dist/storage/builtin-adapters.d.ts.map +1 -0
  355. package/dist/storage/builtin-adapters.js +100 -0
  356. package/dist/storage/builtin-adapters.js.map +1 -0
  357. package/dist/storage/builtin-directives.d.ts +0 -29
  358. package/dist/storage/builtin-directives.d.ts.map +1 -1
  359. package/dist/storage/builtin-directives.js +9 -4
  360. package/dist/storage/builtin-directives.js.map +1 -1
  361. package/dist/storage/commit.d.ts +310 -3
  362. package/dist/storage/commit.d.ts.map +1 -1
  363. package/dist/storage/commit.js +807 -33
  364. package/dist/storage/commit.js.map +1 -1
  365. package/dist/storage/document.d.ts +6 -0
  366. package/dist/storage/document.d.ts.map +1 -1
  367. package/dist/storage/document.js +10 -1
  368. package/dist/storage/document.js.map +1 -1
  369. package/dist/storage/dry-run.d.ts +65 -0
  370. package/dist/storage/dry-run.d.ts.map +1 -0
  371. package/dist/storage/dry-run.js +150 -0
  372. package/dist/storage/dry-run.js.map +1 -0
  373. package/dist/storage/errors.d.ts +26 -0
  374. package/dist/storage/errors.d.ts.map +1 -1
  375. package/dist/storage/errors.js +27 -1
  376. package/dist/storage/errors.js.map +1 -1
  377. package/dist/storage/frontmatter.d.ts +1 -1
  378. package/dist/storage/frontmatter.js +1 -1
  379. package/dist/storage/git-read.d.ts +64 -0
  380. package/dist/storage/git-read.d.ts.map +1 -0
  381. package/dist/storage/git-read.js +107 -0
  382. package/dist/storage/git-read.js.map +1 -0
  383. package/dist/storage/index.d.ts +13 -5
  384. package/dist/storage/index.d.ts.map +1 -1
  385. package/dist/storage/index.js +39 -2
  386. package/dist/storage/index.js.map +1 -1
  387. package/dist/storage/layout.d.ts +2 -2
  388. package/dist/storage/layout.d.ts.map +1 -1
  389. package/dist/storage/layout.js +2 -7
  390. package/dist/storage/layout.js.map +1 -1
  391. package/dist/storage/memory-path.d.ts +18 -5
  392. package/dist/storage/memory-path.d.ts.map +1 -1
  393. package/dist/storage/memory-path.js +41 -5
  394. package/dist/storage/memory-path.js.map +1 -1
  395. package/dist/storage/snapshot.js +1 -1
  396. package/dist/storage/templates.d.ts +33 -6
  397. package/dist/storage/templates.d.ts.map +1 -1
  398. package/dist/storage/templates.js +182 -17
  399. package/dist/storage/templates.js.map +1 -1
  400. package/dist/validation/config-version.d.ts +19 -0
  401. package/dist/validation/config-version.d.ts.map +1 -0
  402. package/dist/validation/config-version.js +53 -0
  403. package/dist/validation/config-version.js.map +1 -0
  404. package/dist/validation/diagnostic.d.ts +40 -0
  405. package/dist/validation/diagnostic.d.ts.map +1 -0
  406. package/dist/validation/diagnostic.js +41 -0
  407. package/dist/validation/diagnostic.js.map +1 -0
  408. package/dist/validation/format.d.ts +74 -0
  409. package/dist/validation/format.d.ts.map +1 -0
  410. package/dist/validation/format.js +104 -0
  411. package/dist/validation/format.js.map +1 -0
  412. package/dist/validation/id.d.ts +40 -0
  413. package/dist/validation/id.d.ts.map +1 -1
  414. package/dist/validation/id.js +99 -12
  415. package/dist/validation/id.js.map +1 -1
  416. package/dist/validation/identity.d.ts +40 -0
  417. package/dist/validation/identity.d.ts.map +1 -0
  418. package/dist/validation/identity.js +78 -0
  419. package/dist/validation/identity.js.map +1 -0
  420. package/dist/validation/index.d.ts +9 -3
  421. package/dist/validation/index.d.ts.map +1 -1
  422. package/dist/validation/index.js +33 -1
  423. package/dist/validation/index.js.map +1 -1
  424. package/dist/validation/secret-scan.d.ts +10 -7
  425. package/dist/validation/secret-scan.d.ts.map +1 -1
  426. package/dist/validation/secret-scan.js +39 -16
  427. package/dist/validation/secret-scan.js.map +1 -1
  428. package/dist/validation/warning.d.ts +30 -16
  429. package/dist/validation/warning.d.ts.map +1 -1
  430. package/dist/validation/warning.js +74 -7
  431. package/dist/validation/warning.js.map +1 -1
  432. package/dist/workflow/bindings.d.ts +152 -0
  433. package/dist/workflow/bindings.d.ts.map +1 -0
  434. package/dist/workflow/bindings.js +249 -0
  435. package/dist/workflow/bindings.js.map +1 -0
  436. package/dist/workflow/create.d.ts +13 -0
  437. package/dist/workflow/create.d.ts.map +1 -0
  438. package/dist/workflow/create.js +41 -0
  439. package/dist/workflow/create.js.map +1 -0
  440. package/dist/workflow/deduce.d.ts +400 -0
  441. package/dist/workflow/deduce.d.ts.map +1 -0
  442. package/dist/workflow/deduce.js +1109 -0
  443. package/dist/workflow/deduce.js.map +1 -0
  444. package/dist/workflow/manifest-edit.d.ts +19 -0
  445. package/dist/workflow/manifest-edit.d.ts.map +1 -0
  446. package/dist/workflow/manifest-edit.js +124 -0
  447. package/dist/workflow/manifest-edit.js.map +1 -0
  448. package/dist/workflow/schema.d.ts +158 -19
  449. package/dist/workflow/schema.d.ts.map +1 -1
  450. package/dist/workflow/schema.js +190 -16
  451. package/dist/workflow/schema.js.map +1 -1
  452. package/package.json +37 -13
@@ -0,0 +1,74 @@
1
+ /**
2
+ * The `format:` key (`dl-149`, task-251): which format a WingFoil file is written in — distinct from
3
+ * `version:`, its content revision (`dl-047`). Every file kind has its own counter, declared once
4
+ * below; an absent key reads as format `1`; a kind's format is bumped **only** on a
5
+ * backward-incompatible change of that kind (an additive, optional field does not bump it).
6
+ *
7
+ * The constants sit in `src/validation` because both sides need them: each pillar's schema and loader,
8
+ * and the `wingfoil init` scaffold in `src/storage`, which imports no pillar module.
9
+ *
10
+ * A reader of a file kind does two things with its constant:
11
+ * - its Zod schema declares `format: formatField(<KIND>_FORMAT)` — an optional positive integer, so a
12
+ * non-integer or non-positive value is a structural error on the `format` field (spec-009 §1);
13
+ * - its loader calls {@link refuseNewerFormat} (or {@link newerFormatIssue}) **before** the structural
14
+ * pass, so a file written by a newer WingFoil is refused for its format alone, with an actionable
15
+ * message, rather than for whatever of its content today's schema misreads.
16
+ */
17
+ import { z } from 'zod';
18
+ import { ValidationError, type ValidationIssue } from './errors';
19
+ /** `.wingfoil/dna.yaml` (`spec-002`). */
20
+ export declare const DNA_YAML_FORMAT: 1;
21
+ /** `.wingfoil/memory.yaml` (`spec-001`). */
22
+ export declare const MEMORY_YAML_FORMAT: 1;
23
+ /** A Memory template's frontmatter, `.wingfoil/memory/templates/*.md` (`spec-001` `template.file`). */
24
+ export declare const MEMORY_TEMPLATE_FORMAT: 1;
25
+ /** `.wingfoil/roles.yaml` (`spec-013`). */
26
+ export declare const ROLES_YAML_FORMAT: 1;
27
+ /** A directive's frontmatter, `.wingfoil/directives/**\/*.md` (`spec-013`). */
28
+ export declare const DIRECTIVE_FORMAT: 1;
29
+ /** `.wingfoil/workflows.yaml`, the Layer-1 manifest (`spec-003`). */
30
+ export declare const WORKFLOWS_YAML_FORMAT: 1;
31
+ /** A workflow file the manifest includes, Layer 2 (`spec-003`). */
32
+ export declare const WORKFLOW_FORMAT: 1;
33
+ /** `.wingfoil/workflows/bindings.yaml`, the Layer-3 token bindings (`spec-003`; `dl-153` (A), task-199). */
34
+ export declare const BINDINGS_YAML_FORMAT: 1;
35
+ /**
36
+ * An agent adapter manifest (`spec-016` §2.2 `format`, task-177) — the first kind that carried the key.
37
+ * Unlike the others it is required and read as a literal (`src/agent/schema.ts`); like the others, a
38
+ * newer one is refused by {@link refuseNewerFormat} before the structural pass (`parseAdapterManifest`,
39
+ * task-200, `bug-242`).
40
+ */
41
+ export declare const ADAPTER_MANIFEST_FORMAT: 1;
42
+ /** `spec-009` §3's field-level code for a file written in a format this build does not read. */
43
+ export declare const E_INVALID_FORMAT = "E_INVALID_FORMAT";
44
+ /** The refusal of a newer format: the file's format, the highest this build reads, and what to do. */
45
+ export declare function newerFormatMessage(format: unknown, highest: number): string;
46
+ /**
47
+ * The `format:` field of a kind whose highest readable format is `highest`: optional (absent = 1),
48
+ * a positive integer, and at most `highest`. The bound carries {@link newerFormatMessage}; it is the
49
+ * backstop for the parses that run without a loader (`dna set`'s post-edit check, `directive
50
+ * assign`'s `roles.yaml` edit, the built-in template check), where it surfaces as an `E_VALIDATION`.
51
+ */
52
+ export declare function formatField(highest: number): z.ZodOptional<z.ZodNumber>;
53
+ /**
54
+ * The loader pre-check's issue: `E_INVALID_FORMAT` on `format` when `data` is an object whose
55
+ * `format` is a positive integer above `highest`, else `null`. Any other `format` value — absent, or
56
+ * one the schema refuses (`1.5`, `0`, `"2"`) — is left to the structural pass, which names the field.
57
+ *
58
+ * "An older format this build no longer reads" (`dl-149` Loader) belongs here too, as a lower bound per
59
+ * kind with a message naming the last release that read the format. No kind has one yet — every format
60
+ * is still `1` — so it is not written; a migration command is a separate proposal (`dl-149` Action 3).
61
+ */
62
+ export declare function newerFormatIssue(data: unknown, highest: number, file: string): ValidationIssue | null;
63
+ /**
64
+ * Throw {@link newerFormatIssue}'s issue, if any, as a `ValidationError` at exit `1` — `spec-005` §1's
65
+ * code for a validation failure: the file was understood, and the rule said no (`spec-009` §3).
66
+ */
67
+ export declare function refuseNewerFormat(data: unknown, highest: number, file: string): void;
68
+ /**
69
+ * Whether `error` is a newer-format refusal ({@link refuseNewerFormat}'s `ValidationError` carrying
70
+ * {@link E_INVALID_FORMAT}) — what a reader that turns the refusal into its own message checks before
71
+ * it does, so that no other failure is labelled as a newer format (task-257 review F2).
72
+ */
73
+ export declare function isNewerFormatError(error: unknown): error is ValidationError;
74
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/validation/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAmB,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAElF,yCAAyC;AACzC,eAAO,MAAM,eAAe,EAAG,CAAU,CAAC;AAC1C,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,EAAG,CAAU,CAAC;AAC7C,uGAAuG;AACvG,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AACjD,2CAA2C;AAC3C,eAAO,MAAM,iBAAiB,EAAG,CAAU,CAAC;AAC5C,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAC3C,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,EAAG,CAAU,CAAC;AAChD,mEAAmE;AACnE,eAAO,MAAM,eAAe,EAAG,CAAU,CAAC;AAC1C,4GAA4G;AAC5G,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAC/C;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAG,CAAU,CAAC;AAElD,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,8BAO1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAKrG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGpF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE3E"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.E_INVALID_FORMAT = exports.ADAPTER_MANIFEST_FORMAT = exports.BINDINGS_YAML_FORMAT = exports.WORKFLOW_FORMAT = exports.WORKFLOWS_YAML_FORMAT = exports.DIRECTIVE_FORMAT = exports.ROLES_YAML_FORMAT = exports.MEMORY_TEMPLATE_FORMAT = exports.MEMORY_YAML_FORMAT = exports.DNA_YAML_FORMAT = void 0;
4
+ exports.newerFormatMessage = newerFormatMessage;
5
+ exports.formatField = formatField;
6
+ exports.newerFormatIssue = newerFormatIssue;
7
+ exports.refuseNewerFormat = refuseNewerFormat;
8
+ exports.isNewerFormatError = isNewerFormatError;
9
+ /**
10
+ * The `format:` key (`dl-149`, task-251): which format a WingFoil file is written in — distinct from
11
+ * `version:`, its content revision (`dl-047`). Every file kind has its own counter, declared once
12
+ * below; an absent key reads as format `1`; a kind's format is bumped **only** on a
13
+ * backward-incompatible change of that kind (an additive, optional field does not bump it).
14
+ *
15
+ * The constants sit in `src/validation` because both sides need them: each pillar's schema and loader,
16
+ * and the `wingfoil init` scaffold in `src/storage`, which imports no pillar module.
17
+ *
18
+ * A reader of a file kind does two things with its constant:
19
+ * - its Zod schema declares `format: formatField(<KIND>_FORMAT)` — an optional positive integer, so a
20
+ * non-integer or non-positive value is a structural error on the `format` field (spec-009 §1);
21
+ * - its loader calls {@link refuseNewerFormat} (or {@link newerFormatIssue}) **before** the structural
22
+ * pass, so a file written by a newer WingFoil is refused for its format alone, with an actionable
23
+ * message, rather than for whatever of its content today's schema misreads.
24
+ */
25
+ const zod_1 = require("zod");
26
+ const errors_1 = require("./errors");
27
+ /** `.wingfoil/dna.yaml` (`spec-002`). */
28
+ exports.DNA_YAML_FORMAT = 1;
29
+ /** `.wingfoil/memory.yaml` (`spec-001`). */
30
+ exports.MEMORY_YAML_FORMAT = 1;
31
+ /** A Memory template's frontmatter, `.wingfoil/memory/templates/*.md` (`spec-001` `template.file`). */
32
+ exports.MEMORY_TEMPLATE_FORMAT = 1;
33
+ /** `.wingfoil/roles.yaml` (`spec-013`). */
34
+ exports.ROLES_YAML_FORMAT = 1;
35
+ /** A directive's frontmatter, `.wingfoil/directives/**\/*.md` (`spec-013`). */
36
+ exports.DIRECTIVE_FORMAT = 1;
37
+ /** `.wingfoil/workflows.yaml`, the Layer-1 manifest (`spec-003`). */
38
+ exports.WORKFLOWS_YAML_FORMAT = 1;
39
+ /** A workflow file the manifest includes, Layer 2 (`spec-003`). */
40
+ exports.WORKFLOW_FORMAT = 1;
41
+ /** `.wingfoil/workflows/bindings.yaml`, the Layer-3 token bindings (`spec-003`; `dl-153` (A), task-199). */
42
+ exports.BINDINGS_YAML_FORMAT = 1;
43
+ /**
44
+ * An agent adapter manifest (`spec-016` §2.2 `format`, task-177) — the first kind that carried the key.
45
+ * Unlike the others it is required and read as a literal (`src/agent/schema.ts`); like the others, a
46
+ * newer one is refused by {@link refuseNewerFormat} before the structural pass (`parseAdapterManifest`,
47
+ * task-200, `bug-242`).
48
+ */
49
+ exports.ADAPTER_MANIFEST_FORMAT = 1;
50
+ /** `spec-009` §3's field-level code for a file written in a format this build does not read. */
51
+ exports.E_INVALID_FORMAT = 'E_INVALID_FORMAT';
52
+ /** The refusal of a newer format: the file's format, the highest this build reads, and what to do. */
53
+ function newerFormatMessage(format, highest) {
54
+ return `this file is written in format ${String(format)}; this WingFoil reads up to format ${highest}: upgrade WingFoil`;
55
+ }
56
+ /**
57
+ * The `format:` field of a kind whose highest readable format is `highest`: optional (absent = 1),
58
+ * a positive integer, and at most `highest`. The bound carries {@link newerFormatMessage}; it is the
59
+ * backstop for the parses that run without a loader (`dna set`'s post-edit check, `directive
60
+ * assign`'s `roles.yaml` edit, the built-in template check), where it surfaces as an `E_VALIDATION`.
61
+ */
62
+ function formatField(highest) {
63
+ return zod_1.z
64
+ .number()
65
+ .int()
66
+ .positive()
67
+ .max(highest, { error: (issue) => newerFormatMessage(issue.input, highest) })
68
+ .optional();
69
+ }
70
+ /**
71
+ * The loader pre-check's issue: `E_INVALID_FORMAT` on `format` when `data` is an object whose
72
+ * `format` is a positive integer above `highest`, else `null`. Any other `format` value — absent, or
73
+ * one the schema refuses (`1.5`, `0`, `"2"`) — is left to the structural pass, which names the field.
74
+ *
75
+ * "An older format this build no longer reads" (`dl-149` Loader) belongs here too, as a lower bound per
76
+ * kind with a message naming the last release that read the format. No kind has one yet — every format
77
+ * is still `1` — so it is not written; a migration command is a separate proposal (`dl-149` Action 3).
78
+ */
79
+ function newerFormatIssue(data, highest, file) {
80
+ if (typeof data !== 'object' || data === null || Array.isArray(data))
81
+ return null;
82
+ const format = data.format;
83
+ if (typeof format !== 'number' || !Number.isInteger(format) || format <= highest)
84
+ return null;
85
+ return { code: exports.E_INVALID_FORMAT, path: 'format', file, message: newerFormatMessage(format, highest) };
86
+ }
87
+ /**
88
+ * Throw {@link newerFormatIssue}'s issue, if any, as a `ValidationError` at exit `1` — `spec-005` §1's
89
+ * code for a validation failure: the file was understood, and the rule said no (`spec-009` §3).
90
+ */
91
+ function refuseNewerFormat(data, highest, file) {
92
+ const issue = newerFormatIssue(data, highest, file);
93
+ if (issue !== null)
94
+ throw new errors_1.ValidationError([issue], errors_1.EXIT_VALIDATION);
95
+ }
96
+ /**
97
+ * Whether `error` is a newer-format refusal ({@link refuseNewerFormat}'s `ValidationError` carrying
98
+ * {@link E_INVALID_FORMAT}) — what a reader that turns the refusal into its own message checks before
99
+ * it does, so that no other failure is labelled as a newer format (task-257 review F2).
100
+ */
101
+ function isNewerFormatError(error) {
102
+ return error instanceof errors_1.ValidationError && error.issues.some((issue) => issue.code === exports.E_INVALID_FORMAT);
103
+ }
104
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/validation/format.ts"],"names":[],"mappings":";;;AAgDA,gDAEC;AAQD,kCAOC;AAWD,4CAKC;AAMD,8CAGC;AAOD,gDAEC;AAnGD;;;;;;;;;;;;;;;GAeG;AACH,6BAAwB;AAExB,qCAAkF;AAElF,yCAAyC;AAC5B,QAAA,eAAe,GAAG,CAAU,CAAC;AAC1C,4CAA4C;AAC/B,QAAA,kBAAkB,GAAG,CAAU,CAAC;AAC7C,uGAAuG;AAC1F,QAAA,sBAAsB,GAAG,CAAU,CAAC;AACjD,2CAA2C;AAC9B,QAAA,iBAAiB,GAAG,CAAU,CAAC;AAC5C,+EAA+E;AAClE,QAAA,gBAAgB,GAAG,CAAU,CAAC;AAC3C,qEAAqE;AACxD,QAAA,qBAAqB,GAAG,CAAU,CAAC;AAChD,mEAAmE;AACtD,QAAA,eAAe,GAAG,CAAU,CAAC;AAC1C,4GAA4G;AAC/F,QAAA,oBAAoB,GAAG,CAAU,CAAC;AAC/C;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,CAAU,CAAC;AAElD,gGAAgG;AACnF,QAAA,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD,sGAAsG;AACtG,SAAgB,kBAAkB,CAAC,MAAe,EAAE,OAAe;IACjE,OAAO,kCAAkC,MAAM,CAAC,MAAM,CAAC,sCAAsC,OAAO,oBAAoB,CAAC;AAC3H,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,OAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;SAC5E,QAAQ,EAAE,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,IAAa,EAAE,OAAe,EAAE,IAAY;IAC3E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,MAAM,MAAM,GAAI,IAA6B,CAAC,MAAM,CAAC;IACrD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9F,OAAO,EAAE,IAAI,EAAE,wBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AACxG,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,IAAa,EAAE,OAAe,EAAE,IAAY;IAC5E,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,IAAI;QAAE,MAAM,IAAI,wBAAe,CAAC,CAAC,KAAK,CAAC,EAAE,wBAAe,CAAC,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,wBAAe,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAgB,CAAC,CAAC;AAC3G,CAAC"}
@@ -1,10 +1,50 @@
1
1
  /** The shared ID character class (spec-009 §1): lowercase alphanumerics, `-`, and `.`. */
2
2
  export declare const ID_CHAR_CLASS = "a-z0-9-.";
3
+ /**
4
+ * Whether `token` (a `{…}` name without its braces) is a `{n}`-family counter token: `n`, `nn`,
5
+ * `nnn`, … or `n:N` (task-163, `bug-176`). Every such token takes the one counter value given as `n`.
6
+ */
7
+ export declare function isNumericToken(token: string): boolean;
3
8
  /**
4
9
  * Build the RegExp an ID produced from `pattern` must match: literals are matched verbatim, numeric
5
10
  * tokens as `[0-9]+`, and every other token as a hyphen-separated `[a-z0-9.]` slug.
6
11
  */
7
12
  export declare function patternToRegExp(pattern: string): RegExp;
13
+ /**
14
+ * The unanchored RegExp source behind {@link patternToRegExp}, for embedding an id inside a longer
15
+ * match (`memory add`'s counter matches a whole repository path, task-128). With `captureNumeric`,
16
+ * each `{n}`-family token is a capturing group `([0-9]+)` and nothing else captures, so group 1 is
17
+ * the first numeric token's value.
18
+ */
19
+ export declare function patternToSource(pattern: string, options?: {
20
+ readonly captureNumeric?: boolean;
21
+ }): string;
22
+ /**
23
+ * Whether `value` is a legal ID piece — non-empty and wholly inside the shared ID character class
24
+ * `[a-z0-9-.]` (spec-009 §1). The same test {@link generateId} applies to every rendered token value,
25
+ * exported so a caller that materializes a token itself (`memory add`'s field tokens,
26
+ * task-110) refuses exactly what `generateId` would.
27
+ */
28
+ export declare function isIdPiece(value: string): boolean;
29
+ /**
30
+ * The `{token}` names of an `id_pattern` (or a `path` pattern — same brace syntax), in order of
31
+ * appearance, duplicates kept. `{n}` family tokens are returned as written (`n`, `nnn`).
32
+ */
33
+ export declare function patternTokens(pattern: string): string[];
34
+ /**
35
+ * Validate an `id_pattern` on its own, without rendering it — the check a pattern declared somewhere
36
+ * other than `memory.yaml` gets, e.g. a workflow `memory.add` action's per-action override
37
+ * (`spec-001` "Per-action override", `dl-107` S3 (a), task-110). Returns one message per problem, in
38
+ * pattern order; an empty array means the pattern is well-formed:
39
+ *
40
+ * - an empty pattern;
41
+ * - literal characters outside `[a-z0-9-.]` — the same rule and wording as {@link generateId}'s
42
+ * Pass A;
43
+ * - a token that is neither a `{n}`-family token nor a field name `[a-z][a-z0-9_-]*`. A **dotted**
44
+ * token (`{release.version}`) is named as such: it would read a field of an element in the
45
+ * workflow's `element:` chain, which is `dl-090`'s resolution and undefined until that lands.
46
+ */
47
+ export declare function idPatternIssues(pattern: string): string[];
8
48
  /**
9
49
  * Generate a concrete ID from `pattern` and `values`.
10
50
  *
@@ -1 +1 @@
1
- {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/validation/id.ts"],"names":[],"mappings":"AAoBA,0FAA0F;AAC1F,eAAO,MAAM,aAAa,aAAa,CAAC;AAkDxC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYvD;AAeD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CA2D3F"}
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/validation/id.ts"],"names":[],"mappings":"AAoBA,0FAA0F;AAC1F,eAAO,MAAM,aAAa,aAAa,CAAC;AA4CxC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAOD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAY5G;AAkBD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBzD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CA4D3F"}
@@ -1,13 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ID_CHAR_CLASS = void 0;
4
+ exports.isNumericToken = isNumericToken;
4
5
  exports.patternToRegExp = patternToRegExp;
6
+ exports.patternToSource = patternToSource;
7
+ exports.isIdPiece = isIdPiece;
8
+ exports.patternTokens = patternTokens;
9
+ exports.idPatternIssues = idPatternIssues;
5
10
  exports.generateId = generateId;
6
11
  /**
7
12
  * ID-generation engine (task-002-validation-id-engine, acceptance criteria 5).
8
13
  *
9
14
  * Generates a concrete Memory-element ID from a type's `id_pattern` (declared in
10
- * `docs/self/.wingfoil/memory.yaml`, e.g. `task-{n}-{slug}`) plus values for its `{placeholder}`
15
+ * `.wingfoil/memory.yaml`, e.g. `task-{n}-{slug}`) plus values for its `{placeholder}`
11
16
  * tokens. It enforces the shared ID character class `[a-z0-9-.]` that spec-009-validation-strategy
12
17
  * §1 frames as a Pass-2 rule owned by "the shared ID constants":
13
18
  *
@@ -28,8 +33,11 @@ exports.ID_CHAR_CLASS = 'a-z0-9-.';
28
33
  const ID_PIECE_RE = /^[a-z0-9.-]+$/;
29
34
  /** A literal pattern segment: every character must be a member of the ID character class. */
30
35
  const LITERAL_RE = /^[a-z0-9.-]+$/;
31
- /** A numeric token is one written purely as `n` (e.g. `{n}`, `{nn}`, `{nnn}`). */
32
- const NUMERIC_TOKEN_RE = /^n+$/;
36
+ /**
37
+ * A numeric token: one written purely as `n` (`{n}`, `{nn}`, `{nnn}`), or `{n:N}` with a width
38
+ * `N >= 1` (`spec-001`'s placeholder table; task-163, `bug-176`).
39
+ */
40
+ const NUMERIC_TOKEN_RE = /^(?:n+|n:[1-9][0-9]*)$/;
33
41
  /** Minimum zero-pad width for numeric tokens (observed convention: task-001, adr-005, spec-009). */
34
42
  const DEFAULT_PAD_WIDTH = 3;
35
43
  const TOKEN_RE = /\{([^{}]+)\}/g;
@@ -51,6 +59,10 @@ function parsePattern(pattern) {
51
59
  }
52
60
  return segments;
53
61
  }
62
+ /**
63
+ * Whether `token` (a `{…}` name without its braces) is a `{n}`-family counter token: `n`, `nn`,
64
+ * `nnn`, … or `n:N` (task-163, `bug-176`). Every such token takes the one counter value given as `n`.
65
+ */
54
66
  function isNumericToken(token) {
55
67
  return NUMERIC_TOKEN_RE.test(token);
56
68
  }
@@ -63,18 +75,28 @@ function escapeLiteral(literal) {
63
75
  * tokens as `[0-9]+`, and every other token as a hyphen-separated `[a-z0-9.]` slug.
64
76
  */
65
77
  function patternToRegExp(pattern) {
66
- const segments = parsePattern(pattern);
67
- let source = '^';
68
- for (const segment of segments) {
78
+ return new RegExp(`^${patternToSource(pattern)}$`);
79
+ }
80
+ /**
81
+ * The unanchored RegExp source behind {@link patternToRegExp}, for embedding an id inside a longer
82
+ * match (`memory add`'s counter matches a whole repository path, task-128). With `captureNumeric`,
83
+ * each `{n}`-family token is a capturing group `([0-9]+)` and nothing else captures, so group 1 is
84
+ * the first numeric token's value.
85
+ */
86
+ function patternToSource(pattern, options = {}) {
87
+ let source = '';
88
+ for (const segment of parsePattern(pattern)) {
69
89
  if (segment.kind === 'literal') {
70
90
  source += escapeLiteral(segment.value);
71
91
  }
92
+ else if (isNumericToken(segment.value)) {
93
+ source += options.captureNumeric === true ? '([0-9]+)' : '[0-9]+';
94
+ }
72
95
  else {
73
- source += isNumericToken(segment.value) ? '[0-9]+' : '[a-z0-9.]+(?:-[a-z0-9.]+)*';
96
+ source += '[a-z0-9.]+(?:-[a-z0-9.]+)*';
74
97
  }
75
98
  }
76
- source += '$';
77
- return new RegExp(source);
99
+ return source;
78
100
  }
79
101
  /** Collect, in order of first appearance, the characters of `literal` outside the ID class. */
80
102
  function offendingChars(literal) {
@@ -88,6 +110,66 @@ function offendingChars(literal) {
88
110
  }
89
111
  return out;
90
112
  }
113
+ /** A non-numeric token name: a frontmatter field or context name (`version`, `release-line`, `tmpl_version`). */
114
+ const FIELD_TOKEN_RE = /^[a-z][a-z0-9_-]*$/;
115
+ /**
116
+ * Whether `value` is a legal ID piece — non-empty and wholly inside the shared ID character class
117
+ * `[a-z0-9-.]` (spec-009 §1). The same test {@link generateId} applies to every rendered token value,
118
+ * exported so a caller that materializes a token itself (`memory add`'s field tokens,
119
+ * task-110) refuses exactly what `generateId` would.
120
+ */
121
+ function isIdPiece(value) {
122
+ return ID_PIECE_RE.test(value);
123
+ }
124
+ /**
125
+ * The `{token}` names of an `id_pattern` (or a `path` pattern — same brace syntax), in order of
126
+ * appearance, duplicates kept. `{n}` family tokens are returned as written (`n`, `nnn`).
127
+ */
128
+ function patternTokens(pattern) {
129
+ return parsePattern(pattern)
130
+ .filter((segment) => segment.kind === 'token')
131
+ .map((segment) => segment.value);
132
+ }
133
+ /**
134
+ * Validate an `id_pattern` on its own, without rendering it — the check a pattern declared somewhere
135
+ * other than `memory.yaml` gets, e.g. a workflow `memory.add` action's per-action override
136
+ * (`spec-001` "Per-action override", `dl-107` S3 (a), task-110). Returns one message per problem, in
137
+ * pattern order; an empty array means the pattern is well-formed:
138
+ *
139
+ * - an empty pattern;
140
+ * - literal characters outside `[a-z0-9-.]` — the same rule and wording as {@link generateId}'s
141
+ * Pass A;
142
+ * - a token that is neither a `{n}`-family token nor a field name `[a-z][a-z0-9_-]*`. A **dotted**
143
+ * token (`{release.version}`) is named as such: it would read a field of an element in the
144
+ * workflow's `element:` chain, which is `dl-090`'s resolution and undefined until that lands.
145
+ */
146
+ function idPatternIssues(pattern) {
147
+ if (pattern.length === 0)
148
+ return ['pattern is empty'];
149
+ const issues = [];
150
+ const segments = parsePattern(pattern);
151
+ const badChars = [];
152
+ for (const segment of segments) {
153
+ if (segment.kind !== 'literal')
154
+ continue;
155
+ for (const ch of offendingChars(segment.value))
156
+ if (!badChars.includes(ch))
157
+ badChars.push(ch);
158
+ }
159
+ if (badChars.length > 0) {
160
+ issues.push(`pattern contains character(s) outside [${exports.ID_CHAR_CLASS}]: ${badChars.join(', ')}`);
161
+ }
162
+ for (const segment of segments) {
163
+ if (segment.kind !== 'token')
164
+ continue;
165
+ const token = segment.value;
166
+ if (isNumericToken(token) || FIELD_TOKEN_RE.test(token))
167
+ continue;
168
+ const dotted = token.includes('.') && token.split('.').every((part) => FIELD_TOKEN_RE.test(part));
169
+ issues.push(dotted ? `dotted token {${token}} is not defined until dl-090` : `malformed token {${token}}`);
170
+ }
171
+ return issues;
172
+ }
91
173
  /**
92
174
  * Generate a concrete ID from `pattern` and `values`.
93
175
  *
@@ -124,7 +206,8 @@ function generateId(pattern, values) {
124
206
  continue;
125
207
  }
126
208
  const token = segment.value;
127
- const value = values[token];
209
+ // Every `{n}`-family token renders the one counter value, given as `n` (task-163, `bug-176`).
210
+ const value = values[token] ?? (isNumericToken(token) ? values.n : undefined);
128
211
  if (value === undefined) {
129
212
  issues.push(invalidId(pattern, `missing value for token {${token}}`));
130
213
  continue;
@@ -157,7 +240,11 @@ function generateId(pattern, values) {
157
240
  function invalidId(pattern, message) {
158
241
  return { code: 'E_INVALID_ID', path: 'id', file: pattern, message };
159
242
  }
160
- /** Render a numeric token, zero-padded to at least the token width (min 3). `null` if not numeric. */
243
+ /**
244
+ * Render a numeric token zero-padded to its minimum width: `N` for `{n:N}`, otherwise the token's
245
+ * width with a floor of 3 (`{n}` → `002`). Never truncates. `null` if the value is not a
246
+ * non-negative integer.
247
+ */
161
248
  function renderNumeric(token, value) {
162
249
  let n;
163
250
  if (typeof value === 'number') {
@@ -171,7 +258,7 @@ function renderNumeric(token, value) {
171
258
  }
172
259
  if (!Number.isInteger(n) || n < 0)
173
260
  return null;
174
- const width = Math.max(DEFAULT_PAD_WIDTH, token.length);
261
+ const width = token.startsWith('n:') ? Number(token.slice(2)) : Math.max(DEFAULT_PAD_WIDTH, token.length);
175
262
  return String(n).padStart(width, '0');
176
263
  }
177
264
  //# sourceMappingURL=id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/validation/id.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/validation/id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The attributable-identity rule (task-260, `bug-261`) — one definition of "a `name`/`email` pair a
3
+ * deliberately-configured identity carries", shared by the two places that judge an identity:
4
+ *
5
+ * - the attribution audit, `isValidAttribution` (`src/memory/audit.ts`, REQ-SEC-02, task-132, `bug-153`),
6
+ * which reads the author of a commit that already exists; and
7
+ * - the `team.agents` entry schema, `AgentEntry` (`src/dna/schema.ts`, `spec-002`), whose `name` and
8
+ * `email` `git-conventions` §7 writes into every `Co-Authored-By:` trailer an agent's commits carry.
9
+ *
10
+ * The audit's verdict is its base check (`isConfiguredIdentity`, non-empty name and email after trimming)
11
+ * followed by {@link isAttributableIdentity}, and nothing else; `AgentEntry` refuses a blank name and every
12
+ * email {@link attributionEmailIssue} reports, and its own address shape admits no whitespace. So an agent
13
+ * identity `dna.yaml` accepts is one the audit accepts too — the schema may be stricter (angle brackets,
14
+ * bare GitHub noreply logins), never looser — and a later refinement of this rule (`bug-193`: the RFC 2606
15
+ * second-level domains) reaches both. It lives in `src/validation` because both modules already depend on
16
+ * it and on nothing of each other's.
17
+ *
18
+ * Pure predicates — no filesystem or git access.
19
+ */
20
+ /**
21
+ * Whether `email`'s domain is, or ends in, an RFC 2606 reserved top-level domain (case-insensitive).
22
+ * Only the top-level label counts — `test.example.com` is an ordinary domain.
23
+ */
24
+ export declare function hasReservedDomain(email: string): boolean;
25
+ /** Whether `name` is empty or holds only whitespace — a name no identity is recognisable by. */
26
+ export declare function isBlankIdentityName(name: string): boolean;
27
+ /** Why the audit would reject an email: see {@link attributionEmailIssue}. */
28
+ export type AttributionEmailIssue = 'guessed-domain' | 'malformed' | 'reserved-domain';
29
+ /**
30
+ * Why `email` is not an attributable address, checked in this order: git's guessed-domain marker
31
+ * (`.(none)`), an address outside {@link ATTRIBUTION_EMAIL_RE}, an RFC 2606 reserved top-level domain
32
+ * ({@link hasReservedDomain}). `null` when none applies.
33
+ */
34
+ export declare function attributionEmailIssue(email: string): AttributionEmailIssue | null;
35
+ /**
36
+ * Whether `name`/`email` is an attributable identity: a name that is not blank ({@link isBlankIdentityName})
37
+ * and an email in which {@link attributionEmailIssue} finds nothing.
38
+ */
39
+ export declare function isAttributableIdentity(name: string, email: string): boolean;
40
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/validation/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAsBH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,8EAA8E;AAC9E,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAEvF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAKjF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3E"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * The attributable-identity rule (task-260, `bug-261`) — one definition of "a `name`/`email` pair a
4
+ * deliberately-configured identity carries", shared by the two places that judge an identity:
5
+ *
6
+ * - the attribution audit, `isValidAttribution` (`src/memory/audit.ts`, REQ-SEC-02, task-132, `bug-153`),
7
+ * which reads the author of a commit that already exists; and
8
+ * - the `team.agents` entry schema, `AgentEntry` (`src/dna/schema.ts`, `spec-002`), whose `name` and
9
+ * `email` `git-conventions` §7 writes into every `Co-Authored-By:` trailer an agent's commits carry.
10
+ *
11
+ * The audit's verdict is its base check (`isConfiguredIdentity`, non-empty name and email after trimming)
12
+ * followed by {@link isAttributableIdentity}, and nothing else; `AgentEntry` refuses a blank name and every
13
+ * email {@link attributionEmailIssue} reports, and its own address shape admits no whitespace. So an agent
14
+ * identity `dna.yaml` accepts is one the audit accepts too — the schema may be stricter (angle brackets,
15
+ * bare GitHub noreply logins), never looser — and a later refinement of this rule (`bug-193`: the RFC 2606
16
+ * second-level domains) reaches both. It lives in `src/validation` because both modules already depend on
17
+ * it and on nothing of each other's.
18
+ *
19
+ * Pure predicates — no filesystem or git access.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.hasReservedDomain = hasReservedDomain;
23
+ exports.isBlankIdentityName = isBlankIdentityName;
24
+ exports.attributionEmailIssue = attributionEmailIssue;
25
+ exports.isAttributableIdentity = isAttributableIdentity;
26
+ /**
27
+ * The address shape the audit accepts: one `@`, a dotted domain, no whitespace, and no parenthesis in the
28
+ * top-level label.
29
+ */
30
+ const ATTRIBUTION_EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@()]+$/;
31
+ /**
32
+ * The literal marker git itself appends to an author email when it falls back to a guessed identity
33
+ * (user@hostname) and cannot determine a real domain — e.g. "root@buildhost.(none)". An identity carrying
34
+ * it is not a deliberately-configured one.
35
+ */
36
+ const GIT_GUESSED_DOMAIN_MARKER = '.(none)';
37
+ /**
38
+ * RFC 2606 §2 reserves these four top-level domains for testing, documentation, invalid addresses and
39
+ * loopback. No mailbox exists under them, so an identity on one is a placeholder — the same class of
40
+ * "not a deliberately-configured identity" as git's guessed-domain marker (task-132, `bug-153`).
41
+ */
42
+ const RFC2606_RESERVED_TLDS = ['invalid', 'example', 'test', 'localhost'];
43
+ /**
44
+ * Whether `email`'s domain is, or ends in, an RFC 2606 reserved top-level domain (case-insensitive).
45
+ * Only the top-level label counts — `test.example.com` is an ordinary domain.
46
+ */
47
+ function hasReservedDomain(email) {
48
+ // A trailing dot is the fully-qualified spelling of the same domain (`foo.test.` is `foo.test`).
49
+ const domain = email.slice(email.lastIndexOf('@') + 1).toLowerCase().replace(/\.+$/, '');
50
+ const tld = domain.slice(domain.lastIndexOf('.') + 1);
51
+ return RFC2606_RESERVED_TLDS.includes(tld);
52
+ }
53
+ /** Whether `name` is empty or holds only whitespace — a name no identity is recognisable by. */
54
+ function isBlankIdentityName(name) {
55
+ return name.trim().length === 0;
56
+ }
57
+ /**
58
+ * Why `email` is not an attributable address, checked in this order: git's guessed-domain marker
59
+ * (`.(none)`), an address outside {@link ATTRIBUTION_EMAIL_RE}, an RFC 2606 reserved top-level domain
60
+ * ({@link hasReservedDomain}). `null` when none applies.
61
+ */
62
+ function attributionEmailIssue(email) {
63
+ if (email.includes(GIT_GUESSED_DOMAIN_MARKER))
64
+ return 'guessed-domain';
65
+ if (!ATTRIBUTION_EMAIL_RE.test(email))
66
+ return 'malformed';
67
+ if (hasReservedDomain(email))
68
+ return 'reserved-domain';
69
+ return null;
70
+ }
71
+ /**
72
+ * Whether `name`/`email` is an attributable identity: a name that is not blank ({@link isBlankIdentityName})
73
+ * and an email in which {@link attributionEmailIssue} finds nothing.
74
+ */
75
+ function isAttributableIdentity(name, email) {
76
+ return !isBlankIdentityName(name) && attributionEmailIssue(email) === null;
77
+ }
78
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/validation/identity.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;AA0BH,8CAKC;AAGD,kDAEC;AAUD,sDAKC;AAMD,wDAEC;AAzDD;;;GAGG;AACH,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D;;;;GAIG;AACH,MAAM,yBAAyB,GAAG,SAAS,CAAC;AAE5C;;;;GAIG;AACH,MAAM,qBAAqB,GAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAE7F;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,iGAAiG;IACjG,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,gGAAgG;AAChG,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAClC,CAAC;AAKD;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,KAAa;IACjD,IAAI,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAAE,OAAO,gBAAgB,CAAC;IACvE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,IAAY,EAAE,KAAa;IAChE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAC7E,CAAC"}
@@ -6,13 +6,19 @@
6
6
  */
7
7
  export { E_VALIDATION, E_YAML_PARSE_ERROR, EXIT_INTEGRITY, EXIT_VALIDATION, ValidationError, } from './errors';
8
8
  export type { ValidationIssue } from './errors';
9
+ export { DiagnosticsError, formatDiagnostic } from './diagnostic';
10
+ export type { Diagnostic, DiagnosticSeverity } from './diagnostic';
9
11
  export { toValidationError } from './error-mapper';
10
- export { emitUnknownFieldWarning } from './warning';
11
- export type { HasShape } from './warning';
12
+ export { emitUnknownFieldWarning, reportWarning, withWarningSink } from './warning';
13
+ export type { HasShape, WarningSink } from './warning';
12
14
  export { runValidation } from './two-pass';
13
15
  export type { RunValidationOptions, SemanticCheck } from './two-pass';
14
- export { generateId, patternToRegExp, ID_CHAR_CLASS } from './id';
16
+ export { generateId, idPatternIssues, isIdPiece, isNumericToken, patternTokens, patternToRegExp, patternToSource, ID_CHAR_CLASS } from './id';
15
17
  export { parseYaml } from './yaml';
18
+ export { isVersionIncrease } from './config-version';
19
+ export { attributionEmailIssue, hasReservedDomain, isAttributableIdentity, isBlankIdentityName } from './identity';
20
+ export type { AttributionEmailIssue } from './identity';
21
+ export { ADAPTER_MANIFEST_FORMAT, DIRECTIVE_FORMAT, DNA_YAML_FORMAT, E_INVALID_FORMAT, MEMORY_TEMPLATE_FORMAT, MEMORY_YAML_FORMAT, ROLES_YAML_FORMAT, WORKFLOW_FORMAT, WORKFLOWS_YAML_FORMAT, formatField, isNewerFormatError, newerFormatIssue, newerFormatMessage, refuseNewerFormat, } from './format';
16
22
  export { SECRET_PATTERNS, SCAN_SURFACE_ROOTS, DEFAULT_IGNORE_FILE, scanText, scanProjectSurface, isBinaryContent, loadIgnoreGlobs, matchesIgnoreGlob, } from './secret-scan';
17
23
  export type { SecretSeverity, SecretPattern, ExemptReason, SecretFinding, ExemptFinding, ScanResult, ScanTextOptions, ScanProjectOptions, } from './secret-scan';
18
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACpF,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC9I,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACnH,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC"}