toolroll 0.9.33 → 0.9.36

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 (74) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +7 -0
  3. package/dist/assignment.d.ts +1 -0
  4. package/dist/assignment.js +2 -2
  5. package/dist/browser/workspace.css +1 -1
  6. package/dist/browser/workspace.js +17 -17
  7. package/dist/browser-crew.js +1 -0
  8. package/dist/browser-workspace.d.ts +5 -3
  9. package/dist/builder.js +4 -7
  10. package/dist/chat-acceptance.d.ts +1 -1
  11. package/dist/cli.d.ts +1 -1
  12. package/dist/cli.js +124 -63
  13. package/dist/contracts/contract-test.d.ts +45 -0
  14. package/dist/contracts/contract-test.js +69 -0
  15. package/dist/contracts/contract.d.ts +87 -0
  16. package/dist/contracts/contract.js +308 -0
  17. package/dist/contracts/flow-propose.d.ts +325 -0
  18. package/dist/contracts/flow-propose.js +41 -0
  19. package/dist/contracts/flow.d.ts +19400 -0
  20. package/dist/contracts/flow.js +359 -0
  21. package/dist/contracts/handoff.d.ts +91 -0
  22. package/dist/contracts/handoff.js +82 -0
  23. package/dist/contracts/plan.d.ts +58 -0
  24. package/dist/contracts/plan.js +67 -0
  25. package/dist/contracts/proof.d.ts +136 -0
  26. package/dist/contracts/proof.js +110 -0
  27. package/dist/contracts/verification-receipt.d.ts +148 -0
  28. package/dist/contracts/verification-receipt.js +87 -0
  29. package/dist/demo.js +28 -11
  30. package/dist/desktop-update.d.ts +1 -1
  31. package/dist/evidence.d.ts +3 -40
  32. package/dist/evidence.js +7 -3
  33. package/dist/flow-gallery.d.ts +3 -2
  34. package/dist/flow-share.d.ts +10 -32
  35. package/dist/flow-share.js +65 -83
  36. package/dist/flow-starters.d.ts +2 -1
  37. package/dist/flow-triggers.d.ts +15 -72
  38. package/dist/flow-triggers.js +94 -83
  39. package/dist/flows.d.ts +37 -218
  40. package/dist/flows.js +350 -385
  41. package/dist/mate-tools.js +14 -44
  42. package/dist/mcp-connect.d.ts +3 -0
  43. package/dist/mcp-connect.js +16 -4
  44. package/dist/operate.js +83 -12
  45. package/dist/plan.d.ts +12 -12
  46. package/dist/plan.js +109 -72
  47. package/dist/planner-source.js +2 -1
  48. package/dist/planner.js +55 -25
  49. package/dist/process-recovery-eligibility.d.ts +2 -2
  50. package/dist/process-recovery-eligibility.js +13 -8
  51. package/dist/project-admission.d.ts +93 -0
  52. package/dist/project-admission.js +134 -0
  53. package/dist/project-delete-ui.js +5 -2
  54. package/dist/proof.d.ts +15 -91
  55. package/dist/proof.js +90 -249
  56. package/dist/result-evidence-readers.d.ts +42 -0
  57. package/dist/result-evidence-readers.js +91 -0
  58. package/dist/runner.d.ts +10 -0
  59. package/dist/runner.js +16 -0
  60. package/dist/scope.js +4 -3
  61. package/dist/serve.d.ts +4 -0
  62. package/dist/serve.js +112 -160
  63. package/dist/setup-guide.d.ts +2 -2
  64. package/dist/store.d.ts +2 -0
  65. package/dist/store.js +4 -0
  66. package/dist/surface.js +16 -3
  67. package/dist/task-review-brief.d.ts +75 -0
  68. package/dist/task-review-brief.js +179 -0
  69. package/dist/text-limits.d.ts +87 -0
  70. package/dist/text-limits.js +86 -0
  71. package/dist/verification-evidence.js +24 -12
  72. package/dist/when-html.d.ts +2 -0
  73. package/dist/when-html.js +13 -0
  74. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,62 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.36 — 2026-10-06
4
+
5
+ - **Flows have one contract.** Every kind of zone, step, route, answer,
6
+ option, trigger and the flow file is described once
7
+ (`src/contracts/flow.ts`), and that description is what the lead's
8
+ `propose_flow` is told, what `toolroll flows create/edit/import` and the
9
+ console check, and what `docs/flow-file.schema.json` publishes (now
10
+ generated, so it includes Send to me, Person chooses and `ifReplied`, which
11
+ the hand-written one had missed). A refusal names the field and suggests the
12
+ one meant: `steps[0].routes[0]: unknown key 'to' (did you mean goesTo?)`,
13
+ `zones[2]: unknown key 'onFail' (did you mean ifFails?)`, instead of
14
+ "there's no step called ." Every saved flow, template, starter, kit and
15
+ gallery flow reads exactly as before: the same saved bytes and digests, and
16
+ the same exported files.
17
+ - **Tightened, on purpose.** A step, flow file zone, trigger setting or
18
+ `propose_flow` argument with a key its kind doesn't take is refused by name
19
+ rather than silently ignored: `planning` on a Holding step, `remindAfter` on
20
+ a Wait step, `ifFails` on a Sort step (use `ifNotSure`, which it meant) or
21
+ `next` on a Sort or Person chooses step. A sort's `sureAt` is 0.5–99. A flow
22
+ file's zones keep only the words their kind uses when exported, and a file
23
+ or drawing made by a newer Toolroll is refused as such. Messages for flows
24
+ and triggers changed from "Zone Build: …" sentences to path-named lines.
25
+
26
+ - **Builder handoffs and proofs have one contract.** The handoff a builder
27
+ leaves, its proof and the verification receipt are versioned schemas. Fifteen
28
+ real past runs replay with identical verdicts, receipt bytes and digests.
29
+ - **One compact review packet.** `toolroll task review <id> --brief` (or
30
+ `--json`) shows a build's conclusion, changed files, check result, review
31
+ findings by severity, screenshot paths and what to do next, in about 40
32
+ lines and without logs or diffs.
33
+ - **PostHog connects in one short step.** Its sign-in now uses PostHog's own
34
+ MCP permission preset instead of listing every permission, which showed a
35
+ 75-group permission screen. Sign-in returns are now logged.
36
+ - **Tests can't mistake a real process for a fake one.** Fake process IDs in
37
+ tests sit above every platform's limit, and a guard refuses new low ones (a
38
+ Brave tab and a GitHub runner process had made tests fail at random).
39
+
40
+ ## 0.9.35 — 2026-10-05
41
+
42
+ - **One-click sign-ins ask for every permission a service lists.** Toolroll
43
+ asked for only the first 20, so a service needing one later in its list
44
+ issued a token it then refused (PostHog needs `user:read`, its 140th).
45
+ Reconnect a service that failed its test after signing in.
46
+
47
+ ## 0.9.34 — 2026-10-05
48
+
49
+ - **Plans have one contract.** The first step of making every handoff robust:
50
+ a plan is described once, and that description is both what the planner is
51
+ told to return and what Toolroll checks. Limits come from one place, so the
52
+ 2,000-versus-8,000 mismatch from 0.9.30 can't happen again, and a malformed
53
+ plan's retry quotes the exact field that was wrong.
54
+ - **Projects added from the command line show in the console.** `toolroll
55
+ repos add` (you or the lead) admits a project the same way the console's Add
56
+ a project does, and it appears within seconds without a restart. Removing
57
+ works the same way. Every addition is recorded with who made it.
58
+ - **Crew rows show when they last changed** ("4m", "2h", "3d").
59
+
3
60
  ## 0.9.33 — 2026-10-05
4
61
 
5
62
  - **A restart never breaks a project's builds.** A project's identity no
package/README.md CHANGED
@@ -117,10 +117,17 @@ toolroll project use /path/to/project
117
117
  toolroll project show
118
118
  toolroll brief
119
119
  toolroll assignment show <task>
120
+ toolroll task review <task> --brief
120
121
  toolroll task complete <task>
121
122
  toolroll task revise <task> --feedback "Keep the filter selected after reload."
122
123
  ```
123
124
 
125
+ `task review <task> --brief` combines the latest finished build or report's conclusion,
126
+ file counts, checks, review findings, screenshot paths, plan and next actions.
127
+ Use `--run <id>` for an earlier attempt, `--json` for the same fields, and `--all`
128
+ to include LOW findings. Lists stay bounded, with omitted entries counted; missing
129
+ fields say `not recorded`. The lead token works through `--token` or `TOOLROLL_LEAD_TOKEN`.
130
+
124
131
  Completion and revisions use the local sign-in already saved by `up`. Completion
125
132
  reports the exact run, commit and check outcome it handled. Agents use a scoped
126
133
  credential (`project use /path/to/project --token-file /path/to/credential`) and
@@ -170,6 +170,7 @@ export declare function assignmentBrief(assignment: AssignmentSnapshot | null):
170
170
  status: "not-recorded";
171
171
  };
172
172
  } | null;
173
+ export declare function assignmentChecksForRun(store: Store, root: string | undefined, runId: number, now: Date): AssignmentChecks;
173
174
  export declare function assignmentOf(store: Store, taskId: string, now: Date, access: AssignmentAccess, root?: string): AssignmentSnapshot | null;
174
175
  type MutationResult = {
175
176
  ok: true;
@@ -83,7 +83,7 @@ function ownerOf(store, rootId, repo) {
83
83
  }
84
84
  // Report the recorded check outcome, never turn a model verdict into a check.
85
85
  // Follow-up checks on the same commit (Run checks) upgrade a pass and show a failure.
86
- function nativeChecks(store, root, runId, now) {
86
+ export function assignmentChecksForRun(store, root, runId, now) {
87
87
  const own = buildChecks(store, root, runId);
88
88
  const run = store.getRun(runId);
89
89
  const followUps = followUpChecksOf(store, runId, now, root);
@@ -163,7 +163,7 @@ export function assignmentOf(store, taskId, now, access, root) {
163
163
  const reports = artifacts.filter(a => a.kind === "report");
164
164
  const unavailable = family.versions.flatMap(version => store.runsFor(version.refId).flatMap(run => store.artifactsFor(run.id).filter(artifact => root === undefined || !readVerifiedArtifact(root, artifact).ok)
165
165
  .map(artifact => `Saved ${artifact.kind} #${artifact.id} (run ${run.id}) is unavailable or changed.`)));
166
- const checks = result === null ? null : nativeChecks(store, root, result.id, now);
166
+ const checks = result === null ? null : assignmentChecksForRun(store, root, result.id, now);
167
167
  const finishedBuild = result?.role === "builder" && (result.outcome === "built" || result.outcome === "no-change") &&
168
168
  result.finishedAt !== null && /^[a-f0-9]{40}$/.test(result.headRevision ?? "");
169
169
  // Finished work returns to its lead or user. Strict terms and previous model