@open-mercato/cezar 0.9.1 → 0.9.2

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 (300) hide show
  1. package/README.md +19 -11
  2. package/dist/agent-config/catalog.d.ts +1 -1
  3. package/dist/agent-config/files.d.ts +1 -1
  4. package/dist/agent-config/service.d.ts +1 -1
  5. package/dist/agent-config/validate.d.ts +1 -1
  6. package/dist/automations/coordinator.d.ts +26 -0
  7. package/dist/automations/coordinator.js +66 -0
  8. package/dist/automations/coordinator.js.map +1 -0
  9. package/dist/automations/github-poller.d.ts +74 -0
  10. package/dist/automations/github-poller.js +234 -0
  11. package/dist/automations/github-poller.js.map +1 -0
  12. package/dist/automations/scheduler.d.ts +42 -0
  13. package/dist/automations/scheduler.js +192 -0
  14. package/dist/automations/scheduler.js.map +1 -0
  15. package/dist/automations/store.d.ts +65 -0
  16. package/dist/automations/store.js +298 -0
  17. package/dist/automations/store.js.map +1 -0
  18. package/dist/automations/task-template.d.ts +18 -0
  19. package/dist/automations/task-template.js +95 -0
  20. package/dist/automations/task-template.js.map +1 -0
  21. package/dist/automations/types.d.ts +251 -0
  22. package/dist/automations/types.js +158 -0
  23. package/dist/automations/types.js.map +1 -0
  24. package/dist/config.d.ts +9 -111
  25. package/dist/contract/agent-config.d.ts +151 -0
  26. package/dist/contract/automations.d.ts +911 -0
  27. package/dist/contract/events.d.ts +45 -0
  28. package/dist/contract/github.d.ts +467 -0
  29. package/dist/contract/health.d.ts +96 -0
  30. package/dist/contract/index.d.ts +15 -0
  31. package/dist/contract/index.js +1421 -0
  32. package/dist/contract/projects.d.ts +182 -0
  33. package/dist/contract/repo.d.ts +234 -0
  34. package/dist/contract/runs.d.ts +1226 -0
  35. package/dist/contract/skills.d.ts +225 -0
  36. package/dist/contract/workflows.d.ts +212 -0
  37. package/dist/contract/workspace.d.ts +442 -0
  38. package/dist/core/agent-env.d.ts +1 -1
  39. package/dist/core/agent-runner.d.ts +12 -1
  40. package/dist/core/agent-runner.js +13 -0
  41. package/dist/core/agent-runner.js.map +1 -1
  42. package/dist/core/ask.d.ts +45 -124
  43. package/dist/core/ask.js +103 -13
  44. package/dist/core/ask.js.map +1 -1
  45. package/dist/core/claude-cli-runner.d.ts +2 -2
  46. package/dist/core/claude-cli-runner.js +52 -9
  47. package/dist/core/claude-cli-runner.js.map +1 -1
  48. package/dist/core/claude-ui-mapper.d.ts +1 -1
  49. package/dist/core/codex-app-server-runner.d.ts +1 -1
  50. package/dist/core/codex-app-server-runner.js +55 -3
  51. package/dist/core/codex-app-server-runner.js.map +1 -1
  52. package/dist/core/codex-app-server-transport.d.ts +6 -1
  53. package/dist/core/codex-app-server-transport.js +12 -3
  54. package/dist/core/codex-app-server-transport.js.map +1 -1
  55. package/dist/core/codex-model-catalog.d.ts +1 -1
  56. package/dist/core/codex-ui-mapper.d.ts +5 -1
  57. package/dist/core/codex-ui-mapper.js +74 -17
  58. package/dist/core/codex-ui-mapper.js.map +1 -1
  59. package/dist/core/model-identity.d.ts +1 -1
  60. package/dist/core/model-presets.d.ts +2 -2
  61. package/dist/core/model-presets.js +1 -1
  62. package/dist/core/opencode-server-runner.d.ts +2 -2
  63. package/dist/core/opencode-ui-mapper.d.ts +4 -1
  64. package/dist/core/opencode-ui-mapper.js +45 -7
  65. package/dist/core/opencode-ui-mapper.js.map +1 -1
  66. package/dist/core/provider-auth.d.ts +62 -0
  67. package/dist/core/provider-auth.js +290 -0
  68. package/dist/core/provider-auth.js.map +1 -0
  69. package/dist/core/provider-availability.d.ts +3 -0
  70. package/dist/core/provider-availability.js +13 -0
  71. package/dist/core/provider-availability.js.map +1 -0
  72. package/dist/core/runner-factory.d.ts +1 -1
  73. package/dist/core/runner-model-catalog.d.ts +1 -1
  74. package/dist/core/tool-display.d.ts +1 -1
  75. package/dist/core/ui-events.d.ts +1 -1
  76. package/dist/core/ui-events.js +1 -1
  77. package/dist/git-diff-base.d.ts +60 -0
  78. package/dist/git-diff-base.js +54 -0
  79. package/dist/git-diff-base.js.map +1 -0
  80. package/dist/git-worktree.d.ts +37 -6
  81. package/dist/git-worktree.js +39 -9
  82. package/dist/git-worktree.js.map +1 -1
  83. package/dist/handoff.d.ts +2 -2
  84. package/dist/handoff.js +1 -1
  85. package/dist/index.js +65 -8
  86. package/dist/index.js.map +1 -1
  87. package/dist/paths.d.ts +16 -1
  88. package/dist/paths.js +24 -1
  89. package/dist/paths.js.map +1 -1
  90. package/dist/planner.d.ts +2 -2
  91. package/dist/planner.js +1 -1
  92. package/dist/planner.js.map +1 -1
  93. package/dist/release/manifests.d.ts +81 -0
  94. package/dist/release/manifests.js +74 -0
  95. package/dist/release/manifests.js.map +1 -0
  96. package/dist/release/snapshot.d.ts +9 -23
  97. package/dist/release/snapshot.js +9 -22
  98. package/dist/release/snapshot.js.map +1 -1
  99. package/dist/release/stable.d.ts +15 -29
  100. package/dist/release/stable.js +14 -27
  101. package/dist/release/stable.js.map +1 -1
  102. package/dist/runs/auto-name.d.ts +1 -1
  103. package/dist/runs/retention.d.ts +1 -1
  104. package/dist/runs/store.d.ts +142 -336
  105. package/dist/runs/store.js +136 -9
  106. package/dist/runs/store.js.map +1 -1
  107. package/dist/runs/ui-event-sink.d.ts +1 -1
  108. package/dist/server/app-type.d.ts +21 -0
  109. package/dist/server/app-type.js +2 -0
  110. package/dist/server/app-type.js.map +1 -0
  111. package/dist/server/capabilities.d.ts +6 -5
  112. package/dist/server/capabilities.js +11 -0
  113. package/dist/server/capabilities.js.map +1 -1
  114. package/dist/server/forge/github.d.ts +58 -151
  115. package/dist/server/forge/github.js +530 -6
  116. package/dist/server/forge/github.js.map +1 -1
  117. package/dist/server/forge/index.d.ts +10 -3
  118. package/dist/server/forge/index.js +14 -1
  119. package/dist/server/forge/index.js.map +1 -1
  120. package/dist/server/forge/types.d.ts +86 -1
  121. package/dist/server/git-changes.d.ts +8 -8
  122. package/dist/server/git-changes.js +14 -17
  123. package/dist/server/git-changes.js.map +1 -1
  124. package/dist/server/git.d.ts +2 -0
  125. package/dist/server/git.js +9 -0
  126. package/dist/server/git.js.map +1 -1
  127. package/dist/server/github.d.ts +3 -3
  128. package/dist/server/github.js +1 -1
  129. package/dist/server/github.js.map +1 -1
  130. package/dist/server/pr.d.ts +2 -2
  131. package/dist/server/project-context.d.ts +20 -3
  132. package/dist/server/project-context.js +30 -1
  133. package/dist/server/project-context.js.map +1 -1
  134. package/dist/server/provider-action-gate.d.ts +8 -0
  135. package/dist/server/provider-action-gate.js +54 -0
  136. package/dist/server/provider-action-gate.js.map +1 -0
  137. package/dist/server/provider-auth-runtime.d.ts +21 -0
  138. package/dist/server/provider-auth-runtime.js +66 -0
  139. package/dist/server/provider-auth-runtime.js.map +1 -0
  140. package/dist/server/server.d.ts +11142 -47
  141. package/dist/server/server.js +1714 -806
  142. package/dist/server/server.js.map +1 -1
  143. package/dist/server/validators.d.ts +97 -0
  144. package/dist/server/validators.js +86 -0
  145. package/dist/server/validators.js.map +1 -0
  146. package/dist/server/ws.d.ts +2 -2
  147. package/dist/server/ws.js +2 -2
  148. package/dist/server/ws.js.map +1 -1
  149. package/dist/server-install/engine.d.ts +1 -1
  150. package/dist/server-install/platforms/macosx-ngrok.d.ts +1 -1
  151. package/dist/server-install/platforms/ubuntu-vps.d.ts +16 -1
  152. package/dist/server-install/platforms/ubuntu-vps.js +83 -1
  153. package/dist/server-install/platforms/ubuntu-vps.js.map +1 -1
  154. package/dist/server-install/state.d.ts +1 -1
  155. package/dist/server-install/steps.d.ts +2 -2
  156. package/dist/server-install/strategies.d.ts +1 -1
  157. package/dist/server-install/types.d.ts +38 -424
  158. package/dist/server-install/ui.d.ts +1 -1
  159. package/dist/skills-banner.d.ts +7 -6
  160. package/dist/skills-banner.js +7 -6
  161. package/dist/skills-banner.js.map +1 -1
  162. package/dist/skills-remote.d.ts +2 -2
  163. package/dist/skills-update.d.ts +88 -0
  164. package/dist/skills-update.js +392 -0
  165. package/dist/skills-update.js.map +1 -0
  166. package/dist/skills.d.ts +2 -0
  167. package/dist/skills.js +3 -2
  168. package/dist/skills.js.map +1 -1
  169. package/dist/todos.d.ts +2 -28
  170. package/dist/todos.js +1 -1
  171. package/dist/ui-state.d.ts +16 -2
  172. package/dist/ui-state.js +14 -1
  173. package/dist/ui-state.js.map +1 -1
  174. package/dist/workflows/load.d.ts +1 -1
  175. package/dist/workflows/run.d.ts +53 -12
  176. package/dist/workflows/run.js +436 -64
  177. package/dist/workflows/run.js.map +1 -1
  178. package/dist/workflows/types.d.ts +59 -224
  179. package/dist/workflows/types.js +14 -0
  180. package/dist/workflows/types.js.map +1 -1
  181. package/dist/workspace/config.d.ts +68 -206
  182. package/dist/workspace/config.js +145 -14
  183. package/dist/workspace/config.js.map +1 -1
  184. package/dist/workspace/migrations.d.ts +1 -1
  185. package/dist/workspace/migrations.js +19 -4
  186. package/dist/workspace/migrations.js.map +1 -1
  187. package/dist/workspace/projects.d.ts +8 -2
  188. package/dist/workspace/projects.js +9 -3
  189. package/dist/workspace/projects.js.map +1 -1
  190. package/dist/workspace/semaphore.d.ts +6 -0
  191. package/dist/workspace/semaphore.js +14 -1
  192. package/dist/workspace/semaphore.js.map +1 -1
  193. package/dist/workspace/ui-state.d.ts +13 -3
  194. package/dist/workspace/ui-state.js +15 -5
  195. package/dist/workspace/ui-state.js.map +1 -1
  196. package/package.json +17 -39
  197. package/scripts/inline-contract.mjs +112 -0
  198. package/scripts/mock-claude.mjs +39 -1
  199. package/scripts/sync-readme.mjs +20 -0
  200. package/web/dist/assets/alert-dialog-ghffK6g9.js +1 -0
  201. package/web/dist/assets/arrow-down-Cz8qb71e.js +1 -0
  202. package/web/dist/assets/arrow-left-wcYKQXI_.js +1 -0
  203. package/web/dist/assets/bundle-mjs-BT31bpU6.js +1 -0
  204. package/web/dist/assets/centered-state-ZtnFHA-n.js +43 -0
  205. package/web/dist/assets/chevron-right-G4caF2QV.js +1 -0
  206. package/web/dist/assets/{chunk-BO2N2NFS-DtrdTCWa.js → chunk-BO2N2NFS-DE6qKn3r.js} +8 -8
  207. package/web/dist/assets/circle-check--KvBxXWp.js +1 -0
  208. package/web/dist/assets/circle-x-C3EFZ3xf.js +1 -0
  209. package/web/dist/assets/collapsible-B0JVzd0B.js +1 -0
  210. package/web/dist/assets/commit-list-wm6DPHNs.js +1 -0
  211. package/web/dist/assets/compare-variants-DbdP4Y5T.js +1 -0
  212. package/web/dist/assets/{core-DePtBHcl.js → core-BCsw8oQw.js} +1 -1
  213. package/web/dist/assets/diff-Bizc96qe.js +3 -0
  214. package/web/dist/assets/diff-stat-Dyfg3ltF.js +1 -0
  215. package/web/dist/assets/{diff-view-DCeSegKk.js → diff-view-CG8ek6tC.js} +4 -4
  216. package/web/dist/assets/dropdown-menu-C1Dlf35P.js +1 -0
  217. package/web/dist/assets/editable-title-5rC_QRBZ.js +1 -0
  218. package/web/dist/assets/{ellipsis-vertical-CNnSLn5a.js → ellipsis-vertical-DpGTRqC2.js} +1 -1
  219. package/web/dist/assets/{file-D4GBh1ao.js → file-DlUGpUlb.js} +1 -1
  220. package/web/dist/assets/folder-BAY6Vddy.js +1 -0
  221. package/web/dist/assets/{git-pull-request-DnR8Xh4_.js → git-pull-request-agOG0iGM.js} +1 -1
  222. package/web/dist/assets/git-toolbar-DGiNMmtY.js +1 -0
  223. package/web/dist/assets/github-Vp7lxYGQ.js +1 -0
  224. package/web/dist/assets/highlighted-body-OFNGDK62-BL-MfFgl.js +1 -0
  225. package/web/dist/assets/highlighter-CdHqIwFr.js +3 -0
  226. package/web/dist/assets/image-preview-BWGk5fPX.js +1 -0
  227. package/web/dist/assets/index-DSxyJpuK.css +2 -0
  228. package/web/dist/assets/index-DiawI6RX.js +6 -0
  229. package/web/dist/assets/lib-BQXq3kEf.js +1 -0
  230. package/web/dist/assets/lib-BxQXEXDF.js +1 -0
  231. package/web/dist/assets/markdown-BGBOGCA_.js +2 -0
  232. package/web/dist/assets/mermaid-GHXKKRXX-C4jxqUUb.js +1 -0
  233. package/web/dist/assets/new-task-form-BpAw_Dks.js +1 -0
  234. package/web/dist/assets/pill-Dvs-P0xy.js +1 -0
  235. package/web/dist/assets/project-router-Cx8NPoqn.js +1 -0
  236. package/web/dist/assets/prompt-templates-CSBYBR1I.js +15 -0
  237. package/web/dist/assets/react-runtime-CCIEwYL0.js +9 -0
  238. package/web/dist/assets/{refresh-cw-BT8E96Tm.js → refresh-cw-BoGdAykg.js} +1 -1
  239. package/web/dist/assets/repo-git-PmX-BNMo.js +1 -0
  240. package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  241. package/web/dist/assets/run-diff-EcOkf3ti.js +3 -0
  242. package/web/dist/assets/run-header-BGiv6_qX.js +1 -0
  243. package/web/dist/assets/{search-x-BDjaMrzG.js → search-x-X3EpVhgs.js} +1 -1
  244. package/web/dist/assets/skill-empty-hint-CZLALx6l.js +1 -0
  245. package/web/dist/assets/skills-BiWfHmCR.js +1 -0
  246. package/web/dist/assets/skills-CC91ouGH.js +1 -0
  247. package/web/dist/assets/sparkles-Dt4q7pbG.js +1 -0
  248. package/web/dist/assets/{square-terminal-Ckjjn0vb.js → square-terminal-hwBL8XsC.js} +1 -1
  249. package/web/dist/assets/tab-link-DIlR5T07.js +1 -0
  250. package/web/dist/assets/task-changes-XkHDxzQA.js +1 -0
  251. package/web/dist/assets/task-commits-BTTA5k5T.js +1 -0
  252. package/web/dist/assets/task-files-Da8_4C9g.js +2 -0
  253. package/web/dist/assets/task-thread-DoNXUsHr.js +9 -0
  254. package/web/dist/assets/textarea-CUdokhkv.js +1 -0
  255. package/web/dist/assets/thread-loading-B8q8ukXJ.js +1 -0
  256. package/web/dist/assets/{trash-2-DAyZ0VSi.js → trash-2-DhVIdWv8.js} +1 -1
  257. package/web/dist/assets/{triangle-alert-Uy8rokUh.js → triangle-alert-XYT0DGCI.js} +1 -1
  258. package/web/dist/assets/{upload-CDdyPPo_.js → upload-BKjN59-1.js} +1 -1
  259. package/web/dist/assets/use-desktop-Bf5LS_P4.js +1 -0
  260. package/web/dist/assets/use-submit-shortcut-CzVyoAMd.js +1 -0
  261. package/web/dist/assets/utils-DsLuRXwV.js +64 -0
  262. package/web/dist/assets/workflows-o2QU_pvU.js +11 -0
  263. package/web/dist/assets/zoomable-image-7WyUiaVD.js +1 -0
  264. package/web/dist/index.html +32 -13
  265. package/scripts/dev.mjs +0 -74
  266. package/scripts/release-snapshot.mjs +0 -130
  267. package/scripts/release.mjs +0 -119
  268. package/web/dist/assets/arrow-left-CnSdp92h.js +0 -1
  269. package/web/dist/assets/bundle-mjs-BegPhL5c.js +0 -1
  270. package/web/dist/assets/centered-state-DOsTcJZF.js +0 -43
  271. package/web/dist/assets/commit-list-BrxBEzRK.js +0 -1
  272. package/web/dist/assets/compare-variants-Bv2c9ORF.js +0 -1
  273. package/web/dist/assets/dist-B6XQOhgM.js +0 -1
  274. package/web/dist/assets/git-toolbar-pIC1ubPM.js +0 -1
  275. package/web/dist/assets/github-DTTSG0ht.js +0 -1
  276. package/web/dist/assets/highlighted-body-OFNGDK62-BuFJwunK.js +0 -1
  277. package/web/dist/assets/image-preview-DEhW0TFz.js +0 -1
  278. package/web/dist/assets/index-Cijmlz7q.js +0 -30
  279. package/web/dist/assets/index-DzroxqBG.css +0 -2
  280. package/web/dist/assets/lib-DPEZDBUN.js +0 -1
  281. package/web/dist/assets/lib-uHpeUPzK.js +0 -1
  282. package/web/dist/assets/mermaid-GHXKKRXX-CN2zQue0.js +0 -1
  283. package/web/dist/assets/open-mercato-toBr6SOa.svg +0 -11
  284. package/web/dist/assets/project-router-BMx4e8m-.js +0 -1
  285. package/web/dist/assets/repo-git-BusYfa3t.js +0 -1
  286. package/web/dist/assets/run-diff-wOJ3odA-.js +0 -3
  287. package/web/dist/assets/run-header-Cg5incil.js +0 -1
  288. package/web/dist/assets/skill-empty-hint-DTUSp6Vl.js +0 -1
  289. package/web/dist/assets/skills-PpP2owbM.js +0 -1
  290. package/web/dist/assets/tab-link-F3uQrdm2.js +0 -1
  291. package/web/dist/assets/task-changes-iD9kS79I.js +0 -1
  292. package/web/dist/assets/task-commits-COkLaUri.js +0 -1
  293. package/web/dist/assets/task-files-Ckttz7XH.js +0 -2
  294. package/web/dist/assets/task-thread-CQD91VPt.js +0 -9
  295. package/web/dist/assets/textarea-Bj_LCreg.js +0 -1
  296. package/web/dist/assets/use-desktop-DUh0STzq.js +0 -3
  297. package/web/dist/assets/utils-B8s5qIcK.js +0 -1
  298. package/web/dist/assets/workflows-BFk8C0co.js +0 -11
  299. package/web/dist/assets/zoomable-image-PEDOqyLQ.js +0 -1
  300. /package/web/{open-mercato.svg → dist/open-mercato.svg} +0 -0
@@ -0,0 +1,911 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * The AUTOMATIONS family of `/api/v1` (#694) — the per-project GitHub triggers, their runtime
4
+ * state, the manual "test filter" checks and the execution log.
5
+ *
6
+ * These shapes exist twice on purpose and only once as a DEFINITION of what the wire carries.
7
+ * `packages/cezar/src/automations/types.ts` owns the STORAGE schemas: they are `.passthrough()`,
8
+ * because a definitions/state/log file written by a newer cezar must survive a round trip through
9
+ * an older one rather than lose keys it has never heard of. The schemas here are the CLOSED wire
10
+ * half of those files — every key the routes actually answer with, and no index signature, so a
11
+ * consumer compiles against a shape rather than against `unknown`. `src/server/
12
+ * contract-parity.automations.test.ts` checks each response schema against the route that serves
13
+ * it, in both directions.
14
+ *
15
+ * What that guard can and cannot see is worth knowing: a named key whose type drifts fails, and a
16
+ * key this file makes required that the route does not send fails — but an EXTRA key arriving
17
+ * through the storage schemas' catchall cannot, since the route's own type admits any key. That is
18
+ * the same limit `contract-parity.workspace.test.ts` documents for the open GUI-pref bags.
19
+ */
20
+ /** The GitHub activity an automation reacts to. Four events, all bounded polls — never a webhook. */
21
+ export declare const automationEventSchema: z.ZodEnum<{
22
+ "issue.labeled": "issue.labeled";
23
+ "issue.opened": "issue.opened";
24
+ "issue.unlabeled": "issue.unlabeled";
25
+ "pull_request.opened": "pull_request.opened";
26
+ }>;
27
+ export type AutomationEvent = z.infer<typeof automationEventSchema>;
28
+ /**
29
+ * The bounded candidate filter.
30
+ *
31
+ * `lookbackDays` and `maxRecords` are REQUIRED here although the storage schema defaults them: a
32
+ * default fills on PARSE, so both keys are always present in what the server hands out — and a
33
+ * caller that omits them in a request body still gets them back materialized.
34
+ */
35
+ export declare const automationFiltersSchema: z.ZodObject<{
36
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
37
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
38
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
39
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
40
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
41
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
42
+ lookbackDays: z.ZodNumber;
43
+ maxRecords: z.ZodNumber;
44
+ }, z.core.$strip>;
45
+ export type AutomationFilters = z.infer<typeof automationFiltersSchema>;
46
+ /**
47
+ * The task a match launches: `POST /runs`' own body minus the three keys an automation owns
48
+ * itself — `task` (the rendered prompt), `images` and `todoId` — plus the prompt TEMPLATE.
49
+ *
50
+ * Two keys are re-spelled rather than inherited, because the automation schema really does differ
51
+ * from the composer's and the contract has to describe the automation route:
52
+ *
53
+ * - `variants` is the literal union the server's own automation schema accepts (`1 | 2 | 3`),
54
+ * not the composer's `z.number().int().min(1).max(3)`. Identical values, but only the literal
55
+ * spelling is assignable to the route's parameter;
56
+ * - `systemPrompt` carries no `.transform()` here. The composer's trims-to-absent on the way in,
57
+ * which makes the key REQUIRED (`string | undefined`) on the output side; the automation route
58
+ * stores and answers it plainly, so it stays optional.
59
+ */
60
+ export declare const automationTaskSchema: z.ZodObject<{
61
+ workflow: z.ZodOptional<z.ZodString>;
62
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
63
+ id: z.ZodString;
64
+ name: z.ZodOptional<z.ZodString>;
65
+ prompt: z.ZodOptional<z.ZodString>;
66
+ skill: z.ZodOptional<z.ZodString>;
67
+ model: z.ZodOptional<z.ZodString>;
68
+ runner: z.ZodOptional<z.ZodEnum<{
69
+ claude: "claude";
70
+ codex: "codex";
71
+ opencode: "opencode";
72
+ }>>;
73
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
74
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
+ command: z.ZodOptional<z.ZodString>;
76
+ onFail: z.ZodOptional<z.ZodObject<{
77
+ retry: z.ZodString;
78
+ max: z.ZodDefault<z.ZodNumber>;
79
+ }, z.core.$strip>>;
80
+ }, z.core.$strip>>>;
81
+ model: z.ZodOptional<z.ZodString>;
82
+ runner: z.ZodOptional<z.ZodEnum<{
83
+ claude: "claude";
84
+ codex: "codex";
85
+ opencode: "opencode";
86
+ }>>;
87
+ worktree: z.ZodOptional<z.ZodBoolean>;
88
+ autonomous: z.ZodOptional<z.ZodBoolean>;
89
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
90
+ prompt: z.ZodString;
91
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
92
+ systemPrompt: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strip>;
94
+ export type AutomationTask = z.infer<typeof automationTaskSchema>;
95
+ /** One stored automation, as every route that answers a single definition serves it. */
96
+ export declare const automationDefinitionSchema: z.ZodObject<{
97
+ id: z.ZodString;
98
+ revision: z.ZodNumber;
99
+ name: z.ZodString;
100
+ description: z.ZodOptional<z.ZodString>;
101
+ enabled: z.ZodBoolean;
102
+ events: z.ZodArray<z.ZodEnum<{
103
+ "issue.labeled": "issue.labeled";
104
+ "issue.opened": "issue.opened";
105
+ "issue.unlabeled": "issue.unlabeled";
106
+ "pull_request.opened": "pull_request.opened";
107
+ }>>;
108
+ intervalSeconds: z.ZodNumber;
109
+ filters: z.ZodObject<{
110
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
111
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
112
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
113
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
114
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
115
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
116
+ lookbackDays: z.ZodNumber;
117
+ maxRecords: z.ZodNumber;
118
+ }, z.core.$strip>;
119
+ task: z.ZodObject<{
120
+ workflow: z.ZodOptional<z.ZodString>;
121
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
122
+ id: z.ZodString;
123
+ name: z.ZodOptional<z.ZodString>;
124
+ prompt: z.ZodOptional<z.ZodString>;
125
+ skill: z.ZodOptional<z.ZodString>;
126
+ model: z.ZodOptional<z.ZodString>;
127
+ runner: z.ZodOptional<z.ZodEnum<{
128
+ claude: "claude";
129
+ codex: "codex";
130
+ opencode: "opencode";
131
+ }>>;
132
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
133
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
134
+ command: z.ZodOptional<z.ZodString>;
135
+ onFail: z.ZodOptional<z.ZodObject<{
136
+ retry: z.ZodString;
137
+ max: z.ZodDefault<z.ZodNumber>;
138
+ }, z.core.$strip>>;
139
+ }, z.core.$strip>>>;
140
+ model: z.ZodOptional<z.ZodString>;
141
+ runner: z.ZodOptional<z.ZodEnum<{
142
+ claude: "claude";
143
+ codex: "codex";
144
+ opencode: "opencode";
145
+ }>>;
146
+ worktree: z.ZodOptional<z.ZodBoolean>;
147
+ autonomous: z.ZodOptional<z.ZodBoolean>;
148
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
149
+ prompt: z.ZodString;
150
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
151
+ systemPrompt: z.ZodOptional<z.ZodString>;
152
+ }, z.core.$strip>;
153
+ createdAt: z.ZodString;
154
+ updatedAt: z.ZodString;
155
+ }, z.core.$strip>;
156
+ export type AutomationDefinition = z.infer<typeof automationDefinitionSchema>;
157
+ /** Where the poller had got to: an ISO timestamp plus a tie-breaker for same-second records. */
158
+ export declare const automationCursorSchema: z.ZodObject<{
159
+ timestamp: z.ZodString;
160
+ tieBreaker: z.ZodOptional<z.ZodString>;
161
+ }, z.core.$strip>;
162
+ export type AutomationCursor = z.infer<typeof automationCursorSchema>;
163
+ /**
164
+ * The scheduler's own bookkeeping for one automation. Every key is optional — a definition that
165
+ * has never run has no state at all, and the keys appear as the poller reaches each stage.
166
+ */
167
+ export declare const automationRuntimeStateSchema: z.ZodObject<{
168
+ revision: z.ZodOptional<z.ZodNumber>;
169
+ baselineAt: z.ZodOptional<z.ZodString>;
170
+ cursor: z.ZodOptional<z.ZodObject<{
171
+ timestamp: z.ZodString;
172
+ tieBreaker: z.ZodOptional<z.ZodString>;
173
+ }, z.core.$strip>>;
174
+ frozenHighWatermark: z.ZodOptional<z.ZodObject<{
175
+ timestamp: z.ZodString;
176
+ tieBreaker: z.ZodString;
177
+ }, z.core.$strip>>;
178
+ backlogAfter: z.ZodOptional<z.ZodObject<{
179
+ timestamp: z.ZodString;
180
+ tieBreaker: z.ZodString;
181
+ }, z.core.$strip>>;
182
+ nextCheckAt: z.ZodOptional<z.ZodString>;
183
+ lastSuccessAt: z.ZodOptional<z.ZodString>;
184
+ etags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
185
+ backoffUntil: z.ZodOptional<z.ZodString>;
186
+ consecutiveFailures: z.ZodOptional<z.ZodNumber>;
187
+ }, z.core.$strip>;
188
+ export type AutomationRuntimeState = z.infer<typeof automationRuntimeStateSchema>;
189
+ /** What one poll decided about one candidate. `baseline` and `preview` are bookkeeping rows: no
190
+ * task was launched and none was meant to be. */
191
+ export declare const automationLogResultSchema: z.ZodEnum<{
192
+ baseline: "baseline";
193
+ duplicate: "duplicate";
194
+ error: "error";
195
+ launched: "launched";
196
+ "no-match": "no-match";
197
+ preview: "preview";
198
+ "rate-limited": "rate-limited";
199
+ }>;
200
+ export type AutomationLogResult = z.infer<typeof automationLogResultSchema>;
201
+ /** One row of `automation-log.ndjson` — the audit trail the log view renders. */
202
+ export declare const automationLogRecordSchema: z.ZodObject<{
203
+ seq: z.ZodNumber;
204
+ ts: z.ZodString;
205
+ automationId: z.ZodString;
206
+ revision: z.ZodNumber;
207
+ event: z.ZodOptional<z.ZodEnum<{
208
+ "issue.labeled": "issue.labeled";
209
+ "issue.opened": "issue.opened";
210
+ "issue.unlabeled": "issue.unlabeled";
211
+ "pull_request.opened": "pull_request.opened";
212
+ }>>;
213
+ result: z.ZodEnum<{
214
+ baseline: "baseline";
215
+ duplicate: "duplicate";
216
+ error: "error";
217
+ launched: "launched";
218
+ "no-match": "no-match";
219
+ preview: "preview";
220
+ "rate-limited": "rate-limited";
221
+ }>;
222
+ reason: z.ZodOptional<z.ZodString>;
223
+ durationMs: z.ZodOptional<z.ZodNumber>;
224
+ receiptId: z.ZodOptional<z.ZodString>;
225
+ runId: z.ZodOptional<z.ZodString>;
226
+ githubNumber: z.ZodOptional<z.ZodNumber>;
227
+ githubTitle: z.ZodOptional<z.ZodString>;
228
+ githubUrl: z.ZodOptional<z.ZodString>;
229
+ rateLimit: z.ZodOptional<z.ZodObject<{
230
+ bucket: z.ZodEnum<{
231
+ core: "core";
232
+ search: "search";
233
+ }>;
234
+ remaining: z.ZodOptional<z.ZodNumber>;
235
+ resetAt: z.ZodOptional<z.ZodString>;
236
+ }, z.core.$strip>>;
237
+ }, z.core.$strip>;
238
+ export type AutomationLogRecord = z.infer<typeof automationLogRecordSchema>;
239
+ /** The list view's per-automation tallies, counted over that automation's last 100 log rows. */
240
+ export declare const automationCountsSchema: z.ZodObject<{
241
+ matches: z.ZodNumber;
242
+ launched: z.ZodNumber;
243
+ duplicates: z.ZodNumber;
244
+ errors: z.ZodNumber;
245
+ }, z.core.$strip>;
246
+ export type AutomationCounts = z.infer<typeof automationCountsSchema>;
247
+ /** One row of `GET /automations`: the definition plus everything the list renders beside it. */
248
+ export declare const automationListEntrySchema: z.ZodObject<{
249
+ id: z.ZodString;
250
+ revision: z.ZodNumber;
251
+ name: z.ZodString;
252
+ description: z.ZodOptional<z.ZodString>;
253
+ enabled: z.ZodBoolean;
254
+ events: z.ZodArray<z.ZodEnum<{
255
+ "issue.labeled": "issue.labeled";
256
+ "issue.opened": "issue.opened";
257
+ "issue.unlabeled": "issue.unlabeled";
258
+ "pull_request.opened": "pull_request.opened";
259
+ }>>;
260
+ intervalSeconds: z.ZodNumber;
261
+ filters: z.ZodObject<{
262
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
263
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
264
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
265
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
266
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
267
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
268
+ lookbackDays: z.ZodNumber;
269
+ maxRecords: z.ZodNumber;
270
+ }, z.core.$strip>;
271
+ task: z.ZodObject<{
272
+ workflow: z.ZodOptional<z.ZodString>;
273
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
274
+ id: z.ZodString;
275
+ name: z.ZodOptional<z.ZodString>;
276
+ prompt: z.ZodOptional<z.ZodString>;
277
+ skill: z.ZodOptional<z.ZodString>;
278
+ model: z.ZodOptional<z.ZodString>;
279
+ runner: z.ZodOptional<z.ZodEnum<{
280
+ claude: "claude";
281
+ codex: "codex";
282
+ opencode: "opencode";
283
+ }>>;
284
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
285
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
286
+ command: z.ZodOptional<z.ZodString>;
287
+ onFail: z.ZodOptional<z.ZodObject<{
288
+ retry: z.ZodString;
289
+ max: z.ZodDefault<z.ZodNumber>;
290
+ }, z.core.$strip>>;
291
+ }, z.core.$strip>>>;
292
+ model: z.ZodOptional<z.ZodString>;
293
+ runner: z.ZodOptional<z.ZodEnum<{
294
+ claude: "claude";
295
+ codex: "codex";
296
+ opencode: "opencode";
297
+ }>>;
298
+ worktree: z.ZodOptional<z.ZodBoolean>;
299
+ autonomous: z.ZodOptional<z.ZodBoolean>;
300
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
301
+ prompt: z.ZodString;
302
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
303
+ systemPrompt: z.ZodOptional<z.ZodString>;
304
+ }, z.core.$strip>;
305
+ createdAt: z.ZodString;
306
+ updatedAt: z.ZodString;
307
+ state: z.ZodOptional<z.ZodObject<{
308
+ revision: z.ZodOptional<z.ZodNumber>;
309
+ baselineAt: z.ZodOptional<z.ZodString>;
310
+ cursor: z.ZodOptional<z.ZodObject<{
311
+ timestamp: z.ZodString;
312
+ tieBreaker: z.ZodOptional<z.ZodString>;
313
+ }, z.core.$strip>>;
314
+ frozenHighWatermark: z.ZodOptional<z.ZodObject<{
315
+ timestamp: z.ZodString;
316
+ tieBreaker: z.ZodString;
317
+ }, z.core.$strip>>;
318
+ backlogAfter: z.ZodOptional<z.ZodObject<{
319
+ timestamp: z.ZodString;
320
+ tieBreaker: z.ZodString;
321
+ }, z.core.$strip>>;
322
+ nextCheckAt: z.ZodOptional<z.ZodString>;
323
+ lastSuccessAt: z.ZodOptional<z.ZodString>;
324
+ etags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
325
+ backoffUntil: z.ZodOptional<z.ZodString>;
326
+ consecutiveFailures: z.ZodOptional<z.ZodNumber>;
327
+ }, z.core.$strip>>;
328
+ latestLog: z.ZodOptional<z.ZodObject<{
329
+ seq: z.ZodNumber;
330
+ ts: z.ZodString;
331
+ automationId: z.ZodString;
332
+ revision: z.ZodNumber;
333
+ event: z.ZodOptional<z.ZodEnum<{
334
+ "issue.labeled": "issue.labeled";
335
+ "issue.opened": "issue.opened";
336
+ "issue.unlabeled": "issue.unlabeled";
337
+ "pull_request.opened": "pull_request.opened";
338
+ }>>;
339
+ result: z.ZodEnum<{
340
+ baseline: "baseline";
341
+ duplicate: "duplicate";
342
+ error: "error";
343
+ launched: "launched";
344
+ "no-match": "no-match";
345
+ preview: "preview";
346
+ "rate-limited": "rate-limited";
347
+ }>;
348
+ reason: z.ZodOptional<z.ZodString>;
349
+ durationMs: z.ZodOptional<z.ZodNumber>;
350
+ receiptId: z.ZodOptional<z.ZodString>;
351
+ runId: z.ZodOptional<z.ZodString>;
352
+ githubNumber: z.ZodOptional<z.ZodNumber>;
353
+ githubTitle: z.ZodOptional<z.ZodString>;
354
+ githubUrl: z.ZodOptional<z.ZodString>;
355
+ rateLimit: z.ZodOptional<z.ZodObject<{
356
+ bucket: z.ZodEnum<{
357
+ core: "core";
358
+ search: "search";
359
+ }>;
360
+ remaining: z.ZodOptional<z.ZodNumber>;
361
+ resetAt: z.ZodOptional<z.ZodString>;
362
+ }, z.core.$strip>>;
363
+ }, z.core.$strip>>;
364
+ counts: z.ZodObject<{
365
+ matches: z.ZodNumber;
366
+ launched: z.ZodNumber;
367
+ duplicates: z.ZodNumber;
368
+ errors: z.ZodNumber;
369
+ }, z.core.$strip>;
370
+ }, z.core.$strip>;
371
+ export type AutomationListEntry = z.infer<typeof automationListEntrySchema>;
372
+ /**
373
+ * `GET /automations` — the whole page in one read.
374
+ *
375
+ * `available`/`reason` are the forge's own cached availability (the same degrade `/github` uses:
376
+ * no GitHub remote, no `gh`, offline — never a 5xx), and `scheduler` summarizes the timer:
377
+ * `scheduled` when any definition is enabled, `idle` otherwise, with `nextDue` the earliest
378
+ * pending check across them.
379
+ */
380
+ export declare const automationsResponseSchema: z.ZodObject<{
381
+ available: z.ZodBoolean;
382
+ reason: z.ZodOptional<z.ZodString>;
383
+ scheduler: z.ZodObject<{
384
+ state: z.ZodEnum<{
385
+ idle: "idle";
386
+ scheduled: "scheduled";
387
+ }>;
388
+ nextDue: z.ZodOptional<z.ZodString>;
389
+ }, z.core.$strip>;
390
+ automations: z.ZodArray<z.ZodObject<{
391
+ id: z.ZodString;
392
+ revision: z.ZodNumber;
393
+ name: z.ZodString;
394
+ description: z.ZodOptional<z.ZodString>;
395
+ enabled: z.ZodBoolean;
396
+ events: z.ZodArray<z.ZodEnum<{
397
+ "issue.labeled": "issue.labeled";
398
+ "issue.opened": "issue.opened";
399
+ "issue.unlabeled": "issue.unlabeled";
400
+ "pull_request.opened": "pull_request.opened";
401
+ }>>;
402
+ intervalSeconds: z.ZodNumber;
403
+ filters: z.ZodObject<{
404
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
405
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
406
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
407
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
408
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
409
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
410
+ lookbackDays: z.ZodNumber;
411
+ maxRecords: z.ZodNumber;
412
+ }, z.core.$strip>;
413
+ task: z.ZodObject<{
414
+ workflow: z.ZodOptional<z.ZodString>;
415
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
416
+ id: z.ZodString;
417
+ name: z.ZodOptional<z.ZodString>;
418
+ prompt: z.ZodOptional<z.ZodString>;
419
+ skill: z.ZodOptional<z.ZodString>;
420
+ model: z.ZodOptional<z.ZodString>;
421
+ runner: z.ZodOptional<z.ZodEnum<{
422
+ claude: "claude";
423
+ codex: "codex";
424
+ opencode: "opencode";
425
+ }>>;
426
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
427
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
428
+ command: z.ZodOptional<z.ZodString>;
429
+ onFail: z.ZodOptional<z.ZodObject<{
430
+ retry: z.ZodString;
431
+ max: z.ZodDefault<z.ZodNumber>;
432
+ }, z.core.$strip>>;
433
+ }, z.core.$strip>>>;
434
+ model: z.ZodOptional<z.ZodString>;
435
+ runner: z.ZodOptional<z.ZodEnum<{
436
+ claude: "claude";
437
+ codex: "codex";
438
+ opencode: "opencode";
439
+ }>>;
440
+ worktree: z.ZodOptional<z.ZodBoolean>;
441
+ autonomous: z.ZodOptional<z.ZodBoolean>;
442
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
443
+ prompt: z.ZodString;
444
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
445
+ systemPrompt: z.ZodOptional<z.ZodString>;
446
+ }, z.core.$strip>;
447
+ createdAt: z.ZodString;
448
+ updatedAt: z.ZodString;
449
+ state: z.ZodOptional<z.ZodObject<{
450
+ revision: z.ZodOptional<z.ZodNumber>;
451
+ baselineAt: z.ZodOptional<z.ZodString>;
452
+ cursor: z.ZodOptional<z.ZodObject<{
453
+ timestamp: z.ZodString;
454
+ tieBreaker: z.ZodOptional<z.ZodString>;
455
+ }, z.core.$strip>>;
456
+ frozenHighWatermark: z.ZodOptional<z.ZodObject<{
457
+ timestamp: z.ZodString;
458
+ tieBreaker: z.ZodString;
459
+ }, z.core.$strip>>;
460
+ backlogAfter: z.ZodOptional<z.ZodObject<{
461
+ timestamp: z.ZodString;
462
+ tieBreaker: z.ZodString;
463
+ }, z.core.$strip>>;
464
+ nextCheckAt: z.ZodOptional<z.ZodString>;
465
+ lastSuccessAt: z.ZodOptional<z.ZodString>;
466
+ etags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
467
+ backoffUntil: z.ZodOptional<z.ZodString>;
468
+ consecutiveFailures: z.ZodOptional<z.ZodNumber>;
469
+ }, z.core.$strip>>;
470
+ latestLog: z.ZodOptional<z.ZodObject<{
471
+ seq: z.ZodNumber;
472
+ ts: z.ZodString;
473
+ automationId: z.ZodString;
474
+ revision: z.ZodNumber;
475
+ event: z.ZodOptional<z.ZodEnum<{
476
+ "issue.labeled": "issue.labeled";
477
+ "issue.opened": "issue.opened";
478
+ "issue.unlabeled": "issue.unlabeled";
479
+ "pull_request.opened": "pull_request.opened";
480
+ }>>;
481
+ result: z.ZodEnum<{
482
+ baseline: "baseline";
483
+ duplicate: "duplicate";
484
+ error: "error";
485
+ launched: "launched";
486
+ "no-match": "no-match";
487
+ preview: "preview";
488
+ "rate-limited": "rate-limited";
489
+ }>;
490
+ reason: z.ZodOptional<z.ZodString>;
491
+ durationMs: z.ZodOptional<z.ZodNumber>;
492
+ receiptId: z.ZodOptional<z.ZodString>;
493
+ runId: z.ZodOptional<z.ZodString>;
494
+ githubNumber: z.ZodOptional<z.ZodNumber>;
495
+ githubTitle: z.ZodOptional<z.ZodString>;
496
+ githubUrl: z.ZodOptional<z.ZodString>;
497
+ rateLimit: z.ZodOptional<z.ZodObject<{
498
+ bucket: z.ZodEnum<{
499
+ core: "core";
500
+ search: "search";
501
+ }>;
502
+ remaining: z.ZodOptional<z.ZodNumber>;
503
+ resetAt: z.ZodOptional<z.ZodString>;
504
+ }, z.core.$strip>>;
505
+ }, z.core.$strip>>;
506
+ counts: z.ZodObject<{
507
+ matches: z.ZodNumber;
508
+ launched: z.ZodNumber;
509
+ duplicates: z.ZodNumber;
510
+ errors: z.ZodNumber;
511
+ }, z.core.$strip>;
512
+ }, z.core.$strip>>;
513
+ }, z.core.$strip>;
514
+ export type AutomationsResponse = z.infer<typeof automationsResponseSchema>;
515
+ /** `POST /automations` (201), `PUT /automations/:id`, `POST /automations/:id/{enable,pause}`. */
516
+ export declare const automationResponseSchema: z.ZodObject<{
517
+ automation: z.ZodObject<{
518
+ id: z.ZodString;
519
+ revision: z.ZodNumber;
520
+ name: z.ZodString;
521
+ description: z.ZodOptional<z.ZodString>;
522
+ enabled: z.ZodBoolean;
523
+ events: z.ZodArray<z.ZodEnum<{
524
+ "issue.labeled": "issue.labeled";
525
+ "issue.opened": "issue.opened";
526
+ "issue.unlabeled": "issue.unlabeled";
527
+ "pull_request.opened": "pull_request.opened";
528
+ }>>;
529
+ intervalSeconds: z.ZodNumber;
530
+ filters: z.ZodObject<{
531
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
532
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
533
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
534
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
535
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
536
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
537
+ lookbackDays: z.ZodNumber;
538
+ maxRecords: z.ZodNumber;
539
+ }, z.core.$strip>;
540
+ task: z.ZodObject<{
541
+ workflow: z.ZodOptional<z.ZodString>;
542
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
543
+ id: z.ZodString;
544
+ name: z.ZodOptional<z.ZodString>;
545
+ prompt: z.ZodOptional<z.ZodString>;
546
+ skill: z.ZodOptional<z.ZodString>;
547
+ model: z.ZodOptional<z.ZodString>;
548
+ runner: z.ZodOptional<z.ZodEnum<{
549
+ claude: "claude";
550
+ codex: "codex";
551
+ opencode: "opencode";
552
+ }>>;
553
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
554
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
555
+ command: z.ZodOptional<z.ZodString>;
556
+ onFail: z.ZodOptional<z.ZodObject<{
557
+ retry: z.ZodString;
558
+ max: z.ZodDefault<z.ZodNumber>;
559
+ }, z.core.$strip>>;
560
+ }, z.core.$strip>>>;
561
+ model: z.ZodOptional<z.ZodString>;
562
+ runner: z.ZodOptional<z.ZodEnum<{
563
+ claude: "claude";
564
+ codex: "codex";
565
+ opencode: "opencode";
566
+ }>>;
567
+ worktree: z.ZodOptional<z.ZodBoolean>;
568
+ autonomous: z.ZodOptional<z.ZodBoolean>;
569
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
570
+ prompt: z.ZodString;
571
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
572
+ systemPrompt: z.ZodOptional<z.ZodString>;
573
+ }, z.core.$strip>;
574
+ createdAt: z.ZodString;
575
+ updatedAt: z.ZodString;
576
+ }, z.core.$strip>;
577
+ }, z.core.$strip>;
578
+ export type AutomationResponse = z.infer<typeof automationResponseSchema>;
579
+ /** `GET /automations/:id` — one definition with its state and the most recent log row. */
580
+ export declare const automationDetailResponseSchema: z.ZodObject<{
581
+ automation: z.ZodObject<{
582
+ id: z.ZodString;
583
+ revision: z.ZodNumber;
584
+ name: z.ZodString;
585
+ description: z.ZodOptional<z.ZodString>;
586
+ enabled: z.ZodBoolean;
587
+ events: z.ZodArray<z.ZodEnum<{
588
+ "issue.labeled": "issue.labeled";
589
+ "issue.opened": "issue.opened";
590
+ "issue.unlabeled": "issue.unlabeled";
591
+ "pull_request.opened": "pull_request.opened";
592
+ }>>;
593
+ intervalSeconds: z.ZodNumber;
594
+ filters: z.ZodObject<{
595
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
596
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
597
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
598
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
599
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
600
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
601
+ lookbackDays: z.ZodNumber;
602
+ maxRecords: z.ZodNumber;
603
+ }, z.core.$strip>;
604
+ task: z.ZodObject<{
605
+ workflow: z.ZodOptional<z.ZodString>;
606
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
607
+ id: z.ZodString;
608
+ name: z.ZodOptional<z.ZodString>;
609
+ prompt: z.ZodOptional<z.ZodString>;
610
+ skill: z.ZodOptional<z.ZodString>;
611
+ model: z.ZodOptional<z.ZodString>;
612
+ runner: z.ZodOptional<z.ZodEnum<{
613
+ claude: "claude";
614
+ codex: "codex";
615
+ opencode: "opencode";
616
+ }>>;
617
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
618
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
619
+ command: z.ZodOptional<z.ZodString>;
620
+ onFail: z.ZodOptional<z.ZodObject<{
621
+ retry: z.ZodString;
622
+ max: z.ZodDefault<z.ZodNumber>;
623
+ }, z.core.$strip>>;
624
+ }, z.core.$strip>>>;
625
+ model: z.ZodOptional<z.ZodString>;
626
+ runner: z.ZodOptional<z.ZodEnum<{
627
+ claude: "claude";
628
+ codex: "codex";
629
+ opencode: "opencode";
630
+ }>>;
631
+ worktree: z.ZodOptional<z.ZodBoolean>;
632
+ autonomous: z.ZodOptional<z.ZodBoolean>;
633
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
634
+ prompt: z.ZodString;
635
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
636
+ systemPrompt: z.ZodOptional<z.ZodString>;
637
+ }, z.core.$strip>;
638
+ createdAt: z.ZodString;
639
+ updatedAt: z.ZodString;
640
+ }, z.core.$strip>;
641
+ state: z.ZodOptional<z.ZodObject<{
642
+ revision: z.ZodOptional<z.ZodNumber>;
643
+ baselineAt: z.ZodOptional<z.ZodString>;
644
+ cursor: z.ZodOptional<z.ZodObject<{
645
+ timestamp: z.ZodString;
646
+ tieBreaker: z.ZodOptional<z.ZodString>;
647
+ }, z.core.$strip>>;
648
+ frozenHighWatermark: z.ZodOptional<z.ZodObject<{
649
+ timestamp: z.ZodString;
650
+ tieBreaker: z.ZodString;
651
+ }, z.core.$strip>>;
652
+ backlogAfter: z.ZodOptional<z.ZodObject<{
653
+ timestamp: z.ZodString;
654
+ tieBreaker: z.ZodString;
655
+ }, z.core.$strip>>;
656
+ nextCheckAt: z.ZodOptional<z.ZodString>;
657
+ lastSuccessAt: z.ZodOptional<z.ZodString>;
658
+ etags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
659
+ backoffUntil: z.ZodOptional<z.ZodString>;
660
+ consecutiveFailures: z.ZodOptional<z.ZodNumber>;
661
+ }, z.core.$strip>>;
662
+ latestLog: z.ZodOptional<z.ZodObject<{
663
+ seq: z.ZodNumber;
664
+ ts: z.ZodString;
665
+ automationId: z.ZodString;
666
+ revision: z.ZodNumber;
667
+ event: z.ZodOptional<z.ZodEnum<{
668
+ "issue.labeled": "issue.labeled";
669
+ "issue.opened": "issue.opened";
670
+ "issue.unlabeled": "issue.unlabeled";
671
+ "pull_request.opened": "pull_request.opened";
672
+ }>>;
673
+ result: z.ZodEnum<{
674
+ baseline: "baseline";
675
+ duplicate: "duplicate";
676
+ error: "error";
677
+ launched: "launched";
678
+ "no-match": "no-match";
679
+ preview: "preview";
680
+ "rate-limited": "rate-limited";
681
+ }>;
682
+ reason: z.ZodOptional<z.ZodString>;
683
+ durationMs: z.ZodOptional<z.ZodNumber>;
684
+ receiptId: z.ZodOptional<z.ZodString>;
685
+ runId: z.ZodOptional<z.ZodString>;
686
+ githubNumber: z.ZodOptional<z.ZodNumber>;
687
+ githubTitle: z.ZodOptional<z.ZodString>;
688
+ githubUrl: z.ZodOptional<z.ZodString>;
689
+ rateLimit: z.ZodOptional<z.ZodObject<{
690
+ bucket: z.ZodEnum<{
691
+ core: "core";
692
+ search: "search";
693
+ }>;
694
+ remaining: z.ZodOptional<z.ZodNumber>;
695
+ resetAt: z.ZodOptional<z.ZodString>;
696
+ }, z.core.$strip>>;
697
+ }, z.core.$strip>>;
698
+ }, z.core.$strip>;
699
+ export type AutomationDetailResponse = z.infer<typeof automationDetailResponseSchema>;
700
+ /**
701
+ * One manual "test filter" check (`GET /automation-checks/:checkId`).
702
+ *
703
+ * Server-memory only, keyed by an unguessable id and capped at 200 — it is the progress record of
704
+ * an asynchronous poll, not stored state, which is why it survives no restart and appears in no
705
+ * file. `preview` counts matches and launches nothing; `execute` launches exactly as a scheduled
706
+ * poll would.
707
+ */
708
+ export declare const automationCheckSchema: z.ZodObject<{
709
+ id: z.ZodString;
710
+ automationId: z.ZodString;
711
+ mode: z.ZodEnum<{
712
+ execute: "execute";
713
+ preview: "preview";
714
+ }>;
715
+ status: z.ZodEnum<{
716
+ complete: "complete";
717
+ error: "error";
718
+ queued: "queued";
719
+ running: "running";
720
+ }>;
721
+ createdAt: z.ZodString;
722
+ completedAt: z.ZodOptional<z.ZodString>;
723
+ matches: z.ZodOptional<z.ZodNumber>;
724
+ truncated: z.ZodOptional<z.ZodBoolean>;
725
+ error: z.ZodOptional<z.ZodString>;
726
+ }, z.core.$strip>;
727
+ export type AutomationCheck = z.infer<typeof automationCheckSchema>;
728
+ /** `POST /automations/:id/check` (202) — the check runs in the background; poll the id. */
729
+ export declare const automationCheckQueuedResponseSchema: z.ZodObject<{
730
+ checkId: z.ZodString;
731
+ }, z.core.$strip>;
732
+ export type AutomationCheckQueuedResponse = z.infer<typeof automationCheckQueuedResponseSchema>;
733
+ /** `GET /automation-log` — newest first, capped at 100 rows per read. */
734
+ export declare const automationLogResponseSchema: z.ZodObject<{
735
+ records: z.ZodArray<z.ZodObject<{
736
+ seq: z.ZodNumber;
737
+ ts: z.ZodString;
738
+ automationId: z.ZodString;
739
+ revision: z.ZodNumber;
740
+ event: z.ZodOptional<z.ZodEnum<{
741
+ "issue.labeled": "issue.labeled";
742
+ "issue.opened": "issue.opened";
743
+ "issue.unlabeled": "issue.unlabeled";
744
+ "pull_request.opened": "pull_request.opened";
745
+ }>>;
746
+ result: z.ZodEnum<{
747
+ baseline: "baseline";
748
+ duplicate: "duplicate";
749
+ error: "error";
750
+ launched: "launched";
751
+ "no-match": "no-match";
752
+ preview: "preview";
753
+ "rate-limited": "rate-limited";
754
+ }>;
755
+ reason: z.ZodOptional<z.ZodString>;
756
+ durationMs: z.ZodOptional<z.ZodNumber>;
757
+ receiptId: z.ZodOptional<z.ZodString>;
758
+ runId: z.ZodOptional<z.ZodString>;
759
+ githubNumber: z.ZodOptional<z.ZodNumber>;
760
+ githubTitle: z.ZodOptional<z.ZodString>;
761
+ githubUrl: z.ZodOptional<z.ZodString>;
762
+ rateLimit: z.ZodOptional<z.ZodObject<{
763
+ bucket: z.ZodEnum<{
764
+ core: "core";
765
+ search: "search";
766
+ }>;
767
+ remaining: z.ZodOptional<z.ZodNumber>;
768
+ resetAt: z.ZodOptional<z.ZodString>;
769
+ }, z.core.$strip>>;
770
+ }, z.core.$strip>>;
771
+ }, z.core.$strip>;
772
+ export type AutomationLogResponse = z.infer<typeof automationLogResponseSchema>;
773
+ /** `POST /automation-log/:receiptId/retry` (202) — the relaunched receipt and its new run. */
774
+ export declare const automationRetryResponseSchema: z.ZodObject<{
775
+ receiptId: z.ZodString;
776
+ runId: z.ZodString;
777
+ }, z.core.$strip>;
778
+ export type AutomationRetryResponse = z.infer<typeof automationRetryResponseSchema>;
779
+ /**
780
+ * `POST /automations`. The definition minus everything the server owns — id, revision, the
781
+ * timestamps and `enabled`, which is not a body field: a definition is always created paused, and
782
+ * `enable: true` asks the route to enable it AND establish a current-time baseline in one step.
783
+ */
784
+ export declare const createAutomationInputSchema: z.ZodObject<{
785
+ name: z.ZodString;
786
+ description: z.ZodOptional<z.ZodString>;
787
+ events: z.ZodArray<z.ZodEnum<{
788
+ "issue.labeled": "issue.labeled";
789
+ "issue.opened": "issue.opened";
790
+ "issue.unlabeled": "issue.unlabeled";
791
+ "pull_request.opened": "pull_request.opened";
792
+ }>>;
793
+ intervalSeconds: z.ZodNumber;
794
+ filters: z.ZodObject<{
795
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
796
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
797
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
798
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
799
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
800
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
801
+ lookbackDays: z.ZodNumber;
802
+ maxRecords: z.ZodNumber;
803
+ }, z.core.$strip>;
804
+ task: z.ZodObject<{
805
+ workflow: z.ZodOptional<z.ZodString>;
806
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
807
+ id: z.ZodString;
808
+ name: z.ZodOptional<z.ZodString>;
809
+ prompt: z.ZodOptional<z.ZodString>;
810
+ skill: z.ZodOptional<z.ZodString>;
811
+ model: z.ZodOptional<z.ZodString>;
812
+ runner: z.ZodOptional<z.ZodEnum<{
813
+ claude: "claude";
814
+ codex: "codex";
815
+ opencode: "opencode";
816
+ }>>;
817
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
818
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
819
+ command: z.ZodOptional<z.ZodString>;
820
+ onFail: z.ZodOptional<z.ZodObject<{
821
+ retry: z.ZodString;
822
+ max: z.ZodDefault<z.ZodNumber>;
823
+ }, z.core.$strip>>;
824
+ }, z.core.$strip>>>;
825
+ model: z.ZodOptional<z.ZodString>;
826
+ runner: z.ZodOptional<z.ZodEnum<{
827
+ claude: "claude";
828
+ codex: "codex";
829
+ opencode: "opencode";
830
+ }>>;
831
+ worktree: z.ZodOptional<z.ZodBoolean>;
832
+ autonomous: z.ZodOptional<z.ZodBoolean>;
833
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
834
+ prompt: z.ZodString;
835
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
836
+ systemPrompt: z.ZodOptional<z.ZodString>;
837
+ }, z.core.$strip>;
838
+ enable: z.ZodOptional<z.ZodBoolean>;
839
+ }, z.core.$strip>;
840
+ export type CreateAutomationInput = z.input<typeof createAutomationInputSchema>;
841
+ /**
842
+ * `PUT /automations/:id`. The same body plus the revision the editor read — a stale one answers
843
+ * 409 rather than overwriting somebody else's edit. `enabled` IS a field here: an edit may not
844
+ * silently pause a running automation, so the caller restates it.
845
+ */
846
+ export declare const updateAutomationInputSchema: z.ZodObject<{
847
+ name: z.ZodString;
848
+ description: z.ZodOptional<z.ZodString>;
849
+ events: z.ZodArray<z.ZodEnum<{
850
+ "issue.labeled": "issue.labeled";
851
+ "issue.opened": "issue.opened";
852
+ "issue.unlabeled": "issue.unlabeled";
853
+ "pull_request.opened": "pull_request.opened";
854
+ }>>;
855
+ intervalSeconds: z.ZodNumber;
856
+ filters: z.ZodObject<{
857
+ authors: z.ZodOptional<z.ZodArray<z.ZodString>>;
858
+ assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
859
+ allLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
860
+ anyLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
861
+ excludeLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
862
+ changedLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
863
+ lookbackDays: z.ZodNumber;
864
+ maxRecords: z.ZodNumber;
865
+ }, z.core.$strip>;
866
+ task: z.ZodObject<{
867
+ workflow: z.ZodOptional<z.ZodString>;
868
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
869
+ id: z.ZodString;
870
+ name: z.ZodOptional<z.ZodString>;
871
+ prompt: z.ZodOptional<z.ZodString>;
872
+ skill: z.ZodOptional<z.ZodString>;
873
+ model: z.ZodOptional<z.ZodString>;
874
+ runner: z.ZodOptional<z.ZodEnum<{
875
+ claude: "claude";
876
+ codex: "codex";
877
+ opencode: "opencode";
878
+ }>>;
879
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
880
+ bashAllowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
881
+ command: z.ZodOptional<z.ZodString>;
882
+ onFail: z.ZodOptional<z.ZodObject<{
883
+ retry: z.ZodString;
884
+ max: z.ZodDefault<z.ZodNumber>;
885
+ }, z.core.$strip>>;
886
+ }, z.core.$strip>>>;
887
+ model: z.ZodOptional<z.ZodString>;
888
+ runner: z.ZodOptional<z.ZodEnum<{
889
+ claude: "claude";
890
+ codex: "codex";
891
+ opencode: "opencode";
892
+ }>>;
893
+ worktree: z.ZodOptional<z.ZodBoolean>;
894
+ autonomous: z.ZodOptional<z.ZodBoolean>;
895
+ generateFollowups: z.ZodOptional<z.ZodBoolean>;
896
+ prompt: z.ZodString;
897
+ variants: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
898
+ systemPrompt: z.ZodOptional<z.ZodString>;
899
+ }, z.core.$strip>;
900
+ enabled: z.ZodOptional<z.ZodBoolean>;
901
+ expectedRevision: z.ZodNumber;
902
+ }, z.core.$strip>;
903
+ export type UpdateAutomationInput = z.input<typeof updateAutomationInputSchema>;
904
+ /** `POST /automations/:id/check` — which of the two manual checks to run. */
905
+ export declare const automationCheckInputSchema: z.ZodObject<{
906
+ mode: z.ZodEnum<{
907
+ execute: "execute";
908
+ preview: "preview";
909
+ }>;
910
+ }, z.core.$strip>;
911
+ export type AutomationCheckInput = z.input<typeof automationCheckInputSchema>;