@llm4ts/runner 2.5.0 → 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 +1 -1
- package/dist/Cli.js +0 -2
- package/dist/Cli.js.map +1 -1
- package/dist/Connectors.d.ts +7 -0
- package/dist/Connectors.d.ts.map +1 -1
- package/dist/Connectors.js +25 -1
- package/dist/Connectors.js.map +1 -1
- package/dist/Costs.d.ts +48 -0
- package/dist/Costs.d.ts.map +1 -0
- package/dist/Costs.js +76 -0
- package/dist/Costs.js.map +1 -0
- package/dist/FlowRunner.d.ts +35 -0
- package/dist/FlowRunner.d.ts.map +1 -1
- package/dist/FlowRunner.js +87 -11
- package/dist/FlowRunner.js.map +1 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +5 -0
- package/dist/Terminal.js.map +1 -1
- package/package.json +4 -3
- package/src/Cli.ts +0 -2
- package/src/Connectors.ts +31 -1
- package/src/Costs.ts +116 -0
- package/src/FlowRunner.ts +170 -14
- package/src/Terminal.ts +5 -0
package/dist/Cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"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,
|
|
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"}
|
package/dist/Connectors.d.ts
CHANGED
|
@@ -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
|
package/dist/Connectors.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/Connectors.js
CHANGED
|
@@ -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
|
package/dist/Connectors.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC5C,WAAW,EAAE,YAAY,CAAC,SAAS;IACnC,KAAK,EAAE;QACL,iBAAiB,EAAE,aAAa;KACjC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC3C,WAAW,EAAE,YAAY,CAAC,KAAK;IAC/B,KAAK,EAAE;QACL,OAAO,EAAE,iBAAiB;KAC3B;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC5C,WAAW,EAAE,YAAY,CAAC,SAAS;CACpC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC;IACxC,WAAW,EAAE,YAAY,CAAC,EAAE;CAC7B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC;IACjD,WAAW,EAAE,YAAY,CAAC,cAAc;IACxC,KAAK,EAAE;QACL,IAAI,EAAE,cAAc;KACrB;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC1C,WAAW,EAAE,YAAY,CAAC,IAAI;CAC/B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC5C,WAAW,EAAE,YAAY,CAAC,MAAM;CACjC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC9C,WAAW,EAAE,YAAY,CAAC,QAAQ;CACnC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC9C,WAAW,EAAE,YAAY,CAAC,QAAQ;IAClC,OAAO,EAAE,0BAA0B;CACpC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC3C,WAAW,EAAE,YAAY,CAAC,KAAK;IAC/B,OAAO,EAAE,uBAAuB;CACjC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC5C,WAAW,EAAE,YAAY,CAAC,MAAM;CACjC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC/C,WAAW,EAAE,YAAY,CAAC,SAAS;CACpC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC/C,WAAW,EAAE,YAAY,CAAC,SAAS;CACpC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC5C,WAAW,EAAE,YAAY,CAAC,MAAM;CACjC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC1C,WAAW,EAAE,YAAY,CAAC,IAAI;IAC9B,KAAK,EAAE,MAAM;CACd,CAAC,CAAA;AAIF,MAAM,UAAU,SAAS,CACvB,MAA+C,EAC/C,KAAa;IAEb,OAAO,MAAM,YAAY,kBAAkB;QACzC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;QAC/C,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAA0B,EAAE,SAAiB,EAAsB,EAAE,CACjG,kBAAkB,CAAC,IAAI,CAAC;IACtB,GAAG,MAAM;IACT,SAAS;CACV,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAA0B,EAC1B,WAA6C,EACzB,EAAE,CACtB,kBAAkB,CAAC,IAAI,CAAC;IACtB,GAAG,MAAM;IACT,OAAO,EAAE;QACP,GAAG,MAAM,CAAC,OAAO;QACjB,GAAG,WAAW;KACf;CACF,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAA0B,EAAsB,EAAE,CAC3E,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAExD,6EAA6E;AAC7E,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAA0B,EAAsB,EAAE,CAC3E,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AAEvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAA0B,EAC1B,OAAe,EACK,EAAE,CACtB,kBAAkB,CAAC,IAAI,CAAC;IACtB,GAAG,MAAM;IACT,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;CACnC,CAAC,CAAA;AAEJ,MAAM,iBAAiB,GAAG,CACxB,MAA0B,EAC1B,WAAyD,EACrC,EAAE;IACtB,QAAQ,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,cAAc,CAAA;QACnC,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,iBAAiB,CAAA;QACtC,KAAK,YAAY;YACf,OAAO,WAAW,CAAC,cAAc,IAAI,WAAW,CAAC,cAAc,CAAA;QACjE;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAA0B,EAC1B,cAA4D,OAAO,CAAC,GAAG,EACnD,EAAE;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC7E,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAC7D,OAAO,kBAAkB,CAAC,IAAI,CAAC;QAC7B,GAAG,MAAM;QACT,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAC3B,CAAC,CAAC,cAAc,KAAK,SAAS;gBAC5B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;KACjD,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAuB,EACvB,OAAe,EACf,cAA4D,OAAO,CAAC,GAAG,EACtD,EAAE,CACnB,MAAM,YAAY,kBAAkB;IAClC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC;IACzC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,EAAE,CAClD,uDAAuD,CACxD,CAAC,QAAQ,CAAC,EACT,cAA4D,OAAO,CAAC,GAAG;IAEvE,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,MAAM,CAAA;IAC5E,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACnB,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,IAAI,CAAA;YACb,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAA;YACf,KAAK,WAAW;gBACd,OAAO,SAAS,CAAA;YAClB,KAAK,QAAQ,CAAC;YACd,KAAK,YAAY;gBACf,OAAO,SAAS,CAAA;YAClB,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAA;YACjB,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAA;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO,CAAC;YACb,KAAK,KAAK;gBACR,OAAO,KAAK,CAAA;YACd;gBACE,OAAO,SAAS,CAAA;QACpB,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YAC7B,OAAO,EACL,4BAA4B,QAAQ,cAAc;gBAClD,sDAAsD;SACzD,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,CAAA;IAC9C,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,0CAA0C,QAAQ,mCAAmC;SAC/F,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AACtF,CAAC,CAAC,CAAA;AAEF,qEAAqE;AACrE,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,4BAA4B;AAC5B,MAAM,YAAY,GAAwE;IACxF,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACZ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACrC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;CACzB,CAAA;AAED,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CACzC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAU,CAAC,CAC9E,CACF,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAA0B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAEvF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAkC,EAAE,CACvE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;AAEvC,uEAAuE;AACvE,wEAAwE;AACxE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAoD,OAAO,CAAC,GAAG,EAC3C,EAAE;IACtB,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACjD,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAA;AAC1E,CAAC,CAAA;AAED,sEAAsE;AACtE,sEAAsE;AACtE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,EAAE,CAAC,gDAAgD,CAAC,CAC7F,QAAQ,CAAC,EACP,cAA4D,OAAO,CAAC,GAAG;IAEvE,MAAM,SAAS,GAAG,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACzD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;IAClC,OAAO,MAAM,KAAK,SAAS;QACzB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,yBAAyB,SAAS,eAAe,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;SAC/E,CAAC;QACJ,CAAC,CAAC,MAAM,CAAA;AACZ,CAAC,CACF,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC,EAAE,CACvD,4DAA4D,CAC7D,CAAC,QAAQ,CAAC,EACT,cAA4D,OAAO,CAAC,GAAG;IAEvE,MAAM,QAAQ,GAAG,WAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAA;IAC7D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,2BAA2B,CAAC;QACxC,GAAG,WAAW;QACd,eAAe,EAAE,QAAQ;QACzB,YAAY,EAAE,WAAW,CAAC,qBAAqB;KAChD,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/Costs.d.ts
ADDED
|
@@ -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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"}
|
package/dist/FlowRunner.d.ts
CHANGED
|
@@ -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>;
|
package/dist/FlowRunner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowRunner.d.ts","sourceRoot":"","sources":["../src/FlowRunner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FlowRunner.d.ts","sourceRoot":"","sources":["../src/FlowRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/FlowRunner.js
CHANGED
|
@@ -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
|
-
|
|
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 (
|
|
162
|
-
yield* surface.log(palette.info(`trace ${
|
|
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 =
|
|
221
|
+
const recorder = tracePath === undefined
|
|
166
222
|
? undefined
|
|
167
|
-
: yield* makeFlowRecorder(dependencies.files,
|
|
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
|
-
|
|
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 (
|
|
196
|
-
yield* surface.log(palette.info(`trace ${
|
|
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;
|