@llm4ts/shell 2.4.2 → 2.6.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.
- package/dist/Cli.d.ts +10 -0
- package/dist/Cli.d.ts.map +1 -1
- package/dist/Cli.js +45 -0
- package/dist/Cli.js.map +1 -1
- package/flows/lib/pack-fork.js +126 -5
- package/flows/modernize-implement.js +15 -0
- package/flows/modernize-seed.js +3 -1
- package/flows/pack-fork.js +47 -17
- package/package.json +4 -4
- package/src/Cli.ts +91 -0
package/dist/Cli.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Option from "effect/Option";
|
|
2
3
|
import { FileSystem } from "effect/FileSystem";
|
|
3
4
|
import * as Schema from "effect/Schema";
|
|
4
5
|
import * as Command from "effect/unstable/cli/Command";
|
|
6
|
+
import { type CostsOptions } from "@llm4ts/runner/Costs";
|
|
5
7
|
import { type DiscoveredKit } from "@llm4ts/runner/Kits";
|
|
6
8
|
import { type DiscoveredFlow, type FlowTierPaths } from "./FlowCatalog.ts";
|
|
7
9
|
declare const ShellUsageError_base: Schema.Class<ShellUsageError, Schema.TaggedStruct<"ShellUsage", {
|
|
@@ -31,6 +33,14 @@ export declare const renderFlowList: (flows: ReadonlyArray<DiscoveredFlow>, opti
|
|
|
31
33
|
* anything else is looked up by name in the discovery listing.
|
|
32
34
|
*/
|
|
33
35
|
export declare const resolveFlow: (reference: string, tiers: FlowTierPaths) => Effect.Effect<string, ShellUsageError, FileSystem>;
|
|
36
|
+
export interface CostsFlags {
|
|
37
|
+
readonly repo: ReadonlyArray<string>;
|
|
38
|
+
readonly since: Option.Option<string>;
|
|
39
|
+
readonly tz: Option.Option<string>;
|
|
40
|
+
readonly runsPerDay: Option.Option<number>;
|
|
41
|
+
}
|
|
42
|
+
/** Turns the `costs` flags into program options; every rejection is a usage error. */
|
|
43
|
+
export declare const costsOptionsFrom: (flags: CostsFlags, cwd?: string) => Effect.Effect<CostsOptions, ShellUsageError>;
|
|
34
44
|
export declare const shellCommand: Command.Command<"llm4ts", {} | {}, {}, import("./FlowLaunch.ts").FlowLaunchError | import("@llm4ts/flow/FlowError.ts").DecisionsInvalid | ShellUsageError | ShellActionError, import("effect/unstable/cli/Prompt").Environment>;
|
|
35
45
|
export declare const runShellCommand: (argv: ReadonlyArray<string>) => Effect.Effect<void, unknown, Command.Environment>;
|
|
36
46
|
export {};
|
package/dist/Cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAA;AAGtD,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAA8C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACpG,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAA;;;;AAMzB,qBAAa,eAAgB,SAAQ,oBAEnC;CAAG;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;AAEL,eAAO,MAAM,eAAe,QAAO,MAA6D,CAAA;AAEhG,eAAO,MAAM,cAAc,GAAI,UAAU;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;CACpE,KAAG,aAaH,CAAA;AAQD,eAAO,MAAM,aAAa,GACxB,MAAM,aAAa,CAAC,aAAa,CAAC,EAClC,UAAU;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,KACpC,MA+BF,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,OAAO,aAAa,CAAC,cAAc,CAAC,EACpC,UAAU;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,KACpC,MAyBF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,iGAwBtB,CAAA;AAwMF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;CAC3C;AAED,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,UAAU,EACjB,MAAK,MAAsB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CA2B1C,CAAA;AAmDJ,eAAO,MAAM,YAAY,iOAuBxB,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,MAAM,aAAa,CAAC,MAAM,CAAC,KAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CACe,CAAA"}
|
package/dist/Cli.js
CHANGED
|
@@ -2,13 +2,16 @@ import { homedir } from "node:os";
|
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import * as Console from "effect/Console";
|
|
5
|
+
import * as DateTime from "effect/DateTime";
|
|
5
6
|
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as Option from "effect/Option";
|
|
6
8
|
import { FileSystem } from "effect/FileSystem";
|
|
7
9
|
import * as Schema from "effect/Schema";
|
|
8
10
|
import * as Argument from "effect/unstable/cli/Argument";
|
|
9
11
|
import * as Command from "effect/unstable/cli/Command";
|
|
10
12
|
import * as Flag from "effect/unstable/cli/Flag";
|
|
11
13
|
import { makeCliProgram } from "@llm4ts/runner/Cli";
|
|
14
|
+
import { CostsResult, makeCostsProgram, renderCostsResult } from "@llm4ts/runner/Costs";
|
|
12
15
|
import { makeDoctorProgram } from "@llm4ts/runner/Doctor";
|
|
13
16
|
import { builtinKitsDir, discoverKits, kitTierPaths } from "@llm4ts/runner/Kits";
|
|
14
17
|
import { defaultTierPaths, discoverFlows } from "./FlowCatalog.js";
|
|
@@ -221,6 +224,47 @@ const refineCommand = Command.make("refine", {
|
|
|
221
224
|
}).pipe(Effect.catch((error) => Console.error(error.message).pipe(Effect.as(1))))
|
|
222
225
|
});
|
|
223
226
|
})).pipe(Command.withDescription("Interactively mark, deepen, and consolidate an extracted spec pack, then run modernize-refine on it (ADR 0015)"));
|
|
227
|
+
/** Turns the `costs` flags into program options; every rejection is a usage error. */
|
|
228
|
+
export const costsOptionsFrom = (flags, cwd = process.cwd()) => Effect.gen(function* () {
|
|
229
|
+
const repos = flags.repo.length === 0 ? [cwd] : flags.repo.map((repo) => resolve(cwd, repo));
|
|
230
|
+
const since = Option.isNone(flags.since) ? undefined : Date.parse(flags.since.value);
|
|
231
|
+
if (since !== undefined && Number.isNaN(since)) {
|
|
232
|
+
return yield* new ShellUsageError({
|
|
233
|
+
message: `--since needs an ISO date such as 2026-09-01 or 2026-09-01T00:00:00Z, got ${flags.since._tag === "Some" ? flags.since.value : ""}`
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
const timeZone = Option.isNone(flags.tz)
|
|
237
|
+
? undefined
|
|
238
|
+
: Option.getOrUndefined(DateTime.zoneMakeNamed(flags.tz.value));
|
|
239
|
+
if (Option.isSome(flags.tz) && timeZone === undefined) {
|
|
240
|
+
return yield* new ShellUsageError({
|
|
241
|
+
message: `--tz needs an IANA zone such as Europe/Rome or UTC, got ${flags.tz.value}`
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
const runsPerDay = Option.getOrUndefined(flags.runsPerDay);
|
|
245
|
+
if (runsPerDay !== undefined && runsPerDay <= 0) {
|
|
246
|
+
return yield* new ShellUsageError({ message: "--runs-per-day must be positive" });
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
repos,
|
|
250
|
+
...(since === undefined ? {} : { since }),
|
|
251
|
+
...(timeZone === undefined ? {} : { timeZone }),
|
|
252
|
+
...(runsPerDay === undefined ? {} : { runsPerDay })
|
|
253
|
+
};
|
|
254
|
+
});
|
|
255
|
+
const costsCommand = Command.make("costs", {
|
|
256
|
+
repo: Flag.String("repo").pipe(Flag.atLeast(0), Flag.withDescription("Repository whose .llm4ts/ traces to read; repeatable (defaults to the current directory)")),
|
|
257
|
+
since: Flag.String("since").pipe(Flag.optional, Flag.withDescription("Only count token reports at or after this ISO date")),
|
|
258
|
+
tz: Flag.String("tz").pipe(Flag.optional, Flag.withDescription("IANA time zone for the day and hour buckets (default UTC)")),
|
|
259
|
+
runsPerDay: Flag.Int("runs-per-day").pipe(Flag.optional, Flag.withDescription("Assumed daily run count for a projected daily budget")),
|
|
260
|
+
json: Flag.Boolean("json").pipe(Flag.withDefault(false), Flag.withDescription("Emit the report as JSON"))
|
|
261
|
+
}, (config) => Effect.gen(function* () {
|
|
262
|
+
const options = yield* costsOptionsFrom(config);
|
|
263
|
+
const result = yield* makeCostsProgram(options);
|
|
264
|
+
yield* Console.log(config.json
|
|
265
|
+
? Schema.encodeSync(Schema.fromJsonString(CostsResult))(result)
|
|
266
|
+
: renderCostsResult(result));
|
|
267
|
+
})).pipe(Command.withDescription("Token and cost usage across past runs, bucketed per day and hour for budgeting"));
|
|
224
268
|
const doctorCommand = Command.make("doctor", {}, () => Effect.gen(function* () {
|
|
225
269
|
const report = yield* makeDoctorProgram();
|
|
226
270
|
yield* Console.log(report.trimEnd());
|
|
@@ -239,6 +283,7 @@ export const shellCommand = Command.make("llm4ts", {}, () => Effect.gen(function
|
|
|
239
283
|
viewCommand,
|
|
240
284
|
askCommand,
|
|
241
285
|
refineCommand,
|
|
286
|
+
costsCommand,
|
|
242
287
|
doctorCommand
|
|
243
288
|
]));
|
|
244
289
|
export const runShellCommand = (argv) => Command.runWith(shellCommand, { version: packageVersion })(argv);
|
package/dist/Cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"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"}
|
package/flows/lib/pack-fork.js
CHANGED
|
@@ -96,14 +96,22 @@ export const backendPasses = [
|
|
|
96
96
|
}
|
|
97
97
|
];
|
|
98
98
|
export const passesForTargetKind = (kind) => kind === "frontend" ? frontendPasses : backendPasses;
|
|
99
|
-
export const conventionPassAsk = (pass, grounding) => [
|
|
99
|
+
export const conventionPassAsk = (pass, grounding, refinement) => [
|
|
100
100
|
pass.instructions,
|
|
101
101
|
`Respond with a single markdown section starting with "## ${pass.heading}".`,
|
|
102
102
|
"If a topic doesn't apply to this repository, say so explicitly rather than " +
|
|
103
103
|
"inventing one.",
|
|
104
104
|
...(grounding === undefined || grounding.length === 0
|
|
105
105
|
? []
|
|
106
|
-
: [`Repository files for grounding:\n\n${grounding}`])
|
|
106
|
+
: [`Repository files for grounding:\n\n${grounding}`]),
|
|
107
|
+
...(refinement === undefined
|
|
108
|
+
? []
|
|
109
|
+
: [
|
|
110
|
+
"A previous run of this analysis produced the findings below, and a human " +
|
|
111
|
+
"reviewed them. Revise — do not simply repeat what you had before:\n\n" +
|
|
112
|
+
`Previous findings (all categories):\n\n${refinement.priorConventions}\n\n` +
|
|
113
|
+
`Human feedback on that previous run:\n\n${refinement.feedback}`
|
|
114
|
+
])
|
|
107
115
|
].join("\n\n");
|
|
108
116
|
export class ConventionSection extends Schema.Class("ConventionSection")({
|
|
109
117
|
markdown: Schema.String
|
|
@@ -120,9 +128,122 @@ export const conventionSectionJsonSchema = {
|
|
|
120
128
|
},
|
|
121
129
|
required: ["markdown"]
|
|
122
130
|
};
|
|
123
|
-
export
|
|
124
|
-
|
|
125
|
-
|
|
131
|
+
export class GroundingSelection extends Schema.Class("GroundingSelection")({
|
|
132
|
+
selections: Schema.Array(Schema.Struct({
|
|
133
|
+
category: Schema.String,
|
|
134
|
+
path: Schema.String,
|
|
135
|
+
reason: Schema.String
|
|
136
|
+
}))
|
|
137
|
+
}) {
|
|
138
|
+
}
|
|
139
|
+
export const groundingSelectionJsonSchema = {
|
|
140
|
+
type: "object",
|
|
141
|
+
properties: {
|
|
142
|
+
selections: {
|
|
143
|
+
type: "array",
|
|
144
|
+
items: {
|
|
145
|
+
type: "object",
|
|
146
|
+
properties: {
|
|
147
|
+
category: {
|
|
148
|
+
type: "string",
|
|
149
|
+
description: "Must exactly match one of the category headings given."
|
|
150
|
+
},
|
|
151
|
+
path: {
|
|
152
|
+
type: "string",
|
|
153
|
+
description: "Must be copied EXACTLY from the candidate file paths given — never " +
|
|
154
|
+
"invented or guessed."
|
|
155
|
+
},
|
|
156
|
+
reason: {
|
|
157
|
+
type: "string",
|
|
158
|
+
description: "One line explaining why this file is relevant to the category."
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
required: ["category", "path", "reason"]
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
required: ["selections"]
|
|
166
|
+
};
|
|
167
|
+
/** At most this many selected files get read (and fed as grounding) per category. */
|
|
168
|
+
export const maxSelectedFilesPerCategory = 6;
|
|
169
|
+
export const groundingSelectionAsk = (passes, candidatePaths, refinement) => [
|
|
170
|
+
"A coding agent needs to analyze this repository's real conventions across the " +
|
|
171
|
+
"categories below. From the list of real file paths given, select the files " +
|
|
172
|
+
"most likely to reveal each category's conventions — representative source " +
|
|
173
|
+
"and configuration files, not every file of a kind.",
|
|
174
|
+
...passes.map((pass) => `## ${pass.heading}\n\n${pass.instructions}`),
|
|
175
|
+
`Select at most ${maxSelectedFilesPerCategory} files per category — quality over ` +
|
|
176
|
+
"quantity. Every path you return must be copied EXACTLY from the candidate " +
|
|
177
|
+
"list below; never invent or guess a path. A category with nothing relevant " +
|
|
178
|
+
"in this repository can have zero selections — say so via an empty selection " +
|
|
179
|
+
"list for it rather than forcing an irrelevant file in.",
|
|
180
|
+
`Candidate file paths (${candidatePaths.length}):\n\n${candidatePaths.join("\n")}`,
|
|
181
|
+
...(refinement === undefined
|
|
182
|
+
? []
|
|
183
|
+
: [
|
|
184
|
+
"A previous run selected files and produced the findings below; a human " +
|
|
185
|
+
"reviewed them and gave feedback. Reconsider the selection in light of " +
|
|
186
|
+
"it — the feedback may point at files that were missed entirely:\n\n" +
|
|
187
|
+
`Previous findings (all categories):\n\n${refinement.priorConventions}\n\n` +
|
|
188
|
+
`Human feedback on that previous run:\n\n${refinement.feedback}`
|
|
189
|
+
])
|
|
190
|
+
].join("\n\n");
|
|
191
|
+
/**
|
|
192
|
+
* Drops any selection whose path wasn't in the real candidate list (never trust
|
|
193
|
+
* an LLM-fabricated path into a file read) and caps each category at
|
|
194
|
+
* `maxSelectedFilesPerCategory`, keeping the model's own priority order.
|
|
195
|
+
*/
|
|
196
|
+
export const validSelections = (selection, candidatePaths) => {
|
|
197
|
+
const candidates = new Set(candidatePaths);
|
|
198
|
+
const perCategoryCount = new Map();
|
|
199
|
+
const kept = [];
|
|
200
|
+
for (const item of selection.selections) {
|
|
201
|
+
if (!candidates.has(item.path)) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const count = perCategoryCount.get(item.category) ?? 0;
|
|
205
|
+
if (count >= maxSelectedFilesPerCategory) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
perCategoryCount.set(item.category, count + 1);
|
|
209
|
+
kept.push(item);
|
|
210
|
+
}
|
|
211
|
+
return kept;
|
|
212
|
+
};
|
|
213
|
+
export const selectionsForCategory = (selections, category) => selections
|
|
214
|
+
.filter((selection) => selection.category === category)
|
|
215
|
+
.map((selection) => selection.path);
|
|
216
|
+
export const provenanceMarkdown = (kind, selections, feedback) => {
|
|
217
|
+
const lines = [
|
|
218
|
+
"# Provenance",
|
|
219
|
+
"",
|
|
220
|
+
"Which real files this pack's conventions.md was grounded on, and why — trace a " +
|
|
221
|
+
"rule back to the file that justified it.",
|
|
222
|
+
""
|
|
223
|
+
];
|
|
224
|
+
if (feedback !== undefined && feedback.length > 0) {
|
|
225
|
+
lines.push("## Feedback applied this run", "", feedback, "");
|
|
226
|
+
}
|
|
227
|
+
for (const pass of passesForTargetKind(kind)) {
|
|
228
|
+
lines.push(`## ${pass.heading}`, "");
|
|
229
|
+
const forCategory = selections.filter((selection) => selection.category === pass.heading);
|
|
230
|
+
if (forCategory.length === 0) {
|
|
231
|
+
lines.push("No files selected for grounding — this category's findings rely on the " +
|
|
232
|
+
"model's general knowledge only, not a specific file in this repository.", "");
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
for (const selection of forCategory) {
|
|
236
|
+
lines.push(`- \`${selection.path}\` — ${selection.reason}`);
|
|
237
|
+
}
|
|
238
|
+
lines.push("");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return lines.join("\n");
|
|
242
|
+
};
|
|
243
|
+
export const parseFeedback = (environment) => {
|
|
244
|
+
const raw = environment.LLM4TS_FEEDBACK?.trim();
|
|
245
|
+
return raw === undefined || raw.length === 0 ? undefined : raw;
|
|
246
|
+
};
|
|
126
247
|
export const readGroundingFiles = (workspace, paths) => Effect.gen(function* () {
|
|
127
248
|
const sections = [];
|
|
128
249
|
for (const path of paths) {
|
|
@@ -27,6 +27,7 @@ import { capped, renderTruncation, truncations, withShrink } from "@llm4ts/flow/
|
|
|
27
27
|
import { FlowEvents } from "@llm4ts/flow/FlowEvents";
|
|
28
28
|
import { judgeAllPrograms } from "@llm4ts/flow/ProgramJudge";
|
|
29
29
|
import { Provenance, makeProvenanceStore } from "@llm4ts/flow/Provenance";
|
|
30
|
+
import { ApprovedMarker, DraftApprovalMarker, requireApproval } from "@llm4ts/flow/Approval";
|
|
30
31
|
import { loadPatternCards, taggedPatternIds } from "@llm4ts/flow/Patterns";
|
|
31
32
|
import { ReviewIssue } from "@llm4ts/flow/Review";
|
|
32
33
|
import { checkWall, wallBreachMessage } from "@llm4ts/flow/Wall";
|
|
@@ -160,6 +161,20 @@ const program = Effect.gen(function* () {
|
|
|
160
161
|
flowDir: import.meta.dirname
|
|
161
162
|
}));
|
|
162
163
|
const pack = opened.pack;
|
|
164
|
+
// A pack whose own README.md carries the draft/approved marker (a
|
|
165
|
+
// fork from pack-fork, today — see docs/adr/0018-pack-fork.md) must
|
|
166
|
+
// be approved before this flow touches anything. A plain pack with
|
|
167
|
+
// no README.md, or one that never opted into the marker convention,
|
|
168
|
+
// is unaffected.
|
|
169
|
+
yield* stage(context.events, "approval", Effect.gen(function* () {
|
|
170
|
+
const readmeAbs = join(opened.workspace.root, opened.dir, "README.md");
|
|
171
|
+
const readmeContent = yield* files.read(readmeAbs);
|
|
172
|
+
if (readmeContent !== undefined &&
|
|
173
|
+
(readmeContent.includes(DraftApprovalMarker) ||
|
|
174
|
+
readmeContent.includes(ApprovedMarker))) {
|
|
175
|
+
yield* requireApproval(files, readmeAbs);
|
|
176
|
+
}
|
|
177
|
+
}));
|
|
163
178
|
yield* stage(context.events, "wall", Effect.gen(function* () {
|
|
164
179
|
if (pack.sources === undefined) {
|
|
165
180
|
return yield* context.events.publish(Info.make({ message: "pack has no sources regex — wall check skipped" }));
|
package/flows/modernize-seed.js
CHANGED
|
@@ -100,7 +100,9 @@ const program = Effect.gen(function* () {
|
|
|
100
100
|
? Decisions.empty()
|
|
101
101
|
: yield* parseDecisions(decisionsText, `${ModDir}/decisions.md`);
|
|
102
102
|
yield* stage(context.events, "scaffold", Effect.gen(function* () {
|
|
103
|
-
|
|
103
|
+
// Git housekeeping and the runner's own state (`.llm4ts/` holds the
|
|
104
|
+
// trace and cost ledger of this very run) are not project content.
|
|
105
|
+
const existing = (yield* target.discover().pipe(Effect.orElseSucceed(() => []))).filter((path) => !path.startsWith(".git/") && !path.startsWith(".llm4ts/") && path !== ".gitignore");
|
|
104
106
|
if (existing.length > 0) {
|
|
105
107
|
yield* context.events.publish(Info.make({ message: "target repo is not empty — using it as-is" }));
|
|
106
108
|
return;
|
package/flows/pack-fork.js
CHANGED
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
// LLM4TS_PACK=<source pack> resolved as for any flow (default cobol-springboot)
|
|
11
11
|
// LLM4TS_TARGET_KIND=frontend|backend
|
|
12
12
|
// LLM4TS_FORK_AS=<new pack name> lowercase kebab-case
|
|
13
|
+
// Optional:
|
|
14
|
+
// LLM4TS_FEEDBACK=<free text> revise an existing fork under the same
|
|
15
|
+
// LLM4TS_FORK_AS instead of starting over —
|
|
16
|
+
// the prior conventions.md and this feedback
|
|
17
|
+
// both feed every pass, including file
|
|
18
|
+
// selection, which can change too.
|
|
13
19
|
//
|
|
14
20
|
// The forked pack lands at
|
|
15
21
|
// `<repo>/.llm4ts/kits/forked/packs/<LLM4TS_FORK_AS>/` — a dedicated
|
|
@@ -18,8 +24,9 @@
|
|
|
18
24
|
// would hide its other packs from this project). `scaffold:` is dropped:
|
|
19
25
|
// the whole point is that the target repository already exists.
|
|
20
26
|
//
|
|
21
|
-
//
|
|
22
|
-
// the same LLM4TS_FORK_AS name
|
|
27
|
+
// Not resumable: re-running clears and overwrites the previous fork under
|
|
28
|
+
// the same LLM4TS_FORK_AS name (LLM4TS_FEEDBACK revises the CONTENT of that
|
|
29
|
+
// overwrite, not the one-shot-per-run mechanics).
|
|
23
30
|
import { basename, join, relative as relativePath, resolve as resolvePath } from "node:path";
|
|
24
31
|
import { rmSync } from "node:fs";
|
|
25
32
|
import * as Effect from "effect/Effect";
|
|
@@ -29,7 +36,7 @@ import { capped, withShrink } from "@llm4ts/flow/Context";
|
|
|
29
36
|
import { withDraftApproval } from "@llm4ts/flow/Approval";
|
|
30
37
|
import { legacySourceWorkspaceLimits, workspaceLimitsFromEnv } from "@llm4ts/flow/Workspace";
|
|
31
38
|
import { asReadOnly, asToolless, coderFromEnv, makeNodeWorkspace, nodePlainFileStore, openPack, resolveFlowInput, runFlowMain, runNode, ScriptUsage, stage } from "@llm4ts/runner";
|
|
32
|
-
import { ConventionSection, conventionPassAsk, conventionSectionJsonSchema, forkPackMarkdown, forkedReadme, parseForkAs, parseTargetKind, passesForTargetKind, readGroundingFiles, targetConventionsReviewer,
|
|
39
|
+
import { ConventionSection, conventionPassAsk, conventionSectionJsonSchema, forkPackMarkdown, forkedReadme, GroundingSelection, groundingSelectionAsk, groundingSelectionJsonSchema, parseFeedback, parseForkAs, parseTargetKind, passesForTargetKind, provenanceMarkdown, readGroundingFiles, selectionsForCategory, targetConventionsReviewer, validSelections } from "./lib/pack-fork.js";
|
|
33
40
|
const forkPackFiles = Effect.fn("flows/pack-fork.forkPackFiles")(function* (source, destinationAbs, files) {
|
|
34
41
|
// `source.dir` is "." for an absolute-path pack reference (Packs.ts's
|
|
35
42
|
// `locatePack`), "packs/<name>" for a relative-directory or kit pack
|
|
@@ -73,6 +80,7 @@ const program = Effect.gen(function* () {
|
|
|
73
80
|
const input = yield* resolveFlowInput("Analyze the target repository and fork the pack with its conventions.");
|
|
74
81
|
const targetKind = yield* parseTargetKind(process.env);
|
|
75
82
|
const forkAs = yield* parseForkAs(process.env);
|
|
83
|
+
const feedback = parseFeedback(process.env);
|
|
76
84
|
const coder = asReadOnly(coderFromEnv(process.env));
|
|
77
85
|
const files = nodePlainFileStore;
|
|
78
86
|
yield* runNode({
|
|
@@ -114,42 +122,64 @@ const program = Effect.gen(function* () {
|
|
|
114
122
|
"pack, or choose a different LLM4TS_FORK_AS."
|
|
115
123
|
});
|
|
116
124
|
}
|
|
117
|
-
|
|
125
|
+
// Captured BEFORE "clean" (below) can remove it — a --feedback re-run
|
|
126
|
+
// revises what a previous run found rather than starting from zero.
|
|
127
|
+
const priorConventions = feedback === undefined
|
|
128
|
+
? undefined
|
|
129
|
+
: yield* repo
|
|
130
|
+
.read(join(destinationRel, "conventions.md"))
|
|
131
|
+
.pipe(Effect.catch(() => Effect.succeed(undefined)));
|
|
132
|
+
const refinement = priorConventions === undefined || feedback === undefined
|
|
133
|
+
? undefined
|
|
134
|
+
: { priorConventions, feedback };
|
|
135
|
+
const candidatePaths = yield* stage(context.events, "discover", repo.discover("**"));
|
|
118
136
|
const passes = passesForTargetKind(targetKind);
|
|
137
|
+
const selectionAsk = groundingSelectionAsk(passes, candidatePaths, refinement);
|
|
138
|
+
const selectionResult = yield* stage(context.events, "select grounding", withShrink("select grounding", (cap) => Effect.gen(function* () {
|
|
139
|
+
const prompt = yield* capped("select grounding", selectionAsk, cap);
|
|
140
|
+
return yield* structuredAndPublish(context.reasoning, context.events, prompt, GroundingSelection, groundingSelectionJsonSchema);
|
|
141
|
+
})).pipe(Effect.provideService(FlowEvents, context.events)));
|
|
142
|
+
const selections = validSelections(selectionResult, candidatePaths);
|
|
143
|
+
yield* context.events.publish(Info.make({ message: provenanceMarkdown(targetKind, selections, feedback) }));
|
|
119
144
|
const sections = [];
|
|
120
|
-
for (const
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
// ahead of a structuredAndPublish call.
|
|
145
|
+
for (const pass of passes) {
|
|
146
|
+
const groundingPaths = selectionsForCategory(selections, pass.heading);
|
|
147
|
+
const grounding = yield* readGroundingFiles(repo, groundingPaths);
|
|
148
|
+
const askText = conventionPassAsk(pass, grounding, refinement);
|
|
149
|
+
// `capped` bounds every attempt's prompt size (guarding against a
|
|
150
|
+
// truncated, unparseable structured response); `withShrink` retries
|
|
151
|
+
// at a smaller budget on an actual provider overflow — the same
|
|
152
|
+
// pairing every other modernize-* flow already uses ahead of a
|
|
153
|
+
// structuredAndPublish call.
|
|
130
154
|
const result = yield* stage(context.events, pass.heading, withShrink(pass.heading, (cap) => Effect.gen(function* () {
|
|
131
155
|
const prompt = yield* capped(pass.heading, askText, cap);
|
|
132
156
|
return yield* structuredAndPublish(context.reasoning, context.events, prompt, ConventionSection, conventionSectionJsonSchema);
|
|
133
157
|
})).pipe(Effect.provideService(FlowEvents, context.events)));
|
|
158
|
+
yield* context.events.publish(Info.make({ message: result.markdown }));
|
|
134
159
|
sections.push(result.markdown);
|
|
135
160
|
}
|
|
136
161
|
const conventionsMd = sections.join("\n\n");
|
|
162
|
+
const provenanceMd = provenanceMarkdown(targetKind, selections, feedback);
|
|
137
163
|
yield* stage(context.events, "clean", Effect.sync(() => rmSync(destinationAbs, { recursive: true, force: true })));
|
|
138
164
|
yield* stage(context.events, "fork", forkPackFiles(opened, destinationAbs, files));
|
|
139
165
|
yield* stage(context.events, "fork patterns", forkKitPatterns(opened, destinationAbs, files));
|
|
140
166
|
const sourcePackMd = yield* opened.workspace.read(`${opened.dir}/pack.md`);
|
|
141
167
|
yield* files.writeAtomic(join(destinationAbs, "pack.md"), forkPackMarkdown(sourcePackMd, forkAs));
|
|
142
168
|
yield* files.writeAtomic(join(destinationAbs, "conventions.md"), conventionsMd);
|
|
169
|
+
yield* files.writeAtomic(join(destinationAbs, "provenance.md"), provenanceMd);
|
|
143
170
|
yield* files.writeAtomic(join(destinationAbs, "reviewers", "target-conventions.md"), targetConventionsReviewer);
|
|
144
171
|
yield* files.writeAtomic(join(destinationAbs, "README.md"), withDraftApproval(forkedReadme(opened.pack.name, forkAs, targetKind, basename(input.workDir))));
|
|
145
172
|
yield* stage(context.events, "commit", context.git
|
|
146
173
|
.commitPaths(`pack-fork: fork '${opened.pack.name}' as '${forkAs}'`, [destinationRel])
|
|
147
174
|
.pipe(Effect.asVoid));
|
|
148
175
|
yield* context.events.publish(Info.make({
|
|
149
|
-
message: `forked pack ready — review ${destinationRel}/README.md
|
|
150
|
-
`${destinationRel}/conventions.md,
|
|
176
|
+
message: `forked pack ready — review ${destinationRel}/README.md, ` +
|
|
177
|
+
`${destinationRel}/conventions.md, and ${destinationRel}/provenance.md ` +
|
|
178
|
+
"(which file justified which rule), set '- [x] Approved', then from " +
|
|
151
179
|
`inside ${input.workDir} run modernize-implement with ` +
|
|
152
|
-
`LLM4TS_PACK=forked/${forkAs}`
|
|
180
|
+
`LLM4TS_PACK=forked/${forkAs}. Not satisfied? Re-run this same command ` +
|
|
181
|
+
"with LLM4TS_FEEDBACK=<what to fix> to revise this fork instead of " +
|
|
182
|
+
"starting over."
|
|
153
183
|
}));
|
|
154
184
|
}));
|
|
155
185
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llm4ts/shell",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.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",
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@effect/platform-node": "4.0.0-rc.115",
|
|
54
54
|
"@effect/platform-node-shared": "4.0.0-rc.115",
|
|
55
|
-
"@llm4ts/core": "2.
|
|
56
|
-
"@llm4ts/
|
|
57
|
-
"@llm4ts/
|
|
55
|
+
"@llm4ts/core": "2.6.0",
|
|
56
|
+
"@llm4ts/runner": "2.6.0",
|
|
57
|
+
"@llm4ts/flow": "2.6.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"effect": "4.0.0-rc.115"
|
package/src/Cli.ts
CHANGED
|
@@ -2,13 +2,21 @@ import { homedir } from "node:os"
|
|
|
2
2
|
import { join, resolve } from "node:path"
|
|
3
3
|
import { fileURLToPath } from "node:url"
|
|
4
4
|
import * as Console from "effect/Console"
|
|
5
|
+
import * as DateTime from "effect/DateTime"
|
|
5
6
|
import * as Effect from "effect/Effect"
|
|
7
|
+
import * as Option from "effect/Option"
|
|
6
8
|
import { FileSystem } from "effect/FileSystem"
|
|
7
9
|
import * as Schema from "effect/Schema"
|
|
8
10
|
import * as Argument from "effect/unstable/cli/Argument"
|
|
9
11
|
import * as Command from "effect/unstable/cli/Command"
|
|
10
12
|
import * as Flag from "effect/unstable/cli/Flag"
|
|
11
13
|
import { makeCliProgram } from "@llm4ts/runner/Cli"
|
|
14
|
+
import {
|
|
15
|
+
CostsResult,
|
|
16
|
+
makeCostsProgram,
|
|
17
|
+
renderCostsResult,
|
|
18
|
+
type CostsOptions
|
|
19
|
+
} from "@llm4ts/runner/Costs"
|
|
12
20
|
import { makeDoctorProgram } from "@llm4ts/runner/Doctor"
|
|
13
21
|
import { builtinKitsDir, discoverKits, kitTierPaths, type DiscoveredKit } from "@llm4ts/runner/Kits"
|
|
14
22
|
import {
|
|
@@ -351,6 +359,88 @@ const refineCommand = Command.make(
|
|
|
351
359
|
)
|
|
352
360
|
)
|
|
353
361
|
|
|
362
|
+
export interface CostsFlags {
|
|
363
|
+
readonly repo: ReadonlyArray<string>
|
|
364
|
+
readonly since: Option.Option<string>
|
|
365
|
+
readonly tz: Option.Option<string>
|
|
366
|
+
readonly runsPerDay: Option.Option<number>
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** Turns the `costs` flags into program options; every rejection is a usage error. */
|
|
370
|
+
export const costsOptionsFrom = (
|
|
371
|
+
flags: CostsFlags,
|
|
372
|
+
cwd: string = process.cwd()
|
|
373
|
+
): Effect.Effect<CostsOptions, ShellUsageError> =>
|
|
374
|
+
Effect.gen(function* () {
|
|
375
|
+
const repos = flags.repo.length === 0 ? [cwd] : flags.repo.map((repo) => resolve(cwd, repo))
|
|
376
|
+
const since = Option.isNone(flags.since) ? undefined : Date.parse(flags.since.value)
|
|
377
|
+
if (since !== undefined && Number.isNaN(since)) {
|
|
378
|
+
return yield* new ShellUsageError({
|
|
379
|
+
message: `--since needs an ISO date such as 2026-09-01 or 2026-09-01T00:00:00Z, got ${flags.since._tag === "Some" ? flags.since.value : ""}`
|
|
380
|
+
})
|
|
381
|
+
}
|
|
382
|
+
const timeZone = Option.isNone(flags.tz)
|
|
383
|
+
? undefined
|
|
384
|
+
: Option.getOrUndefined(DateTime.zoneMakeNamed(flags.tz.value))
|
|
385
|
+
if (Option.isSome(flags.tz) && timeZone === undefined) {
|
|
386
|
+
return yield* new ShellUsageError({
|
|
387
|
+
message: `--tz needs an IANA zone such as Europe/Rome or UTC, got ${flags.tz.value}`
|
|
388
|
+
})
|
|
389
|
+
}
|
|
390
|
+
const runsPerDay = Option.getOrUndefined(flags.runsPerDay)
|
|
391
|
+
if (runsPerDay !== undefined && runsPerDay <= 0) {
|
|
392
|
+
return yield* new ShellUsageError({ message: "--runs-per-day must be positive" })
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
repos,
|
|
396
|
+
...(since === undefined ? {} : { since }),
|
|
397
|
+
...(timeZone === undefined ? {} : { timeZone }),
|
|
398
|
+
...(runsPerDay === undefined ? {} : { runsPerDay })
|
|
399
|
+
}
|
|
400
|
+
})
|
|
401
|
+
|
|
402
|
+
const costsCommand = Command.make(
|
|
403
|
+
"costs",
|
|
404
|
+
{
|
|
405
|
+
repo: Flag.String("repo").pipe(
|
|
406
|
+
Flag.atLeast(0),
|
|
407
|
+
Flag.withDescription(
|
|
408
|
+
"Repository whose .llm4ts/ traces to read; repeatable (defaults to the current directory)"
|
|
409
|
+
)
|
|
410
|
+
),
|
|
411
|
+
since: Flag.String("since").pipe(
|
|
412
|
+
Flag.optional,
|
|
413
|
+
Flag.withDescription("Only count token reports at or after this ISO date")
|
|
414
|
+
),
|
|
415
|
+
tz: Flag.String("tz").pipe(
|
|
416
|
+
Flag.optional,
|
|
417
|
+
Flag.withDescription("IANA time zone for the day and hour buckets (default UTC)")
|
|
418
|
+
),
|
|
419
|
+
runsPerDay: Flag.Int("runs-per-day").pipe(
|
|
420
|
+
Flag.optional,
|
|
421
|
+
Flag.withDescription("Assumed daily run count for a projected daily budget")
|
|
422
|
+
),
|
|
423
|
+
json: Flag.Boolean("json").pipe(
|
|
424
|
+
Flag.withDefault(false),
|
|
425
|
+
Flag.withDescription("Emit the report as JSON")
|
|
426
|
+
)
|
|
427
|
+
},
|
|
428
|
+
(config) =>
|
|
429
|
+
Effect.gen(function* () {
|
|
430
|
+
const options = yield* costsOptionsFrom(config)
|
|
431
|
+
const result = yield* makeCostsProgram(options)
|
|
432
|
+
yield* Console.log(
|
|
433
|
+
config.json
|
|
434
|
+
? Schema.encodeSync(Schema.fromJsonString(CostsResult))(result)
|
|
435
|
+
: renderCostsResult(result)
|
|
436
|
+
)
|
|
437
|
+
})
|
|
438
|
+
).pipe(
|
|
439
|
+
Command.withDescription(
|
|
440
|
+
"Token and cost usage across past runs, bucketed per day and hour for budgeting"
|
|
441
|
+
)
|
|
442
|
+
)
|
|
443
|
+
|
|
354
444
|
const doctorCommand = Command.make("doctor", {}, () =>
|
|
355
445
|
Effect.gen(function* () {
|
|
356
446
|
const report = yield* makeDoctorProgram()
|
|
@@ -378,6 +468,7 @@ export const shellCommand = Command.make("llm4ts", {}, () =>
|
|
|
378
468
|
viewCommand,
|
|
379
469
|
askCommand,
|
|
380
470
|
refineCommand,
|
|
471
|
+
costsCommand,
|
|
381
472
|
doctorCommand
|
|
382
473
|
])
|
|
383
474
|
)
|