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,71 @@
1
+ /**
2
+ * `approval channel cli` (APRV-23) — the zero-config channel, driven over the
3
+ * plugin contract rather than around it.
4
+ *
5
+ * There is no second decision path in this codebase and this verb is not one.
6
+ * It builds the pending queue with `channels/tagging.ts`, hands each request to
7
+ * `channels/cli.ts` for rendering, and registers a decision handler whose entire
8
+ * body is a call to `recordChannelDecision` — which calls the human-only
9
+ * `decide()` in `core/gate.ts`. Every gate rule (human actor, TTL, budgets,
10
+ * attestation, idempotency, compare-and-append) applies here unchanged, because
11
+ * nothing here reimplements any of them.
12
+ *
13
+ * ## Interactive, and deliberately not by default
14
+ *
15
+ * A prompt that blocks is a prompt that hangs a pipeline. So the verb is
16
+ * interactive only when stdin is a TTY, or when `--interactive` says so
17
+ * explicitly; `--json` is never interactive. Anything else lists the queue and
18
+ * exits 0. That rule is in `--help` because an agent that shells out to this
19
+ * verb must be able to predict, before it spawns anything, whether the child
20
+ * will return.
21
+ *
22
+ * ## The reading aids (APRV-197)
23
+ *
24
+ * Two of them, and they are different in kind. The deterministic one is the
25
+ * `command_breakdown` line: derived by the classifier from the bound bytes,
26
+ * marked `[computed] (classifier)`, free, and always present for a command this
27
+ * runtime's own tokenizer can read. The other is the model gloss, which costs a
28
+ * subprocess and 10-15 seconds and is marked `(model, unverified)` on the line
29
+ * itself. Until APRV-197 only the Telegram listener attached the second, so an
30
+ * operator deciding here read the agent's raw summary and nothing else; the two
31
+ * surfaces now share `cli/gloss-attach.ts`. See {@link glossRunner} for when a
32
+ * model is asked at all — only under `--gloss`, and never on the `--json` path,
33
+ * which is not interactive and has nobody waiting at it.
34
+ *
35
+ * ## Identity is declared, not proved
36
+ *
37
+ * `--as human:<id>`, else `APPROVAL_HUMAN`. The trust boundary is the local
38
+ * machine: anyone who can set that variable and write to the log is inside it,
39
+ * so a decision recorded here proves that *someone with local control* answered,
40
+ * not *who*. Stated in `--help` rather than implied, because a reader who
41
+ * believes this authenticates anybody would be wrong in a way that matters. The
42
+ * identity is required only when a decision could be recorded — listing the
43
+ * queue asks nothing of anyone.
44
+ *
45
+ * ## Where the payload comes from
46
+ *
47
+ * v0.1's log records `payload_hash`, never the payload bytes, so the material to
48
+ * render comes from the payload store beside the log — `.approval/payloads/`,
49
+ * written by `approval request --payload` (APRV-28) — which is why this verb
50
+ * needs no flag at all in the ordinary case. `--payload-dir` remains as an
51
+ * override for an operator whose bytes live elsewhere: one JSON file per action
52
+ * key, consulted first. `channels/tagging.ts` hashes whatever it is given and refuses
53
+ * anything that does not match the recorded binding, so a wrong file is a
54
+ * refusal and never a rendering. A manual request with no material is *skipped*
55
+ * and reported — visibly, never silently, because a request missing from a queue
56
+ * is a request nobody will approve.
57
+ *
58
+ * ## The asynchronous exit code
59
+ *
60
+ * `main()` is synchronous by contract: `cli.js` assigns its return value to
61
+ * `process.exitCode`. The prompt loop is asynchronous (readline), so the
62
+ * interactive path returns {@link EXIT_OK} to `main` and assigns the real code
63
+ * to `process.exitCode` when the loop settles. Node exits with the last value
64
+ * assigned, so a refusal still exits 1. Every synchronous path — `--json`, a
65
+ * non-TTY listing, a usage error, an I/O fact — returns its code the ordinary
66
+ * way.
67
+ */
68
+ import type { Streams } from "./main.js";
69
+ export declare function commandChannelCli(argv: string[], streams: Streams, cwd: string): number;
70
+ /** `approval channel <subcommand>` — `cli`, `web` (APRV-25), `telegram`. */
71
+ export declare function commandChannel(argv: string[], streams: Streams, cwd: string): number | Promise<number>;
@@ -0,0 +1,438 @@
1
+ /**
2
+ * `approval channel cli` (APRV-23) — the zero-config channel, driven over the
3
+ * plugin contract rather than around it.
4
+ *
5
+ * There is no second decision path in this codebase and this verb is not one.
6
+ * It builds the pending queue with `channels/tagging.ts`, hands each request to
7
+ * `channels/cli.ts` for rendering, and registers a decision handler whose entire
8
+ * body is a call to `recordChannelDecision` — which calls the human-only
9
+ * `decide()` in `core/gate.ts`. Every gate rule (human actor, TTL, budgets,
10
+ * attestation, idempotency, compare-and-append) applies here unchanged, because
11
+ * nothing here reimplements any of them.
12
+ *
13
+ * ## Interactive, and deliberately not by default
14
+ *
15
+ * A prompt that blocks is a prompt that hangs a pipeline. So the verb is
16
+ * interactive only when stdin is a TTY, or when `--interactive` says so
17
+ * explicitly; `--json` is never interactive. Anything else lists the queue and
18
+ * exits 0. That rule is in `--help` because an agent that shells out to this
19
+ * verb must be able to predict, before it spawns anything, whether the child
20
+ * will return.
21
+ *
22
+ * ## The reading aids (APRV-197)
23
+ *
24
+ * Two of them, and they are different in kind. The deterministic one is the
25
+ * `command_breakdown` line: derived by the classifier from the bound bytes,
26
+ * marked `[computed] (classifier)`, free, and always present for a command this
27
+ * runtime's own tokenizer can read. The other is the model gloss, which costs a
28
+ * subprocess and 10-15 seconds and is marked `(model, unverified)` on the line
29
+ * itself. Until APRV-197 only the Telegram listener attached the second, so an
30
+ * operator deciding here read the agent's raw summary and nothing else; the two
31
+ * surfaces now share `cli/gloss-attach.ts`. See {@link glossRunner} for when a
32
+ * model is asked at all — only under `--gloss`, and never on the `--json` path,
33
+ * which is not interactive and has nobody waiting at it.
34
+ *
35
+ * ## Identity is declared, not proved
36
+ *
37
+ * `--as human:<id>`, else `APPROVAL_HUMAN`. The trust boundary is the local
38
+ * machine: anyone who can set that variable and write to the log is inside it,
39
+ * so a decision recorded here proves that *someone with local control* answered,
40
+ * not *who*. Stated in `--help` rather than implied, because a reader who
41
+ * believes this authenticates anybody would be wrong in a way that matters. The
42
+ * identity is required only when a decision could be recorded — listing the
43
+ * queue asks nothing of anyone.
44
+ *
45
+ * ## Where the payload comes from
46
+ *
47
+ * v0.1's log records `payload_hash`, never the payload bytes, so the material to
48
+ * render comes from the payload store beside the log — `.approval/payloads/`,
49
+ * written by `approval request --payload` (APRV-28) — which is why this verb
50
+ * needs no flag at all in the ordinary case. `--payload-dir` remains as an
51
+ * override for an operator whose bytes live elsewhere: one JSON file per action
52
+ * key, consulted first. `channels/tagging.ts` hashes whatever it is given and refuses
53
+ * anything that does not match the recorded binding, so a wrong file is a
54
+ * refusal and never a rendering. A manual request with no material is *skipped*
55
+ * and reported — visibly, never silently, because a request missing from a queue
56
+ * is a request nobody will approve.
57
+ *
58
+ * ## The asynchronous exit code
59
+ *
60
+ * `main()` is synchronous by contract: `cli.js` assigns its return value to
61
+ * `process.exitCode`. The prompt loop is asynchronous (readline), so the
62
+ * interactive path returns {@link EXIT_OK} to `main` and assigns the real code
63
+ * to `process.exitCode` when the loop settles. Node exits with the last value
64
+ * assigned, so a refusal still exits 1. Every synchronous path — `--json`, a
65
+ * non-TTY listing, a usage error, an I/O fact — returns its code the ordinary
66
+ * way.
67
+ */
68
+ import { readFileSync } from "node:fs";
69
+ import { isAbsolute, join, resolve as resolvePathSegments } from "node:path";
70
+ import { CliChannel } from "../channels/cli.js";
71
+ import { recordChannelDecision, refusedDecisionLine, } from "../channels/contract.js";
72
+ import { buildPendingQueue } from "../channels/tagging.js";
73
+ import { checkpointOfferFor, checkpointPromptLines, checkpointSignedLines, signCheckpointOffer, } from "./checkpoint-tap.js";
74
+ import { HUMAN_ACTOR_ENV, resolveHumanActor } from "../core/attest.js";
75
+ import { loadPolicy } from "../core/policy-load.js";
76
+ import { promptLayoutFor } from "../core/prompt-layout.js";
77
+ import { passphraseEnvFor } from "../core/vault.js";
78
+ import { boolFlag, parseFlags, stringFlag } from "./args.js";
79
+ import { GLOSS_TIMEOUT_MS } from "./gloss.js";
80
+ import { attachGloss, glossAbsenceLine } from "./gloss-attach.js";
81
+ import { glossRunnerFromOptions, parseGlossOptions, } from "./gloss-options.js";
82
+ import { EXIT_INTEGRITY, EXIT_IO, EXIT_OK, EXIT_TORN_TAIL, EXIT_USAGE, } from "./exit-codes.js";
83
+ import { CHANNEL_CLI_HELP, CHANNEL_HELP } from "./help.js";
84
+ import { DEFAULT_LOG_PATH, preflightLog, resolvePath } from "./paths.js";
85
+ import { commandTelegram } from "./channel-telegram.js";
86
+ import { commandWeb } from "./channel-web.js";
87
+ import { refusal as renderRefusal, style, tokenPanel, TOKEN_NOTICE } from "./style.js";
88
+ import { usageErrorText } from "./usage.js";
89
+ const FLAGS = {
90
+ "--log": "string",
91
+ "--policy-dir": "string",
92
+ "--policy": "string",
93
+ "--payload-dir": "string",
94
+ "--as": "string",
95
+ "--interactive": "boolean",
96
+ "--gloss": "boolean",
97
+ "--gloss-provider": "string",
98
+ "--gloss-model": "string",
99
+ "--json": "boolean",
100
+ "--help": "boolean",
101
+ "-h": "boolean",
102
+ };
103
+ function absolute(value, cwd) {
104
+ return isAbsolute(value) ? value : resolvePathSegments(cwd, value);
105
+ }
106
+ function usageError(streams, json, message, help) {
107
+ if (json)
108
+ streams.err(`${JSON.stringify({ error: { code: "usage", message } })}\n`);
109
+ else
110
+ streams.err(usageErrorText(message, help));
111
+ return EXIT_USAGE;
112
+ }
113
+ function ioError(streams, json, message) {
114
+ if (json)
115
+ streams.err(`${JSON.stringify({ error: { code: "io", message } })}\n`);
116
+ else
117
+ streams.err(`approval: ${message}\n`);
118
+ return EXIT_IO;
119
+ }
120
+ /**
121
+ * Payload material for one action key, from `--payload-dir`.
122
+ *
123
+ * Two filenames are accepted — the key verbatim and its percent-encoding — so a
124
+ * key containing a path separator cannot name a file outside the directory and
125
+ * an operator is not forced to guess an encoding. Unparseable or unreadable
126
+ * material yields `undefined`, which the tagger turns into a *visible* skip
127
+ * rather than a rendering; the parse failure itself is reported on stderr.
128
+ */
129
+ function payloadSource(dir, streams) {
130
+ return (actionKey) => {
131
+ for (const name of [`${encodeURIComponent(actionKey)}.json`, `${actionKey}.json`]) {
132
+ if (name.includes("/") || name.includes("\\"))
133
+ continue;
134
+ let raw;
135
+ try {
136
+ raw = readFileSync(join(dir, name), "utf8");
137
+ }
138
+ catch {
139
+ continue;
140
+ }
141
+ try {
142
+ return JSON.parse(raw);
143
+ }
144
+ catch (cause) {
145
+ streams.err(`approval: payload material for ${actionKey} (${join(dir, name)}) is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}; the request will be skipped rather than rendered from bytes nobody could bind\n`);
146
+ return undefined;
147
+ }
148
+ }
149
+ return undefined;
150
+ };
151
+ }
152
+ /** The queue refusal codes, mapped onto the frozen exit table. */
153
+ function refusalExit(code) {
154
+ switch (code) {
155
+ case "log-unreadable":
156
+ return EXIT_IO;
157
+ case "log-torn-tail":
158
+ return EXIT_TORN_TAIL;
159
+ default:
160
+ return EXIT_INTEGRITY;
161
+ }
162
+ }
163
+ /**
164
+ * One line of human-readable outcome per decision.
165
+ *
166
+ * A refusal since APRV-235 leads with the sentence the Telegram message edit
167
+ * shows, from the one helper both surfaces share, and keeps the gate's own
168
+ * message after it. The person at this terminal and the person holding the
169
+ * phone are usually the same person, and they were reading two different
170
+ * accounts of one refused tap. The gate's message stays because a terminal can
171
+ * afford the detail a chat bubble cannot, and because it is the text that names
172
+ * the hashes.
173
+ */
174
+ function describeOutcome(outcome) {
175
+ if (outcome.ok) {
176
+ return `${outcome.decision === "grant" ? "granted" : "rejected"} ${outcome.action_key} -> ${outcome.state} at seq ${outcome.record.seq}`;
177
+ }
178
+ return `refused: ${outcome.code}: ${refusedDecisionLine(outcome.code)}\n ${outcome.message}`;
179
+ }
180
+ export function commandChannelCli(argv, streams, cwd) {
181
+ const json = argv.includes("--json");
182
+ const parsed = parseFlags(argv, FLAGS);
183
+ if (!parsed.ok)
184
+ return usageError(streams, json, parsed.message, CHANNEL_CLI_HELP);
185
+ if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
186
+ streams.out(`${CHANNEL_CLI_HELP}\n`);
187
+ return EXIT_OK;
188
+ }
189
+ const extra = parsed.positionals[0];
190
+ if (extra !== undefined) {
191
+ return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, CHANNEL_CLI_HELP);
192
+ }
193
+ const flags = parsed.flags;
194
+ const selectedGloss = parseGlossOptions(flags, false);
195
+ if (!selectedGloss.ok) {
196
+ return usageError(streams, json, selectedGloss.message, CHANNEL_CLI_HELP);
197
+ }
198
+ const logPath = resolvePath(stringFlag(flags, "--log"), DEFAULT_LOG_PATH, cwd);
199
+ const policyFile = stringFlag(flags, "--policy");
200
+ const policyDir = stringFlag(flags, "--policy-dir");
201
+ const policy = policyFile !== null
202
+ ? { file: absolute(policyFile, cwd) }
203
+ : { dir: policyDir === null ? cwd : absolute(policyDir, cwd) };
204
+ const payloadDir = stringFlag(flags, "--payload-dir");
205
+ const tagOptions = {
206
+ policy,
207
+ ...(payloadDir === null
208
+ ? {}
209
+ : { payload: payloadSource(absolute(payloadDir, cwd), streams) }),
210
+ };
211
+ const check = preflightLog(logPath);
212
+ if (!check.ok)
213
+ return ioError(streams, json, check.message);
214
+ const queue = buildPendingQueue(logPath, tagOptions, new Date().toISOString());
215
+ if (!queue.ok) {
216
+ if (json) {
217
+ streams.err(`${JSON.stringify({ ok: false, error: { code: queue.code, message: queue.message } })}\n`);
218
+ }
219
+ else {
220
+ streams.err(`${renderRefusal(style({ json }), queue.code, queue.message)}\n`);
221
+ }
222
+ return refusalExit(queue.code);
223
+ }
224
+ // Never interactive with --json: a prompt has nowhere to go in a machine
225
+ // shape, and a caller that asked for one object must get one object.
226
+ const interactive = !json && (boolFlag(flags, "--interactive") || process.stdin.isTTY === true);
227
+ if (!interactive) {
228
+ return listOnly(queue.requests, queue.skipped, streams, json, promptLayoutFor(loadPolicy(policy), "cli"));
229
+ }
230
+ const asFlag = stringFlag(flags, "--as");
231
+ const actor = resolveHumanActor(asFlag === null ? {} : { actor: asFlag });
232
+ if (actor === null) {
233
+ // Checked BEFORE anything is rendered: asking a human to read a payload and
234
+ // then telling them their answer cannot be recorded wastes the one resource
235
+ // this whole system is spending.
236
+ return usageError(streams, json, asFlag === null
237
+ ? `no human identity: set ${HUMAN_ACTOR_ENV}=human:<id> or pass --as human:<id>; a decision collected here is recorded by the human-only gate and cannot be attributed to nobody`
238
+ : `--as expects a human identity matching human:<id>, got ${JSON.stringify(asFlag)}; approval decisions are human-only and an agent: or system: actor cannot record one`, CHANNEL_CLI_HELP);
239
+ }
240
+ // APRV-257. Resolved BEFORE the empty-queue exit, because an empty queue is
241
+ // exactly when a checkpoint is the only thing owed: the operator who opens
242
+ // this verb on a quiet gate is the one who should be asked, and a verb that
243
+ // had already returned could not ask them.
244
+ const tap = { logPath, policy, keyFile: null, vault: null };
245
+ const checkpoint = checkpointOfferFor(tap);
246
+ if (queue.requests.length === 0 && checkpoint === null) {
247
+ reportSkipped(queue.skipped, streams);
248
+ streams.out("queue: empty — no requests awaiting a decision\n");
249
+ return EXIT_OK;
250
+ }
251
+ // See the module header: the prompt loop is asynchronous, so its exit code is
252
+ // assigned to process.exitCode when it settles.
253
+ void interactiveLoop(queue.requests, logPath, policy, actor, streams, glossRunner(selectedGloss.options, policy, streams), checkpoint === null ? null : { tap, offer: checkpoint }).then((code) => {
254
+ process.exitCode = code;
255
+ }, (cause) => {
256
+ streams.err(`approval: the prompt loop failed: ${cause instanceof Error ? cause.message : String(cause)}\n`);
257
+ process.exitCode = EXIT_IO;
258
+ });
259
+ reportSkipped(queue.skipped, streams);
260
+ return EXIT_OK;
261
+ }
262
+ /**
263
+ * Whether this walk asks a model for a gloss, and with what (APRV-197).
264
+ *
265
+ * `--gloss`, and nothing else. The VERB is the only place a subprocess is
266
+ * wired, so every other caller of the prompt loop — the conformance harness,
267
+ * the test suite, any programmatic driver — gets `undefined` and spawns
268
+ * nothing. Three surfaces now carry the same flag under the same rule
269
+ * (`channel cli`, `channel telegram listen`, `up`).
270
+ *
271
+ * Opt-in rather than on-by-default because the cost is measured and it is not
272
+ * small: 10-15 seconds per request (see {@link GLOSS_TIMEOUT_MS}), spent while
273
+ * a human waits at a prompt. The reading aid that is always there is the
274
+ * deterministic one — `command_breakdown`, derived by the classifier from the
275
+ * bound bytes, free, and marked `[computed]`. A sentence from a model that no
276
+ * party vouches for is worth asking for, and worth asking for ON PURPOSE.
277
+ *
278
+ * The policy is read for one thing only (APRV-207): the NAME of its passphrase
279
+ * variable, so the scrub that starves the subprocess removes a renamed one too.
280
+ */
281
+ function glossRunner(selection, policy, streams) {
282
+ if (!selection.enabled)
283
+ return undefined;
284
+ return glossRunnerFromOptions(selection, {
285
+ passphraseEnv: passphraseEnvFor(loadPolicy(policy)),
286
+ diagnostic: (reason) => streams.err(`approval: Codex gloss unavailable (${reason}); continuing without it\n`),
287
+ });
288
+ }
289
+ function reportSkipped(skipped, streams) {
290
+ for (const entry of skipped) {
291
+ // APRV-102: the shared refusal shape. The action key leads the message
292
+ // because a skip is ABOUT one request, and the reader is scanning for which.
293
+ streams.err(`${renderRefusal(style(), entry.code, `skipped ${entry.action_key}: ${entry.message}`)}\n`);
294
+ }
295
+ }
296
+ /**
297
+ * The non-interactive answer: the queue, and then nothing. It must not read
298
+ * stdin at all — a listing that blocked on a closed pipe would hang every CI
299
+ * step that ever called it.
300
+ */
301
+ function listOnly(requests, skipped, streams, json, layout) {
302
+ if (json) {
303
+ // FROZEN SHAPE: the tagged queue, verbatim. Every field keeps its
304
+ // kind/value/source|author markers, so a machine reader sees the same
305
+ // computed/claimed split a human does.
306
+ streams.out(`${JSON.stringify({
307
+ ok: true,
308
+ channel: "cli",
309
+ interactive: false,
310
+ pending: requests,
311
+ skipped,
312
+ })}\n`);
313
+ return EXIT_OK;
314
+ }
315
+ reportSkipped(skipped, streams);
316
+ if (requests.length === 0) {
317
+ streams.out("queue: empty — no requests awaiting a decision\n");
318
+ return EXIT_OK;
319
+ }
320
+ const channel = new CliChannel({ output: { write: (text) => streams.out(text) }, layout });
321
+ channel.notify({ requests });
322
+ streams.out(`\n${requests.length} request(s) awaiting a decision. stdin is not a terminal, so nothing was asked and nothing was recorded; re-run with a terminal (or --interactive) to decide.\n`);
323
+ return EXIT_OK;
324
+ }
325
+ /**
326
+ * Walk the queue: notify, prompt, record, report.
327
+ *
328
+ * The grant token is printed exactly once, here, by the runtime — never by the
329
+ * channel, which is handed a {@link DecisionOutcome} that does not carry it.
330
+ */
331
+ async function interactiveLoop(requests, logPath, policy, actor, streams, gloss,
332
+ /**
333
+ * The checkpoint this log is owed, when one is (APRV-257). Asked FIRST, and
334
+ * once: it is a question about the whole log rather than about any request in
335
+ * the queue, so leaving it until the end would be asking it of whoever
336
+ * happened to still be at the terminal.
337
+ */
338
+ checkpoint) {
339
+ // APRV-218: which rows this walk shows, from `channels.cli.prompt`. Resolved
340
+ // HERE, at the verb, because the channel neither reads a policy file nor holds
341
+ // an opinion about what an operator should see. A policy that did not load
342
+ // yields the default layout and nothing else: a layout is not a permission.
343
+ const channel = new CliChannel({
344
+ output: { write: (text) => streams.out(text) },
345
+ layout: promptLayoutFor(loadPolicy(policy), "cli"),
346
+ });
347
+ let token;
348
+ channel.onDecision((decision) => {
349
+ const result = recordChannelDecision(logPath, decision, { actor, channel: channel.name }, { policy });
350
+ token = result.token;
351
+ return result.outcome;
352
+ });
353
+ let refused = false;
354
+ const tally = { asked: 0, absent: 0 };
355
+ try {
356
+ // APRV-257, first and once. Declining costs nothing and refuses nothing, so
357
+ // a `false` here is not an outcome the exit code reads; a signature that
358
+ // was ATTEMPTED and failed is reported and does set `refused`, because the
359
+ // operator asked for a record and did not get one.
360
+ if (checkpoint !== null) {
361
+ const sign = await channel.collectCheckpoint(checkpointPromptLines(checkpoint.offer));
362
+ if (sign === true) {
363
+ const result = signCheckpointOffer(checkpoint.tap, checkpoint.offer.head, actor, channel.name, process.cwd());
364
+ for (const line of checkpointSignedLines(result))
365
+ streams.out(`${line}\n`);
366
+ if (!result.ok)
367
+ refused = true;
368
+ }
369
+ }
370
+ for (const original of requests) {
371
+ // APRV-197. Attached per request, immediately before it is rendered, and
372
+ // by the same function the Telegram listener uses. Per request rather
373
+ // than in one pass up front because the wait is 10-15s each: a human who
374
+ // walks away after the first decision should not have paid for glosses of
375
+ // requests they never read, and one who stays sees the pause land next to
376
+ // the prompt it belongs to.
377
+ let request = original;
378
+ if (gloss !== undefined) {
379
+ streams.err(`approval: asking a model to describe ${original.action_key.value} (up to ${GLOSS_TIMEOUT_MS}ms; drop --gloss to skip it)\n`);
380
+ const attached = attachGloss(original, gloss);
381
+ if (attached.outcome !== "opaque")
382
+ tally.asked += 1;
383
+ if (attached.outcome === "absent")
384
+ tally.absent += 1;
385
+ request = attached.request;
386
+ }
387
+ const deliveryId = channel.notify(request);
388
+ token = undefined;
389
+ const collected = await channel.collectDecision(request.action_key.value, deliveryId);
390
+ if (collected.kind === "aborted")
391
+ break;
392
+ if (collected.kind === "skipped")
393
+ continue;
394
+ streams.out(`${describeOutcome(collected.outcome)}\n`);
395
+ if (!collected.outcome.ok)
396
+ refused = true;
397
+ else if (token !== undefined) {
398
+ // APRV-102: the rule-boxed panel of APRV-91's brief, from the one helper
399
+ // every token surface shares. This terminal is the only place the raw
400
+ // value will ever exist.
401
+ streams.out(`${tokenPanel(style(), request.action_key.value, token, TOKEN_NOTICE)}\n`);
402
+ }
403
+ }
404
+ }
405
+ finally {
406
+ channel.close();
407
+ }
408
+ // APRV-197. Chronic silence becomes a visible line: an operator who asked for
409
+ // glosses and read none now learns that a model was asked and did not answer,
410
+ // instead of concluding the feature was never built (which is exactly what
411
+ // happened under APRV-144's ceiling).
412
+ if (tally.absent > 0) {
413
+ streams.err(glossAbsenceLine("channel cli", tally.absent, tally.asked, GLOSS_TIMEOUT_MS));
414
+ }
415
+ return refused ? EXIT_INTEGRITY : EXIT_OK;
416
+ }
417
+ /** `approval channel <subcommand>` — `cli`, `web` (APRV-25), `telegram`. */
418
+ export function commandChannel(argv, streams, cwd) {
419
+ const sub = argv[0];
420
+ const rest = argv.slice(1);
421
+ const json = argv.includes("--json");
422
+ if (sub === undefined) {
423
+ return usageError(streams, json, "missing subcommand for `approval channel`", CHANNEL_HELP);
424
+ }
425
+ if (sub === "--help" || sub === "-h" || sub === "help") {
426
+ streams.out(`${CHANNEL_HELP}\n`);
427
+ return EXIT_OK;
428
+ }
429
+ if (sub === "cli")
430
+ return commandChannelCli(rest, streams, cwd);
431
+ // APRV-25: the local queue page. Long-lived, like `telegram listen`.
432
+ if (sub === "web")
433
+ return commandWeb(rest, streams, cwd);
434
+ if (sub === "telegram")
435
+ return commandTelegram(rest, streams, cwd);
436
+ return usageError(streams, json, `unknown subcommand ${JSON.stringify(sub)} for \`approval channel\``, CHANNEL_HELP);
437
+ }
438
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/cli/channel.ts"],"names":[],"mappings":"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"}