toolroll 0.9.63 → 0.9.67

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 (302) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/README.md +33 -5
  3. package/dist/acp-agents.d.ts +43 -0
  4. package/dist/acp-agents.js +62 -0
  5. package/dist/acp-attest.d.ts +44 -0
  6. package/dist/acp-attest.js +269 -0
  7. package/dist/acp-check.d.ts +28 -0
  8. package/dist/acp-check.js +410 -0
  9. package/dist/acp-client.d.ts +163 -0
  10. package/dist/acp-client.js +738 -0
  11. package/dist/acp-inspect.d.ts +23 -0
  12. package/dist/acp-inspect.js +109 -0
  13. package/dist/agent-board.d.ts +19 -6
  14. package/dist/agent-board.js +30 -9
  15. package/dist/agent-fence.d.ts +117 -2
  16. package/dist/agent-fence.js +439 -12
  17. package/dist/agent-pulse.js +9 -2
  18. package/dist/agent-state-words.d.ts +19 -0
  19. package/dist/agent-state-words.js +20 -0
  20. package/dist/agent-state.d.ts +65 -0
  21. package/dist/agent-state.js +229 -0
  22. package/dist/agentconfig.js +39 -13
  23. package/dist/agents-board.d.ts +34 -2
  24. package/dist/agents-board.js +110 -1
  25. package/dist/approval-rules-ui.js +2 -2
  26. package/dist/assignment-delivery.d.ts +14 -0
  27. package/dist/assignment-delivery.js +13 -0
  28. package/dist/assignment.js +13 -0
  29. package/dist/attest.js +7 -0
  30. package/dist/backup-ui.js +2 -2
  31. package/dist/batch-checks.js +3 -2
  32. package/dist/browser/THIRD_PARTY_NOTICES.txt +94 -0
  33. package/dist/browser/terminal.css +37 -0
  34. package/dist/browser/terminal.js +228 -0
  35. package/dist/browser/workspace.css +2 -2
  36. package/dist/browser/workspace.js +42 -38
  37. package/dist/browser-shell.js +6 -3
  38. package/dist/browser-workspace.d.ts +235 -1
  39. package/dist/browser-workspace.js +60 -0
  40. package/dist/builder.d.ts +10 -1
  41. package/dist/builder.js +87 -24
  42. package/dist/chat-actions.d.ts +13 -1
  43. package/dist/chat-actions.js +197 -15
  44. package/dist/chat-ask.d.ts +4 -0
  45. package/dist/chat-ask.js +14 -0
  46. package/dist/chat-channel.js +20 -0
  47. package/dist/chat-continuity.js +5 -4
  48. package/dist/chat-decide.d.ts +0 -14
  49. package/dist/chat-decide.js +4 -1
  50. package/dist/chat-delivery.d.ts +9 -0
  51. package/dist/chat-delivery.js +45 -6
  52. package/dist/chat-messages.d.ts +8 -0
  53. package/dist/chat-messages.js +36 -4
  54. package/dist/check-levels-ui.js +2 -2
  55. package/dist/checkout-proof.d.ts +28 -0
  56. package/dist/checkout-proof.js +62 -0
  57. package/dist/claim.d.ts +12 -0
  58. package/dist/claim.js +19 -0
  59. package/dist/cli-help.d.ts +1 -1
  60. package/dist/cli-help.js +4 -1
  61. package/dist/cli.d.ts +3 -0
  62. package/dist/cli.js +21 -2
  63. package/dist/coding-ui.js +6 -4
  64. package/dist/console-instance.d.ts +124 -0
  65. package/dist/console-instance.js +337 -0
  66. package/dist/contracts/chat-actions.d.ts +16 -0
  67. package/dist/contracts/chat-actions.js +4 -0
  68. package/dist/contracts/chat-content.d.ts +19 -0
  69. package/dist/contracts/chat-content.js +6 -0
  70. package/dist/contracts/console-api.d.ts +13 -4
  71. package/dist/contracts/console-api.js +13 -4
  72. package/dist/contracts/flow-card.d.ts +4 -0
  73. package/dist/contracts/flow-card.js +3 -0
  74. package/dist/contracts/flow.d.ts +46 -0
  75. package/dist/contracts/flow.js +11 -2
  76. package/dist/contracts/lead-tools.d.ts +92 -0
  77. package/dist/contracts/lead-tools.js +13 -0
  78. package/dist/contracts/provider.d.ts +11 -1
  79. package/dist/contracts/provider.js +1 -1
  80. package/dist/contracts/route.d.ts +76 -1
  81. package/dist/contracts/route.js +1 -1
  82. package/dist/contracts/store-json.d.ts +2 -0
  83. package/dist/control-setup.d.ts +1 -1
  84. package/dist/control-ui.js +2 -2
  85. package/dist/converse.d.ts +16 -0
  86. package/dist/converse.js +32 -4
  87. package/dist/demo-chat.js +4 -4
  88. package/dist/demo.js +2 -2
  89. package/dist/desktop-update-gate.js +6 -0
  90. package/dist/desktop-update.d.ts +1 -1
  91. package/dist/discord-chat.js +4 -1
  92. package/dist/doctor.js +1 -1
  93. package/dist/egress-bridge.d.ts +17 -0
  94. package/dist/egress-bridge.js +111 -0
  95. package/dist/egress.d.ts +119 -0
  96. package/dist/egress.js +423 -0
  97. package/dist/exec.d.ts +78 -0
  98. package/dist/exec.js +367 -9
  99. package/dist/export-ui.js +2 -2
  100. package/dist/flow-engine.js +24 -5
  101. package/dist/flow-gallery-ui.js +2 -2
  102. package/dist/flow-gallery.js +27 -8
  103. package/dist/flow-share.js +16 -5
  104. package/dist/flow-triggers.d.ts +77 -8
  105. package/dist/flow-triggers.js +517 -70
  106. package/dist/flows-cli.js +8 -2
  107. package/dist/flows-ui.d.ts +0 -2
  108. package/dist/flows-ui.js +52 -4
  109. package/dist/flows.d.ts +4 -0
  110. package/dist/flows.js +9 -1
  111. package/dist/html.d.ts +9 -0
  112. package/dist/html.js +11 -0
  113. package/dist/invoke.d.ts +35 -0
  114. package/dist/invoke.js +347 -28
  115. package/dist/keys.d.ts +18 -14
  116. package/dist/keys.js +5 -0
  117. package/dist/lead-capabilities.js +3 -2
  118. package/dist/lead-contract.js +2 -0
  119. package/dist/lead-doors.d.ts +2 -0
  120. package/dist/lead-doors.js +7 -0
  121. package/dist/lead-follow.d.ts +2 -0
  122. package/dist/lead-follow.js +58 -2
  123. package/dist/lead-progress.js +1 -0
  124. package/dist/lead-queue-runtime.d.ts +46 -0
  125. package/dist/lead-queue-runtime.js +191 -0
  126. package/dist/lead-queue.d.ts +104 -0
  127. package/dist/lead-queue.js +187 -0
  128. package/dist/lead-sweep.d.ts +67 -0
  129. package/dist/lead-sweep.js +99 -0
  130. package/dist/lead-tools.d.ts +22 -0
  131. package/dist/lead-tools.js +152 -1
  132. package/dist/lead.d.ts +13 -5
  133. package/dist/lead.js +89 -29
  134. package/dist/limits-ui.d.ts +8 -1
  135. package/dist/limits-ui.js +26 -0
  136. package/dist/live-bus.d.ts +8 -0
  137. package/dist/live-bus.js +40 -4
  138. package/dist/live-detail.d.ts +27 -0
  139. package/dist/live-detail.js +57 -0
  140. package/dist/live-notes.d.ts +20 -0
  141. package/dist/live-notes.js +47 -0
  142. package/dist/live-records.d.ts +140 -0
  143. package/dist/live-records.js +935 -0
  144. package/dist/live-terminal.d.ts +269 -0
  145. package/dist/live-terminal.js +686 -0
  146. package/dist/live.d.ts +38 -27
  147. package/dist/live.js +142 -124
  148. package/dist/mcp-oauth.d.ts +6 -3
  149. package/dist/mcp-oauth.js +8 -4
  150. package/dist/memory-pass.js +2 -2
  151. package/dist/mobile-viewport.d.ts +5 -1
  152. package/dist/mobile-viewport.js +18 -2
  153. package/dist/model-catalog.js +4 -0
  154. package/dist/monitoring-ui.js +2 -2
  155. package/dist/needs-you.d.ts +1 -1
  156. package/dist/needs-you.js +11 -4
  157. package/dist/operate.d.ts +4 -0
  158. package/dist/operate.js +335 -19
  159. package/dist/passwordless.d.ts +23 -0
  160. package/dist/passwordless.js +26 -0
  161. package/dist/peek-cli.d.ts +12 -4
  162. package/dist/peek-cli.js +19 -11
  163. package/dist/phase-routing.js +10 -3
  164. package/dist/planner-source.d.ts +3 -0
  165. package/dist/planner-source.js +14 -0
  166. package/dist/planner.d.ts +2 -1
  167. package/dist/planner.js +7 -1
  168. package/dist/policy-ui.js +2 -2
  169. package/dist/policy.d.ts +1 -20
  170. package/dist/policy.js +29 -2
  171. package/dist/project-delete-ui.d.ts +18 -0
  172. package/dist/project-delete-ui.js +60 -9
  173. package/dist/project-delete.js +2 -2
  174. package/dist/project-memory.d.ts +3 -1
  175. package/dist/project-memory.js +57 -25
  176. package/dist/project-tools.d.ts +5 -3
  177. package/dist/project-tools.js +12 -9
  178. package/dist/provider-auth.d.ts +4 -3
  179. package/dist/provider-auth.js +5 -4
  180. package/dist/provider-connection.d.ts +2 -1
  181. package/dist/provider-connection.js +5 -0
  182. package/dist/provider.d.ts +25 -2
  183. package/dist/provider.js +63 -9
  184. package/dist/pull-request-ui.js +2 -2
  185. package/dist/push.js +1 -1
  186. package/dist/quick-start.d.ts +24 -0
  187. package/dist/quick-start.js +127 -0
  188. package/dist/release-adapters.d.ts +6 -0
  189. package/dist/release-adapters.js +70 -3
  190. package/dist/release.d.ts +10 -1
  191. package/dist/release.js +34 -15
  192. package/dist/request-budget-ui.js +2 -2
  193. package/dist/result-follow-ups.js +3 -2
  194. package/dist/result-review.d.ts +1 -1
  195. package/dist/result-review.js +9 -3
  196. package/dist/retention-ui.js +2 -2
  197. package/dist/retention.js +10 -1
  198. package/dist/run-efficiency.d.ts +73 -0
  199. package/dist/run-efficiency.js +228 -0
  200. package/dist/runner.d.ts +5 -1
  201. package/dist/runner.js +22 -1
  202. package/dist/scope.d.ts +183 -5
  203. package/dist/scope.js +256 -31
  204. package/dist/scout-net.d.ts +4 -1
  205. package/dist/scout-net.js +37 -12
  206. package/dist/scout.d.ts +20 -6
  207. package/dist/scout.js +27 -3
  208. package/dist/serve.js +248 -40
  209. package/dist/server/chat.d.ts +1 -1
  210. package/dist/server/chat.js +122 -31
  211. package/dist/server/chrome.d.ts +16 -2
  212. package/dist/server/chrome.js +63 -11
  213. package/dist/server/console.css +107 -42
  214. package/dist/server/flows.js +38 -8
  215. package/dist/server/guards.d.ts +1 -0
  216. package/dist/server/guards.js +23 -9
  217. package/dist/server/http.d.ts +7 -0
  218. package/dist/server/http.js +3 -2
  219. package/dist/server/live.d.ts +34 -1
  220. package/dist/server/live.js +39 -17
  221. package/dist/server/pages-assets.js +5 -0
  222. package/dist/server/pages.js +90 -13
  223. package/dist/server/people-tokens.d.ts +3 -0
  224. package/dist/server/people-tokens.js +55 -17
  225. package/dist/server/remote-hooks.js +12 -6
  226. package/dist/server/remote.d.ts +2 -1
  227. package/dist/server/remote.js +14 -5
  228. package/dist/server/render-chat.d.ts +12 -3
  229. package/dist/server/render-chat.js +47 -16
  230. package/dist/server/render-pages.d.ts +32 -4
  231. package/dist/server/render-pages.js +83 -13
  232. package/dist/server/render-people.d.ts +3 -2
  233. package/dist/server/render-people.js +3 -2
  234. package/dist/server/render-results.d.ts +18 -2
  235. package/dist/server/render-results.js +37 -28
  236. package/dist/server/render-settings.js +6 -5
  237. package/dist/server/render-tasks.d.ts +35 -10
  238. package/dist/server/render-tasks.js +111 -27
  239. package/dist/server/request-context.d.ts +2 -0
  240. package/dist/server/request-context.js +2 -1
  241. package/dist/server/route-table.d.ts +3 -0
  242. package/dist/server/route-table.js +47 -5
  243. package/dist/server/runtime.d.ts +33 -2
  244. package/dist/server/session.d.ts +25 -1
  245. package/dist/server/session.js +18 -4
  246. package/dist/server/settings.js +142 -10
  247. package/dist/server/sweeps.d.ts +4 -0
  248. package/dist/server/sweeps.js +58 -0
  249. package/dist/server/task-views.d.ts +2 -1
  250. package/dist/server/task-views.js +96 -6
  251. package/dist/server/tasks.js +327 -78
  252. package/dist/server/terminals.d.ts +31 -0
  253. package/dist/server/terminals.js +365 -0
  254. package/dist/setup-guide.js +3 -2
  255. package/dist/slack-chat.js +4 -1
  256. package/dist/spend-ui.js +3 -3
  257. package/dist/spend.js +2 -1
  258. package/dist/steer-capabilities.d.ts +32 -0
  259. package/dist/steer-capabilities.js +60 -0
  260. package/dist/steer-controls.d.ts +14 -0
  261. package/dist/steer-controls.js +36 -0
  262. package/dist/steer-status.js +2 -2
  263. package/dist/storage-ui.js +4 -4
  264. package/dist/store-baseline.d.ts +1 -1
  265. package/dist/store-baseline.js +1 -1
  266. package/dist/store.d.ts +440 -15
  267. package/dist/store.js +1072 -52
  268. package/dist/subagent-desk.js +1 -1
  269. package/dist/summary.js +3 -0
  270. package/dist/task-source.d.ts +58 -0
  271. package/dist/task-source.js +93 -0
  272. package/dist/team-leads.js +1 -1
  273. package/dist/teams-chat.js +4 -1
  274. package/dist/teardown-git.d.ts +22 -0
  275. package/dist/teardown-git.js +136 -2
  276. package/dist/telegram-lead.d.ts +3 -0
  277. package/dist/telegram-lead.js +44 -7
  278. package/dist/telegram.d.ts +11 -2
  279. package/dist/telegram.js +51 -17
  280. package/dist/terminal-catalog.d.ts +11 -0
  281. package/dist/terminal-catalog.js +129 -0
  282. package/dist/text-limits.d.ts +2 -0
  283. package/dist/text-limits.js +2 -0
  284. package/dist/tool-broker.d.ts +14 -0
  285. package/dist/tool-broker.js +67 -2
  286. package/dist/toolroll-update-ui.js +2 -2
  287. package/dist/toolroll-update.js +13 -3
  288. package/dist/tools-ui.js +2 -2
  289. package/dist/unfenced-test-support.d.ts +2 -0
  290. package/dist/unfenced-test-support.js +11 -0
  291. package/dist/webhook-limits.d.ts +23 -0
  292. package/dist/webhook-limits.js +30 -0
  293. package/dist/webhook-readers.d.ts +56 -0
  294. package/dist/webhook-readers.js +138 -0
  295. package/dist/webhook-signing.d.ts +27 -0
  296. package/dist/webhook-signing.js +119 -0
  297. package/dist/work-index.d.ts +29 -0
  298. package/dist/work-index.js +16 -2
  299. package/dist/workspace-revision.js +3 -1
  300. package/dist/writes-mode.d.ts +9 -0
  301. package/dist/writes-mode.js +8 -0
  302. package/package.json +15 -2
@@ -10792,6 +10792,8 @@ export declare function legacySubagentStep(step: unknown): unknown;
10792
10792
  export declare const legacyFlowNeed: (need: unknown) => unknown;
10793
10793
  /** The keys people and models write for the ones a step means: refusals suggest them (contract.ts). */
10794
10794
  export declare const FLOW_ALIASES: ContractOptions;
10795
+ /** v126: who signs a webhook's deliveries (webhook-signing.ts); `none` is the secret address alone. */
10796
+ export declare const WEBHOOK_SENDERS: readonly ["none", "standard", "github-style", "sentry", "vercel"];
10795
10797
  export declare const triggerInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
10796
10798
  zone: z.ZodOptional<z.ZodString>;
10797
10799
  kind: z.ZodLiteral<"button">;
@@ -10845,6 +10847,17 @@ export declare const triggerInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
10845
10847
  title: z.ZodOptional<z.ZodString>;
10846
10848
  titleField: z.ZodOptional<z.ZodString>;
10847
10849
  bodyField: z.ZodOptional<z.ZodString>;
10850
+ sender: z.ZodOptional<z.ZodEnum<{
10851
+ "github-style": "github-style";
10852
+ none: "none";
10853
+ sentry: "sentry";
10854
+ standard: "standard";
10855
+ vercel: "vercel";
10856
+ }>>;
10857
+ project: z.ZodOptional<z.ZodString>;
10858
+ team: z.ZodOptional<z.ZodString>;
10859
+ idField: z.ZodOptional<z.ZodString>;
10860
+ urlField: z.ZodOptional<z.ZodString>;
10848
10861
  }, z.core.$strict>, z.ZodObject<{
10849
10862
  zone: z.ZodOptional<z.ZodString>;
10850
10863
  kind: z.ZodLiteral<"email">;
@@ -10907,6 +10920,17 @@ export declare const flowFileTriggerSchema: z.ZodDiscriminatedUnion<[z.ZodObject
10907
10920
  title: z.ZodOptional<z.ZodString>;
10908
10921
  titleField: z.ZodOptional<z.ZodString>;
10909
10922
  bodyField: z.ZodOptional<z.ZodString>;
10923
+ sender: z.ZodOptional<z.ZodEnum<{
10924
+ "github-style": "github-style";
10925
+ none: "none";
10926
+ sentry: "sentry";
10927
+ standard: "standard";
10928
+ vercel: "vercel";
10929
+ }>>;
10930
+ project: z.ZodOptional<z.ZodString>;
10931
+ team: z.ZodOptional<z.ZodString>;
10932
+ idField: z.ZodOptional<z.ZodString>;
10933
+ urlField: z.ZodOptional<z.ZodString>;
10910
10934
  }, z.core.$strict>, z.ZodObject<{
10911
10935
  zone: z.ZodOptional<z.ZodString>;
10912
10936
  kind: z.ZodLiteral<"email">;
@@ -11075,6 +11099,17 @@ export declare const triggerConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
11075
11099
  title: z.ZodString;
11076
11100
  titleField: z.ZodNullable<z.ZodString>;
11077
11101
  bodyField: z.ZodNullable<z.ZodString>;
11102
+ sender: z.ZodOptional<z.ZodEnum<{
11103
+ "github-style": "github-style";
11104
+ none: "none";
11105
+ sentry: "sentry";
11106
+ standard: "standard";
11107
+ vercel: "vercel";
11108
+ }>>;
11109
+ project: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11110
+ team: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11111
+ idField: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11112
+ urlField: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11078
11113
  }, z.core.$strict>, z.ZodObject<{
11079
11114
  zone: z.ZodNullable<z.ZodString>;
11080
11115
  kind: z.ZodLiteral<"email">;
@@ -19412,6 +19447,17 @@ export declare const flowFileSchema: z.ZodObject<{
19412
19447
  title: z.ZodOptional<z.ZodString>;
19413
19448
  titleField: z.ZodOptional<z.ZodString>;
19414
19449
  bodyField: z.ZodOptional<z.ZodString>;
19450
+ sender: z.ZodOptional<z.ZodEnum<{
19451
+ "github-style": "github-style";
19452
+ none: "none";
19453
+ sentry: "sentry";
19454
+ standard: "standard";
19455
+ vercel: "vercel";
19456
+ }>>;
19457
+ project: z.ZodOptional<z.ZodString>;
19458
+ team: z.ZodOptional<z.ZodString>;
19459
+ idField: z.ZodOptional<z.ZodString>;
19460
+ urlField: z.ZodOptional<z.ZodString>;
19415
19461
  }, z.core.$strict>, z.ZodObject<{
19416
19462
  zone: z.ZodOptional<z.ZodString>;
19417
19463
  kind: z.ZodLiteral<"email">;
@@ -297,6 +297,9 @@ export const FLOW_ALIASES = {
297
297
  };
298
298
  // ------------------------------------------------------------------ triggers
299
299
  const zoneRef = { zone: z.string().max(TEXT_LIMITS.flowRef).optional() };
300
+ /** v126: who signs a webhook's deliveries (webhook-signing.ts); `none` is the secret address alone. */
301
+ export const WEBHOOK_SENDERS = ["none", "standard", "github-style", "sentry", "vercel"];
302
+ const webhookSender = z.enum(WEBHOOK_SENDERS);
300
303
  const delivery = z.enum(["poll", "webhook"]);
301
304
  /** A trigger's settings as they are given: the console, `toolroll flows trigger add`, a flow file, a template, the lead. */
302
305
  const TRIGGER_INPUTS = {
@@ -311,7 +314,10 @@ const TRIGGER_INPUTS = {
311
314
  }),
312
315
  linear: z.strictObject({ kind: z.literal("linear"), team: short("triggerTeam").optional(), state: short("triggerState").optional(), label: short("triggerLabel").optional(), delivery: delivery.optional(), ...zoneRef }),
313
316
  flow: z.strictObject({ kind: z.literal("flow"), flow: z.int().min(1), when: z.string().max(TEXT_LIMITS.flowRef).optional(), ...zoneRef }),
314
- webhook: z.strictObject({ kind: z.literal("webhook"), title: short("triggerWebhookTitle").optional(), titleField: short("triggerWebhookField").optional(), bodyField: short("triggerWebhookField").optional(), ...zoneRef }),
317
+ /** v126: `sender` signs it; Sentry and Vercel read their own payloads (scoped by `project`, Vercel's also by `team`),
318
+ * the others pick `titleField`, `bodyField`, `idField` and `urlField` from the JSON. */
319
+ webhook: z.strictObject({ kind: z.literal("webhook"), title: short("triggerWebhookTitle").optional(), titleField: short("triggerWebhookField").optional(), bodyField: short("triggerWebhookField").optional(),
320
+ sender: webhookSender.optional(), project: short("triggerWebhookScope").optional(), team: short("triggerWebhookScope").optional(), idField: short("triggerWebhookField").optional(), urlField: short("triggerWebhookField").optional(), ...zoneRef }),
315
321
  email: z.strictObject({ kind: z.literal("email"), folder: short("triggerFolder").optional(), sender: short("triggerSender").optional(), subject: short("triggerSubject").optional(), ...zoneRef }),
316
322
  "plane-review": z.strictObject({ kind: z.literal("plane-review"), at: z.string().regex(/^\d{1,2}:\d{2}$/, { error: "must be a time like 07:30" }).optional(), timeZone: z.string().max(TEXT_LIMITS.flowTimeZone).optional(), ...zoneRef }),
317
323
  };
@@ -357,7 +363,10 @@ export const triggerConfigSchema = z.discriminatedUnion("kind", [
357
363
  z.strictObject({ kind: z.literal("github"), repo: z.string().min(1).max(TEXT_LIMITS.triggerGithubRepo), watch: z.enum(["issues", "pulls", "checks"]), label: z.string().max(TEXT_LIMITS.triggerLabel).nullable(), branch: z.string().max(TEXT_LIMITS.triggerBranch).nullable(), from: z.enum(["team", "anyone"]), delivery, ...ZONE_OR_NULL }),
358
364
  z.strictObject({ kind: z.literal("linear"), team: z.string().max(TEXT_LIMITS.triggerTeam).nullable(), state: z.string().max(TEXT_LIMITS.triggerState).nullable(), label: z.string().max(TEXT_LIMITS.triggerLabel).nullable(), delivery, ...ZONE_OR_NULL }),
359
365
  z.strictObject({ kind: z.literal("flow"), flow: z.int().min(1), when: zoneId, ...ZONE_OR_NULL }),
360
- z.strictObject({ kind: z.literal("webhook"), title: z.string().min(1).max(TEXT_LIMITS.triggerWebhookTitle), titleField: z.string().max(TEXT_LIMITS.triggerWebhookField).nullable(), bodyField: z.string().max(TEXT_LIMITS.triggerWebhookField).nullable(), ...ZONE_OR_NULL }),
366
+ /** v126: a webhook saved before its sender was chosen reads unsigned, with no scope and no identity or link field. */
367
+ z.strictObject({ kind: z.literal("webhook"), title: z.string().min(1).max(TEXT_LIMITS.triggerWebhookTitle), titleField: z.string().max(TEXT_LIMITS.triggerWebhookField).nullable(), bodyField: z.string().max(TEXT_LIMITS.triggerWebhookField).nullable(),
368
+ sender: webhookSender.optional(), project: z.string().max(TEXT_LIMITS.triggerWebhookScope).nullable().optional(), team: z.string().max(TEXT_LIMITS.triggerWebhookScope).nullable().optional(),
369
+ idField: z.string().max(TEXT_LIMITS.triggerWebhookField).nullable().optional(), urlField: z.string().max(TEXT_LIMITS.triggerWebhookField).nullable().optional(), ...ZONE_OR_NULL }),
361
370
  /** `sender`: addresses or domains, comma-separated; `subject`: words the subject must contain. */
362
371
  z.strictObject({ kind: z.literal("email"), folder: z.string().min(1).max(TEXT_LIMITS.triggerFolder), sender: z.string().max(TEXT_LIMITS.triggerSender).nullable(), subject: z.string().max(TEXT_LIMITS.triggerSubject).nullable(), ...ZONE_OR_NULL }),
363
372
  /** A channel in a chat app; `binding` is the pairing of the person who connected it (whose chat answers there). */
@@ -135,6 +135,9 @@ export declare const LEAD_TOOL_INPUTS: {
135
135
  since: z.ZodOptional<z.ZodString>;
136
136
  }, z.core.$strict>;
137
137
  readonly list_repos: z.ZodObject<{}, z.core.$strict>;
138
+ readonly find_tools: z.ZodObject<{
139
+ query: z.ZodString;
140
+ }, z.core.$strict>;
138
141
  readonly get_project_tools: z.ZodObject<{
139
142
  repo: z.ZodString;
140
143
  }, z.core.$strict>;
@@ -640,6 +643,33 @@ export declare const LEAD_TOOL_INPUTS: {
640
643
  report: z.ZodOptional<z.ZodBoolean>;
641
644
  checks: z.ZodOptional<z.ZodString>;
642
645
  }, z.core.$strict>;
646
+ readonly propose_sweep: z.ZodObject<{
647
+ repo: z.ZodString;
648
+ title: z.ZodString;
649
+ brief: z.ZodString;
650
+ items: z.ZodArray<z.ZodObject<{
651
+ title: z.ZodString;
652
+ item: z.ZodString;
653
+ }, z.core.$strict>>;
654
+ acceptance: z.ZodArray<z.ZodObject<{
655
+ id: z.ZodString;
656
+ statement: z.ZodString;
657
+ how: z.ZodOptional<z.ZodNullable<z.ZodString>>;
658
+ evidence: z.ZodArray<z.ZodEnum<{
659
+ "changed-path": "changed-path";
660
+ check: "check";
661
+ "manual-review": "manual-review";
662
+ screenshot: "screenshot";
663
+ }>>;
664
+ }, z.core.$strict>>;
665
+ max_parallel: z.ZodOptional<z.ZodNumber>;
666
+ }, z.core.$strict>;
667
+ readonly get_sweep: z.ZodObject<{
668
+ sweep: z.ZodInt;
669
+ }, z.core.$strict>;
670
+ readonly propose_sweep_cancel: z.ZodObject<{
671
+ sweep: z.ZodInt;
672
+ }, z.core.$strict>;
643
673
  readonly propose_next: z.ZodObject<{
644
674
  task: z.ZodString;
645
675
  }, z.core.$strict>;
@@ -831,6 +861,9 @@ export declare const LEAD_TOOL_READ_INPUTS: {
831
861
  since: z.ZodOptional<z.ZodString>;
832
862
  }, z.core.$strict>;
833
863
  readonly list_repos: z.ZodObject<{}, z.core.$strict>;
864
+ readonly find_tools: z.ZodObject<{
865
+ query: z.ZodString;
866
+ }, z.core.$strict>;
834
867
  readonly get_project_tools: z.ZodObject<{
835
868
  repo: z.ZodString;
836
869
  }, z.core.$strict>;
@@ -1309,6 +1342,33 @@ export declare const LEAD_TOOL_READ_INPUTS: {
1309
1342
  report: z.ZodOptional<z.ZodBoolean>;
1310
1343
  checks: z.ZodOptional<z.ZodString>;
1311
1344
  }, z.core.$strict>;
1345
+ readonly propose_sweep: z.ZodObject<{
1346
+ repo: z.ZodString;
1347
+ title: z.ZodString;
1348
+ brief: z.ZodString;
1349
+ items: z.ZodArray<z.ZodObject<{
1350
+ title: z.ZodString;
1351
+ item: z.ZodString;
1352
+ }, z.core.$strict>>;
1353
+ acceptance: z.ZodArray<z.ZodObject<{
1354
+ id: z.ZodString;
1355
+ statement: z.ZodString;
1356
+ how: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1357
+ evidence: z.ZodArray<z.ZodEnum<{
1358
+ "changed-path": "changed-path";
1359
+ check: "check";
1360
+ "manual-review": "manual-review";
1361
+ screenshot: "screenshot";
1362
+ }>>;
1363
+ }, z.core.$strict>>;
1364
+ max_parallel: z.ZodOptional<z.ZodNumber>;
1365
+ }, z.core.$strict>;
1366
+ readonly get_sweep: z.ZodObject<{
1367
+ sweep: z.ZodInt;
1368
+ }, z.core.$strict>;
1369
+ readonly propose_sweep_cancel: z.ZodObject<{
1370
+ sweep: z.ZodInt;
1371
+ }, z.core.$strict>;
1312
1372
  readonly propose_next: z.ZodObject<{
1313
1373
  task: z.ZodString;
1314
1374
  }, z.core.$strict>;
@@ -1629,6 +1689,13 @@ export declare const LEAD_TOOL_OUTPUTS: {
1629
1689
  repo: z.ZodString;
1630
1690
  }, z.core.$loose>>;
1631
1691
  }, z.core.$loose>;
1692
+ readonly find_tools: z.ZodObject<{
1693
+ tools: z.ZodArray<z.ZodObject<{
1694
+ name: z.ZodString;
1695
+ summary: z.ZodString;
1696
+ }, z.core.$loose>>;
1697
+ next: z.ZodString;
1698
+ }, z.core.$loose>;
1632
1699
  readonly get_project_tools: z.ZodObject<{
1633
1700
  rule: z.ZodString;
1634
1701
  tools: z.ZodArray<z.ZodObject<{
@@ -1860,6 +1927,31 @@ export declare const LEAD_TOOL_OUTPUTS: {
1860
1927
  kind: z.ZodLiteral<"task">;
1861
1928
  awaiting: z.ZodString;
1862
1929
  }, z.core.$loose>;
1930
+ readonly propose_sweep: z.ZodObject<{
1931
+ proposal: z.ZodNumber;
1932
+ label: z.ZodString;
1933
+ awaiting: z.ZodString;
1934
+ executed: z.ZodLiteral<false>;
1935
+ }, z.core.$loose>;
1936
+ readonly get_sweep: z.ZodObject<{
1937
+ sweep: z.ZodNumber;
1938
+ title: z.ZodString;
1939
+ line: z.ZodString;
1940
+ table: z.ZodString;
1941
+ maxParallel: z.ZodNumber;
1942
+ items: z.ZodArray<z.ZodObject<{
1943
+ item: z.ZodNumber;
1944
+ label: z.ZodString;
1945
+ task: z.ZodString;
1946
+ state: z.ZodString;
1947
+ }, z.core.$loose>>;
1948
+ }, z.core.$loose>;
1949
+ readonly propose_sweep_cancel: z.ZodObject<{
1950
+ proposal: z.ZodNumber;
1951
+ label: z.ZodString;
1952
+ awaiting: z.ZodString;
1953
+ executed: z.ZodLiteral<false>;
1954
+ }, z.core.$loose>;
1863
1955
  readonly propose_next: z.ZodObject<{
1864
1956
  proposal: z.ZodNumber;
1865
1957
  kind: z.ZodLiteral<"next">;
@@ -80,6 +80,7 @@ export const LEAD_TOOL_INPUTS = {
80
80
  }),
81
81
  recap: z.strictObject({ since: text("recapSince").optional() }),
82
82
  list_repos: z.strictObject({}),
83
+ find_tools: z.strictObject({ query: z.string().min(1).max(200).describe("What you want to do, in a few words (\"make a flow\", \"add a subagent\", \"hold a task\").") }),
83
84
  get_project_tools: z.strictObject({ repo: repoId }),
84
85
  get_flows: z.strictObject({ repo: repoId.optional(), flow: id.optional(), card: id.optional() }),
85
86
  // The flow contract's own schema (src/contracts/flow-propose.ts), never a second one here.
@@ -126,6 +127,14 @@ export const LEAD_TOOL_INPUTS = {
126
127
  not: scopeText.nullable().optional(), touches: touches.optional(), acceptance,
127
128
  planning: z.enum(["auto", "required", "skip"]).optional(), report: z.boolean().optional(), checks: text("checksWords").optional(),
128
129
  }),
130
+ // Lead fan-out (docs/plans/lead-fan-out.md): 2 to 20 independent items under one shared brief and one success test.
131
+ propose_sweep: z.strictObject({
132
+ repo: repoId, title: text("taskTitle"), brief: scopeText,
133
+ items: z.array(z.strictObject({ title: text("taskTitle"), item: scopeText })).min(2).max(20),
134
+ acceptance, max_parallel: z.number().int().min(1).max(8).optional(),
135
+ }),
136
+ get_sweep: z.strictObject({ sweep: id }),
137
+ propose_sweep_cancel: z.strictObject({ sweep: id }),
129
138
  propose_next: z.strictObject({ task: taskRef }),
130
139
  propose_reserve: z.strictObject({ task: taskRef, worker: text("workerName").nullable() }),
131
140
  propose_hold: z.strictObject({ task: taskRef, reason: text("proposalReason") }),
@@ -209,6 +218,7 @@ export const LEAD_TOOL_OUTPUTS = {
209
218
  propose_review: proposed("review", { operation: z.enum(["note", "revise"]) }),
210
219
  recap: recapOutput,
211
220
  list_repos: z.looseObject({ repos: rows({ repo: str }) }),
221
+ find_tools: z.looseObject({ tools: rows({ name: str, summary: str }), next: str }),
212
222
  get_project_tools: z.looseObject({ rule: str, tools: rows({ name: str }), connectBySigningIn: list, commonTools: list, foundOnThisComputer: list, notice: str }),
213
223
  get_flows: z.union([
214
224
  z.looseObject({ flow: int, name: str, steps: rows({ id: str, title: str, kind: str }), cards: rows({ card: int, title: str }), scripts: list, triggers: list, rule: str }),
@@ -247,6 +257,9 @@ export const LEAD_TOOL_OUTPUTS = {
247
257
  get_decision: decisionOutput,
248
258
  queue: z.looseObject({ repo: str, queueRevision: int, ...queueColumnsOutput }),
249
259
  propose_task: proposed("task", { repo: str, deliverable: z.enum(["branch", "report"]), planning: str }),
260
+ propose_sweep: cardDrafted,
261
+ get_sweep: z.looseObject({ sweep: int, title: str, line: str, table: str, maxParallel: int, items: z.array(z.looseObject({ item: int, label: str, task: str, state: str })) }),
262
+ propose_sweep_cancel: cardDrafted,
250
263
  propose_next: proposed("next", { task: str }),
251
264
  propose_reserve: proposed("reserve", { task: str, worker: nullable(str) }),
252
265
  propose_hold: proposed("hold", { task: str }),
@@ -8,21 +8,31 @@
8
8
  * credential would land, and a refusal is shown, logged and sent on.
9
9
  */
10
10
  import { z } from "zod";
11
- export declare const PROVIDER_ID_VALUES: readonly ["claude", "codex", "openrouter", "gemini"];
11
+ export declare const PROVIDER_ID_VALUES: readonly ["claude", "codex", "openrouter", "gemini", "opencode", "cursor", "cline", "qwen", "goose"];
12
12
  export declare const providerIdSchema: z.ZodEnum<{
13
13
  claude: "claude";
14
+ cline: "cline";
14
15
  codex: "codex";
16
+ cursor: "cursor";
15
17
  gemini: "gemini";
18
+ goose: "goose";
19
+ opencode: "opencode";
16
20
  openrouter: "openrouter";
21
+ qwen: "qwen";
17
22
  }>;
18
23
  export declare const MODEL_ID: RegExp;
19
24
  export declare const modelIdSchema: z.ZodString;
20
25
  export declare const agentSpecSchema: z.ZodObject<{
21
26
  provider: z.ZodEnum<{
22
27
  claude: "claude";
28
+ cline: "cline";
23
29
  codex: "codex";
30
+ cursor: "cursor";
24
31
  gemini: "gemini";
32
+ goose: "goose";
33
+ opencode: "opencode";
25
34
  openrouter: "openrouter";
35
+ qwen: "qwen";
26
36
  }>;
27
37
  model: z.ZodNullable<z.ZodString>;
28
38
  }, z.core.$strip>;
@@ -8,7 +8,7 @@
8
8
  * credential would land, and a refusal is shown, logged and sent on.
9
9
  */
10
10
  import { z } from "zod";
11
- export const PROVIDER_ID_VALUES = ["claude", "codex", "openrouter", "gemini"];
11
+ export const PROVIDER_ID_VALUES = ["claude", "codex", "openrouter", "gemini", "opencode", "cursor", "cline", "qwen", "goose"];
12
12
  export const providerIdSchema = z.enum(PROVIDER_ID_VALUES);
13
13
  export const MODEL_ID = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/;
14
14
  export const modelIdSchema = z.string().regex(MODEL_ID);
@@ -16,7 +16,7 @@ import { type ContractResult } from "./contract.js";
16
16
  export declare const ROUTE_PHASES: readonly ["plan", "build", "repair", "review"];
17
17
  /** provider.ts's provider ids, restated (provider.ts sits above phase-routing.ts in the module graph) and pinned to
18
18
  * them by the test suite. */
19
- export declare const ROUTE_PROVIDERS: readonly ["claude", "codex", "openrouter", "gemini"];
19
+ export declare const ROUTE_PROVIDERS: readonly ["claude", "codex", "openrouter", "gemini", "opencode", "cursor", "cline", "qwen", "goose"];
20
20
  /** provider.ts's MODEL_ID, restated for the same reason: an exact model id is argv-safe — no leading dash, no
21
21
  * whitespace or control bytes. */
22
22
  export declare const MODEL_ID_SHAPE: RegExp;
@@ -49,9 +49,14 @@ export declare const routeOverrideSchema: z.ZodObject<{
49
49
  }>;
50
50
  provider: z.ZodEnum<{
51
51
  claude: "claude";
52
+ cline: "cline";
52
53
  codex: "codex";
54
+ cursor: "cursor";
53
55
  gemini: "gemini";
56
+ goose: "goose";
57
+ opencode: "opencode";
54
58
  openrouter: "openrouter";
59
+ qwen: "qwen";
55
60
  }>;
56
61
  model: z.ZodString;
57
62
  by: z.ZodString;
@@ -67,9 +72,14 @@ export declare const routeLegSchema: z.ZodObject<{
67
72
  }>;
68
73
  provider: z.ZodEnum<{
69
74
  claude: "claude";
75
+ cline: "cline";
70
76
  codex: "codex";
77
+ cursor: "cursor";
71
78
  gemini: "gemini";
79
+ goose: "goose";
80
+ opencode: "opencode";
72
81
  openrouter: "openrouter";
82
+ qwen: "qwen";
73
83
  }>;
74
84
  model: z.ZodString;
75
85
  tier: z.ZodEnum<{
@@ -85,9 +95,14 @@ export declare const routeLegSchema: z.ZodObject<{
85
95
  recommended: z.ZodObject<{
86
96
  provider: z.ZodEnum<{
87
97
  claude: "claude";
98
+ cline: "cline";
88
99
  codex: "codex";
100
+ cursor: "cursor";
89
101
  gemini: "gemini";
102
+ goose: "goose";
103
+ opencode: "opencode";
90
104
  openrouter: "openrouter";
105
+ qwen: "qwen";
91
106
  }>;
92
107
  model: z.ZodString;
93
108
  tier: z.ZodEnum<{
@@ -135,9 +150,14 @@ export declare const sealedRouteV1Schema: z.ZodObject<{
135
150
  }>;
136
151
  provider: z.ZodEnum<{
137
152
  claude: "claude";
153
+ cline: "cline";
138
154
  codex: "codex";
155
+ cursor: "cursor";
139
156
  gemini: "gemini";
157
+ goose: "goose";
158
+ opencode: "opencode";
140
159
  openrouter: "openrouter";
160
+ qwen: "qwen";
141
161
  }>;
142
162
  model: z.ZodString;
143
163
  tier: z.ZodEnum<{
@@ -152,9 +172,14 @@ export declare const sealedRouteV1Schema: z.ZodObject<{
152
172
  recommended: z.ZodObject<{
153
173
  provider: z.ZodEnum<{
154
174
  claude: "claude";
175
+ cline: "cline";
155
176
  codex: "codex";
177
+ cursor: "cursor";
156
178
  gemini: "gemini";
179
+ goose: "goose";
180
+ opencode: "opencode";
157
181
  openrouter: "openrouter";
182
+ qwen: "qwen";
158
183
  }>;
159
184
  model: z.ZodString;
160
185
  tier: z.ZodEnum<{
@@ -174,9 +199,14 @@ export declare const sealedRouteV1Schema: z.ZodObject<{
174
199
  }>;
175
200
  provider: z.ZodEnum<{
176
201
  claude: "claude";
202
+ cline: "cline";
177
203
  codex: "codex";
204
+ cursor: "cursor";
178
205
  gemini: "gemini";
206
+ goose: "goose";
207
+ opencode: "opencode";
179
208
  openrouter: "openrouter";
209
+ qwen: "qwen";
180
210
  }>;
181
211
  model: z.ZodString;
182
212
  by: z.ZodString;
@@ -219,9 +249,14 @@ export declare const sealedRouteV2Schema: z.ZodObject<{
219
249
  }>;
220
250
  provider: z.ZodEnum<{
221
251
  claude: "claude";
252
+ cline: "cline";
222
253
  codex: "codex";
254
+ cursor: "cursor";
223
255
  gemini: "gemini";
256
+ goose: "goose";
257
+ opencode: "opencode";
224
258
  openrouter: "openrouter";
259
+ qwen: "qwen";
225
260
  }>;
226
261
  model: z.ZodString;
227
262
  tier: z.ZodEnum<{
@@ -237,9 +272,14 @@ export declare const sealedRouteV2Schema: z.ZodObject<{
237
272
  recommended: z.ZodObject<{
238
273
  provider: z.ZodEnum<{
239
274
  claude: "claude";
275
+ cline: "cline";
240
276
  codex: "codex";
277
+ cursor: "cursor";
241
278
  gemini: "gemini";
279
+ goose: "goose";
280
+ opencode: "opencode";
242
281
  openrouter: "openrouter";
282
+ qwen: "qwen";
243
283
  }>;
244
284
  model: z.ZodString;
245
285
  tier: z.ZodEnum<{
@@ -260,9 +300,14 @@ export declare const sealedRouteV2Schema: z.ZodObject<{
260
300
  }>;
261
301
  provider: z.ZodEnum<{
262
302
  claude: "claude";
303
+ cline: "cline";
263
304
  codex: "codex";
305
+ cursor: "cursor";
264
306
  gemini: "gemini";
307
+ goose: "goose";
308
+ opencode: "opencode";
265
309
  openrouter: "openrouter";
310
+ qwen: "qwen";
266
311
  }>;
267
312
  model: z.ZodString;
268
313
  by: z.ZodString;
@@ -320,9 +365,14 @@ export declare const sealedRouteSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
320
365
  }>;
321
366
  provider: z.ZodEnum<{
322
367
  claude: "claude";
368
+ cline: "cline";
323
369
  codex: "codex";
370
+ cursor: "cursor";
324
371
  gemini: "gemini";
372
+ goose: "goose";
373
+ opencode: "opencode";
325
374
  openrouter: "openrouter";
375
+ qwen: "qwen";
326
376
  }>;
327
377
  model: z.ZodString;
328
378
  tier: z.ZodEnum<{
@@ -337,9 +387,14 @@ export declare const sealedRouteSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
337
387
  recommended: z.ZodObject<{
338
388
  provider: z.ZodEnum<{
339
389
  claude: "claude";
390
+ cline: "cline";
340
391
  codex: "codex";
392
+ cursor: "cursor";
341
393
  gemini: "gemini";
394
+ goose: "goose";
395
+ opencode: "opencode";
342
396
  openrouter: "openrouter";
397
+ qwen: "qwen";
343
398
  }>;
344
399
  model: z.ZodString;
345
400
  tier: z.ZodEnum<{
@@ -359,9 +414,14 @@ export declare const sealedRouteSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
359
414
  }>;
360
415
  provider: z.ZodEnum<{
361
416
  claude: "claude";
417
+ cline: "cline";
362
418
  codex: "codex";
419
+ cursor: "cursor";
363
420
  gemini: "gemini";
421
+ goose: "goose";
422
+ opencode: "opencode";
364
423
  openrouter: "openrouter";
424
+ qwen: "qwen";
365
425
  }>;
366
426
  model: z.ZodString;
367
427
  by: z.ZodString;
@@ -403,9 +463,14 @@ export declare const sealedRouteSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
403
463
  }>;
404
464
  provider: z.ZodEnum<{
405
465
  claude: "claude";
466
+ cline: "cline";
406
467
  codex: "codex";
468
+ cursor: "cursor";
407
469
  gemini: "gemini";
470
+ goose: "goose";
471
+ opencode: "opencode";
408
472
  openrouter: "openrouter";
473
+ qwen: "qwen";
409
474
  }>;
410
475
  model: z.ZodString;
411
476
  tier: z.ZodEnum<{
@@ -421,9 +486,14 @@ export declare const sealedRouteSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
421
486
  recommended: z.ZodObject<{
422
487
  provider: z.ZodEnum<{
423
488
  claude: "claude";
489
+ cline: "cline";
424
490
  codex: "codex";
491
+ cursor: "cursor";
425
492
  gemini: "gemini";
493
+ goose: "goose";
494
+ opencode: "opencode";
426
495
  openrouter: "openrouter";
496
+ qwen: "qwen";
427
497
  }>;
428
498
  model: z.ZodString;
429
499
  tier: z.ZodEnum<{
@@ -444,9 +514,14 @@ export declare const sealedRouteSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
444
514
  }>;
445
515
  provider: z.ZodEnum<{
446
516
  claude: "claude";
517
+ cline: "cline";
447
518
  codex: "codex";
519
+ cursor: "cursor";
448
520
  gemini: "gemini";
521
+ goose: "goose";
522
+ opencode: "opencode";
449
523
  openrouter: "openrouter";
524
+ qwen: "qwen";
450
525
  }>;
451
526
  model: z.ZodString;
452
527
  by: z.ZodString;
@@ -17,7 +17,7 @@ import { limited, parseContract, versioned } from "./contract.js";
17
17
  export const ROUTE_PHASES = ["plan", "build", "repair", "review"];
18
18
  /** provider.ts's provider ids, restated (provider.ts sits above phase-routing.ts in the module graph) and pinned to
19
19
  * them by the test suite. */
20
- export const ROUTE_PROVIDERS = ["claude", "codex", "openrouter", "gemini"];
20
+ export const ROUTE_PROVIDERS = ["claude", "codex", "openrouter", "gemini", "opencode", "cursor", "cline", "qwen", "goose"];
21
21
  /** provider.ts's MODEL_ID, restated for the same reason: an exact model id is argv-safe — no leading dash, no
22
22
  * whitespace or control bytes. */
23
23
  export const MODEL_ID_SHAPE = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/;
@@ -208,6 +208,8 @@ declare const STORE_COLUMN_VALUES: {
208
208
  subagent_state: "subagent_state";
209
209
  subagent_tools: "subagent_tools";
210
210
  subagent_undo: "subagent_undo";
211
+ sweep_cancel_rest: "sweep_cancel_rest";
212
+ sweep_file: "sweep_file";
211
213
  task_cancel: "task_cancel";
212
214
  task_resume: "task_resume";
213
215
  tool_add: "tool_add";
@@ -19,7 +19,7 @@ export declare function previewSetup(store: Store, repo: string, inputs: SetupIn
19
19
  fingerprint: string;
20
20
  command: string;
21
21
  seconds: number;
22
- provider: "claude" | "codex" | "gemini" | "openrouter";
22
+ provider: "claude" | "cline" | "codex" | "cursor" | "gemini" | "goose" | "opencode" | "openrouter" | "qwen";
23
23
  model: string;
24
24
  };
25
25
  export declare function approveSetup(store: Store, repo: string, inputs: SetupInputs, fingerprint: string, by: string, token: string, now: Date): {
@@ -1,5 +1,5 @@
1
1
  /** Shared setup views over the existing project configuration and approval doors. */
2
- import { html, joinHtml, postForm } from "./html.js";
2
+ import { html, joinHtml, postForm, reauth } from "./html.js";
3
3
  import { ASSISTANTS } from "./setup-guide.js";
4
4
  import { openRouterPicker } from "./openrouter-models.js";
5
5
  export function connectionWords(connection) {
@@ -24,5 +24,5 @@ export function controlSetupHtml(data) {
24
24
  /** `fields` may still carry the session's csrf (a caller's habit): postForm writes the one CSRF field. */
25
25
  export function setupPreviewHtml(inputs, fields) {
26
26
  const { csrf: _csrf, ...rest } = fields;
27
- return html `<h1>Approve project setup</h1><div class="card"><p>${fields.repo ?? ""}</p><p><strong>Builder:</strong> ${inputs.provider} · ${inputs.model}</p><p><strong>Preparation:</strong></p><pre class="recap">${inputs.command || "No preparation command"}</pre><p>Preparation timeout: ${inputs.seconds} seconds.</p><p>The builder default applies to new tasks. Preparation applies to subsequent runs, including already approved tasks. Existing signed task settings and verification rules remain in force.</p>${postForm("/control/setup-approve", html `<label>Your password<input type="password" name="token" autocomplete="current-password" required></label><button>Approve project setup</button>`, { hidden: { ...rest, ...inputs } })}</div>`;
27
+ return html `<h1>Approve project setup</h1><div class="card"><p>${fields.repo ?? ""}</p><p><strong>Builder:</strong> ${inputs.provider} · ${inputs.model}</p><p><strong>Preparation:</strong></p><pre class="recap">${inputs.command || "No preparation command"}</pre><p>Preparation timeout: ${inputs.seconds} seconds.</p><p>The builder default applies to new tasks. Preparation applies to subsequent runs, including already approved tasks. Existing signed task settings and verification rules remain in force.</p>${postForm("/control/setup-approve", html `${reauth(html `<label>Your password<input type="password" name="token" autocomplete="current-password" required></label>`)}<button>Approve project setup</button>`, { hidden: { ...rest, ...inputs } })}</div>`;
28
28
  }
@@ -180,13 +180,24 @@ export type LeadToolCall = {
180
180
  args: Record<string, unknown>;
181
181
  };
182
182
  /** A provider answer with tool calls allowed: text, calls, usage. */
183
+ /** `tokensIn` is ALL input tokens of the request; of them, `cacheWriteTokens` were written to the provider's prompt cache
184
+ * and `cacheReadTokens` read from it (absent: the provider reported none — never assumed zero for a cached request). */
183
185
  export type LeadProviderAnswer = {
184
186
  text: string;
185
187
  calls: LeadToolCall[];
186
188
  tokensIn: number;
187
189
  tokensOut: number;
188
190
  reportedCostMicrousd: number | null;
191
+ cacheWriteTokens?: number;
192
+ cacheReadTokens?: number;
189
193
  };
194
+ /** Anthropic prices a cache write at 1.25x and a cache read at 0.1x the input price (5-minute cache). */
195
+ export declare const CACHE_WRITE_RATIO = 1.25;
196
+ export declare const CACHE_READ_RATIO = 0.1;
197
+ /** The price a worst case reserves at while prompt caching is on: every input token as a cache write (the dearest). */
198
+ export declare function cacheWorstPrice(price: ModelPrice): ModelPrice;
199
+ /** A step's settlement with its cache categories: plain input, cache writes and cache reads each at their own rate. */
200
+ export declare function settleWithCache(price: ModelPrice, answer: Pick<LeadProviderAnswer, "tokensIn" | "tokensOut" | "cacheWriteTokens" | "cacheReadTokens">): number;
190
201
  /** One message of the lead's own history, provider-neutral. */
191
202
  export type LeadHistoryMessage = {
192
203
  role: "operator";
@@ -224,6 +235,11 @@ export declare function composeLeadRequest(args: {
224
235
  dataDocument: string;
225
236
  history: readonly LeadHistoryMessage[];
226
237
  tools: readonly LeadToolSchema[];
238
+ /** Anthropic prompt caching: breakpoints after the first `coreTools` tools (stable across replies), on the system
239
+ * block, and on the DATA message (stable across the steps of one reply). Absent: no cache annotations. */
240
+ cache?: {
241
+ coreTools: number;
242
+ };
227
243
  }): {
228
244
  url: string;
229
245
  headers: Record<string, string>;