toolroll 0.9.92 → 0.9.94

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 (341) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/dist/activity-line.d.ts +7 -4
  3. package/dist/activity-line.js +9 -7
  4. package/dist/agent-fence.d.ts +4 -0
  5. package/dist/agent-fence.js +4 -1
  6. package/dist/approval-authority.d.ts +7 -1
  7. package/dist/approval-authority.js +11 -2
  8. package/dist/approval-password.d.ts +31 -0
  9. package/dist/approval-password.js +26 -0
  10. package/dist/assignment-status.d.ts +1 -1
  11. package/dist/assignment-ui.js +3 -3
  12. package/dist/assignment.js +16 -3
  13. package/dist/boot-identity.d.ts +2 -1
  14. package/dist/boot-identity.js +6 -4
  15. package/dist/bounded-spawn.d.ts +57 -0
  16. package/dist/bounded-spawn.js +220 -0
  17. package/dist/browser/terminal.js +42 -42
  18. package/dist/browser/workspace.css +2 -2
  19. package/dist/browser/workspace.js +26 -26
  20. package/dist/browser-crew.js +2 -2
  21. package/dist/browser-shell.d.ts +1 -1
  22. package/dist/browser-shell.js +2 -2
  23. package/dist/browser-workspace.d.ts +48 -7
  24. package/dist/browser-workspace.js +3 -3
  25. package/dist/builder-restart.d.ts +21 -0
  26. package/dist/builder-restart.js +50 -0
  27. package/dist/builder.d.ts +4 -0
  28. package/dist/builder.js +73 -25
  29. package/dist/chat-acceptance.js +1 -1
  30. package/dist/chat-actions.d.ts +12 -2
  31. package/dist/chat-actions.js +25 -2
  32. package/dist/chat-channel.js +11 -0
  33. package/dist/chat-decide.d.ts +7 -2
  34. package/dist/chat-decide.js +37 -9
  35. package/dist/chat-quiet.js +3 -3
  36. package/dist/chat-voice.d.ts +1 -1
  37. package/dist/chat-voice.js +2 -2
  38. package/dist/check-facts.d.ts +126 -0
  39. package/dist/check-facts.js +318 -0
  40. package/dist/check-failure.d.ts +22 -3
  41. package/dist/check-failure.js +57 -13
  42. package/dist/check-levels-ui.d.ts +4 -0
  43. package/dist/check-levels-ui.js +10 -1
  44. package/dist/check-load.d.ts +85 -0
  45. package/dist/check-load.js +147 -0
  46. package/dist/check-only-standing.d.ts +36 -0
  47. package/dist/check-only-standing.js +39 -0
  48. package/dist/check-only.d.ts +15 -0
  49. package/dist/check-only.js +99 -0
  50. package/dist/check-report.d.ts +7 -0
  51. package/dist/check-report.js +4 -3
  52. package/dist/check-stamp.d.ts +46 -0
  53. package/dist/check-stamp.js +93 -0
  54. package/dist/checkout-cleanup.d.ts +36 -5
  55. package/dist/checkout-cleanup.js +166 -14
  56. package/dist/cli-help.d.ts +4 -1
  57. package/dist/cli-help.js +47 -30
  58. package/dist/cli.js +16 -1
  59. package/dist/code-extract.d.ts +44 -0
  60. package/dist/code-extract.js +88 -0
  61. package/dist/code-map-acts.d.ts +24 -0
  62. package/dist/code-map-acts.js +53 -0
  63. package/dist/code-map-admission.d.ts +52 -0
  64. package/dist/code-map-admission.js +295 -0
  65. package/dist/code-map-build.d.ts +63 -0
  66. package/dist/code-map-build.js +415 -0
  67. package/dist/code-map-cli.d.ts +153 -0
  68. package/dist/code-map-cli.js +103 -0
  69. package/dist/code-map-main.d.ts +1 -0
  70. package/dist/code-map-main.js +48 -0
  71. package/dist/code-map-read.d.ts +106 -0
  72. package/dist/code-map-read.js +171 -0
  73. package/dist/code-map-report.d.ts +37 -0
  74. package/dist/code-map-report.js +95 -0
  75. package/dist/code-map-shape.d.ts +172 -0
  76. package/dist/code-map-shape.js +327 -0
  77. package/dist/code-map-store.d.ts +136 -0
  78. package/dist/code-map-store.js +233 -0
  79. package/dist/coding-provider.d.ts +2 -0
  80. package/dist/coding-provider.js +3 -2
  81. package/dist/coding-update.js +3 -2
  82. package/dist/coding-workspace.js +4 -4
  83. package/dist/console-chrome.js +2 -2
  84. package/dist/containment.d.ts +5 -0
  85. package/dist/containment.js +14 -1
  86. package/dist/contracts/chat-actions.d.ts +9 -0
  87. package/dist/contracts/chat-actions.js +2 -0
  88. package/dist/contracts/cli.d.ts +52 -0
  89. package/dist/contracts/cli.js +4 -0
  90. package/dist/contracts/console-api.d.ts +12 -5
  91. package/dist/contracts/console-api.js +12 -5
  92. package/dist/contracts/gateway-tools.d.ts +17 -0
  93. package/dist/contracts/gateway-tools.js +3 -1
  94. package/dist/contracts/lead-tools.d.ts +61 -0
  95. package/dist/contracts/lead-tools.js +10 -1
  96. package/dist/contracts/project-knowledge.d.ts +38 -5
  97. package/dist/contracts/project-knowledge.js +11 -5
  98. package/dist/contracts/project-memory.d.ts +3 -1
  99. package/dist/contracts/project-memory.js +3 -2
  100. package/dist/contracts/release-check.d.ts +25 -1
  101. package/dist/contracts/release-check.js +19 -0
  102. package/dist/contracts/storage.d.ts +14 -0
  103. package/dist/contracts/storage.js +3 -1
  104. package/dist/contracts/store-json.d.ts +2 -0
  105. package/dist/contracts/youiyoux-request.d.ts +1 -1
  106. package/dist/contracts/youiyoux-request.js +1 -1
  107. package/dist/desktop-access.js +6 -2
  108. package/dist/desktop-update.d.ts +2 -2
  109. package/dist/desktop-update.js +13 -9
  110. package/dist/dispatch.js +18 -15
  111. package/dist/dispose.js +8 -2
  112. package/dist/easy-start.js +2 -3
  113. package/dist/eval-hooks.d.ts +55 -0
  114. package/dist/eval-hooks.js +227 -4
  115. package/dist/evals.js +2 -1
  116. package/dist/fast-start.d.ts +136 -0
  117. package/dist/fast-start.js +431 -0
  118. package/dist/fast-terms.d.ts +9 -0
  119. package/dist/fast-terms.js +23 -0
  120. package/dist/fenced-check-coverage.d.ts +62 -0
  121. package/dist/fenced-check-coverage.js +54 -0
  122. package/dist/first-run.js +1 -1
  123. package/dist/flaky-ci.d.ts +31 -0
  124. package/dist/flaky-ci.js +149 -0
  125. package/dist/flaky-cli.d.ts +60 -0
  126. package/dist/flaky-cli.js +60 -0
  127. package/dist/flaky.d.ts +83 -0
  128. package/dist/flaky.js +264 -0
  129. package/dist/flow-card-task.js +3 -0
  130. package/dist/flow-triggers.d.ts +1 -1
  131. package/dist/flow-triggers.js +1 -1
  132. package/dist/github-import.d.ts +62 -0
  133. package/dist/github-import.js +146 -0
  134. package/dist/guides.js +15 -10
  135. package/dist/invoke.d.ts +5 -1
  136. package/dist/invoke.js +49 -14
  137. package/dist/job-object-helper.ps1 +10 -3
  138. package/dist/keymap.d.ts +41 -0
  139. package/dist/keymap.js +51 -0
  140. package/dist/knowledge-cli.js +1 -1
  141. package/dist/knowledge-ui.d.ts +21 -4
  142. package/dist/knowledge-ui.js +75 -7
  143. package/dist/laptop-background.d.ts +16 -0
  144. package/dist/laptop-background.js +108 -2
  145. package/dist/lead-context.js +1 -1
  146. package/dist/lead-contract.d.ts +1 -1
  147. package/dist/lead-contract.js +2 -2
  148. package/dist/lead-progress.js +3 -0
  149. package/dist/lead-status.d.ts +2 -0
  150. package/dist/lead-status.js +6 -2
  151. package/dist/lead-tools.js +51 -2
  152. package/dist/lead.js +1 -1
  153. package/dist/lesson-notes.d.ts +81 -0
  154. package/dist/lesson-notes.js +336 -0
  155. package/dist/limits-ui.js +1 -1
  156. package/dist/local-owner.d.ts +1 -1
  157. package/dist/local-owner.js +11 -0
  158. package/dist/machine-check.d.ts +16 -0
  159. package/dist/machine-check.js +26 -0
  160. package/dist/machine-identity.d.ts +75 -0
  161. package/dist/machine-identity.js +170 -0
  162. package/dist/mcp-core.js +11 -1
  163. package/dist/memory-cli.d.ts +300 -1
  164. package/dist/memory-cli.js +62 -9
  165. package/dist/memory-pass.d.ts +16 -0
  166. package/dist/memory-pass.js +67 -3
  167. package/dist/memory-tidy.d.ts +181 -0
  168. package/dist/memory-tidy.js +523 -0
  169. package/dist/memory-use.d.ts +35 -0
  170. package/dist/memory-use.js +109 -0
  171. package/dist/merge-checklist.d.ts +55 -0
  172. package/dist/merge-checklist.js +182 -0
  173. package/dist/needs-you.d.ts +32 -13
  174. package/dist/needs-you.js +108 -49
  175. package/dist/nightly-github.d.ts +2 -0
  176. package/dist/nightly-github.js +4 -4
  177. package/dist/operate-remote-arguments.js +6 -1
  178. package/dist/operate-remote.js +3 -1
  179. package/dist/operate.d.ts +6 -1
  180. package/dist/operate.js +540 -70
  181. package/dist/phase-routing.js +2 -2
  182. package/dist/plain-schema.d.ts +23 -0
  183. package/dist/plain-schema.js +94 -0
  184. package/dist/plain-words.d.ts +20 -0
  185. package/dist/plain-words.js +66 -0
  186. package/dist/planner.js +2 -1
  187. package/dist/process-liveness.d.ts +2 -0
  188. package/dist/process-liveness.js +61 -17
  189. package/dist/project-delete-ui.d.ts +7 -2
  190. package/dist/project-delete-ui.js +12 -1
  191. package/dist/project-delete.js +13 -2
  192. package/dist/project-knowledge.d.ts +18 -11
  193. package/dist/project-knowledge.js +39 -9
  194. package/dist/project-learning.d.ts +2 -1
  195. package/dist/project-learning.js +15 -45
  196. package/dist/project-memory.d.ts +5 -0
  197. package/dist/project-memory.js +22 -2
  198. package/dist/proof.js +30 -5
  199. package/dist/provider-auth.js +1 -1
  200. package/dist/publish.js +9 -1
  201. package/dist/pull-request-flow.js +5 -0
  202. package/dist/push.d.ts +26 -3
  203. package/dist/push.js +55 -15
  204. package/dist/release-adapters.d.ts +9 -0
  205. package/dist/release-adapters.js +87 -1
  206. package/dist/release-approval.d.ts +191 -0
  207. package/dist/release-approval.js +382 -0
  208. package/dist/release-auto.js +26 -17
  209. package/dist/release-card.d.ts +74 -6
  210. package/dist/release-card.js +179 -23
  211. package/dist/release-carry.d.ts +7 -2
  212. package/dist/release-carry.js +39 -9
  213. package/dist/release-cli.d.ts +4 -0
  214. package/dist/release-cli.js +38 -23
  215. package/dist/release-coverage.js +1 -1
  216. package/dist/release-next.d.ts +48 -0
  217. package/dist/release-next.js +161 -0
  218. package/dist/release.d.ts +50 -1
  219. package/dist/release.js +118 -11
  220. package/dist/remote-destination.d.ts +36 -0
  221. package/dist/remote-destination.js +217 -0
  222. package/dist/remote-main.d.ts +48 -0
  223. package/dist/remote-main.js +84 -5
  224. package/dist/repository-context.d.ts +3 -2
  225. package/dist/repository-context.js +112 -70
  226. package/dist/restart-certification.d.ts +1 -0
  227. package/dist/restart-certification.js +8 -6
  228. package/dist/result-acts.d.ts +29 -21
  229. package/dist/result-acts.js +36 -25
  230. package/dist/result-follow-ups.d.ts +2 -2
  231. package/dist/result-follow-ups.js +18 -4
  232. package/dist/result-review.d.ts +1 -1
  233. package/dist/route-change-check.d.ts +4 -0
  234. package/dist/route-change-check.js +13 -0
  235. package/dist/route-change.d.ts +22 -0
  236. package/dist/route-change.js +89 -0
  237. package/dist/route-hooks.js +3 -2
  238. package/dist/route-results.d.ts +6 -1
  239. package/dist/route-results.js +14 -5
  240. package/dist/run-closeout.d.ts +1 -1
  241. package/dist/run-closeout.js +7 -5
  242. package/dist/runner-process.js +3 -2
  243. package/dist/runner.js +2 -1
  244. package/dist/scope.d.ts +6 -1
  245. package/dist/scope.js +22 -9
  246. package/dist/serve.d.ts +1 -1
  247. package/dist/serve.js +24 -18
  248. package/dist/server/chat.js +14 -12
  249. package/dist/server/chrome.d.ts +1 -1
  250. package/dist/server/chrome.js +26 -35
  251. package/dist/server/console.css +23 -0
  252. package/dist/server/guards.js +4 -0
  253. package/dist/server/home.d.ts +6 -0
  254. package/dist/server/home.js +21 -13
  255. package/dist/server/http.js +1 -1
  256. package/dist/server/kit.js +1 -1
  257. package/dist/server/merge-ready-view.d.ts +10 -0
  258. package/dist/server/merge-ready-view.js +30 -0
  259. package/dist/server/pages-assets.d.ts +1 -0
  260. package/dist/server/pages-assets.js +8 -5
  261. package/dist/server/pages.js +103 -82
  262. package/dist/server/render-chat.js +2 -2
  263. package/dist/server/render-code-map.d.ts +30 -0
  264. package/dist/server/render-code-map.js +137 -0
  265. package/dist/server/render-flaky.d.ts +20 -0
  266. package/dist/server/render-flaky.js +59 -0
  267. package/dist/server/render-history.js +1 -1
  268. package/dist/server/render-new-task.d.ts +26 -1
  269. package/dist/server/render-new-task.js +30 -5
  270. package/dist/server/render-pages.d.ts +1 -175
  271. package/dist/server/render-pages.js +38 -313
  272. package/dist/server/render-projects.d.ts +2 -1
  273. package/dist/server/render-projects.js +9 -7
  274. package/dist/server/render-release.d.ts +19 -0
  275. package/dist/server/render-release.js +84 -0
  276. package/dist/server/render-results.d.ts +2 -2
  277. package/dist/server/render-results.js +71 -73
  278. package/dist/server/render-tasks.d.ts +13 -2
  279. package/dist/server/render-tasks.js +156 -139
  280. package/dist/server/retired-routes.d.ts +17 -0
  281. package/dist/server/retired-routes.js +53 -0
  282. package/dist/server/route-table.d.ts +4 -1
  283. package/dist/server/route-table.js +52 -13
  284. package/dist/server/settings.js +129 -22
  285. package/dist/server/task-views.js +61 -26
  286. package/dist/server/tasks.d.ts +17 -6
  287. package/dist/server/tasks.js +273 -338
  288. package/dist/server/welcome.js +1 -1
  289. package/dist/settings-groups-ui.js +1 -1
  290. package/dist/setup-guide.d.ts +2 -2
  291. package/dist/stop-proof.d.ts +67 -0
  292. package/dist/stop-proof.js +295 -0
  293. package/dist/storage-sweep-process.js +1 -1
  294. package/dist/storage-sweep.d.ts +5 -3
  295. package/dist/storage-sweep.js +30 -9
  296. package/dist/storage-ui.js +28 -17
  297. package/dist/storage.d.ts +27 -2
  298. package/dist/storage.js +39 -2
  299. package/dist/store.d.ts +148 -34
  300. package/dist/store.js +626 -177
  301. package/dist/surface.js +46 -5
  302. package/dist/sweep-quarantine.d.ts +1 -0
  303. package/dist/sweep-quarantine.js +6 -4
  304. package/dist/tamper-scan.d.ts +4 -0
  305. package/dist/tamper-scan.js +90 -0
  306. package/dist/task-aliases.d.ts +5 -0
  307. package/dist/task-aliases.js +9 -0
  308. package/dist/task-control.js +4 -1
  309. package/dist/task-outcome-cli.d.ts +2 -0
  310. package/dist/task-outcome-cli.js +36 -17
  311. package/dist/task-sizing.d.ts +5 -0
  312. package/dist/task-sizing.js +2 -0
  313. package/dist/task-source.d.ts +7 -0
  314. package/dist/task-source.js +14 -0
  315. package/dist/task-status.d.ts +9 -0
  316. package/dist/task-status.js +40 -49
  317. package/dist/teardown-git.d.ts +16 -0
  318. package/dist/teardown-git.js +63 -5
  319. package/dist/telegram-progress.js +5 -3
  320. package/dist/telegram-status.js +6 -4
  321. package/dist/test-infra.d.ts +8 -0
  322. package/dist/test-infra.js +18 -0
  323. package/dist/tidy.js +1 -1
  324. package/dist/toolroll-update-ui.js +2 -2
  325. package/dist/toolroll-update.js +18 -5
  326. package/dist/tui-contract.d.ts +24 -0
  327. package/dist/tui-source.js +67 -8
  328. package/dist/tui.js +51 -51
  329. package/dist/vanished-retry.d.ts +30 -0
  330. package/dist/vanished-retry.js +174 -0
  331. package/dist/work-index.d.ts +2 -0
  332. package/dist/work-index.js +82 -70
  333. package/dist/work-summary.d.ts +2 -2
  334. package/dist/work-summary.js +2 -0
  335. package/dist/workspace-ui.d.ts +4 -2
  336. package/dist/workspace-ui.js +28 -22
  337. package/dist/worktree.d.ts +12 -3
  338. package/dist/worktree.js +68 -13
  339. package/package.json +1 -1
  340. package/dist/server/render-next.d.ts +0 -63
  341. package/dist/server/render-next.js +0 -109
@@ -7,7 +7,8 @@
7
7
  import { html, joinHtml, postForm } from "../html.js";
8
8
  import { projectName } from "../project.js";
9
9
  import { screen } from "./chrome.js";
10
- import { btn, composer, disclose, doc, docHeader, dock, field, ideas, input, note, phoneHeader, radios, select, sendButton, textarea, toggleChip } from "./kit.js";
10
+ import { btn, composer, disclose, doc, docHeader, dock, facts, field, ideas, input, note, phoneHeader, radios, select, sendButton, textarea, toggleChip } from "./kit.js";
11
+ import { fastTermsLines } from "../fast-terms.js";
11
12
  import { TASK_TEXT_LIMITS } from "../task-text.js";
12
13
  const FORM_ID = "nt-form";
13
14
  const PLAN_ON = "The agent reads the code and asks you anything unclear, then writes the plan.";
@@ -34,9 +35,11 @@ prefill = null,
34
35
  /** Words an idea's link put in the box (GET ?text=). */
35
36
  draft = null,
36
37
  /** Ideas for the chosen project: one tap drafts the words into the box. */
37
- suggestions = []) {
38
- const head = html `${phoneHeader("New task", { back: "/work" })}`;
39
- const header = docHeader({ title: "New task", back: ["/work", "Tasks"], meta: "Nothing is built until you approve its plan.", same: true });
38
+ suggestions = [],
39
+ /** A link the lead or a person put in the address (GET ?from=). */
40
+ fromLink = null) {
41
+ const head = html `${phoneHeader("New task", { back: "/tasks" })}`;
42
+ const header = docHeader({ title: "New task", back: ["/tasks", "Tasks"], meta: "Nothing is built until you approve its plan.", same: true });
40
43
  const items = projectItems(projects, project);
41
44
  const values = prefill?.values;
42
45
  // No project to choose from: the task names its folder (the server proves it), and adding a project is one link away.
@@ -48,7 +51,7 @@ suggestions = []) {
48
51
  const permission = values?.get("permission-mode") === "bypassPermissions" ? "bypassPermissions" : values?.get("permission-mode") === "auto" ? "auto" : permissionDefault;
49
52
  const text = prefill?.title ?? draft ?? "";
50
53
  // More options opens on a template, or when a refused filing had used any of them.
51
- const optionsUsed = prefill !== null && (values === undefined || ["goal", "acceptance", "not", "touches", "id", "after"].some(name => (values.get(name) ?? "") !== "") || values.get("scout") === "1");
54
+ const optionsUsed = fromLink !== null || prefill !== null && (values === undefined || ["from", "goal", "acceptance", "not", "touches", "id", "after"].some(name => (values.get(name) ?? "") !== "") || values.get("scout") === "1");
52
55
  const folder = !typed ? "" : field({ id: "nt-repo", label: "Project folder", hint: "No projects yet: name the folder of a git repository.",
53
56
  control: input({ id: "nt-repo", name: "repo", value: chosen, hint: true, attrs: { required: true, placeholder: "/path/to/repository", autocapitalize: "none", spellcheck: "false" } }) });
54
57
  const bar = joinHtml([
@@ -66,6 +69,7 @@ suggestions = []) {
66
69
  textAttrs: { maxlength: TASK_TEXT_LIMITS.title, autofocus: true },
67
70
  });
68
71
  const options = html `<div class="k-form">\
72
+ ${field({ id: "nt-from", label: "From an issue or PR (optional)", hint: "A github.com link in this project. Its text becomes the plan, and you approve it.", control: input({ id: "nt-from", name: "from", value: values?.get("from") ?? fromLink ?? "", attrs: { placeholder: "https://github.com/…", autocapitalize: "none", spellcheck: "false", inputmode: "url" } }) })}\
69
73
  ${field({ id: "nt-quality", label: "Checks", control: select({ id: "nt-quality", name: "quality-mode", items: [["default", "Default checks"], ["strict", "Strict (release)"]], current: quality, wide: true }) })}\
70
74
  ${candidates.length === 0 ? "" : field({ id: "nt-after", label: "Starts", control: select({ id: "nt-after", name: "after", wide: true, current: after,
71
75
  items: [["", "Right away"], ...candidates.map(one => [one.id, `After ${one.id}: ${one.title}`])] }) })}\
@@ -98,3 +102,24 @@ ${field({ id: "nt-id", label: "Task id (optional)", control: input({ id: "nt-id"
98
102
  const recipes = note(html `Work you do often? <a class="k-link" href="/recipes">Use a saved recipe</a>.`);
99
103
  return screen("New task", html `${head}${doc(header, form, ideaList, recipes)}${dock(btn("File task", { variant: "primary", type: "submit", attrs: { form: FORM_ID } }))}`, { chrome });
100
104
  }
105
+ /** The terms as label and words: the lines every approval surface reads (fast-terms.ts), with nothing hidden. */
106
+ export function fastTermsRows(store, scope, repo) {
107
+ return fastTermsLines(store, scope, repo).map(line => [line.label, line.words]);
108
+ }
109
+ /** Build (docs/plans/plain-toolroll.md P2.4): the exact terms this small task would be approved on, and the one button
110
+ * that approves them. The fields of "Plan it first" are the person's own words, on the ordinary road. */
111
+ export function fastStartPage(chrome, input) {
112
+ const head = html `${phoneHeader("Build this?", { back: "/tasks/new" })}`;
113
+ const header = docHeader({ title: "Build this?", back: ["/tasks/new", "New task"], meta: "Build approves exactly these terms.", same: true });
114
+ const build = postForm("/tasks/fast", btn("Build", { variant: "primary", type: "submit" }), { attrs: { class: "k-form", id: "fast-build" }, hidden: { preview: input.preview, digest: input.digest } });
115
+ const plan = postForm("/tasks/add", btn("Plan it first", { type: "submit" }), { attrs: { class: "k-form" }, hidden: { plain: "1", title: input.title, repo: input.repo, "planning-policy": "choice", "plan-first": "1" } });
116
+ return screen("Build this?", html `${head}${doc(header, facts(input.terms.map(([label, words]) => [label, joinHtml(words.split("\n").map(line => html `<div>${line}</div>`))])), html `<div class="k-acts">${build}${plan}</div>`)}`, { chrome });
117
+ }
118
+ /** An issue or pull request, read and quoted before anything is filed. Add task files it for the ordinary approval. */
119
+ export function importPage(chrome, input) {
120
+ const name = input.kind === "pull" ? `Pull request #${input.number}` : `Issue #${input.number}`;
121
+ const head = html `${phoneHeader(name, { back: "/tasks/new" })}`;
122
+ const header = docHeader({ title: name, back: ["/tasks/new", "New task"], meta: "Written outside Toolroll. You'll approve its plan before anything builds.", same: true });
123
+ const file = postForm("/tasks/add", btn("Add task", { variant: "primary", type: "submit" }), { attrs: { class: "k-form" }, hidden: { from: input.url, repo: input.repo, title: input.title, ...(input.head === null ? {} : { "from-head": input.head }), "from-read": "1" } });
124
+ return screen(name, html `${head}${doc(header, html `<blockquote class="k-quote"><p><strong>${input.title}</strong></p><p class="k-pre">${input.body === "" ? "No description." : input.body}</p></blockquote>`, file)}`, { chrome });
125
+ }
@@ -5,12 +5,10 @@ import { type AssignmentSnapshot } from "../assignment.js";
5
5
  import { type BoardCard } from "../board.js";
6
6
  import { type BrowserLimits } from "../browser-workspace.js";
7
7
  import { type DispatchDiagnosis } from "../dispatch.js";
8
- import { type FirstRunStep } from "../first-run.js";
9
8
  import { type Gap } from "../gaps.js";
10
9
  import { type parseBaseTreeSnapshot } from "../peek.js";
11
- import { type CriterionMatrixRow } from "../proof.js";
12
10
  import { type Runner } from "../runner.js";
13
- import { type Decision, type Incident, type RepairChainRow, type Run, type Store, type TaskState, type WorktreeRow } from "../store.js";
11
+ import { type Decision, type Incident, type Run, type Store, type TaskState, type WorktreeRow } from "../store.js";
14
12
  import { tally } from "../summary.js";
15
13
  import { type WorkIndexGroup, type WorkIndexItem, type WorkIndexPage } from "../work-index.js";
16
14
  import { type ChipTone } from "../design/kit.js";
@@ -23,90 +21,6 @@ export declare const TASK_STATES: readonly TaskState[];
23
21
  * auto-refresh — approval links lead to the step-up screen, and a page
24
22
  * that might hold typed input never re-renders itself.
25
23
  */
26
- export type InboxTab = "needs-you" | "ready" | "running" | "all";
27
- export declare const INBOX_TABS: readonly {
28
- id: InboxTab;
29
- label: string;
30
- }[];
31
- export declare function parseInboxTab(raw: string | null): InboxTab | undefined;
32
- /** What each tab holds, as a short fingerprint: a tab is unread when its
33
- * fingerprint differs from the one this browser saw there last. */
34
- export declare function inboxFingerprints(data: Pick<Parameters<typeof inboxPage>[1], "decisions" | "approvals" | "requeueables" | "cancelledBlockers" | "gaps" | "needsVerification" | "ready" | "running">): Record<InboxTab, string>;
35
- export declare function inboxPage(chrome: Chrome, data: {
36
- csrf: string;
37
- revision: number;
38
- /** No project open in scoped mode: every admitted project at once,
39
- * chips on every row, links only — acting means opening the project. */
40
- rollup: boolean;
41
- /** A project is OPEN: only then do decisions answer on the card. The
42
- * legacy unscoped projectless inbox stays links-only too (commit-1
43
- * review, finding 4) — the partial belongs to a chosen project. */
44
- interactive: boolean;
45
- decisions: (Decision & {
46
- taskId: string;
47
- repo?: string | null;
48
- })[];
49
- approvals: {
50
- taskId: string;
51
- title: string;
52
- goal: string;
53
- proposedAt: string;
54
- repo?: string | null; /** v48 authority repair: the closed consent door's title, or null when a yes could bind. */
55
- closed?: string | null;
56
- }[];
57
- requeueables: {
58
- taskId: string;
59
- title: string;
60
- state: TaskState;
61
- strikes: number;
62
- incidentCount: number;
63
- repo?: string | null;
64
- }[];
65
- cancelledBlockers: {
66
- blockerId: string;
67
- dependentCount: number;
68
- exampleDependent: string;
69
- repo?: string | null;
70
- blockerRepo?: string | null;
71
- }[];
72
- gaps: Gap[];
73
- /** A completed task whose proof is short or refuted and not yet accepted
74
- * (Priority 2) — reads "needs verification" here too, never silently
75
- * "done" just because the inbox does not otherwise look at finished work. */
76
- needsVerification: {
77
- taskId: string;
78
- title: string;
79
- verdict: "short" | "refuted";
80
- repo?: string | null;
81
- matrix?: CriterionMatrixRow[];
82
- repairChain?: RepairChainRow | null;
83
- }[];
84
- /** The first-run steps; null once the installation has had its first Ready result. */
85
- wizard: FirstRunStep[] | null;
86
- /** Whether any worker is answering right now — said at the top when none is. */
87
- worker: {
88
- answering: number;
89
- registered: number;
90
- lastHeard: string | null;
91
- };
92
- now: Date;
93
- /** Console v2: the tab shown, results ready to review, work running now,
94
- * and the tabs holding something this browser hasn't seen (dots on a phone). */
95
- tab?: InboxTab;
96
- ready?: {
97
- taskId: string;
98
- title: string;
99
- detail: string;
100
- repo: string | null;
101
- }[];
102
- running?: {
103
- taskId: string;
104
- title: string;
105
- detail: string;
106
- repo: string | null;
107
- }[];
108
- unread?: readonly InboxTab[];
109
- }): Screen;
110
24
  /** Start a builder: the one command, as text to select (/start-builder, where every "Connect a builder" leads, and
111
25
  * the Agents page). `project`: the open project's name, when the viewer may see it; `connected`: whether a builder
112
26
  * that may build there is checking in (null: say nothing); `managed`: whether this person can start one themselves
@@ -248,94 +162,6 @@ export type WorkbenchDone = {
248
162
  outcome: string | null;
249
163
  repo: string | null;
250
164
  };
251
- /**
252
- * The control-room rail (attended A1): every state that matters while a
253
- * person supervises, ordered by intervention cost. The project chip is
254
- * deliberately repeated on every row — a title is not a workspace, and
255
- * switching context must never depend on remembering which repo is open.
256
- */
257
- export declare function workbenchRail(data: {
258
- attention: BoardCard[];
259
- building: BoardCard[];
260
- waiting: BoardCard[];
261
- queued: BoardCard[];
262
- done: WorkbenchDone[];
263
- selected: string | null;
264
- saturated: boolean;
265
- }): Html;
266
- /**
267
- * The portfolio overview (arc slice 1a): what waits on you, what the last
268
- * 24 hours of run starts amounted to, what is running, and the terminal-run
269
- * ledger — all of it across every admitted project, a project chip on every
270
- * row. The caller has already applied admission and per-row visibility.
271
- */
272
- export declare function portfolioOverview(data: {
273
- attention: BoardCard[];
274
- building: BoardCard[];
275
- waiting: BoardCard[];
276
- queued: BoardCard[];
277
- done: WorkbenchDone[];
278
- saturated: boolean;
279
- decisions: (Decision & {
280
- taskId: string;
281
- repo?: string | null;
282
- })[];
283
- approvals: {
284
- taskId: string;
285
- title: string;
286
- goal: string;
287
- proposedAt: string;
288
- repo?: string | null; /** v48 authority repair: the closed consent door's title, or null when a yes could bind. */
289
- closed?: string | null;
290
- }[];
291
- requeueables: {
292
- taskId: string;
293
- title: string;
294
- state: TaskState;
295
- strikes: number;
296
- incidentCount: number;
297
- repo?: string | null;
298
- }[];
299
- cancelledBlockers: {
300
- blockerId: string;
301
- dependentCount: number;
302
- exampleDependent: string;
303
- repo?: string | null;
304
- blockerRepo?: string | null;
305
- }[];
306
- gaps: Gap[];
307
- gapsProject: string | null;
308
- runs24: (Run & {
309
- taskId: string;
310
- })[];
311
- live: {
312
- taskId: string;
313
- runner: string;
314
- claimedAt: string;
315
- expiresAt: string;
316
- model: string | null;
317
- repo: string | null;
318
- }[];
319
- ledger: {
320
- runId: number;
321
- taskId: string;
322
- title: string;
323
- repo: string | null;
324
- outcome: string;
325
- role: string;
326
- provider: string | null;
327
- model: string | null;
328
- startedAt: string;
329
- ranMinutes: number | null;
330
- costUsd: number | null;
331
- authMode: "subscription" | "api-key" | "agent-login" | null;
332
- prNumber: number | null;
333
- prUrl: string | null;
334
- }[];
335
- /** "" when there is no session token: then no form renders. postForm adds the field itself. */
336
- csrf: string;
337
- now: Date;
338
- }): Html;
339
165
  export type OnboardCardState = {
340
166
  enabled: false;
341
167
  why: string;