@llm4ts/runner 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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKrE,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhG,eAAO,MAAM,cAAc,GACzB,MAAM,aAAa,CAAC,MAAM,CAAC,EAC3B,cAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,EACvE,kBAAyB,EACzB,gBAAgB,MAAM,KACrB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAkC7C,CAAA"}
1
+ {"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKrE,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhG,eAAO,MAAM,cAAc,GACzB,MAAM,aAAa,CAAC,MAAM,CAAC,EAC3B,cAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,EACvE,kBAAyB,EACzB,gBAAgB,MAAM,KACrB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAiC7C,CAAA"}
package/dist/Cli.js CHANGED
@@ -1,4 +1,3 @@
1
- import { join } from "node:path";
2
1
  import * as Effect from "effect/Effect";
3
2
  import { FlowLlmError } from "@llm4ts/flow/FlowError";
4
3
  import { AssistantMessage } from "@llm4ts/flow/FlowEvents";
@@ -28,7 +27,6 @@ export const makeCliProgram = (argv, environment = process.env, workspace = proc
28
27
  userPrompt: prompt,
29
28
  coder,
30
29
  verbosity: parseVerbosity(environment.LLM4TS_VERBOSITY),
31
- tracePath: join(workDir, ".llm4ts", `trace-${timestamp}.jsonl`),
32
30
  runId: timestamp.toString()
33
31
  }, (context) => collect(context.coder.executeStream(prompt)).pipe(Effect.mapError(FlowLlmError.from), Effect.tap((response) => context.events.publish(AssistantMessage.make({ text: response.content }))), Effect.asVoid));
34
32
  });
package/dist/Cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAoB,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAA2B,EAC3B,cAA4D,OAAO,CAAC,GAAG,EACvE,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,EACzB,aAAsB,EACwB,EAAE;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QACjE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACzD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC;YACpC,GAAG,QAAQ;YACX,UAAU,EAAE,OAAO;SACpB,CAAC,CAAA;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,KAAK,CAAC,CAAC,OAAO,CACZ;YACE,OAAO;YACP,SAAS;YACT,UAAU,EAAE,MAAM;YAClB,KAAK;YACL,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC;YACvD,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,SAAS,QAAQ,CAAC;YAC/D,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE;SAC5B,EACD,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAClC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAC1E,EACD,MAAM,CAAC,MAAM,CACd,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAoB,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAA2B,EAC3B,cAA4D,OAAO,CAAC,GAAG,EACvE,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,EACzB,aAAsB,EACwB,EAAE;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QACjE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACzD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC;YACpC,GAAG,QAAQ;YACX,UAAU,EAAE,OAAO;SACpB,CAAC,CAAA;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,KAAK,CAAC,CAAC,OAAO,CACZ;YACE,OAAO;YACP,SAAS;YACT,UAAU,EAAE,MAAM;YAClB,KAAK;YACL,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC;YACvD,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE;SAC5B,EACD,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAClC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAC1E,EACD,MAAM,CAAC,MAAM,CACd,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -10,6 +10,7 @@ export declare const grok: CliConnectorConfig;
10
10
  export declare const cursor: CliConnectorConfig;
11
11
  export declare const opencode: CliConnectorConfig;
12
12
  export declare const lmStudio: ApiConnectorConfig;
13
+ export declare const mlxLm: ApiConnectorConfig;
13
14
  export declare const openAI: ApiConnectorConfig;
14
15
  export declare const anthropic: ApiConnectorConfig;
15
16
  export declare const geminiApi: ApiConnectorConfig;
@@ -29,4 +30,10 @@ export declare const coderIds: ReadonlyArray<string>;
29
30
  export declare const coderFor: (name: string) => CliConnectorConfig | undefined;
30
31
  export declare const coderFromEnv: (env?: Readonly<Record<string, string | undefined>>) => CliConnectorConfig;
31
32
  export declare const coderFromEnvironment: (environment?: Readonly<Record<string, string | undefined>> | undefined) => Effect.Effect<CliConnectorConfig, ScriptUsage, never>;
33
+ /**
34
+ * The judgment seat from the environment (ADR 0017): `LLM4TS_JUDGMENT_PROVIDER`
35
+ * names an API provider the way `LLM4TS_PROVIDER` does, `LLM4TS_JUDGMENT_MODEL`
36
+ * its model. Unset, the runner falls back to the reasoning seat.
37
+ */
38
+ export declare const judgmentConnectorFromEnvironment: (environment?: Readonly<Record<string, string | undefined>> | undefined) => Effect.Effect<ApiConnectorConfig | undefined, ScriptUsage, never>;
32
39
  //# sourceMappingURL=Connectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Connectors.d.ts","sourceRoot":"","sources":["../src/Connectors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,eAAO,MAAM,MAAM,oBAKjB,CAAA;AAEF,eAAO,MAAM,KAAK,oBAKhB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,EAAE,oBAEb,CAAA;AAEF,eAAO,MAAM,WAAW,oBAKtB,CAAA;AAEF,eAAO,MAAM,IAAI,oBAEf,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,QAAQ,oBAEnB,CAAA;AAEF,eAAO,MAAM,QAAQ,oBAGnB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,SAAS,oBAEpB,CAAA;AAEF,eAAO,MAAM,SAAS,oBAEpB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,IAAI,oBAGf,CAAA;AAEF,wBAAgB,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAA;AACxF,wBAAgB,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAA;AAUxF,eAAO,MAAM,aAAa,GAAI,QAAQ,kBAAkB,EAAE,WAAW,MAAM,KAAG,kBAI1E,CAAA;AAEJ,eAAO,MAAM,eAAe,GAC1B,QAAQ,kBAAkB,EAC1B,aAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAC5C,kBAOC,CAAA;AAEJ,eAAO,MAAM,UAAU,GAAI,QAAQ,kBAAkB,KAAG,kBACA,CAAA;AAMxD,eAAO,MAAM,UAAU,GAAI,QAAQ,kBAAkB,KAAG,kBACe,CAAA;AAEvE,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,kBAAkB,EAC1B,SAAS,MAAM,KACd,kBAIC,CAAA;AAkBJ,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,kBAAkB,EAC1B,cAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,KACtE,kBAYF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,eAAe,EACvB,SAAS,MAAM,EACf,cAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,KACtE,eAG8D,CAAA;AAEjE,eAAO,MAAM,2BAA2B,mIAwCtC,CAAA;AAwBF,eAAO,MAAM,QAAQ,EAAE,aAAa,CAAC,MAAM,CAA4C,CAAA;AAEvF,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,kBAAkB,GAAG,SACtB,CAAA;AAKvC,eAAO,MAAM,YAAY,GACvB,MAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,KAC9D,kBAGF,CAAA;AAKD,eAAO,MAAM,oBAAoB,mIAehC,CAAA"}
1
+ {"version":3,"file":"Connectors.d.ts","sourceRoot":"","sources":["../src/Connectors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,eAAO,MAAM,MAAM,oBAKjB,CAAA;AAEF,eAAO,MAAM,KAAK,oBAKhB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,EAAE,oBAEb,CAAA;AAEF,eAAO,MAAM,WAAW,oBAKtB,CAAA;AAEF,eAAO,MAAM,IAAI,oBAEf,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,QAAQ,oBAEnB,CAAA;AAEF,eAAO,MAAM,QAAQ,oBAGnB,CAAA;AAEF,eAAO,MAAM,KAAK,oBAGhB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,SAAS,oBAEpB,CAAA;AAEF,eAAO,MAAM,SAAS,oBAEpB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAEjB,CAAA;AAEF,eAAO,MAAM,IAAI,oBAGf,CAAA;AAEF,wBAAgB,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAA;AACxF,wBAAgB,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAA;AAUxF,eAAO,MAAM,aAAa,GAAI,QAAQ,kBAAkB,EAAE,WAAW,MAAM,KAAG,kBAI1E,CAAA;AAEJ,eAAO,MAAM,eAAe,GAC1B,QAAQ,kBAAkB,EAC1B,aAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAC5C,kBAOC,CAAA;AAEJ,eAAO,MAAM,UAAU,GAAI,QAAQ,kBAAkB,KAAG,kBACA,CAAA;AAMxD,eAAO,MAAM,UAAU,GAAI,QAAQ,kBAAkB,KAAG,kBACe,CAAA;AAEvE,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,kBAAkB,EAC1B,SAAS,MAAM,KACd,kBAIC,CAAA;AAkBJ,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,kBAAkB,EAC1B,cAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,KACtE,kBAYF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,eAAe,EACvB,SAAS,MAAM,EACf,cAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,KACtE,eAG8D,CAAA;AAEjE,eAAO,MAAM,2BAA2B,mIA4CtC,CAAA;AAwBF,eAAO,MAAM,QAAQ,EAAE,aAAa,CAAC,MAAM,CAA4C,CAAA;AAEvF,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,kBAAkB,GAAG,SACtB,CAAA;AAKvC,eAAO,MAAM,YAAY,GACvB,MAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,KAC9D,kBAGF,CAAA;AAKD,eAAO,MAAM,oBAAoB,mIAehC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,+IAc3C,CAAA"}
@@ -41,6 +41,10 @@ export const lmStudio = ApiConnectorConfig.make({
41
41
  connectorId: ConnectorIds.LmStudio,
42
42
  baseUrl: "http://localhost:1234/v1"
43
43
  });
44
+ export const mlxLm = ApiConnectorConfig.make({
45
+ connectorId: ConnectorIds.MlxLm,
46
+ baseUrl: "http://localhost:8080"
47
+ });
44
48
  export const openAI = ApiConnectorConfig.make({
45
49
  connectorId: ConnectorIds.OpenAI
46
50
  });
@@ -129,6 +133,10 @@ export const apiConnectorFromEnvironment = Effect.fn("@llm4ts/runner/Connectors.
129
133
  return lmStudio;
130
134
  case "ollama":
131
135
  return ollama;
136
+ case "mlx-lm":
137
+ case "mlxlm":
138
+ case "mlx":
139
+ return mlxLm;
132
140
  default:
133
141
  return undefined;
134
142
  }
@@ -136,7 +144,7 @@ export const apiConnectorFromEnvironment = Effect.fn("@llm4ts/runner/Connectors.
136
144
  if (preset === undefined) {
137
145
  return yield* ScriptUsage.make({
138
146
  message: `unknown LLM4TS_PROVIDER '${provider}'; expected ` +
139
- "mock|openai|anthropic|gemini|lm-studio|ollama"
147
+ "mock|openai|anthropic|gemini|lm-studio|ollama|mlx-lm"
140
148
  });
141
149
  }
142
150
  const model = environment.LLM4TS_MODEL?.trim();
@@ -187,4 +195,20 @@ export const coderFromEnvironment = Effect.fn("@llm4ts/runner/Connectors.coderFr
187
195
  })
188
196
  : preset;
189
197
  });
198
+ /**
199
+ * The judgment seat from the environment (ADR 0017): `LLM4TS_JUDGMENT_PROVIDER`
200
+ * names an API provider the way `LLM4TS_PROVIDER` does, `LLM4TS_JUDGMENT_MODEL`
201
+ * its model. Unset, the runner falls back to the reasoning seat.
202
+ */
203
+ export const judgmentConnectorFromEnvironment = Effect.fn("@llm4ts/runner/Connectors.judgmentConnectorFromEnvironment")(function* (environment = process.env) {
204
+ const provider = environment.LLM4TS_JUDGMENT_PROVIDER?.trim();
205
+ if (provider === undefined || provider.length === 0) {
206
+ return undefined;
207
+ }
208
+ return yield* apiConnectorFromEnvironment({
209
+ ...environment,
210
+ LLM4TS_PROVIDER: provider,
211
+ LLM4TS_MODEL: environment.LLM4TS_JUDGMENT_MODEL
212
+ });
213
+ });
190
214
  //# sourceMappingURL=Connectors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Connectors.js","sourceRoot":"","sources":["../src/Connectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Connectors.js","sourceRoot":"","sources":["../src/Connectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type * as DateTime from "effect/DateTime";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Schema from "effect/Schema";
4
+ import { CostReport } from "@llm4ts/flow/CostReport";
5
+ import type { PlainFileStoreShape } from "@llm4ts/flow/Persistence";
6
+ /**
7
+ * `llm4ts costs`: the budgeting view over every trace the runner wrote.
8
+ *
9
+ * Traces, not the cost ledger, are the source: a run can span hours and only
10
+ * the trace carries a timestamp per token report, which the hourly buckets
11
+ * need. One unreadable trace is reported and skipped rather than failing the
12
+ * whole report — the other runs still answer the question.
13
+ */
14
+ export declare const TraceDirectoryName = ".llm4ts";
15
+ /** `trace-<timestamp>.jsonl` as the runner writes it, or a prefixed variant like `loop-trace-…`. */
16
+ export declare const isTraceFileName: (name: string) => boolean;
17
+ export declare const nodeListTraces: (directory: string) => ReadonlyArray<string>;
18
+ export interface CostsOptions {
19
+ /** Repositories whose `.llm4ts/` traces are read. */
20
+ readonly repos: ReadonlyArray<string>;
21
+ /** Drop token reports before this epoch millisecond. */
22
+ readonly since?: number;
23
+ readonly timeZone?: DateTime.TimeZone;
24
+ readonly runsPerDay?: number;
25
+ }
26
+ export interface CostsDependencies {
27
+ readonly files: PlainFileStoreShape;
28
+ /** Absolute trace paths under one `.llm4ts/` directory. */
29
+ readonly listTraces: (directory: string) => ReadonlyArray<string>;
30
+ }
31
+ export declare const nodeCostsDependencies: () => CostsDependencies;
32
+ declare const SkippedTrace_base: Schema.Class<SkippedTrace, Schema.Struct<{
33
+ readonly path: Schema.String;
34
+ readonly reason: Schema.String;
35
+ }>, {}>;
36
+ export declare class SkippedTrace extends SkippedTrace_base {
37
+ }
38
+ declare const CostsResult_base: Schema.Class<CostsResult, Schema.Struct<{
39
+ readonly report: typeof CostReport;
40
+ readonly traces: Schema.Int;
41
+ readonly skipped: Schema.$Array<typeof SkippedTrace>;
42
+ }>, {}>;
43
+ export declare class CostsResult extends CostsResult_base {
44
+ }
45
+ export declare const makeCostsProgram: (options: CostsOptions, dependencies?: CostsDependencies | undefined) => Effect.Effect<CostsResult, never, never>;
46
+ export declare const renderCostsResult: (result: CostsResult) => string;
47
+ export {};
48
+ //# sourceMappingURL=Costs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Costs.d.ts","sourceRoot":"","sources":["../src/Costs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,UAAU,EAKX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAInE;;;;;;;GAOG;AAEH,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAE3C,oGAAoG;AACpG,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,OAAiD,CAAA;AAEhG,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,KAAG,aAAa,CAAC,MAAM,CAM/D,CAAA;AAER,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACrC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAA;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,CAAA;CAClE;AAED,eAAO,MAAM,qBAAqB,QAAO,iBAGvC,CAAA;;;;;AAEF,qBAAa,YAAa,SAAQ,iBAGhC;CAAG;;;;;;AAEL,qBAAa,WAAY,SAAQ,gBAI/B;CAAG;AAEL,eAAO,MAAM,gBAAgB,mHAgC3B,CAAA;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,WAAW,KAAG,MAWvD,CAAA"}
package/dist/Costs.js ADDED
@@ -0,0 +1,76 @@
1
+ import { existsSync, readdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Schema from "effect/Schema";
5
+ import { CostReport, buildCostReport, renderCostReport, usageSamplesFromTrace } from "@llm4ts/flow/CostReport";
6
+ import { describeFlowError } from "@llm4ts/flow/FlowError";
7
+ import { readTrace } from "@llm4ts/flow/Replay";
8
+ import { nodePlainFileStore } from "./NodePlainFileStore.js";
9
+ /**
10
+ * `llm4ts costs`: the budgeting view over every trace the runner wrote.
11
+ *
12
+ * Traces, not the cost ledger, are the source: a run can span hours and only
13
+ * the trace carries a timestamp per token report, which the hourly buckets
14
+ * need. One unreadable trace is reported and skipped rather than failing the
15
+ * whole report — the other runs still answer the question.
16
+ */
17
+ export const TraceDirectoryName = ".llm4ts";
18
+ /** `trace-<timestamp>.jsonl` as the runner writes it, or a prefixed variant like `loop-trace-…`. */
19
+ export const isTraceFileName = (name) => /(?:^|-)trace-\d+\.jsonl$/u.test(name);
20
+ export const nodeListTraces = (directory) => existsSync(directory)
21
+ ? readdirSync(directory)
22
+ .filter(isTraceFileName)
23
+ .sort()
24
+ .map((name) => join(directory, name))
25
+ : [];
26
+ export const nodeCostsDependencies = () => ({
27
+ files: nodePlainFileStore,
28
+ listTraces: nodeListTraces
29
+ });
30
+ export class SkippedTrace extends Schema.Class("SkippedTrace")({
31
+ path: Schema.String,
32
+ reason: Schema.String
33
+ }) {
34
+ }
35
+ export class CostsResult extends Schema.Class("CostsResult")({
36
+ report: CostReport,
37
+ traces: Schema.Int,
38
+ skipped: Schema.Array(SkippedTrace)
39
+ }) {
40
+ }
41
+ export const makeCostsProgram = Effect.fn("@llm4ts/runner/Costs.make")(function* (options, dependencies = nodeCostsDependencies()) {
42
+ const paths = options.repos.flatMap((repo) => dependencies.listTraces(join(repo, TraceDirectoryName)));
43
+ const skipped = [];
44
+ const samples = [];
45
+ for (const path of paths) {
46
+ const lines = yield* readTrace(dependencies.files, path).pipe(Effect.catch((error) => Effect.sync(() => {
47
+ skipped.push(SkippedTrace.make({ path, reason: describeFlowError(error) }));
48
+ return [];
49
+ })));
50
+ for (const sample of usageSamplesFromTrace(lines)) {
51
+ if (options.since === undefined || sample.at >= options.since) {
52
+ samples.push(sample);
53
+ }
54
+ }
55
+ }
56
+ return CostsResult.make({
57
+ report: buildCostReport(samples, {
58
+ ...(options.timeZone === undefined ? {} : { timeZone: options.timeZone }),
59
+ ...(options.runsPerDay === undefined ? {} : { runsPerDay: options.runsPerDay })
60
+ }),
61
+ traces: paths.length,
62
+ skipped
63
+ });
64
+ });
65
+ export const renderCostsResult = (result) => {
66
+ const skipped = result.skipped.length === 0
67
+ ? []
68
+ : ["", ...result.skipped.map((entry) => `skipped ${entry.path}: ${entry.reason}`)];
69
+ return [
70
+ renderCostReport(result.report),
71
+ "",
72
+ `traces read: ${result.traces - result.skipped.length} of ${result.traces}`,
73
+ ...skipped
74
+ ].join("\n");
75
+ };
76
+ //# sourceMappingURL=Costs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Costs.js","sourceRoot":"","sources":["../src/Costs.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type * as Scope from "effect/Scope";
3
3
  import type { ConnectorConfig } from "@llm4ts/core/ConnectorConfig";
4
4
  import type { ConnectorRegistryShape } from "@llm4ts/core/ConnectorRegistry";
5
5
  import type { HttpClientShape } from "@llm4ts/core/HttpClient";
6
+ import type { JudgmentBackend } from "@llm4ts/core/judgment/Schemas";
6
7
  import type { ProcessExecutorShape } from "@llm4ts/core/ProcessExecutor";
7
8
  import type { TemporaryFilesShape } from "@llm4ts/core/TemporaryFiles";
8
9
  import type { GeminiCliExecutorShape } from "@llm4ts/core/providers/GeminiCliProvider";
@@ -11,6 +12,7 @@ import { type CostBudget } from "@llm4ts/flow/CostLedger";
11
12
  import { FlowLlmError, type FlowError } from "@llm4ts/flow/FlowError";
12
13
  import { type FlowEventHub } from "@llm4ts/flow/FlowEvents";
13
14
  import { type FlowContextShape } from "@llm4ts/flow/FlowContext";
15
+ import { type JudgmentLogShape } from "@llm4ts/flow/JudgmentLog";
14
16
  import type { PlainFileStoreShape } from "@llm4ts/flow/Persistence";
15
17
  import { type TerminalSurface, type Verbosity } from "./Terminal.ts";
16
18
  export interface FlowRunnerDependencies {
@@ -19,6 +21,8 @@ export interface FlowRunnerDependencies {
19
21
  readonly files: PlainFileStoreShape;
20
22
  /** pi's own model config (ADR 0016), injectable so a test never reads $HOME. */
21
23
  readonly readPiModelsJson?: () => string | undefined;
24
+ /** For the hosted TypeSafe judgment backend; defaults to the Node client. */
25
+ readonly http?: HttpClientShape;
22
26
  }
23
27
  export interface NodeConnectorDependencies {
24
28
  readonly http: HttpClientShape;
@@ -34,7 +38,36 @@ export interface FlowRunnerOptions {
34
38
  readonly coder: ConnectorConfig;
35
39
  readonly reasoning?: ConnectorConfig;
36
40
  readonly reviewers?: ReadonlyArray<ConnectorConfig>;
41
+ /**
42
+ * The seat typed judgments run on (ADR 0017). Defaults to the reasoning
43
+ * seat; point it at a small non-thinking model for one-token label scoring.
44
+ */
45
+ readonly judgment?: ConnectorConfig;
46
+ /**
47
+ * `llm` (default) answers on the judgment seat; `typesafe` uses the hosted
48
+ * Jev model with `TYPESAFE_API_KEY` from the environment. Unset, the
49
+ * environment's `LLM4TS_JUDGMENT_BACKEND` decides, then `llm`.
50
+ */
51
+ readonly judgmentBackend?: JudgmentBackend;
52
+ /** Persist judgment observations under workDir/.llm4ts/judgments; off by default. */
53
+ readonly judgmentLog?: boolean;
54
+ /**
55
+ * Where the run's trace goes. Default `workDir/.llm4ts/trace-<start ms>.jsonl`
56
+ * while `persistRun` holds.
57
+ */
37
58
  readonly tracePath?: string;
59
+ /**
60
+ * Append-only ledger (`CostLedger`) that receives one `CostRecord` per run
61
+ * that accrued usage, so `llm4ts costs` and budgets can look across runs.
62
+ * Default `workDir/.llm4ts/costs.jsonl` while `persistRun` holds.
63
+ */
64
+ readonly costLedgerPath?: string;
65
+ /**
66
+ * `false` writes neither the trace nor the ledger unless their paths are
67
+ * given explicitly. Default `true`: every run leaves its record under
68
+ * `workDir/.llm4ts/`, which `llm4ts costs` and replay read back.
69
+ */
70
+ readonly persistRun?: boolean;
38
71
  readonly runId?: string;
39
72
  readonly verbosity?: Verbosity;
40
73
  readonly surface?: TerminalSurface;
@@ -53,6 +86,8 @@ export interface FlowRunnerBundle {
53
86
  readonly events: FlowEventHub;
54
87
  /** The run's cost tracker, already subscribed to `events`. */
55
88
  readonly tracker: CostTracker;
89
+ readonly runId: string;
90
+ readonly judgmentLog?: JudgmentLogShape;
56
91
  }
57
92
  export declare const makeFlowRunnerContext: (options: FlowRunnerOptions, dependencies: FlowRunnerDependencies) => Effect.Effect<FlowRunnerBundle, import("@llm4ts/flow/FlowError").PersistenceError | import("@llm4ts/flow/FlowError").PlanParseError | import("@llm4ts/flow/FlowError").UnsupportedSchemaVersion | import("@llm4ts/flow/FlowError").WorkspacePathError | import("@llm4ts/flow/FlowError").WorkspaceLimitError | import("@llm4ts/flow/FlowError").WorkspaceIoError | import("@llm4ts/flow/FlowError").FlowAborted | import("@llm4ts/flow/FlowError").ProcessError | FlowLlmError | import("@llm4ts/flow/FlowError").FlowCapabilityDenied | import("@llm4ts/flow/FlowError").ColumnNotFound | import("@llm4ts/flow/FlowError").BudgetExceeded | import("@llm4ts/flow/FlowError").StoryPlanInvalid | import("@llm4ts/flow/FlowError").PerimeterViolation | import("@llm4ts/flow/FlowError").MissingDependency | import("@llm4ts/flow/FlowError").MergeConflict | import("@llm4ts/flow/FlowError").StoryFailed | import("@llm4ts/flow/FlowError").DecisionsInvalid | import("@llm4ts/flow/FlowError").OpenPointsPending | import("@llm4ts/flow/FlowError").ContractConflict, Scope.Scope>;
58
93
  export declare const runWithBundle: <A, E, R>(bundle: FlowRunnerBundle, options: FlowRunnerOptions, body: (context: FlowContextShape) => Effect.Effect<A, E, R>, dependencies?: FlowRunnerDependencies | undefined) => Effect.Effect<A, import("@llm4ts/flow/FlowError").PersistenceError | import("@llm4ts/flow/FlowError").PlanParseError | import("@llm4ts/flow/FlowError").UnsupportedSchemaVersion | import("@llm4ts/flow/FlowError").WorkspacePathError | import("@llm4ts/flow/FlowError").WorkspaceLimitError | import("@llm4ts/flow/FlowError").WorkspaceIoError | import("@llm4ts/flow/FlowError").FlowAborted | import("@llm4ts/flow/FlowError").ProcessError | FlowLlmError | import("@llm4ts/flow/FlowError").FlowCapabilityDenied | import("@llm4ts/flow/FlowError").ColumnNotFound | import("@llm4ts/flow/FlowError").BudgetExceeded | import("@llm4ts/flow/FlowError").StoryPlanInvalid | import("@llm4ts/flow/FlowError").PerimeterViolation | import("@llm4ts/flow/FlowError").MissingDependency | import("@llm4ts/flow/FlowError").MergeConflict | import("@llm4ts/flow/FlowError").StoryFailed | import("@llm4ts/flow/FlowError").DecisionsInvalid | import("@llm4ts/flow/FlowError").OpenPointsPending | import("@llm4ts/flow/FlowError").ContractConflict | E, Scope.Scope | R>;
@@ -1 +1 @@
1
- {"version":3,"file":"FlowRunner.d.ts","sourceRoot":"","sources":["../src/FlowRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlowRunner.d.ts","sourceRoot":"","sources":["../src/FlowRunner.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,22 @@
1
+ import { join } from "node:path";
1
2
  import * as Clock from "effect/Clock";
2
3
  import * as Effect from "effect/Effect";
3
4
  import { CliConnectorConfig, defaultReasoningConfig } from "@llm4ts/core/ConnectorConfig";
5
+ import { LlmJudgmentConfig, makeLlmJudgment } from "@llm4ts/core/judgment/LlmJudgment";
6
+ import { makeTypeSafeJudgment } from "@llm4ts/core/judgment/TypeSafeJudgment";
7
+ import * as Redacted from "effect/Redacted";
4
8
  import { createConnectorRegistry } from "@llm4ts/core/providers/ConnectorFactories";
5
9
  import { ConnectorIds } from "@llm4ts/core/Models";
6
10
  import { ProviderError } from "@llm4ts/core/Errors";
7
11
  import { makeCostTracker } from "@llm4ts/flow/CostTracker";
8
12
  import { runGeminiAcpBridge } from "./NodeGeminiAcpBridge.js";
9
13
  import { bridgeModelProblem, defaultReadPiModelsJson, geminiBridgePort, resolveBridgeModel } from "./PiModels.js";
10
- import { checkCostBudget, makeCostRecord } from "@llm4ts/flow/CostLedger";
14
+ import { appendCostRecord, checkCostBudget, CostLedgerFileName, makeCostRecord } from "@llm4ts/flow/CostLedger";
11
15
  import { FlowLlmError, describeFlowError } from "@llm4ts/flow/FlowError";
12
- import { FlowEvents, FlowEventsValues, makeFlowEventHub } from "@llm4ts/flow/FlowEvents";
16
+ import { FlowEvents, FlowEventsValues, Info, TokensUsed, makeFlowEventHub } from "@llm4ts/flow/FlowEvents";
13
17
  import { FlowContext } from "@llm4ts/flow/FlowContext";
14
18
  import { makeFlowRecorder } from "@llm4ts/flow/FlowRecorder";
19
+ import { makeJudgmentLog } from "@llm4ts/flow/JudgmentLog";
15
20
  import { makeGitHubTool } from "@llm4ts/flow/GitHubTool";
16
21
  import { makeGitTool } from "@llm4ts/flow/GitTool";
17
22
  import { makeTransientRetry } from "@llm4ts/flow/TransientRetry";
@@ -30,6 +35,7 @@ const describeSeat = (config) => {
30
35
  export const nodeFlowRunnerDependencies = () => ({
31
36
  process: nodeProcessExecutor,
32
37
  files: nodePlainFileStore,
38
+ http: nodeHttpClient,
33
39
  registry: createConnectorRegistry({
34
40
  http: nodeHttpClient,
35
41
  process: nodeProcessExecutor,
@@ -82,6 +88,12 @@ const geminiBridgeSeats = Effect.fn("@llm4ts/runner/FlowRunner.geminiBridgeSeats
82
88
  });
83
89
  export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeContext")(function* (options, dependencies) {
84
90
  const events = yield* makeFlowEventHub();
91
+ const runId = options.runId ?? `run-${(yield* Clock.currentTimeMillis).toString()}`;
92
+ const judgmentLog = options.judgmentLog === true
93
+ ? yield* makeJudgmentLog({ files: dependencies.files, root: options.workDir, runId })
94
+ : undefined;
95
+ if (judgmentLog !== undefined)
96
+ yield* judgmentLog.consume(events);
85
97
  const tracker = yield* makeCostTracker();
86
98
  yield* tracker.consume(events);
87
99
  const reasoning = defaultReasoningConfig(options.coder, options.reasoning);
@@ -107,16 +119,53 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
107
119
  // The spread keeps everything the connector carries beyond the service
108
120
  // methods — notably `capabilities`, which the flow context exposes.
109
121
  const resolveSeat = (configuration) => dependencies.registry.resolve(configuration).pipe(Effect.mapError(FlowLlmError.from), Effect.flatMap((connector) => announceReadOnlyGrade(configuration, connector).pipe(Effect.andThen(Effect.map(resilient(connector), (retrying) => ({ ...connector, ...retrying }))))));
122
+ // Judgment usage is metered like any chat (ADR 0005 amendment) and every
123
+ // fallback from label scoring to the verbalized path is announced.
124
+ const judgmentHooks = {
125
+ onUsage: (usage, model) => events.publish(new TokensUsed({ agent: "judgment", usage, ...(model === undefined ? {} : { model }) })),
126
+ onFallback: (key, reason) => events.publish(new Info({ message: `judgment '${key}' fell back to verbalized scoring: ${reason}` }))
127
+ };
128
+ const judgmentFor = (seat, seatConfig, environment) => {
129
+ const backend = options.judgmentBackend ??
130
+ (environment.LLM4TS_JUDGMENT_BACKEND?.trim().toLowerCase() === "typesafe"
131
+ ? "typesafe"
132
+ : "llm");
133
+ if (backend !== "typesafe") {
134
+ return Effect.succeed(makeLlmJudgment(seat, LlmJudgmentConfig.make({
135
+ connector: seatConfig.connectorId.value,
136
+ ...(seatConfig.model === undefined ? {} : { model: seatConfig.model }),
137
+ // LLM4TS_JUDGMENT_BATCHING=shared-prefix sends each request's state
138
+ // once with every question; anything else keeps them independent.
139
+ ...(environment.LLM4TS_JUDGMENT_BATCHING?.trim().toLowerCase() === "shared-prefix"
140
+ ? { batching: "shared-prefix" }
141
+ : {})
142
+ }), judgmentHooks));
143
+ }
144
+ const key = environment.TYPESAFE_API_KEY?.trim();
145
+ if (key === undefined || key.length === 0) {
146
+ return Effect.fail(FlowLlmError.from(ProviderError.make({
147
+ message: "judgment backend 'typesafe' needs TYPESAFE_API_KEY in the environment"
148
+ })));
149
+ }
150
+ return Effect.succeed(makeTypeSafeJudgment({ apiKey: Redacted.make(key), onUsage: judgmentHooks.onUsage }, dependencies.http ?? nodeHttpClient));
151
+ };
110
152
  const seatsFor = Effect.fn("@llm4ts/runner/FlowRunner.seatsFor")(function* (workDir) {
111
153
  const environment = options.environment ?? process.env;
112
154
  const coder = yield* resolveSeat(prepareConnector(bridged(options.coder), workDir, environment));
113
155
  const reasoningService = yield* resolveSeat(prepareConnector(bridged(reasoning), workDir, environment));
114
156
  const reviewers = yield* Effect.forEach(options.reviewers ?? [], (configuration) => resolveSeat(prepareConnector(bridged(configuration), workDir, environment)));
115
- return { coder, reasoning: reasoningService, reviewers };
157
+ // The judgment seat defaults to the reasoning seat's service itself, so
158
+ // an unconfigured run resolves nothing extra.
159
+ const judgmentSeat = options.judgment === undefined
160
+ ? reasoningService
161
+ : yield* resolveSeat(prepareConnector(bridged(options.judgment), workDir, environment));
162
+ const judgment = yield* judgmentFor(judgmentSeat, options.judgment ?? reasoning, environment);
163
+ return { coder, reasoning: reasoningService, reviewers, judgment };
116
164
  });
117
165
  const contextAt = (workDir, seats, rebind) => FlowContext.of({
118
166
  reasoning: seats.reasoning,
119
167
  coder: seats.coder,
168
+ judgment: seats.judgment,
120
169
  git: makeGitTool(dependencies.process, workDir, events),
121
170
  hosting: makeGitHubTool(dependencies.process, workDir, events),
122
171
  events,
@@ -137,6 +186,8 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
137
186
  return {
138
187
  events,
139
188
  tracker,
189
+ runId,
190
+ ...(judgmentLog === undefined ? {} : { judgmentLog }),
140
191
  context: contextAt(options.workDir, seats, true)
141
192
  };
142
193
  });
@@ -144,6 +195,11 @@ export const runWithBundle = Effect.fn("@llm4ts/runner/FlowRunner.runWithBundle"
144
195
  const startedAt = yield* Clock.currentTimeMillis;
145
196
  const environment = options.environment ?? process.env;
146
197
  const verbosity = options.verbosity ?? "Normal";
198
+ const persistRun = options.persistRun ?? true;
199
+ const tracePath = options.tracePath ??
200
+ (persistRun ? join(options.workDir, ".llm4ts", `trace-${startedAt}.jsonl`) : undefined);
201
+ const costLedgerPath = options.costLedgerPath ??
202
+ (persistRun ? join(options.workDir, ".llm4ts", CostLedgerFileName) : undefined);
147
203
  const tracker = bundle.tracker;
148
204
  const surface = options.surface ?? (yield* makeTerminalSurface(environment));
149
205
  const palette = surface.palette;
@@ -158,13 +214,13 @@ export const runWithBundle = Effect.fn("@llm4ts/runner/FlowRunner.runWithBundle"
158
214
  ...(reviewers.length === 0 ? [] : [`reviewers ${reviewers.map(describeSeat).join(", ")}`])
159
215
  ].join(" · ");
160
216
  yield* surface.log(palette.info(`${seats} · ${options.workDir}`));
161
- if (options.tracePath !== undefined) {
162
- yield* surface.log(palette.info(`trace ${options.tracePath}${options.runId === undefined ? "" : ` · run ${options.runId}`}`));
217
+ if (tracePath !== undefined) {
218
+ yield* surface.log(palette.info(`trace ${tracePath}${options.runId === undefined ? "" : ` · run ${options.runId}`}`));
163
219
  }
164
220
  }
165
- const recorder = options.tracePath === undefined
221
+ const recorder = tracePath === undefined
166
222
  ? undefined
167
- : yield* makeFlowRecorder(dependencies.files, options.tracePath, options.runId ?? `run-${(yield* Clock.currentTimeMillis).toString()}`);
223
+ : yield* makeFlowRecorder(dependencies.files, tracePath, bundle.runId);
168
224
  if (recorder !== undefined) {
169
225
  yield* recorder.consume(bundle.events);
170
226
  }
@@ -184,16 +240,36 @@ export const runWithBundle = Effect.fn("@llm4ts/runner/FlowRunner.runWithBundle"
184
240
  cells
185
241
  }), budget);
186
242
  });
243
+ // Runs without usage leave no record: a ledger line of zeros would only
244
+ // inflate run counts for backends that report nothing.
245
+ const appendLedger = costLedgerPath === undefined
246
+ ? Effect.void
247
+ : Effect.gen(function* () {
248
+ const cells = yield* tracker.cells;
249
+ if (cells.length === 0) {
250
+ return;
251
+ }
252
+ yield* appendCostRecord(dependencies.files, costLedgerPath, makeCostRecord({
253
+ runId: bundle.runId,
254
+ at: new Date(startedAt).toISOString(),
255
+ repo: options.workDir,
256
+ prompt: options.userPrompt,
257
+ cells
258
+ }));
259
+ }).pipe(Effect.catch((error) => surface.log(palette.fail(`cost ledger not written: ${describeFlowError(error)}`))));
187
260
  return yield* body(bundle.context).pipe(Effect.provideService(FlowContext, bundle.context), Effect.andThen((value) => Effect.as(enforceBudget, value)), Effect.ensuring(Effect.all([
188
261
  terminal.awaitDrained(),
189
262
  tracker.awaitDrained(bundle.events),
190
- recorder === undefined ? Effect.void : recorder.awaitDrained(bundle.events)
191
- ], { concurrency: "unbounded" }).pipe(Effect.andThen(surface.setStatus(undefined)), Effect.andThen(tracker.summary), Effect.flatMap((summary) => surface.log(`\n${summary}`)))), Effect.tapError((error) => Effect.gen(function* () {
263
+ recorder === undefined ? Effect.void : recorder.awaitDrained(bundle.events),
264
+ bundle.judgmentLog === undefined
265
+ ? Effect.void
266
+ : bundle.judgmentLog.awaitDrained(bundle.events)
267
+ ], { concurrency: "unbounded" }).pipe(Effect.andThen(appendLedger), Effect.andThen(surface.setStatus(undefined)), Effect.andThen(tracker.summary), Effect.flatMap((summary) => surface.log(`\n${summary}`)))), Effect.tapError((error) => Effect.gen(function* () {
192
268
  const finishedAt = yield* Clock.currentTimeMillis;
193
269
  yield* surface.setStatus(undefined);
194
270
  yield* surface.log(`\n${palette.fail(`flow failed after ${formatDurationMs(finishedAt - startedAt)}: ${describeFlowError(error)}`)}`);
195
- if (options.tracePath !== undefined) {
196
- yield* surface.log(palette.info(`trace ${options.tracePath}`));
271
+ if (tracePath !== undefined) {
272
+ yield* surface.log(palette.info(`trace ${tracePath}`));
197
273
  }
198
274
  })), Effect.tap(() => Effect.gen(function* () {
199
275
  const finishedAt = yield* Clock.currentTimeMillis;