@llm4ts/flow 0.6.2 → 0.7.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/Activity.d.ts +20 -0
- package/dist/Activity.d.ts.map +1 -0
- package/dist/Activity.js +110 -0
- package/dist/Activity.js.map +1 -0
- package/dist/Chat.d.ts.map +1 -1
- package/dist/Chat.js +3 -1
- package/dist/Chat.js.map +1 -1
- package/dist/Flow.d.ts +1 -0
- package/dist/Flow.d.ts.map +1 -1
- package/dist/Flow.js +3 -1
- package/dist/Flow.js.map +1 -1
- package/dist/Review.d.ts.map +1 -1
- package/dist/Review.js +5 -3
- package/dist/Review.js.map +1 -1
- package/dist/Usage.d.ts +25 -0
- package/dist/Usage.d.ts.map +1 -0
- package/dist/Usage.js +34 -0
- package/dist/Usage.js.map +1 -0
- package/package.json +4 -2
- package/src/Activity.ts +124 -0
- package/src/Chat.ts +5 -3
- package/src/Flow.ts +4 -1
- package/src/Review.ts +8 -2
- package/src/Usage.ts +55 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as Stream from "effect/Stream";
|
|
2
|
+
import type { LlmError } from "@llm4ts/core/Errors";
|
|
3
|
+
import type { LlmChunk } from "@llm4ts/core/Models";
|
|
4
|
+
import { ToolUse, type FlowEventsShape } from "./FlowEvents.ts";
|
|
5
|
+
/**
|
|
6
|
+
* The readable gist of a tool's arguments: the salient value on its own
|
|
7
|
+
* (`ls -R docs/modernization` rather than `{"command":"ls -R …"}`), a compact
|
|
8
|
+
* `key=value` list when no single field stands out, and the raw text when the
|
|
9
|
+
* input is not a JSON object. Always collapsed to one line and truncated.
|
|
10
|
+
*/
|
|
11
|
+
export declare const summariseToolArgs: (raw: string) => string;
|
|
12
|
+
/** The `ToolUse` event a chunk represents, or undefined when it is not a tool call. */
|
|
13
|
+
export declare const toolUseFrom: (chunk: LlmChunk) => ToolUse | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Republishes the stream unchanged, publishing a `ToolUse` event for every
|
|
16
|
+
* tool call it carries. Wrap a connector stream with this before `collect` so
|
|
17
|
+
* the run reports what the agent is doing while it is doing it.
|
|
18
|
+
*/
|
|
19
|
+
export declare const withToolActivity: <R>(events: FlowEventsShape, stream: Stream.Stream<LlmChunk, LlmError, R>) => Stream.Stream<LlmChunk, LlmError, R>;
|
|
20
|
+
//# sourceMappingURL=Activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Activity.d.ts","sourceRoot":"","sources":["../src/Activity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAgD/D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MAoC/C,CAAA;AAED,uFAAuF;AACvF,eAAO,MAAM,WAAW,GAAI,OAAO,QAAQ,KAAG,OAAO,GAAG,SAYvD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,QAAQ,eAAe,EACvB,QAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,KAC3C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAIlC,CAAA"}
|
package/dist/Activity.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Stream from "effect/Stream";
|
|
3
|
+
import { ToolUse } from "./FlowEvents.js";
|
|
4
|
+
/**
|
|
5
|
+
* Live agent activity.
|
|
6
|
+
*
|
|
7
|
+
* CLI connectors emit a zero-delta chunk per tool call, tagged
|
|
8
|
+
* `metadata.event = "tool_use"` with `tool_name` and `tool_input` (see
|
|
9
|
+
* `toolEventChunk` in `@llm4ts/core/providers/CliSupport`). `collect` folds a
|
|
10
|
+
* stream into its final response and drops those chunks, so a coding agent
|
|
11
|
+
* working for minutes rendered as a bare spinner with no sign of progress.
|
|
12
|
+
* Tapping the stream turns each of them into a `ToolUse` event the terminal
|
|
13
|
+
* already knows how to draw.
|
|
14
|
+
*/
|
|
15
|
+
const ArgsLimit = 120;
|
|
16
|
+
/** Keys worth showing alone, in the order a tool call is usually recognised by. */
|
|
17
|
+
const salientKeys = [
|
|
18
|
+
"command",
|
|
19
|
+
"file_path",
|
|
20
|
+
"filePath",
|
|
21
|
+
"path",
|
|
22
|
+
"pattern",
|
|
23
|
+
"query",
|
|
24
|
+
"url",
|
|
25
|
+
"topic",
|
|
26
|
+
"title",
|
|
27
|
+
"description",
|
|
28
|
+
"prompt"
|
|
29
|
+
];
|
|
30
|
+
const compact = (text) => {
|
|
31
|
+
const collapsed = text.replace(/\s+/g, " ").trim();
|
|
32
|
+
return collapsed.length <= ArgsLimit ? collapsed : `${collapsed.slice(0, ArgsLimit - 1)}…`;
|
|
33
|
+
};
|
|
34
|
+
const scalar = (value) => {
|
|
35
|
+
switch (typeof value) {
|
|
36
|
+
case "string":
|
|
37
|
+
return value;
|
|
38
|
+
case "number":
|
|
39
|
+
case "boolean":
|
|
40
|
+
return String(value);
|
|
41
|
+
default:
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* The readable gist of a tool's arguments: the salient value on its own
|
|
47
|
+
* (`ls -R docs/modernization` rather than `{"command":"ls -R …"}`), a compact
|
|
48
|
+
* `key=value` list when no single field stands out, and the raw text when the
|
|
49
|
+
* input is not a JSON object. Always collapsed to one line and truncated.
|
|
50
|
+
*/
|
|
51
|
+
export const summariseToolArgs = (raw) => {
|
|
52
|
+
const trimmed = raw.trim();
|
|
53
|
+
if (trimmed.length === 0) {
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
let parsed;
|
|
57
|
+
try {
|
|
58
|
+
parsed = JSON.parse(trimmed);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return compact(trimmed);
|
|
62
|
+
}
|
|
63
|
+
const direct = scalar(parsed);
|
|
64
|
+
if (direct !== undefined) {
|
|
65
|
+
return compact(direct);
|
|
66
|
+
}
|
|
67
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
68
|
+
return compact(trimmed);
|
|
69
|
+
}
|
|
70
|
+
const entries = Object.entries(parsed);
|
|
71
|
+
if (entries.length === 0) {
|
|
72
|
+
return "";
|
|
73
|
+
}
|
|
74
|
+
for (const key of salientKeys) {
|
|
75
|
+
const found = entries.find(([name]) => name === key);
|
|
76
|
+
const value = found === undefined ? undefined : scalar(found[1]);
|
|
77
|
+
if (value !== undefined && value.trim().length > 0) {
|
|
78
|
+
return compact(value);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const single = entries.length === 1 ? scalar(entries[0]?.[1]) : undefined;
|
|
82
|
+
if (single !== undefined) {
|
|
83
|
+
return compact(single);
|
|
84
|
+
}
|
|
85
|
+
return compact(entries.map(([name, value]) => `${name}=${scalar(value) ?? JSON.stringify(value)}`).join(", "));
|
|
86
|
+
};
|
|
87
|
+
/** The `ToolUse` event a chunk represents, or undefined when it is not a tool call. */
|
|
88
|
+
export const toolUseFrom = (chunk) => {
|
|
89
|
+
if (chunk.metadata.event !== "tool_use") {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const tool = (chunk.metadata.tool_name ?? chunk.metadata.toolName ?? "").trim();
|
|
93
|
+
if (tool.length === 0) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
return ToolUse.make({
|
|
97
|
+
tool,
|
|
98
|
+
args: summariseToolArgs(chunk.metadata.tool_input ?? chunk.metadata.toolInput ?? "")
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Republishes the stream unchanged, publishing a `ToolUse` event for every
|
|
103
|
+
* tool call it carries. Wrap a connector stream with this before `collect` so
|
|
104
|
+
* the run reports what the agent is doing while it is doing it.
|
|
105
|
+
*/
|
|
106
|
+
export const withToolActivity = (events, stream) => Stream.tap(stream, (chunk) => {
|
|
107
|
+
const event = toolUseFrom(chunk);
|
|
108
|
+
return event === undefined ? Effect.void : events.publish(event);
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=Activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Activity.js","sourceRoot":"","sources":["../src/Activity.ts"],"names":[],"mappings":"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"}
|
package/dist/Chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE,eAAO,MAAM,uBAAuB,iHAC4E,CAAA;AAEhH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAaD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD;AAcD,eAAO,MAAM,QAAQ,oGA4BnB,CAAA"}
|
package/dist/Chat.js
CHANGED
|
@@ -3,6 +3,7 @@ import * as Ref from "effect/Ref";
|
|
|
3
3
|
import * as Semaphore from "effect/Semaphore";
|
|
4
4
|
import { Message } from "@llm4ts/core/Models";
|
|
5
5
|
import { collect } from "@llm4ts/core/Streaming";
|
|
6
|
+
import { withToolActivity } from "./Activity.js";
|
|
6
7
|
import { FlowLlmError } from "./FlowError.js";
|
|
7
8
|
import { TokensUsed } from "./FlowEvents.js";
|
|
8
9
|
export const gitOwnershipInstruction = "The flow runtime owns git operations. Do not create or switch branches, commit, push, or open pull requests.";
|
|
@@ -29,7 +30,8 @@ export const makeChat = Effect.fn("@llm4ts/flow/Chat.make")(function* (service,
|
|
|
29
30
|
const askRound = Effect.fn("@llm4ts/flow/Chat.ask")(function* (prompt) {
|
|
30
31
|
const userTurn = Message.make({ role: "User", content: prompt });
|
|
31
32
|
const messages = [...(yield* Ref.get(history)), userTurn];
|
|
32
|
-
const
|
|
33
|
+
const stream = service.executeStreamWithHistory(messages);
|
|
34
|
+
const response = yield* collect(options.events === undefined ? stream : withToolActivity(options.events, stream)).pipe(Effect.mapError(FlowLlmError.from));
|
|
33
35
|
yield* publishUsage(options, response);
|
|
34
36
|
yield* Ref.set(history, [
|
|
35
37
|
...messages,
|
package/dist/Chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAElE,MAAM,CAAC,MAAM,uBAAuB,GAClC,8GAA8G,CAAA;AAgBhH,MAAM,YAAY,GAAG,CAAC,OAAoB,EAAE,QAAqB,EAAuB,EAAE,CACxF,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;IAC1D,CAAC,CAAC,MAAM,CAAC,IAAI;IACb,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CACpB,UAAU,CAAC,IAAI,CAAC;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;QAC9B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;KACrF,CAAC,CACH,CAAA;AAOP,MAAM,cAAc,GAAG,CAAC,OAAoB,EAA0B,EAAE;IACtE,MAAM,MAAM,GACV,OAAO,CAAC,SAAS,KAAK,IAAI;QACxB,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC;aACtC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAChD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,EACnE,OAAwB,EACxB,UAAuB,EAAE;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAErC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAC3D,MAAc;QAEd,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;QAChE,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"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"}
|
package/dist/Flow.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { Plan, Task } from "./Plan.ts";
|
|
|
7
7
|
import type { PlanStoreShape } from "./Persistence.ts";
|
|
8
8
|
import { type ReviewResult } from "./Review.ts";
|
|
9
9
|
import type { Reviewer } from "./Reviewer.ts";
|
|
10
|
+
export { publishUsage, structuredAndPublish } from "./Usage.ts";
|
|
10
11
|
export declare const flowReviewer: (context: FlowContextShape) => LlmServiceShape;
|
|
11
12
|
export declare const completeAndPublish: (service: LlmServiceShape, events: FlowEventsShape, prompt: string) => Effect.Effect<string, FlowLlmError, never>;
|
|
12
13
|
export interface ImplementPlanOptions {
|
package/dist/Flow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAI9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE/D,eAAO,MAAM,YAAY,GAAI,SAAS,gBAAgB,KAAG,eACd,CAAA;AAE3C,eAAO,MAAM,kBAAkB,mHAmB7B,CAAA;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;CACjD;AAOD,eAAO,MAAM,iBAAiB,2gBAoG5B,CAAA"}
|
package/dist/Flow.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import { collect } from "@llm4ts/core/Streaming";
|
|
3
|
+
import { withToolActivity } from "./Activity.js";
|
|
3
4
|
import { makeChat } from "./Chat.js";
|
|
4
5
|
import { FlowAborted, FlowLlmError } from "./FlowError.js";
|
|
5
6
|
import { AssistantMessage, Info, TokensUsed } from "./FlowEvents.js";
|
|
6
7
|
import { implementTaskLoop, stage } from "./PlanExecution.js";
|
|
7
8
|
import { minimalReviewers, reviewAndFixLoop } from "./Review.js";
|
|
9
|
+
export { publishUsage, structuredAndPublish } from "./Usage.js";
|
|
8
10
|
export const flowReviewer = (context) => context.reviewers[0] ?? context.reasoning;
|
|
9
11
|
export const completeAndPublish = Effect.fn("@llm4ts/flow/Flow.completeAndPublish")(function* (service, events, prompt) {
|
|
10
|
-
const response = yield* collect(service.executeStream(prompt)).pipe(Effect.mapError(FlowLlmError.from));
|
|
12
|
+
const response = yield* collect(withToolActivity(events, service.executeStream(prompt))).pipe(Effect.mapError(FlowLlmError.from));
|
|
11
13
|
if (response.usage !== undefined) {
|
|
12
14
|
yield* events.publish(TokensUsed.make({
|
|
13
15
|
agent: "assistant",
|
package/dist/Flow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flow.js","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAa,MAAM,WAAW,CAAA;AAE/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAG1F,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAA;AAGnF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAyB,EAAmB,EAAE,CACzE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAAC,QAAQ,CAAC,EAC3F,OAAwB,EACxB,MAAuB,EACvB,MAAc;IAEd,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"Flow.js","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"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"}
|
package/dist/Review.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../src/Review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC3E,OAAO,EAAQ,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../src/Review.ts"],"names":[],"mappings":"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"}
|
package/dist/Review.js
CHANGED
|
@@ -5,6 +5,7 @@ import { guarded } from "./CapabilityGuard.js";
|
|
|
5
5
|
import { FlowLlmError, ProcessError } from "./FlowError.js";
|
|
6
6
|
import { Info } from "./FlowEvents.js";
|
|
7
7
|
import { Reviewer } from "./Reviewer.js";
|
|
8
|
+
import { publishUsage } from "./Usage.js";
|
|
8
9
|
export const Severity = Schema.Literals(["Critical", "Warning", "Info"]);
|
|
9
10
|
export class ReviewIssue extends Schema.Class("ReviewIssue")({
|
|
10
11
|
severity: Severity,
|
|
@@ -164,9 +165,10 @@ export const lintCommand = Effect.fn("@llm4ts/flow/Review.lintCommand")(function
|
|
|
164
165
|
summary: "lint failed"
|
|
165
166
|
});
|
|
166
167
|
});
|
|
167
|
-
const reviewWith = (service, lens, taskTitle, diff) => {
|
|
168
|
+
const reviewWith = (service, events, lens, taskTitle, diff) => {
|
|
168
169
|
const prompt = `${lens.systemPrompt}\n\n${reviewPrompt(taskTitle, diff)}`;
|
|
169
|
-
|
|
170
|
+
// Usage is published per attempt — a schema retry costs real tokens too.
|
|
171
|
+
const attempt = (text) => service.executeStructuredWithUsage(text, ReviewResult, reviewJsonSchema).pipe(Effect.tap(([, usage, model]) => publishUsage(events, usage, model, "reviewer")), Effect.map(([result]) => result));
|
|
170
172
|
return attempt(prompt).pipe(Effect.catch((error) => error._tag === "ParseError"
|
|
171
173
|
? attempt(`${prompt}\n\nYour previous reply failed schema validation: ${error.message}\n` +
|
|
172
174
|
"Return ONLY valid JSON matching the schema.")
|
|
@@ -185,7 +187,7 @@ export const reviewAndFixLoop = Effect.fn("@llm4ts/flow/Review.reviewAndFixLoop"
|
|
|
185
187
|
const diff = yield* options.currentDiff;
|
|
186
188
|
const files = yield* changedFiles;
|
|
187
189
|
const chosen = yield* selector.select(options.reviewers, files, round, previous);
|
|
188
|
-
const run = (lens) => reviewWith(options.reviewerService, lens, options.taskTitle, diff);
|
|
190
|
+
const run = (lens) => reviewWith(options.reviewerService, options.events, lens, options.taskTitle, diff);
|
|
189
191
|
const parallelism = options.parallelism ?? 0;
|
|
190
192
|
const results = parallelism > 0
|
|
191
193
|
? yield* Effect.forEach(chosen, run, { concurrency: parallelism })
|
package/dist/Review.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Review.js","sourceRoot":"","sources":["../src/Review.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Review.js","sourceRoot":"","sources":["../src/Review.ts"],"names":[],"mappings":"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"}
|
package/dist/Usage.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import type * as Schema from "effect/Schema";
|
|
3
|
+
import type { LlmServiceShape } from "@llm4ts/core/LlmService";
|
|
4
|
+
import type { TokenUsage, JsonSchema } from "@llm4ts/core/Models";
|
|
5
|
+
import { FlowLlmError } from "./FlowError.ts";
|
|
6
|
+
import { type FlowEventsShape } from "./FlowEvents.ts";
|
|
7
|
+
/**
|
|
8
|
+
* Token accounting for structured requests.
|
|
9
|
+
*
|
|
10
|
+
* `executeStructured` discards the usage its provider reported, so a flow
|
|
11
|
+
* built from structured calls — every modernization phase, and every reviewer
|
|
12
|
+
* lens — produced no `TokensUsed` events at all and summarised as "no usage
|
|
13
|
+
* reported" however many tokens the backend actually counted. These helpers
|
|
14
|
+
* keep cost accounting a property of the flow spine rather than of each
|
|
15
|
+
* script. They live apart from `Flow.ts` so `Review.ts`, which `Flow.ts`
|
|
16
|
+
* itself imports, can publish without an import cycle.
|
|
17
|
+
*/
|
|
18
|
+
/** Publishes a `TokensUsed` event when the provider reported usage. */
|
|
19
|
+
export declare const publishUsage: (events: FlowEventsShape, usage: TokenUsage | undefined, model: string | undefined, agent: string) => Effect.Effect<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Runs a structured request, publishes its token usage, and returns the
|
|
22
|
+
* decoded value — the structured counterpart of `completeAndPublish`.
|
|
23
|
+
*/
|
|
24
|
+
export declare const structuredAndPublish: <A, E, RD, RE>(service: LlmServiceShape, events: FlowEventsShape, prompt: string, schema: Schema.ConstraintCodec<A, E, RD, RE>, jsonSchema: JsonSchema, agent?: string) => Effect.Effect<A, FlowLlmError, RD>;
|
|
25
|
+
//# sourceMappingURL=Usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Usage.d.ts","sourceRoot":"","sources":["../src/Usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE;;;;;;;;;;GAUG;AAEH,uEAAuE;AACvE,eAAO,MAAM,YAAY,GACvB,QAAQ,eAAe,EACvB,OAAO,UAAU,GAAG,SAAS,EAC7B,OAAO,MAAM,GAAG,SAAS,EACzB,OAAO,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CASd,CAAA;AAEP;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAC/C,SAAS,eAAe,EACxB,QAAQ,eAAe,EACvB,QAAQ,MAAM,EACd,QAAQ,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAC5C,YAAY,UAAU,EACtB,cAAmB,KAClB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAOhC,CAAA"}
|
package/dist/Usage.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { FlowLlmError } from "./FlowError.js";
|
|
3
|
+
import { TokensUsed } from "./FlowEvents.js";
|
|
4
|
+
/**
|
|
5
|
+
* Token accounting for structured requests.
|
|
6
|
+
*
|
|
7
|
+
* `executeStructured` discards the usage its provider reported, so a flow
|
|
8
|
+
* built from structured calls — every modernization phase, and every reviewer
|
|
9
|
+
* lens — produced no `TokensUsed` events at all and summarised as "no usage
|
|
10
|
+
* reported" however many tokens the backend actually counted. These helpers
|
|
11
|
+
* keep cost accounting a property of the flow spine rather than of each
|
|
12
|
+
* script. They live apart from `Flow.ts` so `Review.ts`, which `Flow.ts`
|
|
13
|
+
* itself imports, can publish without an import cycle.
|
|
14
|
+
*/
|
|
15
|
+
/** Publishes a `TokensUsed` event when the provider reported usage. */
|
|
16
|
+
export const publishUsage = (events, usage, model, agent) => usage === undefined
|
|
17
|
+
? Effect.void
|
|
18
|
+
: events.publish(TokensUsed.make({
|
|
19
|
+
agent,
|
|
20
|
+
usage,
|
|
21
|
+
...(model === undefined ? {} : { model })
|
|
22
|
+
}));
|
|
23
|
+
/**
|
|
24
|
+
* Runs a structured request, publishes its token usage, and returns the
|
|
25
|
+
* decoded value — the structured counterpart of `completeAndPublish`.
|
|
26
|
+
*/
|
|
27
|
+
export const structuredAndPublish = (service, events, prompt, schema, jsonSchema, agent = "reasoning") => Effect.gen(function* () {
|
|
28
|
+
const [value, usage, model] = yield* service
|
|
29
|
+
.executeStructuredWithUsage(prompt, schema, jsonSchema)
|
|
30
|
+
.pipe(Effect.mapError(FlowLlmError.from));
|
|
31
|
+
yield* publishUsage(events, usage, model, agent);
|
|
32
|
+
return value;
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=Usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Usage.js","sourceRoot":"","sources":["../src/Usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAElE;;;;;;;;;;GAUG;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAuB,EACvB,KAA6B,EAC7B,KAAyB,EACzB,KAAa,EACQ,EAAE,CACvB,KAAK,KAAK,SAAS;IACjB,CAAC,CAAC,MAAM,CAAC,IAAI;IACb,CAAC,CAAC,MAAM,CAAC,OAAO,CACZ,UAAU,CAAC,IAAI,CAAC;QACd,KAAK;QACL,KAAK;QACL,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC,CACH,CAAA;AAEP;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAwB,EACxB,MAAuB,EACvB,MAAc,EACd,MAA4C,EAC5C,UAAsB,EACtB,KAAK,GAAG,WAAW,EACiB,EAAE,CACtC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO;SACzC,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;SACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3C,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAChD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llm4ts/flow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Effect-native LLM workflow, persistence, review, and repository automation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
],
|
|
15
15
|
"exports": {
|
|
16
16
|
"./package.json": "./package.json",
|
|
17
|
+
"./Activity": "./dist/Activity.js",
|
|
17
18
|
"./AzureDevOpsTool": "./dist/AzureDevOpsTool.js",
|
|
18
19
|
"./Bench": "./dist/Bench.js",
|
|
19
20
|
"./BenchReport": "./dist/BenchReport.js",
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
"./SpecChecks": "./dist/SpecChecks.js",
|
|
52
53
|
"./Survey": "./dist/Survey.js",
|
|
53
54
|
"./TransientRetry": "./dist/TransientRetry.js",
|
|
55
|
+
"./Usage": "./dist/Usage.js",
|
|
54
56
|
"./Wall": "./dist/Wall.js",
|
|
55
57
|
"./Workspace": "./dist/Workspace.js",
|
|
56
58
|
"./WorkspaceLayout": "./dist/WorkspaceLayout.js",
|
|
@@ -78,7 +80,7 @@
|
|
|
78
80
|
"typescript"
|
|
79
81
|
],
|
|
80
82
|
"dependencies": {
|
|
81
|
-
"@llm4ts/core": "0.
|
|
83
|
+
"@llm4ts/core": "0.7.0"
|
|
82
84
|
},
|
|
83
85
|
"peerDependencies": {
|
|
84
86
|
"effect": "^4.0.0-beta.102"
|
package/src/Activity.ts
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect"
|
|
2
|
+
import * as Stream from "effect/Stream"
|
|
3
|
+
import type { LlmError } from "@llm4ts/core/Errors"
|
|
4
|
+
import type { LlmChunk } from "@llm4ts/core/Models"
|
|
5
|
+
import { ToolUse, type FlowEventsShape } from "./FlowEvents.ts"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Live agent activity.
|
|
9
|
+
*
|
|
10
|
+
* CLI connectors emit a zero-delta chunk per tool call, tagged
|
|
11
|
+
* `metadata.event = "tool_use"` with `tool_name` and `tool_input` (see
|
|
12
|
+
* `toolEventChunk` in `@llm4ts/core/providers/CliSupport`). `collect` folds a
|
|
13
|
+
* stream into its final response and drops those chunks, so a coding agent
|
|
14
|
+
* working for minutes rendered as a bare spinner with no sign of progress.
|
|
15
|
+
* Tapping the stream turns each of them into a `ToolUse` event the terminal
|
|
16
|
+
* already knows how to draw.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const ArgsLimit = 120
|
|
20
|
+
|
|
21
|
+
/** Keys worth showing alone, in the order a tool call is usually recognised by. */
|
|
22
|
+
const salientKeys: ReadonlyArray<string> = [
|
|
23
|
+
"command",
|
|
24
|
+
"file_path",
|
|
25
|
+
"filePath",
|
|
26
|
+
"path",
|
|
27
|
+
"pattern",
|
|
28
|
+
"query",
|
|
29
|
+
"url",
|
|
30
|
+
"topic",
|
|
31
|
+
"title",
|
|
32
|
+
"description",
|
|
33
|
+
"prompt"
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
const compact = (text: string): string => {
|
|
37
|
+
const collapsed = text.replace(/\s+/g, " ").trim()
|
|
38
|
+
return collapsed.length <= ArgsLimit ? collapsed : `${collapsed.slice(0, ArgsLimit - 1)}…`
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const scalar = (value: unknown): string | undefined => {
|
|
42
|
+
switch (typeof value) {
|
|
43
|
+
case "string":
|
|
44
|
+
return value
|
|
45
|
+
case "number":
|
|
46
|
+
case "boolean":
|
|
47
|
+
return String(value)
|
|
48
|
+
default:
|
|
49
|
+
return undefined
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The readable gist of a tool's arguments: the salient value on its own
|
|
55
|
+
* (`ls -R docs/modernization` rather than `{"command":"ls -R …"}`), a compact
|
|
56
|
+
* `key=value` list when no single field stands out, and the raw text when the
|
|
57
|
+
* input is not a JSON object. Always collapsed to one line and truncated.
|
|
58
|
+
*/
|
|
59
|
+
export const summariseToolArgs = (raw: string): string => {
|
|
60
|
+
const trimmed = raw.trim()
|
|
61
|
+
if (trimmed.length === 0) {
|
|
62
|
+
return ""
|
|
63
|
+
}
|
|
64
|
+
let parsed: unknown
|
|
65
|
+
try {
|
|
66
|
+
parsed = JSON.parse(trimmed)
|
|
67
|
+
} catch {
|
|
68
|
+
return compact(trimmed)
|
|
69
|
+
}
|
|
70
|
+
const direct = scalar(parsed)
|
|
71
|
+
if (direct !== undefined) {
|
|
72
|
+
return compact(direct)
|
|
73
|
+
}
|
|
74
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
75
|
+
return compact(trimmed)
|
|
76
|
+
}
|
|
77
|
+
const entries = Object.entries(parsed)
|
|
78
|
+
if (entries.length === 0) {
|
|
79
|
+
return ""
|
|
80
|
+
}
|
|
81
|
+
for (const key of salientKeys) {
|
|
82
|
+
const found = entries.find(([name]) => name === key)
|
|
83
|
+
const value = found === undefined ? undefined : scalar(found[1])
|
|
84
|
+
if (value !== undefined && value.trim().length > 0) {
|
|
85
|
+
return compact(value)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const single = entries.length === 1 ? scalar(entries[0]?.[1]) : undefined
|
|
89
|
+
if (single !== undefined) {
|
|
90
|
+
return compact(single)
|
|
91
|
+
}
|
|
92
|
+
return compact(
|
|
93
|
+
entries.map(([name, value]) => `${name}=${scalar(value) ?? JSON.stringify(value)}`).join(", ")
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** The `ToolUse` event a chunk represents, or undefined when it is not a tool call. */
|
|
98
|
+
export const toolUseFrom = (chunk: LlmChunk): ToolUse | undefined => {
|
|
99
|
+
if (chunk.metadata.event !== "tool_use") {
|
|
100
|
+
return undefined
|
|
101
|
+
}
|
|
102
|
+
const tool = (chunk.metadata.tool_name ?? chunk.metadata.toolName ?? "").trim()
|
|
103
|
+
if (tool.length === 0) {
|
|
104
|
+
return undefined
|
|
105
|
+
}
|
|
106
|
+
return ToolUse.make({
|
|
107
|
+
tool,
|
|
108
|
+
args: summariseToolArgs(chunk.metadata.tool_input ?? chunk.metadata.toolInput ?? "")
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Republishes the stream unchanged, publishing a `ToolUse` event for every
|
|
114
|
+
* tool call it carries. Wrap a connector stream with this before `collect` so
|
|
115
|
+
* the run reports what the agent is doing while it is doing it.
|
|
116
|
+
*/
|
|
117
|
+
export const withToolActivity = <R>(
|
|
118
|
+
events: FlowEventsShape,
|
|
119
|
+
stream: Stream.Stream<LlmChunk, LlmError, R>
|
|
120
|
+
): Stream.Stream<LlmChunk, LlmError, R> =>
|
|
121
|
+
Stream.tap(stream, (chunk) => {
|
|
122
|
+
const event = toolUseFrom(chunk)
|
|
123
|
+
return event === undefined ? Effect.void : events.publish(event)
|
|
124
|
+
})
|
package/src/Chat.ts
CHANGED
|
@@ -4,6 +4,7 @@ import * as Semaphore from "effect/Semaphore"
|
|
|
4
4
|
import type { LlmServiceShape } from "@llm4ts/core/LlmService"
|
|
5
5
|
import { Message, type LlmResponse } from "@llm4ts/core/Models"
|
|
6
6
|
import { collect } from "@llm4ts/core/Streaming"
|
|
7
|
+
import { withToolActivity } from "./Activity.ts"
|
|
7
8
|
import { FlowLlmError } from "./FlowError.ts"
|
|
8
9
|
import { TokensUsed, type FlowEventsShape } from "./FlowEvents.ts"
|
|
9
10
|
|
|
@@ -64,9 +65,10 @@ export const makeChat = Effect.fn("@llm4ts/flow/Chat.make")(function* (
|
|
|
64
65
|
): Effect.fn.Return<string, FlowLlmError> {
|
|
65
66
|
const userTurn = Message.make({ role: "User", content: prompt })
|
|
66
67
|
const messages = [...(yield* Ref.get(history)), userTurn]
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
const stream = service.executeStreamWithHistory(messages)
|
|
69
|
+
const response = yield* collect(
|
|
70
|
+
options.events === undefined ? stream : withToolActivity(options.events, stream)
|
|
71
|
+
).pipe(Effect.mapError(FlowLlmError.from))
|
|
70
72
|
yield* publishUsage(options, response)
|
|
71
73
|
yield* Ref.set(history, [
|
|
72
74
|
...messages,
|
package/src/Flow.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect"
|
|
2
2
|
import type { LlmServiceShape } from "@llm4ts/core/LlmService"
|
|
3
3
|
import { collect } from "@llm4ts/core/Streaming"
|
|
4
|
+
import { withToolActivity } from "./Activity.ts"
|
|
4
5
|
import { makeChat, type Chat } from "./Chat.ts"
|
|
5
6
|
import type { FlowContextShape } from "./FlowContext.ts"
|
|
6
7
|
import { FlowAborted, FlowLlmError, type FlowError } from "./FlowError.ts"
|
|
@@ -11,6 +12,8 @@ import { implementTaskLoop, stage } from "./PlanExecution.ts"
|
|
|
11
12
|
import { minimalReviewers, reviewAndFixLoop, type ReviewResult } from "./Review.ts"
|
|
12
13
|
import type { Reviewer } from "./Reviewer.ts"
|
|
13
14
|
|
|
15
|
+
export { publishUsage, structuredAndPublish } from "./Usage.ts"
|
|
16
|
+
|
|
14
17
|
export const flowReviewer = (context: FlowContextShape): LlmServiceShape =>
|
|
15
18
|
context.reviewers[0] ?? context.reasoning
|
|
16
19
|
|
|
@@ -19,7 +22,7 @@ export const completeAndPublish = Effect.fn("@llm4ts/flow/Flow.completeAndPublis
|
|
|
19
22
|
events: FlowEventsShape,
|
|
20
23
|
prompt: string
|
|
21
24
|
): Effect.fn.Return<string, FlowLlmError> {
|
|
22
|
-
const response = yield* collect(service.executeStream(prompt)).pipe(
|
|
25
|
+
const response = yield* collect(withToolActivity(events, service.executeStream(prompt))).pipe(
|
|
23
26
|
Effect.mapError(FlowLlmError.from)
|
|
24
27
|
)
|
|
25
28
|
if (response.usage !== undefined) {
|
package/src/Review.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type { Chat } from "./Chat.ts"
|
|
|
10
10
|
import { FlowLlmError, ProcessError, type FlowError } from "./FlowError.ts"
|
|
11
11
|
import { Info, type FlowEventsShape } from "./FlowEvents.ts"
|
|
12
12
|
import { Reviewer } from "./Reviewer.ts"
|
|
13
|
+
import { publishUsage } from "./Usage.ts"
|
|
13
14
|
|
|
14
15
|
export const Severity = Schema.Literals(["Critical", "Warning", "Info"])
|
|
15
16
|
export type Severity = typeof Severity.Type
|
|
@@ -280,13 +281,18 @@ export interface ReviewAndFixOptions {
|
|
|
280
281
|
|
|
281
282
|
const reviewWith = (
|
|
282
283
|
service: LlmServiceShape,
|
|
284
|
+
events: FlowEventsShape,
|
|
283
285
|
lens: Reviewer,
|
|
284
286
|
taskTitle: string,
|
|
285
287
|
diff: string
|
|
286
288
|
): Effect.Effect<ReviewResult, FlowLlmError> => {
|
|
287
289
|
const prompt = `${lens.systemPrompt}\n\n${reviewPrompt(taskTitle, diff)}`
|
|
290
|
+
// Usage is published per attempt — a schema retry costs real tokens too.
|
|
288
291
|
const attempt = (text: string): Effect.Effect<ReviewResult, LlmError> =>
|
|
289
|
-
service.
|
|
292
|
+
service.executeStructuredWithUsage(text, ReviewResult, reviewJsonSchema).pipe(
|
|
293
|
+
Effect.tap(([, usage, model]) => publishUsage(events, usage, model, "reviewer")),
|
|
294
|
+
Effect.map(([result]) => result)
|
|
295
|
+
)
|
|
290
296
|
return attempt(prompt).pipe(
|
|
291
297
|
Effect.catch((error) =>
|
|
292
298
|
error._tag === "ParseError"
|
|
@@ -321,7 +327,7 @@ export const reviewAndFixLoop = Effect.fn("@llm4ts/flow/Review.reviewAndFixLoop"
|
|
|
321
327
|
const files = yield* changedFiles
|
|
322
328
|
const chosen = yield* selector.select(options.reviewers, files, round, previous)
|
|
323
329
|
const run = (lens: Reviewer) =>
|
|
324
|
-
reviewWith(options.reviewerService, lens, options.taskTitle, diff)
|
|
330
|
+
reviewWith(options.reviewerService, options.events, lens, options.taskTitle, diff)
|
|
325
331
|
const parallelism = options.parallelism ?? 0
|
|
326
332
|
const results =
|
|
327
333
|
parallelism > 0
|
package/src/Usage.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect"
|
|
2
|
+
import type * as Schema from "effect/Schema"
|
|
3
|
+
import type { LlmServiceShape } from "@llm4ts/core/LlmService"
|
|
4
|
+
import type { TokenUsage, JsonSchema } from "@llm4ts/core/Models"
|
|
5
|
+
import { FlowLlmError } from "./FlowError.ts"
|
|
6
|
+
import { TokensUsed, type FlowEventsShape } from "./FlowEvents.ts"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Token accounting for structured requests.
|
|
10
|
+
*
|
|
11
|
+
* `executeStructured` discards the usage its provider reported, so a flow
|
|
12
|
+
* built from structured calls — every modernization phase, and every reviewer
|
|
13
|
+
* lens — produced no `TokensUsed` events at all and summarised as "no usage
|
|
14
|
+
* reported" however many tokens the backend actually counted. These helpers
|
|
15
|
+
* keep cost accounting a property of the flow spine rather than of each
|
|
16
|
+
* script. They live apart from `Flow.ts` so `Review.ts`, which `Flow.ts`
|
|
17
|
+
* itself imports, can publish without an import cycle.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/** Publishes a `TokensUsed` event when the provider reported usage. */
|
|
21
|
+
export const publishUsage = (
|
|
22
|
+
events: FlowEventsShape,
|
|
23
|
+
usage: TokenUsage | undefined,
|
|
24
|
+
model: string | undefined,
|
|
25
|
+
agent: string
|
|
26
|
+
): Effect.Effect<void> =>
|
|
27
|
+
usage === undefined
|
|
28
|
+
? Effect.void
|
|
29
|
+
: events.publish(
|
|
30
|
+
TokensUsed.make({
|
|
31
|
+
agent,
|
|
32
|
+
usage,
|
|
33
|
+
...(model === undefined ? {} : { model })
|
|
34
|
+
})
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Runs a structured request, publishes its token usage, and returns the
|
|
39
|
+
* decoded value — the structured counterpart of `completeAndPublish`.
|
|
40
|
+
*/
|
|
41
|
+
export const structuredAndPublish = <A, E, RD, RE>(
|
|
42
|
+
service: LlmServiceShape,
|
|
43
|
+
events: FlowEventsShape,
|
|
44
|
+
prompt: string,
|
|
45
|
+
schema: Schema.ConstraintCodec<A, E, RD, RE>,
|
|
46
|
+
jsonSchema: JsonSchema,
|
|
47
|
+
agent = "reasoning"
|
|
48
|
+
): Effect.Effect<A, FlowLlmError, RD> =>
|
|
49
|
+
Effect.gen(function* () {
|
|
50
|
+
const [value, usage, model] = yield* service
|
|
51
|
+
.executeStructuredWithUsage(prompt, schema, jsonSchema)
|
|
52
|
+
.pipe(Effect.mapError(FlowLlmError.from))
|
|
53
|
+
yield* publishUsage(events, usage, model, agent)
|
|
54
|
+
return value
|
|
55
|
+
})
|