approval-md 0.0.1 → 0.2.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 (722) hide show
  1. package/LICENSE +176 -0
  2. package/NOTICE +5 -0
  3. package/README.md +940 -4
  4. package/SPEC.md +476 -34
  5. package/cli.js +29 -3
  6. package/dist/src/adapters/agentmail.d.ts +426 -0
  7. package/dist/src/adapters/agentmail.js +1200 -0
  8. package/dist/src/adapters/agentmail.js.map +1 -0
  9. package/dist/src/adapters/conformance.d.ts +149 -0
  10. package/dist/src/adapters/conformance.js +461 -0
  11. package/dist/src/adapters/conformance.js.map +1 -0
  12. package/dist/src/adapters/contract.d.ts +628 -0
  13. package/dist/src/adapters/contract.js +1035 -0
  14. package/dist/src/adapters/contract.js.map +1 -0
  15. package/dist/src/adapters/email.d.ts +324 -0
  16. package/dist/src/adapters/email.js +749 -0
  17. package/dist/src/adapters/email.js.map +1 -0
  18. package/dist/src/adapters/env-passphrase.d.ts +93 -0
  19. package/dist/src/adapters/env-passphrase.js +132 -0
  20. package/dist/src/adapters/env-passphrase.js.map +1 -0
  21. package/dist/src/adapters/public.d.ts +11 -0
  22. package/dist/src/adapters/public.js +11 -0
  23. package/dist/src/adapters/public.js.map +1 -0
  24. package/dist/src/adapters/registry.d.ts +59 -0
  25. package/dist/src/adapters/registry.js +77 -0
  26. package/dist/src/adapters/registry.js.map +1 -0
  27. package/dist/src/adapters/smtp.d.ts +213 -0
  28. package/dist/src/adapters/smtp.js +499 -0
  29. package/dist/src/adapters/smtp.js.map +1 -0
  30. package/dist/src/adapters/vault-provider.d.ts +114 -0
  31. package/dist/src/adapters/vault-provider.js +161 -0
  32. package/dist/src/adapters/vault-provider.js.map +1 -0
  33. package/dist/src/adapters/zzz.d.ts +66 -0
  34. package/dist/src/adapters/zzz.js +299 -0
  35. package/dist/src/adapters/zzz.js.map +1 -0
  36. package/dist/src/channels/batch.d.ts +109 -0
  37. package/dist/src/channels/batch.js +121 -0
  38. package/dist/src/channels/batch.js.map +1 -0
  39. package/dist/src/channels/cli.d.ts +193 -0
  40. package/dist/src/channels/cli.js +468 -0
  41. package/dist/src/channels/cli.js.map +1 -0
  42. package/dist/src/channels/conformance.d.ts +92 -0
  43. package/dist/src/channels/conformance.js +445 -0
  44. package/dist/src/channels/conformance.js.map +1 -0
  45. package/dist/src/channels/contract.d.ts +623 -0
  46. package/dist/src/channels/contract.js +494 -0
  47. package/dist/src/channels/contract.js.map +1 -0
  48. package/dist/src/channels/payload-view.d.ts +35 -0
  49. package/dist/src/channels/payload-view.js +43 -0
  50. package/dist/src/channels/payload-view.js.map +1 -0
  51. package/dist/src/channels/render-queue.d.ts +149 -0
  52. package/dist/src/channels/render-queue.js +564 -0
  53. package/dist/src/channels/render-queue.js.map +1 -0
  54. package/dist/src/channels/tagging.d.ts +196 -0
  55. package/dist/src/channels/tagging.js +723 -0
  56. package/dist/src/channels/tagging.js.map +1 -0
  57. package/dist/src/channels/telegram.d.ts +1832 -0
  58. package/dist/src/channels/telegram.js +3190 -0
  59. package/dist/src/channels/telegram.js.map +1 -0
  60. package/dist/src/channels/web.d.ts +341 -0
  61. package/dist/src/channels/web.js +903 -0
  62. package/dist/src/channels/web.js.map +1 -0
  63. package/dist/src/cli/adapter.d.ts +90 -0
  64. package/dist/src/cli/adapter.js +288 -0
  65. package/dist/src/cli/adapter.js.map +1 -0
  66. package/dist/src/cli/amend.d.ts +59 -0
  67. package/dist/src/cli/amend.js +2171 -0
  68. package/dist/src/cli/amend.js.map +1 -0
  69. package/dist/src/cli/args.d.ts +43 -0
  70. package/dist/src/cli/args.js +86 -0
  71. package/dist/src/cli/args.js.map +1 -0
  72. package/dist/src/cli/attest.d.ts +41 -0
  73. package/dist/src/cli/attest.js +307 -0
  74. package/dist/src/cli/attest.js.map +1 -0
  75. package/dist/src/cli/audit-card.d.ts +62 -0
  76. package/dist/src/cli/audit-card.js +201 -0
  77. package/dist/src/cli/audit-card.js.map +1 -0
  78. package/dist/src/cli/audit.d.ts +59 -0
  79. package/dist/src/cli/audit.js +460 -0
  80. package/dist/src/cli/audit.js.map +1 -0
  81. package/dist/src/cli/channel-telegram.d.ts +806 -0
  82. package/dist/src/cli/channel-telegram.js +2063 -0
  83. package/dist/src/cli/channel-telegram.js.map +1 -0
  84. package/dist/src/cli/channel-web.d.ts +131 -0
  85. package/dist/src/cli/channel-web.js +357 -0
  86. package/dist/src/cli/channel-web.js.map +1 -0
  87. package/dist/src/cli/channel.d.ts +71 -0
  88. package/dist/src/cli/channel.js +438 -0
  89. package/dist/src/cli/channel.js.map +1 -0
  90. package/dist/src/cli/checkpoint-tap.d.ts +169 -0
  91. package/dist/src/cli/checkpoint-tap.js +238 -0
  92. package/dist/src/cli/checkpoint-tap.js.map +1 -0
  93. package/dist/src/cli/codex.d.ts +2 -0
  94. package/dist/src/cli/codex.js +172 -0
  95. package/dist/src/cli/codex.js.map +1 -0
  96. package/dist/src/cli/coverage.d.ts +61 -0
  97. package/dist/src/cli/coverage.js +343 -0
  98. package/dist/src/cli/coverage.js.map +1 -0
  99. package/dist/src/cli/daemon.d.ts +120 -0
  100. package/dist/src/cli/daemon.js +631 -0
  101. package/dist/src/cli/daemon.js.map +1 -0
  102. package/dist/src/cli/doctor.d.ts +129 -0
  103. package/dist/src/cli/doctor.js +2762 -0
  104. package/dist/src/cli/doctor.js.map +1 -0
  105. package/dist/src/cli/env.d.ts +65 -0
  106. package/dist/src/cli/env.js +302 -0
  107. package/dist/src/cli/env.js.map +1 -0
  108. package/dist/src/cli/execute.d.ts +202 -0
  109. package/dist/src/cli/execute.js +1682 -0
  110. package/dist/src/cli/execute.js.map +1 -0
  111. package/dist/src/cli/exit-codes.d.ts +73 -0
  112. package/dist/src/cli/exit-codes.js +82 -0
  113. package/dist/src/cli/exit-codes.js.map +1 -0
  114. package/dist/src/cli/feedback.d.ts +60 -0
  115. package/dist/src/cli/feedback.js +205 -0
  116. package/dist/src/cli/feedback.js.map +1 -0
  117. package/dist/src/cli/gate-window.d.ts +40 -0
  118. package/dist/src/cli/gate-window.js +294 -0
  119. package/dist/src/cli/gate-window.js.map +1 -0
  120. package/dist/src/cli/gate.d.ts +68 -0
  121. package/dist/src/cli/gate.js +557 -0
  122. package/dist/src/cli/gate.js.map +1 -0
  123. package/dist/src/cli/git-scope.d.ts +190 -0
  124. package/dist/src/cli/git-scope.js +295 -0
  125. package/dist/src/cli/git-scope.js.map +1 -0
  126. package/dist/src/cli/gloss-attach.d.ts +85 -0
  127. package/dist/src/cli/gloss-attach.js +107 -0
  128. package/dist/src/cli/gloss-attach.js.map +1 -0
  129. package/dist/src/cli/gloss-codex-child.d.ts +9 -0
  130. package/dist/src/cli/gloss-codex-child.js +149 -0
  131. package/dist/src/cli/gloss-codex-child.js.map +1 -0
  132. package/dist/src/cli/gloss-codex.d.ts +24 -0
  133. package/dist/src/cli/gloss-codex.js +255 -0
  134. package/dist/src/cli/gloss-codex.js.map +1 -0
  135. package/dist/src/cli/gloss-options.d.ts +42 -0
  136. package/dist/src/cli/gloss-options.js +79 -0
  137. package/dist/src/cli/gloss-options.js.map +1 -0
  138. package/dist/src/cli/gloss.d.ts +265 -0
  139. package/dist/src/cli/gloss.js +362 -0
  140. package/dist/src/cli/gloss.js.map +1 -0
  141. package/dist/src/cli/help.d.ts +103 -0
  142. package/dist/src/cli/help.js +2339 -0
  143. package/dist/src/cli/help.js.map +1 -0
  144. package/dist/src/cli/hook-codex.d.ts +78 -0
  145. package/dist/src/cli/hook-codex.js +167 -0
  146. package/dist/src/cli/hook-codex.js.map +1 -0
  147. package/dist/src/cli/hook.d.ts +331 -0
  148. package/dist/src/cli/hook.js +2849 -0
  149. package/dist/src/cli/hook.js.map +1 -0
  150. package/dist/src/cli/import.d.ts +35 -0
  151. package/dist/src/cli/import.js +175 -0
  152. package/dist/src/cli/import.js.map +1 -0
  153. package/dist/src/cli/init.d.ts +84 -0
  154. package/dist/src/cli/init.js +336 -0
  155. package/dist/src/cli/init.js.map +1 -0
  156. package/dist/src/cli/instructions.d.ts +23 -0
  157. package/dist/src/cli/instructions.js +262 -0
  158. package/dist/src/cli/instructions.js.map +1 -0
  159. package/dist/src/cli/journal.d.ts +41 -0
  160. package/dist/src/cli/journal.js +238 -0
  161. package/dist/src/cli/journal.js.map +1 -0
  162. package/dist/src/cli/log-advance.d.ts +287 -0
  163. package/dist/src/cli/log-advance.js +840 -0
  164. package/dist/src/cli/log-advance.js.map +1 -0
  165. package/dist/src/cli/log-anchor.d.ts +176 -0
  166. package/dist/src/cli/log-anchor.js +387 -0
  167. package/dist/src/cli/log-anchor.js.map +1 -0
  168. package/dist/src/cli/log-checkpoint.d.ts +22 -0
  169. package/dist/src/cli/log-checkpoint.js +128 -0
  170. package/dist/src/cli/log-checkpoint.js.map +1 -0
  171. package/dist/src/cli/log-sync.d.ts +243 -0
  172. package/dist/src/cli/log-sync.js +849 -0
  173. package/dist/src/cli/log-sync.js.map +1 -0
  174. package/dist/src/cli/log-verbs.d.ts +16 -0
  175. package/dist/src/cli/log-verbs.js +360 -0
  176. package/dist/src/cli/log-verbs.js.map +1 -0
  177. package/dist/src/cli/long-help.d.ts +70 -0
  178. package/dist/src/cli/long-help.js +148 -0
  179. package/dist/src/cli/long-help.js.map +1 -0
  180. package/dist/src/cli/main.d.ts +77 -0
  181. package/dist/src/cli/main.js +1206 -0
  182. package/dist/src/cli/main.js.map +1 -0
  183. package/dist/src/cli/mcp.d.ts +52 -0
  184. package/dist/src/cli/mcp.js +306 -0
  185. package/dist/src/cli/mcp.js.map +1 -0
  186. package/dist/src/cli/paths.d.ts +56 -0
  187. package/dist/src/cli/paths.js +79 -0
  188. package/dist/src/cli/paths.js.map +1 -0
  189. package/dist/src/cli/payload.d.ts +58 -0
  190. package/dist/src/cli/payload.js +253 -0
  191. package/dist/src/cli/payload.js.map +1 -0
  192. package/dist/src/cli/policy.d.ts +43 -0
  193. package/dist/src/cli/policy.js +229 -0
  194. package/dist/src/cli/policy.js.map +1 -0
  195. package/dist/src/cli/preflight.d.ts +363 -0
  196. package/dist/src/cli/preflight.js +1175 -0
  197. package/dist/src/cli/preflight.js.map +1 -0
  198. package/dist/src/cli/progress.d.ts +78 -0
  199. package/dist/src/cli/progress.js +112 -0
  200. package/dist/src/cli/progress.js.map +1 -0
  201. package/dist/src/cli/prompt.d.ts +209 -0
  202. package/dist/src/cli/prompt.js +312 -0
  203. package/dist/src/cli/prompt.js.map +1 -0
  204. package/dist/src/cli/quickstart.d.ts +46 -0
  205. package/dist/src/cli/quickstart.js +297 -0
  206. package/dist/src/cli/quickstart.js.map +1 -0
  207. package/dist/src/cli/records.d.ts +34 -0
  208. package/dist/src/cli/records.js +66 -0
  209. package/dist/src/cli/records.js.map +1 -0
  210. package/dist/src/cli/render.d.ts +22 -0
  211. package/dist/src/cli/render.js +132 -0
  212. package/dist/src/cli/render.js.map +1 -0
  213. package/dist/src/cli/sandbox.d.ts +51 -0
  214. package/dist/src/cli/sandbox.js +150 -0
  215. package/dist/src/cli/sandbox.js.map +1 -0
  216. package/dist/src/cli/scaffold.d.ts +79 -0
  217. package/dist/src/cli/scaffold.js +137 -0
  218. package/dist/src/cli/scaffold.js.map +1 -0
  219. package/dist/src/cli/setup-adapter.d.ts +137 -0
  220. package/dist/src/cli/setup-adapter.js +509 -0
  221. package/dist/src/cli/setup-adapter.js.map +1 -0
  222. package/dist/src/cli/setup-channel.d.ts +117 -0
  223. package/dist/src/cli/setup-channel.js +635 -0
  224. package/dist/src/cli/setup-channel.js.map +1 -0
  225. package/dist/src/cli/setup-checkpoint.d.ts +57 -0
  226. package/dist/src/cli/setup-checkpoint.js +196 -0
  227. package/dist/src/cli/setup-checkpoint.js.map +1 -0
  228. package/dist/src/cli/setup-common.d.ts +275 -0
  229. package/dist/src/cli/setup-common.js +376 -0
  230. package/dist/src/cli/setup-common.js.map +1 -0
  231. package/dist/src/cli/setup-flow.d.ts +287 -0
  232. package/dist/src/cli/setup-flow.js +476 -0
  233. package/dist/src/cli/setup-flow.js.map +1 -0
  234. package/dist/src/cli/setup-service.d.ts +96 -0
  235. package/dist/src/cli/setup-service.js +308 -0
  236. package/dist/src/cli/setup-service.js.map +1 -0
  237. package/dist/src/cli/setup.d.ts +202 -0
  238. package/dist/src/cli/setup.js +473 -0
  239. package/dist/src/cli/setup.js.map +1 -0
  240. package/dist/src/cli/style.d.ts +320 -0
  241. package/dist/src/cli/style.js +469 -0
  242. package/dist/src/cli/style.js.map +1 -0
  243. package/dist/src/cli/token.d.ts +39 -0
  244. package/dist/src/cli/token.js +274 -0
  245. package/dist/src/cli/token.js.map +1 -0
  246. package/dist/src/cli/up.d.ts +155 -0
  247. package/dist/src/cli/up.js +849 -0
  248. package/dist/src/cli/up.js.map +1 -0
  249. package/dist/src/cli/usage.d.ts +37 -0
  250. package/dist/src/cli/usage.js +91 -0
  251. package/dist/src/cli/usage.js.map +1 -0
  252. package/dist/src/cli/values.d.ts +40 -0
  253. package/dist/src/cli/values.js +189 -0
  254. package/dist/src/cli/values.js.map +1 -0
  255. package/dist/src/cli/vault.d.ts +59 -0
  256. package/dist/src/cli/vault.js +362 -0
  257. package/dist/src/cli/vault.js.map +1 -0
  258. package/dist/src/cli/verb-registry.d.ts +76 -0
  259. package/dist/src/cli/verb-registry.js +2341 -0
  260. package/dist/src/cli/verb-registry.js.map +1 -0
  261. package/dist/src/cli/wordmark.d.ts +31 -0
  262. package/dist/src/cli/wordmark.js +52 -0
  263. package/dist/src/cli/wordmark.js.map +1 -0
  264. package/dist/src/codex/doctor.d.ts +13 -0
  265. package/dist/src/codex/doctor.js +41 -0
  266. package/dist/src/codex/doctor.js.map +1 -0
  267. package/dist/src/codex/manifest.d.ts +49 -0
  268. package/dist/src/codex/manifest.js +103 -0
  269. package/dist/src/codex/manifest.js.map +1 -0
  270. package/dist/src/codex/templates.d.ts +41 -0
  271. package/dist/src/codex/templates.js +319 -0
  272. package/dist/src/codex/templates.js.map +1 -0
  273. package/dist/src/codex/trust.d.ts +19 -0
  274. package/dist/src/codex/trust.js +183 -0
  275. package/dist/src/codex/trust.js.map +1 -0
  276. package/dist/src/codex/workspace-plan.d.ts +131 -0
  277. package/dist/src/codex/workspace-plan.js +561 -0
  278. package/dist/src/codex/workspace-plan.js.map +1 -0
  279. package/dist/src/core/actor.d.ts +2 -0
  280. package/dist/src/core/actor.js +5 -0
  281. package/dist/src/core/actor.js.map +1 -0
  282. package/dist/src/core/advance-cycle.d.ts +170 -0
  283. package/dist/src/core/advance-cycle.js +200 -0
  284. package/dist/src/core/advance-cycle.js.map +1 -0
  285. package/dist/src/core/agents-md.d.ts +276 -0
  286. package/dist/src/core/agents-md.js +747 -0
  287. package/dist/src/core/agents-md.js.map +1 -0
  288. package/dist/src/core/apply-patch.d.ts +49 -0
  289. package/dist/src/core/apply-patch.js +266 -0
  290. package/dist/src/core/apply-patch.js.map +1 -0
  291. package/dist/src/core/attest.d.ts +420 -0
  292. package/dist/src/core/attest.js +589 -0
  293. package/dist/src/core/attest.js.map +1 -0
  294. package/dist/src/core/audit.d.ts +492 -0
  295. package/dist/src/core/audit.js +882 -0
  296. package/dist/src/core/audit.js.map +1 -0
  297. package/dist/src/core/budgets.d.ts +238 -0
  298. package/dist/src/core/budgets.js +449 -0
  299. package/dist/src/core/budgets.js.map +1 -0
  300. package/dist/src/core/checkpoint.d.ts +500 -0
  301. package/dist/src/core/checkpoint.js +738 -0
  302. package/dist/src/core/checkpoint.js.map +1 -0
  303. package/dist/src/core/child-env.d.ts +88 -0
  304. package/dist/src/core/child-env.js +86 -0
  305. package/dist/src/core/child-env.js.map +1 -0
  306. package/dist/src/core/clock.d.ts +52 -0
  307. package/dist/src/core/clock.js +43 -0
  308. package/dist/src/core/clock.js.map +1 -0
  309. package/dist/src/core/command-class.d.ts +543 -0
  310. package/dist/src/core/command-class.js +2356 -0
  311. package/dist/src/core/command-class.js.map +1 -0
  312. package/dist/src/core/coverage-sources/adapter.d.ts +40 -0
  313. package/dist/src/core/coverage-sources/adapter.js +71 -0
  314. package/dist/src/core/coverage-sources/adapter.js.map +1 -0
  315. package/dist/src/core/coverage-sources/gh.d.ts +48 -0
  316. package/dist/src/core/coverage-sources/gh.js +136 -0
  317. package/dist/src/core/coverage-sources/gh.js.map +1 -0
  318. package/dist/src/core/coverage-sources/git.d.ts +101 -0
  319. package/dist/src/core/coverage-sources/git.js +269 -0
  320. package/dist/src/core/coverage-sources/git.js.map +1 -0
  321. package/dist/src/core/coverage.d.ts +217 -0
  322. package/dist/src/core/coverage.js +337 -0
  323. package/dist/src/core/coverage.js.map +1 -0
  324. package/dist/src/core/credential-spec.d.ts +72 -0
  325. package/dist/src/core/credential-spec.js +23 -0
  326. package/dist/src/core/credential-spec.js.map +1 -0
  327. package/dist/src/core/dark-session.d.ts +331 -0
  328. package/dist/src/core/dark-session.js +714 -0
  329. package/dist/src/core/dark-session.js.map +1 -0
  330. package/dist/src/core/decision-refusal.d.ts +185 -0
  331. package/dist/src/core/decision-refusal.js +265 -0
  332. package/dist/src/core/decision-refusal.js.map +1 -0
  333. package/dist/src/core/env-file.d.ts +450 -0
  334. package/dist/src/core/env-file.js +837 -0
  335. package/dist/src/core/env-file.js.map +1 -0
  336. package/dist/src/core/execute.d.ts +858 -0
  337. package/dist/src/core/execute.js +1271 -0
  338. package/dist/src/core/execute.js.map +1 -0
  339. package/dist/src/core/frontmatter.d.ts +78 -0
  340. package/dist/src/core/frontmatter.js +100 -0
  341. package/dist/src/core/frontmatter.js.map +1 -0
  342. package/dist/src/core/gate-window.d.ts +312 -0
  343. package/dist/src/core/gate-window.js +506 -0
  344. package/dist/src/core/gate-window.js.map +1 -0
  345. package/dist/src/core/gate.d.ts +1364 -0
  346. package/dist/src/core/gate.js +3002 -0
  347. package/dist/src/core/gate.js.map +1 -0
  348. package/dist/src/core/git-run.d.ts +73 -0
  349. package/dist/src/core/git-run.js +93 -0
  350. package/dist/src/core/git-run.js.map +1 -0
  351. package/dist/src/core/harness-version.d.ts +157 -0
  352. package/dist/src/core/harness-version.js +211 -0
  353. package/dist/src/core/harness-version.js.map +1 -0
  354. package/dist/src/core/harness-wait.d.ts +55 -0
  355. package/dist/src/core/harness-wait.js +58 -0
  356. package/dist/src/core/harness-wait.js.map +1 -0
  357. package/dist/src/core/head-retry.d.ts +107 -0
  358. package/dist/src/core/head-retry.js +121 -0
  359. package/dist/src/core/head-retry.js.map +1 -0
  360. package/dist/src/core/instance.d.ts +253 -0
  361. package/dist/src/core/instance.js +319 -0
  362. package/dist/src/core/instance.js.map +1 -0
  363. package/dist/src/core/intake-limits.d.ts +247 -0
  364. package/dist/src/core/intake-limits.js +350 -0
  365. package/dist/src/core/intake-limits.js.map +1 -0
  366. package/dist/src/core/jcs.d.ts +52 -0
  367. package/dist/src/core/jcs.js +132 -0
  368. package/dist/src/core/jcs.js.map +1 -0
  369. package/dist/src/core/journal.d.ts +144 -0
  370. package/dist/src/core/journal.js +200 -0
  371. package/dist/src/core/journal.js.map +1 -0
  372. package/dist/src/core/live-draw.d.ts +436 -0
  373. package/dist/src/core/live-draw.js +703 -0
  374. package/dist/src/core/live-draw.js.map +1 -0
  375. package/dist/src/core/log-reconcile.d.ts +89 -0
  376. package/dist/src/core/log-reconcile.js +136 -0
  377. package/dist/src/core/log-reconcile.js.map +1 -0
  378. package/dist/src/core/log-subscribe.d.ts +36 -0
  379. package/dist/src/core/log-subscribe.js +162 -0
  380. package/dist/src/core/log-subscribe.js.map +1 -0
  381. package/dist/src/core/log.d.ts +278 -0
  382. package/dist/src/core/log.js +546 -0
  383. package/dist/src/core/log.js.map +1 -0
  384. package/dist/src/core/loop.d.ts +274 -0
  385. package/dist/src/core/loop.js +487 -0
  386. package/dist/src/core/loop.js.map +1 -0
  387. package/dist/src/core/md-fence.d.ts +41 -0
  388. package/dist/src/core/md-fence.js +74 -0
  389. package/dist/src/core/md-fence.js.map +1 -0
  390. package/dist/src/core/money.d.ts +147 -0
  391. package/dist/src/core/money.js +195 -0
  392. package/dist/src/core/money.js.map +1 -0
  393. package/dist/src/core/payload-census.d.ts +74 -0
  394. package/dist/src/core/payload-census.js +146 -0
  395. package/dist/src/core/payload-census.js.map +1 -0
  396. package/dist/src/core/payload-store.d.ts +175 -0
  397. package/dist/src/core/payload-store.js +340 -0
  398. package/dist/src/core/payload-store.js.map +1 -0
  399. package/dist/src/core/payload.d.ts +71 -0
  400. package/dist/src/core/payload.js +80 -0
  401. package/dist/src/core/payload.js.map +1 -0
  402. package/dist/src/core/policy-diff.d.ts +292 -0
  403. package/dist/src/core/policy-diff.js +588 -0
  404. package/dist/src/core/policy-diff.js.map +1 -0
  405. package/dist/src/core/policy-expectations.d.ts +199 -0
  406. package/dist/src/core/policy-expectations.js +394 -0
  407. package/dist/src/core/policy-expectations.js.map +1 -0
  408. package/dist/src/core/policy-explain.d.ts +150 -0
  409. package/dist/src/core/policy-explain.js +258 -0
  410. package/dist/src/core/policy-explain.js.map +1 -0
  411. package/dist/src/core/policy-load.d.ts +527 -0
  412. package/dist/src/core/policy-load.js +536 -0
  413. package/dist/src/core/policy-load.js.map +1 -0
  414. package/dist/src/core/policy-match.d.ts +281 -0
  415. package/dist/src/core/policy-match.js +478 -0
  416. package/dist/src/core/policy-match.js.map +1 -0
  417. package/dist/src/core/policy-proposal.d.ts +265 -0
  418. package/dist/src/core/policy-proposal.js +458 -0
  419. package/dist/src/core/policy-proposal.js.map +1 -0
  420. package/dist/src/core/prompt-layout.d.ts +221 -0
  421. package/dist/src/core/prompt-layout.js +422 -0
  422. package/dist/src/core/prompt-layout.js.map +1 -0
  423. package/dist/src/core/protected-path-guard.d.ts +453 -0
  424. package/dist/src/core/protected-path-guard.js +1566 -0
  425. package/dist/src/core/protected-path-guard.js.map +1 -0
  426. package/dist/src/core/registration.d.ts +25 -0
  427. package/dist/src/core/registration.js +39 -0
  428. package/dist/src/core/registration.js.map +1 -0
  429. package/dist/src/core/reindex.d.ts +99 -0
  430. package/dist/src/core/reindex.js +336 -0
  431. package/dist/src/core/reindex.js.map +1 -0
  432. package/dist/src/core/sampler.d.ts +313 -0
  433. package/dist/src/core/sampler.js +388 -0
  434. package/dist/src/core/sampler.js.map +1 -0
  435. package/dist/src/core/sandbox.d.ts +290 -0
  436. package/dist/src/core/sandbox.js +424 -0
  437. package/dist/src/core/sandbox.js.map +1 -0
  438. package/dist/src/core/seal.d.ts +165 -0
  439. package/dist/src/core/seal.js +290 -0
  440. package/dist/src/core/seal.js.map +1 -0
  441. package/dist/src/core/state.d.ts +505 -0
  442. package/dist/src/core/state.js +1009 -0
  443. package/dist/src/core/state.js.map +1 -0
  444. package/dist/src/core/task-file.d.ts +185 -0
  445. package/dist/src/core/task-file.js +464 -0
  446. package/dist/src/core/task-file.js.map +1 -0
  447. package/dist/src/core/telegram-config.d.ts +93 -0
  448. package/dist/src/core/telegram-config.js +114 -0
  449. package/dist/src/core/telegram-config.js.map +1 -0
  450. package/dist/src/core/token.d.ts +409 -0
  451. package/dist/src/core/token.js +561 -0
  452. package/dist/src/core/token.js.map +1 -0
  453. package/dist/src/core/validate.d.ts +138 -0
  454. package/dist/src/core/validate.js +0 -0
  455. package/dist/src/core/validate.js.map +1 -0
  456. package/dist/src/core/values.d.ts +137 -0
  457. package/dist/src/core/values.js +153 -0
  458. package/dist/src/core/values.js.map +1 -0
  459. package/dist/src/core/vault.d.ts +291 -0
  460. package/dist/src/core/vault.js +612 -0
  461. package/dist/src/core/vault.js.map +1 -0
  462. package/dist/src/core/verified-snapshot.d.ts +204 -0
  463. package/dist/src/core/verified-snapshot.js +506 -0
  464. package/dist/src/core/verified-snapshot.js.map +1 -0
  465. package/dist/src/core/verify.d.ts +336 -0
  466. package/dist/src/core/verify.js +549 -0
  467. package/dist/src/core/verify.js.map +1 -0
  468. package/dist/src/core/version.d.ts +8 -0
  469. package/dist/src/core/version.js +9 -0
  470. package/dist/src/core/version.js.map +1 -0
  471. package/dist/src/core/wysiwys.d.ts +370 -0
  472. package/dist/src/core/wysiwys.js +728 -0
  473. package/dist/src/core/wysiwys.js.map +1 -0
  474. package/dist/src/daemon/advance-child.d.ts +39 -0
  475. package/dist/src/daemon/advance-child.js +78 -0
  476. package/dist/src/daemon/advance-child.js.map +1 -0
  477. package/dist/src/daemon/advance.d.ts +466 -0
  478. package/dist/src/daemon/advance.js +849 -0
  479. package/dist/src/daemon/advance.js.map +1 -0
  480. package/dist/src/daemon/audit.d.ts +87 -0
  481. package/dist/src/daemon/audit.js +90 -0
  482. package/dist/src/daemon/audit.js.map +1 -0
  483. package/dist/src/daemon/daemon.d.ts +1180 -0
  484. package/dist/src/daemon/daemon.js +1988 -0
  485. package/dist/src/daemon/daemon.js.map +1 -0
  486. package/dist/src/daemon/dark-session.d.ts +64 -0
  487. package/dist/src/daemon/dark-session.js +119 -0
  488. package/dist/src/daemon/dark-session.js.map +1 -0
  489. package/dist/src/daemon/draw-child.d.ts +36 -0
  490. package/dist/src/daemon/draw-child.js +132 -0
  491. package/dist/src/daemon/draw-child.js.map +1 -0
  492. package/dist/src/daemon/draw.d.ts +154 -0
  493. package/dist/src/daemon/draw.js +458 -0
  494. package/dist/src/daemon/draw.js.map +1 -0
  495. package/dist/src/daemon/git-evidence.d.ts +173 -0
  496. package/dist/src/daemon/git-evidence.js +345 -0
  497. package/dist/src/daemon/git-evidence.js.map +1 -0
  498. package/dist/src/daemon/projection.d.ts +180 -0
  499. package/dist/src/daemon/projection.js +233 -0
  500. package/dist/src/daemon/projection.js.map +1 -0
  501. package/dist/src/daemon/prune.d.ts +207 -0
  502. package/dist/src/daemon/prune.js +376 -0
  503. package/dist/src/daemon/prune.js.map +1 -0
  504. package/dist/src/mcp/http.d.ts +113 -0
  505. package/dist/src/mcp/http.js +343 -0
  506. package/dist/src/mcp/http.js.map +1 -0
  507. package/dist/src/mcp/server.d.ts +265 -0
  508. package/dist/src/mcp/server.js +602 -0
  509. package/dist/src/mcp/server.js.map +1 -0
  510. package/docs/adapter-api.md +106 -0
  511. package/docs/cli-reference.md +5716 -0
  512. package/docs/codex-enforced-session.md +30 -0
  513. package/package.json +53 -4
  514. package/schema/.gitkeep +0 -0
  515. package/schema/LICENSE +117 -0
  516. package/schema/codex-instance.schema.json +82 -0
  517. package/schema/envelope.schema.json +137 -0
  518. package/schema/event.schema.json +1811 -0
  519. package/schema/fixtures/codex-instance/invalid/unpinned-codex-version.json +40 -0
  520. package/schema/fixtures/codex-instance/valid/canonical.json +40 -0
  521. package/schema/fixtures/envelope/invalid/action-missing-idempotency-key.json +15 -0
  522. package/schema/fixtures/envelope/invalid/action-unknown-class-format.json +14 -0
  523. package/schema/fixtures/envelope/invalid/confidence-out-of-range.json +11 -0
  524. package/schema/fixtures/envelope/invalid/est-cost-bare-number.json +14 -0
  525. package/schema/fixtures/envelope/invalid/est-cost-noncanonical-string.json +14 -0
  526. package/schema/fixtures/envelope/invalid/malformed-assignee.json +10 -0
  527. package/schema/fixtures/envelope/invalid/malformed-created-by.json +7 -0
  528. package/schema/fixtures/envelope/invalid/malformed-max-latency.json +11 -0
  529. package/schema/fixtures/envelope/invalid/malformed-payload-hash.json +14 -0
  530. package/schema/fixtures/envelope/invalid/max-cost-bare-number.json +11 -0
  531. package/schema/fixtures/envelope/invalid/missing-origin.json +3 -0
  532. package/schema/fixtures/envelope/invalid/negative-est-cost.json +14 -0
  533. package/schema/fixtures/envelope/invalid/unknown-state.json +7 -0
  534. package/schema/fixtures/envelope/invalid/unknown-top-level-field.json +8 -0
  535. package/schema/fixtures/envelope/valid/action-payload-hash.json +17 -0
  536. package/schema/fixtures/envelope/valid/actions-without-budget.json +18 -0
  537. package/schema/fixtures/envelope/valid/canonical.json +25 -0
  538. package/schema/fixtures/envelope/valid/minimal.json +7 -0
  539. package/schema/fixtures/envelope/valid/multi-action-executed.json +30 -0
  540. package/schema/fixtures/envelope/valid/record-write-stage.json +22 -0
  541. package/schema/fixtures/event/invalid/approval-granted-agent-actor.json +15 -0
  542. package/schema/fixtures/event/invalid/approval-granted-empty-batch-delivery-id.json +17 -0
  543. package/schema/fixtures/event/invalid/approval-granted-fifth-reaction.json +16 -0
  544. package/schema/fixtures/event/invalid/approval-granted-missing-actor.json +14 -0
  545. package/schema/fixtures/event/invalid/approval-requested-missing-action-key.json +14 -0
  546. package/schema/fixtures/event/invalid/approval-withdrawn-agent-policy-drift.json +15 -0
  547. package/schema/fixtures/event/invalid/approval-withdrawn-missing-reason.json +15 -0
  548. package/schema/fixtures/event/invalid/approval-withdrawn-system-actor.json +15 -0
  549. package/schema/fixtures/event/invalid/audit-decision-refused-human-actor.json +17 -0
  550. package/schema/fixtures/event/invalid/audit-decision-refused-missing-code.json +16 -0
  551. package/schema/fixtures/event/invalid/audit-reviewed-agent-actor.json +15 -0
  552. package/schema/fixtures/event/invalid/audit-reviewed-loved-no-note.json +16 -0
  553. package/schema/fixtures/event/invalid/audit-reviewed-system-actor.json +15 -0
  554. package/schema/fixtures/event/invalid/bad-actor-prefix.json +15 -0
  555. package/schema/fixtures/event/invalid/est-cost-bare-number.json +17 -0
  556. package/schema/fixtures/event/invalid/execution-completed-fabricated-exit-code.json +16 -0
  557. package/schema/fixtures/event/invalid/execution-completed-provider-ref-empty-id.json +18 -0
  558. package/schema/fixtures/event/invalid/execution-completed-provider-ref-extra-field.json +19 -0
  559. package/schema/fixtures/event/invalid/execution-completed-provider-ref-id-not-string.json +18 -0
  560. package/schema/fixtures/event/invalid/execution-completed-provider-ref-missing-adapter.json +17 -0
  561. package/schema/fixtures/event/invalid/execution-failed-open-reported-by.json +16 -0
  562. package/schema/fixtures/event/invalid/execution-indeterminate-open-reason.json +14 -0
  563. package/schema/fixtures/event/invalid/execution-reconciled-agent-actor.json +17 -0
  564. package/schema/fixtures/event/invalid/execution-started-negative-env-stripped.json +16 -0
  565. package/schema/fixtures/event/invalid/gate-bypassed-missing-opened-seq.json +15 -0
  566. package/schema/fixtures/event/invalid/gate-closed-non-integer-opened-seq.json +13 -0
  567. package/schema/fixtures/event/invalid/gate-opened-agent-actor.json +16 -0
  568. package/schema/fixtures/event/invalid/gate-organ-attested-absolute-path.json +14 -0
  569. package/schema/fixtures/event/invalid/gate-organ-attested-agent-actor.json +14 -0
  570. package/schema/fixtures/event/invalid/gate-organ-attested-missing-organ-path.json +13 -0
  571. package/schema/fixtures/event/invalid/harness-unknown-kind.json +18 -0
  572. package/schema/fixtures/event/invalid/harness-version-multiline.json +16 -0
  573. package/schema/fixtures/event/invalid/log-checkpoint-agent-actor.json +17 -0
  574. package/schema/fixtures/event/invalid/log-checkpoint-missing-signature.json +16 -0
  575. package/schema/fixtures/event/invalid/log-checkpoint-short-signed-hash.json +17 -0
  576. package/schema/fixtures/event/invalid/log-checkpoint-unknown-signature-alg.json +17 -0
  577. package/schema/fixtures/event/invalid/malformed-ts.json +15 -0
  578. package/schema/fixtures/event/invalid/missing-alg.json +14 -0
  579. package/schema/fixtures/event/invalid/missing-hash.json +14 -0
  580. package/schema/fixtures/event/invalid/non-integer-seq.json +15 -0
  581. package/schema/fixtures/event/invalid/payload-pruned-human-actor.json +14 -0
  582. package/schema/fixtures/event/invalid/payload-pruned-missing-hash.json +14 -0
  583. package/schema/fixtures/event/invalid/policy-declined-agent-actor.json +15 -0
  584. package/schema/fixtures/event/invalid/policy-proposed-missing-diff.json +19 -0
  585. package/schema/fixtures/event/invalid/policy-proposed-system-actor.json +26 -0
  586. package/schema/fixtures/event/invalid/short-hash.json +15 -0
  587. package/schema/fixtures/event/invalid/unknown-alg.json +15 -0
  588. package/schema/fixtures/event/invalid/unknown-event-type.json +15 -0
  589. package/schema/fixtures/event/invalid/unknown-top-level-field.json +16 -0
  590. package/schema/fixtures/event/valid/approval-expired.json +15 -0
  591. package/schema/fixtures/event/valid/approval-granted-batch.json +19 -0
  592. package/schema/fixtures/event/valid/approval-granted-reaction.json +16 -0
  593. package/schema/fixtures/event/valid/approval-granted.json +15 -0
  594. package/schema/fixtures/event/valid/approval-rejected.json +15 -0
  595. package/schema/fixtures/event/valid/approval-requested.json +19 -0
  596. package/schema/fixtures/event/valid/approval-revoked.json +15 -0
  597. package/schema/fixtures/event/valid/approval-withdrawn-policy-drift.json +17 -0
  598. package/schema/fixtures/event/valid/approval-withdrawn.json +16 -0
  599. package/schema/fixtures/event/valid/audit-decision-refused.json +20 -0
  600. package/schema/fixtures/event/valid/audit-reviewed-reaction.json +17 -0
  601. package/schema/fixtures/event/valid/audit-reviewed.json +15 -0
  602. package/schema/fixtures/event/valid/audit-sampled.json +14 -0
  603. package/schema/fixtures/event/valid/budget-exceeded.json +21 -0
  604. package/schema/fixtures/event/valid/envelope-drift.json +16 -0
  605. package/schema/fixtures/event/valid/execution-completed-harness-report.json +16 -0
  606. package/schema/fixtures/event/valid/execution-completed-provider-ref.json +18 -0
  607. package/schema/fixtures/event/valid/execution-completed.json +15 -0
  608. package/schema/fixtures/event/valid/execution-failed-harness-report.json +16 -0
  609. package/schema/fixtures/event/valid/execution-failed.json +15 -0
  610. package/schema/fixtures/event/valid/execution-indeterminate.json +15 -0
  611. package/schema/fixtures/event/valid/execution-reconciled.json +17 -0
  612. package/schema/fixtures/event/valid/execution-started-env-stripped.json +17 -0
  613. package/schema/fixtures/event/valid/execution-started.json +14 -0
  614. package/schema/fixtures/event/valid/gate-bypassed-harness-version.json +18 -0
  615. package/schema/fixtures/event/valid/gate-bypassed.json +19 -0
  616. package/schema/fixtures/event/valid/gate-closed.json +14 -0
  617. package/schema/fixtures/event/valid/gate-opened.json +16 -0
  618. package/schema/fixtures/event/valid/gate-organ-attested.json +14 -0
  619. package/schema/fixtures/event/valid/genesis-null-prev.json +14 -0
  620. package/schema/fixtures/event/valid/log-checkpoint.json +17 -0
  621. package/schema/fixtures/event/valid/payload-pruned-orphan.json +13 -0
  622. package/schema/fixtures/event/valid/payload-pruned.json +17 -0
  623. package/schema/fixtures/event/valid/policy-declined.json +16 -0
  624. package/schema/fixtures/event/valid/policy-proposed.json +35 -0
  625. package/schema/fixtures/event/valid/policy-updated.json +14 -0
  626. package/schema/fixtures/event/valid/reconciliation-required.json +18 -0
  627. package/schema/fixtures/event/valid/reconciliation-satisfied.json +17 -0
  628. package/schema/fixtures/event/valid/route-accepted.json +15 -0
  629. package/schema/fixtures/event/valid/route-proposed.json +16 -0
  630. package/schema/fixtures/event/valid/spec-example.json +15 -0
  631. package/schema/fixtures/event/valid/task-registered-harness-version.json +23 -0
  632. package/schema/fixtures/event/valid/task-registered.json +14 -0
  633. package/schema/fixtures/hash/known-answer-pre-121.json +74 -0
  634. package/schema/fixtures/hash/known-answer.json +74 -0
  635. package/schema/fixtures/policy/invalid/bad-approval-ttl.json +7 -0
  636. package/schema/fixtures/policy/invalid/bad-web-port.json +4 -0
  637. package/schema/fixtures/policy/invalid/checkpoint-key-not-base64.json +6 -0
  638. package/schema/fixtures/policy/invalid/class-rule-missing-autonomy.json +9 -0
  639. package/schema/fixtures/policy/invalid/empty-class-key.json +6 -0
  640. package/schema/fixtures/policy/invalid/live-rate-on-human-only.json +7 -0
  641. package/schema/fixtures/policy/invalid/malformed-class-key.json +6 -0
  642. package/schema/fixtures/policy/invalid/missing-version.json +8 -0
  643. package/schema/fixtures/policy/invalid/negative-limit.json +9 -0
  644. package/schema/fixtures/policy/invalid/non-numeric-limit.json +9 -0
  645. package/schema/fixtures/policy/invalid/non-positive-max-pending.json +9 -0
  646. package/schema/fixtures/policy/invalid/on-expiry-grant.json +8 -0
  647. package/schema/fixtures/policy/invalid/payload-retention-bare-number.json +4 -0
  648. package/schema/fixtures/policy/invalid/payload-retention-compound.json +4 -0
  649. package/schema/fixtures/policy/invalid/payload-retention-fractional.json +4 -0
  650. package/schema/fixtures/policy/invalid/payload-retention-zero.json +4 -0
  651. package/schema/fixtures/policy/invalid/protected-paths-escape.json +4 -0
  652. package/schema/fixtures/policy/invalid/protected-paths-glob.json +4 -0
  653. package/schema/fixtures/policy/invalid/retro-rate-on-human-only.json +7 -0
  654. package/schema/fixtures/policy/invalid/retro-rate-on-manual.json +7 -0
  655. package/schema/fixtures/policy/invalid/retro-rate-zero.json +7 -0
  656. package/schema/fixtures/policy/invalid/sample-rate-too-high.json +5 -0
  657. package/schema/fixtures/policy/invalid/sampling-secret-env-empty.json +7 -0
  658. package/schema/fixtures/policy/invalid/sampling-secret-env-not-string.json +6 -0
  659. package/schema/fixtures/policy/invalid/skew-tolerance-compound.json +6 -0
  660. package/schema/fixtures/policy/invalid/unknown-autonomy.json +7 -0
  661. package/schema/fixtures/policy/invalid/unknown-class-rule-key.json +6 -0
  662. package/schema/fixtures/policy/invalid/unknown-top-level-key.json +7 -0
  663. package/schema/fixtures/policy/invalid/vault-passphrase-env-empty.json +6 -0
  664. package/schema/fixtures/policy/invalid/vault-passphrase-literal.json +6 -0
  665. package/schema/fixtures/policy/invalid/version-not-string.json +4 -0
  666. package/schema/fixtures/policy/valid/canonical.json +47 -0
  667. package/schema/fixtures/policy/valid/checkpoint-keys.json +18 -0
  668. package/schema/fixtures/policy/valid/class-approvers-limits.json +25 -0
  669. package/schema/fixtures/policy/valid/class-retro-rate.json +17 -0
  670. package/schema/fixtures/policy/valid/global-budgets.json +19 -0
  671. package/schema/fixtures/policy/valid/human-only.json +9 -0
  672. package/schema/fixtures/policy/valid/minimal.json +6 -0
  673. package/schema/fixtures/policy/valid/protected-paths.json +10 -0
  674. package/schema/fixtures/policy/valid/record-namespace.json +13 -0
  675. package/schema/fixtures/policy/valid/request-volume-limits.json +26 -0
  676. package/schema/fixtures/policy/valid/retention-and-sampling-secret.json +16 -0
  677. package/schema/fixtures/policy/valid/skew-tolerance.json +15 -0
  678. package/schema/fixtures/policy/valid/vault-passphrase-env.json +14 -0
  679. package/schema/fixtures/policy/valid/wildcards.json +15 -0
  680. package/schema/fixtures/policy-md/invalid/alias-bomb.md +15 -0
  681. package/schema/fixtures/policy-md/invalid/no-fence.md +7 -0
  682. package/schema/fixtures/policy-md/invalid/protected-route-not-a-subclass.md +16 -0
  683. package/schema/fixtures/policy-md/invalid/schema-invalid-autonomy.md +16 -0
  684. package/schema/fixtures/policy-md/invalid/schema-invalid-read-proof.md +17 -0
  685. package/schema/fixtures/policy-md/invalid/two-fences.md +19 -0
  686. package/schema/fixtures/policy-md/invalid/unclosed-fence.md +11 -0
  687. package/schema/fixtures/policy-md/invalid/wrong-info-string.md +11 -0
  688. package/schema/fixtures/policy-md/invalid/yaml-syntax-error.md +13 -0
  689. package/schema/fixtures/policy-md/precedence/both/APPROVAL.md +7 -0
  690. package/schema/fixtures/policy-md/precedence/both/APPROVALS.md +7 -0
  691. package/schema/fixtures/policy-md/precedence/fallback-only/APPROVALS.md +7 -0
  692. package/schema/fixtures/policy-md/valid/canonical.md +50 -0
  693. package/schema/fixtures/policy-md/valid/daemon-read-proof.md +18 -0
  694. package/schema/fixtures/policy-md/valid/minimal.md +3 -0
  695. package/schema/fixtures/policy-md/valid/prose-lookalikes.md +54 -0
  696. package/schema/fixtures/policy-md/valid/routed-protected-paths.md +49 -0
  697. package/schema/fixtures/policy-md/valid/with-values.md +79 -0
  698. package/schema/fixtures/sample-record/invalid/bad-date-time.json +4 -0
  699. package/schema/fixtures/sample-record/invalid/missing-required-field.json +3 -0
  700. package/schema/fixtures/sample-record/invalid/unknown-top-level-field.json +5 -0
  701. package/schema/fixtures/sample-record/invalid/wrong-type.json +4 -0
  702. package/schema/fixtures/sample-record/valid/minimal.json +4 -0
  703. package/schema/fixtures/sample-record/valid/with-note.json +5 -0
  704. package/schema/fixtures/values/invalid/class-shaped.json +9 -0
  705. package/schema/fixtures/values/invalid/duplicate-entry.json +4 -0
  706. package/schema/fixtures/values/invalid/non-string-item.json +4 -0
  707. package/schema/fixtures/values/invalid/over-cap.json +26 -0
  708. package/schema/fixtures/values/invalid/unknown-key.json +5 -0
  709. package/schema/fixtures/values/invalid/version-string.json +1 -0
  710. package/schema/fixtures/values/valid/empty-lists.json +7 -0
  711. package/schema/fixtures/values/valid/full.json +20 -0
  712. package/schema/fixtures/values/valid/minimal.json +1 -0
  713. package/schema/fixtures/values-md/invalid/schema-invalid.md +62 -0
  714. package/schema/fixtures/values-md/invalid/two-blocks.md +69 -0
  715. package/schema/fixtures/values-md/invalid/unterminated.md +61 -0
  716. package/schema/fixtures/values-md/invalid/yaml-error.md +63 -0
  717. package/schema/fixtures/values-md/valid/absent.md +50 -0
  718. package/schema/fixtures/values-md/valid/with-values.md +79 -0
  719. package/schema/policy.schema.json +501 -0
  720. package/schema/sample-record.schema.json +26 -0
  721. package/schema/values.schema.json +55 -0
  722. package/templates/codex/README.md +9 -0
@@ -0,0 +1,464 @@
1
+ /**
2
+ * The task-file writer: round-trip rewriting that preserves everything it does
3
+ * not own (SPEC.md §6, APRV-61).
4
+ *
5
+ * SPEC.md §6 is a MUST: "Implementations MUST preserve unknown frontmatter keys
6
+ * when rewriting files." `core/frontmatter.ts` is the reader and is read-only in
7
+ * the strongest sense; this module is its counterpart, and the only place in the
8
+ * codebase that produces new task-file bytes.
9
+ *
10
+ * The bar is not "preserve the keys we can think of". Backlog.md 1.49.3 itself
11
+ * fails this MUST — the `envelope-edit-before` / `envelope-edit-after` fixtures
12
+ * record it dropping our whole `approval:` key on an unrelated `task edit` — and
13
+ * we extend that convention rather than fork it, so the writer that has to be
14
+ * trustworthy is ours.
15
+ *
16
+ * ## Why lines, not a YAML document
17
+ *
18
+ * The obvious implementation reserialises the frontmatter through the `yaml`
19
+ * library's Document API. It preserves more than a naive `parse`/`stringify`
20
+ * round trip, but it does not preserve *bytes*: quoting style, intra-line
21
+ * spacing, comment placement, and blank-line runs are all reconstructed from the
22
+ * library's own defaults. Every one of those is a spurious diff in a user's git
23
+ * history, and a diff nobody can explain is how a board tool's metadata gets
24
+ * quietly eaten.
25
+ *
26
+ * So this module treats the frontmatter as **lines with their terminators**, and
27
+ * the parsed YAML only as an oracle:
28
+ *
29
+ * - the hardened parser decides whether the block is *structurally* valid at
30
+ * all (and, being hardened, rejects duplicate keys, tags, and unbounded
31
+ * aliases before any of them can reach a rewrite);
32
+ * - a column-0 line scan finds the `approval:` key's line range;
33
+ * - only that range is rewritten, and for a state-only edit only the single
34
+ * `state:` line inside it;
35
+ * - every other line — every other key, its order, its quoting, its comments,
36
+ * the blank lines between them, both `---` delimiters, and the entire body
37
+ * after the closing delimiter — is re-emitted as the exact bytes that came
38
+ * in, terminator included.
39
+ *
40
+ * Byte-identity is therefore a property of the construction, not of a
41
+ * comparison performed afterwards: untouched lines are never parsed and never
42
+ * rebuilt. The corpus test (`tests/task-file.test.ts`) still asserts it against
43
+ * every real Backlog.md fixture, because a construction argument that is not
44
+ * checked is a construction argument that has already drifted.
45
+ *
46
+ * ## What "unknown key" means here
47
+ *
48
+ * Every frontmatter key except `approval:` is unknown to this writer, and that
49
+ * is deliberate. `id`, `title`, `status`, `milestone`, `ordinal`,
50
+ * `parent_task_id` and the rest belong to Backlog.md; a key some future board
51
+ * tool invents belongs to it. This module has no allow-list of keys it tolerates
52
+ * — it has one key it owns and rewrites, and it cannot express a change to
53
+ * anything else. There is no edit in {@link TaskFileEdit} that removes a key,
54
+ * reorders keys, or touches the body.
55
+ *
56
+ * ## This writer never touches the log
57
+ *
58
+ * A task file is a **projection** (SPEC.md §6.3): the daemon writes `state:`
59
+ * into the file *after* the event is appended, never the reverse. Nothing here
60
+ * opens `.approval/`, appends to `events.jsonl`, or computes a hash chain.
61
+ * {@link rewriteTaskFile} is a pure function of (bytes, edit) with no clock, no
62
+ * network, and no filesystem access at all; {@link writeTaskFileAtomic} writes
63
+ * exactly the one path it is handed.
64
+ *
65
+ * Determinism: same input bytes and same edit, same output bytes, always. Never
66
+ * throws — every failure is a structured result carrying one of the codes in
67
+ * {@link TaskFileErrorCode}.
68
+ */
69
+ import { closeSync, mkdirSync, openSync, renameSync, unlinkSync, writeSync, } from "node:fs";
70
+ import { basename, dirname, join } from "node:path";
71
+ import { isDeepStrictEqual } from "node:util";
72
+ import { stringify } from "yaml";
73
+ import { FRONTMATTER_DELIMITER, parseFrontmatter } from "./frontmatter.js";
74
+ import { parseHardenedYaml } from "./policy-load.js";
75
+ import { validate } from "./validate.js";
76
+ /** The frontmatter key this module owns. Everything else is preserved verbatim. */
77
+ export const ENVELOPE_KEY = "approval";
78
+ /** The schema id (`schema/envelope.schema.json`) the result is validated against. */
79
+ export const ENVELOPE_SCHEMA_ID = "envelope";
80
+ function failure(code, message) {
81
+ return { ok: false, code, message };
82
+ }
83
+ function detail(cause) {
84
+ return cause instanceof Error ? cause.message : String(cause);
85
+ }
86
+ /** Split into {@link SourceLine}s such that concatenating them restores `input`. */
87
+ function splitLines(input) {
88
+ const lines = [];
89
+ const pattern = /\r\n|\n|\r/gu;
90
+ let start = 0;
91
+ let match = pattern.exec(input);
92
+ while (match !== null) {
93
+ lines.push({ text: input.slice(start, match.index), term: match[0] });
94
+ start = pattern.lastIndex;
95
+ match = pattern.exec(input);
96
+ }
97
+ lines.push({ text: input.slice(start), term: "" });
98
+ return lines;
99
+ }
100
+ function joinLines(lines) {
101
+ let out = "";
102
+ for (const line of lines)
103
+ out += line.text + line.term;
104
+ return out;
105
+ }
106
+ /** A column-0 `approval:` key line. Nested keys are indented and never match. */
107
+ const ENVELOPE_KEY_LINE = /^approval[ \t]*:/u;
108
+ /**
109
+ * Find the frontmatter, parse it under the hardened settings, and locate the
110
+ * `approval:` block's line range.
111
+ *
112
+ * The delimiter rules are the reader's, character for character: the file must
113
+ * begin with a line that is exactly `---`, and the block ends at the *first*
114
+ * following line that is exactly `---`. A `---` inside the markdown body is
115
+ * therefore never mistaken for the closing delimiter — it lies after the close
116
+ * and is part of the suffix this writer copies verbatim.
117
+ */
118
+ function locate(text) {
119
+ const lines = splitLines(text);
120
+ const first = lines[0];
121
+ if (first === undefined || first.text !== FRONTMATTER_DELIMITER) {
122
+ return failure("no-frontmatter", `the file does not begin with a ${FRONTMATTER_DELIMITER} line, so it carries no frontmatter to rewrite. This writer never invents a frontmatter block: adding one would change a file whose shape it does not understand (SPEC.md §6 requires tolerating tasks with no envelope, not manufacturing one).`);
123
+ }
124
+ let close = -1;
125
+ for (let index = 1; index < lines.length; index += 1) {
126
+ if (lines[index]?.text === FRONTMATTER_DELIMITER) {
127
+ close = index;
128
+ break;
129
+ }
130
+ }
131
+ if (close === -1) {
132
+ return failure("unterminated", `frontmatter opened with ${FRONTMATTER_DELIMITER} but no closing ${FRONTMATTER_DELIMITER} line was found; a truncated frontmatter block is indistinguishable from a complete one and is refused`);
133
+ }
134
+ const source = lines
135
+ .slice(1, close)
136
+ .map((line) => line.text)
137
+ .join("\n");
138
+ const parsed = parseHardenedYaml(source, {
139
+ subject: "frontmatter YAML",
140
+ tagContext: "a task envelope",
141
+ });
142
+ if (!parsed.ok)
143
+ return failure("yaml-error", parsed.message);
144
+ const value = parsed.value;
145
+ let data;
146
+ if (value === null || value === undefined) {
147
+ data = {};
148
+ }
149
+ else if (typeof value !== "object" || Array.isArray(value)) {
150
+ return failure("not-a-map", `frontmatter must be a YAML mapping, got ${Array.isArray(value) ? "a sequence" : typeof value}`);
151
+ }
152
+ else {
153
+ data = value;
154
+ }
155
+ let envelopeStart = -1;
156
+ for (let index = 1; index < close; index += 1) {
157
+ if (ENVELOPE_KEY_LINE.test(lines[index]?.text ?? "")) {
158
+ envelopeStart = index;
159
+ break;
160
+ }
161
+ }
162
+ // A second column-0 `approval:` would be a duplicate key, which the hardened
163
+ // parser already refused above, so the first match is the only match.
164
+ let envelopeEnd = envelopeStart;
165
+ if (envelopeStart !== -1) {
166
+ for (let index = envelopeStart + 1; index < close; index += 1) {
167
+ const line = lines[index]?.text ?? "";
168
+ // Blank lines neither extend the block nor end it: a run of blanks before
169
+ // the next top-level key belongs to that key, not to the envelope.
170
+ if (line.trim() === "")
171
+ continue;
172
+ // Anything at column 0 starts a new top-level construct (a key, or a
173
+ // comment introducing one). Indented lines are the envelope's own.
174
+ if (!/^[ \t]/u.test(line))
175
+ break;
176
+ envelopeEnd = index;
177
+ }
178
+ }
179
+ return { lines, close, data, envelopeStart, envelopeEnd };
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // Serialising an envelope
183
+ // ---------------------------------------------------------------------------
184
+ /**
185
+ * Render `{ approval: envelope }` as block YAML lines.
186
+ *
187
+ * `lineWidth: 0` disables folding, so a long summary stays on one line and the
188
+ * output does not depend on the length of neighbouring keys.
189
+ * `aliasDuplicateObjects: false` keeps the serialiser from emitting `&anchor` /
190
+ * `*alias` when the same object appears twice in the envelope: aliases are a
191
+ * thing the hardened parser bounds and distrusts on the way in, so this writer
192
+ * does not produce them on the way out.
193
+ */
194
+ function serialiseEnvelope(envelope, term) {
195
+ let rendered;
196
+ try {
197
+ rendered = stringify({ [ENVELOPE_KEY]: envelope }, { indent: 2, lineWidth: 0, aliasDuplicateObjects: false });
198
+ }
199
+ catch (cause) {
200
+ return failure("serialize-failed", `the envelope could not be serialised to YAML: ${detail(cause)}`);
201
+ }
202
+ const texts = rendered.split("\n");
203
+ // `stringify` terminates its last line; drop the empty tail it leaves behind.
204
+ if (texts[texts.length - 1] === "")
205
+ texts.pop();
206
+ if (texts.length === 0) {
207
+ return failure("serialize-failed", "the envelope serialised to nothing, which cannot be spliced into frontmatter");
208
+ }
209
+ return { ok: true, lines: texts.map((text) => ({ text, term })) };
210
+ }
211
+ // ---------------------------------------------------------------------------
212
+ // The state line
213
+ // ---------------------------------------------------------------------------
214
+ /**
215
+ * A direct child `state:` line: leading indent, the key, and an optional
216
+ * trailing comment. The value is captured so it can be replaced without
217
+ * disturbing the indent, the spacing around the colon, or the comment.
218
+ */
219
+ const STATE_LINE = /^([ \t]+state[ \t]*:[ \t]*)([^#]*?)([ \t]*#.*)?$/u;
220
+ /** The indent string of the envelope block's direct children, or null. */
221
+ function childIndent(lines, start, end) {
222
+ for (let index = start + 1; index <= end; index += 1) {
223
+ const text = lines[index]?.text ?? "";
224
+ if (text.trim() === "")
225
+ continue;
226
+ return /^[ \t]*/u.exec(text)?.[0] ?? "";
227
+ }
228
+ return null;
229
+ }
230
+ // ---------------------------------------------------------------------------
231
+ // rewriteTaskFile
232
+ // ---------------------------------------------------------------------------
233
+ /**
234
+ * Rewrite a task file's `approval:` subtree, preserving everything else byte for
235
+ * byte.
236
+ *
237
+ * Returns the new bytes, plus `changed` so a caller can skip a pointless write.
238
+ * On any refusal the input is untouched and nothing has been written anywhere:
239
+ * this function does not touch the filesystem at all.
240
+ *
241
+ * Insertion position (`set-envelope` on a file with no `approval:` key): the key
242
+ * is appended as the **last** top-level key, immediately before the closing
243
+ * delimiter. The corpus is the reason this needed a decision rather than a
244
+ * default. Backlog.md does not append its own new keys — in `milestone-assign/`
245
+ * the CLI put `milestone:` between `labels:` and `dependencies:`, because it
246
+ * rewrites frontmatter from its own model in its own canonical order — and at
247
+ * 1.49.3 it does not preserve unknown keys at all, so no position we pick
248
+ * survives its next edit. Given that no position is safe from the CLI, the
249
+ * choice is made on the diff: last keeps a multi-line block out of the middle of
250
+ * the board's short scalar keys, so inserting it moves no existing line, and it
251
+ * matches where the hand-written `envelope-edit-before` fixture put the envelope.
252
+ */
253
+ export function rewriteTaskFile(text, edit, options = {}) {
254
+ try {
255
+ return rewriteInner(text, edit, options);
256
+ }
257
+ catch (cause) {
258
+ // A rewrite must never throw into a caller mid-write. Anything unforeseen
259
+ // becomes a refusal, and a refusal leaves the file alone.
260
+ return failure("internal-error", `the rewrite failed unexpectedly and produced nothing: ${detail(cause)}`);
261
+ }
262
+ }
263
+ function rewriteInner(text, edit, options) {
264
+ const located = locate(text);
265
+ if ("ok" in located)
266
+ return located;
267
+ const { lines, close, data, envelopeStart, envelopeEnd } = located;
268
+ if (edit.kind === "none") {
269
+ // Nothing is reserialised, so there is nothing that could differ. The parse
270
+ // above still ran: a caller asking for a no-op rewrite is asking whether
271
+ // this file is one the writer could edit, and a corrupt one is not.
272
+ return { ok: true, bytes: text, changed: false };
273
+ }
274
+ const existing = Object.hasOwn(data, ENVELOPE_KEY) ? data[ENVELOPE_KEY] : undefined;
275
+ const hasEnvelopeKey = envelopeStart !== -1;
276
+ if (hasEnvelopeKey && !isPlainObject(existing)) {
277
+ return failure("envelope-not-a-map", `the \`${ENVELOPE_KEY}:\` key holds ${describe(existing)}, not a mapping. This writer will not overwrite a key whose contents it cannot recognise as an envelope (SPEC.md §6.1); a human resolves that, deliberately, before the runtime writes over it.`);
278
+ }
279
+ // What the envelope will be once the edit lands. Validated before any bytes
280
+ // are produced, so an invalid edit never reaches the splice.
281
+ let intended;
282
+ if (edit.kind === "set-envelope") {
283
+ intended = edit.envelope;
284
+ }
285
+ else {
286
+ if (!hasEnvelopeKey) {
287
+ return failure("no-envelope", `a state edit needs an existing envelope and this file has no \`${ENVELOPE_KEY}:\` key. SPEC.md §6 requires tolerating tasks with no envelope; such a task simply cannot request side-effecting execution, and its state is not a thing to set.`);
288
+ }
289
+ intended = { ...existing, state: edit.state };
290
+ }
291
+ // `set-state` rewrites one field of an envelope an earlier write boundary
292
+ // already accepted, so the fields it preserves validate at the read boundary:
293
+ // refusing the pre-APRV-121 monetary form here would leave a historical file
294
+ // in permanent, unrepairable drift (APRV-148). `set-envelope` authors the
295
+ // whole claim and stays strict.
296
+ const mode = edit.kind === "set-state" ? "historical" : "write";
297
+ const schemaCheck = validate(ENVELOPE_SCHEMA_ID, intended, options.schemaDir === undefined
298
+ ? { mode }
299
+ : { schemaDir: options.schemaDir, mode });
300
+ if (!schemaCheck.ok) {
301
+ return failure("invalid-envelope", `the envelope this edit would write does not validate against ${ENVELOPE_SCHEMA_ID}.schema.json: ${schemaCheck.errors
302
+ .map((error) => `${error.path === "" ? "<root>" : error.path} ${error.message}`)
303
+ .join("; ")}`);
304
+ }
305
+ const out = [...lines];
306
+ if (edit.kind === "set-state") {
307
+ const inline = inlineValueOf(lines[envelopeStart]?.text ?? "");
308
+ if (inline !== "") {
309
+ return failure("unsupported-shape", `the \`${ENVELOPE_KEY}:\` key carries its value inline (${JSON.stringify(inline)}) rather than as an indented block. A state-only edit rewrites exactly one line, which a flow-style envelope does not have; rewrite the whole subtree with a set-envelope edit instead.`);
310
+ }
311
+ const indent = childIndent(lines, envelopeStart, envelopeEnd);
312
+ if (indent === null) {
313
+ return failure("unsupported-shape", `the \`${ENVELOPE_KEY}:\` key has no indented block beneath it, so there is no \`state:\` line to edit`);
314
+ }
315
+ let stateIndex = -1;
316
+ let match = null;
317
+ for (let index = envelopeStart + 1; index <= envelopeEnd; index += 1) {
318
+ const line = lines[index]?.text ?? "";
319
+ const candidate = STATE_LINE.exec(line);
320
+ if (candidate === null)
321
+ continue;
322
+ if (candidate[1]?.startsWith(indent) !== true)
323
+ continue;
324
+ // A direct child, not a `state:` nested deeper inside the envelope.
325
+ if ((/^[ \t]*/u.exec(line)?.[0] ?? "") !== indent)
326
+ continue;
327
+ stateIndex = index;
328
+ match = candidate;
329
+ break;
330
+ }
331
+ if (stateIndex === -1 || match === null) {
332
+ return failure("unsupported-shape", `the envelope has no direct \`state:\` line in block style. The parsed envelope does carry a state (it validated), so the value is expressed in a form this line editor does not rewrite (flow mapping, anchor, or block scalar); use a set-envelope edit.`);
333
+ }
334
+ const value = (match[2] ?? "").trim();
335
+ if (value === "" || /^[|>&*]/u.test(value)) {
336
+ return failure("unsupported-shape", `the envelope's \`state:\` value is not a plain scalar on its own line (${JSON.stringify(value)}); use a set-envelope edit`);
337
+ }
338
+ const previous = lines[stateIndex];
339
+ // The prefix (indent, key, spacing) and any trailing comment are re-emitted
340
+ // verbatim: only the value's bytes change, and only on this line.
341
+ out[stateIndex] = { text: `${match[1] ?? ""}${edit.state}${match[3] ?? ""}`, term: previous.term };
342
+ }
343
+ else if (hasEnvelopeKey) {
344
+ const term = lines[envelopeStart].term;
345
+ const serialised = serialiseEnvelope(intended, term);
346
+ if (!serialised.ok)
347
+ return serialised;
348
+ out.splice(envelopeStart, envelopeEnd - envelopeStart + 1, ...serialised.lines);
349
+ }
350
+ else {
351
+ // Insert as the last top-level key, immediately before the closing `---`.
352
+ // The terminator comes from the last frontmatter line, which always exists
353
+ // and always has one (a line before the close is a line something follows).
354
+ const term = lines[close - 1].term;
355
+ const serialised = serialiseEnvelope(intended, term);
356
+ if (!serialised.ok)
357
+ return serialised;
358
+ out.splice(close, 0, ...serialised.lines);
359
+ }
360
+ const bytes = joinLines(out);
361
+ const verified = verify(text, bytes, close, lines, data, intended);
362
+ if (verified !== null)
363
+ return verified;
364
+ return { ok: true, bytes, changed: bytes !== text };
365
+ }
366
+ /** Text after the `approval:` colon, minus a trailing comment. `""` when block-style. */
367
+ function inlineValueOf(line) {
368
+ const colon = line.indexOf(":");
369
+ if (colon === -1)
370
+ return "";
371
+ const after = line.slice(colon + 1).trim();
372
+ if (after.startsWith("#"))
373
+ return "";
374
+ return after;
375
+ }
376
+ function isPlainObject(value) {
377
+ return typeof value === "object" && value !== null && !Array.isArray(value);
378
+ }
379
+ function describe(value) {
380
+ if (value === null)
381
+ return "null";
382
+ if (Array.isArray(value))
383
+ return "a sequence";
384
+ return `a ${typeof value}`;
385
+ }
386
+ /**
387
+ * Self-check on the produced bytes. Returns null when they are sound.
388
+ *
389
+ * Byte preservation is a property of the construction — untouched lines are
390
+ * copied, never rebuilt — but the construction rests on a line scan for the
391
+ * envelope's range, and a line scan is exactly the kind of thing that is subtly
392
+ * wrong on a shape nobody tried. So the output is read back through the ordinary
393
+ * reader and checked three ways: the markdown body must be the same trailing
394
+ * bytes, every non-`approval` key must survive with the same value *and the same
395
+ * position*, and the envelope must be the one the edit intended. A failure here
396
+ * is a bug in this module, and it fails closed: the caller gets a refusal rather
397
+ * than bytes nobody verified.
398
+ */
399
+ function verify(input, output, close, lines, before, intended) {
400
+ const suffix = joinLines(lines.slice(close));
401
+ if (!output.endsWith(suffix) || !input.endsWith(suffix)) {
402
+ return failure("round-trip-failed", "the rewritten file does not end in the same bytes as the original: the closing delimiter or the markdown body was disturbed");
403
+ }
404
+ const reread = parseFrontmatter(output);
405
+ if (!reread.ok) {
406
+ return failure("round-trip-failed", `the rewritten frontmatter no longer parses (${reread.code}: ${reread.message}); nothing was written`);
407
+ }
408
+ const keysBefore = Object.keys(before).filter((key) => key !== ENVELOPE_KEY);
409
+ const keysAfter = Object.keys(reread.data).filter((key) => key !== ENVELOPE_KEY);
410
+ if (!isDeepStrictEqual(keysBefore, keysAfter)) {
411
+ return failure("round-trip-failed", `the rewrite changed the frontmatter's other keys or their order (${keysBefore.join(", ")} became ${keysAfter.join(", ")}); nothing was written`);
412
+ }
413
+ for (const key of keysBefore) {
414
+ if (!isDeepStrictEqual(before[key], reread.data[key])) {
415
+ return failure("round-trip-failed", `the rewrite changed the value of the unrelated frontmatter key \`${key}\`; nothing was written`);
416
+ }
417
+ }
418
+ if (!isDeepStrictEqual(reread.data[ENVELOPE_KEY], intended)) {
419
+ return failure("round-trip-failed", `the rewritten \`${ENVELOPE_KEY}:\` subtree does not read back as the envelope the edit asked for; nothing was written`);
420
+ }
421
+ return null;
422
+ }
423
+ /** Distinguishes concurrent writers' temp files within one process. */
424
+ let tempCounter = 0;
425
+ /**
426
+ * Write task-file bytes atomically: temp file in the destination directory, then
427
+ * rename.
428
+ *
429
+ * The same idiom as `core/payload-store.ts` and `channels/render-queue.ts`, for
430
+ * the same reason: a reader — a board tool, an editor, the next agent — sees
431
+ * either the previous complete file or the new one, never a half-written task.
432
+ * The temp name is the only non-deterministic thing here and it never reaches
433
+ * the file's contents; it is removed on every failure path, so a failed write
434
+ * leaves no debris beside the task.
435
+ *
436
+ * Writes this one path and nothing else. It does not open the log.
437
+ */
438
+ export function writeTaskFileAtomic(path, bytes) {
439
+ const directory = dirname(path);
440
+ tempCounter += 1;
441
+ const temp = join(directory, `.${basename(path)}.tmp-${String(process.pid)}-${String(tempCounter)}`);
442
+ try {
443
+ mkdirSync(directory, { recursive: true });
444
+ const handle = openSync(temp, "wx");
445
+ try {
446
+ writeSync(handle, bytes, 0, "utf8");
447
+ }
448
+ finally {
449
+ closeSync(handle);
450
+ }
451
+ renameSync(temp, path);
452
+ }
453
+ catch (cause) {
454
+ try {
455
+ unlinkSync(temp);
456
+ }
457
+ catch {
458
+ // The temp file may never have been created; nothing to clean up.
459
+ }
460
+ return failure("write-failed", `task file ${path} could not be written: ${detail(cause)}. Nothing was written and the log was not touched.`);
461
+ }
462
+ return { ok: true, path, bytes: Buffer.byteLength(bytes, "utf8") };
463
+ }
464
+ //# sourceMappingURL=task-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-file.js","sourceRoot":"","sources":["../../../src/core/task-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Telegram configuration NAMES (SPEC.md §5.1 `channels.telegram.token_env` /
3
+ * `chat_id_env`, amended §5.2 by APRV-72).
4
+ *
5
+ * Constants and resolvers live in core, not in `channels/`, because more than
6
+ * one layer needs them: the Telegram CLI, doctor, and `approval env` (APRV-73)
7
+ * all ask "which variable holds the token?" and none of them may answer it
8
+ * differently. Placing them here also keeps `core/` free of any import from
9
+ * `channels/`, in the spirit of `tests/layering.test.ts`.
10
+ *
11
+ * NAMES only, in both directions: a policy that carried the token would be a
12
+ * bot credential in a file agents may read, which is exactly what §5.1's
13
+ * name-indirection exists to prevent. A policy that failed to load names
14
+ * nothing, so the default applies: a variable name is not a permission, and
15
+ * treating it as one would mean an unrelated policy typo locked the operator
16
+ * out of their own channel. This is `passphraseEnvFor`'s argument, verbatim,
17
+ * for the same reason: these are the same kind of key.
18
+ *
19
+ * Nothing here reads `process.env`. The CLI layer takes the name and looks
20
+ * the value up.
21
+ */
22
+ import type { CredentialSpec } from "./credential-spec.js";
23
+ import type { PolicyLoadResult } from "./policy-load.js";
24
+ /**
25
+ * The environment variable the bot token is read from when the policy declares
26
+ * no `channels.telegram.token_env`. A DEFAULT, not a fixed name: see
27
+ * {@link telegramTokenEnvFor}.
28
+ */
29
+ export declare const TELEGRAM_TOKEN_ENV = "APPROVAL_TG_TOKEN";
30
+ /**
31
+ * The environment variable the approver chat id is read from when the policy
32
+ * declares no `channels.telegram.chat_id_env`. Also a default.
33
+ */
34
+ export declare const TELEGRAM_CHAT_ENV = "APPROVAL_TG_CHAT";
35
+ /** The NAME of the variable this policy says the bot token lives in. */
36
+ export declare function telegramTokenEnvFor(load: PolicyLoadResult): string;
37
+ /** The NAME of the variable this policy says the approver chat id lives in. */
38
+ export declare function telegramChatEnvFor(load: PolicyLoadResult): string;
39
+ /**
40
+ * How a listener puts the pending set in front of the approver (APRV-216).
41
+ *
42
+ * `paced` sends one summary line and the oldest pending request, and the next
43
+ * one only once that request is decided, skipped, or passed over. `burst` is
44
+ * the pre-APRV-216 behaviour: every pending request this process has not sent
45
+ * yet, on every cycle, behind the APRV-196 re-delivery banner.
46
+ *
47
+ * Not a credential and not a name, so it sits beside the two that are for one
48
+ * reason: it is the third thing a caller asks the policy about the Telegram
49
+ * channel, and a second resolver module would be a second place for the
50
+ * fallback rule to drift.
51
+ */
52
+ export type TelegramDelivery = "paced" | "burst";
53
+ /**
54
+ * What an absent `channels.telegram.delivery` means.
55
+ *
56
+ * Paced, since APRV-216. The incident behind it is the one APRV-196 softened
57
+ * rather than closed: a restart with six pending policy edits put six prompts
58
+ * on a phone at once, and an approver reading a wall of near-identical
59
+ * questions is an approver who taps rather than reads. A default is a claim
60
+ * about which failure is worse, and the worse one here is inattentive approval
61
+ * rather than a slower queue: pacing withholds nothing, because every request
62
+ * stays pending in the log whether or not it has been shown, and `/queue`
63
+ * lists the whole set on demand.
64
+ */
65
+ export declare const TELEGRAM_DEFAULT_DELIVERY: TelegramDelivery;
66
+ /**
67
+ * The delivery mode this policy declares, or the default.
68
+ *
69
+ * Fail-soft in the same direction as the two name resolvers above: a policy
70
+ * that did not load declares nothing, and a delivery mode is not a permission,
71
+ * so an unrelated policy typo must not decide how requests are shown. The
72
+ * schema closes the enum, so a policy that LOADED can only carry one of the
73
+ * two; anything else reaching here (a hand-built load result, a key from a
74
+ * later version) falls back rather than being guessed at.
75
+ */
76
+ export declare function telegramDeliveryFor(load: PolicyLoadResult): TelegramDelivery;
77
+ /**
78
+ * The Telegram channel's credential manifest (APRV-79).
79
+ *
80
+ * The same shape an adapter declares (`core/credential-spec.ts`), for the same
81
+ * reason: `approval setup channel telegram` runs the shared conversation in
82
+ * `cli/setup-flow.ts`, and that conversation is DERIVED from a manifest. What
83
+ * differs from an adapter's is the destination and not the vocabulary — a
84
+ * channel's two values go to the OS keystore and `.approval/env`, because a
85
+ * channel holds no state and its token is what unlocks the machine, while an
86
+ * adapter's go to the vault (SPEC.md §4, §10.3, §10.4).
87
+ *
88
+ * The NAMES are the policy's, resolved through the two functions above, so the
89
+ * checklist an operator reads names the variables their own policy declares.
90
+ * A spec carries no value and no default on either entry: the token is the
91
+ * operator's and the chat id is discovered.
92
+ */
93
+ export declare function telegramCredentialSpecs(load: PolicyLoadResult): CredentialSpec[];