@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.
@@ -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"}
@@ -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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"}
@@ -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;AAE/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,oGA2BnB,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 response = yield* collect(service.executeStreamWithHistory(messages)).pipe(Effect.mapError(FlowLlmError.from));
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":"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"}
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 {
@@ -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;AAG9D,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,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"}
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":"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"}
1
+ {"version":3,"file":"Flow.js","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../src/Review.ts"],"names":[],"mappings":"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"}
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
- const attempt = (text) => service.executeStructured(text, ReviewResult, reviewJsonSchema);
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 })
@@ -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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"}
@@ -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.6.2",
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.6.2"
83
+ "@llm4ts/core": "0.7.0"
82
84
  },
83
85
  "peerDependencies": {
84
86
  "effect": "^4.0.0-beta.102"
@@ -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 response = yield* collect(service.executeStreamWithHistory(messages)).pipe(
68
- Effect.mapError(FlowLlmError.from)
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.executeStructured(text, ReviewResult, reviewJsonSchema)
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
+ })