approval-md 0.0.1 → 0.1.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 (522) hide show
  1. package/LICENSE +176 -0
  2. package/NOTICE +5 -0
  3. package/README.md +909 -4
  4. package/SPEC.md +445 -32
  5. package/cli.js +29 -3
  6. package/dist/src/adapters/agentmail.js +1200 -0
  7. package/dist/src/adapters/agentmail.js.map +1 -0
  8. package/dist/src/adapters/conformance.js +461 -0
  9. package/dist/src/adapters/conformance.js.map +1 -0
  10. package/dist/src/adapters/contract.js +941 -0
  11. package/dist/src/adapters/contract.js.map +1 -0
  12. package/dist/src/adapters/email.js +749 -0
  13. package/dist/src/adapters/email.js.map +1 -0
  14. package/dist/src/adapters/env-passphrase.js +132 -0
  15. package/dist/src/adapters/env-passphrase.js.map +1 -0
  16. package/dist/src/adapters/registry.js +76 -0
  17. package/dist/src/adapters/registry.js.map +1 -0
  18. package/dist/src/adapters/smtp.js +499 -0
  19. package/dist/src/adapters/smtp.js.map +1 -0
  20. package/dist/src/adapters/vault-provider.js +161 -0
  21. package/dist/src/adapters/vault-provider.js.map +1 -0
  22. package/dist/src/channels/batch.js +121 -0
  23. package/dist/src/channels/batch.js.map +1 -0
  24. package/dist/src/channels/cli.js +468 -0
  25. package/dist/src/channels/cli.js.map +1 -0
  26. package/dist/src/channels/conformance.js +445 -0
  27. package/dist/src/channels/conformance.js.map +1 -0
  28. package/dist/src/channels/contract.js +494 -0
  29. package/dist/src/channels/contract.js.map +1 -0
  30. package/dist/src/channels/payload-view.js +43 -0
  31. package/dist/src/channels/payload-view.js.map +1 -0
  32. package/dist/src/channels/render-queue.js +564 -0
  33. package/dist/src/channels/render-queue.js.map +1 -0
  34. package/dist/src/channels/tagging.js +723 -0
  35. package/dist/src/channels/tagging.js.map +1 -0
  36. package/dist/src/channels/telegram.js +3190 -0
  37. package/dist/src/channels/telegram.js.map +1 -0
  38. package/dist/src/channels/web.js +903 -0
  39. package/dist/src/channels/web.js.map +1 -0
  40. package/dist/src/cli/adapter.js +278 -0
  41. package/dist/src/cli/adapter.js.map +1 -0
  42. package/dist/src/cli/amend.js +2171 -0
  43. package/dist/src/cli/amend.js.map +1 -0
  44. package/dist/src/cli/args.js +86 -0
  45. package/dist/src/cli/args.js.map +1 -0
  46. package/dist/src/cli/attest.js +307 -0
  47. package/dist/src/cli/attest.js.map +1 -0
  48. package/dist/src/cli/audit-card.js +201 -0
  49. package/dist/src/cli/audit-card.js.map +1 -0
  50. package/dist/src/cli/audit.js +460 -0
  51. package/dist/src/cli/audit.js.map +1 -0
  52. package/dist/src/cli/channel-telegram.js +2063 -0
  53. package/dist/src/cli/channel-telegram.js.map +1 -0
  54. package/dist/src/cli/channel-web.js +357 -0
  55. package/dist/src/cli/channel-web.js.map +1 -0
  56. package/dist/src/cli/channel.js +438 -0
  57. package/dist/src/cli/channel.js.map +1 -0
  58. package/dist/src/cli/checkpoint-tap.js +238 -0
  59. package/dist/src/cli/checkpoint-tap.js.map +1 -0
  60. package/dist/src/cli/coverage.js +343 -0
  61. package/dist/src/cli/coverage.js.map +1 -0
  62. package/dist/src/cli/daemon.js +631 -0
  63. package/dist/src/cli/daemon.js.map +1 -0
  64. package/dist/src/cli/doctor.js +2648 -0
  65. package/dist/src/cli/doctor.js.map +1 -0
  66. package/dist/src/cli/env.js +302 -0
  67. package/dist/src/cli/env.js.map +1 -0
  68. package/dist/src/cli/execute.js +1682 -0
  69. package/dist/src/cli/execute.js.map +1 -0
  70. package/dist/src/cli/exit-codes.js +82 -0
  71. package/dist/src/cli/exit-codes.js.map +1 -0
  72. package/dist/src/cli/feedback.js +205 -0
  73. package/dist/src/cli/feedback.js.map +1 -0
  74. package/dist/src/cli/gate-window.js +294 -0
  75. package/dist/src/cli/gate-window.js.map +1 -0
  76. package/dist/src/cli/gate.js +557 -0
  77. package/dist/src/cli/gate.js.map +1 -0
  78. package/dist/src/cli/git-scope.js +295 -0
  79. package/dist/src/cli/git-scope.js.map +1 -0
  80. package/dist/src/cli/gloss-attach.js +107 -0
  81. package/dist/src/cli/gloss-attach.js.map +1 -0
  82. package/dist/src/cli/gloss-codex-child.js +149 -0
  83. package/dist/src/cli/gloss-codex-child.js.map +1 -0
  84. package/dist/src/cli/gloss-codex.js +255 -0
  85. package/dist/src/cli/gloss-codex.js.map +1 -0
  86. package/dist/src/cli/gloss-options.js +79 -0
  87. package/dist/src/cli/gloss-options.js.map +1 -0
  88. package/dist/src/cli/gloss.js +362 -0
  89. package/dist/src/cli/gloss.js.map +1 -0
  90. package/dist/src/cli/help.js +2217 -0
  91. package/dist/src/cli/help.js.map +1 -0
  92. package/dist/src/cli/hook.js +2743 -0
  93. package/dist/src/cli/hook.js.map +1 -0
  94. package/dist/src/cli/import.js +175 -0
  95. package/dist/src/cli/import.js.map +1 -0
  96. package/dist/src/cli/init.js +336 -0
  97. package/dist/src/cli/init.js.map +1 -0
  98. package/dist/src/cli/instructions.js +262 -0
  99. package/dist/src/cli/instructions.js.map +1 -0
  100. package/dist/src/cli/journal.js +238 -0
  101. package/dist/src/cli/journal.js.map +1 -0
  102. package/dist/src/cli/log-advance.js +749 -0
  103. package/dist/src/cli/log-advance.js.map +1 -0
  104. package/dist/src/cli/log-anchor.js +387 -0
  105. package/dist/src/cli/log-anchor.js.map +1 -0
  106. package/dist/src/cli/log-checkpoint.js +128 -0
  107. package/dist/src/cli/log-checkpoint.js.map +1 -0
  108. package/dist/src/cli/log-sync.js +849 -0
  109. package/dist/src/cli/log-sync.js.map +1 -0
  110. package/dist/src/cli/log-verbs.js +354 -0
  111. package/dist/src/cli/log-verbs.js.map +1 -0
  112. package/dist/src/cli/long-help.js +148 -0
  113. package/dist/src/cli/long-help.js.map +1 -0
  114. package/dist/src/cli/main.js +1056 -0
  115. package/dist/src/cli/main.js.map +1 -0
  116. package/dist/src/cli/mcp.js +306 -0
  117. package/dist/src/cli/mcp.js.map +1 -0
  118. package/dist/src/cli/paths.js +79 -0
  119. package/dist/src/cli/paths.js.map +1 -0
  120. package/dist/src/cli/payload.js +253 -0
  121. package/dist/src/cli/payload.js.map +1 -0
  122. package/dist/src/cli/policy.js +229 -0
  123. package/dist/src/cli/policy.js.map +1 -0
  124. package/dist/src/cli/preflight.js +888 -0
  125. package/dist/src/cli/preflight.js.map +1 -0
  126. package/dist/src/cli/progress.js +112 -0
  127. package/dist/src/cli/progress.js.map +1 -0
  128. package/dist/src/cli/prompt.js +312 -0
  129. package/dist/src/cli/prompt.js.map +1 -0
  130. package/dist/src/cli/records.js +66 -0
  131. package/dist/src/cli/records.js.map +1 -0
  132. package/dist/src/cli/render.js +132 -0
  133. package/dist/src/cli/render.js.map +1 -0
  134. package/dist/src/cli/sandbox.js +150 -0
  135. package/dist/src/cli/sandbox.js.map +1 -0
  136. package/dist/src/cli/scaffold.js +137 -0
  137. package/dist/src/cli/scaffold.js.map +1 -0
  138. package/dist/src/cli/setup-adapter.js +475 -0
  139. package/dist/src/cli/setup-adapter.js.map +1 -0
  140. package/dist/src/cli/setup-channel.js +635 -0
  141. package/dist/src/cli/setup-channel.js.map +1 -0
  142. package/dist/src/cli/setup-checkpoint.js +196 -0
  143. package/dist/src/cli/setup-checkpoint.js.map +1 -0
  144. package/dist/src/cli/setup-common.js +376 -0
  145. package/dist/src/cli/setup-common.js.map +1 -0
  146. package/dist/src/cli/setup-flow.js +476 -0
  147. package/dist/src/cli/setup-flow.js.map +1 -0
  148. package/dist/src/cli/setup-service.js +308 -0
  149. package/dist/src/cli/setup-service.js.map +1 -0
  150. package/dist/src/cli/setup.js +473 -0
  151. package/dist/src/cli/setup.js.map +1 -0
  152. package/dist/src/cli/style.js +469 -0
  153. package/dist/src/cli/style.js.map +1 -0
  154. package/dist/src/cli/token.js +274 -0
  155. package/dist/src/cli/token.js.map +1 -0
  156. package/dist/src/cli/up.js +847 -0
  157. package/dist/src/cli/up.js.map +1 -0
  158. package/dist/src/cli/usage.js +91 -0
  159. package/dist/src/cli/usage.js.map +1 -0
  160. package/dist/src/cli/values.js +189 -0
  161. package/dist/src/cli/values.js.map +1 -0
  162. package/dist/src/cli/vault.js +362 -0
  163. package/dist/src/cli/vault.js.map +1 -0
  164. package/dist/src/cli/verb-registry.js +2173 -0
  165. package/dist/src/cli/verb-registry.js.map +1 -0
  166. package/dist/src/cli/wordmark.js +52 -0
  167. package/dist/src/cli/wordmark.js.map +1 -0
  168. package/dist/src/core/advance-cycle.js +200 -0
  169. package/dist/src/core/advance-cycle.js.map +1 -0
  170. package/dist/src/core/agents-md.js +747 -0
  171. package/dist/src/core/agents-md.js.map +1 -0
  172. package/dist/src/core/attest.js +577 -0
  173. package/dist/src/core/attest.js.map +1 -0
  174. package/dist/src/core/audit.js +882 -0
  175. package/dist/src/core/audit.js.map +1 -0
  176. package/dist/src/core/budgets.js +449 -0
  177. package/dist/src/core/budgets.js.map +1 -0
  178. package/dist/src/core/checkpoint.js +738 -0
  179. package/dist/src/core/checkpoint.js.map +1 -0
  180. package/dist/src/core/child-env.js +86 -0
  181. package/dist/src/core/child-env.js.map +1 -0
  182. package/dist/src/core/clock.js +43 -0
  183. package/dist/src/core/clock.js.map +1 -0
  184. package/dist/src/core/command-class.js +2321 -0
  185. package/dist/src/core/command-class.js.map +1 -0
  186. package/dist/src/core/coverage-sources/adapter.js +71 -0
  187. package/dist/src/core/coverage-sources/adapter.js.map +1 -0
  188. package/dist/src/core/coverage-sources/gh.js +136 -0
  189. package/dist/src/core/coverage-sources/gh.js.map +1 -0
  190. package/dist/src/core/coverage-sources/git.js +269 -0
  191. package/dist/src/core/coverage-sources/git.js.map +1 -0
  192. package/dist/src/core/coverage.js +337 -0
  193. package/dist/src/core/coverage.js.map +1 -0
  194. package/dist/src/core/credential-spec.js +23 -0
  195. package/dist/src/core/credential-spec.js.map +1 -0
  196. package/dist/src/core/dark-session.js +714 -0
  197. package/dist/src/core/dark-session.js.map +1 -0
  198. package/dist/src/core/decision-refusal.js +265 -0
  199. package/dist/src/core/decision-refusal.js.map +1 -0
  200. package/dist/src/core/env-file.js +837 -0
  201. package/dist/src/core/env-file.js.map +1 -0
  202. package/dist/src/core/execute.js +1233 -0
  203. package/dist/src/core/execute.js.map +1 -0
  204. package/dist/src/core/frontmatter.js +100 -0
  205. package/dist/src/core/frontmatter.js.map +1 -0
  206. package/dist/src/core/gate-window.js +506 -0
  207. package/dist/src/core/gate-window.js.map +1 -0
  208. package/dist/src/core/gate.js +2947 -0
  209. package/dist/src/core/gate.js.map +1 -0
  210. package/dist/src/core/git-run.js +93 -0
  211. package/dist/src/core/git-run.js.map +1 -0
  212. package/dist/src/core/harness-version.js +210 -0
  213. package/dist/src/core/harness-version.js.map +1 -0
  214. package/dist/src/core/harness-wait.js +58 -0
  215. package/dist/src/core/harness-wait.js.map +1 -0
  216. package/dist/src/core/head-retry.js +121 -0
  217. package/dist/src/core/head-retry.js.map +1 -0
  218. package/dist/src/core/instance.js +319 -0
  219. package/dist/src/core/instance.js.map +1 -0
  220. package/dist/src/core/intake-limits.js +350 -0
  221. package/dist/src/core/intake-limits.js.map +1 -0
  222. package/dist/src/core/jcs.js +132 -0
  223. package/dist/src/core/jcs.js.map +1 -0
  224. package/dist/src/core/journal.js +200 -0
  225. package/dist/src/core/journal.js.map +1 -0
  226. package/dist/src/core/live-draw.js +703 -0
  227. package/dist/src/core/live-draw.js.map +1 -0
  228. package/dist/src/core/log-reconcile.js +136 -0
  229. package/dist/src/core/log-reconcile.js.map +1 -0
  230. package/dist/src/core/log.js +546 -0
  231. package/dist/src/core/log.js.map +1 -0
  232. package/dist/src/core/loop.js +476 -0
  233. package/dist/src/core/loop.js.map +1 -0
  234. package/dist/src/core/md-fence.js +74 -0
  235. package/dist/src/core/md-fence.js.map +1 -0
  236. package/dist/src/core/money.js +195 -0
  237. package/dist/src/core/money.js.map +1 -0
  238. package/dist/src/core/payload-census.js +146 -0
  239. package/dist/src/core/payload-census.js.map +1 -0
  240. package/dist/src/core/payload-store.js +340 -0
  241. package/dist/src/core/payload-store.js.map +1 -0
  242. package/dist/src/core/payload.js +80 -0
  243. package/dist/src/core/payload.js.map +1 -0
  244. package/dist/src/core/policy-diff.js +565 -0
  245. package/dist/src/core/policy-diff.js.map +1 -0
  246. package/dist/src/core/policy-expectations.js +394 -0
  247. package/dist/src/core/policy-expectations.js.map +1 -0
  248. package/dist/src/core/policy-explain.js +230 -0
  249. package/dist/src/core/policy-explain.js.map +1 -0
  250. package/dist/src/core/policy-load.js +524 -0
  251. package/dist/src/core/policy-load.js.map +1 -0
  252. package/dist/src/core/policy-match.js +467 -0
  253. package/dist/src/core/policy-match.js.map +1 -0
  254. package/dist/src/core/policy-proposal.js +458 -0
  255. package/dist/src/core/policy-proposal.js.map +1 -0
  256. package/dist/src/core/prompt-layout.js +422 -0
  257. package/dist/src/core/prompt-layout.js.map +1 -0
  258. package/dist/src/core/protected-path-guard.js +1087 -0
  259. package/dist/src/core/protected-path-guard.js.map +1 -0
  260. package/dist/src/core/registration.js +39 -0
  261. package/dist/src/core/registration.js.map +1 -0
  262. package/dist/src/core/reindex.js +336 -0
  263. package/dist/src/core/reindex.js.map +1 -0
  264. package/dist/src/core/sampler.js +388 -0
  265. package/dist/src/core/sampler.js.map +1 -0
  266. package/dist/src/core/sandbox.js +424 -0
  267. package/dist/src/core/sandbox.js.map +1 -0
  268. package/dist/src/core/seal.js +290 -0
  269. package/dist/src/core/seal.js.map +1 -0
  270. package/dist/src/core/state.js +1009 -0
  271. package/dist/src/core/state.js.map +1 -0
  272. package/dist/src/core/task-file.js +464 -0
  273. package/dist/src/core/task-file.js.map +1 -0
  274. package/dist/src/core/telegram-config.js +114 -0
  275. package/dist/src/core/telegram-config.js.map +1 -0
  276. package/dist/src/core/token.js +578 -0
  277. package/dist/src/core/token.js.map +1 -0
  278. package/dist/src/core/validate.js +0 -0
  279. package/dist/src/core/validate.js.map +1 -0
  280. package/dist/src/core/values.js +153 -0
  281. package/dist/src/core/values.js.map +1 -0
  282. package/dist/src/core/vault.js +612 -0
  283. package/dist/src/core/vault.js.map +1 -0
  284. package/dist/src/core/verified-snapshot.js +506 -0
  285. package/dist/src/core/verified-snapshot.js.map +1 -0
  286. package/dist/src/core/verify.js +549 -0
  287. package/dist/src/core/verify.js.map +1 -0
  288. package/dist/src/core/version.js +9 -0
  289. package/dist/src/core/version.js.map +1 -0
  290. package/dist/src/core/wysiwys.js +728 -0
  291. package/dist/src/core/wysiwys.js.map +1 -0
  292. package/dist/src/daemon/advance-child.js +78 -0
  293. package/dist/src/daemon/advance-child.js.map +1 -0
  294. package/dist/src/daemon/advance.js +849 -0
  295. package/dist/src/daemon/advance.js.map +1 -0
  296. package/dist/src/daemon/audit.js +90 -0
  297. package/dist/src/daemon/audit.js.map +1 -0
  298. package/dist/src/daemon/daemon.js +1988 -0
  299. package/dist/src/daemon/daemon.js.map +1 -0
  300. package/dist/src/daemon/dark-session.js +119 -0
  301. package/dist/src/daemon/dark-session.js.map +1 -0
  302. package/dist/src/daemon/draw-child.js +132 -0
  303. package/dist/src/daemon/draw-child.js.map +1 -0
  304. package/dist/src/daemon/draw.js +458 -0
  305. package/dist/src/daemon/draw.js.map +1 -0
  306. package/dist/src/daemon/git-evidence.js +345 -0
  307. package/dist/src/daemon/git-evidence.js.map +1 -0
  308. package/dist/src/daemon/projection.js +233 -0
  309. package/dist/src/daemon/projection.js.map +1 -0
  310. package/dist/src/daemon/prune.js +376 -0
  311. package/dist/src/daemon/prune.js.map +1 -0
  312. package/dist/src/mcp/http.js +343 -0
  313. package/dist/src/mcp/http.js.map +1 -0
  314. package/dist/src/mcp/server.js +594 -0
  315. package/dist/src/mcp/server.js.map +1 -0
  316. package/docs/cli-reference.md +5363 -0
  317. package/package.json +43 -4
  318. package/schema/.gitkeep +0 -0
  319. package/schema/LICENSE +117 -0
  320. package/schema/envelope.schema.json +137 -0
  321. package/schema/event.schema.json +1810 -0
  322. package/schema/fixtures/envelope/invalid/action-missing-idempotency-key.json +15 -0
  323. package/schema/fixtures/envelope/invalid/action-unknown-class-format.json +14 -0
  324. package/schema/fixtures/envelope/invalid/confidence-out-of-range.json +11 -0
  325. package/schema/fixtures/envelope/invalid/est-cost-bare-number.json +14 -0
  326. package/schema/fixtures/envelope/invalid/est-cost-noncanonical-string.json +14 -0
  327. package/schema/fixtures/envelope/invalid/malformed-assignee.json +10 -0
  328. package/schema/fixtures/envelope/invalid/malformed-created-by.json +7 -0
  329. package/schema/fixtures/envelope/invalid/malformed-max-latency.json +11 -0
  330. package/schema/fixtures/envelope/invalid/malformed-payload-hash.json +14 -0
  331. package/schema/fixtures/envelope/invalid/max-cost-bare-number.json +11 -0
  332. package/schema/fixtures/envelope/invalid/missing-origin.json +3 -0
  333. package/schema/fixtures/envelope/invalid/negative-est-cost.json +14 -0
  334. package/schema/fixtures/envelope/invalid/unknown-state.json +7 -0
  335. package/schema/fixtures/envelope/invalid/unknown-top-level-field.json +8 -0
  336. package/schema/fixtures/envelope/valid/action-payload-hash.json +17 -0
  337. package/schema/fixtures/envelope/valid/actions-without-budget.json +18 -0
  338. package/schema/fixtures/envelope/valid/canonical.json +25 -0
  339. package/schema/fixtures/envelope/valid/minimal.json +7 -0
  340. package/schema/fixtures/envelope/valid/multi-action-executed.json +30 -0
  341. package/schema/fixtures/envelope/valid/record-write-stage.json +22 -0
  342. package/schema/fixtures/event/invalid/approval-granted-agent-actor.json +15 -0
  343. package/schema/fixtures/event/invalid/approval-granted-empty-batch-delivery-id.json +17 -0
  344. package/schema/fixtures/event/invalid/approval-granted-fifth-reaction.json +16 -0
  345. package/schema/fixtures/event/invalid/approval-granted-missing-actor.json +14 -0
  346. package/schema/fixtures/event/invalid/approval-requested-missing-action-key.json +14 -0
  347. package/schema/fixtures/event/invalid/approval-withdrawn-agent-policy-drift.json +15 -0
  348. package/schema/fixtures/event/invalid/approval-withdrawn-missing-reason.json +15 -0
  349. package/schema/fixtures/event/invalid/approval-withdrawn-system-actor.json +15 -0
  350. package/schema/fixtures/event/invalid/audit-decision-refused-human-actor.json +17 -0
  351. package/schema/fixtures/event/invalid/audit-decision-refused-missing-code.json +16 -0
  352. package/schema/fixtures/event/invalid/audit-reviewed-agent-actor.json +15 -0
  353. package/schema/fixtures/event/invalid/audit-reviewed-loved-no-note.json +16 -0
  354. package/schema/fixtures/event/invalid/audit-reviewed-system-actor.json +15 -0
  355. package/schema/fixtures/event/invalid/bad-actor-prefix.json +15 -0
  356. package/schema/fixtures/event/invalid/est-cost-bare-number.json +17 -0
  357. package/schema/fixtures/event/invalid/execution-completed-fabricated-exit-code.json +16 -0
  358. package/schema/fixtures/event/invalid/execution-completed-provider-ref-empty-id.json +18 -0
  359. package/schema/fixtures/event/invalid/execution-completed-provider-ref-extra-field.json +19 -0
  360. package/schema/fixtures/event/invalid/execution-completed-provider-ref-id-not-string.json +18 -0
  361. package/schema/fixtures/event/invalid/execution-completed-provider-ref-missing-adapter.json +17 -0
  362. package/schema/fixtures/event/invalid/execution-failed-open-reported-by.json +16 -0
  363. package/schema/fixtures/event/invalid/execution-indeterminate-open-reason.json +14 -0
  364. package/schema/fixtures/event/invalid/execution-reconciled-agent-actor.json +17 -0
  365. package/schema/fixtures/event/invalid/execution-started-negative-env-stripped.json +16 -0
  366. package/schema/fixtures/event/invalid/gate-bypassed-missing-opened-seq.json +15 -0
  367. package/schema/fixtures/event/invalid/gate-closed-non-integer-opened-seq.json +13 -0
  368. package/schema/fixtures/event/invalid/gate-opened-agent-actor.json +16 -0
  369. package/schema/fixtures/event/invalid/gate-organ-attested-absolute-path.json +14 -0
  370. package/schema/fixtures/event/invalid/gate-organ-attested-agent-actor.json +14 -0
  371. package/schema/fixtures/event/invalid/gate-organ-attested-missing-organ-path.json +13 -0
  372. package/schema/fixtures/event/invalid/harness-unknown-kind.json +18 -0
  373. package/schema/fixtures/event/invalid/harness-version-multiline.json +16 -0
  374. package/schema/fixtures/event/invalid/log-checkpoint-agent-actor.json +17 -0
  375. package/schema/fixtures/event/invalid/log-checkpoint-missing-signature.json +16 -0
  376. package/schema/fixtures/event/invalid/log-checkpoint-short-signed-hash.json +17 -0
  377. package/schema/fixtures/event/invalid/log-checkpoint-unknown-signature-alg.json +17 -0
  378. package/schema/fixtures/event/invalid/malformed-ts.json +15 -0
  379. package/schema/fixtures/event/invalid/missing-alg.json +14 -0
  380. package/schema/fixtures/event/invalid/missing-hash.json +14 -0
  381. package/schema/fixtures/event/invalid/non-integer-seq.json +15 -0
  382. package/schema/fixtures/event/invalid/payload-pruned-human-actor.json +14 -0
  383. package/schema/fixtures/event/invalid/payload-pruned-missing-hash.json +14 -0
  384. package/schema/fixtures/event/invalid/policy-declined-agent-actor.json +15 -0
  385. package/schema/fixtures/event/invalid/policy-proposed-missing-diff.json +19 -0
  386. package/schema/fixtures/event/invalid/policy-proposed-system-actor.json +26 -0
  387. package/schema/fixtures/event/invalid/short-hash.json +15 -0
  388. package/schema/fixtures/event/invalid/unknown-alg.json +15 -0
  389. package/schema/fixtures/event/invalid/unknown-event-type.json +15 -0
  390. package/schema/fixtures/event/invalid/unknown-top-level-field.json +16 -0
  391. package/schema/fixtures/event/valid/approval-expired.json +15 -0
  392. package/schema/fixtures/event/valid/approval-granted-batch.json +19 -0
  393. package/schema/fixtures/event/valid/approval-granted-reaction.json +16 -0
  394. package/schema/fixtures/event/valid/approval-granted.json +15 -0
  395. package/schema/fixtures/event/valid/approval-rejected.json +15 -0
  396. package/schema/fixtures/event/valid/approval-requested.json +19 -0
  397. package/schema/fixtures/event/valid/approval-revoked.json +15 -0
  398. package/schema/fixtures/event/valid/approval-withdrawn-policy-drift.json +17 -0
  399. package/schema/fixtures/event/valid/approval-withdrawn.json +16 -0
  400. package/schema/fixtures/event/valid/audit-decision-refused.json +20 -0
  401. package/schema/fixtures/event/valid/audit-reviewed-reaction.json +17 -0
  402. package/schema/fixtures/event/valid/audit-reviewed.json +15 -0
  403. package/schema/fixtures/event/valid/audit-sampled.json +14 -0
  404. package/schema/fixtures/event/valid/budget-exceeded.json +21 -0
  405. package/schema/fixtures/event/valid/envelope-drift.json +16 -0
  406. package/schema/fixtures/event/valid/execution-completed-harness-report.json +16 -0
  407. package/schema/fixtures/event/valid/execution-completed-provider-ref.json +18 -0
  408. package/schema/fixtures/event/valid/execution-completed.json +15 -0
  409. package/schema/fixtures/event/valid/execution-failed-harness-report.json +16 -0
  410. package/schema/fixtures/event/valid/execution-failed.json +15 -0
  411. package/schema/fixtures/event/valid/execution-indeterminate.json +15 -0
  412. package/schema/fixtures/event/valid/execution-reconciled.json +17 -0
  413. package/schema/fixtures/event/valid/execution-started-env-stripped.json +17 -0
  414. package/schema/fixtures/event/valid/execution-started.json +14 -0
  415. package/schema/fixtures/event/valid/gate-bypassed-harness-version.json +18 -0
  416. package/schema/fixtures/event/valid/gate-bypassed.json +19 -0
  417. package/schema/fixtures/event/valid/gate-closed.json +14 -0
  418. package/schema/fixtures/event/valid/gate-opened.json +16 -0
  419. package/schema/fixtures/event/valid/gate-organ-attested.json +14 -0
  420. package/schema/fixtures/event/valid/genesis-null-prev.json +14 -0
  421. package/schema/fixtures/event/valid/log-checkpoint.json +17 -0
  422. package/schema/fixtures/event/valid/payload-pruned-orphan.json +13 -0
  423. package/schema/fixtures/event/valid/payload-pruned.json +17 -0
  424. package/schema/fixtures/event/valid/policy-declined.json +16 -0
  425. package/schema/fixtures/event/valid/policy-proposed.json +35 -0
  426. package/schema/fixtures/event/valid/policy-updated.json +14 -0
  427. package/schema/fixtures/event/valid/reconciliation-required.json +18 -0
  428. package/schema/fixtures/event/valid/reconciliation-satisfied.json +17 -0
  429. package/schema/fixtures/event/valid/route-accepted.json +15 -0
  430. package/schema/fixtures/event/valid/route-proposed.json +16 -0
  431. package/schema/fixtures/event/valid/spec-example.json +15 -0
  432. package/schema/fixtures/event/valid/task-registered-harness-version.json +23 -0
  433. package/schema/fixtures/event/valid/task-registered.json +14 -0
  434. package/schema/fixtures/hash/known-answer-pre-121.json +74 -0
  435. package/schema/fixtures/hash/known-answer.json +74 -0
  436. package/schema/fixtures/policy/invalid/bad-approval-ttl.json +7 -0
  437. package/schema/fixtures/policy/invalid/bad-web-port.json +4 -0
  438. package/schema/fixtures/policy/invalid/checkpoint-key-not-base64.json +6 -0
  439. package/schema/fixtures/policy/invalid/class-rule-missing-autonomy.json +9 -0
  440. package/schema/fixtures/policy/invalid/empty-class-key.json +6 -0
  441. package/schema/fixtures/policy/invalid/live-rate-on-human-only.json +7 -0
  442. package/schema/fixtures/policy/invalid/malformed-class-key.json +6 -0
  443. package/schema/fixtures/policy/invalid/missing-version.json +8 -0
  444. package/schema/fixtures/policy/invalid/negative-limit.json +9 -0
  445. package/schema/fixtures/policy/invalid/non-numeric-limit.json +9 -0
  446. package/schema/fixtures/policy/invalid/non-positive-max-pending.json +9 -0
  447. package/schema/fixtures/policy/invalid/on-expiry-grant.json +8 -0
  448. package/schema/fixtures/policy/invalid/payload-retention-bare-number.json +4 -0
  449. package/schema/fixtures/policy/invalid/payload-retention-compound.json +4 -0
  450. package/schema/fixtures/policy/invalid/payload-retention-fractional.json +4 -0
  451. package/schema/fixtures/policy/invalid/payload-retention-zero.json +4 -0
  452. package/schema/fixtures/policy/invalid/protected-paths-escape.json +4 -0
  453. package/schema/fixtures/policy/invalid/protected-paths-glob.json +4 -0
  454. package/schema/fixtures/policy/invalid/retro-rate-on-human-only.json +7 -0
  455. package/schema/fixtures/policy/invalid/retro-rate-on-manual.json +7 -0
  456. package/schema/fixtures/policy/invalid/retro-rate-zero.json +7 -0
  457. package/schema/fixtures/policy/invalid/sample-rate-too-high.json +5 -0
  458. package/schema/fixtures/policy/invalid/sampling-secret-env-empty.json +7 -0
  459. package/schema/fixtures/policy/invalid/sampling-secret-env-not-string.json +6 -0
  460. package/schema/fixtures/policy/invalid/skew-tolerance-compound.json +6 -0
  461. package/schema/fixtures/policy/invalid/unknown-autonomy.json +7 -0
  462. package/schema/fixtures/policy/invalid/unknown-class-rule-key.json +6 -0
  463. package/schema/fixtures/policy/invalid/unknown-top-level-key.json +7 -0
  464. package/schema/fixtures/policy/invalid/vault-passphrase-env-empty.json +6 -0
  465. package/schema/fixtures/policy/invalid/vault-passphrase-literal.json +6 -0
  466. package/schema/fixtures/policy/invalid/version-not-string.json +4 -0
  467. package/schema/fixtures/policy/valid/canonical.json +47 -0
  468. package/schema/fixtures/policy/valid/checkpoint-keys.json +18 -0
  469. package/schema/fixtures/policy/valid/class-approvers-limits.json +25 -0
  470. package/schema/fixtures/policy/valid/class-retro-rate.json +17 -0
  471. package/schema/fixtures/policy/valid/global-budgets.json +19 -0
  472. package/schema/fixtures/policy/valid/human-only.json +9 -0
  473. package/schema/fixtures/policy/valid/minimal.json +6 -0
  474. package/schema/fixtures/policy/valid/protected-paths.json +10 -0
  475. package/schema/fixtures/policy/valid/record-namespace.json +13 -0
  476. package/schema/fixtures/policy/valid/request-volume-limits.json +26 -0
  477. package/schema/fixtures/policy/valid/retention-and-sampling-secret.json +16 -0
  478. package/schema/fixtures/policy/valid/skew-tolerance.json +15 -0
  479. package/schema/fixtures/policy/valid/vault-passphrase-env.json +14 -0
  480. package/schema/fixtures/policy/valid/wildcards.json +15 -0
  481. package/schema/fixtures/policy-md/invalid/alias-bomb.md +15 -0
  482. package/schema/fixtures/policy-md/invalid/no-fence.md +7 -0
  483. package/schema/fixtures/policy-md/invalid/protected-route-not-a-subclass.md +16 -0
  484. package/schema/fixtures/policy-md/invalid/schema-invalid-autonomy.md +16 -0
  485. package/schema/fixtures/policy-md/invalid/schema-invalid-read-proof.md +17 -0
  486. package/schema/fixtures/policy-md/invalid/two-fences.md +19 -0
  487. package/schema/fixtures/policy-md/invalid/unclosed-fence.md +11 -0
  488. package/schema/fixtures/policy-md/invalid/wrong-info-string.md +11 -0
  489. package/schema/fixtures/policy-md/invalid/yaml-syntax-error.md +13 -0
  490. package/schema/fixtures/policy-md/precedence/both/APPROVAL.md +7 -0
  491. package/schema/fixtures/policy-md/precedence/both/APPROVALS.md +7 -0
  492. package/schema/fixtures/policy-md/precedence/fallback-only/APPROVALS.md +7 -0
  493. package/schema/fixtures/policy-md/valid/canonical.md +50 -0
  494. package/schema/fixtures/policy-md/valid/daemon-read-proof.md +18 -0
  495. package/schema/fixtures/policy-md/valid/minimal.md +3 -0
  496. package/schema/fixtures/policy-md/valid/prose-lookalikes.md +54 -0
  497. package/schema/fixtures/policy-md/valid/routed-protected-paths.md +49 -0
  498. package/schema/fixtures/policy-md/valid/with-values.md +79 -0
  499. package/schema/fixtures/sample-record/invalid/bad-date-time.json +4 -0
  500. package/schema/fixtures/sample-record/invalid/missing-required-field.json +3 -0
  501. package/schema/fixtures/sample-record/invalid/unknown-top-level-field.json +5 -0
  502. package/schema/fixtures/sample-record/invalid/wrong-type.json +4 -0
  503. package/schema/fixtures/sample-record/valid/minimal.json +4 -0
  504. package/schema/fixtures/sample-record/valid/with-note.json +5 -0
  505. package/schema/fixtures/values/invalid/class-shaped.json +9 -0
  506. package/schema/fixtures/values/invalid/duplicate-entry.json +4 -0
  507. package/schema/fixtures/values/invalid/non-string-item.json +4 -0
  508. package/schema/fixtures/values/invalid/over-cap.json +26 -0
  509. package/schema/fixtures/values/invalid/unknown-key.json +5 -0
  510. package/schema/fixtures/values/invalid/version-string.json +1 -0
  511. package/schema/fixtures/values/valid/empty-lists.json +7 -0
  512. package/schema/fixtures/values/valid/full.json +20 -0
  513. package/schema/fixtures/values/valid/minimal.json +1 -0
  514. package/schema/fixtures/values-md/invalid/schema-invalid.md +62 -0
  515. package/schema/fixtures/values-md/invalid/two-blocks.md +69 -0
  516. package/schema/fixtures/values-md/invalid/unterminated.md +61 -0
  517. package/schema/fixtures/values-md/invalid/yaml-error.md +63 -0
  518. package/schema/fixtures/values-md/valid/absent.md +50 -0
  519. package/schema/fixtures/values-md/valid/with-values.md +79 -0
  520. package/schema/policy.schema.json +481 -0
  521. package/schema/sample-record.schema.json +26 -0
  522. package/schema/values.schema.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/cli/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Saying what is taking so long, on stderr (APRV-167).
3
+ *
4
+ * `approval policy amend` sat silent for thirty-three seconds before it printed
5
+ * anything: a chain re-verification and a baseline recovery over a three
6
+ * thousand record log, all of it ahead of the first line of output. It read as
7
+ * frozen. An operator nearly abandoned a live ceremony over it, and an earlier
8
+ * one DID abandon a run mid-flight, which left the repository's own gate
9
+ * fail-closed for every agent session until somebody tried again. The fix is not
10
+ * to make the work faster; it is to stop the work being invisible.
11
+ *
12
+ * ## Three rules this module exists to keep
13
+ *
14
+ * **Stderr, always.** `--json` puts one object on stdout and callers parse it.
15
+ * Progress that shared that stream would corrupt every machine consumer, so
16
+ * there is no path here that writes to stdout — the reporter is not even given
17
+ * the handle.
18
+ *
19
+ * **A terminal gets a repaint; anything else gets lines.** A pipe, a CI log and
20
+ * a file have no cursor to move, and `\r` in them is not a progress bar: it is
21
+ * a corrupted line that tools mangle differently and that a bug report then
22
+ * carries. So the carriage return is used only when stderr is a TTY, and the
23
+ * non-terminal form is ordinary newline-terminated lines that a log reader can
24
+ * grep — fewer of them, because they are not being erased.
25
+ *
26
+ * **The first line is immediate; the rest are throttled.** {@link
27
+ * ProgressReporter.phase} writes as it is called, because AC #1 is a line
28
+ * within a second of invocation and a throttle on the FIRST line would be a
29
+ * throttle on the entire point. Counts are rate-limited: a repaint per record
30
+ * over three thousand records is three thousand writes to make one sentence
31
+ * change.
32
+ */
33
+ /** How often a count may be repainted, in milliseconds. */
34
+ export const PROGRESS_THROTTLE_MS = 200;
35
+ /** A reporter that writes nothing. For callers with no terminal to spare. */
36
+ export const silentProgress = {
37
+ phase() {
38
+ // Nothing: this is the whole contract.
39
+ },
40
+ step() {
41
+ // Nothing.
42
+ },
43
+ done() {
44
+ // Nothing.
45
+ },
46
+ active: false,
47
+ };
48
+ /** The width a repainted line is padded to, so a shorter line erases a longer. */
49
+ const REPAINT_WIDTH = 78;
50
+ /**
51
+ * A reporter over `streams.err`.
52
+ *
53
+ * Returns {@link silentProgress} for nothing: even with no terminal the phase
54
+ * lines are worth having, because they are what a CI log or a bug report shows
55
+ * when somebody asks where the thirty seconds went.
56
+ */
57
+ export function createProgress(streams, options = {}) {
58
+ const tty = options.tty ?? process.stderr.isTTY === true;
59
+ const now = options.now ?? (() => Date.now());
60
+ const throttleMs = options.throttleMs ?? PROGRESS_THROTTLE_MS;
61
+ /** The open phase's name, or `null` when nothing is open. */
62
+ let open = null;
63
+ /** When the last count was painted. */
64
+ let painted = 0;
65
+ /** Has anything been drawn over the current line? TTY bookkeeping only. */
66
+ let dirty = false;
67
+ const erase = () => {
68
+ if (tty && dirty) {
69
+ streams.err(`\r${" ".repeat(REPAINT_WIDTH)}\r`);
70
+ dirty = false;
71
+ }
72
+ };
73
+ return {
74
+ active: true,
75
+ phase(text) {
76
+ erase();
77
+ open = text;
78
+ painted = 0;
79
+ // Newline-terminated on BOTH paths. On a terminal the counts that follow
80
+ // repaint a line of their own beneath it, so the phase name stays on
81
+ // screen: the operator's question is "what is it doing", and an answer
82
+ // that is overwritten by its own progress meter does not answer it.
83
+ streams.err(`${text}\n`);
84
+ },
85
+ step(done, total) {
86
+ if (open === null)
87
+ return;
88
+ const at = now();
89
+ // The first count of a phase is always drawn (`painted` is 0), so a fast
90
+ // walk still shows its scale before it finishes.
91
+ if (painted !== 0 && at - painted < throttleMs && done < total)
92
+ return;
93
+ painted = at;
94
+ const text = ` ${String(done)}/${String(total)} records`;
95
+ if (tty) {
96
+ streams.err(`\r${text.padEnd(REPAINT_WIDTH)}`);
97
+ dirty = true;
98
+ }
99
+ else {
100
+ streams.err(`${text}\n`);
101
+ }
102
+ },
103
+ done(text) {
104
+ erase();
105
+ if (open !== null && text !== undefined)
106
+ streams.err(`${text}\n`);
107
+ open = null;
108
+ painted = 0;
109
+ },
110
+ };
111
+ }
112
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/cli/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAqBxC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,KAAK;QACH,uCAAuC;IACzC,CAAC;IACD,IAAI;QACF,WAAW;IACb,CAAC;IACD,IAAI;QACF,WAAW;IACb,CAAC;IACD,MAAM,EAAE,KAAK;CACd,CAAC;AAkBF,kFAAkF;AAClF,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,OAAO,GAAoB,EAAE;IAE7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,oBAAoB,CAAC;IAE9D,6DAA6D;IAC7D,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,uCAAuC;IACvC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,2EAA2E;IAC3E,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAChD,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,IAAI;QAEZ,KAAK,CAAC,IAAY;YAChB,KAAK,EAAE,CAAC;YACR,IAAI,GAAG,IAAI,CAAC;YACZ,OAAO,GAAG,CAAC,CAAC;YACZ,yEAAyE;YACzE,qEAAqE;YACrE,uEAAuE;YACvE,oEAAoE;YACpE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,IAAY,EAAE,KAAa;YAC9B,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO;YAC1B,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;YACjB,yEAAyE;YACzE,iDAAiD;YACjD,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,GAAG,OAAO,GAAG,UAAU,IAAI,IAAI,GAAG,KAAK;gBAAE,OAAO;YACvE,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;YAC1D,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC/C,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAa;YAChB,KAAK,EAAE,CAAC;YACR,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAClE,IAAI,GAAG,IAAI,CAAC;YACZ,OAAO,GAAG,CAAC,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Terminal prompts — the one place this CLI reads from a human (APRV-74).
3
+ *
4
+ * Two of these three functions existed already, privately, inside
5
+ * `cli/amend.ts`: a synchronous line reader and the `[y/N]` question built on
6
+ * it. `approval setup` needs both, plus a third that `amend` never needed — a
7
+ * reader that does not echo — and three copies of a raw-mode byte loop is two
8
+ * too many. So they live here, `amend` imports the line reader, and the
9
+ * no-echo one is written once, in the open, where it can be read.
10
+ *
11
+ * ## Synchronous, on purpose
12
+ *
13
+ * `readSync(0, …)` rather than `readline/promises`. Every verb in this CLI
14
+ * returns an exit code from a synchronous function, and the two that do not
15
+ * (`channel`, `daemon`) are asynchronous because they hold a socket open, not
16
+ * because they ask a question. A prompt that forced `setup identity` to become
17
+ * a promise would be an async CLI shape adopted for the sake of one line of
18
+ * input.
19
+ *
20
+ * ## The no-echo reader, and what it is worth
21
+ *
22
+ * {@link readSecret} puts the terminal in raw mode and reads one byte at a
23
+ * time, printing nothing — not even asterisks, which leak a length. It restores
24
+ * the terminal in a `finally`, including on the abort paths, because a shell
25
+ * left in raw mode after a Ctrl-C is a broken session and the operator's next
26
+ * act would be to close the window.
27
+ *
28
+ * What it defends is a secret in a scrollback buffer, a `script` capture, or a
29
+ * screen share. What it does not defend is a compromised terminal, a keylogger,
30
+ * or the process itself: the value is a `string` in this process's heap the
31
+ * instant it is complete, exactly as `approval vault set`'s stdin value is. The
32
+ * design point that matters more is upstream of this file — wherever a secret
33
+ * can be collected by a helper's OWN prompt, `setup` delegates to that helper
34
+ * and this function is never called (see `cli/setup.ts`, "the token never
35
+ * enters our process").
36
+ *
37
+ * **Ctrl-C is a distinct result, not an exception and not an empty string.** An
38
+ * aborted prompt must be distinguishable from an empty answer by the caller, so
39
+ * that "the human changed their mind" stores nothing and exits, while "the
40
+ * human pressed Enter" is an ordinary validation failure. Collapsing the two is
41
+ * how a half-configured keystore entry gets written.
42
+ *
43
+ * Nothing here throws, and nothing here ever writes the value it read to any
44
+ * stream.
45
+ *
46
+ * ## A bad answer is a question asked again, not a mangled command line (APRV-90)
47
+ *
48
+ * {@link askUntil} is the loop every typed question in `setup` runs through. It
49
+ * exists because the first shipped build treated a wrong answer to a PROMPT the
50
+ * way it treats a wrong flag on an argv: exit 2 with the whole help page under
51
+ * it. Observed on 2026-08-18, `setup identity` printed `human identity
52
+ * (human:<id>):`, the operator typed `carter`, and forty lines of help came
53
+ * back. A prompt has already told the human what it wants; when the answer does
54
+ * not fit, the useful reply is one line saying which part did not fit, followed
55
+ * by the same question.
56
+ *
57
+ * Three ends, and they are different on purpose:
58
+ *
59
+ * - **accepted** — the validator's parsed value, which may be a NORMALISED form
60
+ * of what was typed (`carter` → `human:carter`) rather than the bytes;
61
+ * - **aborted** — `readLine` returned `null`, which is Ctrl-D (and, for the
62
+ * scripted prompter, the modelled Ctrl-C). Nothing is stored, and the caller
63
+ * exits with a one-line reason and NO help page, because there was no command
64
+ * line for a help page to be about;
65
+ * - **exhausted** — {@link DEFAULT_MAX_ATTEMPTS} answers in a row failed
66
+ * validation. Bounded rather than infinite so that a prompt driven by
67
+ * something that is not a person (a stuck script, a terminal replaying bytes)
68
+ * terminates instead of looping forever.
69
+ *
70
+ * ## EAGAIN is "not yet", never "end of input" (APRV-84)
71
+ *
72
+ * Every caller checks `process.stdin.isTTY` before it prompts, and merely
73
+ * touching `process.stdin` on a terminal has libuv put fd 0 into non-blocking
74
+ * mode. From then on a `readSync(0, …)` issued before the human has typed
75
+ * fails with EAGAIN instead of waiting. The first shipped line reader treated
76
+ * every error as EOF, so `approval setup identity` on a macOS terminal printed
77
+ * "no identity was entered" the instant the prompt appeared. Both readers now
78
+ * go through {@link readByteBlocking}, which sleeps a few milliseconds on
79
+ * EAGAIN and tries again, and treats nothing else as "wait".
80
+ */
81
+ import { readSync } from "node:fs";
82
+ const CTRL_C = 0x03;
83
+ const CTRL_D = 0x04;
84
+ const BACKSPACE = 0x08;
85
+ const DELETE = 0x7f;
86
+ const CR = 0x0d;
87
+ const LF = 0x0a;
88
+ /**
89
+ * One line from stdin, synchronously. `null` at EOF.
90
+ *
91
+ * Hoisted verbatim from `cli/amend.ts` (APRV-74), which is why it reads bytes
92
+ * rather than using a stream: it is called from inside a synchronous command
93
+ * function, after output has already been written, and it must not consume more
94
+ * of stdin than the line it was asked for.
95
+ */
96
+ export function readLineFromStdin(read = readByteBlocking) {
97
+ const buffer = Buffer.alloc(1);
98
+ const chars = [];
99
+ for (;;) {
100
+ let count = 0;
101
+ try {
102
+ count = read(buffer);
103
+ }
104
+ catch {
105
+ return chars.length === 0 ? null : chars.join("");
106
+ }
107
+ if (count === 0)
108
+ return chars.length === 0 ? null : chars.join("");
109
+ const char = buffer.toString("utf8");
110
+ if (char === "\n")
111
+ return chars.join("");
112
+ if (char !== "\r")
113
+ chars.push(char);
114
+ }
115
+ }
116
+ /** How long to sleep between EAGAIN retries. Short enough that a keystroke feels immediate. */
117
+ const EAGAIN_NAP_MS = 5;
118
+ const napCell = new Int32Array(new SharedArrayBuffer(4));
119
+ /**
120
+ * One byte from fd 0, blocking, whatever mode libuv left the descriptor in.
121
+ *
122
+ * EAGAIN means the terminal has nothing yet: nap and retry (`Atomics.wait` is
123
+ * the one synchronous sleep JavaScript has, and it keeps the wait from being a
124
+ * hot loop). Every other error propagates, and 0 bytes is EOF, exactly as with
125
+ * `readSync` itself.
126
+ */
127
+ export function readByteBlocking(buffer) {
128
+ for (;;) {
129
+ try {
130
+ return readSync(0, buffer, 0, 1, null);
131
+ }
132
+ catch (cause) {
133
+ if (cause.code !== "EAGAIN")
134
+ throw cause;
135
+ Atomics.wait(napCell, 0, 0, EAGAIN_NAP_MS);
136
+ }
137
+ }
138
+ }
139
+ /**
140
+ * A UTF-8 character's worth of bytes, popped off the end of `bytes`.
141
+ *
142
+ * Backspace deletes a CHARACTER, so the continuation bytes (`10xxxxxx`) of a
143
+ * multi-byte sequence come off together with their lead byte. A loop that
144
+ * popped one byte would leave a truncated sequence in the buffer and turn a
145
+ * passphrase containing an accented letter into one the operator cannot retype.
146
+ */
147
+ function popCharacter(bytes) {
148
+ while (bytes.length > 0) {
149
+ const byte = bytes[bytes.length - 1];
150
+ bytes.pop();
151
+ if ((byte & 0xc0) !== 0x80)
152
+ return;
153
+ }
154
+ }
155
+ /**
156
+ * Read a secret with no echo. See the module doc for what this is worth.
157
+ *
158
+ * The byte loop, in full: `\r` or `\n` ends the read; DEL (0x7f) and BS (0x08)
159
+ * remove the last character and echo nothing (no cursor movement — there is
160
+ * nothing on screen to erase); Ctrl-C aborts always; Ctrl-D aborts only on an
161
+ * empty buffer, which is EOF's meaning everywhere else in a shell and which
162
+ * leaves the "Ctrl-D at the end of a typed line" case as an ordinary end. Every
163
+ * other byte accumulates.
164
+ *
165
+ * Raw mode is restored in a `finally`, and a newline is printed after, so the
166
+ * caller's next output starts on its own line whichever way the read ended.
167
+ */
168
+ export function readSecret(streams, prompt, read = readByteBlocking) {
169
+ streams.out(prompt);
170
+ const stdin = process.stdin;
171
+ const wasRaw = stdin.isRaw === true;
172
+ const buffer = Buffer.alloc(1);
173
+ const bytes = [];
174
+ try {
175
+ stdin.setRawMode(true);
176
+ for (;;) {
177
+ let count = 0;
178
+ try {
179
+ count = read(buffer);
180
+ }
181
+ catch {
182
+ // EAGAIN never reaches here (readByteBlocking waits it out); anything else is the terminal going away.
183
+ return { ok: false, reason: "aborted" };
184
+ }
185
+ if (count === 0) {
186
+ return bytes.length === 0
187
+ ? { ok: false, reason: "aborted" }
188
+ : { ok: true, value: Buffer.from(bytes).toString("utf8") };
189
+ }
190
+ const byte = buffer[0];
191
+ if (byte === CR || byte === LF) {
192
+ return { ok: true, value: Buffer.from(bytes).toString("utf8") };
193
+ }
194
+ if (byte === CTRL_C)
195
+ return { ok: false, reason: "aborted" };
196
+ if (byte === CTRL_D && bytes.length === 0)
197
+ return { ok: false, reason: "aborted" };
198
+ if (byte === DELETE || byte === BACKSPACE) {
199
+ popCharacter(bytes);
200
+ continue;
201
+ }
202
+ if (byte === CTRL_D)
203
+ continue;
204
+ bytes.push(byte);
205
+ }
206
+ }
207
+ finally {
208
+ try {
209
+ stdin.setRawMode(wasRaw);
210
+ }
211
+ catch {
212
+ /* the terminal went away; there is nothing left to restore it to */
213
+ }
214
+ streams.out("\n");
215
+ bytes.length = 0;
216
+ }
217
+ }
218
+ /**
219
+ * The real prompter, or `null` when stdin is not a terminal.
220
+ *
221
+ * Refusing to construct is deliberate: a prompter that fell back to reading a
222
+ * pipe would let a CI job answer `setup`'s confirmations by feeding it a
223
+ * heredoc, and "a human was asked" is the entire content of these questions.
224
+ * Callers check `process.stdin.isTTY` themselves and print the non-interactive
225
+ * alternative; this is the second lock on the same door.
226
+ */
227
+ export function createPrompter(streams) {
228
+ if (process.stdin.isTTY !== true)
229
+ return null;
230
+ return {
231
+ readLine(prompt) {
232
+ streams.out(prompt);
233
+ return readLineFromStdin();
234
+ },
235
+ readSecret(prompt) {
236
+ return readSecret(streams, prompt);
237
+ },
238
+ confirm(prompt, defaultNo = true) {
239
+ streams.out(`${prompt} ${defaultNo ? "[y/N]" : "[Y/n]"} `);
240
+ const answer = (readLineFromStdin() ?? "").trim().toLowerCase();
241
+ if (answer.length === 0)
242
+ return !defaultNo;
243
+ return answer === "y" || answer === "yes";
244
+ },
245
+ };
246
+ }
247
+ // ---------------------------------------------------------------------------
248
+ // Asking again (APRV-90)
249
+ // ---------------------------------------------------------------------------
250
+ /**
251
+ * How many failed answers to one question before the loop gives up. See the
252
+ * module doc: bounded so that a prompt nobody is answering terminates.
253
+ */
254
+ export const DEFAULT_MAX_ATTEMPTS = 5;
255
+ /**
256
+ * Ask until the answer validates, the human gives up, or the attempts run out.
257
+ *
258
+ * The reason line goes to STDOUT, indented, because it is part of the
259
+ * conversation and not a diagnostic about a command: it is read by the person
260
+ * at the terminal, in between their answer and the next prompt. A caller turns
261
+ * an `aborted` or `exhausted` outcome into its own one-line refusal; nothing
262
+ * here prints a help page (see the module doc).
263
+ */
264
+ export function askUntil(streams, prompter, question, validate, options = {}) {
265
+ const maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
266
+ for (let attempts = 1;; attempts += 1) {
267
+ const answer = prompter.readLine(question);
268
+ // Ctrl-D at the prompt, or the terminal going away. Distinct from an empty
269
+ // line, which is an ordinary answer a validator may accept or refuse.
270
+ if (answer === null)
271
+ return { ok: false, reason: "aborted", attempts };
272
+ const verdict = validate(answer);
273
+ if (verdict.ok)
274
+ return { ok: true, value: verdict.value };
275
+ // The reason is printed for the LAST attempt too: an operator who has just
276
+ // run out of tries is owed the same sentence as one who has not.
277
+ streams.out(` ${verdict.reason}\n`);
278
+ if (attempts >= maxAttempts)
279
+ return { ok: false, reason: "exhausted", attempts };
280
+ }
281
+ }
282
+ /**
283
+ * A yes/no question that asks AGAIN when the answer is neither (APRV-99).
284
+ *
285
+ * {@link Prompter.confirm} takes the default for anything it does not
286
+ * recognise, which is the right reading for a question whose default is the
287
+ * safe answer: a stray keystroke declines. It is the wrong reading for a
288
+ * question whose default is YES and whose subject is a check the operator
289
+ * asked for, where a typo would silently skip the proof and report it as a
290
+ * decision. APRV-90's answer to that class of question is that every question
291
+ * loops, so this is {@link askUntil} over a yes/no validator: the same bounded
292
+ * loop, the same indented reason line, the same abort handling.
293
+ *
294
+ * Existing `confirm` calls are deliberately untouched — their output is pinned
295
+ * byte for byte — so this is an addition to the vocabulary, not a replacement.
296
+ * A withdrawal (Ctrl-D) or an exhausted loop reads as NO, which is the
297
+ * fail-closed direction for a question that offers to do something.
298
+ */
299
+ export function confirmUntil(streams, prompter, question, defaultYes) {
300
+ const asked = askUntil(streams, prompter, `${question} ${defaultYes ? "[Y/n]" : "[y/N]"} `, (answer) => {
301
+ const typed = answer.trim().toLowerCase();
302
+ if (typed.length === 0)
303
+ return { ok: true, value: defaultYes };
304
+ if (typed === "y" || typed === "yes")
305
+ return { ok: true, value: true };
306
+ if (typed === "n" || typed === "no")
307
+ return { ok: true, value: false };
308
+ return { ok: false, reason: `${JSON.stringify(answer.trim())} is not yes or no` };
309
+ });
310
+ return asked.ok ? asked.value : false;
311
+ }
312
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/cli/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Reading stored lines back out of the log, for `tail` and `export`.
3
+ *
4
+ * Read-only in the strictest sense: this module opens the file once for
5
+ * reading and returns the *stored bytes* of each complete line. It never
6
+ * re-serializes, never normalizes, never repairs. `export` is required to be
7
+ * byte-faithful, and the cheapest way to guarantee that is never to have a
8
+ * parsed object on the write path at all.
9
+ *
10
+ * Called only after {@link verify} has passed over the same file, so `count` is
11
+ * the number of complete lines verification vouched for. If the file no longer
12
+ * has that many lines, something is writing underneath us; that is reported as
13
+ * an I/O condition rather than papered over.
14
+ */
15
+ import { readFileSync } from "node:fs";
16
+ function detail(cause) {
17
+ return cause instanceof Error ? cause.message : String(cause);
18
+ }
19
+ /**
20
+ * The first `count` complete (newline-terminated) lines of the log, exactly as
21
+ * stored, without their terminators.
22
+ */
23
+ export function readCompleteLines(logPath, count) {
24
+ if (count === 0)
25
+ return { ok: true, lines: [] };
26
+ let raw;
27
+ try {
28
+ raw = readFileSync(logPath, "utf8");
29
+ }
30
+ catch (cause) {
31
+ if (cause.code === "ENOENT") {
32
+ return { ok: true, lines: [] };
33
+ }
34
+ return { ok: false, message: `log ${logPath} could not be read: ${detail(cause)}` };
35
+ }
36
+ const segments = raw.split("\n");
37
+ const lines = [];
38
+ for (let index = 0; index < count; index += 1) {
39
+ const line = segments[index];
40
+ if (line === undefined || line.length === 0) {
41
+ return {
42
+ ok: false,
43
+ message: `log ${logPath} lost line ${index + 1} between verification and read; refusing to print a moving target`,
44
+ };
45
+ }
46
+ lines.push(line);
47
+ }
48
+ return { ok: true, lines };
49
+ }
50
+ /** Parse stored lines back into records for `--json` output. */
51
+ export function parseLines(logPath, lines) {
52
+ const records = [];
53
+ for (const [index, line] of lines.entries()) {
54
+ try {
55
+ records.push(JSON.parse(line));
56
+ }
57
+ catch (cause) {
58
+ return {
59
+ ok: false,
60
+ message: `log ${logPath} line ${index + 1} changed between verification and read (${detail(cause)})`,
61
+ };
62
+ }
63
+ }
64
+ return { ok: true, records };
65
+ }
66
+ //# sourceMappingURL=records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../../../src/cli/records.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,KAAa;IAC9D,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAEhD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,OAAO,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IACtF,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,OAAO,OAAO,cAAc,KAAK,GAAG,CAAC,mEAAmE;aAClH,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,KAAe;IAEf,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,OAAO,OAAO,SAAS,KAAK,GAAG,CAAC,2CAA2C,MAAM,CAAC,KAAK,CAAC,GAAG;aACrG,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}