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,476 @@
1
+ /**
2
+ * The credential-collection flow (SPEC.md §5.2, §10.1, §10.4; APRV-78).
3
+ *
4
+ * `setup identity|vault|sampling|telegram` each hand-rolled their own
5
+ * conversation, and that was right while there were four of them and each was
6
+ * different. `setup adapter <name>` was the first verb whose conversation is
7
+ * DERIVED — from a manifest of {@link CredentialSpec}s an adapter declares — so
8
+ * the conversation itself becomes a function, and this file is that function.
9
+ * APRV-79 made it the second caller's too: `setup channel telegram` runs this
10
+ * flow over the Telegram channel's manifest, into `.approval/env` instead of
11
+ * into the vault, which is what the destination seam was built for.
12
+ *
13
+ * It knows nothing about email, SMTP, Telegram, or the vault's file format. It
14
+ * is handed a list of specs, somewhere to put the values
15
+ * ({@link FlowDestination}), and up to four hooks, and it runs one fixed order:
16
+ *
17
+ * 1. the title and the prerequisite line;
18
+ * 2. **the checklist** — one line per spec, before a single question is asked,
19
+ * so an operator can see the whole shape of what is about to be demanded and
20
+ * where it will land, and abandon at zero cost if it is the wrong vault;
21
+ * 3. **the preflight** ({@link FlowDestination.present}), which for a vault
22
+ * means OPENING it. This is why it is step three and not step six: a wrong
23
+ * passphrase must refuse before the operator has typed a password, not
24
+ * after. The set it returns is also what step four reads;
25
+ * 4. **the replacement plan** ({@link planWrites}), asked up front for the same
26
+ * reason `setup`'s own does: a confirmation asked after the value had been
27
+ * replaced is a question whose "no" no longer means anything. A name the
28
+ * operator declines is never even asked for;
29
+ * 5. **collection**, in manifest order;
30
+ * 6. **the cross-field check** ({@link FlowHooks.check}), before any write, so
31
+ * a half-configured pair costs nothing;
32
+ * 7. **the writes**, in manifest order — which is why an adapter puts its
33
+ * secret last: a destination that refuses half way reports exactly which
34
+ * names landed and stops. **There is no rollback**, deliberately: deleting
35
+ * credentials in response to a write failure is a destructive act taken by a
36
+ * wizard on its own authority, over a store whose previous contents it
37
+ * cannot restore;
38
+ * 8. **verification** ({@link FlowHooks.verify}), after the write, because the
39
+ * thing being verified is the stored configuration; and
40
+ * 9. **the report** — where, how many, which names — and the next steps.
41
+ *
42
+ * **Values are held in this process and printed by nothing.** The flow must
43
+ * hold them: it collected them and it is about to write them. Every line it
44
+ * emits names a CREDENTIAL NAME, a kind, a count, or a path, and the suite in
45
+ * `tests/cli-setup.test.ts` sweeps every captured byte for the fixture secrets
46
+ * with no exemption on this path.
47
+ */
48
+ import { envFilePathFor, readEnvFile, upsertEnvFileEntries, } from "../core/env-file.js";
49
+ import { listCredentials, setCredential, vaultExists, } from "../core/vault.js";
50
+ import { EXIT_INTEGRITY, EXIT_IO, EXIT_OK, EXIT_USAGE } from "./exit-codes.js";
51
+ import { askUntil } from "./prompt.js";
52
+ import { refusal as renderRefusal, style } from "./style.js";
53
+ /** A vault refusal onto the exit table, exactly as `cli/vault.ts` maps it. */
54
+ function vaultExit(refusal) {
55
+ return {
56
+ code: refusal.code,
57
+ message: refusal.message,
58
+ exitCode: refusal.code === "vault-io" || refusal.code === "vault-write-failed"
59
+ ? EXIT_IO
60
+ : EXIT_INTEGRITY,
61
+ };
62
+ }
63
+ /** An env-file refusal onto the exit table, exactly as `cli/setup.ts` maps it. */
64
+ function envExit(refusal) {
65
+ return {
66
+ code: refusal.code,
67
+ message: refusal.message,
68
+ exitCode: refusal.code === "env-file-io" || refusal.code === "env-file-mode"
69
+ ? EXIT_IO
70
+ : EXIT_INTEGRITY,
71
+ };
72
+ }
73
+ /**
74
+ * The encrypted credential store (SPEC.md §10.4).
75
+ *
76
+ * `present()` is where the passphrase is proved. A vault that does not exist
77
+ * yet holds nothing and refuses nothing: the first `write` creates it, which is
78
+ * what `approval vault set` does too. A vault that DOES exist is opened here
79
+ * and nowhere later, so a wrong passphrase costs the operator one line of
80
+ * output rather than five typed values.
81
+ */
82
+ export function vaultDestination(vaultPath, passphrase) {
83
+ return {
84
+ kind: "vault",
85
+ where: () => vaultPath,
86
+ present() {
87
+ if (!vaultExists(vaultPath))
88
+ return { ok: true, names: new Set() };
89
+ const listed = listCredentials(vaultPath, passphrase);
90
+ if (!listed.ok)
91
+ return { ok: false, ...vaultExit(listed) };
92
+ return { ok: true, names: new Set(listed.names) };
93
+ },
94
+ write(name, value) {
95
+ const stored = setCredential(vaultPath, passphrase, name, value);
96
+ if (!stored.ok)
97
+ return { ok: false, ...vaultExit(stored) };
98
+ return { ok: true };
99
+ },
100
+ };
101
+ }
102
+ /**
103
+ * The `.approval/env` source map (SPEC.md §5.2).
104
+ *
105
+ * Unused by `setup adapter` — an adapter's credentials go to the vault, never
106
+ * to this file — and used by `setup channel telegram`, which is what a channel's
107
+ * two values are: a source for the token and a literal chat id, both of them
108
+ * things that unlock the machine rather than things an adapter spends.
109
+ *
110
+ * The value written is whatever the caller collected, which on this path is a
111
+ * SOURCE (`keychain:<service>`), an identity, or a chat id. Nothing here decides
112
+ * that; {@link upsertEnvFileEntries} preserves every other line and comment.
113
+ */
114
+ export function envFileDestination(envPath) {
115
+ return {
116
+ kind: "env-file",
117
+ where: () => envPath,
118
+ present() {
119
+ const file = readEnvFile(envPath);
120
+ if (!file.ok)
121
+ return { ok: false, ...envExit(file) };
122
+ return { ok: true, names: new Set(file.entries.map((entry) => entry.key)) };
123
+ },
124
+ write(name, value) {
125
+ const written = upsertEnvFileEntries(envPath, [{ key: name, value }]);
126
+ if (!written.ok)
127
+ return { ok: false, ...envExit(written) };
128
+ return { ok: true };
129
+ },
130
+ };
131
+ }
132
+ /** The env file for a log path, re-exported so a caller needs one import. */
133
+ export { envFilePathFor };
134
+ /**
135
+ * The two phrasings, kept as data.
136
+ *
137
+ * The env-file wording is BYTE-FOR-BYTE what `setup identity|vault|sampling|
138
+ * telegram` printed before this file existed, because those sentences are
139
+ * asserted on and, more to the point, an operator who has run `setup` before
140
+ * should not be told the same fact in new words for no reason.
141
+ */
142
+ export const PLAN_PHRASES = {
143
+ "env-file": {
144
+ present: (name, where) => `${name} already has a line in ${where} (its value is not printed here).\n`,
145
+ replace: (name) => `replace the ${name} line?`,
146
+ leftAlone: (names, where) => `left alone in ${where}: ${names.join(", ")} (the existing line${names.length === 1 ? " is" : "s are"} unchanged)\n`,
147
+ },
148
+ vault: {
149
+ present: (name, where) => `${name} is already in ${where} (its value is not printed here).\n`,
150
+ replace: (name) => `replace ${name}?`,
151
+ leftAlone: (names, where) => `left alone in ${where}: ${names.join(", ")} (the existing value${names.length === 1 ? " is" : "s are"} unchanged)\n`,
152
+ },
153
+ };
154
+ /**
155
+ * Which names to ask for, given which are already there.
156
+ *
157
+ * Asked BEFORE any work is done, and no previous VALUE is ever printed — not
158
+ * even one that is not a secret. A store may legitimately hold anything under
159
+ * any name, the operator put it there, and a verb that echoed "replacing
160
+ * smtp.user (you@example.net)?" would publish it into a terminal on their
161
+ * behalf.
162
+ */
163
+ export function planWrites(streams, prompter, present, where, names, phrases) {
164
+ const write = [];
165
+ const skipped = [];
166
+ for (const name of names) {
167
+ if (!present.has(name)) {
168
+ write.push(name);
169
+ continue;
170
+ }
171
+ streams.out(phrases.present(name, where));
172
+ if (prompter.confirm(phrases.replace(name)))
173
+ write.push(name);
174
+ else
175
+ skipped.push(name);
176
+ }
177
+ return { write, skipped };
178
+ }
179
+ /** Report what was left alone, so a re-run's "no" is visible in the output. */
180
+ export function reportLeftAlone(streams, where, skipped, phrases) {
181
+ if (skipped.length === 0)
182
+ return;
183
+ streams.out(phrases.leftAlone([...skipped], where));
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // Picking from a closed set
187
+ // ---------------------------------------------------------------------------
188
+ /**
189
+ * A numbered picker over a closed list.
190
+ *
191
+ * Extracted from the Telegram chat picker, which is the same conversation over
192
+ * different nouns: print the options with an index and read a number. Both
193
+ * callers use this one (APRV-79).
194
+ *
195
+ * **An unparseable answer is asked again** (APRV-90). It used to be a refusal,
196
+ * on the argument that a wizard which loops on one question and not the others
197
+ * is unpredictable — the answer to which turned out to be that every question
198
+ * loops, not that none of them does. The options are printed once; only the
199
+ * question repeats, under one line saying which number was not on the list.
200
+ * `ok: false` now means the human withdrew (Ctrl-D) or ran out of attempts, and
201
+ * the message says which.
202
+ */
203
+ export function pickOne(streams, prompter, options) {
204
+ streams.out(options.heading);
205
+ options.items.forEach((item, index) => {
206
+ const marker = index === options.defaultIndex ? " (default)" : "";
207
+ streams.out(` ${String(index + 1)}. ${options.label(item)}${marker}\n`);
208
+ });
209
+ const range = `1-${String(options.items.length)}`;
210
+ const picked = askUntil(streams, prompter, options.prompt, (answer) => {
211
+ const typed = answer.trim();
212
+ if (typed.length === 0 && options.defaultIndex !== null) {
213
+ return { ok: true, value: options.items[options.defaultIndex] };
214
+ }
215
+ const index = Number.parseInt(typed, 10);
216
+ if (!Number.isInteger(index) || index < 1 || index > options.items.length) {
217
+ return { ok: false, reason: `${JSON.stringify(typed)} is not one of ${range}` };
218
+ }
219
+ return { ok: true, value: options.items[index - 1] };
220
+ });
221
+ if (!picked.ok) {
222
+ return {
223
+ ok: false,
224
+ message: picked.reason === "aborted"
225
+ ? `nothing was picked from ${range}`
226
+ : `no answer in ${range} after ${String(picked.attempts)} attempts`,
227
+ };
228
+ }
229
+ return { ok: true, item: picked.value };
230
+ }
231
+ // ---------------------------------------------------------------------------
232
+ // Collection
233
+ // ---------------------------------------------------------------------------
234
+ /**
235
+ * A Google app password as the account page displays it: four groups of four
236
+ * characters separated by single spaces (APRV-97, APRV-98). Matched on SHAPE
237
+ * (`\S{4}` groups, `\s` separators) rather than on an alphabet, because the
238
+ * first field run met a 19-character paste that a `[a-z]`-only pattern did not
239
+ * recognise, and a copy from a browser can carry U+00A0 for the space. The
240
+ * count is printed and the strip is a `[Y/n]` question, so a genuine password
241
+ * of this exact shape that contains spaces is one keystroke from being kept.
242
+ */
243
+ const DISPLAY_SPACED_APP_PASSWORD = /^\S{4}\s\S{4}\s\S{4}\s\S{4}$/u;
244
+ /** The built-in prompts, one per {@link CredentialSpec.kind}. */
245
+ function collectDefault(streams, prompter, spec) {
246
+ if (spec.kind === "secret") {
247
+ const read = prompter.readSecret(`${spec.label} (not echoed): `);
248
+ if (!read.ok)
249
+ return { kind: "abort", message: `the entry for ${spec.name} was aborted` };
250
+ let value = read.value;
251
+ if (value.length === 0) {
252
+ return spec.required
253
+ ? { kind: "abort", message: `${spec.name} is required and nothing was entered` }
254
+ : { kind: "skip" };
255
+ }
256
+ // The count, never the value (APRV-97). What setup collects are app
257
+ // passwords and tokens whose lengths are public, so a count leaks nothing
258
+ // and turns "blind paste, then a provider's 535" into "received 19".
259
+ streams.out(` received ${String(value.length)} character(s)\n`);
260
+ // Outer whitespace is a paste artefact far more often than it is part of a
261
+ // secret (APRV-98: a copy from a web page arrived with a trailing space,
262
+ // and a provider's 535 was the only symptom). It is trimmed, and said.
263
+ const trimmed = value.trim();
264
+ if (trimmed.length !== value.length) {
265
+ streams.out(` trimmed ${String(value.length - trimmed.length)} leading/trailing whitespace character(s); ${String(trimmed.length)} remain\n`);
266
+ value = trimmed;
267
+ }
268
+ if (DISPLAY_SPACED_APP_PASSWORD.test(value)) {
269
+ // Google shows app passwords as four groups with display spaces, and
270
+ // Gmail's AUTH rejects the spaced form. The shape is unmistakable, so
271
+ // the offer defaults to yes; it is still an offer, because a secret
272
+ // that genuinely contains spaces is stored exactly as typed.
273
+ const strip = prompter.confirm(` that is the shape of a Google app password pasted with its display spaces (16 letters shown as 4 groups); store the 16 characters without the spaces?`, false);
274
+ if (strip) {
275
+ value = value.replace(/\s/gu, "");
276
+ streams.out(` storing ${String(value.length)} character(s)\n`);
277
+ }
278
+ }
279
+ return { kind: "value", value };
280
+ }
281
+ if (spec.kind === "choice") {
282
+ const choices = spec.choices ?? [];
283
+ if (choices.length === 0) {
284
+ return { kind: "abort", message: `${spec.name} declares no choices to pick from` };
285
+ }
286
+ const defaultIndex = choices.findIndex((choice) => choice.value === spec.default);
287
+ const picked = pickOne(streams, prompter, {
288
+ heading: `\n${spec.label} — ${spec.describe}:\n`,
289
+ items: choices,
290
+ label: (choice) => `${choice.value} — ${choice.describe}`,
291
+ prompt: `which one? [1-${String(choices.length)}]: `,
292
+ defaultIndex: defaultIndex === -1 ? null : defaultIndex,
293
+ });
294
+ if (!picked.ok)
295
+ return { kind: "abort", message: `${spec.name}: ${picked.message}` };
296
+ return { kind: "value", value: picked.item.value };
297
+ }
298
+ // A config value, asked until it is one (APRV-90). The spec's OWN validator
299
+ // runs here rather than only after collection, so a mistyped port is one line
300
+ // and the same question instead of an exit code and a help page. The sentence
301
+ // is unchanged either way: it is the adapter's refusal, the one the operator
302
+ // would have been shown at send time.
303
+ const suffix = spec.default === undefined ? "" : ` [${spec.default}]`;
304
+ const asked = askUntil(streams, prompter, `${spec.label}${suffix}: `, (answer) => {
305
+ const typed = answer.trim();
306
+ const value = typed.length === 0 ? (spec.default ?? "") : typed;
307
+ if (value.length === 0) {
308
+ // `null` is "nothing to store", which is legitimate for an optional
309
+ // spec and is the one thing a required spec may not be answered with.
310
+ return spec.required
311
+ ? { ok: false, reason: `${spec.name} is required; nothing was entered` }
312
+ : { ok: true, value: null };
313
+ }
314
+ const verdict = spec.validate?.(value) ?? { ok: true };
315
+ return verdict.ok ? { ok: true, value } : { ok: false, reason: verdict.message };
316
+ });
317
+ if (!asked.ok) {
318
+ return {
319
+ kind: "abort",
320
+ message: asked.reason === "aborted"
321
+ ? `the entry for ${spec.name} was aborted`
322
+ : `${spec.name}: no valid value after ${String(asked.attempts)} attempts`,
323
+ };
324
+ }
325
+ return asked.value === null ? { kind: "skip" } : { kind: "value", value: asked.value };
326
+ }
327
+ /** The kind, in the one word the checklist prints. */
328
+ function kindWord(spec) {
329
+ if (spec.kind === "secret")
330
+ return "secret";
331
+ if (spec.kind === "choice")
332
+ return "choice";
333
+ return "config";
334
+ }
335
+ // ---------------------------------------------------------------------------
336
+ // The flow
337
+ // ---------------------------------------------------------------------------
338
+ /**
339
+ * Run one credential conversation, start to finish. Never throws.
340
+ *
341
+ * The caller has already done everything that is its own business: flags, the
342
+ * terminal check, the human-only gate, and resolving the passphrase out of the
343
+ * environment. What arrives here is a manifest and somewhere to put it.
344
+ */
345
+ export async function runCredentialFlow(flow) {
346
+ const { streams, prompter, specs, destination, labels } = flow;
347
+ const hooks = flow.hooks ?? {};
348
+ const where = destination.where();
349
+ const phrases = PLAN_PHRASES[destination.kind];
350
+ const nothing = {
351
+ code: EXIT_OK,
352
+ written: [],
353
+ skipped: [],
354
+ verified: "not-attempted",
355
+ };
356
+ // (1) What this is, and what must already be true.
357
+ streams.out(`${labels.title}\n`);
358
+ if (labels.prereq !== undefined)
359
+ streams.out(`${labels.prereq}\n`);
360
+ // (2) The whole demand, before the first question.
361
+ streams.out(`\nIt will ask for ${String(specs.length)} value(s), all of them into ${where}:\n`);
362
+ for (const spec of specs) {
363
+ streams.out(` ${spec.name} (${kindWord(spec)}${spec.required ? "" : ", optional"}) — ${spec.describe}\n`);
364
+ }
365
+ streams.out("\n");
366
+ // (3) The preflight. For a vault this is where the passphrase is proved, and
367
+ // it is here rather than at the first write so that a wrong one refuses
368
+ // before a password has been typed.
369
+ const present = destination.present();
370
+ if (!present.ok) {
371
+ streams.err(`${renderRefusal(style(), present.code, present.message)}\n`);
372
+ streams.err(` nothing was collected and nothing was written to ${where}\n`);
373
+ return { ...nothing, code: present.exitCode };
374
+ }
375
+ // (4) What is already there, and whether to replace it.
376
+ const plan = planWrites(streams, prompter, present.names, where, specs.map((spec) => spec.name), phrases);
377
+ const wanted = specs.filter((spec) => plan.write.includes(spec.name));
378
+ if (wanted.length === 0) {
379
+ reportLeftAlone(streams, where, plan.skipped, phrases);
380
+ streams.out(`nothing to do: every name is already in ${where}\n`);
381
+ return { ...nothing, skipped: plan.skipped };
382
+ }
383
+ // (5) Collection, in manifest order. A skipped name is never asked for.
384
+ const values = {};
385
+ for (const spec of wanted) {
386
+ let collected = hooks.collect === undefined
387
+ ? collectDefault(streams, prompter, spec)
388
+ : await hooks.collect(spec, values);
389
+ // Discovery is the second chance, not the first: a value the operator
390
+ // typed is never overwritten by one the service reported. The hook runs
391
+ // only where collection left a hole, which for a channel is exactly the
392
+ // spec whose value the service is the authority on.
393
+ if (collected.kind === "skip" && hooks.discover !== undefined) {
394
+ collected = await hooks.discover(spec, values);
395
+ }
396
+ if (collected.kind === "refused") {
397
+ // The hook has already said what happened and why, in the words of the
398
+ // far end it was talking to. Nothing is added here.
399
+ return { ...nothing, code: collected.code, skipped: plan.skipped };
400
+ }
401
+ if (collected.kind === "abort") {
402
+ streams.err(`approval: ${collected.message}; nothing was written to ${where}\n`);
403
+ return { ...nothing, code: EXIT_USAGE, skipped: plan.skipped };
404
+ }
405
+ if (collected.kind === "skip") {
406
+ if (spec.required) {
407
+ streams.err(`approval: ${spec.name} is required and no value was given; nothing was written to ${where}\n`);
408
+ return { ...nothing, code: EXIT_USAGE, skipped: plan.skipped };
409
+ }
410
+ continue;
411
+ }
412
+ const verdict = spec.validate?.(collected.value) ?? { ok: true };
413
+ if (!verdict.ok) {
414
+ // The backstop, not the front line (APRV-90). A value the operator TYPED
415
+ // has already been validated inside the prompt loop and asked for again
416
+ // if it did not fit; what reaches here and fails is a value a
417
+ // {@link FlowHooks.collect} or {@link FlowHooks.discover} hook produced,
418
+ // which no re-prompt can fix because no question was asked. The sentence
419
+ // is the adapter's own refusal either way.
420
+ streams.err(`approval: ${spec.name}: ${verdict.message}; nothing was written to ${where}\n`);
421
+ return { ...nothing, code: EXIT_USAGE, skipped: plan.skipped };
422
+ }
423
+ values[spec.name] = collected.value;
424
+ }
425
+ // (6) The cross-field rule, before anything is stored.
426
+ const crossField = hooks.check?.(values, plan.skipped) ?? null;
427
+ if (crossField !== null) {
428
+ streams.err(`approval: ${crossField}; nothing was written to ${where}\n`);
429
+ return { ...nothing, code: EXIT_USAGE, skipped: plan.skipped };
430
+ }
431
+ // (7) The writes, in manifest order, with no rollback on a partial failure.
432
+ const written = [];
433
+ for (const spec of wanted) {
434
+ const value = values[spec.name];
435
+ if (value === undefined)
436
+ continue;
437
+ const stored = destination.write(spec.name, value);
438
+ if (!stored.ok) {
439
+ streams.err(`${renderRefusal(style(), stored.code, stored.message)}\n`);
440
+ streams.err(written.length === 0
441
+ ? ` nothing was written to ${where}\n`
442
+ : ` ${String(written.length)} value(s) had already landed in ${where}: ${written.join(", ")}. They are NOT rolled back — undoing a write this verb did not understand would be a destructive act taken on its own authority — so re-run this verb, or remove them by hand\n`);
443
+ return { code: stored.exitCode, written, skipped: plan.skipped, verified: "not-attempted" };
444
+ }
445
+ written.push(spec.name);
446
+ }
447
+ // (8) The proof, against the far end, over what was just stored.
448
+ let verified = "not-attempted";
449
+ let verifyCode = EXIT_OK;
450
+ if (hooks.verify !== undefined) {
451
+ const outcome = await hooks.verify(values, { written, skipped: plan.skipped });
452
+ if (outcome.declined === true) {
453
+ verified = "declined";
454
+ streams.out(outcome.detail);
455
+ }
456
+ else if (outcome.ok) {
457
+ verified = "passed";
458
+ streams.out(outcome.detail);
459
+ }
460
+ else {
461
+ verified = "failed";
462
+ verifyCode = EXIT_INTEGRITY;
463
+ streams.err(outcome.detail);
464
+ }
465
+ }
466
+ // (9) The report. Names, counts, and a path; never a value.
467
+ streams.out(`\nstored ${String(written.length)} value(s) in ${where}: ${written.join(", ")}\n`);
468
+ reportLeftAlone(streams, where, plan.skipped, phrases);
469
+ if (labels.nextSteps !== undefined && labels.nextSteps.length > 0) {
470
+ streams.out("\n");
471
+ for (const line of labels.nextSteps)
472
+ streams.out(`${line}\n`);
473
+ }
474
+ return { code: verifyCode, written, skipped: plan.skipped, verified };
475
+ }
476
+ //# sourceMappingURL=setup-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-flow.js","sourceRoot":"","sources":["../../../src/cli/setup-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * `approval setup service` — the login service that runs the ambient runtime
3
+ * (SPEC.md §10.2, APRV-110).
4
+ *
5
+ * `approval up` is a foreground process. This verb writes the one file that
6
+ * makes it start at login and stay started: a launchd user agent on macOS, or a
7
+ * systemd user unit on Linux. It is the fifth member of the `setup` family and
8
+ * it obeys the family's rules — interactive by refusal, human-only, appending
9
+ * nothing to the log, editing no policy — with two of its own.
10
+ *
11
+ * ## It never copies a value
12
+ *
13
+ * A unit file is world-readable configuration that survives reboots and gets
14
+ * backed up. A bot token in one is a bot token in a backup. So the unit NAMES
15
+ * where the environment comes from and never carries it:
16
+ *
17
+ * - by default it runs a WRAPPER the human reads in the printed unit —
18
+ * `eval "$(approval env)"` and then `exec approval up` — so the keystore
19
+ * references stay in the keystore and `approval env` stays the only thing
20
+ * that resolves them (SPEC.md §11.1 invariant 7: nothing loads that file
21
+ * implicitly, and here it is a human's line in a file they approved);
22
+ * - or, with `--env-file`, it points at a file THE OPERATOR AUTHORED, which
23
+ * this verb neither writes nor reads.
24
+ *
25
+ * ## It prints the unit before it writes it, and it does not arm it
26
+ *
27
+ * The whole file goes to stdout first, and nothing is written until the operator
28
+ * confirms. Loading it is a separate act: this verb prints the exact
29
+ * `launchctl` or `systemctl` line and stops there. A login service is a standing
30
+ * capability on someone's machine — it will start a process that holds a
31
+ * credential and can put prompts on a phone — and a wizard that armed one as a
32
+ * side effect of writing a file would be making that decision on the operator's
33
+ * behalf. Printing the command costs one paste and buys an explicit act.
34
+ *
35
+ * ## Logs never go into `.approval/`
36
+ *
37
+ * The service's stdout and stderr go where the operator chooses, defaulting to
38
+ * the platform's own log home. A path inside the approval home is REFUSED:
39
+ * `.approval/` holds the log, the queue projection, the payload store, the
40
+ * vault and the environment source map, and a service that appended its console
41
+ * output beside them would put unverifiable text in the one directory whose
42
+ * contents are supposed to mean something.
43
+ */
44
+ import type { Streams } from "./main.js";
45
+ import { type SetupDeps } from "./setup-common.js";
46
+ /** The two service managers this verb writes for. */
47
+ export type ServicePlatform = "launchd" | "systemd";
48
+ /** The conventional names. `--label` overrides both. */
49
+ export declare const LAUNCHD_LABEL = "md.approval.up";
50
+ export declare const SYSTEMD_UNIT = "approval-up";
51
+ /** Which manager this machine has, or `null` when it has neither. */
52
+ export declare function platformFor(platform: NodeJS.Platform): ServicePlatform | null;
53
+ /** Where the unit file belongs, for a platform and a label. */
54
+ export declare function unitPathFor(platform: ServicePlatform, label: string, home: string): string;
55
+ /** Where the platform keeps a user's own logs. */
56
+ export declare function defaultLogsDir(platform: ServicePlatform, home: string): string;
57
+ /** The command that arms the written unit, printed and never run. */
58
+ export declare function armCommand(platform: ServicePlatform, label: string, path: string): string;
59
+ /**
60
+ * The command that disarms it, printed before the file is removed.
61
+ *
62
+ * Takes no path, unlike {@link armCommand}: launchd boots a service OUT by its
63
+ * label, and the plist it was booted in from may already be gone.
64
+ */
65
+ export declare function disarmCommand(platform: ServicePlatform, label: string): string;
66
+ /** Everything a unit is generated from, all of it already resolved. */
67
+ export interface ServicePlan {
68
+ platform: ServicePlatform;
69
+ label: string;
70
+ /** The unit file this would be written to. */
71
+ path: string;
72
+ /** The primary checkout the runtime is started in. */
73
+ workingDir: string;
74
+ /** The `approval` invocation, as argv words. */
75
+ exec: string[];
76
+ /** An operator-authored EnvironmentFile, or `null` for the `approval env` wrapper. */
77
+ envFile: string | null;
78
+ outLog: string;
79
+ errLog: string;
80
+ /** The variable NAMES the runtime will look for. Printed as a comment only. */
81
+ variables: string[];
82
+ }
83
+ /** One `sh -lc` script: the wrapper the operator reads inside the unit. */
84
+ export declare function wrapperScript(plan: ServicePlan): string;
85
+ /** The whole unit file, as the operator will read it and as it will be written. */
86
+ export declare function renderUnit(plan: ServicePlan): string;
87
+ /**
88
+ * The approval invocation this process was started as.
89
+ *
90
+ * `node dist/src/cli/main.js` and the installed `approval` bin are both
91
+ * legitimate, and a unit that named the wrong one would fail at login rather
92
+ * than here. `--exec` overrides for the case neither guess fits.
93
+ */
94
+ export declare function execWords(override: string | null, argv: readonly string[]): string[];
95
+ /** `approval setup service` — write the login unit. HUMAN-ONLY, INTERACTIVE. */
96
+ export declare function commandSetupService(argv: string[], streams: Streams, cwd: string, deps?: SetupDeps): number;