@llm4ts/shell 2.33.0 → 2.35.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 +12 -0
- package/dist/Cli.d.ts.map +1 -1
- package/dist/Cli.js +17 -25
- package/dist/Cli.js.map +1 -1
- package/flows/lib/port.js +23 -2
- package/flows/port-files.js +10 -3
- package/flows/port-guide.js +245 -0
- package/flows/port-ledger.js +180 -0
- package/flows/port-tests.js +177 -0
- package/kits/port/README.md +11 -6
- package/kits/port/packs/scala-ts/pack.md +36 -0
- package/kits/port/packs/scala-ts/patterns/pitfalls-scala-ts.md +21 -0
- package/kits/port/packs/scala-ts/prompts/porting.md +64 -0
- package/kits/port/packs/scala-ts/reviewers/effect-fidelity.md +13 -0
- package/kits/port/packs/zig-rust/pack.md +17 -0
- package/package.json +4 -4
- package/src/Cli.ts +37 -24
package/dist/Cli.d.ts
CHANGED
|
@@ -35,6 +35,18 @@ export declare const renderFlowList: (flows: ReadonlyArray<DiscoveredFlow>, opti
|
|
|
35
35
|
* anything else is looked up by name in the discovery listing.
|
|
36
36
|
*/
|
|
37
37
|
export declare const resolveFlow: (reference: string, tiers: FlowTierPaths) => Effect.Effect<string, ShellUsageError, FileSystem>;
|
|
38
|
+
export interface RunFlags {
|
|
39
|
+
readonly verbose: boolean;
|
|
40
|
+
readonly roster: Option.Option<string>;
|
|
41
|
+
readonly executors: Option.Option<string>;
|
|
42
|
+
readonly pack: Option.Option<string>;
|
|
43
|
+
readonly ui: "classic" | "tree";
|
|
44
|
+
readonly transcript: boolean;
|
|
45
|
+
readonly otel: boolean;
|
|
46
|
+
readonly otelContent: Option.Option<"off" | "on" | "full">;
|
|
47
|
+
}
|
|
48
|
+
/** The flow child's environment: `base` with what the `run` flags forward on top. */
|
|
49
|
+
export declare const runEnvironmentFrom: (flags: RunFlags, flowPath: string, base: Readonly<Record<string, string | undefined>>) => Record<string, string | undefined>;
|
|
38
50
|
export interface CostsFlags {
|
|
39
51
|
readonly repo: ReadonlyArray<string>;
|
|
40
52
|
readonly since: Option.Option<string>;
|
package/dist/Cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;AACvC,OAAO,EAAY,OAAO,EAAQ,MAAM,YAAY,CAAA;AAEpD,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAA;AAS7B,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGhF,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;
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"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"}
|
package/dist/Cli.js
CHANGED
|
@@ -125,6 +125,20 @@ export const resolveFlow = Effect.fn("@llm4ts/shell/Cli.resolveFlow")(function*
|
|
|
125
125
|
}
|
|
126
126
|
return found.path;
|
|
127
127
|
});
|
|
128
|
+
/** The flow child's environment: `base` with what the `run` flags forward on top. */
|
|
129
|
+
export const runEnvironmentFrom = (flags, flowPath, base) => ({
|
|
130
|
+
...base,
|
|
131
|
+
...(flags.verbose ? { LLM4TS_VERBOSITY: "verbose" } : {}),
|
|
132
|
+
...(Option.isSome(flags.roster) ? { LLM4TS_ROSTER: flags.roster.value } : {}),
|
|
133
|
+
...(Option.isSome(flags.executors) ? { LLM4TS_EXECUTORS: flags.executors.value } : {}),
|
|
134
|
+
...(Option.isSome(flags.pack) ? { LLM4TS_PACK: flags.pack.value } : {}),
|
|
135
|
+
...(flags.ui === "tree" ? { LLM4TS_UI: "tree" } : {}),
|
|
136
|
+
...(flags.transcript ? { LLM4TS_TRANSCRIPT: "on" } : {}),
|
|
137
|
+
...(flags.otel ? { LLM4TS_OTEL: "on" } : {}),
|
|
138
|
+
...(Option.isSome(flags.otelContent) ? { LLM4TS_OTEL_CONTENT: flags.otelContent.value } : {}),
|
|
139
|
+
// The flow's name, for its spans (ADR 0026).
|
|
140
|
+
LLM4TS_FLOW: basename(flowPath, extname(flowPath))
|
|
141
|
+
});
|
|
128
142
|
const runCommand = Command.make("run", {
|
|
129
143
|
flow: Argument.String("flow").pipe(Argument.withDescription("Flow name from `llm4ts list`, or a path to a flow script")),
|
|
130
144
|
task: Argument.String("task").pipe(Argument.variadic(), Argument.withDescription("Task text passed to the flow")),
|
|
@@ -135,34 +149,12 @@ const runCommand = Command.make("run", {
|
|
|
135
149
|
executors: Flag.String("executors").pipe(Flag.optional, Flag.withDescription("Only these roster executors (comma-separated ids), forwarded as LLM4TS_EXECUTORS")),
|
|
136
150
|
transcript: Flag.Boolean("transcript").pipe(Flag.withDefault(false), Flag.withDescription("Record what each seat is told and answers under .llm4ts/transcripts/ (owner-only, secrets redacted), for llm4ts watch --tail; forwarded as LLM4TS_TRANSCRIPT. epic-stories records them by default; LLM4TS_TRANSCRIPT=off turns that off")),
|
|
137
151
|
ui: Flag.Literals("ui", ["classic", "tree"]).pipe(Flag.withDefault("classic"), Flag.withDescription("`tree` draws the agent tree full-screen (ADR 0022; `q` returns to the classic view), forwarded as LLM4TS_UI")),
|
|
138
|
-
otel: Flag.Boolean("otel").pipe(Flag.withDefault(false), Flag.withDescription("Export spans to a local Arize Phoenix (http://localhost:6006) unless OTEL_EXPORTER_OTLP_ENDPOINT points elsewhere; forwarded as LLM4TS_OTEL (ADR 0026)"))
|
|
152
|
+
otel: Flag.Boolean("otel").pipe(Flag.withDefault(false), Flag.withDescription("Export spans to a local Arize Phoenix (http://localhost:6006) unless OTEL_EXPORTER_OTLP_ENDPOINT points elsewhere; forwarded as LLM4TS_OTEL (ADR 0026)")),
|
|
153
|
+
otelContent: Flag.Literals("otel-content", ["off", "on", "full"]).pipe(Flag.optional, Flag.withDescription("What exported spans carry besides usage: `on` adds prompts, replies and tool I/O (redacted, capped), `full` the system prompt too; forwarded as LLM4TS_OTEL_CONTENT (off by default, ADR 0026)"))
|
|
139
154
|
}, (config) => Effect.gen(function* () {
|
|
140
155
|
const tiers = shellTierPaths();
|
|
141
156
|
const flowPath = yield* resolveFlow(config.flow, tiers);
|
|
142
|
-
const environment =
|
|
143
|
-
if (config.verbose) {
|
|
144
|
-
environment.LLM4TS_VERBOSITY = "verbose";
|
|
145
|
-
}
|
|
146
|
-
if (config.roster._tag === "Some") {
|
|
147
|
-
environment.LLM4TS_ROSTER = config.roster.value;
|
|
148
|
-
}
|
|
149
|
-
if (config.executors._tag === "Some") {
|
|
150
|
-
environment.LLM4TS_EXECUTORS = config.executors.value;
|
|
151
|
-
}
|
|
152
|
-
if (config.pack._tag === "Some") {
|
|
153
|
-
environment.LLM4TS_PACK = config.pack.value;
|
|
154
|
-
}
|
|
155
|
-
if (config.ui === "tree") {
|
|
156
|
-
environment.LLM4TS_UI = "tree";
|
|
157
|
-
}
|
|
158
|
-
if (config.transcript) {
|
|
159
|
-
environment.LLM4TS_TRANSCRIPT = "on";
|
|
160
|
-
}
|
|
161
|
-
if (config.otel) {
|
|
162
|
-
environment.LLM4TS_OTEL = "on";
|
|
163
|
-
}
|
|
164
|
-
// The flow's name, for its spans (ADR 0026).
|
|
165
|
-
environment.LLM4TS_FLOW = basename(flowPath, extname(flowPath));
|
|
157
|
+
const environment = runEnvironmentFrom(config, flowPath, process.env);
|
|
166
158
|
const exitCode = yield* launchFlow({
|
|
167
159
|
flowPath,
|
|
168
160
|
taskArgs: [
|
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/port.js
CHANGED
|
@@ -8,7 +8,7 @@ import { autonomyContract } from "@llm4ts/flow/AutonomyContract";
|
|
|
8
8
|
import { cap } from "@llm4ts/flow/Context";
|
|
9
9
|
import { FlowAborted } from "@llm4ts/flow/FlowError";
|
|
10
10
|
import { loadPatternCards } from "@llm4ts/flow/Patterns";
|
|
11
|
-
import { PortEntry, linesOf, portStatusInstruction, targetPathOf } from "@llm4ts/flow/Port";
|
|
11
|
+
import { PortEntry, linesOf, parseLedger, portStatusInstruction, targetPathOf } from "@llm4ts/flow/Port";
|
|
12
12
|
import { matchingFiles } from "@llm4ts/flow/SpecChecks";
|
|
13
13
|
/** Where the port flows keep their state, under the target repository. */
|
|
14
14
|
export const portStateDir = (workDir) => join(workDir, ".llm4ts", "port");
|
|
@@ -73,9 +73,16 @@ export const implementerSystem = (porting) => [
|
|
|
73
73
|
"",
|
|
74
74
|
implementerDenials
|
|
75
75
|
].join("\n");
|
|
76
|
-
export const implementerPrompt = (entry, sourceText, porting, sourceChars) => [
|
|
76
|
+
export const implementerPrompt = (entry, sourceText, porting, sourceChars, ledgerRows) => [
|
|
77
77
|
`Port \`${entry.source}\` (${entry.loc} lines). Write the ported file at: ${entry.target}`,
|
|
78
78
|
"The draft need not compile; it must capture the logic faithfully.",
|
|
79
|
+
...(ledgerRows === undefined
|
|
80
|
+
? []
|
|
81
|
+
: [
|
|
82
|
+
"",
|
|
83
|
+
"Precomputed classifications for this file (cross-file analysis; trust them over local guessing):",
|
|
84
|
+
ledgerRows
|
|
85
|
+
]),
|
|
79
86
|
"",
|
|
80
87
|
portStatusInstruction(porting.comment),
|
|
81
88
|
"",
|
|
@@ -111,6 +118,20 @@ export const compileFixerSystem = (porting) => [
|
|
|
111
118
|
"# Porting rulebook",
|
|
112
119
|
porting.rulebook
|
|
113
120
|
].join("\n");
|
|
121
|
+
/** The ledger the pack's `port-ledger` writes, beside the specs; `undefined` when none. */
|
|
122
|
+
export const ledgerPath = (porting) => `${porting.pack.specsDir}/ledger.tsv`;
|
|
123
|
+
export const readLedgerRows = (files, workDir, porting) => Effect.map(files.read(join(workDir, ledgerPath(porting))), (text) => text === undefined ? [] : parseLedger(text));
|
|
124
|
+
/** A native engineer's brief for the trial port: no rulebook, idiomatic target code. */
|
|
125
|
+
export const nativeImplementerSystem = (porting) => [
|
|
126
|
+
autonomyContract("minimal"),
|
|
127
|
+
"",
|
|
128
|
+
`You are a senior engineer in the target language of pack ${porting.pack.name}. Port the`,
|
|
129
|
+
"source file the way you would write it natively and idiomatically, with no rulebook: your",
|
|
130
|
+
"draft is compared with a rules-following draft to find what the rulebook forgot. Read",
|
|
131
|
+
"exactly one source file; do not run a build or any git command; write only the target file.",
|
|
132
|
+
"",
|
|
133
|
+
implementerDenials
|
|
134
|
+
].join("\n");
|
|
114
135
|
export const portEnv = (environment) => {
|
|
115
136
|
const int = (raw, fallback, min = 1) => {
|
|
116
137
|
const value = Number.parseInt(raw ?? "", 10);
|
package/flows/port-files.js
CHANGED
|
@@ -17,11 +17,11 @@ import * as Effect from "effect/Effect";
|
|
|
17
17
|
import { ApprovedMarker, requireApproval } from "@llm4ts/flow/Approval";
|
|
18
18
|
import { makeChat } from "@llm4ts/flow/Chat";
|
|
19
19
|
import { Info } from "@llm4ts/flow/FlowEvents";
|
|
20
|
-
import { asAddedFileDiff, batchesOf, portStatusIn, renderPilotReport } from "@llm4ts/flow/Port";
|
|
20
|
+
import { asAddedFileDiff, batchesOf, ledgerRowsFor, portStatusIn, renderPilotReport } from "@llm4ts/flow/Port";
|
|
21
21
|
import { adversarialReviewer, reviewAndFixLoop } from "@llm4ts/flow/Review";
|
|
22
22
|
import { runQueue } from "@llm4ts/flow/WorkQueue";
|
|
23
23
|
import { asReadOnly, coderFromEnv, makeNodeWorkspace, nodePlainFileStore, openPack, resolveFlowInput, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
24
|
-
import { asPortingPack, implementerPrompt, implementerSystem, portEnv, portFixerSystem, portManifest, portStateDir } from "./lib/port.js";
|
|
24
|
+
import { asPortingPack, implementerPrompt, implementerSystem, ledgerPath, portEnv, readLedgerRows, portFixerSystem, portManifest, portStateDir } from "./lib/port.js";
|
|
25
25
|
const renderReport = (outcomes, total, pending) => {
|
|
26
26
|
const done = outcomes.filter((outcome) => outcome.status === "done");
|
|
27
27
|
const failed = outcomes.filter((outcome) => outcome.status === "failed");
|
|
@@ -85,6 +85,13 @@ const program = Effect.gen(function* () {
|
|
|
85
85
|
yield* requireApproval(files, pilotPath);
|
|
86
86
|
}
|
|
87
87
|
const items = knobs.pilot > 0 ? pending.slice(0, knobs.pilot) : pending;
|
|
88
|
+
// A ledger written by port-ledger rides into every implementer prompt.
|
|
89
|
+
const ledger = yield* readLedgerRows(files, input.workDir, porting);
|
|
90
|
+
if (ledger.length > 0) {
|
|
91
|
+
yield* events.publish(Info.make({
|
|
92
|
+
message: `port: ${ledger.length} ledger row(s) from ${ledgerPath(porting)}`
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
88
95
|
const batches = batchesOf(items, { files: knobs.batch });
|
|
89
96
|
const started = yield* Clock.currentTimeMillis;
|
|
90
97
|
const outcomes = [];
|
|
@@ -108,7 +115,7 @@ const program = Effect.gen(function* () {
|
|
|
108
115
|
agent: "coder",
|
|
109
116
|
stall: { repeats: 5 }
|
|
110
117
|
});
|
|
111
|
-
yield* chat.ask(implementerPrompt(entry, source, porting, knobs.sourceChars));
|
|
118
|
+
yield* chat.ask(implementerPrompt(entry, source, porting, knobs.sourceChars, ledgerRowsFor(ledger, entry.source)));
|
|
112
119
|
const targetPath = join(input.workDir, entry.target);
|
|
113
120
|
if ((yield* files.read(targetPath)) === undefined) {
|
|
114
121
|
return { note: `nothing written at ${entry.target}` };
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// Audit the porting rulebook before it ports anything (ADR 0028, the Bun
|
|
2
|
+
// port's porting-md audit): dimension auditors read the rulebook against a
|
|
3
|
+
// few sample sources and propose rules; three refuters vote each finding
|
|
4
|
+
// down or let it stand; a trial port of the samples by the rules and again
|
|
5
|
+
// natively shows what the rulebook forgot. The result is a patch to
|
|
6
|
+
// `prompts/porting.md` behind an approval; the next run applies it.
|
|
7
|
+
//
|
|
8
|
+
// LLM4TS_PACK=zig-rust llm4ts run port-guide --repo ~/src/bun
|
|
9
|
+
//
|
|
10
|
+
// Knobs: LLM4TS_PORT_GUIDE_SAMPLE (3 files), LLM4TS_PORT_GUIDE_TRIAL (on|off).
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as Schema from "effect/Schema";
|
|
14
|
+
import { ApprovedMarker } from "@llm4ts/flow/Approval";
|
|
15
|
+
import { makeChat } from "@llm4ts/flow/Chat";
|
|
16
|
+
import { cap } from "@llm4ts/flow/Context";
|
|
17
|
+
import { Info } from "@llm4ts/flow/FlowEvents";
|
|
18
|
+
import { GuideFinding, defaultAuditDimensions, renderGuideAudit, standsAfterRefutes } from "@llm4ts/flow/Port";
|
|
19
|
+
import { AppliedMarkerPrefix, applyRuleEdit, retroApprovalOf } from "@llm4ts/flow/Retro";
|
|
20
|
+
import { asReadOnly, coderFromEnv, makeNodeWorkspace, nodePlainFileStore, openPack, resolveFlowInput, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
21
|
+
import { structuredAndPublish } from "@llm4ts/flow/Flow";
|
|
22
|
+
import { asPortingPack, implementerPrompt, implementerSystem, nativeImplementerSystem, portEnv, portManifest, portStateDir } from "./lib/port.js";
|
|
23
|
+
class Findings extends Schema.Class("Findings")({
|
|
24
|
+
findings: Schema.Array(GuideFinding)
|
|
25
|
+
}) {
|
|
26
|
+
}
|
|
27
|
+
const findingItems = {
|
|
28
|
+
type: "array",
|
|
29
|
+
items: {
|
|
30
|
+
type: "object",
|
|
31
|
+
properties: {
|
|
32
|
+
dimension: { type: "string" },
|
|
33
|
+
finding: { type: "string" },
|
|
34
|
+
evidence: { type: "string" },
|
|
35
|
+
proposedRule: { type: "string" }
|
|
36
|
+
},
|
|
37
|
+
required: ["dimension", "finding", "evidence", "proposedRule"]
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const findingsJson = {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: { findings: findingItems },
|
|
43
|
+
required: ["findings"]
|
|
44
|
+
};
|
|
45
|
+
class Refute extends Schema.Class("Refute")({
|
|
46
|
+
holds: Schema.Boolean,
|
|
47
|
+
why: Schema.String
|
|
48
|
+
}) {
|
|
49
|
+
}
|
|
50
|
+
const refuteJson = {
|
|
51
|
+
type: "object",
|
|
52
|
+
properties: { holds: { type: "boolean" }, why: { type: "string" } },
|
|
53
|
+
required: ["holds", "why"]
|
|
54
|
+
};
|
|
55
|
+
class Trial extends Schema.Class("Trial")({
|
|
56
|
+
differences: Schema.Array(Schema.String),
|
|
57
|
+
findings: Schema.Array(GuideFinding)
|
|
58
|
+
}) {
|
|
59
|
+
}
|
|
60
|
+
const trialJson = {
|
|
61
|
+
type: "object",
|
|
62
|
+
properties: { differences: { type: "array", items: { type: "string" } }, findings: findingItems },
|
|
63
|
+
required: ["differences", "findings"]
|
|
64
|
+
};
|
|
65
|
+
class AuditRecord extends Schema.Class("AuditRecord")({
|
|
66
|
+
kept: Schema.Array(GuideFinding)
|
|
67
|
+
}) {
|
|
68
|
+
}
|
|
69
|
+
const encodeAudit = Schema.encodeSync(Schema.fromJsonString(AuditRecord));
|
|
70
|
+
const decodeAudit = Schema.decodeUnknownOption(Schema.fromJsonString(AuditRecord));
|
|
71
|
+
const program = Effect.gen(function* () {
|
|
72
|
+
const input = yield* resolveFlowInput("Audit the porting rulebook against sample sources");
|
|
73
|
+
const coder = coderFromEnv(process.env);
|
|
74
|
+
const files = nodePlainFileStore;
|
|
75
|
+
const knobs = portEnv(process.env);
|
|
76
|
+
const sampleSize = Math.max(1, Number.parseInt(process.env.LLM4TS_PORT_GUIDE_SAMPLE ?? "3", 10) || 3);
|
|
77
|
+
const trialOn = process.env.LLM4TS_PORT_GUIDE_TRIAL?.trim().toLowerCase() !== "off";
|
|
78
|
+
const stateDir = portStateDir(input.workDir);
|
|
79
|
+
const reportPath = join(stateDir, "guide-audit.md");
|
|
80
|
+
const recordPath = join(stateDir, "guide-audit.json");
|
|
81
|
+
yield* runNode({
|
|
82
|
+
workDir: input.workDir,
|
|
83
|
+
workspace: input.workspace,
|
|
84
|
+
userPrompt: input.prompt,
|
|
85
|
+
coder,
|
|
86
|
+
reasoning: asReadOnly(coder),
|
|
87
|
+
reviewers: [asReadOnly(coder)],
|
|
88
|
+
environment: process.env
|
|
89
|
+
}, (context) => Effect.gen(function* () {
|
|
90
|
+
const events = context.events;
|
|
91
|
+
const repo = yield* makeNodeWorkspace(input.workDir);
|
|
92
|
+
const opened = yield* stage(events, "pack", openPack({
|
|
93
|
+
environment: process.env,
|
|
94
|
+
launchDir: input.workspace,
|
|
95
|
+
flowDir: import.meta.dirname
|
|
96
|
+
}));
|
|
97
|
+
const porting = yield* asPortingPack(opened);
|
|
98
|
+
const rulebookPath = `${opened.dir}/prompts/porting.md`;
|
|
99
|
+
// An approved, unapplied audit from an earlier run: apply it to the rulebook and stop.
|
|
100
|
+
const earlier = yield* files.read(reportPath);
|
|
101
|
+
if (earlier !== undefined) {
|
|
102
|
+
const approval = retroApprovalOf(earlier);
|
|
103
|
+
if (approval.approved && !approval.applied) {
|
|
104
|
+
const recordText = yield* files.read(recordPath);
|
|
105
|
+
const record = recordText === undefined ? undefined : decodeAudit(recordText);
|
|
106
|
+
if (record !== undefined && record._tag === "Some") {
|
|
107
|
+
let text = yield* opened.workspace
|
|
108
|
+
.read(rulebookPath)
|
|
109
|
+
.pipe(Effect.orElseSucceed(() => porting.rulebook));
|
|
110
|
+
let applied = 0;
|
|
111
|
+
for (const finding of record.value.kept) {
|
|
112
|
+
const next = applyRuleEdit(text, {
|
|
113
|
+
target: rulebookPath,
|
|
114
|
+
op: "append-rule",
|
|
115
|
+
line: finding.proposedRule,
|
|
116
|
+
why: finding.finding
|
|
117
|
+
});
|
|
118
|
+
if (next !== undefined) {
|
|
119
|
+
text = next;
|
|
120
|
+
applied += 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
yield* opened.workspace.write(rulebookPath, text);
|
|
124
|
+
yield* files.writeAtomic(reportPath, `${earlier.trimEnd()}\n${AppliedMarkerPrefix} ${new Date().toISOString()}\n`);
|
|
125
|
+
yield* events.publish(Info.make({
|
|
126
|
+
message: `port-guide: ${applied} rule(s) appended to ${join(opened.workspace.root, rulebookPath)}`
|
|
127
|
+
}));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const manifest = yield* stage(events, "manifest", portManifest(repo, files, input.workDir, porting));
|
|
133
|
+
const sample = manifest.slice(0, sampleSize);
|
|
134
|
+
const sources = [];
|
|
135
|
+
for (const entry of sample) {
|
|
136
|
+
const text = (yield* files.read(join(input.workDir, entry.source))) ?? "";
|
|
137
|
+
sources.push(`### ${entry.source}\n\`\`\`\n${cap(text, Math.floor(knobs.sourceChars / Math.max(1, sample.length))).text}\n\`\`\``);
|
|
138
|
+
}
|
|
139
|
+
const samples = sources.join("\n\n");
|
|
140
|
+
const dimensions = porting.pack.audit ?? defaultAuditDimensions;
|
|
141
|
+
const auditor = (dimension) => structuredAndPublish(context.reasoning, events, [
|
|
142
|
+
`You audit a porting rulebook along one dimension: ${dimension}.`,
|
|
143
|
+
"Read the rulebook and the sample source files. Report as findings the places where the",
|
|
144
|
+
"rulebook is silent, ambiguous, or wrong for what the samples actually contain: a construct",
|
|
145
|
+
"the samples use that the rules do not map, a mapping that would produce wrong or",
|
|
146
|
+
"non-idiomatic target code, two rules that conflict. Each finding names its evidence (a",
|
|
147
|
+
"rulebook line or a sample line) and proposes one rule, one line, that would settle it.",
|
|
148
|
+
"Report nothing the rulebook already covers. Return ONLY JSON matching the schema.",
|
|
149
|
+
"",
|
|
150
|
+
"# Rulebook",
|
|
151
|
+
porting.rulebook,
|
|
152
|
+
"",
|
|
153
|
+
"# Sample sources",
|
|
154
|
+
samples
|
|
155
|
+
].join("\n"), Findings, findingsJson, "auditor");
|
|
156
|
+
const audited = yield* stage(events, "audit", Effect.forEach(dimensions, auditor, { concurrency: 3 }));
|
|
157
|
+
let proposed = audited.flatMap((result) => result.findings);
|
|
158
|
+
const trial = [];
|
|
159
|
+
if (trialOn && sample.length > 0) {
|
|
160
|
+
yield* stage(events, "trial port", Effect.forEach(sample, (entry) => Effect.gen(function* () {
|
|
161
|
+
const source = (yield* files.read(join(input.workDir, entry.source))) ?? "";
|
|
162
|
+
const byRules = {
|
|
163
|
+
...entry,
|
|
164
|
+
target: `.llm4ts/port/trial/by-rules/${entry.target}`
|
|
165
|
+
};
|
|
166
|
+
const native = { ...entry, target: `.llm4ts/port/trial/native/${entry.target}` };
|
|
167
|
+
const rulesChat = yield* makeChat(context.coder, {
|
|
168
|
+
system: implementerSystem(porting),
|
|
169
|
+
events,
|
|
170
|
+
agent: "coder",
|
|
171
|
+
stall: { repeats: 5 }
|
|
172
|
+
});
|
|
173
|
+
yield* rulesChat.ask(implementerPrompt(byRules, source, porting, knobs.sourceChars));
|
|
174
|
+
const nativeChat = yield* makeChat(context.coder, {
|
|
175
|
+
system: nativeImplementerSystem(porting),
|
|
176
|
+
events,
|
|
177
|
+
agent: "coder",
|
|
178
|
+
stall: { repeats: 5 }
|
|
179
|
+
});
|
|
180
|
+
yield* nativeChat.ask(`Port \`${entry.source}\` natively. Write the ported file at: ${native.target}\n\nSource file:\n\`\`\`\n${cap(source, knobs.sourceChars).text}\n\`\`\``);
|
|
181
|
+
const rulesDraft = (yield* files.read(join(input.workDir, byRules.target))) ?? "(no draft written)";
|
|
182
|
+
const nativeDraft = (yield* files.read(join(input.workDir, native.target))) ?? "(no draft written)";
|
|
183
|
+
const compared = yield* structuredAndPublish(context.reasoning, events, [
|
|
184
|
+
`Compare the two drafts of \`${entry.source}\`: one written by the rulebook, one natively.`,
|
|
185
|
+
"List the differences that matter (where the native port made a better or different",
|
|
186
|
+
"choice than the rules forced), and for each that the rulebook should settle, a finding",
|
|
187
|
+
"with evidence and one proposed rule. Return ONLY JSON matching the schema.",
|
|
188
|
+
"",
|
|
189
|
+
"# Rulebook",
|
|
190
|
+
porting.rulebook,
|
|
191
|
+
"",
|
|
192
|
+
"# Draft by the rules",
|
|
193
|
+
"```",
|
|
194
|
+
cap(rulesDraft, 20_000).text,
|
|
195
|
+
"```",
|
|
196
|
+
"",
|
|
197
|
+
"# Native draft",
|
|
198
|
+
"```",
|
|
199
|
+
cap(nativeDraft, 20_000).text,
|
|
200
|
+
"```"
|
|
201
|
+
].join("\n"), Trial, trialJson, "trial-compare");
|
|
202
|
+
trial.push(...compared.differences.map((line) => `${entry.source}: ${line}`));
|
|
203
|
+
proposed = [...proposed, ...compared.findings];
|
|
204
|
+
}), { concurrency: 1 }));
|
|
205
|
+
}
|
|
206
|
+
// Three refuters per finding; a majority rejecting drops it.
|
|
207
|
+
const kept = [];
|
|
208
|
+
const dropped = [];
|
|
209
|
+
yield* stage(events, "refute", Effect.forEach(proposed, (finding) => Effect.gen(function* () {
|
|
210
|
+
const votes = yield* Effect.forEach([1, 2, 3], (vote) => structuredAndPublish(context.reasoning, events, [
|
|
211
|
+
`Refuter ${vote} of 3. Does this finding hold against the rulebook and the samples?`,
|
|
212
|
+
"Refute it (holds: false) if the rulebook already covers it, if the evidence does not",
|
|
213
|
+
"show what the finding claims, or if the proposed rule contradicts another rule. Return",
|
|
214
|
+
"ONLY JSON matching the schema.",
|
|
215
|
+
"",
|
|
216
|
+
`Dimension: ${finding.dimension}`,
|
|
217
|
+
`Finding: ${finding.finding}`,
|
|
218
|
+
`Evidence: ${finding.evidence}`,
|
|
219
|
+
`Proposed rule: ${finding.proposedRule}`,
|
|
220
|
+
"",
|
|
221
|
+
"# Rulebook",
|
|
222
|
+
porting.rulebook,
|
|
223
|
+
"",
|
|
224
|
+
"# Sample sources",
|
|
225
|
+
samples
|
|
226
|
+
].join("\n"), Refute, refuteJson, "refuter"), { concurrency: 3 });
|
|
227
|
+
if (standsAfterRefutes(votes.map((vote) => vote.holds)))
|
|
228
|
+
kept.push(finding);
|
|
229
|
+
else
|
|
230
|
+
dropped.push(finding);
|
|
231
|
+
}), { concurrency: 2 }));
|
|
232
|
+
yield* files.writeAtomic(reportPath, renderGuideAudit({
|
|
233
|
+
pack: porting.pack.name,
|
|
234
|
+
kept,
|
|
235
|
+
dropped,
|
|
236
|
+
trial,
|
|
237
|
+
sample: sample.map((entry) => entry.source)
|
|
238
|
+
}));
|
|
239
|
+
yield* files.writeAtomic(recordPath, `${encodeAudit(AuditRecord.make({ kept }))}\n`);
|
|
240
|
+
yield* events.publish(Info.make({
|
|
241
|
+
message: `port-guide: ${kept.length} finding(s) kept, ${dropped.length} dropped — read ${reportPath}, tick \`${ApprovedMarker}\`, run again to append the rules to ${rulebookPath}`
|
|
242
|
+
}));
|
|
243
|
+
}));
|
|
244
|
+
});
|
|
245
|
+
runFlowMain(program);
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// A precomputed cross-file table for the implementers (ADR 0028, the Bun
|
|
2
|
+
// port's LIFETIMES.tsv): every unit the pack's `## Ledger` regex names in a
|
|
3
|
+
// source file is classified by the reasoning seat with the line that proves
|
|
4
|
+
// it; UNKNOWN and low-confidence rows plus a fifth of the rest face three
|
|
5
|
+
// refuters; the table lands beside the specs and `port-files` hands each
|
|
6
|
+
// implementer its own rows, "trust the table over local guessing".
|
|
7
|
+
//
|
|
8
|
+
// LLM4TS_PACK=zig-rust llm4ts run port-ledger --repo ~/src/bun
|
|
9
|
+
//
|
|
10
|
+
// Knobs: LLM4TS_PORT_CONCURRENCY (4), LLM4TS_PORT_SOURCE_CHARS (120000).
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as Ref from "effect/Ref";
|
|
14
|
+
import * as Schema from "effect/Schema";
|
|
15
|
+
import { cap } from "@llm4ts/flow/Context";
|
|
16
|
+
import { FlowAborted } from "@llm4ts/flow/FlowError";
|
|
17
|
+
import { Info } from "@llm4ts/flow/FlowEvents";
|
|
18
|
+
import { LedgerRow, renderLedger, standsAfterRefutes, unitsIn } from "@llm4ts/flow/Port";
|
|
19
|
+
import { runQueue } from "@llm4ts/flow/WorkQueue";
|
|
20
|
+
import { asReadOnly, coderFromEnv, makeNodeWorkspace, nodePlainFileStore, openPack, resolveFlowInput, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
21
|
+
import { structuredAndPublish } from "@llm4ts/flow/Flow";
|
|
22
|
+
import { asPortingPack, ledgerPath, portEnv, portManifest } from "./lib/port.js";
|
|
23
|
+
class Classified extends Schema.Class("Classified")({
|
|
24
|
+
rows: Schema.Array(Schema.Struct({
|
|
25
|
+
unit: Schema.String,
|
|
26
|
+
class: Schema.String,
|
|
27
|
+
evidence: Schema.String,
|
|
28
|
+
confidence: Schema.Literals(["high", "medium", "low"])
|
|
29
|
+
}))
|
|
30
|
+
}) {
|
|
31
|
+
}
|
|
32
|
+
const classifiedJson = {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: {
|
|
35
|
+
rows: {
|
|
36
|
+
type: "array",
|
|
37
|
+
items: {
|
|
38
|
+
type: "object",
|
|
39
|
+
properties: {
|
|
40
|
+
unit: { type: "string" },
|
|
41
|
+
class: { type: "string" },
|
|
42
|
+
evidence: { type: "string" },
|
|
43
|
+
confidence: { type: "string", enum: ["high", "medium", "low"] }
|
|
44
|
+
},
|
|
45
|
+
required: ["unit", "class", "evidence", "confidence"]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
required: ["rows"]
|
|
50
|
+
};
|
|
51
|
+
class Refute extends Schema.Class("Refute")({
|
|
52
|
+
holds: Schema.Boolean,
|
|
53
|
+
why: Schema.String,
|
|
54
|
+
correctedClass: Schema.optionalKey(Schema.String)
|
|
55
|
+
}) {
|
|
56
|
+
}
|
|
57
|
+
const refuteJson = {
|
|
58
|
+
type: "object",
|
|
59
|
+
properties: {
|
|
60
|
+
holds: { type: "boolean" },
|
|
61
|
+
why: { type: "string" },
|
|
62
|
+
correctedClass: { type: "string" }
|
|
63
|
+
},
|
|
64
|
+
required: ["holds", "why"]
|
|
65
|
+
};
|
|
66
|
+
const program = Effect.gen(function* () {
|
|
67
|
+
const input = yield* resolveFlowInput("Classify every unit the pack's ledger regex names");
|
|
68
|
+
const coder = coderFromEnv(process.env);
|
|
69
|
+
const files = nodePlainFileStore;
|
|
70
|
+
const knobs = portEnv(process.env);
|
|
71
|
+
yield* runNode({
|
|
72
|
+
workDir: input.workDir,
|
|
73
|
+
workspace: input.workspace,
|
|
74
|
+
userPrompt: input.prompt,
|
|
75
|
+
coder,
|
|
76
|
+
reasoning: asReadOnly(coder),
|
|
77
|
+
reviewers: [asReadOnly(coder)],
|
|
78
|
+
environment: process.env
|
|
79
|
+
}, (context) => Effect.gen(function* () {
|
|
80
|
+
const events = context.events;
|
|
81
|
+
const repo = yield* makeNodeWorkspace(input.workDir);
|
|
82
|
+
const opened = yield* stage(events, "pack", openPack({
|
|
83
|
+
environment: process.env,
|
|
84
|
+
launchDir: input.workspace,
|
|
85
|
+
flowDir: import.meta.dirname
|
|
86
|
+
}));
|
|
87
|
+
const porting = yield* asPortingPack(opened);
|
|
88
|
+
const ledger = porting.pack.ledger;
|
|
89
|
+
if (ledger === undefined) {
|
|
90
|
+
return yield* FlowAborted.make({
|
|
91
|
+
message: `pack '${porting.pack.name}' has no '## Ledger' section (- unit: <regex>, - classes: …, - question: …)`
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
const classes = ledger.classes.length === 0 ? ["UNKNOWN"] : ledger.classes;
|
|
95
|
+
const unknown = classes.find((name) => name.toUpperCase() === "UNKNOWN") ?? "UNKNOWN";
|
|
96
|
+
const manifest = yield* stage(events, "manifest", portManifest(repo, files, input.workDir, porting));
|
|
97
|
+
const rows = yield* Ref.make([]);
|
|
98
|
+
const finished = yield* Ref.make(new Set());
|
|
99
|
+
yield* runQueue({
|
|
100
|
+
label: "ledger",
|
|
101
|
+
items: manifest,
|
|
102
|
+
done: (entry) => Effect.map(Ref.get(finished), (set) => set.has(entry.id)),
|
|
103
|
+
concurrency: knobs.concurrency,
|
|
104
|
+
maxRounds: 2,
|
|
105
|
+
events,
|
|
106
|
+
work: (entry) => Effect.gen(function* () {
|
|
107
|
+
const text = (yield* files.read(join(input.workDir, entry.source))) ?? "";
|
|
108
|
+
const units = unitsIn(text, ledger.unit);
|
|
109
|
+
if (units.length === 0) {
|
|
110
|
+
yield* Ref.update(finished, (set) => new Set([...set, entry.id]));
|
|
111
|
+
return { note: "no units" };
|
|
112
|
+
}
|
|
113
|
+
const classified = yield* structuredAndPublish(context.reasoning, events, [
|
|
114
|
+
`Classify every unit listed below in \`${entry.source}\`. ${ledger.question}`,
|
|
115
|
+
`Classes: ${classes.join(", ")}. Use ${unknown} when the file alone cannot tell.`,
|
|
116
|
+
"For each unit give the class, the evidence as `file:line` of the statement that proves",
|
|
117
|
+
"it (an initialisation, a deinit, an assignment), and your confidence. Return ONLY JSON",
|
|
118
|
+
"matching the schema.",
|
|
119
|
+
"",
|
|
120
|
+
"Units:",
|
|
121
|
+
...units.map((unit) => `- unit: ${unit}`),
|
|
122
|
+
"",
|
|
123
|
+
"```",
|
|
124
|
+
cap(text, knobs.sourceChars).text,
|
|
125
|
+
"```"
|
|
126
|
+
].join("\n"), Classified, classifiedJson, "ledger");
|
|
127
|
+
const settled = [];
|
|
128
|
+
for (const [index, row] of classified.rows.entries()) {
|
|
129
|
+
if (!units.includes(row.unit))
|
|
130
|
+
continue;
|
|
131
|
+
const doubtful = row.class.toUpperCase() === unknown.toUpperCase() ||
|
|
132
|
+
row.confidence === "low" ||
|
|
133
|
+
index % 5 === 0;
|
|
134
|
+
let klass = classes.includes(row.class) ? row.class : unknown;
|
|
135
|
+
let confidence = row.confidence;
|
|
136
|
+
if (doubtful) {
|
|
137
|
+
const votes = yield* Effect.forEach([1, 2, 3], (vote) => structuredAndPublish(context.reasoning, events, [
|
|
138
|
+
`Refuter ${vote} of 3. Does this classification hold? ${ledger.question}`,
|
|
139
|
+
`Unit \`${row.unit}\` in \`${entry.source}\` was classified ${klass} (evidence: ${row.evidence}).`,
|
|
140
|
+
`Classes: ${classes.join(", ")}. Refute it (holds: false) and give correctedClass when the`,
|
|
141
|
+
"file shows a different class, or when the evidence does not support it. Return ONLY JSON.",
|
|
142
|
+
"",
|
|
143
|
+
"```",
|
|
144
|
+
cap(text, knobs.sourceChars).text,
|
|
145
|
+
"```"
|
|
146
|
+
].join("\n"), Refute, refuteJson, "ledger-refuter"), { concurrency: 3 });
|
|
147
|
+
if (!standsAfterRefutes(votes.map((vote) => vote.holds))) {
|
|
148
|
+
const corrected = votes
|
|
149
|
+
.map((vote) => vote.correctedClass)
|
|
150
|
+
.find((candidate) => candidate !== undefined && classes.includes(candidate));
|
|
151
|
+
klass = corrected ?? unknown;
|
|
152
|
+
confidence = corrected === undefined ? "low" : "medium";
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
settled.push(LedgerRow.make({
|
|
156
|
+
file: entry.source,
|
|
157
|
+
unit: row.unit,
|
|
158
|
+
class: klass,
|
|
159
|
+
evidence: row.evidence,
|
|
160
|
+
confidence
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
yield* Ref.update(rows, (all) => [...all, ...settled]);
|
|
164
|
+
yield* Ref.update(finished, (set) => new Set([...set, entry.id]));
|
|
165
|
+
return { note: `${settled.length} unit(s)` };
|
|
166
|
+
})
|
|
167
|
+
});
|
|
168
|
+
const all = [...(yield* Ref.get(rows))].sort((left, right) => `${left.file}\t${left.unit}`.localeCompare(`${right.file}\t${right.unit}`));
|
|
169
|
+
const path = ledgerPath(porting);
|
|
170
|
+
yield* files.writeAtomic(join(input.workDir, path), renderLedger(all));
|
|
171
|
+
yield* context.git.commitPaths(`port: ledger of ${all.length} unit(s)`, [path]);
|
|
172
|
+
const counts = new Map();
|
|
173
|
+
for (const row of all)
|
|
174
|
+
counts.set(row.class, (counts.get(row.class) ?? 0) + 1);
|
|
175
|
+
yield* events.publish(Info.make({
|
|
176
|
+
message: `port-ledger: ${all.length} unit(s) in ${manifest.length} file(s) → ${path} (${[...counts.entries()].map(([klass, count]) => `${klass} ${count}`).join(", ")})`
|
|
177
|
+
}));
|
|
178
|
+
}));
|
|
179
|
+
});
|
|
180
|
+
runFlowMain(program);
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// The differential tier (ADR 0028, the Bun port's test swarm): every test
|
|
2
|
+
// file runs once on the legacy build for a baseline, then on the target; a
|
|
3
|
+
// file passes when the target exits 0 and its pass count equals the
|
|
4
|
+
// baseline's; the rest are classified diverge, crash or hang and written as
|
|
5
|
+
// `.diag` files; one fixer per red file reads its diag as its only runtime
|
|
6
|
+
// evidence; two votes review; one rebuild per round; until green or stalled.
|
|
7
|
+
//
|
|
8
|
+
// LLM4TS_PACK=zig-rust llm4ts run port-tests --repo ~/src/bun
|
|
9
|
+
//
|
|
10
|
+
// Knobs: LLM4TS_PORT_CONCURRENCY (4), LLM4TS_REVIEW_VOTES (2 here),
|
|
11
|
+
// LLM4TS_PORT_TEST_ROUNDS (4), LLM4TS_GATE_TAIL_CHARS (4000).
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import * as Duration from "effect/Duration";
|
|
14
|
+
import * as Effect from "effect/Effect";
|
|
15
|
+
import * as Ref from "effect/Ref";
|
|
16
|
+
import * as Schema from "effect/Schema";
|
|
17
|
+
import { makeChat } from "@llm4ts/flow/Chat";
|
|
18
|
+
import { FlowAborted, Stalled } from "@llm4ts/flow/FlowError";
|
|
19
|
+
import { Info } from "@llm4ts/flow/FlowEvents";
|
|
20
|
+
import { diffVerdict, renderDiag, renderDifferentialReport } from "@llm4ts/flow/Port";
|
|
21
|
+
import { ReviewResult, adversarialReviewer, lintCommand, reviewAndFixLoop } from "@llm4ts/flow/Review";
|
|
22
|
+
import { matchingFiles } from "@llm4ts/flow/SpecChecks";
|
|
23
|
+
import { runQueue } from "@llm4ts/flow/WorkQueue";
|
|
24
|
+
import { asReadOnly, coderFromEnv, makeNodeWorkspace, nodePlainFileStore, nodeProcessExecutor, openPack, resolveFlowInput, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
25
|
+
import { asPortingPack, compileFixerSystem, portEnv, portStateDir } from "./lib/port.js";
|
|
26
|
+
const Baseline = Schema.fromJsonString(ReviewResult);
|
|
27
|
+
const encodeBaseline = Schema.encodeSync(Baseline);
|
|
28
|
+
const decodeBaseline = Schema.decodeUnknownOption(Baseline);
|
|
29
|
+
const slug = (path) => path.replace(/[^a-z0-9]+/giu, "-").replace(/^-|-$/gu, "");
|
|
30
|
+
const program = Effect.gen(function* () {
|
|
31
|
+
const input = yield* resolveFlowInput("Run every test file on the legacy and the target build, fix what diverges");
|
|
32
|
+
const coder = coderFromEnv(process.env);
|
|
33
|
+
const files = nodePlainFileStore;
|
|
34
|
+
const knobs = portEnv(process.env);
|
|
35
|
+
const maxRounds = Math.max(1, Number.parseInt(process.env.LLM4TS_PORT_TEST_ROUNDS ?? "4", 10) || 4);
|
|
36
|
+
const tailChars = Math.max(500, Number.parseInt(process.env.LLM4TS_GATE_TAIL_CHARS ?? "4000", 10) || 4000);
|
|
37
|
+
const stateDir = join(portStateDir(input.workDir), "tests");
|
|
38
|
+
yield* runNode({
|
|
39
|
+
workDir: input.workDir,
|
|
40
|
+
workspace: input.workspace,
|
|
41
|
+
userPrompt: input.prompt,
|
|
42
|
+
coder,
|
|
43
|
+
reasoning: asReadOnly(coder),
|
|
44
|
+
reviewers: [asReadOnly(coder)],
|
|
45
|
+
environment: process.env
|
|
46
|
+
}, (context) => Effect.gen(function* () {
|
|
47
|
+
const events = context.events;
|
|
48
|
+
const repo = yield* makeNodeWorkspace(input.workDir);
|
|
49
|
+
const opened = yield* stage(events, "pack", openPack({
|
|
50
|
+
environment: process.env,
|
|
51
|
+
launchDir: input.workspace,
|
|
52
|
+
flowDir: import.meta.dirname
|
|
53
|
+
}));
|
|
54
|
+
const porting = yield* asPortingPack(opened);
|
|
55
|
+
const differential = porting.pack.differential;
|
|
56
|
+
if (differential === undefined) {
|
|
57
|
+
return yield* FlowAborted.make({
|
|
58
|
+
message: `pack '${porting.pack.name}' has no '## Differential' section (- tests: <regex>, - legacy: <cmd {{file}}>, - target: <cmd {{file}}>)`
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const timeout = Duration.seconds(differential.timeoutSeconds);
|
|
62
|
+
const testFiles = yield* stage(events, "test files", matchingFiles(repo, differential.tests, porting.pack.exclude));
|
|
63
|
+
const command = (template, file) => template.map((part) => part.replaceAll("{{file}}", file));
|
|
64
|
+
const build = porting.pack.gate("build") ?? porting.pack.gate("check");
|
|
65
|
+
const baselineOf = (file) => Effect.gen(function* () {
|
|
66
|
+
const path = join(stateDir, `${slug(file)}.baseline.json`);
|
|
67
|
+
const stored = yield* files.read(path);
|
|
68
|
+
const decoded = stored === undefined ? undefined : decodeBaseline(stored);
|
|
69
|
+
if (decoded !== undefined && decoded._tag === "Some")
|
|
70
|
+
return decoded.value;
|
|
71
|
+
const legacy = yield* lintCommand(nodeProcessExecutor, events, command(differential.legacy, file), input.workDir, { timeout });
|
|
72
|
+
yield* files.writeAtomic(path, encodeBaseline(legacy));
|
|
73
|
+
return legacy;
|
|
74
|
+
});
|
|
75
|
+
let previous;
|
|
76
|
+
let flat = 0;
|
|
77
|
+
for (let round = 1; round <= maxRounds; round += 1) {
|
|
78
|
+
if (build !== undefined) {
|
|
79
|
+
const built = yield* stage(events, `build round ${round}`, lintCommand(nodeProcessExecutor, events, build, input.workDir, {
|
|
80
|
+
timeout: Duration.minutes(20)
|
|
81
|
+
}));
|
|
82
|
+
if (!built.isClean) {
|
|
83
|
+
return yield* FlowAborted.make({
|
|
84
|
+
message: `the target does not build; run port-compile first:\n${built.issues
|
|
85
|
+
.map((issue) => issue.description)
|
|
86
|
+
.join("\n")
|
|
87
|
+
.slice(-tailChars)}`
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const verdicts = yield* stage(events, `differential round ${round}`, Effect.forEach(testFiles, (file) => Effect.gen(function* () {
|
|
92
|
+
const legacy = yield* baselineOf(file);
|
|
93
|
+
const target = yield* lintCommand(nodeProcessExecutor, events, command(differential.target, file), input.workDir, { timeout });
|
|
94
|
+
const verdict = diffVerdict(file, legacy, target, [input.workDir]);
|
|
95
|
+
if (verdict.class !== "pass" && verdict.class !== "legacy-red") {
|
|
96
|
+
yield* files.writeAtomic(join(stateDir, `${slug(file)}.diag.md`), renderDiag(verdict, tailChars));
|
|
97
|
+
}
|
|
98
|
+
return verdict;
|
|
99
|
+
}), { concurrency: knobs.concurrency }));
|
|
100
|
+
yield* files.writeAtomic(join(stateDir, `report-${round}.md`), renderDifferentialReport(round, verdicts));
|
|
101
|
+
const red = verdicts.filter((verdict) => verdict.class === "diverge" || verdict.class === "crash" || verdict.class === "hang");
|
|
102
|
+
yield* events.publish(Info.make({
|
|
103
|
+
message: `port-tests: round ${round}, ${verdicts.length} file(s): ${verdicts.length - red.length - verdicts.filter((v) => v.class === "legacy-red").length} pass, ${red.length} red, ${verdicts.filter((v) => v.class === "legacy-red").length} red on legacy too`
|
|
104
|
+
}));
|
|
105
|
+
if (red.length === 0) {
|
|
106
|
+
yield* events.publish(Info.make({
|
|
107
|
+
message: `port-tests: green after ${round} round(s) — reports under ${stateDir}`
|
|
108
|
+
}));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (previous !== undefined && red.length >= previous) {
|
|
112
|
+
flat += 1;
|
|
113
|
+
if (flat >= 2) {
|
|
114
|
+
return yield* Stalled.make({
|
|
115
|
+
signal: "no-progress",
|
|
116
|
+
detail: `port-tests: ${red.length} red file(s) after round ${round}, no fewer than before`
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
flat = 0;
|
|
122
|
+
}
|
|
123
|
+
previous = red.length;
|
|
124
|
+
if (round === maxRounds)
|
|
125
|
+
break;
|
|
126
|
+
const finished = yield* Ref.make(new Set());
|
|
127
|
+
yield* runQueue({
|
|
128
|
+
label: `port-tests fix round ${round}`,
|
|
129
|
+
items: red.map((verdict) => ({ id: verdict.file, verdict })),
|
|
130
|
+
done: (item) => Effect.map(Ref.get(finished), (set) => set.has(item.id)),
|
|
131
|
+
concurrency: knobs.concurrency,
|
|
132
|
+
maxRounds: 1,
|
|
133
|
+
events,
|
|
134
|
+
ledger: { files, path: join(stateDir, "fix-ledger.jsonl") },
|
|
135
|
+
work: (item) => Effect.gen(function* () {
|
|
136
|
+
const diag = (yield* files.read(join(stateDir, `${slug(item.id)}.diag.md`))) ??
|
|
137
|
+
renderDiag(item.verdict, tailChars);
|
|
138
|
+
const chat = yield* makeChat(context.coder, {
|
|
139
|
+
system: compileFixerSystem(porting),
|
|
140
|
+
events,
|
|
141
|
+
agent: "coder",
|
|
142
|
+
stall: { repeats: 5 }
|
|
143
|
+
});
|
|
144
|
+
yield* chat.ask([
|
|
145
|
+
`Test file \`${item.id}\` passes on the legacy build and is ${item.verdict.class} on the target.`,
|
|
146
|
+
"The diagnostic below is your ONLY runtime evidence: fix the target code it points at (never",
|
|
147
|
+
"the test), do not rebuild or run tests yourself, and say `confidence: low` if you are",
|
|
148
|
+
"guessing without runtime confirmation.",
|
|
149
|
+
"",
|
|
150
|
+
diag
|
|
151
|
+
].join("\n"));
|
|
152
|
+
yield* reviewAndFixLoop({
|
|
153
|
+
reviewers: [adversarialReviewer, ...porting.pack.lenses],
|
|
154
|
+
reviewerService: context.reviewers[0] ?? context.reasoning,
|
|
155
|
+
coder: chat,
|
|
156
|
+
taskTitle: `port-tests ${item.id}`,
|
|
157
|
+
currentDiff: context.git.diffAll,
|
|
158
|
+
events,
|
|
159
|
+
maxRounds: 2,
|
|
160
|
+
votes: knobs.votes,
|
|
161
|
+
oracle: { diff: context.git.diffAll }
|
|
162
|
+
});
|
|
163
|
+
yield* Ref.update(finished, (set) => new Set([...set, item.id]));
|
|
164
|
+
return { note: item.verdict.class };
|
|
165
|
+
})
|
|
166
|
+
}).pipe(Effect.catchTag("Stalled", () => Effect.void));
|
|
167
|
+
const dirty = yield* context.git.uncommittedFiles;
|
|
168
|
+
if (dirty.length > 0) {
|
|
169
|
+
yield* context.git.commitAll(`port-tests: round ${round}, ${red.length} red file(s) worked`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
yield* events.publish(Info.make({
|
|
173
|
+
message: `port-tests: ${maxRounds} round(s) done, red files remain — see ${stateDir}`
|
|
174
|
+
}));
|
|
175
|
+
}));
|
|
176
|
+
});
|
|
177
|
+
runFlowMain(program);
|
package/kits/port/README.md
CHANGED
|
@@ -18,10 +18,15 @@ kits/port/
|
|
|
18
18
|
patterns/pitfalls-zig-rust.md syntactically alike, semantically different
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
Flows
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
Flows, in the order a port runs them: `port-guide` (audit the rulebook on a
|
|
22
|
+
few samples, behind an approval), `port-ledger` (classify the units the pack
|
|
23
|
+
names into `ledger.tsv`), `port-files` (drafts, with a pilot), `port-compile`
|
|
24
|
+
(diagnostics as a queue), `port-tests` (the differential tier). A pack for
|
|
25
|
+
another pair copies one of these and replaces the rulebook, the pitfall card,
|
|
26
|
+
`target:`, the diagnostics command, the ledger regex and the two test
|
|
27
|
+
commands.
|
|
24
28
|
|
|
25
|
-
| Pack | Source → target
|
|
26
|
-
| ---------- |
|
|
27
|
-
| `zig-rust` | Zig → Rust
|
|
29
|
+
| Pack | Source → target | Diagnostics | Ledger units |
|
|
30
|
+
| ---------- | ------------------------------- | ----------------------------------- | ------------------------ |
|
|
31
|
+
| `zig-rust` | Zig → Rust | `cargo check --message-format=json` | pointer and slice fields |
|
|
32
|
+
| `scala-ts` | Scala 3 / ZIO 2 → TS / Effect 4 | `tsc --pretty false` | classes, objects, traits |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Pack: scala-ts
|
|
2
|
+
|
|
3
|
+
source: scala
|
|
4
|
+
sources: .*\.scala$
|
|
5
|
+
exclude: (^|/)(target|node_modules|\.bloop|\.metals|project)/
|
|
6
|
+
target: {{dir}}/{{base}}.ts
|
|
7
|
+
comment: //
|
|
8
|
+
specs-dir: docs/port
|
|
9
|
+
features-dir: docs/port/features
|
|
10
|
+
|
|
11
|
+
## Gates
|
|
12
|
+
|
|
13
|
+
- typecheck: pnpm typecheck
|
|
14
|
+
- test: pnpm test
|
|
15
|
+
|
|
16
|
+
## Diagnostics
|
|
17
|
+
|
|
18
|
+
- command: pnpm exec tsc -p tsconfig.json --pretty false
|
|
19
|
+
- format: tsc
|
|
20
|
+
|
|
21
|
+
## Ledger
|
|
22
|
+
|
|
23
|
+
- unit: ^\s*(?:final\s+)?(?:case\s+)?(?:class|object|trait|enum)\s+(\w+)
|
|
24
|
+
- classes: SERVICE, LAYER, DATA, ERROR, STREAM, TEST, UTIL, UNKNOWN
|
|
25
|
+
- question: What kind of thing is this declaration in an Effect port? SERVICE (a ZIO service trait → Context.Service), LAYER (a ZLayer → Layer), DATA (a case class or enum → Schema.Class or a tagged union), ERROR (an error ADT → Schema.TaggedError), STREAM (ZStream producer → Stream), TEST (a spec → @effect/vitest), UTIL (pure helpers).
|
|
26
|
+
|
|
27
|
+
## Audit
|
|
28
|
+
|
|
29
|
+
- dimensions: error channel and variance, services and layers, data modelling and schemas, streams and resources, concurrency primitives, test idioms, what not to translate
|
|
30
|
+
|
|
31
|
+
## Review rules
|
|
32
|
+
|
|
33
|
+
`any`, unchecked casts, namespaces and a global `Error` in the error channel
|
|
34
|
+
are findings. Every expected failure is a `Schema.TaggedError`; every
|
|
35
|
+
replaceable dependency is a service with a layer. Relative imports carry `.ts`
|
|
36
|
+
extensions.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Scala/ZIO → TypeScript/Effect pitfalls — alike on the page, different at runtime
|
|
3
|
+
matches: .
|
|
4
|
+
tags: port, scala, zio, effect
|
|
5
|
+
---
|
|
6
|
+
1. **Type parameter order.** `ZIO[R, E, A]` is `Effect<A, E, R>`: a mechanical
|
|
7
|
+
copy of the parameter list silently swaps the requirement and the value.
|
|
8
|
+
2. **Equality.** `==` on a case class compares structure; `===` on an object
|
|
9
|
+
compares identity. Use `Equal.equals` or compare fields.
|
|
10
|
+
3. **Laziness.** A Scala `lazy val` or by-name parameter evaluates once or on
|
|
11
|
+
demand; a TypeScript expression evaluates where it is written. Wrap in a
|
|
12
|
+
thunk or `Effect.suspend`.
|
|
13
|
+
4. **Option.get and head.** Scala throws; TypeScript yields `undefined` and
|
|
14
|
+
carries on. Make the absence a typed failure.
|
|
15
|
+
5. **Integer division and overflow.** Scala `Int` wraps at 32 bits and `/`
|
|
16
|
+
truncates; JavaScript numbers are doubles. Use `Math.trunc` and check
|
|
17
|
+
ranges where the source relied on `Int`.
|
|
18
|
+
6. **String formatting and `toString`.** A Scala `toString` on a case class
|
|
19
|
+
prints its fields; the TypeScript default prints `[object Object]`.
|
|
20
|
+
7. **Implicit conversions and givens.** They vanish in the port; every one is
|
|
21
|
+
an explicit call or a service the draft must name.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
You are translating one Scala 3 / ZIO 2 file to TypeScript with Effect 4.
|
|
2
|
+
Read this whole document before writing any code. The first pass is a
|
|
3
|
+
**draft** `.ts` beside the `.scala`, same basename, that captures the logic
|
|
4
|
+
faithfully; it does **not** need to type-check. The compile pass makes it
|
|
5
|
+
type-check module by module.
|
|
6
|
+
|
|
7
|
+
## Ground rules
|
|
8
|
+
|
|
9
|
+
- Same module, same names (camelCase for values, PascalCase for types), same
|
|
10
|
+
order of declarations, same control flow. Reviewers diff the two files side
|
|
11
|
+
by side.
|
|
12
|
+
- Use Effect 4 as the repository uses it: `Effect.gen` for sequencing,
|
|
13
|
+
`Effect.fn` for named reusable operations, `Context.Service` and `Layer` for
|
|
14
|
+
replaceable dependencies, `Schema.Class` / `Schema.TaggedClass` for data,
|
|
15
|
+
`Schema.TaggedError` for expected failures. Never `any`, never an unchecked
|
|
16
|
+
cast, never a global `Error` as a domain error.
|
|
17
|
+
- Relative imports use `.ts` extensions; a module imports a contract, never a
|
|
18
|
+
sibling's internals.
|
|
19
|
+
- Leave `// TODO(port): <reason>` for anything you cannot translate
|
|
20
|
+
confidently. Do not guess.
|
|
21
|
+
- Do not translate build definitions, sbt plugins or Scala-only tooling;
|
|
22
|
+
note them as `// SKIPPED(port): <what>`.
|
|
23
|
+
|
|
24
|
+
## Type map
|
|
25
|
+
|
|
26
|
+
| Scala / ZIO | TypeScript / Effect |
|
|
27
|
+
| ------------------------------------ | ---------------------------------------------- |
|
|
28
|
+
| `ZIO[R, E, A]` | `Effect.Effect<A, E, R>` (note the order) |
|
|
29
|
+
| `UIO[A]` / `Task[A]` | `Effect.Effect<A>` / `Effect.Effect<A, UnknownException>` |
|
|
30
|
+
| `ZStream[R, E, A]` | `Stream.Stream<A, E, R>` |
|
|
31
|
+
| `ZLayer[RIn, E, ROut]` | `Layer.Layer<ROut, E, RIn>` |
|
|
32
|
+
| `trait Service` + `ZIO.service` | `Context.Service` class + `yield* Service` |
|
|
33
|
+
| `case class` | `Schema.Class` |
|
|
34
|
+
| `enum` / sealed trait ADT | `Schema.Union` of `Schema.TaggedClass` |
|
|
35
|
+
| `Option[A]` | optional property / `A \| undefined` |
|
|
36
|
+
| `Either[E, A]` | `Result` or `Effect.Effect<A, E>` |
|
|
37
|
+
| `Chunk[A]` | `ReadonlyArray<A>` |
|
|
38
|
+
| `Ref[A]`, `Queue[A]`, `Hub[A]` | `Ref`, `Queue`, `PubSub` |
|
|
39
|
+
| `Scope` / `acquireRelease` | `Scope` / `Effect.acquireRelease` |
|
|
40
|
+
| `Schedule` | `Schedule` |
|
|
41
|
+
| zio-json codecs | `Schema` with `Schema.fromJsonString` |
|
|
42
|
+
| ZIO Test `spec` / `test` | `@effect/vitest` `describe` / `it.effect` |
|
|
43
|
+
| `for` comprehension | `Effect.gen(function* () { … })` |
|
|
44
|
+
|
|
45
|
+
## Idiom map
|
|
46
|
+
|
|
47
|
+
- `ZIO.attempt(…)` → `Effect.try(…)`; `ZIO.fail(E)` → `Effect.fail(E)`; `.orDie` → `Effect.orDie`.
|
|
48
|
+
- `.provide(layer)` / `.provideSome` → `Effect.provide(layer)`; layer composition order follows `Layer.provide`.
|
|
49
|
+
- `.catchSome { case e: X => … }` → `Effect.catchTag("X", …)`.
|
|
50
|
+
- `zio.Duration` → `Duration` from effect; `ZIO.sleep` → `Effect.sleep`.
|
|
51
|
+
- Implicit parameters and givens become explicit arguments or services.
|
|
52
|
+
- `==` on case classes is structural; TypeScript needs `Equal.equals` or a field-by-field compare.
|
|
53
|
+
|
|
54
|
+
## Output format
|
|
55
|
+
|
|
56
|
+
End the file with the trailer the flow reads:
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
// PORT STATUS
|
|
60
|
+
// source: <path>.scala
|
|
61
|
+
// confidence: high | medium | low
|
|
62
|
+
// todos: <count of TODO(port)>
|
|
63
|
+
// notes: <one line>
|
|
64
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
files: \.ts$
|
|
3
|
+
---
|
|
4
|
+
Review a TypeScript draft against the rulebook as a port reviewer would, with
|
|
5
|
+
the Scala source in mind: the diff is the draft. Report as findings: a method,
|
|
6
|
+
field or case the source has that the draft lacks; `any`, an unchecked cast, a
|
|
7
|
+
namespace, or a global `Error` in an error channel; a service without a layer
|
|
8
|
+
where the source had a `ZLayer`; a relative import without a `.ts` extension;
|
|
9
|
+
a case class turned into a plain interface where a `Schema.Class` belongs;
|
|
10
|
+
`ZIO[R, E, A]` order kept as `Effect<R, E, A>`; a `for` comprehension turned
|
|
11
|
+
into nested callbacks where `Effect.gen` was the answer; a guessed translation
|
|
12
|
+
where a `TODO(port)` was honest. Do not report imports that cannot resolve
|
|
13
|
+
yet: the compile pass owns those.
|
|
@@ -17,6 +17,23 @@ features-dir: docs/port/features
|
|
|
17
17
|
- command: cargo check --workspace --message-format=json
|
|
18
18
|
- format: cargo
|
|
19
19
|
|
|
20
|
+
## Ledger
|
|
21
|
+
|
|
22
|
+
- unit: ^\s+(\w+):\s*(?:\?\*|\*|\[\]|\[\*\])
|
|
23
|
+
- classes: OWNED, SHARED, BORROW_PARAM, BORROW_FIELD, STATIC, JSC_BORROW, BACKREF, INTRUSIVE, FFI, ARENA, UNKNOWN
|
|
24
|
+
- question: Who owns the memory this pointer or slice field points at, and how long does it live? The Rust type follows from the class (OWNED → Box/Vec, BORROW_* → a reference with a lifetime, SHARED → Rc/Arc, FFI → a raw pointer).
|
|
25
|
+
|
|
26
|
+
## Differential
|
|
27
|
+
|
|
28
|
+
- tests: ^test/.*\.test\.(ts|js)$
|
|
29
|
+
- legacy: scripts/legacy-test.sh {{file}}
|
|
30
|
+
- target: scripts/target-test.sh {{file}}
|
|
31
|
+
- timeout: 60
|
|
32
|
+
|
|
33
|
+
## Audit
|
|
34
|
+
|
|
35
|
+
- dimensions: error model, allocator threading, collections and strings, comptime carry-over, pointer and ownership idioms, API shape, what not to translate
|
|
36
|
+
|
|
20
37
|
## Review rules
|
|
21
38
|
|
|
22
39
|
Every `unsafe` block carries a `// SAFETY: <why>` comment, and no new
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llm4ts/shell",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.35.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",
|
|
54
54
|
"@effect/platform-node-shared": "4.0.0",
|
|
55
|
-
"@llm4ts/core": "2.
|
|
56
|
-
"@llm4ts/flow": "2.
|
|
57
|
-
"@llm4ts/runner": "2.
|
|
55
|
+
"@llm4ts/core": "2.35.0",
|
|
56
|
+
"@llm4ts/flow": "2.35.0",
|
|
57
|
+
"@llm4ts/runner": "2.35.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"effect": "4.0.0"
|
package/src/Cli.ts
CHANGED
|
@@ -175,6 +175,36 @@ export const resolveFlow = Effect.fn("@llm4ts/shell/Cli.resolveFlow")(function*
|
|
|
175
175
|
return found.path
|
|
176
176
|
})
|
|
177
177
|
|
|
178
|
+
export interface RunFlags {
|
|
179
|
+
readonly verbose: boolean
|
|
180
|
+
readonly roster: Option.Option<string>
|
|
181
|
+
readonly executors: Option.Option<string>
|
|
182
|
+
readonly pack: Option.Option<string>
|
|
183
|
+
readonly ui: "classic" | "tree"
|
|
184
|
+
readonly transcript: boolean
|
|
185
|
+
readonly otel: boolean
|
|
186
|
+
readonly otelContent: Option.Option<"off" | "on" | "full">
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** The flow child's environment: `base` with what the `run` flags forward on top. */
|
|
190
|
+
export const runEnvironmentFrom = (
|
|
191
|
+
flags: RunFlags,
|
|
192
|
+
flowPath: string,
|
|
193
|
+
base: Readonly<Record<string, string | undefined>>
|
|
194
|
+
): Record<string, string | undefined> => ({
|
|
195
|
+
...base,
|
|
196
|
+
...(flags.verbose ? { LLM4TS_VERBOSITY: "verbose" } : {}),
|
|
197
|
+
...(Option.isSome(flags.roster) ? { LLM4TS_ROSTER: flags.roster.value } : {}),
|
|
198
|
+
...(Option.isSome(flags.executors) ? { LLM4TS_EXECUTORS: flags.executors.value } : {}),
|
|
199
|
+
...(Option.isSome(flags.pack) ? { LLM4TS_PACK: flags.pack.value } : {}),
|
|
200
|
+
...(flags.ui === "tree" ? { LLM4TS_UI: "tree" } : {}),
|
|
201
|
+
...(flags.transcript ? { LLM4TS_TRANSCRIPT: "on" } : {}),
|
|
202
|
+
...(flags.otel ? { LLM4TS_OTEL: "on" } : {}),
|
|
203
|
+
...(Option.isSome(flags.otelContent) ? { LLM4TS_OTEL_CONTENT: flags.otelContent.value } : {}),
|
|
204
|
+
// The flow's name, for its spans (ADR 0026).
|
|
205
|
+
LLM4TS_FLOW: basename(flowPath, extname(flowPath))
|
|
206
|
+
})
|
|
207
|
+
|
|
178
208
|
const runCommand = Command.make(
|
|
179
209
|
"run",
|
|
180
210
|
{
|
|
@@ -230,36 +260,19 @@ const runCommand = Command.make(
|
|
|
230
260
|
Flag.withDescription(
|
|
231
261
|
"Export spans to a local Arize Phoenix (http://localhost:6006) unless OTEL_EXPORTER_OTLP_ENDPOINT points elsewhere; forwarded as LLM4TS_OTEL (ADR 0026)"
|
|
232
262
|
)
|
|
263
|
+
),
|
|
264
|
+
otelContent: Flag.Literals("otel-content", ["off", "on", "full"]).pipe(
|
|
265
|
+
Flag.optional,
|
|
266
|
+
Flag.withDescription(
|
|
267
|
+
"What exported spans carry besides usage: `on` adds prompts, replies and tool I/O (redacted, capped), `full` the system prompt too; forwarded as LLM4TS_OTEL_CONTENT (off by default, ADR 0026)"
|
|
268
|
+
)
|
|
233
269
|
)
|
|
234
270
|
},
|
|
235
271
|
(config) =>
|
|
236
272
|
Effect.gen(function* () {
|
|
237
273
|
const tiers = shellTierPaths()
|
|
238
274
|
const flowPath = yield* resolveFlow(config.flow, tiers)
|
|
239
|
-
const environment
|
|
240
|
-
if (config.verbose) {
|
|
241
|
-
environment.LLM4TS_VERBOSITY = "verbose"
|
|
242
|
-
}
|
|
243
|
-
if (config.roster._tag === "Some") {
|
|
244
|
-
environment.LLM4TS_ROSTER = config.roster.value
|
|
245
|
-
}
|
|
246
|
-
if (config.executors._tag === "Some") {
|
|
247
|
-
environment.LLM4TS_EXECUTORS = config.executors.value
|
|
248
|
-
}
|
|
249
|
-
if (config.pack._tag === "Some") {
|
|
250
|
-
environment.LLM4TS_PACK = config.pack.value
|
|
251
|
-
}
|
|
252
|
-
if (config.ui === "tree") {
|
|
253
|
-
environment.LLM4TS_UI = "tree"
|
|
254
|
-
}
|
|
255
|
-
if (config.transcript) {
|
|
256
|
-
environment.LLM4TS_TRANSCRIPT = "on"
|
|
257
|
-
}
|
|
258
|
-
if (config.otel) {
|
|
259
|
-
environment.LLM4TS_OTEL = "on"
|
|
260
|
-
}
|
|
261
|
-
// The flow's name, for its spans (ADR 0026).
|
|
262
|
-
environment.LLM4TS_FLOW = basename(flowPath, extname(flowPath))
|
|
275
|
+
const environment = runEnvironmentFrom(config, flowPath, process.env)
|
|
263
276
|
const exitCode = yield* launchFlow({
|
|
264
277
|
flowPath,
|
|
265
278
|
taskArgs: [
|