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
@@ -3,9 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.slugifyTitle = slugifyTitle;
4
4
  exports.parseTags = parseTags;
5
5
  exports.hasNumericToken = hasNumericToken;
6
- exports.resolveTypeDirectory = resolveTypeDirectory;
6
+ exports.readAuthorDate = readAuthorDate;
7
+ exports.identDate = identDate;
8
+ exports.formatIdDate = formatIdDate;
9
+ exports.highestSequenceNumber = highestSequenceNumber;
10
+ exports.refBaselineCommits = refBaselineCommits;
7
11
  exports.nextSequenceNumber = nextSequenceNumber;
12
+ exports.idOccupancy = idOccupancy;
8
13
  exports.renderAddDocument = renderAddDocument;
14
+ exports.parseSetOptions = parseSetOptions;
15
+ exports.unknownSetNames = unknownSetNames;
16
+ exports.expandFieldTokens = expandFieldTokens;
17
+ exports.writtenFields = writtenFields;
9
18
  /**
10
19
  * Pure/domain helpers behind `wingfoil memory add` (P1.3, task-020-implement-memory-add). Factored
11
20
  * out of the `CoreResult`-wrapped orchestration in `src/core` so that (mirroring `dna set`'s split —
@@ -13,25 +22,31 @@ exports.renderAddDocument = renderAddDocument;
13
22
  * thin composition and the id/slug/document-render logic is independently unit-testable.
14
23
  *
15
24
  * Every function here is deterministic (REQ-SYS-07): a slug is a pure function of the title, the
16
- * rendered document a pure function of `(scaffold, id, title, tags)`, and the sequence counter a pure
17
- * function of the committed on-disk state (a stable count, order-independent) — no wall-clock, no
18
- * randomness, no unordered iteration in a value that reaches the produced id or document.
25
+ * rendered document a pure function of `(scaffold, id, title, tags)`, and the sequence counter a
26
+ * maximum over the paths every ref and the working tree hold (order-independent, task-128) — no
27
+ * randomness and no unordered iteration in a value that reaches the produced id or document. The one
28
+ * time read is `{date}`'s ({@link readAuthorDate}, task-163): a write path, not a context-building
29
+ * one, taken once per add from the author date git records for the add commit, so a caller fixes it
30
+ * with `GIT_AUTHOR_DATE` and the id never disagrees with its own commit.
19
31
  */
20
- const fs_1 = require("fs");
21
- const path_1 = require("path");
22
32
  const storage_1 = require("../storage");
23
33
  const validation_1 = require("../validation");
34
+ const frontmatter_edit_1 = require("./frontmatter-edit");
24
35
  const TOKEN_RE = /\{([^{}]+)\}/g;
25
36
  /**
26
37
  * Turn a human `--title` into a single, valid `[a-z0-9-.]` ID slug piece (spec-009-validation-strategy
27
38
  * §1's ID character class, the same one `generateId` enforces): lowercase, every run of characters
28
- * outside `[a-z0-9]` collapsed to one `-`, and no leading/trailing/doubled `-`. Deterministic and
29
- * idempotent-shaped so `generateId`'s Pass-B slug check (`[a-z0-9.]+(?:-[a-z0-9.]+)*`) accepts it.
39
+ * outside `[a-z0-9]` collapsed to one `-`, and no leading/trailing/doubled `-` — except that a run
40
+ * consisting of exactly one `.` between two alphanumerics is **kept** (`v0.2` → `v0.2`,
41
+ * `dl-107` S1 (a), task-110). That is the character rule `generateId`'s Pass-B slug check
42
+ * (`[a-z0-9.]+(?:-[a-z0-9.]+)*`) already accepts, so the slugifier and the validator share one rule
43
+ * instead of the slug being stricter than the id it feeds. Ids added before this rule are untouched:
44
+ * an id is immutable once added.
30
45
  */
31
46
  function slugifyTitle(title) {
32
47
  return title
33
48
  .toLowerCase()
34
- .replace(/[^a-z0-9]+/g, '-')
49
+ .replace(/[^a-z0-9]+/g, (run, offset, text) => run === '.' && offset > 0 && offset + run.length < text.length ? '.' : '-')
35
50
  .replace(/^-+|-+$/g, '');
36
51
  }
37
52
  /**
@@ -48,68 +63,205 @@ function parseTags(raw) {
48
63
  .filter((tag) => tag.length > 0);
49
64
  return tags.length > 0 ? tags : undefined;
50
65
  }
51
- /** Whether an `id_pattern` contains a `{n}`-family numeric token (e.g. `task-{n}-{slug}`) — i.e. it
52
- * needs a sequence counter resolved before {@link generateId} can render it. */
66
+ /** Whether an `id_pattern` contains a `{n}`-family numeric token (e.g. `task-{n}-{slug}`, `u-{n:1}`) —
67
+ * i.e. it needs a sequence counter resolved before {@link generateId} can render it. */
53
68
  function hasNumericToken(idPattern) {
54
69
  for (const match of idPattern.matchAll(TOKEN_RE)) {
55
- if (/^n+$/.test(match[1] ?? ''))
70
+ if ((0, validation_1.isNumericToken)(match[1] ?? ''))
56
71
  return true;
57
72
  }
58
73
  return false;
59
74
  }
60
75
  /**
61
- * The directory that holds every document of a type: the type's `path` pattern
62
- * (spec-001-memory-yaml-schema `MemoryTypeEntry.path`, e.g. `docs/memory/decision/{id}.md`) rendered
63
- * with a dummy `{id}` and reduced to its containing directory. The directory portion never depends on
64
- * the concrete id value, so this is well-defined before the id is generated (used by
65
- * {@link nextSequenceNumber} to count existing siblings).
76
+ * The author date git would record for a commit made now at `root`, as git's internal
77
+ * `<seconds> <offset>` pair (`1790731800 -0200`): `GIT_AUTHOR_DATE` when it is set, in any format git
78
+ * accepts, otherwise the system clock — read ONCE, through `git var GIT_AUTHOR_IDENT` (task-163,
79
+ * `bug-158`). `memory add` builds `{date}` from it ({@link formatIdDate}) and records the add commit
80
+ * with this same author date (passed back as `@<seconds> <offset>`: git reads a bare pair as a
81
+ * timestamp only from 9 digits of seconds up), so the id and the commit cannot disagree, and a caller (a test, a
82
+ * replay) fixes the date the way it fixes any git author date.
83
+ *
84
+ * `identity` is passed to git as `GIT_AUTHOR_NAME`/`GIT_AUTHOR_EMAIL`: the identity was already
85
+ * resolved and checked (`requireGitIdentity`), and only the date part of git's answer is read.
86
+ *
87
+ * @throws {@link StorageError} `E_GIT_READ_FAILED` when git refuses (e.g. a `GIT_AUTHOR_DATE` it
88
+ * cannot parse) or answers in a shape that is not `… <seconds> <offset>`.
66
89
  */
67
- function resolveTypeDirectory(root, pathPattern) {
68
- return (0, path_1.dirname)((0, path_1.join)(root, (0, storage_1.renderMemoryPath)(pathPattern, { id: '__id__' })));
90
+ function readAuthorDate(root, identity) {
91
+ const answer = (0, storage_1.runGitRead)(root, ['var', 'GIT_AUTHOR_IDENT'], {
92
+ env: { GIT_AUTHOR_NAME: identity.name, GIT_AUTHOR_EMAIL: identity.email },
93
+ }).stdout;
94
+ return identDate(answer);
69
95
  }
70
96
  /**
71
- * The next sequence number for a `{n}`-token id: `1 +` the count of existing files in `dir` whose
72
- * basename (sans `.md`) matches `idPattern` (`patternToRegExp`, task-002). Deterministic — a count is
73
- * independent of directory-entry order (REQ-SYS-07) — and confined to this type's own directory, so
74
- * unrelated files never perturb it. Returns `1` when the directory does not yet exist.
97
+ * The `<seconds> <offset>` date that ends a git ident line (`Name <email> 1790731800 -0200`). Pure.
98
+ *
99
+ * @throws {@link StorageError} `E_GIT_READ_FAILED` when the line does not end with one.
75
100
  */
76
- function nextSequenceNumber(dir, idPattern) {
77
- if (!(0, fs_1.existsSync)(dir) || !(0, fs_1.statSync)(dir).isDirectory())
78
- return 1;
79
- const re = (0, validation_1.patternToRegExp)(idPattern);
80
- let count = 0;
81
- for (const entry of (0, fs_1.readdirSync)(dir).sort()) {
82
- if (entry.endsWith('.md') && re.test(entry.slice(0, -'.md'.length)))
83
- count += 1;
101
+ function identDate(ident) {
102
+ const date = /> (-?[0-9]+ [+-][0-9]{4})$/.exec(ident.trim())?.[1];
103
+ if (date === undefined) {
104
+ throw new storage_1.StorageError(storage_1.E_GIT_READ_FAILED, `git var GIT_AUTHOR_IDENT gave no author date: "${ident.trim()}"`);
84
105
  }
85
- return count + 1;
106
+ return date;
86
107
  }
87
108
  /**
88
- * Escape a literal string for safe insertion into a `RegExp` source (a frontmatter key here). */
89
- function escapeRegExp(value) {
90
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
109
+ * `{date}`'s value (`spec-001`'s placeholder table): the UTC calendar date `YYYYMMDD` of a git
110
+ * `<seconds> <offset>` date ({@link readAuthorDate}). The offset does not move the instant, so
111
+ * `23:30 -0200` on the 29th is the 30th. Pure.
112
+ */
113
+ function formatIdDate(gitDate) {
114
+ const seconds = Number.parseInt(gitDate, 10);
115
+ return new Date(seconds * 1000).toISOString().slice(0, 10).replace(/-/g, '');
116
+ }
117
+ /** A non-`{id}` `path` token as the counter matches it: one or more path segments (`dl-101` (a)). */
118
+ const PATH_TOKEN_SOURCE = '[^/]+(?:/[^/]+)*';
119
+ /**
120
+ * The RegExp a repository-relative path of this type matches, with the `{n}` value as group 1: the
121
+ * `path` pattern with `{id}` replaced by the (materialized) `id_pattern` and **every other token a
122
+ * wildcard**, whatever value this add gives it — so a `task`'s counter spans every
123
+ * `docs/04_memory/{release}/` folder, not only the one being added to (`bug-162`).
124
+ */
125
+ function sequencePathRegExp(pathPattern, idPattern) {
126
+ const idSource = (0, validation_1.patternToSource)(idPattern, { captureNumeric: true });
127
+ let source = '^';
128
+ let last = 0;
129
+ for (const match of pathPattern.matchAll(TOKEN_RE)) {
130
+ const index = match.index;
131
+ source += escapeRegExp(pathPattern.slice(last, index));
132
+ source += match[1] === 'id' ? `(?:${idSource})` : PATH_TOKEN_SOURCE;
133
+ last = index + match[0].length;
134
+ }
135
+ return new RegExp(`${source}${escapeRegExp(pathPattern.slice(last))}$`);
91
136
  }
92
137
  /**
93
- * Set one frontmatter field on the raw frontmatter text, line-based: replace the value on the existing
94
- * `^<indent>key:` line if present (preserving the scaffold's ordering, comments and other fields
95
- * verbatim — the P1.3 memory.add contract copies the scaffold verbatim), otherwise append the field. `valueYaml`
96
- * is the already-serialized YAML scalar/flow value (e.g. a JSON-quoted string, a flow sequence).
138
+ * The highest `{n}` value among `paths` (repository-relative, `/`-separated) that the type's `path`
139
+ * pattern and materialized `id_pattern` match, or `0` when none does (`spec-001` "Counter algorithm",
140
+ * `dl-101` §2 (a)). The **highest**, not a count, so a gap never reissues a number (`bug-087`); and a
141
+ * maximum, so the answer is independent of the order `paths` arrive in (REQ-SYS-07).
97
142
  */
98
- function setFrontmatterField(frontmatter, key, valueYaml) {
99
- const re = new RegExp(`^([ \\t]*)${escapeRegExp(key)}:.*$`, 'm');
100
- if (re.test(frontmatter)) {
101
- return frontmatter.replace(re, (_match, indent) => `${indent}${key}: ${valueYaml}`);
143
+ function highestSequenceNumber(paths, pathPattern, idPattern) {
144
+ const re = sequencePathRegExp(pathPattern, idPattern);
145
+ let highest = 0;
146
+ for (const path of paths) {
147
+ const digits = re.exec(path)?.[1];
148
+ if (digits !== undefined)
149
+ highest = Math.max(highest, Number.parseInt(digits, 10));
102
150
  }
103
- return `${frontmatter}\n${key}: ${valueYaml}`;
151
+ return highest;
152
+ }
153
+ /** The literal directory a `path` pattern starts with (up to its last `/` before any token), or `''`. */
154
+ function literalPrefix(pathPattern) {
155
+ const head = pathPattern.split('{', 1)[0];
156
+ return head.slice(0, head.lastIndexOf('/') + 1);
157
+ }
158
+ /**
159
+ * Every repository-relative path under `prefix` that any baseline a number can be taken on holds —
160
+ * `command-baseline`'s declared baseline for `memory add`'s counter (`dl-101` §2 (a), `dl-080`):
161
+ *
162
+ * - the tree of every local branch (`refs/heads/*`) and remote-tracking ref (`refs/remotes/*`), and
163
+ * of `HEAD` (a detached `HEAD` is on no branch);
164
+ * - the working tree as git sees it: the index and the untracked, non-ignored files.
165
+ *
166
+ * No network: the remote-tracking refs are what the last `git fetch` left (`dl-101` §1.1). Commits are
167
+ * de-duplicated and visited in sorted order, and the result is sorted (REQ-SYS-07).
168
+ */
169
+ function sequenceCandidatePaths(root, prefix) {
170
+ const pathspec = prefix.length === 0 ? [] : ['--', prefix];
171
+ const paths = new Set();
172
+ const worktree = (0, storage_1.runGitRead)(root, ['ls-files', '-z', '--cached', '--others', '--exclude-standard', ...pathspec]);
173
+ for (const path of worktree.stdout.split('\0'))
174
+ if (path.length > 0)
175
+ paths.add(path);
176
+ // One batched read for every commit, not one `git ls-tree` each (`bug-178`, task-142): the number of
177
+ // git processes no longer grows with the number of branches and remote-tracking refs.
178
+ for (const path of (0, storage_1.listPathsAtRevs)(root, refBaselineCommits(root), prefix))
179
+ paths.add(path);
180
+ return [...paths].sort();
181
+ }
182
+ /**
183
+ * The commits of the refs a number or a WIP slot can be taken on (`dl-101` §2 (a)): the tip of every
184
+ * local branch (`refs/heads/*`) and remote-tracking ref (`refs/remotes/*`), and `HEAD` (a detached
185
+ * `HEAD` is on no branch; an unborn one adds nothing), as full shas, de-duplicated and sorted
186
+ * (REQ-SYS-07). No network: the remote-tracking refs are what the last `git fetch` left (`dl-101`
187
+ * §1.1).
188
+ *
189
+ * The one listing of "every ref" both wider reads use — `memory add`'s `{n}` counter
190
+ * ({@link nextSequenceNumber}) and the WIP-limit holder count (`requireWipSlot`, `dl-156` Q1 (a),
191
+ * task-274) — so the two cannot disagree about which refs exist (`command-baseline`, *Declared
192
+ * baselines*).
193
+ *
194
+ * @throws {@link StorageError} `E_GIT_READ_FAILED` when a git read fails.
195
+ */
196
+ function refBaselineCommits(root) {
197
+ const refs = (0, storage_1.runGitRead)(root, ['for-each-ref', '--format=%(objectname)', 'refs/heads', 'refs/remotes']);
198
+ // `--verify --quiet` exits 1, printing nothing, on an unborn `HEAD`: an answer, not a failure.
199
+ const head = (0, storage_1.runGitRead)(root, ['rev-parse', '--verify', '--quiet', 'HEAD^{commit}'], { accepted: [0, 1] });
200
+ const commits = new Set(`${refs.stdout}\n${head.stdout}`.split('\n').map((sha) => sha.trim()));
201
+ commits.delete('');
202
+ return [...commits].sort();
203
+ }
204
+ /**
205
+ * The next sequence number for a `{n}`-token id: `1 +` the highest number any baseline holds for this
206
+ * type — every local branch, remote-tracking ref, `HEAD`, the index and the untracked working-tree
207
+ * files ({@link sequenceCandidatePaths}) — over every folder the type's `path` can resolve to
208
+ * ({@link highestSequenceNumber}). `1` when nothing matches. Ratified `dl-101` §2 (a) (task-128,
209
+ * `bug-087`, `bug-162`); `spec-001` "Counter algorithm".
210
+ *
211
+ * @param root - The repository root.
212
+ * @param pathPattern - The type's committed `path` pattern, e.g. `docs/04_memory/{release}/{id}.md`.
213
+ * @param idPattern - The type's `id_pattern` with its field tokens already materialized.
214
+ * @throws {@link StorageError} `E_GIT_READ_FAILED` when a git read fails.
215
+ */
216
+ function nextSequenceNumber(root, pathPattern, idPattern) {
217
+ const prefix = literalPrefix(pathPattern);
218
+ return highestSequenceNumber(sequenceCandidatePaths(root, prefix), pathPattern, idPattern) + 1;
219
+ }
220
+ /**
221
+ * Which ids of a type with `path` pattern `pathPattern` exist on any baseline a number can be taken on —
222
+ * the ones {@link nextSequenceNumber} reads (every local branch, remote-tracking ref, `HEAD`, the index and
223
+ * the untracked working-tree files; `dl-101` §2 (a)) — in any folder the pattern resolves to: every token
224
+ * other than `{id}` matches one or more path segments. The paths are listed once; the returned predicate
225
+ * answers for any id. `workflow start` asks it of a derived or `--set phase=` plan id (`spec-017` §7.1,
226
+ * task-217): ids are unique per type, so a plan held by another branch, or under another `{scope}`,
227
+ * occupies its id.
228
+ *
229
+ * @throws {@link StorageError} `E_GIT_READ_FAILED` when a git read fails.
230
+ */
231
+ function idOccupancy(root, pathPattern) {
232
+ const paths = sequenceCandidatePaths(root, literalPrefix(pathPattern));
233
+ return (id) => {
234
+ let source = '^';
235
+ let last = 0;
236
+ for (const match of pathPattern.matchAll(TOKEN_RE)) {
237
+ const index = match.index;
238
+ source += escapeRegExp(pathPattern.slice(last, index));
239
+ source += match[1] === 'id' ? escapeRegExp(id) : PATH_TOKEN_SOURCE;
240
+ last = index + match[0].length;
241
+ }
242
+ const re = new RegExp(`${source}${escapeRegExp(pathPattern.slice(last))}$`);
243
+ return paths.some((path) => re.test(path));
244
+ };
245
+ }
246
+ /**
247
+ * Escape a literal string for safe insertion into a `RegExp` source (a frontmatter key here). */
248
+ function escapeRegExp(value) {
249
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
104
250
  }
105
251
  /**
106
252
  * Copy a type's `template.file` scaffold verbatim and fill only the frontmatter skeleton `memory.add`
107
253
  * pins (P1.3; spec-010-memory-frontmatter-schema): the generated `id`, the `--title`, the
108
- * initial `status: draft`, and — when `--tags` was supplied — the `tags` flow sequence. Every other
254
+ * initial `status` (the head of the type's machine, {@link AddDocumentFields.status}), when `--tags`
255
+ * was supplied the `tags` flow sequence, and the `--set` fields
256
+ * {@link AddDocumentFields.fields} carries (task-110). Every other
109
257
  * field (notably `type` and `tmpl_version`, spec-010: not touched by add) and the whole body are left
110
258
  * exactly as the scaffold had them. `title`/`tags` are JSON-quoted (valid YAML double-quoted scalars /
111
259
  * flow sequences), so an arbitrary title with spaces or colons is written safely.
112
260
  *
261
+ * Each field is set through `./frontmatter-edit`'s shared setter, the one the transition verbs use
262
+ * (task-163, `bug-033`): only a TOP-LEVEL key is matched, so a nested key of the same name is never
263
+ * edited, and an edited line keeps the scaffold's inline `# comment`.
264
+ *
113
265
  * @throws when the scaffold has no frontmatter block (a malformed template — a config error surfaced
114
266
  * as a thrown `Error` the core op maps to a `CoreError`).
115
267
  */
@@ -118,14 +270,172 @@ function renderAddDocument(scaffold, fields) {
118
270
  if (frontmatter === null) {
119
271
  throw new Error('memory template scaffold has no frontmatter block');
120
272
  }
121
- let fm = frontmatter;
122
- fm = setFrontmatterField(fm, 'id', fields.id);
123
- fm = setFrontmatterField(fm, 'title', JSON.stringify(fields.title));
124
- fm = setFrontmatterField(fm, 'status', 'draft');
273
+ // Rebuilt as `memory add` always wrote it (a `---` line, the frontmatter, a `---` line, the body),
274
+ // then edited in place by the shared setter.
275
+ let document = `---\n${frontmatter}\n---\n${body}`;
276
+ document = (0, frontmatter_edit_1.setFrontmatterEntry)(document, 'id', fields.id);
277
+ document = (0, frontmatter_edit_1.setFrontmatterEntry)(document, 'title', JSON.stringify(fields.title));
278
+ document = (0, frontmatter_edit_1.setFrontmatterEntry)(document, 'status', fields.status ?? 'draft');
125
279
  if (fields.tags !== undefined) {
126
280
  const flow = `[${fields.tags.map((tag) => JSON.stringify(tag)).join(',')}]`;
127
- fm = setFrontmatterField(fm, 'tags', flow);
281
+ document = (0, frontmatter_edit_1.setFrontmatterEntry)(document, 'tags', flow);
282
+ }
283
+ for (const [name, value] of fields.fields ?? []) {
284
+ document = (0, frontmatter_edit_1.setFrontmatterEntry)(document, name, JSON.stringify(value));
285
+ }
286
+ return document;
287
+ }
288
+ /**
289
+ * Names `memory add --set` refuses (`spec-008-cli-grammar` §10): the fields `memory add` fills itself
290
+ * or through its own option (`id`, `type`, `status`, `title`, `tags`), and the tokens with a source of
291
+ * their own (`n`, `slug`, `date`, `author` — `spec-001`'s placeholder table).
292
+ */
293
+ const RESERVED_SET_NAMES = new Set(['id', 'type', 'status', 'title', 'tags', 'n', 'slug', 'date', 'author']);
294
+ /**
295
+ * The refusal of a reserved `--set` name, saying where its value comes from (`spec-008` §10). `date`
296
+ * and `author` name their source, which is not an option of `memory add` (task-163, `bug-158`: the
297
+ * generic sentence was false while nothing filled them, and unhelpful once something did).
298
+ */
299
+ function reservedSetMessage(name) {
300
+ const prefix = `invalid flag value: --set cannot set "${name}": memory add fills`;
301
+ if (name === 'date')
302
+ return `${prefix} {date} from the add commit's author date (GIT_AUTHOR_DATE, or the clock)`;
303
+ if (name === 'author')
304
+ return `${prefix} {author} from the git author name`;
305
+ return `${prefix} it itself or through its own option`;
306
+ }
307
+ /** A `--set` field name: `[a-z][a-z0-9_-]*` — the same shape `idPatternIssues` accepts for a token. */
308
+ const SET_NAME_RE = /^[a-z][a-z0-9_-]*$/;
309
+ /**
310
+ * Tokens that are workflow **context** rather than a frontmatter field (`spec-001`, `dl-107` S2 (c)):
311
+ * written into the document only where its template declares a field of that name.
312
+ */
313
+ const CONTEXT_TOKENS = new Set(['workflow', 'phase', 'scope']);
314
+ /**
315
+ * The spelling refusal of a `--set` value read as a path (task-281, `bug-325`; `spec-008` §10), or `null`.
316
+ * A token value may be substituted into the type's `path` pattern, so it must be a relative path whose
317
+ * segments (split on `/` and `\`) are neither empty nor `.` / `..` — first match wins: absolute, empty
318
+ * segment, dot segment. Applied to every `--set` value, because which names are path tokens is known only
319
+ * from the committed `memory.yaml`, and spelling is decided before anything is read (exit 2).
320
+ */
321
+ function pathSpellingRefusal(name, value) {
322
+ if (/^[/\\]/.test(value) || /^[A-Za-z]:/.test(value))
323
+ return `invalid flag value: --set ${name} must be a relative path, got "${value}"`;
324
+ const segments = value.split(/[/\\]/);
325
+ if (segments.includes(''))
326
+ return `invalid flag value: --set ${name} holds an empty path segment: "${value}"`;
327
+ if (segments.some((segment) => segment === '.' || segment === '..')) {
328
+ return `invalid flag value: --set ${name} holds a '.' or '..' path segment: "${value}"`;
128
329
  }
129
- return `---\n${fm}\n---\n${body}`;
330
+ return null;
331
+ }
332
+ /**
333
+ * Parse `memory add`'s repeatable `--set <name>=<value>` occurrences (`spec-008-cli-grammar` §10,
334
+ * task-110). The CLI hands every occurrence as a string array; a single string is one occurrence;
335
+ * `undefined` is none. `<name>` is split from `<value>` at the FIRST `=`.
336
+ *
337
+ * Every refusal here is a property of how the argument is spelled, decided before anything is read,
338
+ * so the caller raises it as a usage error (exit 2) — the first failing occurrence, in the order
339
+ * given, with §10's exact message. Pure and order-preserving (REQ-SYS-07).
340
+ */
341
+ function parseSetOptions(raw) {
342
+ const occurrences = raw === undefined ? [] : typeof raw === 'string' ? [raw] : raw;
343
+ const values = {};
344
+ for (const occurrence of occurrences) {
345
+ const eq = occurrence.indexOf('=');
346
+ if (eq <= 0) {
347
+ return { ok: false, message: `invalid flag value: --set expects <name>=<value>, got "${occurrence}"` };
348
+ }
349
+ const name = occurrence.slice(0, eq);
350
+ const value = occurrence.slice(eq + 1);
351
+ if (!SET_NAME_RE.test(name)) {
352
+ return { ok: false, message: `invalid flag value: --set name "${name}" is not a field name ([a-z][a-z0-9_-]*)` };
353
+ }
354
+ if (RESERVED_SET_NAMES.has(name)) {
355
+ return { ok: false, message: reservedSetMessage(name) };
356
+ }
357
+ if (value.trim().length === 0) {
358
+ return { ok: false, message: `invalid flag value: --set ${name} must not be blank` };
359
+ }
360
+ const spelling = pathSpellingRefusal(name, value);
361
+ if (spelling !== null)
362
+ return { ok: false, message: spelling };
363
+ if (Object.prototype.hasOwnProperty.call(values, name)) {
364
+ return { ok: false, message: `invalid flag value: --set ${name} given more than once` };
365
+ }
366
+ values[name] = value;
367
+ }
368
+ return { ok: true, values };
369
+ }
370
+ /**
371
+ * The `--set` names a type's committed patterns cannot use: every name that is not a token of its
372
+ * `id_pattern` or of its `path` (other than `{id}`), in the order given. `memory add` refuses them
373
+ * (exit 1, `spec-008` §10) rather than writing a field no token reads.
374
+ */
375
+ function unknownSetNames(values, idPattern, pathPattern) {
376
+ const tokens = new Set([...(0, validation_1.patternTokens)(idPattern), ...(0, validation_1.patternTokens)(pathPattern)]);
377
+ tokens.delete('id');
378
+ return Object.keys(values).filter((name) => !tokens.has(name));
379
+ }
380
+ /**
381
+ * Materialize an `id_pattern`'s `{date}`, `{author}`, frontmatter and context tokens (`{kind}`,
382
+ * `{version}`, `{workflow}`, …), leaving `{slug}` and the `{n}` family in place — `spec-001`'s fixed
383
+ * expansion order (`{date}` → `{author}` → field and context tokens → `{slug}` → `{n}`), so the
384
+ * `{n}` counter regexp built from the result sees a fully-materialized prefix (task-110). `{date}` is
385
+ * the UTC `YYYYMMDD` of `sources.date` ({@link formatIdDate}); `{author}` the slug of
386
+ * `sources.authorName` ({@link slugifyTitle}) — task-163, `bug-158`.
387
+ *
388
+ * @throws {@link ValidationError} naming every field token with no value
389
+ * (`missing value for token {<name>}: give it with --set <name>=<value>`), an `{author}` whose
390
+ * name slugs to nothing, and every value outside the ID character class, in pattern order — the
391
+ * same `E_INVALID_ID` code `generateId` raises.
392
+ */
393
+ function expandFieldTokens(idPattern, values, sources = {}) {
394
+ const issues = [];
395
+ const expanded = idPattern.replace(TOKEN_RE, (whole, token) => {
396
+ if (token === 'date' && sources.date !== undefined)
397
+ return formatIdDate(sources.date);
398
+ if (token === 'author' && sources.authorName !== undefined) {
399
+ const author = slugifyTitle(sources.authorName);
400
+ if (author.length > 0)
401
+ return author;
402
+ issues.push(fieldIssue(idPattern, `value for token {author} is empty once the git author name "${sources.authorName}" is slugged`));
403
+ return whole;
404
+ }
405
+ if ((0, validation_1.isNumericToken)(token) || RESERVED_SET_NAMES.has(token))
406
+ return whole;
407
+ const value = values[token];
408
+ if (value === undefined) {
409
+ issues.push(fieldIssue(idPattern, `missing value for token {${token}}: give it with --set ${token}=<value>`));
410
+ return whole;
411
+ }
412
+ if (!(0, validation_1.isIdPiece)(value)) {
413
+ issues.push(fieldIssue(idPattern, `value for token {${token}} is not a valid [a-z0-9-.] piece: "${value}"`));
414
+ return whole;
415
+ }
416
+ return value;
417
+ });
418
+ if (issues.length > 0)
419
+ throw new validation_1.ValidationError(issues);
420
+ return expanded;
421
+ }
422
+ function fieldIssue(pattern, message) {
423
+ return { code: 'E_INVALID_ID', path: 'id', file: pattern, message };
424
+ }
425
+ /**
426
+ * The `--set` values `memory add` writes into the new document's frontmatter, as `[name, value]`
427
+ * pairs sorted by name (REQ-SYS-07). A field token is always written, so the id and the field cannot
428
+ * disagree (`dl-107` S2 (a)); a context token (`workflow`, `phase`, `scope`) only where the committed
429
+ * scaffold's frontmatter declares that key (`dl-107` S2 (c) — `plan` declares `workflow` and `phase`,
430
+ * not `scope`).
431
+ */
432
+ function writtenFields(scaffold, values) {
433
+ const { frontmatter } = (0, storage_1.splitFrontmatter)(scaffold);
434
+ // A top-level key only (task-163): a nested key of the same name is not a declaration of the field.
435
+ const declared = (key) => frontmatter !== null && new RegExp(`^${escapeRegExp(key)}:(?:[ \\t\\r]|$)`, 'm').test(frontmatter);
436
+ return Object.keys(values)
437
+ .sort()
438
+ .filter((name) => !CONTEXT_TOKENS.has(name) || declared(name))
439
+ .map((name) => [name, values[name]]);
130
440
  }
131
441
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/memory/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/memory/add.ts"],"names":[],"mappings":"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"}