toolroll 0.9.81 → 0.9.83

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 (168) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/cli.js +1 -0
  3. package/dist/commit-extract.d.ts +18 -0
  4. package/dist/commit-extract.js +39 -1
  5. package/dist/converse.d.ts +12 -0
  6. package/dist/converse.js +18 -2
  7. package/dist/deploy-gate.js +8 -0
  8. package/dist/desktop-update.d.ts +1 -1
  9. package/dist/eval-gate.d.ts +51 -0
  10. package/dist/eval-gate.js +199 -0
  11. package/dist/eval-hooks.d.ts +39 -0
  12. package/dist/eval-hooks.js +477 -0
  13. package/dist/eval-oracle-main.d.ts +1 -0
  14. package/dist/eval-oracle-main.js +31 -0
  15. package/dist/eval-oracle.d.ts +60 -0
  16. package/dist/eval-oracle.js +217 -0
  17. package/dist/eval-world.d.ts +17 -0
  18. package/dist/eval-world.js +97 -0
  19. package/dist/evals.d.ts +299 -0
  20. package/dist/evals.js +964 -0
  21. package/dist/exec.js +15 -1
  22. package/dist/first-tasks-child.d.ts +1 -0
  23. package/dist/first-tasks-child.js +11 -0
  24. package/dist/flow-draft.js +4 -0
  25. package/dist/flow-sort.js +4 -0
  26. package/dist/folder-look.d.ts +107 -0
  27. package/dist/folder-look.js +302 -0
  28. package/dist/github-jobs.d.ts +25 -0
  29. package/dist/github-jobs.js +22 -0
  30. package/dist/invoke.d.ts +1 -1
  31. package/dist/invoke.js +14 -0
  32. package/dist/lead.js +4 -1
  33. package/dist/learning-child.d.ts +1 -0
  34. package/dist/learning-child.js +34 -0
  35. package/dist/learning-look.d.ts +25 -0
  36. package/dist/learning-look.js +72 -0
  37. package/dist/memory-pass.js +4 -0
  38. package/dist/nightly-check.d.ts +4 -1
  39. package/dist/nightly-check.js +5 -2
  40. package/dist/nightly-github.d.ts +316 -0
  41. package/dist/nightly-github.js +1022 -0
  42. package/dist/operate.d.ts +123 -1
  43. package/dist/operate.js +344 -29
  44. package/dist/project-identity.d.ts +37 -0
  45. package/dist/project-identity.js +106 -0
  46. package/dist/project-knowledge.d.ts +4 -4
  47. package/dist/project-tools.d.ts +4 -1
  48. package/dist/project-tools.js +7 -2
  49. package/dist/project.d.ts +4 -1
  50. package/dist/project.js +11 -4
  51. package/dist/provider.d.ts +3 -0
  52. package/dist/provider.js +9 -2
  53. package/dist/release-adapters.d.ts +21 -21
  54. package/dist/release-adapters.js +52 -19
  55. package/dist/release-auto.js +26 -0
  56. package/dist/release-card.js +3 -0
  57. package/dist/release-cli.js +59 -3
  58. package/dist/release-view.d.ts +3 -0
  59. package/dist/release-view.js +2 -0
  60. package/dist/release.d.ts +16 -0
  61. package/dist/release.js +16 -0
  62. package/dist/reported-usage.d.ts +69 -0
  63. package/dist/reported-usage.js +97 -0
  64. package/dist/repos.d.ts +7 -0
  65. package/dist/repos.js +57 -0
  66. package/dist/serve.js +35 -8
  67. package/dist/server/chat.js +4 -0
  68. package/dist/server/flows.js +9 -3
  69. package/dist/server/guards.d.ts +4 -0
  70. package/dist/server/guards.js +12 -3
  71. package/dist/server/http.d.ts +11 -0
  72. package/dist/server/http.js +3 -0
  73. package/dist/server/pages.js +62 -88
  74. package/dist/server/render-pages.d.ts +2 -16
  75. package/dist/server/render-pages.js +1 -55
  76. package/dist/server/render-tasks.js +1 -0
  77. package/dist/server/runtime.d.ts +4 -0
  78. package/dist/server/runtime.js +1 -0
  79. package/dist/server/settings.js +14 -3
  80. package/dist/server/tasks.js +15 -4
  81. package/dist/store.d.ts +109 -1
  82. package/dist/store.js +394 -4
  83. package/dist/subagents.js +4 -0
  84. package/dist/subscription-chat.d.ts +2 -0
  85. package/dist/subscription-chat.js +52 -13
  86. package/dist/task-sizing.js +4 -0
  87. package/dist/teardown-git.d.ts +9 -2
  88. package/dist/teardown-git.js +56 -33
  89. package/dist/up-processes.d.ts +13 -0
  90. package/dist/up-processes.js +6 -2
  91. package/evals/cases/catalog/case.json +25 -0
  92. package/evals/cases/catalog/fixture/README.md +3 -0
  93. package/evals/cases/catalog/fixture/package.json +8 -0
  94. package/evals/cases/catalog/fixture/test/catalog.test.mjs +4 -0
  95. package/evals/cases/catalog/oracle.mjs +23 -0
  96. package/evals/cases/catalog/probe.mjs +10 -0
  97. package/evals/cases/catalog/source.md +9 -0
  98. package/evals/cases/csv-quoting/case.json +23 -0
  99. package/evals/cases/csv-quoting/fixture/README.md +3 -0
  100. package/evals/cases/csv-quoting/fixture/csv.js +1 -0
  101. package/evals/cases/csv-quoting/fixture/package.json +8 -0
  102. package/evals/cases/csv-quoting/fixture/test/csv.test.mjs +5 -0
  103. package/evals/cases/csv-quoting/oracle.mjs +14 -0
  104. package/evals/cases/csv-quoting/probe.mjs +9 -0
  105. package/evals/cases/csv-quoting/source.md +9 -0
  106. package/evals/cases/dedupe/case.json +23 -0
  107. package/evals/cases/dedupe/fixture/README.md +3 -0
  108. package/evals/cases/dedupe/fixture/dedupe.js +1 -0
  109. package/evals/cases/dedupe/fixture/package.json +8 -0
  110. package/evals/cases/dedupe/fixture/test/dedupe.test.mjs +5 -0
  111. package/evals/cases/dedupe/oracle.mjs +16 -0
  112. package/evals/cases/dedupe/probe.mjs +13 -0
  113. package/evals/cases/dedupe/source.md +9 -0
  114. package/evals/cases/endpoint/case.json +25 -0
  115. package/evals/cases/endpoint/fixture/README.md +3 -0
  116. package/evals/cases/endpoint/fixture/package.json +8 -0
  117. package/evals/cases/endpoint/fixture/test/endpoint.test.mjs +4 -0
  118. package/evals/cases/endpoint/oracle.mjs +27 -0
  119. package/evals/cases/endpoint/probe.mjs +10 -0
  120. package/evals/cases/endpoint/source.md +11 -0
  121. package/evals/cases/math-divide/case.json +23 -0
  122. package/evals/cases/math-divide/fixture/README.md +3 -0
  123. package/evals/cases/math-divide/fixture/package.json +8 -0
  124. package/evals/cases/math-divide/fixture/src/math.js +1 -0
  125. package/evals/cases/math-divide/fixture/test/math.test.js +5 -0
  126. package/evals/cases/math-divide/oracle.mjs +13 -0
  127. package/evals/cases/math-divide/probe.mjs +9 -0
  128. package/evals/cases/math-divide/source.md +9 -0
  129. package/evals/cases/math-multiply/case.json +23 -0
  130. package/evals/cases/math-multiply/fixture/README.md +3 -0
  131. package/evals/cases/math-multiply/fixture/package.json +8 -0
  132. package/evals/cases/math-multiply/fixture/src/math.js +2 -0
  133. package/evals/cases/math-multiply/fixture/test/math.test.js +5 -0
  134. package/evals/cases/math-multiply/oracle.mjs +12 -0
  135. package/evals/cases/math-multiply/probe.mjs +9 -0
  136. package/evals/cases/math-multiply/source.md +9 -0
  137. package/evals/cases/math-subtract/case.json +23 -0
  138. package/evals/cases/math-subtract/fixture/README.md +3 -0
  139. package/evals/cases/math-subtract/fixture/package.json +8 -0
  140. package/evals/cases/math-subtract/fixture/src/math.js +1 -0
  141. package/evals/cases/math-subtract/fixture/test/math.test.js +5 -0
  142. package/evals/cases/math-subtract/oracle.mjs +12 -0
  143. package/evals/cases/math-subtract/probe.mjs +9 -0
  144. package/evals/cases/math-subtract/source.md +9 -0
  145. package/evals/cases/merge-config/case.json +23 -0
  146. package/evals/cases/merge-config/fixture/README.md +3 -0
  147. package/evals/cases/merge-config/fixture/config.js +1 -0
  148. package/evals/cases/merge-config/fixture/package.json +8 -0
  149. package/evals/cases/merge-config/fixture/test/config.test.mjs +5 -0
  150. package/evals/cases/merge-config/oracle.mjs +28 -0
  151. package/evals/cases/merge-config/probe.mjs +15 -0
  152. package/evals/cases/merge-config/source.md +9 -0
  153. package/evals/cases/paginate/case.json +23 -0
  154. package/evals/cases/paginate/fixture/README.md +3 -0
  155. package/evals/cases/paginate/fixture/package.json +8 -0
  156. package/evals/cases/paginate/fixture/paginate.js +1 -0
  157. package/evals/cases/paginate/fixture/test/paginate.test.mjs +5 -0
  158. package/evals/cases/paginate/oracle.mjs +18 -0
  159. package/evals/cases/paginate/probe.mjs +13 -0
  160. package/evals/cases/paginate/source.md +9 -0
  161. package/evals/cases/round2-asks/case.json +24 -0
  162. package/evals/cases/round2-asks/fixture/README.md +3 -0
  163. package/evals/cases/round2-asks/fixture/package.json +8 -0
  164. package/evals/cases/round2-asks/fixture/src/math.js +1 -0
  165. package/evals/cases/round2-asks/fixture/test/math.test.js +5 -0
  166. package/evals/cases/round2-asks/source.md +11 -0
  167. package/evals/manifest.json +15 -0
  168. package/package.json +2 -1
package/dist/operate.d.ts CHANGED
@@ -2,14 +2,16 @@ import { type IntegrationIo } from "./integrations.js";
2
2
  import { type OnboardIo } from "./agent-onboard.js";
3
3
  import { type Sizer } from "./task-sizing.js";
4
4
  import { type TriggerIo } from "./flow-triggers.js";
5
+ import { type GhRead } from "./nightly-github.js";
5
6
  import type { StepIo } from "./flow-steps.js";
6
7
  import type { FetchLike } from "./flow-share.js";
7
8
  import { type Store } from "./store.js";
8
9
  import { type DispatchAdapter } from "./sync.js";
9
10
  import { type RolePort, type UpRoleStart } from "./up-processes.js";
10
11
  import { type TelegramTransport } from "./telegram.js";
12
+ import { type FolderLookOptions } from "./folder-look.js";
11
13
  import { type LeadCliSeams } from "./lead-cli.js";
12
- import { type Principal, type RemoteSource } from "./operate-remote.js";
14
+ import { type Principal, type RemoteRun, type RemoteSource } from "./operate-remote.js";
13
15
  import { type PublishExec } from "./publish.js";
14
16
  import { type Runner as CommandRunner } from "./builder.js";
15
17
  import { type ReleaseIo } from "./releases.js";
@@ -150,6 +152,79 @@ export declare function runOperateAs(argv: string[], opts: {
150
152
  tool?: string;
151
153
  options?: OperateOptions;
152
154
  }): Promise<number>;
155
+ type Context = {
156
+ /** A remote run's person (runOperateAs): every credential check resolves to them. Absent for every local command. */
157
+ principal?: RemoteRun;
158
+ /** The lead token this command runs under: it signs in as its owner. */
159
+ leadToken?: string;
160
+ desktopIdentity?: string;
161
+ /** A desktop service directory is state, never an implicitly enrolled project. */
162
+ inferProjectFromCwd?: boolean;
163
+ /** Exact additions approved by the native project picker, independent of the enrollment registry. */
164
+ additionalProjectRepos?: () => readonly string[];
165
+ store: Store;
166
+ write: Write;
167
+ json: boolean;
168
+ /** Every --repo occurrence in order (arc 2) — only `up` reads it. */
169
+ repoList?: string[];
170
+ now: Date;
171
+ clock: () => Date;
172
+ evidenceRoot: string;
173
+ /** The directory holding the database — where credential files live. */
174
+ databaseFile: string;
175
+ /** Where `storage` looks for leftover test temp folders; default the temp folder and /tmp. */
176
+ tempRoots?: readonly string[];
177
+ /** The long-lived service's token: only a pass carrying it may start the automatic storage sweep. */
178
+ sweepOwner?: object;
179
+ telegramTokenFile: string;
180
+ agentRunner?: CommandRunner;
181
+ gitRunner?: CommandRunner;
182
+ telegramTransport?: TelegramTransport;
183
+ telegramEnv?: Record<string, string | undefined>;
184
+ /** Injected by tests: what `publish` runs for git and gh. */
185
+ publishExec?: PublishExec;
186
+ leadSeams?: LeadCliSeams;
187
+ /** Injected by tests: the external-dispatch gh surface. */
188
+ dispatchAdapter?: DispatchAdapter;
189
+ /** Injected by tests: how flow triggers reach GitHub (gh) and Linear (fetch), and where their secrets live. */
190
+ flowTriggerIo?: Partial<TriggerIo>;
191
+ /** Injected by tests: how flow check and update steps run commands and reach GitHub and Linear. */
192
+ flowStepIo?: Partial<StepIo>;
193
+ /** Injected by tests: how often a worker's flow passes run beside its builds (default FLOW_EVERY_MS). */
194
+ flowEveryMs?: number;
195
+ /** Injected by tests: the operating system this runs on (default process.platform). */
196
+ platform?: NodeJS.Platform;
197
+ /** Injected by tests: whether this machine has an OS fence for checks (default: probed). */
198
+ fenceAvailable?: () => boolean;
199
+ /** Injected by tests: how `flows import` fetches a flow file's address. */
200
+ flowFetch?: FetchLike;
201
+ integrationIo?: Partial<IntegrationIo>;
202
+ /**
203
+ * The stop fence (Codex M5-M8 audit, IV-1): set by the watch when a
204
+ * signal lands. A pass that sees true admits NOTHING more — no schedule
205
+ * fires, no claim, no run, no spawn. The in-flight build finishes under
206
+ * its own bounds (or the grace kill); admission is what stops.
207
+ */
208
+ shouldStop?: () => boolean;
209
+ /** A failed recovery pass pauses new admissions without stopping an owned build. */
210
+ shouldPauseAdmission?: () => boolean;
211
+ /** Test seam for task wait; production uses a timer. */
212
+ waitSleep?: (milliseconds: number) => Promise<void>;
213
+ releaseIo?: ReleaseIo;
214
+ installBin?: string;
215
+ onboardSeams?: OnboardSeams;
216
+ upSeams?: {
217
+ terminal?: boolean;
218
+ env?: Record<string, string | undefined>;
219
+ openBrowser?: (url: string) => void;
220
+ };
221
+ /** This process is one role of a `toolroll up`, started by it (never from the command line). */
222
+ upRole?: UpRoleHost;
223
+ /** In-memory seams a child process can't receive: `up` runs its console and worker in this one process. */
224
+ upOneProcess?: boolean;
225
+ /** Test seam: this computer's tailnet names (production asks `tailscale status`). */
226
+ tailnetNames?: () => Promise<readonly string[]>;
227
+ };
153
228
  /** Durably create the login file BEFORE the bootstrap commits (arc 2
154
229
  * finding 27): exclusive, 0600, fsynced — file and directory both — so the
155
230
  * row only ever follows a durable secret. Throws on any failure. */
@@ -181,3 +256,50 @@ export type UpRoleHost = {
181
256
  /** A role child's whole run (up-role-child.ts): the ordinary command prelude (containment, secrets, limits), then the
182
257
  * role itself. Only a process started by `up` gets here; no command line selects a role. */
183
258
  export declare function runUpRole(start: UpRoleStart, port: RolePort): Promise<number>;
259
+ /** GitHub's nightly as release debt (docs/plans/evals-nightly.md, part A): the watch loop's background read of each
260
+ * opted-in project's nightly runs, at most every 30 minutes, within a 60 s overall deadline, through the plane's own gh
261
+ * (release-adapters.ts githubReads). Nothing is read for a project that never opted in. */
262
+ export declare function refreshGithubNightlies(store: Store, now: () => Date, reads?: GhRead): Promise<number>;
263
+ /**
264
+ * `toolroll evals run | attempt | cases | recover` (docs/plans/evals-nightly.md, part C).
265
+ *
266
+ * - `run [--diagnostic] [--case a,b] [--k n] --as <you> --token <password>`: admit a campaign (a person's proof, the
267
+ * no release busy) and run it to its end from this installed plane. With no flags it is canonical,
268
+ * refused while any case is a draft. Each attempt is a child process: `evals attempt`.
269
+ * - `attempt <campaign> <case> <n> --world <dir> --db <world db>`: one attempt's world (eval-world.ts). Only under its
270
+ * runner's dispatch gate, and only on the world's own database.
271
+ * - `cases`: each installed case, its version, its pin, and whether a person has validated it yet.
272
+ * - `recover [--abandon <campaign>]`: settle campaigns whose runner stopped; with --abandon, a person ends a stuck one.
273
+ */
274
+ export declare function evalsCommand(positional: readonly string[], flags: Map<string, string | true>, context: Context): Promise<number>;
275
+ /**
276
+ * The saved projects an `up` start couldn't reach (upCommand): each is proved again every `everyMs` while the worker
277
+ * runs, by `prove` (upProveSaved), so a folder that answers again connects without a restart. Only what the start itself
278
+ * read from the saved list is here, and the set only shrinks: a line connected, removed from the saved list
279
+ * (`keepOnly`) or come back as some other checkout (`revoke`) is gone for good, so a line saved again later needs its
280
+ * recorded admission like any other addition. `retry` answers the proof when one is due and answered, else null.
281
+ */
282
+ export declare function upDeferredRetry<T>(inputs: readonly string[], prove: (input: string) => Promise<T | null>, everyMs?: number, now?: () => number): {
283
+ has: (input: string) => boolean;
284
+ list: () => string[];
285
+ retry: (input: string) => Promise<T | null>;
286
+ revoke: (input: string) => void;
287
+ keepOnly: (saved: readonly string[]) => boolean;
288
+ };
289
+ /**
290
+ * Whether a saved project's folder is a Git checkout now, read without blocking this thread: `git rev-parse
291
+ * --show-toplevel` (bounded, its own process), then the real paths of the saved line and of the checkout, resolved off
292
+ * the thread under a deadline (folder-look.ts). Null when it isn't one, or didn't answer.
293
+ */
294
+ export declare function upProveSaved(gitRun: (file: string, args: readonly string[], opts?: {
295
+ cwd?: string;
296
+ }) => Promise<{
297
+ code: number | null;
298
+ stdout: string;
299
+ }>, input: string, look?: FolderLookOptions): Promise<{
300
+ line: string;
301
+ root: string;
302
+ } | null>;
303
+ /** What `up` hands its next worker after the worker reports which saved projects it still holds start authority for:
304
+ * only what both still hold. A worker's report can give up an authority, never add or give back one. */
305
+ export declare function upNarrowDeferred(held: readonly string[], reported: readonly string[]): string[];