@llm4ts/shell 2.50.0 → 2.51.0

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.
@@ -235,6 +235,7 @@ export declare const profile: Tool.Tool<"profile", {
235
235
  readonly exploreBeforeEdit: Schema.Int;
236
236
  readonly unverifiedClaims: Schema.Int;
237
237
  readonly lowConfidenceTasks: Schema.Int;
238
+ readonly reviewDiffLines: Schema.optionalKey<Schema.Int>;
238
239
  }>>;
239
240
  readonly skipped: Schema.$Array<Schema.String>;
240
241
  readonly totals: Schema.Struct<{
@@ -484,6 +485,7 @@ export declare const readToolkit: Toolkit.Toolkit<{
484
485
  readonly exploreBeforeEdit: Schema.Int;
485
486
  readonly unverifiedClaims: Schema.Int;
486
487
  readonly lowConfidenceTasks: Schema.Int;
488
+ readonly reviewDiffLines: Schema.optionalKey<Schema.Int>;
487
489
  }>>;
488
490
  readonly skipped: Schema.$Array<Schema.String>;
489
491
  readonly totals: Schema.Struct<{
@@ -1 +1 @@
1
- {"version":3,"file":"OperatorTools.d.ts","sourceRoot":"","sources":["../src/OperatorTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OperatorTools.d.ts","sourceRoot":"","sources":["../src/OperatorTools.ts"],"names":[],"mappings":"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"}
@@ -163,7 +163,9 @@ export const epicDraftOptions = (flags) => flags.harden
163
163
  generatePlan: generateDraftPlan,
164
164
  stories: () => ({
165
165
  reviewers: [correctnessReviewer],
166
+ // One round, whether the lens reviews each task or the story (ADR 0044).
166
167
  maxRounds: 1,
168
+ reviewRounds: 1,
167
169
  deferNonBlocking: true
168
170
  }),
169
171
  ...(flags.withTests ? {} : { selectGates: withoutTestGate }),
@@ -58,8 +58,10 @@ export const epicUsage = [
58
58
  " A plain rerun finishes an open round; --plan-only stops after planning",
59
59
  " --concurrency <n> stories implemented at once (default 3)",
60
60
  " --fail-fast stop the epic at the first failed story",
61
- " --judge-rounds <n> judge attempts per story (default 2 = one revision); a story the judge",
62
- " has not cleared after n attempts fails. LLM4TS_JUDGE_ROUNDS sets it too",
61
+ " --review-at <task|story> where the review lenses run (default story: once per story,",
62
+ " beside the judge; task: every task, as before 2.51)",
63
+ " --review-rounds <n> rounds of the story review (default 3); in task mode, judge attempts",
64
+ " (default 2). --judge-rounds and LLM4TS_JUDGE_ROUNDS set it too",
63
65
  " --task-concurrency <n> coders one story may hold at once (default 1: every task in order).",
64
66
  " Above 1, a task the plan says needs nothing still running, and whose",
65
67
  " Owns: paths overlap no running task's, goes to a free coder in its own",
@@ -91,6 +93,7 @@ export const parseEpicArgs = (argv) => Effect.gen(function* () {
91
93
  let failFast = false;
92
94
  let concurrency;
93
95
  let judgeRounds;
96
+ let reviewAt;
94
97
  let deferFindings = false;
95
98
  let mergeRevisions;
96
99
  let taskConcurrency;
@@ -183,17 +186,31 @@ export const parseEpicArgs = (argv) => Effect.gen(function* () {
183
186
  }
184
187
  mergeRevisions = parsed;
185
188
  }
186
- else if (argument === "--judge-rounds" || argument.startsWith("--judge-rounds=")) {
187
- const raw = argument.includes("=")
188
- ? argument.slice("--judge-rounds=".length)
189
- : argv[index + 1];
189
+ else if (argument === "--review-at" || argument.startsWith("--review-at=")) {
190
+ const raw = argument.includes("=") ? argument.slice("--review-at=".length) : argv[index + 1];
191
+ if (!argument.includes("=")) {
192
+ index += 1;
193
+ }
194
+ if (raw !== "task" && raw !== "story") {
195
+ return yield* ScriptUsage.make({
196
+ message: `--review-at takes task or story\n${epicUsage}`
197
+ });
198
+ }
199
+ reviewAt = raw;
200
+ }
201
+ else if (argument === "--judge-rounds" ||
202
+ argument.startsWith("--judge-rounds=") ||
203
+ argument === "--review-rounds" ||
204
+ argument.startsWith("--review-rounds=")) {
205
+ const name = argument.split("=")[0] ?? argument;
206
+ const raw = argument.includes("=") ? argument.slice(name.length + 1) : argv[index + 1];
190
207
  if (!argument.includes("=")) {
191
208
  index += 1;
192
209
  }
193
210
  const parsed = Number.parseInt(raw ?? "", 10);
194
211
  if (!Number.isInteger(parsed) || parsed < 1) {
195
212
  return yield* ScriptUsage.make({
196
- message: `--judge-rounds requires a positive integer\n${epicUsage}`
213
+ message: `${name} requires a positive integer\n${epicUsage}`
197
214
  });
198
215
  }
199
216
  judgeRounds = parsed;
@@ -207,6 +224,8 @@ export const parseEpicArgs = (argv) => Effect.gen(function* () {
207
224
  failFast,
208
225
  concurrency,
209
226
  judgeRounds,
227
+ reviewAt,
228
+ reviewRounds: judgeRounds,
210
229
  deferFindings,
211
230
  mergeRevisions,
212
231
  taskConcurrency,
@@ -270,6 +289,21 @@ export const judgeRoundsOption = (flag, environment) => {
270
289
  const raw = Number.parseInt(environment.LLM4TS_JUDGE_ROUNDS ?? "", 10);
271
290
  return Number.isInteger(raw) && raw > 0 ? { judgeRounds: raw } : {};
272
291
  };
292
+ /**
293
+ * Where the lenses run and for how many rounds (ADR 0044): per story unless
294
+ * `--review-at task`. The rounds (`--review-rounds`, `--judge-rounds`, or
295
+ * `LLM4TS_JUDGE_ROUNDS`) bound the story review, or in task mode count judge
296
+ * attempts as before.
297
+ */
298
+ export const reviewOptions = (reviewAt, rounds, environment) => {
299
+ const at = reviewAt ?? "story";
300
+ const { judgeRounds } = judgeRoundsOption(rounds, environment);
301
+ return judgeRounds === undefined
302
+ ? { reviewAt: at }
303
+ : at === "story"
304
+ ? { reviewAt: at, reviewRounds: judgeRounds }
305
+ : { reviewAt: at, judgeRounds };
306
+ };
273
307
  export const roundDir = (stateDir, round) => join(stateDir, "rounds", String(round));
274
308
  const mergedStories = (files, stateDir, plan) => Effect.gen(function* () {
275
309
  let merged = 0;
@@ -1857,7 +1891,7 @@ export const runEpicStories = (options) => Effect.gen(function* () {
1857
1891
  ...appDirNote,
1858
1892
  ...(orientation === undefined ? [] : ["", orientation])
1859
1893
  ].join("\n")),
1860
- ...judgeRoundsOption(flags.judgeRounds, process.env),
1894
+ ...reviewOptions(flags.reviewAt, flags.reviewRounds, process.env),
1861
1895
  ...mergeRevisionsOption(flags.mergeRevisions, process.env),
1862
1896
  ...taskConcurrencyOption(flags.taskConcurrency, process.env),
1863
1897
  concurrency,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llm4ts/shell",
3
- "version": "2.50.0",
3
+ "version": "2.51.0",
4
4
  "description": "Interactive shell and CLI for llm4ts: flow discovery, run-a-flow, and view",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -61,9 +61,9 @@
61
61
  "dependencies": {
62
62
  "@effect/platform-node": "4.0.0",
63
63
  "@effect/platform-node-shared": "4.0.0",
64
- "@llm4ts/flow": "2.50.0",
65
- "@llm4ts/runner": "2.50.0",
66
- "@llm4ts/core": "2.50.0"
64
+ "@llm4ts/flow": "2.51.0",
65
+ "@llm4ts/core": "2.51.0",
66
+ "@llm4ts/runner": "2.51.0"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "effect": "4.0.0"