cloving 1.3.0 → 1.5.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 (484) hide show
  1. package/README.md +329 -215
  2. package/dist/src/agent-harness-shell.d.ts +2 -1
  3. package/dist/src/agent-harness-shell.js +8 -5
  4. package/dist/src/authority/command-wait-checks.d.ts +8 -0
  5. package/dist/src/authority/command-wait-checks.js +88 -0
  6. package/dist/src/authority/command-wait-results.d.ts +15 -0
  7. package/dist/src/authority/command-wait-results.js +73 -0
  8. package/dist/src/authority/command-wait-view.d.ts +21 -0
  9. package/dist/src/authority/command-wait-view.js +34 -0
  10. package/dist/src/authority/command-waits.d.ts +39 -0
  11. package/dist/src/authority/command-waits.js +97 -0
  12. package/dist/src/authority/commands.js +22 -1
  13. package/dist/src/authority/dispatch-decision.d.ts +8 -0
  14. package/dist/src/authority/dispatch-decision.js +26 -1
  15. package/dist/src/authority/effect-requests.js +6 -3
  16. package/dist/src/authority/effect-results.js +4 -2
  17. package/dist/src/authority/history-state.d.ts +2 -0
  18. package/dist/src/authority/history-state.js +13 -1
  19. package/dist/src/authority/instants.d.ts +1 -0
  20. package/dist/src/authority/instants.js +21 -0
  21. package/dist/src/authority/reduction-state.d.ts +2 -0
  22. package/dist/src/authority/reduction-state.js +5 -0
  23. package/dist/src/authority/reduction.js +24 -0
  24. package/dist/src/authority/status-input.d.ts +2 -0
  25. package/dist/src/authority/status.d.ts +2 -0
  26. package/dist/src/authority/status.js +1 -0
  27. package/dist/src/authority/stop-sequence.d.ts +1 -0
  28. package/dist/src/authority/stop-sequence.js +2 -1
  29. package/dist/src/authority/transitions.d.ts +6 -4
  30. package/dist/src/authority/transitions.js +7 -0
  31. package/dist/src/broker/actor/authority-health.d.ts +9 -0
  32. package/dist/src/broker/actor/authority-health.js +24 -0
  33. package/dist/src/broker/actor/authority-queries.d.ts +2 -1
  34. package/dist/src/broker/actor/authority-queries.js +14 -5
  35. package/dist/src/broker/actor/authority-receipts.js +1 -1
  36. package/dist/src/broker/actor/authority-runtime.d.ts +4 -2
  37. package/dist/src/broker/actor/authority-runtime.js +29 -20
  38. package/dist/src/broker/actor/authority-session.d.ts +6 -19
  39. package/dist/src/broker/actor/authority-session.js +66 -88
  40. package/dist/src/broker/actor/authority-settings.d.ts +2 -1
  41. package/dist/src/broker/actor/authority-settings.js +6 -3
  42. package/dist/src/broker/actor/authority-upgrades.d.ts +23 -2
  43. package/dist/src/broker/actor/authority-upgrades.js +8 -2
  44. package/dist/src/broker/actor/authority-watchdog.d.ts +6 -2
  45. package/dist/src/broker/actor/authority-watchdog.js +31 -9
  46. package/dist/src/broker/actor/authority.js +3 -1
  47. package/dist/src/broker/actor/delivery-intents.js +2 -0
  48. package/dist/src/broker/actor/effect-delivery.d.ts +1 -1
  49. package/dist/src/broker/actor/effect-delivery.js +15 -2
  50. package/dist/src/broker/actor/effect-plan.js +11 -2
  51. package/dist/src/broker/actor/effect-queries.d.ts +4 -0
  52. package/dist/src/broker/actor/effect-queries.js +9 -1
  53. package/dist/src/broker/actor/effect-turn.js +2 -0
  54. package/dist/src/broker/actor/projection-memory.d.ts +43 -0
  55. package/dist/src/broker/actor/projection-memory.js +207 -0
  56. package/dist/src/broker/actor/runtime-parts.d.ts +5 -0
  57. package/dist/src/broker/actor/runtime-parts.js +8 -3
  58. package/dist/src/broker/actor/stop-plan.js +9 -3
  59. package/dist/src/broker/actor/stop-turn.d.ts +2 -0
  60. package/dist/src/broker/actor/stop-turn.js +24 -11
  61. package/dist/src/broker/actor/turn-draft.d.ts +1 -0
  62. package/dist/src/broker/actor/turn-draft.js +4 -0
  63. package/dist/src/broker/actor/turn-state.js +5 -1
  64. package/dist/src/broker/authority-admission.js +60 -0
  65. package/dist/src/broker/authority-restore.d.ts +2 -0
  66. package/dist/src/broker/authority-restore.js +35 -1
  67. package/dist/src/broker/command-wait-restore.d.ts +31 -0
  68. package/dist/src/broker/command-wait-restore.js +86 -0
  69. package/dist/src/broker/decision-restore.d.ts +1 -1
  70. package/dist/src/broker/decision-restore.js +1 -0
  71. package/dist/src/broker/effect-upgrade.d.ts +3 -0
  72. package/dist/src/broker/effect-upgrade.js +11 -2
  73. package/dist/src/cli/arguments.d.ts +13 -0
  74. package/dist/src/cli/arguments.js +43 -3
  75. package/dist/src/cli/chat-stores.d.ts +2 -0
  76. package/dist/src/cli/chat-stores.js +113 -0
  77. package/dist/src/cli/client.d.ts +7 -2
  78. package/dist/src/cli/client.js +13 -7
  79. package/dist/src/cli/command-requests.d.ts +46 -0
  80. package/dist/src/cli/command-requests.js +84 -0
  81. package/dist/src/cli/command-waits.d.ts +9 -0
  82. package/dist/src/cli/command-waits.js +51 -0
  83. package/dist/src/cli/commands.js +70 -88
  84. package/dist/src/cli/config-file.d.ts +2 -2
  85. package/dist/src/cli/config-file.js +4 -2
  86. package/dist/src/cli/config-notice.js +5 -2
  87. package/dist/src/cli/doctor-retention.d.ts +2 -0
  88. package/dist/src/cli/doctor-retention.js +93 -0
  89. package/dist/src/cli/doctor-workflows.d.ts +5 -2
  90. package/dist/src/cli/doctor-workflows.js +12 -7
  91. package/dist/src/cli/doctor.js +11 -9
  92. package/dist/src/cli/harness-probes.d.ts +2 -0
  93. package/dist/src/cli/harness-probes.js +1 -1
  94. package/dist/src/cli/harness-processes.d.ts +6 -0
  95. package/dist/src/cli/harness-processes.js +36 -0
  96. package/dist/src/cli/init-command.d.ts +9 -0
  97. package/dist/src/cli/init-command.js +52 -0
  98. package/dist/src/cli/init-prompt-command.d.ts +10 -0
  99. package/dist/src/cli/init-prompt-command.js +145 -0
  100. package/dist/src/cli/init-prompt.d.ts +35 -0
  101. package/dist/src/cli/init-prompt.js +74 -0
  102. package/dist/src/cli/init-selection.d.ts +13 -0
  103. package/dist/src/cli/init-selection.js +75 -0
  104. package/dist/src/cli/main.d.ts +2 -0
  105. package/dist/src/cli/main.js +37 -7
  106. package/dist/src/cli/mcp-server.d.ts +1 -0
  107. package/dist/src/cli/mcp-server.js +156 -0
  108. package/dist/src/cli/mcp-tools.d.ts +15 -0
  109. package/dist/src/cli/mcp-tools.js +242 -0
  110. package/dist/src/cli/queue-arguments.d.ts +15 -0
  111. package/dist/src/cli/queue-arguments.js +31 -0
  112. package/dist/src/cli/queue-render.d.ts +3 -0
  113. package/dist/src/cli/queue-render.js +26 -0
  114. package/dist/src/cli/reload-render.d.ts +2 -0
  115. package/dist/src/cli/reload-render.js +12 -0
  116. package/dist/src/cli/render.d.ts +1 -1
  117. package/dist/src/cli/render.js +54 -38
  118. package/dist/src/cli/report-ci-jobs.d.ts +23 -0
  119. package/dist/src/cli/report-ci-jobs.js +103 -0
  120. package/dist/src/cli/report-ci-usage.d.ts +9 -0
  121. package/dist/src/cli/report-ci-usage.js +185 -0
  122. package/dist/src/cli/report-ci.d.ts +13 -0
  123. package/dist/src/cli/report-ci.js +74 -0
  124. package/dist/src/cli/report-closures.d.ts +6 -0
  125. package/dist/src/cli/report-closures.js +97 -0
  126. package/dist/src/cli/report-flow.d.ts +7 -0
  127. package/dist/src/cli/report-flow.js +122 -0
  128. package/dist/src/cli/report-github-reader.d.ts +29 -0
  129. package/dist/src/cli/report-github-reader.js +157 -0
  130. package/dist/src/cli/report-github.d.ts +15 -8
  131. package/dist/src/cli/report-github.js +131 -150
  132. package/dist/src/cli/report-operator.d.ts +3 -0
  133. package/dist/src/cli/report-operator.js +40 -0
  134. package/dist/src/cli/report-ready.d.ts +3 -0
  135. package/dist/src/cli/report-ready.js +96 -0
  136. package/dist/src/cli/report-text.d.ts +9 -0
  137. package/dist/src/cli/report-text.js +33 -0
  138. package/dist/src/cli/report.d.ts +1 -0
  139. package/dist/src/cli/report.js +104 -27
  140. package/dist/src/cli/runtime-arguments.d.ts +18 -3
  141. package/dist/src/cli/runtime-arguments.js +29 -20
  142. package/dist/src/cli/schedule-arguments.d.ts +14 -0
  143. package/dist/src/cli/schedule-arguments.js +26 -0
  144. package/dist/src/cli/schedule-render.d.ts +22 -0
  145. package/dist/src/cli/schedule-render.js +73 -0
  146. package/dist/src/cli/terminal-text.d.ts +3 -0
  147. package/dist/src/cli/terminal-text.js +28 -0
  148. package/dist/src/cli/toolchain.d.ts +1 -0
  149. package/dist/src/cli/toolchain.js +1 -0
  150. package/dist/src/cli/usage-render.d.ts +1 -0
  151. package/dist/src/cli/usage-render.js +28 -1
  152. package/dist/src/cli/usage.d.ts +2 -2
  153. package/dist/src/cli/usage.js +89 -11
  154. package/dist/src/cli/watch-actions.js +2 -2
  155. package/dist/src/cli/watch-api-document.d.ts +430 -0
  156. package/dist/src/cli/watch-api-document.js +291 -0
  157. package/dist/src/cli/watch-api-run.d.ts +56 -0
  158. package/dist/src/cli/watch-api-run.js +112 -0
  159. package/dist/src/cli/watch-api.d.ts +17 -0
  160. package/dist/src/cli/watch-api.js +230 -0
  161. package/dist/src/cli/watch-board-view.js +19 -2
  162. package/dist/src/cli/watch-board.d.ts +4 -2
  163. package/dist/src/cli/watch-board.js +53 -43
  164. package/dist/src/cli/watch-card-forms.d.ts +1 -1
  165. package/dist/src/cli/watch-card-forms.js +11 -10
  166. package/dist/src/cli/watch-client.d.ts +1 -1
  167. package/dist/src/cli/watch-client.js +2 -11
  168. package/dist/src/cli/watch-header-view.d.ts +1 -5
  169. package/dist/src/cli/watch-header-view.js +17 -21
  170. package/dist/src/cli/watch-model.d.ts +5 -1
  171. package/dist/src/cli/watch-model.js +20 -11
  172. package/dist/src/cli/watch-page.js +15 -15
  173. package/dist/src/cli/watch-phases.d.ts +12 -3
  174. package/dist/src/cli/watch-phases.js +68 -11
  175. package/dist/src/cli/watch-pr-board.js +1 -1
  176. package/dist/src/cli/watch-pr-command.d.ts +1 -0
  177. package/dist/src/cli/watch-pull-request.js +18 -8
  178. package/dist/src/cli/watch-reads.d.ts +3 -0
  179. package/dist/src/cli/watch-reads.js +22 -20
  180. package/dist/src/cli/watch-render.d.ts +15 -0
  181. package/dist/src/cli/watch-run-input.d.ts +0 -1
  182. package/dist/src/cli/watch-run-input.js +0 -13
  183. package/dist/src/cli/watch-server.js +24 -10
  184. package/dist/src/cli/watch-view.d.ts +0 -3
  185. package/dist/src/cli/watch-view.js +13 -13
  186. package/dist/src/cli.js +73 -12
  187. package/dist/src/command-wait.d.ts +4 -0
  188. package/dist/src/command-wait.js +45 -0
  189. package/dist/src/configuration-change.d.ts +7 -0
  190. package/dist/src/configuration-change.js +14 -0
  191. package/dist/src/configuration-display.js +2 -0
  192. package/dist/src/configuration-schema.d.ts +14 -0
  193. package/dist/src/configuration-schema.js +6 -2
  194. package/dist/src/daemon/attachment-file.d.ts +6 -0
  195. package/dist/src/daemon/attachment-file.js +86 -0
  196. package/dist/src/daemon/attachments.d.ts +14 -0
  197. package/dist/src/daemon/attachments.js +17 -0
  198. package/dist/src/daemon/claude-recovery.d.ts +50 -0
  199. package/dist/src/daemon/claude-recovery.js +208 -0
  200. package/dist/src/daemon/claude-stream.d.ts +27 -0
  201. package/dist/src/daemon/claude-stream.js +63 -0
  202. package/dist/src/daemon/claude-turn.d.ts +11 -25
  203. package/dist/src/daemon/claude-turn.js +64 -81
  204. package/dist/src/daemon/claude-worker.d.ts +5 -4
  205. package/dist/src/daemon/claude-worker.js +127 -126
  206. package/dist/src/daemon/daemon-adapters.d.ts +9 -0
  207. package/dist/src/daemon/daemon-adapters.js +33 -5
  208. package/dist/src/daemon/daemon-loops.d.ts +5 -1
  209. package/dist/src/daemon/daemon-loops.js +18 -10
  210. package/dist/src/daemon/daemon.js +80 -61
  211. package/dist/src/daemon/github-attach.d.ts +2 -0
  212. package/dist/src/daemon/github-attach.js +222 -0
  213. package/dist/src/daemon/github-calls.js +1 -1
  214. package/dist/src/daemon/github-ci-filters.d.ts +6 -0
  215. package/dist/src/daemon/github-ci-filters.js +138 -0
  216. package/dist/src/daemon/github-ci-workflows.d.ts +10 -0
  217. package/dist/src/daemon/github-ci-workflows.js +148 -0
  218. package/dist/src/daemon/github-ci.js +22 -4
  219. package/dist/src/daemon/github-issue-methods.d.ts +2 -0
  220. package/dist/src/daemon/github-issue-methods.js +37 -2
  221. package/dist/src/daemon/github-merge-call.d.ts +2 -1
  222. package/dist/src/daemon/github-merge-call.js +10 -3
  223. package/dist/src/daemon/github-merge.js +52 -24
  224. package/dist/src/daemon/github-methods.js +18 -4
  225. package/dist/src/daemon/github-operation.d.ts +4 -0
  226. package/dist/src/daemon/github-operation.js +6 -0
  227. package/dist/src/daemon/github-worker.d.ts +4 -0
  228. package/dist/src/daemon/github-worker.js +6 -0
  229. package/dist/src/daemon/issue-queue.d.ts +4 -1
  230. package/dist/src/daemon/issue-queue.js +76 -78
  231. package/dist/src/daemon/merge-turns.d.ts +10 -0
  232. package/dist/src/daemon/merge-turns.js +37 -0
  233. package/dist/src/daemon/notify-events.d.ts +6 -0
  234. package/dist/src/daemon/notify-events.js +84 -0
  235. package/dist/src/daemon/notify-journal.js +1 -1
  236. package/dist/src/daemon/notify-message.d.ts +4 -1
  237. package/dist/src/daemon/notify-message.js +36 -0
  238. package/dist/src/daemon/notify.d.ts +1 -1
  239. package/dist/src/daemon/notify.js +5 -77
  240. package/dist/src/daemon/operation-journal.d.ts +1 -0
  241. package/dist/src/daemon/queue-control.d.ts +13 -0
  242. package/dist/src/daemon/queue-control.js +86 -0
  243. package/dist/src/daemon/queue-journal.d.ts +20 -0
  244. package/dist/src/daemon/queue-journal.js +89 -0
  245. package/dist/src/daemon/queue-status.d.ts +9 -3
  246. package/dist/src/daemon/queue-status.js +17 -4
  247. package/dist/src/daemon/record-archive.d.ts +19 -0
  248. package/dist/src/daemon/record-archive.js +82 -0
  249. package/dist/src/daemon/record-sweep.d.ts +24 -0
  250. package/dist/src/daemon/record-sweep.js +147 -0
  251. package/dist/src/daemon/resume-index-lock.d.ts +13 -0
  252. package/dist/src/daemon/resume-index-lock.js +160 -0
  253. package/dist/src/daemon/resume-worktree.d.ts +7 -0
  254. package/dist/src/daemon/resume-worktree.js +29 -0
  255. package/dist/src/daemon/retrying-turn.d.ts +2 -12
  256. package/dist/src/daemon/retrying-turn.js +98 -172
  257. package/dist/src/daemon/schedule-control.d.ts +26 -0
  258. package/dist/src/daemon/schedule-control.js +110 -0
  259. package/dist/src/daemon/schedule-journal.d.ts +2 -15
  260. package/dist/src/daemon/schedule-journal.js +67 -4
  261. package/dist/src/daemon/settings-reload.d.ts +26 -0
  262. package/dist/src/daemon/settings-reload.js +82 -0
  263. package/dist/src/daemon/ticket-registration.d.ts +2 -7
  264. package/dist/src/daemon/ticket-registration.js +15 -81
  265. package/dist/src/daemon/turn-attempt-journal.d.ts +38 -0
  266. package/dist/src/daemon/turn-attempt-journal.js +136 -0
  267. package/dist/src/daemon/turn-attempts.d.ts +47 -0
  268. package/dist/src/daemon/turn-attempts.js +166 -0
  269. package/dist/src/daemon/turn-details.d.ts +4 -0
  270. package/dist/src/daemon/turn-details.js +33 -0
  271. package/dist/src/daemon/turn-report.d.ts +8 -1
  272. package/dist/src/daemon/turn-report.js +39 -0
  273. package/dist/src/daemon/work-tree.d.ts +9 -0
  274. package/dist/src/daemon/work-tree.js +20 -0
  275. package/dist/src/daemon/worker-profile.d.ts +9 -0
  276. package/dist/src/daemon/worker-profile.js +44 -0
  277. package/dist/src/daemon/workflow-generations.d.ts +7 -4
  278. package/dist/src/daemon/workflow-generations.js +22 -14
  279. package/dist/src/daemon/workflow-reload.d.ts +41 -0
  280. package/dist/src/daemon/workflow-reload.js +244 -0
  281. package/dist/src/daemon/workflow-replay.d.ts +2 -1
  282. package/dist/src/daemon/workflow-replay.js +7 -3
  283. package/dist/src/daemon/workflow-schedules.d.ts +3 -0
  284. package/dist/src/daemon/workflow-schedules.js +98 -45
  285. package/dist/src/daemon/worktree-processes.d.ts +9 -0
  286. package/dist/src/daemon/worktree-processes.js +151 -0
  287. package/dist/src/doctor-report.d.ts +4 -6
  288. package/dist/src/doctor-report.js +8 -13
  289. package/dist/src/harness-start.d.ts +15 -0
  290. package/dist/src/harness-start.js +37 -0
  291. package/dist/src/host/command-wait.d.ts +38 -0
  292. package/dist/src/host/command-wait.js +115 -0
  293. package/dist/src/host/start-delivery.d.ts +5 -7
  294. package/dist/src/host/start-delivery.js +3 -15
  295. package/dist/src/host/step-bridge-host.d.ts +2 -0
  296. package/dist/src/host/step-bridge-host.js +21 -0
  297. package/dist/src/operation-identity.d.ts +1 -0
  298. package/dist/src/operation-identity.js +4 -0
  299. package/dist/src/private-config.schema.json +71 -0
  300. package/dist/src/project-config.schema.json +40 -0
  301. package/dist/src/project-settings.d.ts +16 -2
  302. package/dist/src/project-settings.js +35 -1
  303. package/dist/src/queue-spend.d.ts +4 -0
  304. package/dist/src/queue-spend.js +21 -0
  305. package/dist/src/queue-state.d.ts +26 -0
  306. package/dist/src/queue-state.js +34 -0
  307. package/dist/src/record-retention.d.ts +46 -0
  308. package/dist/src/record-retention.js +81 -0
  309. package/dist/src/relay/relay-service.d.ts +3 -0
  310. package/dist/src/relay/relay-service.js +5 -3
  311. package/dist/src/report-ci.d.ts +164 -0
  312. package/dist/src/report-ci.js +32 -0
  313. package/dist/src/report-effects.d.ts +15 -0
  314. package/dist/src/report-effects.js +212 -0
  315. package/dist/src/report-flow-types.d.ts +38 -0
  316. package/dist/src/report-flow-types.js +7 -0
  317. package/dist/src/report-flow.d.ts +43 -0
  318. package/dist/src/report-flow.js +193 -0
  319. package/dist/src/report-operator.d.ts +67 -0
  320. package/dist/src/report-operator.js +25 -0
  321. package/dist/src/report-quality.d.ts +221 -0
  322. package/dist/src/report-quality.js +94 -0
  323. package/dist/src/report-ready.d.ts +23 -0
  324. package/dist/src/report-ready.js +117 -0
  325. package/dist/src/report-statistics.d.ts +2 -1
  326. package/dist/src/report-statistics.js +40 -4
  327. package/dist/src/report.d.ts +588 -47
  328. package/dist/src/report.js +156 -41
  329. package/dist/src/schedule-progress.d.ts +33 -0
  330. package/dist/src/schedule-progress.js +45 -0
  331. package/dist/src/service/active-tickets.js +11 -6
  332. package/dist/src/service/command-waits.d.ts +34 -0
  333. package/dist/src/service/command-waits.js +86 -0
  334. package/dist/src/service/dispatcher.d.ts +4 -0
  335. package/dist/src/service/dispatcher.js +33 -0
  336. package/dist/src/service/expiry.js +2 -0
  337. package/dist/src/service/gateway.js +3 -1
  338. package/dist/src/service/queue-handlers.d.ts +4 -0
  339. package/dist/src/service/queue-handlers.js +32 -0
  340. package/dist/src/service/queue-spend.d.ts +6 -0
  341. package/dist/src/service/queue-spend.js +68 -0
  342. package/dist/src/service/registry.d.ts +28 -2
  343. package/dist/src/service/registry.js +48 -0
  344. package/dist/src/service/replies.d.ts +22 -8
  345. package/dist/src/service/replies.js +16 -2
  346. package/dist/src/service/run-handlers.js +37 -12
  347. package/dist/src/service/run-metadata.d.ts +15 -1
  348. package/dist/src/service/run-metadata.js +93 -8
  349. package/dist/src/service/service.d.ts +11 -3
  350. package/dist/src/service/service.js +22 -37
  351. package/dist/src/service/submission-handler.js +18 -4
  352. package/dist/src/service/worker-port.js +9 -1
  353. package/dist/src/service/worker-totals.d.ts +6 -0
  354. package/dist/src/service/worker-totals.js +8 -1
  355. package/dist/src/service/workflow-reload.d.ts +35 -0
  356. package/dist/src/service/workflow-reload.js +52 -0
  357. package/dist/src/step-bridge.d.ts +20 -0
  358. package/dist/src/steps/command-wait.d.ts +12 -0
  359. package/dist/src/steps/command-wait.js +26 -0
  360. package/dist/src/steps/open-decision-wait.d.ts +2 -0
  361. package/dist/src/steps/{decision-gate.js → open-decision-wait.js} +0 -7
  362. package/dist/src/steps/review-by-person.js +4 -1
  363. package/dist/src/steps/wait-for-command.d.ts +3 -0
  364. package/dist/src/steps/wait-for-command.js +17 -0
  365. package/dist/src/steps/wait-for-decision.js +1 -1
  366. package/dist/src/storage/command-wait-rows.d.ts +30 -0
  367. package/dist/src/storage/command-wait-rows.js +96 -0
  368. package/dist/src/storage/decision-snapshots.d.ts +8 -2
  369. package/dist/src/storage/decision-snapshots.js +16 -8
  370. package/dist/src/storage/domain-changes.d.ts +3 -1
  371. package/dist/src/storage/domain-changes.js +4 -0
  372. package/dist/src/storage/domain-schema.d.ts +16 -1
  373. package/dist/src/storage/domain-schema.js +35 -4
  374. package/dist/src/storage/effect-schema.d.ts +2 -0
  375. package/dist/src/storage/effect-schema.js +9 -0
  376. package/dist/src/storage/projection-changes.d.ts +12 -0
  377. package/dist/src/storage/projection-changes.js +194 -0
  378. package/dist/src/storage/projection-lookups.d.ts +7 -0
  379. package/dist/src/storage/projection-lookups.js +30 -0
  380. package/dist/src/testing-requests.d.ts +15 -0
  381. package/dist/src/testing-requests.js +93 -0
  382. package/dist/src/testing.d.ts +4 -10
  383. package/dist/src/testing.js +33 -86
  384. package/dist/src/worker-usage.d.ts +1 -0
  385. package/dist/src/worker-usage.js +3 -0
  386. package/dist/src/workflow-candidate.d.ts +1 -0
  387. package/dist/src/workflow-candidate.js +12 -1
  388. package/dist/src/workflow-contracts.d.ts +1 -0
  389. package/dist/src/workflow-contracts.js +9 -2
  390. package/dist/src/workflow-declaration.d.ts +1 -0
  391. package/dist/src/workflow-declaration.js +3 -0
  392. package/dist/src/workflow-discovery.d.ts +2 -13
  393. package/dist/src/workflow-discovery.js +1 -13
  394. package/dist/src/workflow-refusals.js +0 -1
  395. package/dist/src/workflows.d.ts +1 -1
  396. package/dist/src/workflows.js +1 -1
  397. package/dist/tools/compile-workflows.js +3 -0
  398. package/dist/tools/project-configuration.d.ts +7 -2
  399. package/dist/tools/project-configuration.js +30 -1
  400. package/dist/tools/red-green-command.d.ts +1 -0
  401. package/dist/tools/red-green-command.js +174 -0
  402. package/dist/tools/red-green-process.d.ts +10 -0
  403. package/dist/tools/red-green-process.js +59 -0
  404. package/dist/tools/self-host-processes.d.ts +2 -0
  405. package/dist/tools/self-host-processes.js +69 -26
  406. package/dist/tools/self-host-project.d.ts +2 -0
  407. package/dist/tools/self-host-project.js +30 -77
  408. package/dist/tools/self-host-runtime.js +1 -1
  409. package/dist/tools/self-host.js +76 -34
  410. package/dist/tools/template-command.d.ts +1 -0
  411. package/dist/tools/template-command.js +160 -0
  412. package/dist/tools/template-copy.d.ts +11 -0
  413. package/dist/tools/template-copy.js +130 -0
  414. package/dist/tools/template-files.d.ts +17 -0
  415. package/dist/tools/template-files.js +74 -0
  416. package/dist/tools/workflow-bundles.js +1 -0
  417. package/dist/tools/workflow-candidate-counts.js +2 -2
  418. package/dist/tools/workflow-candidate-program.d.ts +4 -2
  419. package/dist/tools/workflow-candidate-program.js +30 -11
  420. package/dist/tools/workflow-candidate-shape.d.ts +3 -0
  421. package/dist/tools/workflow-candidate-shape.js +90 -0
  422. package/dist/tools/workflow-candidate-source.d.ts +1 -0
  423. package/dist/tools/workflow-candidate-source.js +26 -4
  424. package/dist/tools/workflow-candidate-syntax.d.ts +2 -2
  425. package/dist/tools/workflow-candidate-syntax.js +24 -94
  426. package/dist/tools/workflow-command.js +1 -2
  427. package/dist/tools/workflow-folders.d.ts +2 -3
  428. package/dist/tools/workflow-folders.js +1 -1
  429. package/package.json +17 -9
  430. package/templates/develop/README.md +93 -4
  431. package/templates/develop/develop/flow-tests.ts +38 -1
  432. package/templates/develop/develop/interruption-tests.ts +157 -0
  433. package/templates/develop/develop/local.ts +1 -0
  434. package/templates/develop/develop/option-tests.ts +138 -9
  435. package/templates/develop/develop/pull.ts +5 -1
  436. package/templates/develop/develop/red-green.ts +55 -0
  437. package/templates/develop/develop/refusal-tests.ts +77 -0
  438. package/templates/develop/develop/report.ts +31 -11
  439. package/templates/develop/develop/round.ts +1 -0
  440. package/templates/develop/develop/scenarios.ts +27 -0
  441. package/templates/develop/develop/turn.ts +28 -7
  442. package/templates/develop/develop.declaration.json +1 -1
  443. package/templates/develop/develop.test.ts +4 -0
  444. package/templates/develop/template.json +29 -2
  445. package/templates/idea-to-issue/README.md +27 -0
  446. package/templates/idea-to-issue/idea-to-issue/effects.ts +52 -0
  447. package/templates/idea-to-issue/idea-to-issue/leave.ts +10 -0
  448. package/templates/idea-to-issue/idea-to-issue/next.ts +29 -0
  449. package/templates/idea-to-issue/idea-to-issue/post-person.ts +18 -0
  450. package/templates/idea-to-issue/idea-to-issue/post.ts +50 -0
  451. package/templates/idea-to-issue/idea-to-issue/queue.ts +27 -0
  452. package/templates/idea-to-issue/idea-to-issue/review.ts +42 -0
  453. package/templates/idea-to-issue/idea-to-issue/scenarios.ts +50 -0
  454. package/templates/idea-to-issue/idea-to-issue/turn.ts +40 -0
  455. package/templates/idea-to-issue/idea-to-issue.declaration.json +16 -0
  456. package/templates/idea-to-issue/idea-to-issue.test.ts +79 -0
  457. package/templates/idea-to-issue/idea-to-issue.ts +49 -0
  458. package/templates/idea-to-issue/template.json +81 -0
  459. package/templates/review-day/README.md +97 -0
  460. package/templates/review-day/review-day/critique.ts +58 -0
  461. package/templates/review-day/review-day/decision.ts +29 -0
  462. package/templates/review-day/review-day/facts.ts +69 -0
  463. package/templates/review-day/review-day/label.ts +29 -0
  464. package/templates/review-day/review-day/next.ts +28 -0
  465. package/templates/review-day/review-day/post.ts +27 -0
  466. package/templates/review-day/review-day/report.ts +98 -0
  467. package/templates/review-day/review-day/rules.ts +12 -0
  468. package/templates/review-day/review-day/scenarios.ts +76 -0
  469. package/templates/review-day/review-day/turn.ts +73 -0
  470. package/templates/review-day/review-day.declaration.json +16 -0
  471. package/templates/review-day/review-day.test.ts +362 -0
  472. package/templates/review-day/review-day.ts +37 -0
  473. package/templates/review-day/template.json +56 -0
  474. package/dist/src/cli/watch-start-view.d.ts +0 -18
  475. package/dist/src/cli/watch-start-view.js +0 -77
  476. package/dist/src/steps/decision-gate.d.ts +0 -3
  477. package/dist/workflows/develop-prd.d.ts +0 -7
  478. package/dist/workflows/develop-prd.js +0 -165
  479. package/dist/workflows/develop-ticket.d.ts +0 -9
  480. package/dist/workflows/develop-ticket.js +0 -207
  481. package/dist/workflows/issue-labels.d.ts +0 -16
  482. package/dist/workflows/issue-labels.js +0 -70
  483. package/dist/workflows/ticket-prompts.d.ts +0 -35
  484. package/dist/workflows/ticket-prompts.js +0 -147
@@ -0,0 +1,164 @@
1
+ import { type ReportDatum, type ReportWindow } from "./report-statistics.ts";
2
+ export declare const runnerKinds: readonly ["localMacos", "localLinux", "hostedMacos", "hostedLinux"];
3
+ export type RunnerKind = (typeof runnerKinds)[number];
4
+ export type RunnerData = Readonly<Record<RunnerKind, readonly ReportDatum[]>>;
5
+ export interface ReportCiData {
6
+ readonly jobMinutes: RunnerData | null;
7
+ readonly jobLimitShare: RunnerData | null;
8
+ readonly runnerWaitMinutes: RunnerData | null;
9
+ readonly timeouts: readonly ReportDatum[] | null;
10
+ readonly reruns: readonly ReportDatum[] | null;
11
+ }
12
+ export declare function reportCiMetrics(input: ReportCiData | undefined, window: ReportWindow): {
13
+ jobMinutes: {
14
+ [k: string]: {
15
+ evidence: Readonly<Record<string, unknown>>[];
16
+ mark?: string;
17
+ status: string;
18
+ value: number | null;
19
+ comparisonValue: number | null;
20
+ baseline: {
21
+ evidence: Readonly<Record<string, unknown>>[];
22
+ history: string;
23
+ days: number;
24
+ median: null;
25
+ band: null;
26
+ } | {
27
+ evidence: Readonly<Record<string, unknown>>[];
28
+ history: string;
29
+ days: number;
30
+ median: number;
31
+ band: null;
32
+ } | {
33
+ evidence: Readonly<Record<string, unknown>>[];
34
+ history: string;
35
+ days: number;
36
+ median: number;
37
+ band: {
38
+ low: number;
39
+ high: number;
40
+ };
41
+ };
42
+ };
43
+ };
44
+ jobLimitShare: {
45
+ [k: string]: {
46
+ evidence: Readonly<Record<string, unknown>>[];
47
+ mark?: string;
48
+ status: string;
49
+ value: number | null;
50
+ comparisonValue: number | null;
51
+ baseline: {
52
+ evidence: Readonly<Record<string, unknown>>[];
53
+ history: string;
54
+ days: number;
55
+ median: null;
56
+ band: null;
57
+ } | {
58
+ evidence: Readonly<Record<string, unknown>>[];
59
+ history: string;
60
+ days: number;
61
+ median: number;
62
+ band: null;
63
+ } | {
64
+ evidence: Readonly<Record<string, unknown>>[];
65
+ history: string;
66
+ days: number;
67
+ median: number;
68
+ band: {
69
+ low: number;
70
+ high: number;
71
+ };
72
+ };
73
+ };
74
+ };
75
+ runnerWaitMinutes: {
76
+ [k: string]: {
77
+ evidence: Readonly<Record<string, unknown>>[];
78
+ mark?: string;
79
+ status: string;
80
+ value: number | null;
81
+ comparisonValue: number | null;
82
+ baseline: {
83
+ evidence: Readonly<Record<string, unknown>>[];
84
+ history: string;
85
+ days: number;
86
+ median: null;
87
+ band: null;
88
+ } | {
89
+ evidence: Readonly<Record<string, unknown>>[];
90
+ history: string;
91
+ days: number;
92
+ median: number;
93
+ band: null;
94
+ } | {
95
+ evidence: Readonly<Record<string, unknown>>[];
96
+ history: string;
97
+ days: number;
98
+ median: number;
99
+ band: {
100
+ low: number;
101
+ high: number;
102
+ };
103
+ };
104
+ };
105
+ };
106
+ timeouts: {
107
+ evidence: Readonly<Record<string, unknown>>[];
108
+ mark?: string;
109
+ status: string;
110
+ value: number | null;
111
+ comparisonValue: number | null;
112
+ baseline: {
113
+ evidence: Readonly<Record<string, unknown>>[];
114
+ history: string;
115
+ days: number;
116
+ median: null;
117
+ band: null;
118
+ } | {
119
+ evidence: Readonly<Record<string, unknown>>[];
120
+ history: string;
121
+ days: number;
122
+ median: number;
123
+ band: null;
124
+ } | {
125
+ evidence: Readonly<Record<string, unknown>>[];
126
+ history: string;
127
+ days: number;
128
+ median: number;
129
+ band: {
130
+ low: number;
131
+ high: number;
132
+ };
133
+ };
134
+ };
135
+ reruns: {
136
+ evidence: Readonly<Record<string, unknown>>[];
137
+ mark?: string;
138
+ status: string;
139
+ value: number | null;
140
+ comparisonValue: number | null;
141
+ baseline: {
142
+ evidence: Readonly<Record<string, unknown>>[];
143
+ history: string;
144
+ days: number;
145
+ median: null;
146
+ band: null;
147
+ } | {
148
+ evidence: Readonly<Record<string, unknown>>[];
149
+ history: string;
150
+ days: number;
151
+ median: number;
152
+ band: null;
153
+ } | {
154
+ evidence: Readonly<Record<string, unknown>>[];
155
+ history: string;
156
+ days: number;
157
+ median: number;
158
+ band: {
159
+ low: number;
160
+ high: number;
161
+ };
162
+ };
163
+ };
164
+ };
@@ -0,0 +1,32 @@
1
+ import { reportMetric, } from "./report-statistics.js";
2
+ export const runnerKinds = [
3
+ "localMacos",
4
+ "localLinux",
5
+ "hostedMacos",
6
+ "hostedLinux",
7
+ ];
8
+ export function reportCiMetrics(input, window) {
9
+ const runners = (data) => Object.fromEntries(runnerKinds.map((kind) => [
10
+ kind,
11
+ reportMetric({
12
+ data: data?.[kind] ?? null,
13
+ window,
14
+ aggregation: "median",
15
+ }),
16
+ ]));
17
+ return {
18
+ jobMinutes: runners(input?.jobMinutes),
19
+ jobLimitShare: runners(input?.jobLimitShare),
20
+ runnerWaitMinutes: runners(input?.runnerWaitMinutes),
21
+ timeouts: reportMetric({
22
+ data: input?.timeouts ?? null,
23
+ window,
24
+ aggregation: "count",
25
+ }),
26
+ reruns: reportMetric({
27
+ data: input?.reruns ?? null,
28
+ window,
29
+ aggregation: "count",
30
+ }),
31
+ };
32
+ }
@@ -0,0 +1,15 @@
1
+ import { type Fields } from "./protocol.ts";
2
+ import type { ReportDatum } from "./report-statistics.ts";
3
+ export declare function reportFixRounds(events: readonly Fields[] | null): ReportDatum[] | null;
4
+ export declare function reportPhaseTimes(events: readonly Fields[] | null, method: string): ReportDatum[] | null;
5
+ export declare function reportEffectData(events: readonly Fields[] | null): {
6
+ fixRounds: ReportDatum[] | null;
7
+ workerTurn: ReportDatum[] | null;
8
+ codeReview: ReportDatum[] | null;
9
+ merge: ReportDatum[] | null;
10
+ };
11
+ export declare function reportReviewScores(events: readonly Fields[] | null): Record<string, ReportDatum[]> | null;
12
+ export declare function reportOperatorEffects(events: readonly Fields[] | null, method: "merge" | "label"): {
13
+ number: number;
14
+ at: number;
15
+ }[] | null;
@@ -0,0 +1,212 @@
1
+ import { record } from "./protocol.js";
2
+ function payloadOf(event) {
3
+ return record(event["payload"]) ?? {};
4
+ }
5
+ function resultOf(value) {
6
+ const parsed = typeof value === "string" ? JSON.parse(value) : value;
7
+ const result = record(parsed);
8
+ if (result === undefined)
9
+ throw new Error("invalid-report-effect-result");
10
+ return result;
11
+ }
12
+ function requestsOf(events) {
13
+ const requests = new Map();
14
+ for (const event of events) {
15
+ if (event["type"] !== "effect.requested")
16
+ continue;
17
+ const key = effectKey(event);
18
+ if (!requests.has(key))
19
+ requests.set(key, event);
20
+ }
21
+ return requests;
22
+ }
23
+ function effectKey(event) {
24
+ return JSON.stringify([event["runId"], payloadOf(event)["operationId"]]);
25
+ }
26
+ function pairsOf(events, requests) {
27
+ return events.flatMap((report) => {
28
+ if (report["type"] !== "effect.reported")
29
+ return [];
30
+ const request = requests.get(effectKey(report));
31
+ if (request === undefined)
32
+ throw new Error("missing-report-effect-request");
33
+ return [{ request, report }];
34
+ });
35
+ }
36
+ function historyOf(events) {
37
+ if (events === null)
38
+ return null;
39
+ try {
40
+ const requests = requestsOf(events);
41
+ const runs = new Map();
42
+ for (const request of requests.values()) {
43
+ const runId = request["runId"];
44
+ if (typeof runId !== "string")
45
+ throw new Error("invalid-report-run-id");
46
+ const own = runs.get(runId) ?? [];
47
+ own.push(request);
48
+ runs.set(runId, own);
49
+ }
50
+ return { pairs: pairsOf(events, requests), runs };
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ function fixRoundDatum(pair, requests) {
57
+ const { request, report } = pair;
58
+ const payload = payloadOf(report);
59
+ if (payloadOf(request)["method"] !== "merge" ||
60
+ payload["outcome"] !== "completed")
61
+ return [];
62
+ const result = resultOf(payload["result"]);
63
+ if (!mergedResult(result["merged"]))
64
+ return [];
65
+ const own = requests;
66
+ const opened = own.find((item) => payloadOf(item)["method"] === "open-pr");
67
+ const rounds = opened === undefined
68
+ ? null
69
+ : own.filter((item) => payloadOf(item)["method"] === "run-turn" &&
70
+ Number(item["sequence"]) > Number(opened["sequence"]) &&
71
+ Number(item["sequence"]) < Number(report["sequence"])).length;
72
+ return [
73
+ {
74
+ at: Number(report["at"]),
75
+ value: rounds,
76
+ evidence: {
77
+ runId: report["runId"],
78
+ pullRequest: result["number"] ?? resultOf(payloadOf(request)["payload"])["number"],
79
+ operationId: payload["operationId"],
80
+ fixRounds: rounds,
81
+ },
82
+ },
83
+ ];
84
+ }
85
+ function fixRounds(history) {
86
+ if (history === null)
87
+ return null;
88
+ try {
89
+ return history.pairs.flatMap((pair) => {
90
+ const runId = pair.report["runId"];
91
+ if (typeof runId !== "string")
92
+ throw new Error("invalid-report-run-id");
93
+ return fixRoundDatum(pair, history.runs.get(runId) ?? []);
94
+ });
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ function phaseTimes(history, method) {
101
+ if (history === null)
102
+ return null;
103
+ return history.pairs.flatMap(({ request, report }) => {
104
+ if (payloadOf(request)["method"] !== method)
105
+ return [];
106
+ const at = Number(report["at"]);
107
+ const minutes = (at - Number(request["at"])) / 60_000;
108
+ return [
109
+ {
110
+ at,
111
+ value: Number.isFinite(minutes) && minutes >= 0 ? minutes : null,
112
+ evidence: {
113
+ runId: report["runId"],
114
+ operationId: payloadOf(report)["operationId"],
115
+ },
116
+ },
117
+ ];
118
+ });
119
+ }
120
+ export function reportFixRounds(events) {
121
+ return fixRounds(historyOf(events));
122
+ }
123
+ export function reportPhaseTimes(events, method) {
124
+ return phaseTimes(historyOf(events), method);
125
+ }
126
+ export function reportEffectData(events) {
127
+ const history = historyOf(events);
128
+ return {
129
+ fixRounds: fixRounds(history),
130
+ workerTurn: phaseTimes(history, "run-turn"),
131
+ codeReview: phaseTimes(history, "wait-review"),
132
+ merge: phaseTimes(history, "merge"),
133
+ };
134
+ }
135
+ function mergedResult(value) {
136
+ return (value === true ||
137
+ (typeof value === "string" && /^[a-f0-9]{40}$/i.test(value)));
138
+ }
139
+ export function reportReviewScores(events) {
140
+ const history = historyOf(events);
141
+ if (history === null)
142
+ return null;
143
+ const rounds = { round1: [] };
144
+ for (const { request, report } of history.pairs) {
145
+ if (payloadOf(request)["method"] !== "wait-review")
146
+ continue;
147
+ const own = history.runs.get(String(request["runId"])) ?? [];
148
+ const round = own.filter((event) => payloadOf(event)["method"] === "wait-review" &&
149
+ Number(event["sequence"]) <= Number(request["sequence"])).length;
150
+ const key = `round${String(round)}`;
151
+ const data = rounds[key] ?? [];
152
+ const score = reviewScoreOf(report);
153
+ data.push({
154
+ at: Number(report["at"]),
155
+ value: score,
156
+ evidence: {
157
+ runId: report["runId"],
158
+ operationId: payloadOf(report)["operationId"],
159
+ sequence: report["sequence"],
160
+ round,
161
+ score,
162
+ },
163
+ });
164
+ rounds[key] = data;
165
+ }
166
+ return rounds;
167
+ }
168
+ function reviewScoreOf(report) {
169
+ let score = null;
170
+ try {
171
+ const result = resultOf(payloadOf(report)["result"]);
172
+ const value = result["score"];
173
+ if (payloadOf(report)["outcome"] === "completed" &&
174
+ typeof value === "number" &&
175
+ Number.isFinite(value) &&
176
+ value >= 0 &&
177
+ value <= 5)
178
+ score = value;
179
+ }
180
+ catch {
181
+ score = null;
182
+ }
183
+ return score;
184
+ }
185
+ export function reportOperatorEffects(events, method) {
186
+ const history = historyOf(events);
187
+ if (history === null)
188
+ return null;
189
+ try {
190
+ return history.pairs.flatMap(({ request, report }) => {
191
+ const requested = payloadOf(request);
192
+ const reported = payloadOf(report);
193
+ if (requested["method"] !== method)
194
+ return [];
195
+ if (method === "merge" &&
196
+ (reported["outcome"] !== "completed" ||
197
+ !mergedResult(resultOf(reported["result"])["merged"])))
198
+ return [];
199
+ const number = resultOf(requested["payload"])["number"];
200
+ const at = Number(report["at"]);
201
+ if (typeof number !== "number" ||
202
+ !Number.isSafeInteger(number) ||
203
+ number < 1 ||
204
+ !Number.isFinite(at))
205
+ throw new Error("invalid-report-effect");
206
+ return [{ number, at }];
207
+ });
208
+ }
209
+ catch {
210
+ return null;
211
+ }
212
+ }
@@ -0,0 +1,38 @@
1
+ export declare const reportOutcomes: readonly ["completed", "partial", "blocked", "failed", "cancelled"];
2
+ export type ReportOutcome = (typeof reportOutcomes)[number];
3
+ export interface ReportCompletion {
4
+ readonly runId: string;
5
+ readonly sequence: number;
6
+ readonly at: number;
7
+ readonly outcome: ReportOutcome;
8
+ }
9
+ export interface ReportFlowRun {
10
+ readonly runId: string;
11
+ readonly workflowId: string | null;
12
+ readonly start: number;
13
+ readonly end: number | null;
14
+ }
15
+ export interface ReportFlow {
16
+ readonly queue: {
17
+ readonly workflowId: string;
18
+ readonly lanes: number;
19
+ } | null;
20
+ readonly runs: readonly ReportFlowRun[] | null;
21
+ readonly workflows?: readonly string[];
22
+ readonly skips?: readonly {
23
+ readonly workflowId: string;
24
+ readonly at: number;
25
+ readonly sequence: number;
26
+ }[] | null;
27
+ }
28
+ export interface ReportReadyTicket {
29
+ readonly issue: number;
30
+ readonly intervals: readonly {
31
+ readonly start: number;
32
+ readonly end: number | null;
33
+ }[];
34
+ readonly dependencies: readonly {
35
+ readonly issue: number;
36
+ readonly closedAt: number | null;
37
+ }[];
38
+ }
@@ -0,0 +1,7 @@
1
+ export const reportOutcomes = [
2
+ "completed",
3
+ "partial",
4
+ "blocked",
5
+ "failed",
6
+ "cancelled",
7
+ ];
@@ -0,0 +1,43 @@
1
+ import type { ReportCompletion, ReportFlow, ReportReadyTicket } from "./report-flow-types.ts";
2
+ import { type ReportWindow } from "./report-statistics.ts";
3
+ interface FlowInput {
4
+ readonly flow: ReportFlow | undefined;
5
+ readonly completions: readonly ReportCompletion[] | null;
6
+ readonly ready: ReadyInput;
7
+ }
8
+ interface ReadyInput {
9
+ readonly tickets: readonly ReportReadyTicket[] | null;
10
+ readonly observedSince: number | null;
11
+ }
12
+ export declare function reportFlowMetrics(input: FlowInput, window: ReportWindow): {
13
+ [x: string]: {
14
+ evidence: Readonly<Record<string, unknown>>[];
15
+ mark?: string;
16
+ status: string;
17
+ value: number | null;
18
+ comparisonValue: number | null;
19
+ baseline: {
20
+ evidence: Readonly<Record<string, unknown>>[];
21
+ history: string;
22
+ days: number;
23
+ median: null;
24
+ band: null;
25
+ } | {
26
+ evidence: Readonly<Record<string, unknown>>[];
27
+ history: string;
28
+ days: number;
29
+ median: number;
30
+ band: null;
31
+ } | {
32
+ evidence: Readonly<Record<string, unknown>>[];
33
+ history: string;
34
+ days: number;
35
+ median: number;
36
+ band: {
37
+ low: number;
38
+ high: number;
39
+ };
40
+ };
41
+ };
42
+ };
43
+ export {};