cloving 1.2.0 → 1.4.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 (752) hide show
  1. package/README.md +700 -331
  2. package/dist/src/agent-harness-shell.d.ts +13 -0
  3. package/dist/src/agent-harness-shell.js +93 -0
  4. package/dist/src/agent-harness-versions.d.ts +8 -0
  5. package/dist/src/agent-harness-versions.js +49 -0
  6. package/dist/src/agent-harnesses.d.ts +4 -0
  7. package/dist/src/agent-harnesses.js +13 -0
  8. package/dist/src/authority/command-wait-checks.d.ts +8 -0
  9. package/dist/src/authority/command-wait-checks.js +88 -0
  10. package/dist/src/authority/command-wait-results.d.ts +15 -0
  11. package/dist/src/authority/command-wait-results.js +73 -0
  12. package/dist/src/authority/command-wait-view.d.ts +21 -0
  13. package/dist/src/authority/command-wait-view.js +34 -0
  14. package/dist/src/authority/command-waits.d.ts +39 -0
  15. package/dist/src/authority/command-waits.js +97 -0
  16. package/dist/src/authority/commands.d.ts +1 -0
  17. package/dist/src/authority/commands.js +46 -5
  18. package/dist/src/authority/dispatch-decision.d.ts +8 -0
  19. package/dist/src/authority/dispatch-decision.js +26 -1
  20. package/dist/src/authority/effect-requests.js +6 -3
  21. package/dist/src/authority/effect-results.js +4 -2
  22. package/dist/src/authority/gate-reduction.d.ts +1 -0
  23. package/dist/src/authority/gate-reduction.js +18 -3
  24. package/dist/src/authority/gates.d.ts +2 -1
  25. package/dist/src/authority/gates.js +5 -1
  26. package/dist/src/authority/history-state.d.ts +2 -0
  27. package/dist/src/authority/history-state.js +13 -1
  28. package/dist/src/authority/instants.d.ts +1 -0
  29. package/dist/src/authority/instants.js +21 -0
  30. package/dist/src/authority/operations.js +1 -1
  31. package/dist/src/authority/reduction-state.d.ts +2 -0
  32. package/dist/src/authority/reduction-state.js +5 -0
  33. package/dist/src/authority/reduction.d.ts +1 -1
  34. package/dist/src/authority/reduction.js +30 -1
  35. package/dist/src/authority/status-input.d.ts +3 -1
  36. package/dist/src/authority/status.d.ts +3 -0
  37. package/dist/src/authority/status.js +28 -3
  38. package/dist/src/authority/stop-sequence.d.ts +1 -0
  39. package/dist/src/authority/stop-sequence.js +2 -1
  40. package/dist/src/authority/transitions.d.ts +7 -5
  41. package/dist/src/authority/transitions.js +13 -0
  42. package/dist/src/broker/actor/authority-delivery.js +1 -0
  43. package/dist/src/broker/actor/authority-queries.d.ts +9 -2
  44. package/dist/src/broker/actor/authority-queries.js +29 -5
  45. package/dist/src/broker/actor/authority-receipts.js +11 -1
  46. package/dist/src/broker/actor/authority-session.js +2 -2
  47. package/dist/src/broker/actor/authority-settings.js +4 -0
  48. package/dist/src/broker/actor/authority-upgrades.d.ts +19 -2
  49. package/dist/src/broker/actor/authority-upgrades.js +7 -2
  50. package/dist/src/broker/actor/delivery-intents.d.ts +2 -1
  51. package/dist/src/broker/actor/delivery-intents.js +6 -4
  52. package/dist/src/broker/actor/effect-delivery.d.ts +1 -1
  53. package/dist/src/broker/actor/effect-delivery.js +18 -2
  54. package/dist/src/broker/actor/effect-plan.js +11 -2
  55. package/dist/src/broker/actor/effect-queries.d.ts +5 -0
  56. package/dist/src/broker/actor/effect-queries.js +16 -1
  57. package/dist/src/broker/actor/effect-turn.js +2 -0
  58. package/dist/src/broker/actor/pin-check.js +1 -1
  59. package/dist/src/broker/actor/stop-plan.js +10 -4
  60. package/dist/src/broker/actor/stop-turn.d.ts +2 -0
  61. package/dist/src/broker/actor/stop-turn.js +24 -11
  62. package/dist/src/broker/actor/turn-draft.d.ts +1 -0
  63. package/dist/src/broker/actor/turn-draft.js +4 -0
  64. package/dist/src/broker/actor/turn-state.js +6 -2
  65. package/dist/src/broker/authority-admission.js +80 -7
  66. package/dist/src/broker/authority-restore.d.ts +2 -0
  67. package/dist/src/broker/authority-restore.js +36 -1
  68. package/dist/src/broker/command-wait-restore.d.ts +31 -0
  69. package/dist/src/broker/command-wait-restore.js +86 -0
  70. package/dist/src/broker/decision-restore.d.ts +1 -1
  71. package/dist/src/broker/decision-restore.js +5 -4
  72. package/dist/src/broker/effect-upgrade.d.ts +2 -0
  73. package/dist/src/broker/effect-upgrade.js +8 -2
  74. package/dist/src/broker/socket-address.d.ts +3 -1
  75. package/dist/src/broker/socket-address.js +2 -2
  76. package/dist/src/cli/arguments.d.ts +22 -11
  77. package/dist/src/cli/arguments.js +73 -104
  78. package/dist/src/cli/chat-stores.d.ts +2 -0
  79. package/dist/src/cli/chat-stores.js +113 -0
  80. package/dist/src/cli/client.d.ts +4 -1
  81. package/dist/src/cli/client.js +9 -3
  82. package/dist/src/cli/command-effects.d.ts +7 -0
  83. package/dist/src/cli/command-effects.js +39 -0
  84. package/dist/src/cli/command-requests.d.ts +17 -0
  85. package/dist/src/cli/command-requests.js +43 -0
  86. package/dist/src/cli/command-waits.d.ts +9 -0
  87. package/dist/src/cli/command-waits.js +51 -0
  88. package/dist/src/cli/commands.js +21 -41
  89. package/dist/src/cli/config-arguments.d.ts +11 -0
  90. package/dist/src/cli/config-arguments.js +59 -0
  91. package/dist/src/cli/config-command.d.ts +2 -0
  92. package/dist/src/cli/config-command.js +105 -0
  93. package/dist/src/cli/config-file.d.ts +3 -0
  94. package/dist/src/cli/config-file.js +52 -0
  95. package/dist/src/cli/config-lock.d.ts +7 -0
  96. package/dist/src/cli/config-lock.js +61 -0
  97. package/dist/src/cli/config-notice.d.ts +5 -0
  98. package/dist/src/cli/config-notice.js +46 -0
  99. package/dist/src/cli/doctor-github.d.ts +9 -0
  100. package/dist/src/cli/doctor-github.js +138 -0
  101. package/dist/src/cli/doctor-harness.d.ts +13 -0
  102. package/dist/src/cli/doctor-harness.js +242 -0
  103. package/dist/src/cli/doctor-local.d.ts +18 -0
  104. package/dist/src/cli/doctor-local.js +77 -0
  105. package/dist/src/cli/doctor-runtime.d.ts +15 -0
  106. package/dist/src/cli/doctor-runtime.js +176 -0
  107. package/dist/src/cli/doctor-service.d.ts +1 -0
  108. package/dist/src/cli/doctor-service.js +11 -0
  109. package/dist/src/cli/doctor-workflows.d.ts +6 -0
  110. package/dist/src/cli/doctor-workflows.js +50 -0
  111. package/dist/src/cli/doctor.d.ts +15 -0
  112. package/dist/src/cli/doctor.js +187 -0
  113. package/dist/src/cli/github-ci-progress.d.ts +8 -0
  114. package/dist/src/cli/github-ci-progress.js +83 -0
  115. package/dist/src/cli/github-retry.d.ts +6 -0
  116. package/dist/src/cli/github-retry.js +47 -0
  117. package/dist/src/cli/harness-probes.d.ts +24 -0
  118. package/dist/src/cli/harness-probes.js +183 -0
  119. package/dist/src/cli/harness-processes.d.ts +6 -0
  120. package/dist/src/cli/harness-processes.js +36 -0
  121. package/dist/src/cli/init-command.d.ts +9 -0
  122. package/dist/src/cli/init-command.js +52 -0
  123. package/dist/src/cli/init-prompt-command.d.ts +10 -0
  124. package/dist/src/cli/init-prompt-command.js +145 -0
  125. package/dist/src/cli/init-prompt.d.ts +35 -0
  126. package/dist/src/cli/init-prompt.js +74 -0
  127. package/dist/src/cli/init-selection.d.ts +13 -0
  128. package/dist/src/cli/init-selection.js +75 -0
  129. package/dist/src/cli/main.d.ts +9 -1
  130. package/dist/src/cli/main.js +69 -61
  131. package/dist/src/cli/mcp-server.d.ts +1 -0
  132. package/dist/src/cli/mcp-server.js +156 -0
  133. package/dist/src/cli/mcp-tools.d.ts +15 -0
  134. package/dist/src/cli/mcp-tools.js +80 -0
  135. package/dist/src/cli/phone-arguments.d.ts +14 -0
  136. package/dist/src/cli/phone-arguments.js +37 -0
  137. package/dist/src/cli/phone-client.d.ts +2 -0
  138. package/dist/src/cli/phone-client.js +32 -0
  139. package/dist/src/cli/phone-command.d.ts +13 -0
  140. package/dist/src/cli/phone-command.js +101 -0
  141. package/dist/src/cli/probe-command.d.ts +36 -0
  142. package/dist/src/cli/probe-command.js +59 -0
  143. package/dist/src/cli/project-settings.d.ts +4 -0
  144. package/dist/src/cli/project-settings.js +33 -0
  145. package/dist/src/cli/render.d.ts +2 -1
  146. package/dist/src/cli/render.js +57 -54
  147. package/dist/src/cli/report-ci-jobs.d.ts +23 -0
  148. package/dist/src/cli/report-ci-jobs.js +103 -0
  149. package/dist/src/cli/report-ci-usage.d.ts +9 -0
  150. package/dist/src/cli/report-ci-usage.js +185 -0
  151. package/dist/src/cli/report-ci.d.ts +13 -0
  152. package/dist/src/cli/report-ci.js +74 -0
  153. package/dist/src/cli/report-closures.d.ts +6 -0
  154. package/dist/src/cli/report-closures.js +97 -0
  155. package/dist/src/cli/report-flow.d.ts +7 -0
  156. package/dist/src/cli/report-flow.js +122 -0
  157. package/dist/src/cli/report-github-reader.d.ts +29 -0
  158. package/dist/src/cli/report-github-reader.js +157 -0
  159. package/dist/src/cli/report-github.d.ts +25 -0
  160. package/dist/src/cli/report-github.js +181 -0
  161. package/dist/src/cli/report-operator.d.ts +3 -0
  162. package/dist/src/cli/report-operator.js +40 -0
  163. package/dist/src/cli/report-ready.d.ts +3 -0
  164. package/dist/src/cli/report-ready.js +96 -0
  165. package/dist/src/cli/report-text.d.ts +9 -0
  166. package/dist/src/cli/report-text.js +33 -0
  167. package/dist/src/cli/report.d.ts +18 -0
  168. package/dist/src/cli/report.js +269 -0
  169. package/dist/src/cli/repository-arguments.d.ts +5 -0
  170. package/dist/src/cli/repository-arguments.js +34 -0
  171. package/dist/src/cli/runtime-arguments.d.ts +6 -1
  172. package/dist/src/cli/runtime-arguments.js +22 -2
  173. package/dist/src/cli/runtime-directory.d.ts +6 -2
  174. package/dist/src/cli/runtime-directory.js +72 -14
  175. package/dist/src/cli/schedule-arguments.d.ts +14 -0
  176. package/dist/src/cli/schedule-arguments.js +26 -0
  177. package/dist/src/cli/schedule-render.d.ts +22 -0
  178. package/dist/src/cli/schedule-render.js +73 -0
  179. package/dist/src/cli/terminal-text.d.ts +3 -0
  180. package/dist/src/cli/terminal-text.js +28 -0
  181. package/dist/src/cli/toolchain.d.ts +2 -0
  182. package/dist/src/cli/toolchain.js +22 -2
  183. package/dist/src/cli/usage-render.d.ts +6 -0
  184. package/dist/src/cli/usage-render.js +67 -1
  185. package/dist/src/cli/usage.d.ts +3 -3
  186. package/dist/src/cli/usage.js +119 -50
  187. package/dist/src/cli/watch-actions.d.ts +2 -0
  188. package/dist/src/cli/watch-actions.js +6 -6
  189. package/dist/src/cli/watch-board-view.d.ts +1 -1
  190. package/dist/src/cli/watch-board-view.js +27 -4
  191. package/dist/src/cli/watch-board.d.ts +4 -2
  192. package/dist/src/cli/watch-board.js +58 -35
  193. package/dist/src/cli/watch-card-forms.d.ts +1 -1
  194. package/dist/src/cli/watch-card-forms.js +13 -12
  195. package/dist/src/cli/watch-client.d.ts +1 -1
  196. package/dist/src/cli/watch-client.js +7 -11
  197. package/dist/src/cli/watch-header-view.d.ts +22 -0
  198. package/dist/src/cli/watch-header-view.js +104 -0
  199. package/dist/src/cli/watch-model.d.ts +4 -1
  200. package/dist/src/cli/watch-model.js +34 -15
  201. package/dist/src/cli/watch-page.js +57 -23
  202. package/dist/src/cli/watch-phases.d.ts +12 -3
  203. package/dist/src/cli/watch-phases.js +68 -11
  204. package/dist/src/cli/watch-phone-client.d.ts +1 -0
  205. package/dist/src/cli/watch-phone-client.js +84 -0
  206. package/dist/src/cli/watch-phone-view.d.ts +56 -0
  207. package/dist/src/cli/watch-phone-view.js +113 -0
  208. package/dist/src/cli/watch-phone.d.ts +5 -0
  209. package/dist/src/cli/watch-phone.js +53 -0
  210. package/dist/src/cli/watch-pr-board.js +1 -1
  211. package/dist/src/cli/watch-pr-command.d.ts +1 -0
  212. package/dist/src/cli/watch-pull-request.d.ts +3 -1
  213. package/dist/src/cli/watch-pull-request.js +22 -8
  214. package/dist/src/cli/watch-reads.d.ts +2 -0
  215. package/dist/src/cli/watch-reads.js +17 -16
  216. package/dist/src/cli/watch-render.d.ts +23 -1
  217. package/dist/src/cli/watch-run-input.d.ts +0 -1
  218. package/dist/src/cli/watch-run-input.js +0 -13
  219. package/dist/src/cli/watch-server.js +29 -11
  220. package/dist/src/cli/watch-turn.d.ts +4 -1
  221. package/dist/src/cli/watch-turn.js +37 -1
  222. package/dist/src/cli/watch-usage.js +5 -1
  223. package/dist/src/cli/watch-view.d.ts +4 -21
  224. package/dist/src/cli/watch-view.js +26 -118
  225. package/dist/src/cli.js +165 -28
  226. package/dist/src/command-settings.d.ts +16 -0
  227. package/dist/src/command-settings.js +42 -0
  228. package/dist/src/command-wait.d.ts +4 -0
  229. package/dist/src/command-wait.js +45 -0
  230. package/dist/src/configuration-change.d.ts +18 -0
  231. package/dist/src/configuration-change.js +76 -0
  232. package/dist/src/configuration-display.d.ts +21 -0
  233. package/dist/src/configuration-display.js +69 -0
  234. package/dist/src/configuration-schema.d.ts +58 -0
  235. package/dist/src/configuration-schema.js +163 -0
  236. package/dist/src/daemon/attachment-file.d.ts +6 -0
  237. package/dist/src/daemon/attachment-file.js +86 -0
  238. package/dist/src/daemon/attachments.d.ts +14 -0
  239. package/dist/src/daemon/attachments.js +17 -0
  240. package/dist/src/daemon/claude-recovery.d.ts +50 -0
  241. package/dist/src/daemon/claude-recovery.js +204 -0
  242. package/dist/src/daemon/claude-stream.d.ts +27 -0
  243. package/dist/src/daemon/claude-stream.js +63 -0
  244. package/dist/src/daemon/claude-turn.d.ts +18 -18
  245. package/dist/src/daemon/claude-turn.js +151 -105
  246. package/dist/src/daemon/claude-worker.d.ts +5 -4
  247. package/dist/src/daemon/claude-worker.js +149 -158
  248. package/dist/src/daemon/command-journal.d.ts +5 -0
  249. package/dist/src/daemon/command-journal.js +50 -0
  250. package/dist/src/daemon/command-process.d.ts +28 -0
  251. package/dist/src/daemon/command-process.js +164 -0
  252. package/dist/src/daemon/command-worker.d.ts +19 -0
  253. package/dist/src/daemon/command-worker.js +182 -0
  254. package/dist/src/daemon/cursor-stream.d.ts +4 -0
  255. package/dist/src/daemon/cursor-stream.js +154 -0
  256. package/dist/src/daemon/daemon-adapters.d.ts +60 -0
  257. package/dist/src/daemon/daemon-adapters.js +126 -0
  258. package/dist/src/daemon/daemon-loops.d.ts +16 -0
  259. package/dist/src/daemon/daemon-loops.js +41 -0
  260. package/dist/src/daemon/daemon.d.ts +2 -33
  261. package/dist/src/daemon/daemon.js +133 -131
  262. package/dist/src/daemon/declared-input.d.ts +3 -0
  263. package/dist/src/daemon/declared-input.js +9 -0
  264. package/dist/src/daemon/delivery-router.js +1 -1
  265. package/dist/src/daemon/gemini-stream.d.ts +4 -0
  266. package/dist/src/daemon/gemini-stream.js +129 -0
  267. package/dist/src/daemon/github-attach.d.ts +2 -0
  268. package/dist/src/daemon/github-attach.js +149 -0
  269. package/dist/src/daemon/github-ci-filters.d.ts +6 -0
  270. package/dist/src/daemon/github-ci-filters.js +138 -0
  271. package/dist/src/daemon/github-ci-rerun.d.ts +26 -0
  272. package/dist/src/daemon/github-ci-rerun.js +92 -0
  273. package/dist/src/daemon/github-ci-workflows.d.ts +10 -0
  274. package/dist/src/daemon/github-ci-workflows.js +148 -0
  275. package/dist/src/daemon/github-ci.js +109 -10
  276. package/dist/src/daemon/github-issue-methods.d.ts +2 -0
  277. package/dist/src/daemon/github-issue-methods.js +37 -2
  278. package/dist/src/daemon/github-merge-call.d.ts +4 -1
  279. package/dist/src/daemon/github-merge-call.js +10 -3
  280. package/dist/src/daemon/github-merge.js +58 -26
  281. package/dist/src/daemon/github-methods.js +22 -2
  282. package/dist/src/daemon/github-operation.d.ts +5 -0
  283. package/dist/src/daemon/github-operation.js +6 -0
  284. package/dist/src/daemon/github-retry.js +8 -44
  285. package/dist/src/daemon/github-worker.d.ts +4 -0
  286. package/dist/src/daemon/github-worker.js +6 -0
  287. package/dist/src/daemon/issue-queue.d.ts +1 -0
  288. package/dist/src/daemon/issue-queue.js +16 -34
  289. package/dist/src/daemon/notify-events.d.ts +6 -0
  290. package/dist/src/daemon/notify-events.js +84 -0
  291. package/dist/src/daemon/notify-journal.js +1 -1
  292. package/dist/src/daemon/notify-message.d.ts +4 -1
  293. package/dist/src/daemon/notify-message.js +36 -0
  294. package/dist/src/daemon/notify.d.ts +1 -1
  295. package/dist/src/daemon/notify.js +7 -78
  296. package/dist/src/daemon/opencode-stream.d.ts +5 -0
  297. package/dist/src/daemon/opencode-stream.js +87 -0
  298. package/dist/src/daemon/operation-journal.d.ts +1 -0
  299. package/dist/src/daemon/queue-status.d.ts +10 -0
  300. package/dist/src/daemon/queue-status.js +51 -0
  301. package/dist/src/daemon/resume-index-lock.d.ts +13 -0
  302. package/dist/src/daemon/resume-index-lock.js +160 -0
  303. package/dist/src/daemon/resume-worktree.d.ts +7 -0
  304. package/dist/src/daemon/resume-worktree.js +29 -0
  305. package/dist/src/daemon/retry-worktree.d.ts +18 -0
  306. package/dist/src/daemon/retry-worktree.js +139 -0
  307. package/dist/src/daemon/retrying-turn.d.ts +2 -10
  308. package/dist/src/daemon/retrying-turn.js +145 -141
  309. package/dist/src/daemon/schedule-control.d.ts +26 -0
  310. package/dist/src/daemon/schedule-control.js +110 -0
  311. package/dist/src/daemon/schedule-journal.d.ts +6 -0
  312. package/dist/src/daemon/schedule-journal.js +120 -0
  313. package/dist/src/daemon/text-output.d.ts +18 -0
  314. package/dist/src/daemon/text-output.js +44 -0
  315. package/dist/src/daemon/ticket-registration.d.ts +7 -14
  316. package/dist/src/daemon/ticket-registration.js +93 -114
  317. package/dist/src/daemon/turn-attempt-journal.d.ts +38 -0
  318. package/dist/src/daemon/turn-attempt-journal.js +136 -0
  319. package/dist/src/daemon/turn-attempts.d.ts +47 -0
  320. package/dist/src/daemon/turn-attempts.js +166 -0
  321. package/dist/src/daemon/turn-command.d.ts +10 -0
  322. package/dist/src/daemon/turn-command.js +33 -0
  323. package/dist/src/daemon/turn-report.d.ts +25 -0
  324. package/dist/src/daemon/turn-report.js +118 -0
  325. package/dist/src/daemon/work-tree.d.ts +11 -1
  326. package/dist/src/daemon/work-tree.js +35 -12
  327. package/dist/src/daemon/worker-profile.d.ts +8 -0
  328. package/dist/src/daemon/worker-profile.js +40 -0
  329. package/dist/src/daemon/workflow-generations.d.ts +32 -0
  330. package/dist/src/daemon/workflow-generations.js +57 -0
  331. package/dist/src/daemon/workflow-replay.d.ts +16 -0
  332. package/dist/src/daemon/workflow-replay.js +58 -0
  333. package/dist/src/daemon/workflow-schedules.d.ts +30 -0
  334. package/dist/src/daemon/workflow-schedules.js +238 -0
  335. package/dist/src/daemon/worktree-processes.d.ts +9 -0
  336. package/dist/src/daemon/worktree-processes.js +151 -0
  337. package/dist/src/decision-wait.d.ts +1 -0
  338. package/dist/src/decision-wait.js +3 -0
  339. package/dist/src/delivery-backoff.d.ts +1 -0
  340. package/dist/src/delivery-backoff.js +3 -0
  341. package/dist/src/doctor-report.d.ts +22 -0
  342. package/dist/src/doctor-report.js +63 -0
  343. package/dist/src/execution-pin.d.ts +5 -0
  344. package/dist/src/execution-pin.js +67 -4
  345. package/dist/src/grok-result.d.ts +12 -0
  346. package/dist/src/grok-result.js +61 -0
  347. package/dist/src/harness-defaults.d.ts +35 -0
  348. package/dist/src/harness-defaults.js +121 -0
  349. package/dist/src/harness-start.d.ts +15 -0
  350. package/dist/src/harness-start.js +37 -0
  351. package/dist/src/host/command-wait.d.ts +38 -0
  352. package/dist/src/host/command-wait.js +115 -0
  353. package/dist/src/host/decision-resume.d.ts +35 -0
  354. package/dist/src/host/decision-resume.js +86 -0
  355. package/dist/src/host/gate-bridge.d.ts +48 -0
  356. package/dist/src/host/gate-bridge.js +124 -0
  357. package/dist/src/host/run-wait.d.ts +26 -0
  358. package/dist/src/host/run-wait.js +37 -0
  359. package/dist/src/host/start-delivery.d.ts +6 -8
  360. package/dist/src/host/start-delivery.js +13 -18
  361. package/dist/src/host/step-bridge-host.d.ts +8 -20
  362. package/dist/src/host/step-bridge-host.js +65 -58
  363. package/dist/src/merge-request.d.ts +19 -0
  364. package/dist/src/merge-request.js +32 -0
  365. package/dist/src/operation-identity.d.ts +1 -0
  366. package/dist/src/operation-identity.js +4 -0
  367. package/dist/src/phone/canonical-json.d.ts +1 -0
  368. package/dist/src/phone/canonical-json.js +16 -0
  369. package/dist/src/phone/phone-link.d.ts +7 -0
  370. package/dist/src/phone/phone-link.js +21 -0
  371. package/dist/src/phone/qr-data.d.ts +8 -0
  372. package/dist/src/phone/qr-data.js +133 -0
  373. package/dist/src/phone/qr-matrix.d.ts +6 -0
  374. package/dist/src/phone/qr-matrix.js +175 -0
  375. package/dist/src/phone/qr-penalty.d.ts +3 -0
  376. package/dist/src/phone/qr-penalty.js +67 -0
  377. package/dist/src/phone/qr-picture.d.ts +5 -0
  378. package/dist/src/phone/qr-picture.js +24 -0
  379. package/dist/src/private-config.schema.json +303 -0
  380. package/dist/src/project-config.schema.json +105 -0
  381. package/dist/src/project-settings.d.ts +19 -0
  382. package/dist/src/project-settings.js +133 -0
  383. package/dist/src/queue-spend.d.ts +4 -0
  384. package/dist/src/queue-spend.js +21 -0
  385. package/dist/src/relay/answer-check.d.ts +24 -0
  386. package/dist/src/relay/answer-check.js +145 -0
  387. package/dist/src/relay/answer-inbox.d.ts +15 -0
  388. package/dist/src/relay/answer-inbox.js +173 -0
  389. package/dist/src/relay/daemon-keys.d.ts +16 -0
  390. package/dist/src/relay/daemon-keys.js +75 -0
  391. package/dist/src/relay/decision-check.d.ts +3 -0
  392. package/dist/src/relay/decision-check.js +77 -0
  393. package/dist/src/relay/decision-close.d.ts +6 -0
  394. package/dist/src/relay/decision-close.js +72 -0
  395. package/dist/src/relay/decision-envelopes.d.ts +29 -0
  396. package/dist/src/relay/decision-envelopes.js +93 -0
  397. package/dist/src/relay/decision-watch.d.ts +14 -0
  398. package/dist/src/relay/decision-watch.js +68 -0
  399. package/dist/src/relay/envelope-post.d.ts +8 -0
  400. package/dist/src/relay/envelope-post.js +71 -0
  401. package/dist/src/relay/envelope.d.ts +28 -0
  402. package/dist/src/relay/envelope.js +53 -0
  403. package/dist/src/relay/hpke.d.ts +25 -0
  404. package/dist/src/relay/hpke.js +108 -0
  405. package/dist/src/relay/pairing-checks.d.ts +42 -0
  406. package/dist/src/relay/pairing-checks.js +172 -0
  407. package/dist/src/relay/pairing-follow.d.ts +8 -0
  408. package/dist/src/relay/pairing-follow.js +95 -0
  409. package/dist/src/relay/pairing-session.d.ts +29 -0
  410. package/dist/src/relay/pairing-session.js +87 -0
  411. package/dist/src/relay/phone-delivery.d.ts +51 -0
  412. package/dist/src/relay/phone-delivery.js +139 -0
  413. package/dist/src/relay/phone-devices.d.ts +36 -0
  414. package/dist/src/relay/phone-devices.js +46 -0
  415. package/dist/src/relay/phone-inbox.d.ts +18 -0
  416. package/dist/src/relay/phone-inbox.js +17 -0
  417. package/dist/src/relay/phone-operations.d.ts +18 -0
  418. package/dist/src/relay/phone-operations.js +121 -0
  419. package/dist/src/relay/phone-outbox.d.ts +21 -0
  420. package/dist/src/relay/phone-outbox.js +25 -0
  421. package/dist/src/relay/phone-socket.d.ts +6 -0
  422. package/dist/src/relay/phone-socket.js +63 -0
  423. package/dist/src/relay/relay-control.d.ts +7 -0
  424. package/dist/src/relay/relay-control.js +24 -0
  425. package/dist/src/relay/relay-files.d.ts +2 -0
  426. package/dist/src/relay/relay-files.js +23 -0
  427. package/dist/src/relay/relay-heartbeat.d.ts +17 -0
  428. package/dist/src/relay/relay-heartbeat.js +81 -0
  429. package/dist/src/relay/relay-http.d.ts +14 -0
  430. package/dist/src/relay/relay-http.js +63 -0
  431. package/dist/src/relay/relay-registration.d.ts +15 -0
  432. package/dist/src/relay/relay-registration.js +63 -0
  433. package/dist/src/relay/relay-service.d.ts +28 -0
  434. package/dist/src/relay/relay-service.js +218 -0
  435. package/dist/src/relay/relay-store.d.ts +48 -0
  436. package/dist/src/relay/relay-store.js +131 -0
  437. package/dist/src/relay/sealed-post.d.ts +25 -0
  438. package/dist/src/relay/sealed-post.js +52 -0
  439. package/dist/src/relay.d.ts +1 -0
  440. package/dist/src/relay.js +8 -0
  441. package/dist/src/report-ci.d.ts +164 -0
  442. package/dist/src/report-ci.js +32 -0
  443. package/dist/src/report-effects.d.ts +15 -0
  444. package/dist/src/report-effects.js +212 -0
  445. package/dist/src/report-flow-types.d.ts +38 -0
  446. package/dist/src/report-flow-types.js +7 -0
  447. package/dist/src/report-flow.d.ts +43 -0
  448. package/dist/src/report-flow.js +193 -0
  449. package/dist/src/report-operator.d.ts +67 -0
  450. package/dist/src/report-operator.js +25 -0
  451. package/dist/src/report-quality.d.ts +221 -0
  452. package/dist/src/report-quality.js +94 -0
  453. package/dist/src/report-ready.d.ts +23 -0
  454. package/dist/src/report-ready.js +117 -0
  455. package/dist/src/report-statistics.d.ts +51 -0
  456. package/dist/src/report-statistics.js +106 -0
  457. package/dist/src/report.d.ts +712 -0
  458. package/dist/src/report.js +234 -0
  459. package/dist/src/repository-identity.d.ts +4 -0
  460. package/dist/src/repository-identity.js +4 -0
  461. package/dist/src/review-subject.d.ts +41 -0
  462. package/dist/src/review-subject.js +91 -0
  463. package/dist/src/run-wait.d.ts +23 -0
  464. package/dist/src/run-wait.js +20 -0
  465. package/dist/src/schedule-progress.d.ts +33 -0
  466. package/dist/src/schedule-progress.js +45 -0
  467. package/dist/src/service/active-tickets.d.ts +4 -0
  468. package/dist/src/service/active-tickets.js +49 -0
  469. package/dist/src/service/command-effects.d.ts +4 -0
  470. package/dist/src/service/command-effects.js +16 -0
  471. package/dist/src/service/command-waits.d.ts +34 -0
  472. package/dist/src/service/command-waits.js +86 -0
  473. package/dist/src/service/decision-handler.d.ts +4 -0
  474. package/dist/src/service/decision-handler.js +39 -4
  475. package/dist/src/service/expiry.js +2 -0
  476. package/dist/src/service/gateway.js +21 -4
  477. package/dist/src/service/queue-spend.d.ts +6 -0
  478. package/dist/src/service/queue-spend.js +68 -0
  479. package/dist/src/service/registry.d.ts +16 -3
  480. package/dist/src/service/registry.js +34 -3
  481. package/dist/src/service/replies.d.ts +16 -1
  482. package/dist/src/service/replies.js +23 -0
  483. package/dist/src/service/run-handlers.js +35 -56
  484. package/dist/src/service/run-metadata.d.ts +22 -0
  485. package/dist/src/service/run-metadata.js +138 -0
  486. package/dist/src/service/run-waits.d.ts +3 -0
  487. package/dist/src/service/run-waits.js +41 -0
  488. package/dist/src/service/service.d.ts +22 -2
  489. package/dist/src/service/service.js +29 -13
  490. package/dist/src/service/submission-handler.d.ts +0 -1
  491. package/dist/src/service/submission-handler.js +22 -36
  492. package/dist/src/service/worker-port.d.ts +1 -0
  493. package/dist/src/service/worker-port.js +9 -1
  494. package/dist/src/service/worker-totals.d.ts +2 -0
  495. package/dist/src/service/worker-totals.js +9 -24
  496. package/dist/src/step-bridge.d.ts +43 -0
  497. package/dist/src/steps/command-wait.d.ts +12 -0
  498. package/dist/src/steps/command-wait.js +26 -0
  499. package/dist/src/steps/merge-by-person.d.ts +2 -0
  500. package/dist/src/steps/merge-by-person.js +18 -0
  501. package/dist/src/steps/merge-when-green.d.ts +2 -0
  502. package/dist/src/steps/merge-when-green.js +62 -0
  503. package/dist/src/steps/open-decision-wait.d.ts +2 -0
  504. package/dist/src/steps/open-decision-wait.js +8 -0
  505. package/dist/src/steps/review-by-agent.d.ts +5 -0
  506. package/dist/src/steps/review-by-agent.js +124 -0
  507. package/dist/src/steps/review-by-person.d.ts +4 -0
  508. package/dist/src/steps/review-by-person.js +19 -0
  509. package/dist/src/steps/review-subject.d.ts +2 -0
  510. package/dist/src/steps/review-subject.js +11 -0
  511. package/dist/src/steps/run-command.d.ts +2 -0
  512. package/dist/src/steps/run-command.js +15 -0
  513. package/dist/src/steps/sleep.d.ts +3 -0
  514. package/dist/src/steps/sleep.js +19 -0
  515. package/dist/src/steps/wait-for-command.d.ts +3 -0
  516. package/dist/src/steps/wait-for-command.js +17 -0
  517. package/dist/src/steps/wait-for-decision.d.ts +2 -0
  518. package/dist/src/steps/wait-for-decision.js +71 -0
  519. package/dist/src/steps/wait-for-run.d.ts +5 -0
  520. package/dist/src/steps/wait-for-run.js +9 -0
  521. package/dist/src/storage/command-wait-rows.d.ts +30 -0
  522. package/dist/src/storage/command-wait-rows.js +96 -0
  523. package/dist/src/storage/decision-snapshots.d.ts +9 -1
  524. package/dist/src/storage/decision-snapshots.js +22 -2
  525. package/dist/src/storage/domain-changes.d.ts +2 -0
  526. package/dist/src/storage/domain-changes.js +3 -0
  527. package/dist/src/storage/domain-schema.d.ts +13 -1
  528. package/dist/src/storage/domain-schema.js +31 -4
  529. package/dist/src/storage/effect-schema.d.ts +1 -0
  530. package/dist/src/storage/effect-schema.js +5 -0
  531. package/dist/src/submission.d.ts +4 -0
  532. package/dist/src/submission.js +6 -2
  533. package/dist/src/testing-requests.d.ts +15 -0
  534. package/dist/src/testing-requests.js +93 -0
  535. package/dist/src/testing.d.ts +23 -0
  536. package/dist/src/testing.js +211 -0
  537. package/dist/src/ticket-status-stream.d.ts +9 -0
  538. package/dist/src/ticket-status-stream.js +94 -0
  539. package/dist/src/token-prices.d.ts +12 -4
  540. package/dist/src/token-prices.js +15 -2
  541. package/dist/src/turn-profile.d.ts +1 -0
  542. package/dist/src/turn-profile.js +8 -1
  543. package/dist/src/worker-usage.d.ts +17 -0
  544. package/dist/src/worker-usage.js +60 -0
  545. package/dist/src/workflow-admission.d.ts +5 -0
  546. package/dist/src/workflow-candidate.d.ts +8 -2
  547. package/dist/src/workflow-candidate.js +59 -6
  548. package/dist/src/workflow-contracts.d.ts +1 -0
  549. package/dist/src/workflow-contracts.js +9 -2
  550. package/dist/src/workflow-declaration.d.ts +21 -3
  551. package/dist/src/workflow-declaration.js +77 -9
  552. package/dist/src/workflow-discovery.d.ts +3 -13
  553. package/dist/src/workflow-discovery.js +5 -14
  554. package/dist/src/workflow-refusals.js +3 -1
  555. package/dist/src/workflow-schedule.d.ts +22 -0
  556. package/dist/src/workflow-schedule.js +53 -0
  557. package/dist/src/workflows.d.ts +12 -2
  558. package/dist/src/workflows.js +9 -1
  559. package/dist/tools/admit-workflow.d.ts +1 -0
  560. package/dist/tools/admit-workflow.js +18 -5
  561. package/dist/tools/doctor-adoption.d.ts +1 -0
  562. package/dist/tools/doctor-adoption.js +11 -0
  563. package/dist/tools/project-configuration.d.ts +4 -0
  564. package/dist/tools/project-configuration.js +47 -0
  565. package/dist/tools/red-green-command.d.ts +1 -0
  566. package/dist/tools/red-green-command.js +174 -0
  567. package/dist/tools/red-green-process.d.ts +10 -0
  568. package/dist/tools/red-green-process.js +59 -0
  569. package/dist/tools/self-host-processes.d.ts +3 -0
  570. package/dist/tools/self-host-processes.js +63 -33
  571. package/dist/tools/self-host-project.d.ts +4 -0
  572. package/dist/tools/self-host-project.js +42 -60
  573. package/dist/tools/self-host-runtime.d.ts +16 -0
  574. package/dist/tools/self-host-runtime.js +60 -0
  575. package/dist/tools/self-host-workflows.d.ts +1 -0
  576. package/dist/tools/self-host-workflows.js +36 -1
  577. package/dist/tools/self-host.js +128 -71
  578. package/dist/tools/template-command.d.ts +1 -0
  579. package/dist/tools/template-command.js +160 -0
  580. package/dist/tools/template-copy.d.ts +11 -0
  581. package/dist/tools/template-copy.js +130 -0
  582. package/dist/tools/template-files.d.ts +17 -0
  583. package/dist/tools/template-files.js +74 -0
  584. package/dist/tools/workflow-bundles.js +1 -0
  585. package/dist/tools/workflow-candidate-counts.d.ts +6 -2
  586. package/dist/tools/workflow-candidate-counts.js +31 -16
  587. package/dist/tools/workflow-candidate-fields.d.ts +5 -0
  588. package/dist/tools/workflow-candidate-fields.js +24 -0
  589. package/dist/tools/workflow-candidate-helper-counts.d.ts +10 -0
  590. package/dist/tools/workflow-candidate-helper-counts.js +129 -0
  591. package/dist/tools/workflow-candidate-program.d.ts +2 -0
  592. package/dist/tools/workflow-candidate-program.js +36 -8
  593. package/dist/tools/workflow-candidate-shape.d.ts +3 -0
  594. package/dist/tools/workflow-candidate-shape.js +90 -0
  595. package/dist/tools/workflow-candidate-source.js +92 -16
  596. package/dist/tools/workflow-candidate-syntax.d.ts +9 -3
  597. package/dist/tools/workflow-candidate-syntax.js +83 -109
  598. package/dist/tools/workflow-command.d.ts +1 -0
  599. package/dist/tools/workflow-command.js +142 -0
  600. package/dist/tools/workflow-folder-capture.d.ts +1 -0
  601. package/dist/tools/workflow-folder-capture.js +47 -2
  602. package/dist/tools/workflow-folders.d.ts +18 -3
  603. package/dist/tools/workflow-folders.js +60 -7
  604. package/dist/tools/workflow-test-hook.d.ts +7 -0
  605. package/dist/tools/workflow-test-hook.js +16 -0
  606. package/dist/tools/workflow-test-loader.d.ts +1 -0
  607. package/dist/tools/workflow-test-loader.js +10 -0
  608. package/package.json +60 -10
  609. package/templates/develop/README.md +90 -0
  610. package/templates/develop/develop/accept.ts +11 -0
  611. package/templates/develop/develop/flow-tests.ts +394 -0
  612. package/templates/develop/develop/local.ts +40 -0
  613. package/templates/develop/develop/option-tests.ts +174 -0
  614. package/templates/develop/develop/partial-choice.ts +29 -0
  615. package/templates/develop/develop/partial.ts +28 -0
  616. package/templates/develop/develop/pull.ts +156 -0
  617. package/templates/develop/develop/queue-partial.ts +39 -0
  618. package/templates/develop/develop/refusal-tests.ts +251 -0
  619. package/templates/develop/develop/report.ts +156 -0
  620. package/templates/develop/develop/round.ts +40 -0
  621. package/templates/develop/develop/scenarios.ts +87 -0
  622. package/templates/develop/develop/turn.ts +68 -0
  623. package/templates/develop/develop.declaration.json +24 -0
  624. package/templates/develop/develop.test.ts +287 -0
  625. package/templates/develop/develop.ts +30 -0
  626. package/templates/develop/template.json +153 -0
  627. package/templates/idea-to-issue/README.md +27 -0
  628. package/templates/idea-to-issue/idea-to-issue/effects.ts +52 -0
  629. package/templates/idea-to-issue/idea-to-issue/leave.ts +10 -0
  630. package/templates/idea-to-issue/idea-to-issue/next.ts +29 -0
  631. package/templates/idea-to-issue/idea-to-issue/post-person.ts +18 -0
  632. package/templates/idea-to-issue/idea-to-issue/post.ts +50 -0
  633. package/templates/idea-to-issue/idea-to-issue/queue.ts +27 -0
  634. package/templates/idea-to-issue/idea-to-issue/review.ts +42 -0
  635. package/templates/idea-to-issue/idea-to-issue/scenarios.ts +50 -0
  636. package/templates/idea-to-issue/idea-to-issue/turn.ts +40 -0
  637. package/templates/idea-to-issue/idea-to-issue.declaration.json +16 -0
  638. package/templates/idea-to-issue/idea-to-issue.test.ts +79 -0
  639. package/templates/idea-to-issue/idea-to-issue.ts +49 -0
  640. package/templates/idea-to-issue/template.json +81 -0
  641. package/templates/review-day/README.md +97 -0
  642. package/templates/review-day/review-day/critique.ts +58 -0
  643. package/templates/review-day/review-day/decision.ts +29 -0
  644. package/templates/review-day/review-day/facts.ts +69 -0
  645. package/templates/review-day/review-day/label.ts +29 -0
  646. package/templates/review-day/review-day/next.ts +28 -0
  647. package/templates/review-day/review-day/post.ts +27 -0
  648. package/templates/review-day/review-day/report.ts +98 -0
  649. package/templates/review-day/review-day/rules.ts +12 -0
  650. package/templates/review-day/review-day/scenarios.ts +76 -0
  651. package/templates/review-day/review-day/turn.ts +73 -0
  652. package/templates/review-day/review-day.declaration.json +16 -0
  653. package/templates/review-day/review-day.test.ts +362 -0
  654. package/templates/review-day/review-day.ts +37 -0
  655. package/templates/review-day/template.json +56 -0
  656. package/dist/src/chats/analysis-batches.d.ts +0 -42
  657. package/dist/src/chats/analysis-batches.js +0 -97
  658. package/dist/src/chats/analysis-checkpoint.d.ts +0 -29
  659. package/dist/src/chats/analysis-checkpoint.js +0 -31
  660. package/dist/src/chats/analysis-contract.d.ts +0 -80
  661. package/dist/src/chats/analysis-contract.js +0 -16
  662. package/dist/src/chats/analysis-data.d.ts +0 -3
  663. package/dist/src/chats/analysis-data.js +0 -85
  664. package/dist/src/chats/analysis-input.d.ts +0 -18
  665. package/dist/src/chats/analysis-input.js +0 -97
  666. package/dist/src/chats/analysis-links.d.ts +0 -2
  667. package/dist/src/chats/analysis-links.js +0 -25
  668. package/dist/src/chats/analysis-merge.d.ts +0 -16
  669. package/dist/src/chats/analysis-merge.js +0 -134
  670. package/dist/src/chats/analysis-prompt.d.ts +0 -18
  671. package/dist/src/chats/analysis-prompt.js +0 -42
  672. package/dist/src/chats/analysis-proposal.d.ts +0 -4
  673. package/dist/src/chats/analysis-proposal.js +0 -41
  674. package/dist/src/chats/analysis-provenance.d.ts +0 -4
  675. package/dist/src/chats/analysis-provenance.js +0 -99
  676. package/dist/src/chats/analysis-shape.d.ts +0 -4
  677. package/dist/src/chats/analysis-shape.js +0 -235
  678. package/dist/src/chats/analysis.d.ts +0 -3
  679. package/dist/src/chats/analysis.js +0 -42
  680. package/dist/src/chats/corpus-input.d.ts +0 -5
  681. package/dist/src/chats/corpus-input.js +0 -288
  682. package/dist/src/chats/destination.d.ts +0 -4
  683. package/dist/src/chats/destination.js +0 -96
  684. package/dist/src/chats/import.d.ts +0 -15
  685. package/dist/src/chats/import.js +0 -243
  686. package/dist/src/chats/input-file.d.ts +0 -3
  687. package/dist/src/chats/input-file.js +0 -32
  688. package/dist/src/chats/normalize.d.ts +0 -29
  689. package/dist/src/chats/normalize.js +0 -155
  690. package/dist/src/chats/previous-import.d.ts +0 -5
  691. package/dist/src/chats/previous-import.js +0 -34
  692. package/dist/src/chats/reader.d.ts +0 -21
  693. package/dist/src/chats/reader.js +0 -118
  694. package/dist/src/chats/redact-import.d.ts +0 -14
  695. package/dist/src/chats/redact-import.js +0 -141
  696. package/dist/src/chats/redaction.d.ts +0 -41
  697. package/dist/src/chats/redaction.js +0 -161
  698. package/dist/src/chats/reference-mapping.d.ts +0 -16
  699. package/dist/src/chats/reference-mapping.js +0 -153
  700. package/dist/src/chats/revision-input.d.ts +0 -3
  701. package/dist/src/chats/revision-input.js +0 -180
  702. package/dist/src/chats/revision.d.ts +0 -48
  703. package/dist/src/chats/revision.js +0 -94
  704. package/dist/src/chats/selection.d.ts +0 -25
  705. package/dist/src/chats/selection.js +0 -109
  706. package/dist/src/chats/source.d.ts +0 -23
  707. package/dist/src/chats/source.js +0 -135
  708. package/dist/src/chats/structure.d.ts +0 -57
  709. package/dist/src/chats/structure.js +0 -216
  710. package/dist/src/chats/workflow-generation-projection.d.ts +0 -8
  711. package/dist/src/chats/workflow-generation-projection.js +0 -75
  712. package/dist/src/chats/workflow-generation-source.d.ts +0 -25
  713. package/dist/src/chats/workflow-generation-source.js +0 -124
  714. package/dist/src/chats/workflow-generation-text.d.ts +0 -23
  715. package/dist/src/chats/workflow-generation-text.js +0 -74
  716. package/dist/src/chats/workflow-generation.d.ts +0 -69
  717. package/dist/src/chats/workflow-generation.js +0 -142
  718. package/dist/src/cli/watch-start-view.d.ts +0 -18
  719. package/dist/src/cli/watch-start-view.js +0 -77
  720. package/dist/src/daemon/analysis-launch.d.ts +0 -5
  721. package/dist/src/daemon/analysis-launch.js +0 -81
  722. package/dist/src/daemon/analysis-token.d.ts +0 -6
  723. package/dist/src/daemon/analysis-token.js +0 -88
  724. package/dist/src/daemon/analysis-worker.d.ts +0 -20
  725. package/dist/src/daemon/analysis-worker.js +0 -271
  726. package/dist/src/daemon/chats-batch-binding.d.ts +0 -23
  727. package/dist/src/daemon/chats-batch-binding.js +0 -99
  728. package/dist/src/daemon/chats-capture.d.ts +0 -18
  729. package/dist/src/daemon/chats-capture.js +0 -194
  730. package/dist/src/daemon/chats-checkpoints.d.ts +0 -41
  731. package/dist/src/daemon/chats-checkpoints.js +0 -186
  732. package/dist/src/daemon/chats-files.d.ts +0 -42
  733. package/dist/src/daemon/chats-files.js +0 -252
  734. package/dist/src/daemon/chats-follow-up.d.ts +0 -38
  735. package/dist/src/daemon/chats-follow-up.js +0 -180
  736. package/dist/src/daemon/chats-question.d.ts +0 -15
  737. package/dist/src/daemon/chats-question.js +0 -93
  738. package/dist/src/daemon/chats-worker.d.ts +0 -13
  739. package/dist/src/daemon/chats-worker.js +0 -201
  740. package/dist/src/steps/decision-gate.d.ts +0 -2
  741. package/dist/src/steps/decision-gate.js +0 -8
  742. package/dist/workflows/analyze-chats.d.ts +0 -15
  743. package/dist/workflows/analyze-chats.declaration.json +0 -22
  744. package/dist/workflows/analyze-chats.js +0 -250
  745. package/dist/workflows/develop-prd.d.ts +0 -7
  746. package/dist/workflows/develop-prd.js +0 -165
  747. package/dist/workflows/develop-ticket.d.ts +0 -9
  748. package/dist/workflows/develop-ticket.js +0 -207
  749. package/dist/workflows/issue-labels.d.ts +0 -16
  750. package/dist/workflows/issue-labels.js +0 -70
  751. package/dist/workflows/ticket-prompts.d.ts +0 -35
  752. package/dist/workflows/ticket-prompts.js +0 -143
@@ -0,0 +1,124 @@
1
+ import { createHash } from "node:crypto";
2
+ import { setTimeout as delay } from "node:timers/promises";
3
+ import { gateKey } from "../authority/gates.js";
4
+ import { decisionToken } from "../decision-wait.js";
5
+ import { record } from "../protocol.js";
6
+ const committed = ["accepted", "duplicate"];
7
+ function promptDigest(request) {
8
+ return `sha256:${createHash("sha256").update(request.prompt).digest("hex")}`;
9
+ }
10
+ function sameHookSubject(value, request) {
11
+ const gate = record(value);
12
+ return (gate?.["subject"] === promptDigest(request) &&
13
+ gate["kind"] === request.kind &&
14
+ gate["wait"] === "hook");
15
+ }
16
+ async function paused(hold, milliseconds) {
17
+ await delay(milliseconds, undefined, { signal: hold.ports.stopped }).catch(() => undefined);
18
+ if (hold.ports.stopped.aborted)
19
+ await new Promise(() => undefined);
20
+ }
21
+ function verdict(hold, receipt) {
22
+ if (receipt === undefined || receipt.kind === "failed")
23
+ return hold.timing.retryMilliseconds;
24
+ if (committed.includes(receipt.kind))
25
+ return "committed";
26
+ if (receipt.reason === "service-busy")
27
+ return hold.timing.retryMilliseconds;
28
+ if (receipt.reason === "stale-revision")
29
+ return hold.timing.pollMilliseconds;
30
+ return { kind: "refused", reason: receipt.reason ?? receipt.kind };
31
+ }
32
+ async function gateCommand(hold, send) {
33
+ for (;;) {
34
+ await paused(hold, 0);
35
+ const result = verdict(hold, await send().catch(() => undefined));
36
+ if (result === "committed")
37
+ return undefined;
38
+ if (typeof result !== "number")
39
+ return result;
40
+ await paused(hold, result);
41
+ }
42
+ }
43
+ async function opening(hold, subject) {
44
+ const { runId, transport, request } = subject;
45
+ const { gateId, kind, prompt } = request;
46
+ const state = await hold.ports.state();
47
+ const run = state.runs[runId];
48
+ if (run === undefined)
49
+ return { kind: "rejected", reason: "unknown-run" };
50
+ const key = gateKey(runId, gateId);
51
+ const exists = Object.hasOwn(state.gates, key);
52
+ if (exists &&
53
+ subject.waitMode === "hook" &&
54
+ !sameHookSubject(state.gates[key], request))
55
+ return { kind: "rejected", reason: "gate-subject-changed" };
56
+ if (exists)
57
+ return { kind: "duplicate" };
58
+ return await hold.ports.openGate({
59
+ ...(subject.waitMode === undefined ? {} : { waitMode: subject.waitMode }),
60
+ runId,
61
+ commandId: `${transport}:open:${gateId}`,
62
+ expectedRevision: run.revision,
63
+ gateId,
64
+ kind,
65
+ prompt,
66
+ subject: promptDigest(request),
67
+ ...(request.expiresAt === undefined
68
+ ? {}
69
+ : { expiresAt: request.expiresAt }),
70
+ });
71
+ }
72
+ export async function openBridgeGate(ports, subject) {
73
+ const hold = {
74
+ ports,
75
+ timing: ports.timing ?? { pollMilliseconds: 20, retryMilliseconds: 1000 },
76
+ };
77
+ const refusal = await gateCommand(hold, () => opening(hold, subject));
78
+ if (refusal !== undefined)
79
+ return refusal;
80
+ if (subject.waitMode === "hook")
81
+ return {
82
+ kind: "opened",
83
+ decisionId: decisionToken(subject.runId, subject.request.gateId),
84
+ };
85
+ const waited = await gateCommand(hold, () => ports.registerWait({
86
+ runId: subject.runId,
87
+ commandId: `${subject.transport}:wait:${subject.request.gateId}`,
88
+ gateId: subject.request.gateId,
89
+ }));
90
+ return waited ?? { kind: "opened", decisionId: subject.request.gateId };
91
+ }
92
+ export async function waitForBridgeDecision(ports, subject) {
93
+ const hold = {
94
+ ports,
95
+ timing: ports.timing ?? { pollMilliseconds: 20, retryMilliseconds: 1000 },
96
+ };
97
+ await paused(hold, 0);
98
+ const state = await ports.state();
99
+ const key = gateKey(subject.runId, subject.request.gateId);
100
+ const gate = state.gates[key];
101
+ if (Object.hasOwn(state.gates, key) &&
102
+ !sameHookSubject(gate, subject.request))
103
+ throw new Error("gate-subject-changed");
104
+ const outcome = record(record(gate)?.["outcome"]);
105
+ if (outcome !== undefined &&
106
+ (await ports.decisionReceived(subject.runId, subject.request.gateId)))
107
+ return await storedDecision(ports, outcome);
108
+ const opening = await openBridgeGate(ports, { ...subject, waitMode: "hook" });
109
+ if (opening.kind !== "opened")
110
+ throw new Error(opening.reason);
111
+ return { token: opening.decisionId };
112
+ }
113
+ async function storedDecision(ports, outcome) {
114
+ const decision = ["approved", "denied", "answered", "expired"].find((value) => value === outcome["decision"]);
115
+ if (decision === undefined)
116
+ throw new Error("invalid-decision-outcome");
117
+ const digest = outcome["answer"];
118
+ if (digest !== null && typeof digest !== "string")
119
+ throw new Error("invalid-decision-answer");
120
+ const answer = digest === null ? null : await ports.document(digest);
121
+ if (answer === undefined)
122
+ throw new Error("missing-decision-answer");
123
+ return { decision, answer };
124
+ }
@@ -0,0 +1,26 @@
1
+ import { type RunWaitTarget } from "../run-wait.ts";
2
+ import type { RunWaitOutcome, RunWaitRequest } from "../step-bridge.ts";
3
+ export interface RunWaitPorts {
4
+ readonly now?: () => number;
5
+ readonly target: (runId: string) => Promise<RunWaitTarget | undefined>;
6
+ readonly observe: (report: {
7
+ readonly runId: string;
8
+ readonly commandId: string;
9
+ readonly condition: string;
10
+ readonly reason: string;
11
+ readonly evidence?: string;
12
+ readonly retryAt?: string;
13
+ readonly operationId?: string;
14
+ }) => Promise<{
15
+ readonly kind: string;
16
+ readonly reason?: string;
17
+ }>;
18
+ }
19
+ export declare function runWait(ports: RunWaitPorts, wait: {
20
+ readonly caller: {
21
+ readonly runId: string;
22
+ readonly stepId: string;
23
+ readonly startedAt: number;
24
+ };
25
+ readonly request: RunWaitRequest;
26
+ }): Promise<RunWaitOutcome>;
@@ -0,0 +1,37 @@
1
+ import { FatalError, RetryableError } from "workflow";
2
+ import { runWaitResult } from "../run-wait.js";
3
+ export async function runWait(ports, wait) {
4
+ const { caller, request } = wait;
5
+ const now = (ports.now ?? Date.now)();
6
+ const result = runWaitResult(request, {
7
+ callerRunId: caller.runId,
8
+ startedAt: caller.startedAt,
9
+ now,
10
+ target: await ports.target(request.runId),
11
+ });
12
+ const waiting = result.kind === "waiting";
13
+ const receipt = await ports.observe({
14
+ runId: caller.runId,
15
+ commandId: `${caller.stepId}:run-wait:${waiting ? "waiting" : "ended"}`,
16
+ condition: waiting ? "waiting-run" : "working",
17
+ reason: waiting ? "awaiting-run" : "in-progress",
18
+ operationId: caller.stepId,
19
+ ...(result.kind !== "waiting"
20
+ ? {}
21
+ : {
22
+ evidence: request.runId,
23
+ retryAt: new Date(result.deadline).toISOString(),
24
+ }),
25
+ });
26
+ if (!["accepted", "duplicate"].includes(receipt.kind))
27
+ throw new RetryableError("run-wait-observation-unavailable", {
28
+ retryAfter: 1000,
29
+ });
30
+ if (result.kind === "refused")
31
+ throw new FatalError(result.reason);
32
+ if (result.kind === "completed")
33
+ return result.outcome;
34
+ throw new RetryableError("awaiting-run", {
35
+ retryAfter: Math.max(1, Math.min(1000, result.deadline - now)),
36
+ });
37
+ }
@@ -1,11 +1,9 @@
1
1
  import { type TaggedRun } from "./world-runs.ts";
2
- export type WorkflowFunction = (input: unknown, continuation?: Continuation) => Promise<unknown>;
3
- export interface Continuation {
4
- readonly gateId: string;
5
- readonly decision: string;
6
- readonly answer: string | null;
7
- }
8
- export interface RunIntent extends Partial<Continuation> {
2
+ export type WorkflowFunction = (input: unknown) => Promise<unknown>;
3
+ export interface RunIntent {
4
+ readonly gateId?: string;
5
+ readonly decision?: string;
6
+ readonly answer?: string | null;
9
7
  readonly kind: string;
10
8
  readonly runId: string;
11
9
  readonly operationId: string;
@@ -33,7 +31,7 @@ export interface StartParts {
33
31
  }
34
32
  export interface StartDelivery {
35
33
  readonly reconcile: (intent: RunIntent) => Promise<RunOutcome>;
36
- readonly deliver: (intent: RunIntent) => Promise<{
34
+ readonly deliver: (intent: RunIntent, signal?: AbortSignal) => Promise<{
37
35
  readonly receipt: string;
38
36
  }>;
39
37
  readonly stop: (intent: RunIntent) => Promise<RunOutcome>;
@@ -1,5 +1,6 @@
1
1
  import { start } from "workflow/api";
2
2
  import { operationTag, runTag } from "./world-runs.js";
3
+ import { deliveredDecision, reconciledDecision, stoppedDecision, } from "./decision-resume.js";
3
4
  const ends = ["cancelled", "completed", "failed"];
4
5
  async function segments(parts, intent) {
5
6
  return (await parts.runs()).filter((run) => run.operationId === intent.operationId);
@@ -16,27 +17,15 @@ async function reconciled(parts, intent) {
16
17
  evidence: found.map((run) => `world-run:${run.receipt}`).join(" "),
17
18
  };
18
19
  }
19
- async function continuation(parts, intent) {
20
- const { kind, gateId, decision, answer } = intent;
21
- if (kind === "start-run")
22
- return undefined;
23
- if (kind !== "continue-run" || gateId === undefined || decision === undefined)
24
- throw new Error(`unsupported-intent: ${kind}`);
25
- if (answer === undefined || answer === null)
26
- return { gateId, decision, answer: null };
27
- const text = await parts.document(answer);
28
- if (text === undefined)
29
- throw new Error(`answer-not-available: ${gateId}`);
30
- return { gateId, decision, answer: text };
31
- }
32
20
  async function delivered(parts, intent) {
33
- const continued = await continuation(parts, intent);
21
+ if (intent.kind !== "start-run")
22
+ throw new Error(`unsupported-intent: ${intent.kind}`);
34
23
  const workflow = await parts.workflow(intent);
35
24
  const input = await parts.input(intent.runId);
36
25
  if (workflow === undefined || input === undefined)
37
26
  throw new Error(`start-not-available: ${intent.runId}`);
38
27
  const argument = JSON.parse(input);
39
- const started = await start(workflow, [argument, continued], {
28
+ const started = await start(workflow, [argument], {
40
29
  attributes: {
41
30
  [runTag]: intent.runId,
42
31
  [operationTag]: intent.operationId,
@@ -61,8 +50,14 @@ async function stopped(parts, intent) {
61
50
  }
62
51
  export function startDelivery(parts) {
63
52
  return {
64
- reconcile: (intent) => reconciled(parts, intent),
65
- deliver: (intent) => delivered(parts, intent),
66
- stop: (intent) => stopped(parts, intent),
53
+ reconcile: (intent) => intent.kind === "resume-hook"
54
+ ? reconciledDecision(parts, intent)
55
+ : reconciled(parts, intent),
56
+ deliver: (intent, signal) => intent.kind === "resume-hook"
57
+ ? deliveredDecision(parts, { intent, signal })
58
+ : delivered(parts, intent),
59
+ stop: (intent) => intent.kind === "resume-hook"
60
+ ? stoppedDecision(parts, intent)
61
+ : stopped(parts, intent),
67
62
  };
68
63
  }
@@ -1,8 +1,13 @@
1
+ import { type CommandWaitPorts } from "./command-wait.ts";
2
+ import { type GateOpening, type GateReceipt, type WaitRegistration } from "./gate-bridge.ts";
3
+ export type { GateOpening, GateReceipt, WaitRegistration, } from "./gate-bridge.ts";
4
+ import { type RunWaitPorts } from "./run-wait.ts";
1
5
  import { type ProtectedRequest, type StepBridge } from "../step-bridge.ts";
2
6
  export interface StepCall {
3
7
  readonly worldRunId: string;
4
8
  readonly stepId: string;
5
9
  readonly attempt: number;
10
+ readonly startedAt?: number;
6
11
  }
7
12
  export declare function sdkStepCall(): StepCall;
8
13
  export interface OperationRead {
@@ -30,25 +35,6 @@ interface BridgeIdentity {
30
35
  export interface BridgeRequest extends ProtectedRequest, BridgeIdentity {
31
36
  readonly runId: string;
32
37
  }
33
- export interface GateReceipt {
34
- readonly kind: string;
35
- readonly reason?: string;
36
- }
37
- export interface GateOpening {
38
- readonly runId: string;
39
- readonly commandId: string;
40
- readonly expectedRevision: number;
41
- readonly gateId: string;
42
- readonly kind: "question" | "approval";
43
- readonly prompt: string;
44
- readonly subject: string;
45
- readonly expiresAt?: string;
46
- }
47
- export interface WaitRegistration {
48
- readonly runId: string;
49
- readonly commandId: string;
50
- readonly gateId: string;
51
- }
52
38
  export interface BridgeTiming {
53
39
  readonly lookupTries: number;
54
40
  readonly pollMilliseconds: number;
@@ -56,6 +42,9 @@ export interface BridgeTiming {
56
42
  }
57
43
  export declare const bridgeTiming: BridgeTiming;
58
44
  export interface BridgePorts {
45
+ readonly commandWait?: CommandWaitPorts;
46
+ readonly decisionReceived?: (runId: string, gateId: string) => Promise<boolean>;
47
+ readonly runWait?: RunWaitPorts;
59
48
  readonly call: () => StepCall;
60
49
  readonly run: (worldRunId: string) => Promise<{
61
50
  readonly runId: string;
@@ -77,4 +66,3 @@ export interface BridgePorts {
77
66
  }
78
67
  export declare function stepBridge(ports: BridgePorts): StepBridge;
79
68
  export declare function registerStepBridge(bridge: StepBridge): () => void;
80
- export {};
@@ -1,11 +1,20 @@
1
+ import { commandWaitBridge } from "./command-wait.js";
1
2
  import { createHash } from "node:crypto";
2
3
  import { setTimeout as delay } from "node:timers/promises";
3
4
  import { getStepMetadata, getWorkflowMetadata } from "workflow";
4
- import { gateKey } from "../authority/gates.js";
5
+ import { openBridgeGate, waitForBridgeDecision, } from "./gate-bridge.js";
6
+ import { runWait } from "./run-wait.js";
7
+ import { reconciledDecision } from "./decision-resume.js";
8
+ import { taggedRuns } from "./world-runs.js";
5
9
  import { stepBridgeKey, } from "../step-bridge.js";
6
10
  export function sdkStepCall() {
7
- const { stepId, attempt } = getStepMetadata();
8
- return { worldRunId: getWorkflowMetadata().workflowRunId, stepId, attempt };
11
+ const { stepId, attempt, stepStartedAt } = getStepMetadata();
12
+ return {
13
+ worldRunId: getWorkflowMetadata().workflowRunId,
14
+ stepId,
15
+ attempt,
16
+ startedAt: stepStartedAt.getTime(),
17
+ };
9
18
  }
10
19
  export const bridgeTiming = {
11
20
  lookupTries: 250,
@@ -129,74 +138,72 @@ async function effect(hold, request) {
129
138
  return answer;
130
139
  return await settled(hold, answer.operationId);
131
140
  }
132
- function verdict(hold, receipt) {
133
- if (receipt === undefined || receipt.kind === "failed")
134
- return hold.timing.retryMilliseconds;
135
- if (committed.includes(receipt.kind))
136
- return "committed";
137
- if (receipt.reason === "service-busy")
138
- return hold.timing.retryMilliseconds;
139
- if (receipt.reason === "stale-revision")
140
- return hold.timing.pollMilliseconds;
141
- return { kind: "refused", reason: receipt.reason ?? receipt.kind };
142
- }
143
- async function gateCommand(hold, send) {
144
- for (;;) {
145
- await paused(hold, 0);
146
- const result = verdict(hold, await send().catch(() => undefined));
147
- if (result === "committed")
148
- return undefined;
149
- if (typeof result !== "number")
150
- return result;
151
- await paused(hold, result);
152
- }
153
- }
154
- async function opening(hold, subject) {
155
- const { runId, transport, request } = subject;
156
- const { gateId, kind, prompt } = request;
157
- const state = await hold.ports.state();
158
- const run = state.runs[runId];
159
- if (run === undefined)
160
- return { kind: "rejected", reason: "unknown-run" };
161
- if (Object.hasOwn(state.gates, gateKey(runId, gateId)))
162
- return { kind: "duplicate" };
163
- return await hold.ports.openGate({
164
- runId,
165
- commandId: `${transport}:open:${gateId}`,
166
- expectedRevision: run.revision,
167
- gateId,
168
- kind,
169
- prompt,
170
- subject: `sha256:${createHash("sha256").update(prompt).digest("hex")}`,
171
- ...(request.expiresAt === undefined
172
- ? {}
173
- : { expiresAt: request.expiresAt }),
174
- });
175
- }
176
- async function gate(hold, request) {
141
+ async function gateSubject(hold, request) {
177
142
  const call = hold.ports.call();
178
143
  const world = await located(hold, call.worldRunId);
179
144
  if (world === undefined)
180
- return { kind: "unavailable", reason: "unknown-world-run" };
145
+ return undefined;
181
146
  await inWork(hold, world.runId);
182
- const subject = {
147
+ return {
148
+ request,
183
149
  runId: world.runId,
184
150
  transport: transportOf(call),
185
- request,
186
151
  };
187
- const refusal = (await gateCommand(hold, () => opening(hold, subject))) ??
188
- (await gateCommand(hold, () => hold.ports.registerWait({
189
- runId: subject.runId,
190
- commandId: `${subject.transport}:wait:${request.gateId}`,
191
- gateId: request.gateId,
192
- })));
193
- return refusal ?? { kind: "opened", decisionId: request.gateId };
152
+ }
153
+ async function gate(hold, request) {
154
+ const subject = await gateSubject(hold, request);
155
+ if (subject === undefined)
156
+ return { kind: "unavailable", reason: "unknown-world-run" };
157
+ return await openBridgeGate(hold.ports, subject);
158
+ }
159
+ function hostCommandWait(hold) {
160
+ return commandWaitBridge({
161
+ ...(hold.ports.commandWait === undefined
162
+ ? {}
163
+ : { commandWait: hold.ports.commandWait }),
164
+ stopped: hold.ports.stopped,
165
+ pollMilliseconds: hold.timing.pollMilliseconds,
166
+ retryMilliseconds: hold.timing.retryMilliseconds,
167
+ runStatus: async (runId) => (await hold.ports.state()).runs[runId]?.status,
168
+ subject: async () => {
169
+ const call = hold.ports.call();
170
+ const world = await located(hold, call.worldRunId);
171
+ if (world === undefined)
172
+ return undefined;
173
+ await inWork(hold, world.runId);
174
+ return { runId: world.runId, commandId: transportOf(call) };
175
+ },
176
+ });
194
177
  }
195
178
  export function stepBridge(ports) {
196
179
  const hold = { ports, timing: ports.timing ?? bridgeTiming };
197
180
  return {
181
+ ...hostCommandWait(hold),
198
182
  effect: (request) => effect(hold, request),
199
183
  gate: (request) => gate(hold, request),
184
+ waitForDecision: async (request) => {
185
+ const subject = await gateSubject(hold, request);
186
+ if (subject === undefined)
187
+ throw new Error("unknown-world-run");
188
+ return await waitForBridgeDecision({
189
+ ...ports,
190
+ decisionReceived: ports.decisionReceived ??
191
+ (async (runId, gateId) => (await reconciledDecision({ runs: taggedRuns, document: ports.document }, { runId, gateId })).kind === "accepted"),
192
+ }, subject);
193
+ },
194
+ waitForRun: async (request) => {
195
+ const call = ports.call();
196
+ const world = await located(hold, call.worldRunId);
197
+ if (world === undefined ||
198
+ ports.runWait === undefined ||
199
+ call.startedAt === undefined)
200
+ throw new Error("cloving-host-unavailable");
201
+ await inWork(hold, world.runId);
202
+ return await runWait(ports.runWait, {
203
+ caller: { ...world, stepId: call.stepId, startedAt: call.startedAt },
204
+ request,
205
+ });
206
+ },
200
207
  handoff: (request) => effect(hold, {
201
208
  scope: {
202
209
  phase: "handoff",
@@ -0,0 +1,19 @@
1
+ export interface PullRequest {
2
+ readonly number: number;
3
+ readonly url: string;
4
+ readonly commit: string;
5
+ readonly target: string;
6
+ }
7
+ export type MergeCheckName = "beforeMerge";
8
+ export interface MergeRequest {
9
+ readonly pull: PullRequest;
10
+ readonly check: MergeCheckName | null;
11
+ readonly round?: number;
12
+ }
13
+ export type MergeReason = "check-failed" | "merge-conflict" | "ci-failed" | "ci-pending" | "check-not-configured" | "not-approved";
14
+ export interface MergeResult {
15
+ readonly merged: boolean;
16
+ readonly reason: MergeReason | null;
17
+ readonly output: string;
18
+ }
19
+ export declare function mergeRequest(value: unknown): Required<MergeRequest>;
@@ -0,0 +1,32 @@
1
+ import { record } from "./protocol.js";
2
+ import { commitId } from "./review-subject.js";
3
+ export function mergeRequest(value) {
4
+ const request = record(value);
5
+ const pull = pullRequest(request?.["pull"]);
6
+ const check = request?.["check"];
7
+ if (request === undefined ||
8
+ pull === undefined ||
9
+ !Object.hasOwn(request, "check") ||
10
+ (check !== null && check !== "beforeMerge"))
11
+ throw new Error("invalid-merge-request");
12
+ return { pull, check, round: mergeRound(request["round"] ?? 1) };
13
+ }
14
+ function mergeRound(value) {
15
+ if (!positiveInteger(value))
16
+ throw new Error("invalid-merge-request");
17
+ return value;
18
+ }
19
+ function pullRequest(value) {
20
+ const pull = record(value);
21
+ const { number, url, commit, target } = pull ?? {};
22
+ if (!positiveInteger(number) ||
23
+ typeof url !== "string" ||
24
+ !commitId(commit) ||
25
+ typeof target !== "string" ||
26
+ target.trim() === "")
27
+ return undefined;
28
+ return { number, url, commit, target };
29
+ }
30
+ function positiveInteger(value) {
31
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
32
+ }
@@ -5,3 +5,4 @@ export interface OperationScope {
5
5
  readonly operation: string;
6
6
  }
7
7
  export declare function operationScope(operationId: string): OperationScope | null;
8
+ export declare function operationPhase(operationId: string): string | null;
@@ -48,6 +48,10 @@ export function operationScope(operationId) {
48
48
  return null;
49
49
  return { run, operation };
50
50
  }
51
+ export function operationPhase(operationId) {
52
+ const [marker, , , phase] = parsedList(operationId);
53
+ return marker === "cloving-operation" && isComponent(phase) ? phase : null;
54
+ }
51
55
  function parsedList(text) {
52
56
  try {
53
57
  const value = JSON.parse(text);
@@ -0,0 +1 @@
1
+ export declare function canonicalJson(value: unknown): string;
@@ -0,0 +1,16 @@
1
+ export function canonicalJson(value) {
2
+ if (value === null || typeof value === "boolean" || typeof value === "string")
3
+ return JSON.stringify(value);
4
+ if (typeof value === "number" && !Number.isSafeInteger(value))
5
+ throw new Error("canonical-json-number: Only safe integers are allowed.");
6
+ if (typeof value === "number")
7
+ return String(value);
8
+ if (Array.isArray(value))
9
+ return `[${value.map(canonicalJson).join(",")}]`;
10
+ if (typeof value !== "object")
11
+ throw new Error("canonical-json-value: The value is not JSON.");
12
+ const fields = Object.keys(value)
13
+ .sort()
14
+ .map((key) => `${JSON.stringify(key)}:${canonicalJson(Reflect.get(value, key))}`);
15
+ return `{${fields.join(",")}}`;
16
+ }
@@ -0,0 +1,7 @@
1
+ export interface PhoneLink {
2
+ readonly daemonId: string;
3
+ readonly origin: string;
4
+ readonly token: string;
5
+ readonly registeredAt: string;
6
+ }
7
+ export declare function parsePhoneLink(text: string | undefined): PhoneLink | undefined;
@@ -0,0 +1,21 @@
1
+ export function parsePhoneLink(text) {
2
+ if (text === undefined)
3
+ return undefined;
4
+ const value = JSON.parse(text);
5
+ if (typeof value !== "object" || value === null)
6
+ return undefined;
7
+ const filled = (name) => {
8
+ const field = Reflect.get(value, name);
9
+ return typeof field === "string" && field !== "" ? field : undefined;
10
+ };
11
+ const daemonId = filled("daemonId");
12
+ const origin = filled("origin");
13
+ const token = filled("token");
14
+ const registeredAt = filled("registeredAt");
15
+ if (daemonId === undefined ||
16
+ origin === undefined ||
17
+ token === undefined ||
18
+ registeredAt === undefined)
19
+ return undefined;
20
+ return { daemonId, origin, token, registeredAt };
21
+ }
@@ -0,0 +1,8 @@
1
+ export declare function qrVersion(byteCount: number): number;
2
+ export declare function qrDataCodewords(bytes: Uint8Array, version: number): number[];
3
+ export declare function qrCorrection(data: readonly number[], degree: number): number[];
4
+ export interface QrCodewords {
5
+ readonly version: number;
6
+ readonly codewords: readonly number[];
7
+ }
8
+ export declare function qrCodewords(text: string): QrCodewords;