toolroll 0.9.94 → 0.9.95

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 (191) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/dist/agent-fence.d.ts +6 -0
  3. package/dist/agent-fence.js +2 -2
  4. package/dist/assignment-status.d.ts +1 -1
  5. package/dist/assignment-ui.js +2 -0
  6. package/dist/attest.d.ts +3 -0
  7. package/dist/attest.js +10 -0
  8. package/dist/browser/terminal.js +1 -1
  9. package/dist/browser/workspace.css +1 -1
  10. package/dist/browser/workspace.js +24 -24
  11. package/dist/browser-crew.js +2 -0
  12. package/dist/browser-workspace.d.ts +5 -0
  13. package/dist/build-review.js +2 -0
  14. package/dist/builder.d.ts +7 -2
  15. package/dist/builder.js +183 -79
  16. package/dist/card-catalog.d.ts +209 -0
  17. package/dist/card-catalog.js +133 -0
  18. package/dist/card-cli.d.ts +43 -0
  19. package/dist/card-cli.js +44 -0
  20. package/dist/card-render.d.ts +26 -0
  21. package/dist/card-render.js +223 -0
  22. package/dist/card-sources.d.ts +68 -0
  23. package/dist/card-sources.js +234 -0
  24. package/dist/chat-actions.d.ts +95 -8
  25. package/dist/chat-actions.js +449 -45
  26. package/dist/chat-approval.d.ts +13 -0
  27. package/dist/chat-approval.js +39 -9
  28. package/dist/chat-card-part.d.ts +11 -0
  29. package/dist/chat-card-part.js +18 -0
  30. package/dist/chat-card.d.ts +46 -0
  31. package/dist/chat-card.js +99 -0
  32. package/dist/chat-channel.d.ts +2 -0
  33. package/dist/chat-channel.js +26 -14
  34. package/dist/chat-controls.d.ts +4 -0
  35. package/dist/chat-controls.js +4 -0
  36. package/dist/chat-decide.d.ts +3 -14
  37. package/dist/chat-decide.js +43 -54
  38. package/dist/chat-delivery.js +13 -4
  39. package/dist/chat-flow.d.ts +0 -27
  40. package/dist/chat-flow.js +31 -2
  41. package/dist/chat-quiet.js +1 -1
  42. package/dist/chat-task-actions.d.ts +3 -2
  43. package/dist/chat-task-actions.js +19 -5
  44. package/dist/chat-terms.d.ts +14 -2
  45. package/dist/chat-terms.js +35 -0
  46. package/dist/check-failure.d.ts +2 -0
  47. package/dist/check-failure.js +34 -2
  48. package/dist/check-repair.d.ts +47 -0
  49. package/dist/check-repair.js +240 -0
  50. package/dist/claim.d.ts +6 -0
  51. package/dist/claim.js +13 -2
  52. package/dist/cli-help.d.ts +1 -1
  53. package/dist/cli-help.js +2 -0
  54. package/dist/cli.js +4 -0
  55. package/dist/coding-provider.d.ts +1 -1
  56. package/dist/coding-provider.js +9 -5
  57. package/dist/coding-workspace.d.ts +1 -1
  58. package/dist/coding-workspace.js +4 -4
  59. package/dist/contracts/chat-actions.d.ts +83 -0
  60. package/dist/contracts/chat-actions.js +18 -0
  61. package/dist/contracts/chat-card.d.ts +91 -0
  62. package/dist/contracts/chat-card.js +54 -0
  63. package/dist/contracts/chat-content.d.ts +191 -0
  64. package/dist/contracts/chat-content.js +4 -0
  65. package/dist/contracts/console-api.d.ts +2 -0
  66. package/dist/contracts/console-api.js +2 -0
  67. package/dist/contracts/flow-propose.d.ts +8 -1
  68. package/dist/contracts/flow-propose.js +3 -1
  69. package/dist/contracts/flow-send.d.ts +126 -0
  70. package/dist/contracts/flow-send.js +3 -0
  71. package/dist/contracts/lead-tools.d.ts +173 -0
  72. package/dist/contracts/lead-tools.js +15 -0
  73. package/dist/contracts/store-json.d.ts +16 -0
  74. package/dist/discord-chat.js +14 -0
  75. package/dist/dispatch.d.ts +1 -1
  76. package/dist/dispatch.js +7 -1
  77. package/dist/dispose.d.ts +19 -0
  78. package/dist/dispose.js +47 -7
  79. package/dist/eval-oracle.js +4 -1
  80. package/dist/evidence-pair.d.ts +53 -0
  81. package/dist/evidence-pair.js +128 -0
  82. package/dist/exhaustion.d.ts +17 -4
  83. package/dist/exhaustion.js +44 -4
  84. package/dist/export.js +1 -1
  85. package/dist/failing-first.d.ts +31 -0
  86. package/dist/failing-first.js +44 -0
  87. package/dist/fallback-schema.d.ts +8 -0
  88. package/dist/fallback-schema.js +40 -0
  89. package/dist/fallback.d.ts +138 -0
  90. package/dist/fallback.js +605 -0
  91. package/dist/findings.d.ts +224 -0
  92. package/dist/findings.js +449 -0
  93. package/dist/fleet-schema.d.ts +17 -0
  94. package/dist/fleet-schema.js +135 -0
  95. package/dist/flow-browser.js +2 -2
  96. package/dist/flow-code.d.ts +2 -2
  97. package/dist/flow-code.js +9 -5
  98. package/dist/flow-result-card.d.ts +22 -0
  99. package/dist/flow-result-card.js +55 -0
  100. package/dist/flow-send.js +12 -9
  101. package/dist/flow-steps.js +1 -1
  102. package/dist/flow-triggers.js +1 -1
  103. package/dist/flow-unattended.d.ts +26 -0
  104. package/dist/flow-unattended.js +12 -3
  105. package/dist/flows-ui.js +10 -2
  106. package/dist/follow-through-brief.d.ts +12 -0
  107. package/dist/follow-through-brief.js +31 -0
  108. package/dist/follow-through-cli.d.ts +23 -0
  109. package/dist/follow-through-cli.js +153 -0
  110. package/dist/git-incident.d.ts +16 -0
  111. package/dist/git-incident.js +69 -6
  112. package/dist/handover-note.d.ts +33 -0
  113. package/dist/handover-note.js +106 -0
  114. package/dist/invoke.d.ts +20 -1
  115. package/dist/invoke.js +108 -44
  116. package/dist/lead-cli.js +26 -24
  117. package/dist/lead-contract.js +1 -0
  118. package/dist/lead-doors.d.ts +4 -0
  119. package/dist/lead-doors.js +2 -2
  120. package/dist/lead-progress.js +2 -0
  121. package/dist/lead-tools.js +111 -32
  122. package/dist/lead.js +1 -1
  123. package/dist/local-owner.js +5 -0
  124. package/dist/modes.d.ts +6 -6
  125. package/dist/modes.js +3 -1
  126. package/dist/needs-you.d.ts +5 -2
  127. package/dist/needs-you.js +14 -2
  128. package/dist/operate-remote-arguments.js +1 -0
  129. package/dist/operate-remote.js +1 -1
  130. package/dist/operate.d.ts +1 -1
  131. package/dist/operate.js +165 -14
  132. package/dist/plan-login.d.ts +14 -0
  133. package/dist/plan-login.js +58 -0
  134. package/dist/planner.d.ts +1 -1
  135. package/dist/planner.js +2 -1
  136. package/dist/project-delete-ui.d.ts +12 -0
  137. package/dist/project-delete-ui.js +18 -1
  138. package/dist/project-delete.js +6 -0
  139. package/dist/project-knowledge.d.ts +6 -6
  140. package/dist/project-tools.d.ts +4 -4
  141. package/dist/project-tools.js +23 -7
  142. package/dist/protected-storage-look.d.ts +1 -0
  143. package/dist/protected-storage-look.js +13 -0
  144. package/dist/protected-storage.d.ts +70 -39
  145. package/dist/protected-storage.js +196 -147
  146. package/dist/provider-capture.d.ts +34 -0
  147. package/dist/provider-capture.js +53 -0
  148. package/dist/release-carry.js +10 -1
  149. package/dist/release.js +9 -1
  150. package/dist/scope.d.ts +22 -3
  151. package/dist/scope.js +71 -20
  152. package/dist/scout.d.ts +1 -1
  153. package/dist/scout.js +2 -1
  154. package/dist/serve.js +2 -0
  155. package/dist/server/chat.js +2 -2
  156. package/dist/server/console.css +50 -0
  157. package/dist/server/render-chat.js +14 -1
  158. package/dist/server/render-follow-through.d.ts +11 -0
  159. package/dist/server/render-follow-through.js +68 -0
  160. package/dist/server/render-results.js +1 -1
  161. package/dist/server/render-tasks.d.ts +3 -0
  162. package/dist/server/render-tasks.js +24 -5
  163. package/dist/server/route-table.js +3 -0
  164. package/dist/server/settings.js +37 -12
  165. package/dist/server/task-views.js +5 -0
  166. package/dist/server/tasks.js +76 -0
  167. package/dist/settings-groups-ui.d.ts +1 -0
  168. package/dist/settings-groups-ui.js +3 -1
  169. package/dist/settings-kit.js +3 -2
  170. package/dist/settings-proofs.js +3 -1
  171. package/dist/setup-guide.d.ts +2 -2
  172. package/dist/slack-chat.js +14 -1
  173. package/dist/steer-mailbox.d.ts +8 -1
  174. package/dist/steer-mailbox.js +164 -6
  175. package/dist/store.d.ts +11 -4
  176. package/dist/store.js +93 -30
  177. package/dist/surface.js +24 -4
  178. package/dist/task-control.d.ts +2 -1
  179. package/dist/task-status.js +5 -0
  180. package/dist/teardown-git.d.ts +2 -0
  181. package/dist/teardown-git.js +42 -16
  182. package/dist/telegram-lead.js +23 -6
  183. package/dist/telegram.js +12 -1
  184. package/dist/toolroll-update.js +2 -0
  185. package/dist/work-index.js +22 -7
  186. package/dist/work-summary.d.ts +1 -1
  187. package/dist/work-summary.js +5 -2
  188. package/dist/workspace-ui.d.ts +3 -1
  189. package/dist/workspace-ui.js +10 -1
  190. package/dist/worktree.js +23 -1
  191. package/package.json +2 -1
@@ -0,0 +1,91 @@
1
+ /**
2
+ * A Toolroll card as it is kept and shown (docs/plans/toolroll-cards.md): what a card's spec became once Toolroll filled
3
+ * it from its own records. Every value here was written by Toolroll; the one exception is a `text` block, which a person
4
+ * reads as a plain paragraph labelled as the lead's note, never as data. A saved card is read back through this
5
+ * schema before any renderer sees it.
6
+ */
7
+ import { z } from "zod";
8
+ export declare const CARD_LIMITS: {
9
+ readonly blocks: 8;
10
+ readonly columns: 6;
11
+ readonly rows: 20;
12
+ readonly points: 12;
13
+ readonly facts: 10;
14
+ readonly buttons: 4;
15
+ readonly actions: 4;
16
+ readonly cell: 80;
17
+ readonly label: 40;
18
+ readonly heading: 80;
19
+ readonly text: 600;
20
+ readonly note: 400;
21
+ readonly notes: 12;
22
+ };
23
+ export declare const CARD_CHART_TYPES: readonly ["bar", "pie", "line", "area"];
24
+ export type CardChartType = (typeof CARD_CHART_TYPES)[number];
25
+ export declare const chatCardSchema: z.ZodObject<{
26
+ version: z.ZodLiteral<1>;
27
+ title: z.ZodString;
28
+ asOf: z.ZodString;
29
+ repos: z.ZodArray<z.ZodString>;
30
+ blocks: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
31
+ kind: z.ZodLiteral<"text">;
32
+ text: z.ZodString;
33
+ }, z.core.$strict>, z.ZodObject<{
34
+ kind: z.ZodLiteral<"divider">;
35
+ }, z.core.$strict>, z.ZodObject<{
36
+ kind: z.ZodLiteral<"facts">;
37
+ heading: z.ZodString;
38
+ items: z.ZodArray<z.ZodObject<{
39
+ label: z.ZodString;
40
+ value: z.ZodString;
41
+ }, z.core.$strict>>;
42
+ }, z.core.$strict>, z.ZodObject<{
43
+ kind: z.ZodLiteral<"table">;
44
+ heading: z.ZodString;
45
+ origin: z.ZodEnum<{
46
+ records: "records";
47
+ report: "report";
48
+ }>;
49
+ columns: z.ZodArray<z.ZodObject<{
50
+ label: z.ZodString;
51
+ numeric: z.ZodBoolean;
52
+ }, z.core.$strict>>;
53
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
54
+ more: z.ZodInt;
55
+ }, z.core.$strict>, z.ZodObject<{
56
+ kind: z.ZodLiteral<"notes">;
57
+ heading: z.ZodString;
58
+ origin: z.ZodEnum<{
59
+ records: "records";
60
+ report: "report";
61
+ }>;
62
+ items: z.ZodArray<z.ZodString>;
63
+ more: z.ZodInt;
64
+ }, z.core.$strict>, z.ZodObject<{
65
+ kind: z.ZodLiteral<"chart">;
66
+ heading: z.ZodString;
67
+ chart: z.ZodEnum<{
68
+ area: "area";
69
+ bar: "bar";
70
+ line: "line";
71
+ pie: "pie";
72
+ }>;
73
+ points: z.ZodArray<z.ZodObject<{
74
+ label: z.ZodString;
75
+ value: z.ZodNumber;
76
+ shown: z.ZodString;
77
+ }, z.core.$strict>>;
78
+ }, z.core.$strict>], "kind">>;
79
+ buttons: z.ZodArray<z.ZodObject<{
80
+ label: z.ZodString;
81
+ path: z.ZodString;
82
+ }, z.core.$strict>>;
83
+ actions: z.ZodArray<z.ZodObject<{
84
+ proposal: z.ZodInt;
85
+ label: z.ZodString;
86
+ }, z.core.$strict>>;
87
+ }, z.core.$strict>;
88
+ export type ChatCard = z.infer<typeof chatCardSchema>;
89
+ export type ChatCardBlock = ChatCard["blocks"][number];
90
+ /** A saved card, or null: it was changed, or a build that wrote it knew another shape. */
91
+ export declare function readChatCard(value: unknown): ChatCard | null;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * A Toolroll card as it is kept and shown (docs/plans/toolroll-cards.md): what a card's spec became once Toolroll filled
3
+ * it from its own records. Every value here was written by Toolroll; the one exception is a `text` block, which a person
4
+ * reads as a plain paragraph labelled as the lead's note, never as data. A saved card is read back through this
5
+ * schema before any renderer sees it.
6
+ */
7
+ import { z } from "zod";
8
+ export const CARD_LIMITS = { blocks: 8, columns: 6, rows: 20, points: 12, facts: 10, buttons: 4, actions: 4, cell: 80, label: 40, heading: 80, text: 600, note: 400, notes: 12 };
9
+ const label = z.string().min(1).max(CARD_LIMITS.label);
10
+ const heading = z.string().min(1).max(CARD_LIMITS.heading);
11
+ const cell = z.string().max(CARD_LIMITS.cell);
12
+ export const CARD_CHART_TYPES = ["bar", "pie", "line", "area"];
13
+ const textBlock = z.strictObject({ kind: z.literal("text"), text: z.string().min(1).max(CARD_LIMITS.text) });
14
+ const dividerBlock = z.strictObject({ kind: z.literal("divider") });
15
+ const factsBlock = z.strictObject({ kind: z.literal("facts"), heading, items: z.array(z.strictObject({ label, value: cell })).min(1).max(CARD_LIMITS.facts) });
16
+ const tableBlock = z.strictObject({
17
+ kind: z.literal("table"), heading,
18
+ /** `report`: an agent's own report, shown as such; never a figure of Toolroll's. */
19
+ origin: z.enum(["records", "report"]),
20
+ columns: z.array(z.strictObject({ label, numeric: z.boolean() })).min(1).max(CARD_LIMITS.columns),
21
+ rows: z.array(z.array(cell).max(CARD_LIMITS.columns)).max(CARD_LIMITS.rows),
22
+ /** Rows the records hold beyond the ones shown. */
23
+ more: z.int().min(0),
24
+ });
25
+ /** Lines of saved words, whole: findings and a handover note. `report` as a table's: not Toolroll's figures. */
26
+ const notesBlock = z.strictObject({ kind: z.literal("notes"), heading, origin: z.enum(["records", "report"]), items: z.array(z.string().min(1).max(CARD_LIMITS.note)).min(1).max(CARD_LIMITS.notes), more: z.int().min(0) });
27
+ const chartBlock = z.strictObject({
28
+ kind: z.literal("chart"), heading, chart: z.enum(CARD_CHART_TYPES),
29
+ points: z.array(z.strictObject({ label, value: z.number().finite().min(0), shown: cell })).min(1).max(CARD_LIMITS.points),
30
+ });
31
+ export const chatCardSchema = z.strictObject({
32
+ version: z.literal(1),
33
+ title: heading,
34
+ /** When Toolroll read the records. */
35
+ asOf: z.string().regex(/^\d{4}-\d{2}-\d{2}T[\d:.]+Z$/),
36
+ /** The projects the values came from: a card goes only where all of them are reachable. */
37
+ repos: z.array(z.string()).max(200),
38
+ blocks: z.array(z.discriminatedUnion("kind", [textBlock, dividerBlock, factsBlock, tableBlock, notesBlock, chartBlock])).min(1).max(CARD_LIMITS.blocks),
39
+ /** Fixed destinations in Toolroll: a path made by chat-controls.ts, never a model's address. */
40
+ buttons: z.array(z.strictObject({ label, path: z.string().max(400).regex(/^\/(?![/\\])/) })).max(CARD_LIMITS.buttons),
41
+ /** Proposals this card leads to: each keeps its own Confirm message directly under the card. */
42
+ actions: z.array(z.strictObject({ proposal: z.int().min(1), label: z.string().min(1).max(CARD_LIMITS.heading) })).max(CARD_LIMITS.actions),
43
+ });
44
+ /** A saved card, or null: it was changed, or a build that wrote it knew another shape. */
45
+ export function readChatCard(value) {
46
+ const read = chatCardSchema.safeParse(value);
47
+ if (!read.success)
48
+ return null;
49
+ const card = read.data;
50
+ for (const block of card.blocks)
51
+ if (block.kind === "table" && block.rows.some(row => row.length !== block.columns.length))
52
+ return null;
53
+ return card;
54
+ }
@@ -114,6 +114,71 @@ export declare const chatContentShape: {
114
114
  }, z.core.$strict>;
115
115
  }, z.core.$strict>]>>>;
116
116
  }, z.core.$strict>>;
117
+ /** A Toolroll card (docs/plans/toolroll-cards.md): `text` stays its plain version, and `link`/`also` its buttons, so
118
+ * an app that can't show it, or refuses it, still has the whole message. */
119
+ rich: z.ZodOptional<z.ZodObject<{
120
+ version: z.ZodLiteral<1>;
121
+ title: z.ZodString;
122
+ asOf: z.ZodString;
123
+ repos: z.ZodArray<z.ZodString>;
124
+ blocks: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
125
+ kind: z.ZodLiteral<"text">;
126
+ text: z.ZodString;
127
+ }, z.core.$strict>, z.ZodObject<{
128
+ kind: z.ZodLiteral<"divider">;
129
+ }, z.core.$strict>, z.ZodObject<{
130
+ kind: z.ZodLiteral<"facts">;
131
+ heading: z.ZodString;
132
+ items: z.ZodArray<z.ZodObject<{
133
+ label: z.ZodString;
134
+ value: z.ZodString;
135
+ }, z.core.$strict>>;
136
+ }, z.core.$strict>, z.ZodObject<{
137
+ kind: z.ZodLiteral<"table">;
138
+ heading: z.ZodString;
139
+ origin: z.ZodEnum<{
140
+ records: "records";
141
+ report: "report";
142
+ }>;
143
+ columns: z.ZodArray<z.ZodObject<{
144
+ label: z.ZodString;
145
+ numeric: z.ZodBoolean;
146
+ }, z.core.$strict>>;
147
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
148
+ more: z.ZodInt;
149
+ }, z.core.$strict>, z.ZodObject<{
150
+ kind: z.ZodLiteral<"notes">;
151
+ heading: z.ZodString;
152
+ origin: z.ZodEnum<{
153
+ records: "records";
154
+ report: "report";
155
+ }>;
156
+ items: z.ZodArray<z.ZodString>;
157
+ more: z.ZodInt;
158
+ }, z.core.$strict>, z.ZodObject<{
159
+ kind: z.ZodLiteral<"chart">;
160
+ heading: z.ZodString;
161
+ chart: z.ZodEnum<{
162
+ area: "area";
163
+ bar: "bar";
164
+ line: "line";
165
+ pie: "pie";
166
+ }>;
167
+ points: z.ZodArray<z.ZodObject<{
168
+ label: z.ZodString;
169
+ value: z.ZodNumber;
170
+ shown: z.ZodString;
171
+ }, z.core.$strict>>;
172
+ }, z.core.$strict>], "kind">>;
173
+ buttons: z.ZodArray<z.ZodObject<{
174
+ label: z.ZodString;
175
+ path: z.ZodString;
176
+ }, z.core.$strict>>;
177
+ actions: z.ZodArray<z.ZodObject<{
178
+ proposal: z.ZodInt;
179
+ label: z.ZodString;
180
+ }, z.core.$strict>>;
181
+ }, z.core.$strict>>;
117
182
  /** The "What should change?" this part asks (chat-decide.ts): a reply to its message is the feedback. */
118
183
  prompt: z.ZodOptional<z.ZodInt>;
119
184
  };
@@ -199,6 +264,69 @@ export declare const chatContentSchema: z.ZodObject<{
199
264
  }, z.core.$strict>;
200
265
  }, z.core.$strict>]>>>;
201
266
  }, z.core.$strict>>;
267
+ rich: z.ZodOptional<z.ZodObject<{
268
+ version: z.ZodLiteral<1>;
269
+ title: z.ZodString;
270
+ asOf: z.ZodString;
271
+ repos: z.ZodArray<z.ZodString>;
272
+ blocks: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
273
+ kind: z.ZodLiteral<"text">;
274
+ text: z.ZodString;
275
+ }, z.core.$strict>, z.ZodObject<{
276
+ kind: z.ZodLiteral<"divider">;
277
+ }, z.core.$strict>, z.ZodObject<{
278
+ kind: z.ZodLiteral<"facts">;
279
+ heading: z.ZodString;
280
+ items: z.ZodArray<z.ZodObject<{
281
+ label: z.ZodString;
282
+ value: z.ZodString;
283
+ }, z.core.$strict>>;
284
+ }, z.core.$strict>, z.ZodObject<{
285
+ kind: z.ZodLiteral<"table">;
286
+ heading: z.ZodString;
287
+ origin: z.ZodEnum<{
288
+ records: "records";
289
+ report: "report";
290
+ }>;
291
+ columns: z.ZodArray<z.ZodObject<{
292
+ label: z.ZodString;
293
+ numeric: z.ZodBoolean;
294
+ }, z.core.$strict>>;
295
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
296
+ more: z.ZodInt;
297
+ }, z.core.$strict>, z.ZodObject<{
298
+ kind: z.ZodLiteral<"notes">;
299
+ heading: z.ZodString;
300
+ origin: z.ZodEnum<{
301
+ records: "records";
302
+ report: "report";
303
+ }>;
304
+ items: z.ZodArray<z.ZodString>;
305
+ more: z.ZodInt;
306
+ }, z.core.$strict>, z.ZodObject<{
307
+ kind: z.ZodLiteral<"chart">;
308
+ heading: z.ZodString;
309
+ chart: z.ZodEnum<{
310
+ area: "area";
311
+ bar: "bar";
312
+ line: "line";
313
+ pie: "pie";
314
+ }>;
315
+ points: z.ZodArray<z.ZodObject<{
316
+ label: z.ZodString;
317
+ value: z.ZodNumber;
318
+ shown: z.ZodString;
319
+ }, z.core.$strict>>;
320
+ }, z.core.$strict>], "kind">>;
321
+ buttons: z.ZodArray<z.ZodObject<{
322
+ label: z.ZodString;
323
+ path: z.ZodString;
324
+ }, z.core.$strict>>;
325
+ actions: z.ZodArray<z.ZodObject<{
326
+ proposal: z.ZodInt;
327
+ label: z.ZodString;
328
+ }, z.core.$strict>>;
329
+ }, z.core.$strict>>;
202
330
  prompt: z.ZodOptional<z.ZodInt>;
203
331
  }, z.core.$strict>;
204
332
  export type ChatContent = z.infer<typeof chatContentSchema>;
@@ -286,6 +414,69 @@ export declare const savedChatPartSchema: z.ZodObject<{
286
414
  }, z.core.$strict>;
287
415
  }, z.core.$strict>]>>>;
288
416
  }, z.core.$strict>>;
417
+ rich: z.ZodOptional<z.ZodObject<{
418
+ version: z.ZodLiteral<1>;
419
+ title: z.ZodString;
420
+ asOf: z.ZodString;
421
+ repos: z.ZodArray<z.ZodString>;
422
+ blocks: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
423
+ kind: z.ZodLiteral<"text">;
424
+ text: z.ZodString;
425
+ }, z.core.$strict>, z.ZodObject<{
426
+ kind: z.ZodLiteral<"divider">;
427
+ }, z.core.$strict>, z.ZodObject<{
428
+ kind: z.ZodLiteral<"facts">;
429
+ heading: z.ZodString;
430
+ items: z.ZodArray<z.ZodObject<{
431
+ label: z.ZodString;
432
+ value: z.ZodString;
433
+ }, z.core.$strict>>;
434
+ }, z.core.$strict>, z.ZodObject<{
435
+ kind: z.ZodLiteral<"table">;
436
+ heading: z.ZodString;
437
+ origin: z.ZodEnum<{
438
+ records: "records";
439
+ report: "report";
440
+ }>;
441
+ columns: z.ZodArray<z.ZodObject<{
442
+ label: z.ZodString;
443
+ numeric: z.ZodBoolean;
444
+ }, z.core.$strict>>;
445
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
446
+ more: z.ZodInt;
447
+ }, z.core.$strict>, z.ZodObject<{
448
+ kind: z.ZodLiteral<"notes">;
449
+ heading: z.ZodString;
450
+ origin: z.ZodEnum<{
451
+ records: "records";
452
+ report: "report";
453
+ }>;
454
+ items: z.ZodArray<z.ZodString>;
455
+ more: z.ZodInt;
456
+ }, z.core.$strict>, z.ZodObject<{
457
+ kind: z.ZodLiteral<"chart">;
458
+ heading: z.ZodString;
459
+ chart: z.ZodEnum<{
460
+ area: "area";
461
+ bar: "bar";
462
+ line: "line";
463
+ pie: "pie";
464
+ }>;
465
+ points: z.ZodArray<z.ZodObject<{
466
+ label: z.ZodString;
467
+ value: z.ZodNumber;
468
+ shown: z.ZodString;
469
+ }, z.core.$strict>>;
470
+ }, z.core.$strict>], "kind">>;
471
+ buttons: z.ZodArray<z.ZodObject<{
472
+ label: z.ZodString;
473
+ path: z.ZodString;
474
+ }, z.core.$strict>>;
475
+ actions: z.ZodArray<z.ZodObject<{
476
+ proposal: z.ZodInt;
477
+ label: z.ZodString;
478
+ }, z.core.$strict>>;
479
+ }, z.core.$strict>>;
289
480
  prompt: z.ZodOptional<z.ZodInt>;
290
481
  }, z.core.$strict>;
291
482
  /** A saved part's content (`version` is the saved form's, not the content's). */
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { z } from "zod";
11
11
  import { parseContract, readVersioned, versioned } from "./contract.js";
12
+ import { chatCardSchema } from "./chat-card.js";
12
13
  const id = z.int().min(1);
13
14
  const link = z.strictObject({ label: z.string(), path: z.string() });
14
15
  /** A Toolroll button's one-time token, as every chat app carries it: 32 hex, or `d:` and 24 hex for a decide button
@@ -58,6 +59,9 @@ export const chatContentShape = {
58
59
  /** A result's, plan's, failure's or pull request's own buttons (chat-decide.ts), minted with the part: each an act's
59
60
  * one-time token or a link. They ride the message once it is sent. */
60
61
  decide: z.strictObject({ rows: z.array(z.array(z.union([z.strictObject({ label: z.string(), token: z.string().regex(CHAT_BUTTON_TOKEN) }), z.strictObject({ label: z.string(), link })]))) }).optional(),
62
+ /** A Toolroll card (docs/plans/toolroll-cards.md): `text` stays its plain version, and `link`/`also` its buttons, so
63
+ * an app that can't show it, or refuses it, still has the whole message. */
64
+ rich: chatCardSchema.optional(),
61
65
  /** The "What should change?" this part asks (chat-decide.ts): a reply to its message is the feedback. */
62
66
  prompt: id.optional(),
63
67
  };
@@ -87,6 +87,7 @@ export declare const CONSOLE_FORMS: {
87
87
  readonly projectConcurrency: FormContract<"concurrency" | "repo">;
88
88
  readonly projectLiveView: FormContract<"act" | "nonce" | "password" | "repo">;
89
89
  readonly projectNetwork: FormContract<"hosts" | "local" | "mode" | "password" | "repo">;
90
+ readonly projectFallback: FormContract<"agents" | "paid" | "password" | "repo">;
90
91
  readonly projectWrites: FormContract<"password" | "repo" | "writes">;
91
92
  readonly projectCheckAccess: FormContract<"confirm-open" | "level" | "password" | "repo">;
92
93
  readonly projectSandbox: FormContract<"mach" | "password" | "read-deny" | "repo">;
@@ -146,6 +147,7 @@ export declare const CONSOLE_FORMS: {
146
147
  readonly codeMapRefresh: FormContract<never>;
147
148
  readonly tasksFast: FormContract<"digest" | "preview">;
148
149
  readonly keepGrown: FormContract<never>;
150
+ readonly followThrough: FormContract<"act" | "capture" | "file" | "finding" | "label" | "line" | "note" | "pointer" | "run">;
149
151
  readonly releaseGoOn: FormContract<"password">;
150
152
  readonly tasksAdd: FormContract<"acceptance" | "after" | "from" | "from-head" | "from-read" | "goal" | "id" | "not" | "permission-mode" | "plain" | "plan-first" | "planning-policy" | "projectRevision" | "quality-mode" | "repo" | "scout" | "title" | "touches">;
151
153
  readonly queue: FormContract<"before" | "column" | "from" | "note" | "projectRevision" | "queueRevision" | "respond" | "runner" | "task">;
@@ -96,6 +96,7 @@ export const CONSOLE_FORMS = {
96
96
  projectConcurrency: formContract("POST /settings/project/concurrency", ["repo", "concurrency"]),
97
97
  projectLiveView: formContract("POST /settings/project/live-view", ["repo", "act", "password", "nonce"]),
98
98
  projectNetwork: formContract("POST /settings/project/network", ["repo", "mode", "local", "hosts", "password"]),
99
+ projectFallback: formContract("POST /settings/project/fallback", ["repo", "agents", "paid", "password"]),
99
100
  projectWrites: formContract("POST /settings/project/writes", ["repo", "writes", "password"]),
100
101
  projectCheckAccess: formContract("POST /settings/project/check-access", ["repo", "level", "confirm-open", "password"]),
101
102
  projectSandbox: formContract("POST /settings/project/sandbox", ["repo", "read-deny", "mach", "password"]),
@@ -161,6 +162,7 @@ export const CONSOLE_FORMS = {
161
162
  codeMapRefresh: formContract("POST /projects/<project>/map/refresh", []),
162
163
  tasksFast: formContract("POST /tasks/fast", ["preview", "digest"]),
163
164
  keepGrown: formContract("POST /t/<id>/keep-grown", []),
165
+ followThrough: formContract("POST /t/<id>/follow-through", ["act", "note", "file", "line", "finding", "run", "pointer", "capture", "label"]),
164
166
  releaseGoOn: formContract("POST /t/<id>/release/go-on", ["password"]),
165
167
  tasksAdd: formContract("POST /tasks/add", ["projectRevision", "plain", "from", "from-head", "from-read", "id", "title", "repo", "goal", "not", "touches", "scout", "permission-mode", "quality-mode", "after", "acceptance", "planning-policy", "plan-first"]),
166
168
  queue: formContract("POST /queue/move, /queue/note", ["runner", "note", "from", "projectRevision", "respond", "task", "column", "before", "queueRevision"]),
@@ -4,13 +4,15 @@
4
4
  * (mate-tools.ts). The lead-tools contract (item 5) imports it from here rather than restating it.
5
5
  */
6
6
  import { z } from "zod";
7
- export declare const PROPOSE_FLOW_OPERATIONS: readonly ["create", "edit", "add_card", "move_card", "approve", "send_back", "choose", "cancel_card", "comment", "assign", "follow", "unfollow", "save_script", "add_trigger", "pause_trigger", "resume_trigger", "remove_trigger", "kit", "starter", "allow_browser", "turn_off_browser"];
7
+ export declare const PROPOSE_FLOW_OPERATIONS: readonly ["archive", "turn_off_unattended", "allow_unattended", "create", "edit", "add_card", "move_card", "approve", "send_back", "choose", "cancel_card", "comment", "assign", "follow", "unfollow", "save_script", "add_trigger", "pause_trigger", "resume_trigger", "remove_trigger", "kit", "starter", "allow_browser", "turn_off_browser"];
8
8
  export declare const proposeFlowInputSchema: z.ZodObject<{
9
9
  operation: z.ZodEnum<{
10
10
  add_card: "add_card";
11
11
  add_trigger: "add_trigger";
12
12
  allow_browser: "allow_browser";
13
+ allow_unattended: "allow_unattended";
13
14
  approve: "approve";
15
+ archive: "archive";
14
16
  assign: "assign";
15
17
  cancel_card: "cancel_card";
16
18
  choose: "choose";
@@ -27,11 +29,16 @@ export declare const proposeFlowInputSchema: z.ZodObject<{
27
29
  send_back: "send_back";
28
30
  starter: "starter";
29
31
  turn_off_browser: "turn_off_browser";
32
+ turn_off_unattended: "turn_off_unattended";
30
33
  unfollow: "unfollow";
31
34
  }>;
32
35
  repo: z.ZodOptional<z.ZodString>;
33
36
  flow: z.ZodOptional<z.ZodInt>;
34
37
  card: z.ZodOptional<z.ZodInt>;
38
+ days: z.ZodOptional<z.ZodInt>;
39
+ budget: z.ZodOptional<z.ZodString>;
40
+ runs: z.ZodOptional<z.ZodString>;
41
+ include: z.ZodOptional<z.ZodArray<z.ZodInt>>;
35
42
  kit: z.ZodOptional<z.ZodEnum<{
36
43
  [x: string]: string;
37
44
  }>>;
@@ -11,7 +11,7 @@ import { KITS } from "../kits.js";
11
11
  import { TEXT_LIMITS } from "../text-limits.js";
12
12
  import { toModelSchema } from "./contract.js";
13
13
  import { flowStepsSchema, leadTriggerSchema, SCRIPT_LANGUAGES, SCRIPT_NAME } from "./flow.js";
14
- export const PROPOSE_FLOW_OPERATIONS = ["create", "edit", "add_card", "move_card", "approve", "send_back", "choose", "cancel_card", "comment", "assign", "follow", "unfollow", "save_script", "add_trigger", "pause_trigger", "resume_trigger", "remove_trigger", "kit", "starter", "allow_browser", "turn_off_browser"];
14
+ export const PROPOSE_FLOW_OPERATIONS = ["archive", "turn_off_unattended", "allow_unattended", "create", "edit", "add_card", "move_card", "approve", "send_back", "choose", "cancel_card", "comment", "assign", "follow", "unfollow", "save_script", "add_trigger", "pause_trigger", "resume_trigger", "remove_trigger", "kit", "starter", "allow_browser", "turn_off_browser"];
15
15
  const id = z.int().min(1);
16
16
  const enumOf = (values) => z.enum(values);
17
17
  export const proposeFlowInputSchema = z.strictObject({
@@ -19,6 +19,8 @@ export const proposeFlowInputSchema = z.strictObject({
19
19
  /** A project as list_repos names it (r1, r2). */
20
20
  repo: z.string().regex(/^r[0-9]{1,3}$/, { error: "must be a project from list_repos, like r1" }).optional(),
21
21
  flow: id.optional(), card: id.optional(),
22
+ /** allow_unattended: how long it runs on its own, what it may spend, and the schedules chosen beyond the plain ones. */
23
+ days: z.int().min(1).optional(), budget: z.string().max(20).optional(), runs: z.string().max(20).optional(), include: z.array(id).max(50).optional(),
22
24
  kit: enumOf(KITS.map(one => one.id)).optional(),
23
25
  starter: z.enum(STARTER_IDS).optional(),
24
26
  name: z.string().max(TEXT_LIMITS.flowName).optional(),
@@ -60,6 +60,69 @@ export declare const flowSendPayloadSchema: z.ZodObject<{
60
60
  plug: z.ZodString;
61
61
  shot: z.ZodNullable<z.ZodInt>;
62
62
  }, z.core.$strict>>>;
63
+ card: z.ZodOptional<z.ZodObject<{
64
+ version: z.ZodLiteral<1>;
65
+ title: z.ZodString;
66
+ asOf: z.ZodString;
67
+ repos: z.ZodArray<z.ZodString>;
68
+ blocks: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
69
+ kind: z.ZodLiteral<"text">;
70
+ text: z.ZodString;
71
+ }, z.core.$strict>, z.ZodObject<{
72
+ kind: z.ZodLiteral<"divider">;
73
+ }, z.core.$strict>, z.ZodObject<{
74
+ kind: z.ZodLiteral<"facts">;
75
+ heading: z.ZodString;
76
+ items: z.ZodArray<z.ZodObject<{
77
+ label: z.ZodString;
78
+ value: z.ZodString;
79
+ }, z.core.$strict>>;
80
+ }, z.core.$strict>, z.ZodObject<{
81
+ kind: z.ZodLiteral<"table">;
82
+ heading: z.ZodString;
83
+ origin: z.ZodEnum<{
84
+ records: "records";
85
+ report: "report";
86
+ }>;
87
+ columns: z.ZodArray<z.ZodObject<{
88
+ label: z.ZodString;
89
+ numeric: z.ZodBoolean;
90
+ }, z.core.$strict>>;
91
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
92
+ more: z.ZodInt;
93
+ }, z.core.$strict>, z.ZodObject<{
94
+ kind: z.ZodLiteral<"notes">;
95
+ heading: z.ZodString;
96
+ origin: z.ZodEnum<{
97
+ records: "records";
98
+ report: "report";
99
+ }>;
100
+ items: z.ZodArray<z.ZodString>;
101
+ more: z.ZodInt;
102
+ }, z.core.$strict>, z.ZodObject<{
103
+ kind: z.ZodLiteral<"chart">;
104
+ heading: z.ZodString;
105
+ chart: z.ZodEnum<{
106
+ area: "area";
107
+ bar: "bar";
108
+ line: "line";
109
+ pie: "pie";
110
+ }>;
111
+ points: z.ZodArray<z.ZodObject<{
112
+ label: z.ZodString;
113
+ value: z.ZodNumber;
114
+ shown: z.ZodString;
115
+ }, z.core.$strict>>;
116
+ }, z.core.$strict>], "kind">>;
117
+ buttons: z.ZodArray<z.ZodObject<{
118
+ label: z.ZodString;
119
+ path: z.ZodString;
120
+ }, z.core.$strict>>;
121
+ actions: z.ZodArray<z.ZodObject<{
122
+ proposal: z.ZodInt;
123
+ label: z.ZodString;
124
+ }, z.core.$strict>>;
125
+ }, z.core.$strict>>;
63
126
  }, z.core.$strict>;
64
127
  export declare const flowChoosePayloadSchema: z.ZodObject<{
65
128
  version: z.ZodLiteral<1>;
@@ -85,6 +148,69 @@ export declare const flowChoosePayloadSchema: z.ZodObject<{
85
148
  plug: z.ZodString;
86
149
  shot: z.ZodNullable<z.ZodInt>;
87
150
  }, z.core.$strict>>>;
151
+ card: z.ZodOptional<z.ZodObject<{
152
+ version: z.ZodLiteral<1>;
153
+ title: z.ZodString;
154
+ asOf: z.ZodString;
155
+ repos: z.ZodArray<z.ZodString>;
156
+ blocks: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
157
+ kind: z.ZodLiteral<"text">;
158
+ text: z.ZodString;
159
+ }, z.core.$strict>, z.ZodObject<{
160
+ kind: z.ZodLiteral<"divider">;
161
+ }, z.core.$strict>, z.ZodObject<{
162
+ kind: z.ZodLiteral<"facts">;
163
+ heading: z.ZodString;
164
+ items: z.ZodArray<z.ZodObject<{
165
+ label: z.ZodString;
166
+ value: z.ZodString;
167
+ }, z.core.$strict>>;
168
+ }, z.core.$strict>, z.ZodObject<{
169
+ kind: z.ZodLiteral<"table">;
170
+ heading: z.ZodString;
171
+ origin: z.ZodEnum<{
172
+ records: "records";
173
+ report: "report";
174
+ }>;
175
+ columns: z.ZodArray<z.ZodObject<{
176
+ label: z.ZodString;
177
+ numeric: z.ZodBoolean;
178
+ }, z.core.$strict>>;
179
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
180
+ more: z.ZodInt;
181
+ }, z.core.$strict>, z.ZodObject<{
182
+ kind: z.ZodLiteral<"notes">;
183
+ heading: z.ZodString;
184
+ origin: z.ZodEnum<{
185
+ records: "records";
186
+ report: "report";
187
+ }>;
188
+ items: z.ZodArray<z.ZodString>;
189
+ more: z.ZodInt;
190
+ }, z.core.$strict>, z.ZodObject<{
191
+ kind: z.ZodLiteral<"chart">;
192
+ heading: z.ZodString;
193
+ chart: z.ZodEnum<{
194
+ area: "area";
195
+ bar: "bar";
196
+ line: "line";
197
+ pie: "pie";
198
+ }>;
199
+ points: z.ZodArray<z.ZodObject<{
200
+ label: z.ZodString;
201
+ value: z.ZodNumber;
202
+ shown: z.ZodString;
203
+ }, z.core.$strict>>;
204
+ }, z.core.$strict>], "kind">>;
205
+ buttons: z.ZodArray<z.ZodObject<{
206
+ label: z.ZodString;
207
+ path: z.ZodString;
208
+ }, z.core.$strict>>;
209
+ actions: z.ZodArray<z.ZodObject<{
210
+ proposal: z.ZodInt;
211
+ label: z.ZodString;
212
+ }, z.core.$strict>>;
213
+ }, z.core.$strict>>;
88
214
  options: z.ZodArray<z.ZodObject<{
89
215
  choice: z.ZodInt;
90
216
  label: z.ZodString;
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { z } from "zod";
14
14
  import { parseContract, readVersioned, versioned } from "./contract.js";
15
+ import { chatCardSchema } from "./chat-card.js";
15
16
  import { isRecord } from "../is-record.js";
16
17
  /** A link the message carries: a page of Toolroll's (a button) or the one outside page, a pull request. */
17
18
  export const flowSendLinkSchema = z.union([
@@ -42,6 +43,8 @@ const sendShape = {
42
43
  shots: z.strictObject({ taskId: z.string(), run: z.int() }).nullable(),
43
44
  /** After research: the report's items, numbered in this order in every message and screenshot caption. */
44
45
  items: z.array(flowSendItemSchema).min(1).optional(),
46
+ /** A "Send to me" visit's result as a card (flow-result-card.ts), from what the flow recorded. */
47
+ card: chatCardSchema.optional(),
45
48
  };
46
49
  export const flowChoiceOptionSchema = z.strictObject({ choice: z.int().min(0), label: z.string() });
47
50
  export const flowSendPayloadSchema = versioned(FLOW_SEND_VERSION, sendShape);