@llm4ts/runner 2.23.0 → 2.25.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/AgentTree.d.ts +21 -4
- package/dist/AgentTree.d.ts.map +1 -1
- package/dist/AgentTree.js +83 -24
- package/dist/AgentTree.js.map +1 -1
- package/dist/AgentTreeSurface.d.ts +5 -1
- package/dist/AgentTreeSurface.d.ts.map +1 -1
- package/dist/AgentTreeSurface.js +18 -5
- package/dist/AgentTreeSurface.js.map +1 -1
- package/dist/Doctor.d.ts +2 -1
- package/dist/Doctor.d.ts.map +1 -1
- package/dist/Doctor.js +10 -1
- package/dist/Doctor.js.map +1 -1
- package/dist/FlowArgs.d.ts +1 -1
- package/dist/FlowArgs.d.ts.map +1 -1
- package/dist/FlowArgs.js +1 -0
- package/dist/FlowArgs.js.map +1 -1
- package/dist/FlowRunner.d.ts +3 -0
- package/dist/FlowRunner.d.ts.map +1 -1
- package/dist/FlowRunner.js +47 -18
- package/dist/FlowRunner.js.map +1 -1
- package/dist/NodeGeminiCliExecutor.d.ts +2 -1
- package/dist/NodeGeminiCliExecutor.d.ts.map +1 -1
- package/dist/NodeGeminiCliExecutor.js +27 -18
- package/dist/NodeGeminiCliExecutor.js.map +1 -1
- package/dist/NodeRuntime.d.ts +2 -2
- package/dist/Profile.d.ts +2 -3
- package/dist/Profile.d.ts.map +1 -1
- package/dist/Profile.js +2 -13
- package/dist/Profile.js.map +1 -1
- package/dist/Transcripts.d.ts +55 -0
- package/dist/Transcripts.d.ts.map +1 -0
- package/dist/Transcripts.js +200 -0
- package/dist/Transcripts.js.map +1 -0
- package/dist/Watch.d.ts +5 -0
- package/dist/Watch.d.ts.map +1 -1
- package/dist/Watch.js +74 -5
- package/dist/Watch.js.map +1 -1
- package/package.json +4 -3
- package/src/AgentTree.ts +130 -27
- package/src/AgentTreeSurface.ts +26 -4
- package/src/Doctor.ts +22 -2
- package/src/FlowArgs.ts +1 -0
- package/src/FlowRunner.ts +82 -24
- package/src/NodeGeminiCliExecutor.ts +69 -33
- package/src/Profile.ts +3 -14
- package/src/Transcripts.ts +274 -0
- package/src/Watch.ts +126 -5
package/dist/Watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Watch.js","sourceRoot":"","sources":["../src/Watch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Watch.js","sourceRoot":"","sources":["../src/Watch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llm4ts/runner",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.25.0",
|
|
4
4
|
"description": "Node runner, CLI, terminal, and MCP composition for llm4ts",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"./ReviewFingerprint": "./dist/ReviewFingerprint.js",
|
|
41
41
|
"./Terminal": "./dist/Terminal.js",
|
|
42
42
|
"./TerminalInteraction": "./dist/TerminalInteraction.js",
|
|
43
|
+
"./Transcripts": "./dist/Transcripts.js",
|
|
43
44
|
"./Watch": "./dist/Watch.js",
|
|
44
45
|
"./Package": "./dist/Package.js",
|
|
45
46
|
"./package.json": "./package.json",
|
|
@@ -67,8 +68,8 @@
|
|
|
67
68
|
"typescript"
|
|
68
69
|
],
|
|
69
70
|
"dependencies": {
|
|
70
|
-
"@llm4ts/
|
|
71
|
-
"@llm4ts/
|
|
71
|
+
"@llm4ts/core": "2.25.0",
|
|
72
|
+
"@llm4ts/flow": "2.25.0"
|
|
72
73
|
},
|
|
73
74
|
"peerDependencies": {
|
|
74
75
|
"effect": "4.0.0"
|
package/src/AgentTree.ts
CHANGED
|
@@ -663,33 +663,57 @@ export type TreeMode = "lanes" | "executors"
|
|
|
663
663
|
/** What the reader chose to look at; the run's state is separate. */
|
|
664
664
|
export interface TreeView {
|
|
665
665
|
readonly mode: TreeMode
|
|
666
|
-
/** The selected lane's story id. */
|
|
666
|
+
/** The selected lane's story id, or in the executors view the executor. */
|
|
667
667
|
readonly selected: string | undefined
|
|
668
668
|
readonly expanded: boolean
|
|
669
669
|
readonly fullLog: boolean
|
|
670
|
+
/** The transcript tail of the selection is open (`t`). */
|
|
671
|
+
readonly tail: boolean
|
|
672
|
+
/** Only this role's calls in the tail; all when undefined (`r` cycles). */
|
|
673
|
+
readonly tailRole: string | undefined
|
|
674
|
+
/** How many lines the tail is scrolled back from its end (page up/down). */
|
|
675
|
+
readonly tailBack: number
|
|
670
676
|
}
|
|
671
677
|
|
|
672
678
|
export const initialView: TreeView = {
|
|
673
679
|
mode: "lanes",
|
|
674
680
|
selected: undefined,
|
|
675
681
|
expanded: false,
|
|
676
|
-
fullLog: false
|
|
682
|
+
fullLog: false,
|
|
683
|
+
tail: false,
|
|
684
|
+
tailRole: undefined,
|
|
685
|
+
tailBack: 0
|
|
677
686
|
}
|
|
678
687
|
|
|
679
688
|
const runningLanes = (state: TreeState): ReadonlyArray<TreeLane> =>
|
|
680
689
|
state.lanes.filter((lane) => lane.status === "running")
|
|
681
690
|
|
|
691
|
+
const tailRoles: ReadonlyArray<string | undefined> = [undefined, "coder", "reviewer", "judge"]
|
|
692
|
+
const tailPage = 10
|
|
693
|
+
|
|
694
|
+
/** Whose transcript the tail shows: the selected story, or the selected executor. */
|
|
695
|
+
export const tailTargetOf = (
|
|
696
|
+
view: TreeView
|
|
697
|
+
): { readonly lane: string } | { readonly executor: string } | undefined =>
|
|
698
|
+
view.selected === undefined
|
|
699
|
+
? undefined
|
|
700
|
+
: view.mode === "lanes"
|
|
701
|
+
? { lane: view.selected }
|
|
702
|
+
: { executor: view.selected }
|
|
703
|
+
|
|
682
704
|
/**
|
|
683
|
-
* The view after a key: arrows or 1–9 select a running lane
|
|
684
|
-
*
|
|
685
|
-
*
|
|
705
|
+
* The view after a key: arrows or 1–9 select a running lane (an executor in
|
|
706
|
+
* the executors view), enter expands it, `t` tails its transcript, `r`
|
|
707
|
+
* cycles the tail's role, escape closes, `e` switches lanes and executors,
|
|
708
|
+
* `l` the full log, `q` quits. Keys it does not know return the same view.
|
|
686
709
|
*/
|
|
687
710
|
export const onTreeKey = (view: TreeView, key: string, state: TreeState): TreeView | "quit" => {
|
|
688
|
-
const
|
|
689
|
-
|
|
711
|
+
const choices =
|
|
712
|
+
view.mode === "lanes" ? runningLanes(state).map((lane) => lane.id) : state.executors
|
|
713
|
+
const index = choices.findIndex((id) => id === view.selected)
|
|
690
714
|
const select = (next: number): TreeView => {
|
|
691
|
-
const
|
|
692
|
-
return
|
|
715
|
+
const id = choices[Math.max(0, Math.min(choices.length - 1, next))]
|
|
716
|
+
return id === undefined ? view : { ...view, selected: id }
|
|
693
717
|
}
|
|
694
718
|
switch (key) {
|
|
695
719
|
case "q":
|
|
@@ -701,11 +725,34 @@ export const onTreeKey = (view: TreeView, key: string, state: TreeState): TreeVi
|
|
|
701
725
|
case "left":
|
|
702
726
|
return select(index < 0 ? 0 : index - 1)
|
|
703
727
|
case "enter":
|
|
704
|
-
return view.selected === undefined
|
|
728
|
+
return view.selected === undefined || view.mode !== "lanes"
|
|
729
|
+
? view
|
|
730
|
+
: { ...view, expanded: !view.expanded }
|
|
731
|
+
case "t":
|
|
732
|
+
return view.selected === undefined
|
|
733
|
+
? view
|
|
734
|
+
: { ...view, tail: !view.tail, expanded: false, tailBack: 0 }
|
|
735
|
+
case "pageup":
|
|
736
|
+
return view.tail ? { ...view, tailBack: view.tailBack + tailPage } : view
|
|
737
|
+
case "pagedown":
|
|
738
|
+
return view.tail ? { ...view, tailBack: Math.max(0, view.tailBack - tailPage) } : view
|
|
739
|
+
case "r":
|
|
740
|
+
return view.tail
|
|
741
|
+
? {
|
|
742
|
+
...view,
|
|
743
|
+
tailRole: tailRoles[(tailRoles.indexOf(view.tailRole) + 1) % tailRoles.length]
|
|
744
|
+
}
|
|
745
|
+
: view
|
|
705
746
|
case "escape":
|
|
706
|
-
return { ...view, expanded: false }
|
|
747
|
+
return { ...view, expanded: false, tail: false, tailBack: 0 }
|
|
707
748
|
case "e":
|
|
708
|
-
return {
|
|
749
|
+
return {
|
|
750
|
+
...view,
|
|
751
|
+
mode: view.mode === "lanes" ? "executors" : "lanes",
|
|
752
|
+
selected: undefined,
|
|
753
|
+
expanded: false,
|
|
754
|
+
tail: false
|
|
755
|
+
}
|
|
709
756
|
case "l":
|
|
710
757
|
return { ...view, fullLog: !view.fullLog }
|
|
711
758
|
default:
|
|
@@ -719,6 +766,8 @@ export interface TreeRenderOptions {
|
|
|
719
766
|
readonly view: TreeView
|
|
720
767
|
/** The terminal's rows; the frame fits them (see `renderTree`). */
|
|
721
768
|
readonly height?: number
|
|
769
|
+
/** The open tail's lines, read by the host; absent when the run has no transcript. */
|
|
770
|
+
readonly tail?: ReadonlyArray<string>
|
|
722
771
|
}
|
|
723
772
|
|
|
724
773
|
const railWidth = 26
|
|
@@ -854,11 +903,16 @@ const heldBy = (state: TreeState, executor: string): ReadonlyArray<string> => {
|
|
|
854
903
|
.map((lane) => `coder · ${lane.id}`)
|
|
855
904
|
}
|
|
856
905
|
|
|
857
|
-
const executorBox = (
|
|
906
|
+
const executorBox = (
|
|
907
|
+
state: TreeState,
|
|
908
|
+
executor: string,
|
|
909
|
+
width: number,
|
|
910
|
+
selected: boolean
|
|
911
|
+
): Array<Line> => {
|
|
858
912
|
const held = heldBy(state, executor)
|
|
859
913
|
const out = state.exclusions.find((exclusion) => exclusion.executor === executor)
|
|
860
914
|
return box(width, "running", [
|
|
861
|
-
[span(executor, "bold")],
|
|
915
|
+
[span(selected ? `▸ ${executor}` : executor, "bold")],
|
|
862
916
|
...(held.length === 0
|
|
863
917
|
? [[span("no lease", "dim")]]
|
|
864
918
|
: held.slice(0, 3).map((lease): Line => [span(lease)])),
|
|
@@ -942,7 +996,36 @@ const judgmentOf = (state: TreeState, width: number): Array<Line> => {
|
|
|
942
996
|
)
|
|
943
997
|
}
|
|
944
998
|
|
|
945
|
-
|
|
999
|
+
/** The transcript tail of the selection, in place of the boxes. */
|
|
1000
|
+
const tailOf = (
|
|
1001
|
+
view: TreeView,
|
|
1002
|
+
tail: ReadonlyArray<string> | undefined,
|
|
1003
|
+
width: number
|
|
1004
|
+
): Array<Line> =>
|
|
1005
|
+
box(
|
|
1006
|
+
width,
|
|
1007
|
+
"running",
|
|
1008
|
+
tail === undefined || tail.length === 0
|
|
1009
|
+
? [
|
|
1010
|
+
[
|
|
1011
|
+
span(
|
|
1012
|
+
tail === undefined
|
|
1013
|
+
? "no transcript for this run — start it with llm4ts run … --transcript"
|
|
1014
|
+
: "nothing said yet",
|
|
1015
|
+
"dim"
|
|
1016
|
+
)
|
|
1017
|
+
]
|
|
1018
|
+
]
|
|
1019
|
+
: tail.map((line): Line => [span(line)]),
|
|
1020
|
+
`tail · ${view.selected ?? ""} · ${view.tailRole ?? "all"}`
|
|
1021
|
+
)
|
|
1022
|
+
|
|
1023
|
+
const mainOf = (
|
|
1024
|
+
state: TreeState,
|
|
1025
|
+
width: number,
|
|
1026
|
+
view: TreeView,
|
|
1027
|
+
tail: ReadonlyArray<string> | undefined
|
|
1028
|
+
): Array<Line> => {
|
|
946
1029
|
const running = state.lanes.filter((lane) => lane.status === "running")
|
|
947
1030
|
const orchestratorWidth = Math.min(46, width)
|
|
948
1031
|
const stage = state.stages.at(-1) ?? (running.length > 0 ? "implement stories" : "idle")
|
|
@@ -962,17 +1045,21 @@ const mainOf = (state: TreeState, width: number, view: TreeView): Array<Line> =>
|
|
|
962
1045
|
const shown = running.slice(0, maxLaneBoxes)
|
|
963
1046
|
const executors = state.executors.slice(0, maxLaneBoxes + 1)
|
|
964
1047
|
const lanes =
|
|
965
|
-
view.
|
|
966
|
-
?
|
|
967
|
-
: view.
|
|
968
|
-
?
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
1048
|
+
view.tail && view.selected !== undefined
|
|
1049
|
+
? tailOf(view, tail, width)
|
|
1050
|
+
: view.expanded && selected !== undefined
|
|
1051
|
+
? expandedLane(selected, width, state.now)
|
|
1052
|
+
: view.mode === "executors"
|
|
1053
|
+
? executors.length === 0
|
|
1054
|
+
? [centre([span("no executors yet", "dim")], width)]
|
|
1055
|
+
: columnsOf(executors, width, (executor, each) =>
|
|
1056
|
+
executorBox(state, executor, each, executor === view.selected)
|
|
1057
|
+
)
|
|
1058
|
+
: shown.length === 0
|
|
1059
|
+
? [centre([span("no stories in flight", "dim")], width)]
|
|
1060
|
+
: columnsOf(shown, width, (lane, each) =>
|
|
1061
|
+
laneBox(lane, each, state.now, lane.id === view.selected, state.idleAfterMs)
|
|
1062
|
+
)
|
|
976
1063
|
return [
|
|
977
1064
|
...orchestrator.map((line) => centre(line, width)),
|
|
978
1065
|
centre([span("•", "orchestrator")], width),
|
|
@@ -1027,7 +1114,10 @@ const frameOf = (
|
|
|
1027
1114
|
),
|
|
1028
1115
|
[span("═".repeat(width), "dim")],
|
|
1029
1116
|
[],
|
|
1030
|
-
...beside(
|
|
1117
|
+
...beside(
|
|
1118
|
+
[railOf(state), mainOf(state, mainWidth, options.view, options.tail)],
|
|
1119
|
+
[railWidth, mainWidth]
|
|
1120
|
+
),
|
|
1031
1121
|
...(logCount === "none"
|
|
1032
1122
|
? []
|
|
1033
1123
|
: [[], ...box(width, "log", logOf(state, logCount), "session log")]),
|
|
@@ -1078,3 +1168,16 @@ const fitToRows = (
|
|
|
1078
1168
|
rows === undefined || rows < 4 || lines.length <= rows
|
|
1079
1169
|
? lines
|
|
1080
1170
|
: [...lines.slice(0, rows - 2), ...lines.slice(-2)]
|
|
1171
|
+
|
|
1172
|
+
/** `20s`, `4m00s`, `1h02m`. */
|
|
1173
|
+
export const duration = (ms: number): string => {
|
|
1174
|
+
const seconds = Math.round(ms / 1_000)
|
|
1175
|
+
if (seconds < 60) {
|
|
1176
|
+
return `${seconds}s`
|
|
1177
|
+
}
|
|
1178
|
+
const minutes = Math.floor(seconds / 60)
|
|
1179
|
+
if (minutes < 60) {
|
|
1180
|
+
return `${minutes}m${String(seconds % 60).padStart(2, "0")}s`
|
|
1181
|
+
}
|
|
1182
|
+
return `${Math.floor(minutes / 60)}h${String(minutes % 60).padStart(2, "0")}m`
|
|
1183
|
+
}
|
package/src/AgentTreeSurface.ts
CHANGED
|
@@ -12,8 +12,10 @@ import {
|
|
|
12
12
|
onTreeKey,
|
|
13
13
|
reduceTree,
|
|
14
14
|
renderTree,
|
|
15
|
+
tailTargetOf,
|
|
15
16
|
type TreeView
|
|
16
17
|
} from "./AgentTree.ts"
|
|
18
|
+
import { loadTranscript, tailLinesOf, type TranscriptFiles } from "./Transcripts.ts"
|
|
17
19
|
import type { TerminalSurface } from "./Terminal.ts"
|
|
18
20
|
|
|
19
21
|
/**
|
|
@@ -92,13 +94,16 @@ export const makeScreenPainter: Effect.Effect<ScreenPainter> = Effect.map(
|
|
|
92
94
|
export const enterScreen = "\u001b[?1049h\u001b[?25l\u001b[?7l"
|
|
93
95
|
export const leaveScreen = "\u001b[?7h\u001b[?25h\u001b[?1049l"
|
|
94
96
|
const redrawEvery = "100 millis"
|
|
97
|
+
const tailRows = 16
|
|
95
98
|
|
|
96
99
|
export const makeAgentTreeHost = Effect.fn("@llm4ts/runner/AgentTreeSurface.make")(function* (
|
|
97
100
|
hub: FlowEventHub,
|
|
98
101
|
classic: TerminalSurface,
|
|
99
102
|
output: AgentTreeOutput,
|
|
100
103
|
keys: Stream.Stream<string>,
|
|
101
|
-
idleAfterMs?: number
|
|
104
|
+
idleAfterMs?: number,
|
|
105
|
+
/** The run's transcript (`--transcript`), for the tail pane. */
|
|
106
|
+
transcripts?: { readonly directory: string; readonly files: TranscriptFiles }
|
|
102
107
|
): Effect.fn.Return<AgentTreeHost, never, Scope.Scope> {
|
|
103
108
|
const state = yield* Ref.make(emptyTree(idleAfterMs === undefined ? {} : { idleAfterMs }))
|
|
104
109
|
const view = yield* Ref.make<TreeView>(initialView)
|
|
@@ -118,11 +123,26 @@ export const makeAgentTreeHost = Effect.fn("@llm4ts/runner/AgentTreeSurface.make
|
|
|
118
123
|
|
|
119
124
|
const render = (rows: number | undefined): Effect.Effect<ReadonlyArray<string>> =>
|
|
120
125
|
Effect.gen(function* () {
|
|
126
|
+
const current = yield* Ref.get(view)
|
|
127
|
+
const width = Math.max(90, output.columns() ?? 90)
|
|
128
|
+
const target = tailTargetOf(current)
|
|
129
|
+
const tail =
|
|
130
|
+
!current.tail || target === undefined || transcripts === undefined
|
|
131
|
+
? undefined
|
|
132
|
+
: tailLinesOf(
|
|
133
|
+
yield* loadTranscript(transcripts.files, transcripts.directory, target),
|
|
134
|
+
target,
|
|
135
|
+
current.tailRole,
|
|
136
|
+
width - 32,
|
|
137
|
+
tailRows,
|
|
138
|
+
current.tailBack
|
|
139
|
+
)
|
|
121
140
|
return renderTree(yield* Ref.get(state), {
|
|
122
|
-
width
|
|
141
|
+
width,
|
|
123
142
|
colour: output.colour,
|
|
124
|
-
view:
|
|
125
|
-
...(rows === undefined ? {} : { height: rows })
|
|
143
|
+
view: current,
|
|
144
|
+
...(rows === undefined ? {} : { height: rows }),
|
|
145
|
+
...(tail === undefined ? {} : { tail })
|
|
126
146
|
})
|
|
127
147
|
})
|
|
128
148
|
/** The full screen fits the terminal; the last frame left behind is whole. */
|
|
@@ -201,6 +221,8 @@ const keyNames: Readonly<Record<string, string>> = {
|
|
|
201
221
|
"\u001b[B": "down",
|
|
202
222
|
"\u001b[C": "right",
|
|
203
223
|
"\u001b[D": "left",
|
|
224
|
+
"\u001b[5~": "pageup",
|
|
225
|
+
"\u001b[6~": "pagedown",
|
|
204
226
|
"\r": "enter",
|
|
205
227
|
"\n": "enter",
|
|
206
228
|
"\u001b": "escape"
|
package/src/Doctor.ts
CHANGED
|
@@ -2,7 +2,10 @@ import * as Effect from "effect/Effect"
|
|
|
2
2
|
import type { HealthStatus } from "@llm4ts/core/Models"
|
|
3
3
|
import { ConnectorIds } from "@llm4ts/core/Models"
|
|
4
4
|
import type { ConnectorRegistryShape } from "@llm4ts/core/ConnectorRegistry"
|
|
5
|
+
import { nodePreflightReport, type NodePreflightReport } from "@llm4ts/flow/NodePreflight"
|
|
5
6
|
import { nodeFlowRunnerDependencies } from "./FlowRunner.ts"
|
|
7
|
+
import { nodePlainFileStore } from "./NodePlainFileStore.ts"
|
|
8
|
+
import { nodeProcessExecutor } from "./NodeProcessExecutor.ts"
|
|
6
9
|
import {
|
|
7
10
|
defaultReadPiModelsJson as readPiModels,
|
|
8
11
|
geminiBridgePort as bridgePort,
|
|
@@ -209,9 +212,17 @@ export const geminiBridgePrerequisites = (
|
|
|
209
212
|
export const makeDoctorProgram = (
|
|
210
213
|
registry: ConnectorRegistryShape = nodeFlowRunnerDependencies().registry,
|
|
211
214
|
environment: Readonly<Record<string, string | undefined>> = process.env,
|
|
212
|
-
readPiModelsJson: () => string | undefined = readPiModels
|
|
215
|
+
readPiModelsJson: () => string | undefined = readPiModels,
|
|
216
|
+
// The Node the gates would run on against the application's pin, for the
|
|
217
|
+
// directory doctor runs in (the same check every gated flow makes first).
|
|
218
|
+
nodeCheck: Effect.Effect<NodePreflightReport> = nodePreflightReport(
|
|
219
|
+
nodeProcessExecutor,
|
|
220
|
+
nodePlainFileStore,
|
|
221
|
+
process.cwd(),
|
|
222
|
+
environment
|
|
223
|
+
)
|
|
213
224
|
): Effect.Effect<string> =>
|
|
214
|
-
Effect.map(registry.healthCheckAll, (statuses) => {
|
|
225
|
+
Effect.map(Effect.all([registry.healthCheckAll, nodeCheck]), ([statuses, node]) => {
|
|
215
226
|
const lines: Array<string> = []
|
|
216
227
|
lines.push("llm4ts doctor")
|
|
217
228
|
lines.push("")
|
|
@@ -226,6 +237,15 @@ export const makeDoctorProgram = (
|
|
|
226
237
|
const value = environment[key]
|
|
227
238
|
lines.push(` ${value === undefined || value.length === 0 ? "✖" : "✔"} ${key}`)
|
|
228
239
|
}
|
|
240
|
+
lines.push("")
|
|
241
|
+
lines.push("gates:")
|
|
242
|
+
lines.push(
|
|
243
|
+
...wrap(
|
|
244
|
+
`${node._tag === "Mismatch" || node._tag === "NoNode" ? "✖" : "✔"} ${node.summary}`,
|
|
245
|
+
78,
|
|
246
|
+
" "
|
|
247
|
+
)
|
|
248
|
+
)
|
|
229
249
|
|
|
230
250
|
// Connector prerequisites the environment must carry BEFORE a run: shown
|
|
231
251
|
// when the connector is selected or the machine has its CLI, because that
|
package/src/FlowArgs.ts
CHANGED
|
@@ -33,6 +33,7 @@ environment:
|
|
|
33
33
|
LLM4TS_CODER coding agent: claude|codex|gemini|pi|agy|grok|cursor|opencode (default: claude)
|
|
34
34
|
LLM4TS_VERBOSITY terminal verbosity: quiet|normal|verbose
|
|
35
35
|
LLM4TS_UI tree: the full-screen agent tree (ADR 0022; q returns to the classic view)
|
|
36
|
+
LLM4TS_TRANSCRIPT on: record each seat's input and output under .llm4ts/transcripts/
|
|
36
37
|
OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY
|
|
37
38
|
credentials for API providers
|
|
38
39
|
|
package/src/FlowRunner.ts
CHANGED
|
@@ -59,6 +59,8 @@ import {
|
|
|
59
59
|
import { FlowContext, type ContextOptions, type FlowContextShape } from "@llm4ts/flow/FlowContext"
|
|
60
60
|
import { makeFlowRecorder, type RunOutcome } from "@llm4ts/flow/FlowRecorder"
|
|
61
61
|
import { timedJudgment, timedSeat, withTimedRole } from "@llm4ts/flow/Timing"
|
|
62
|
+
import { transcriptSeat, type TranscriptSink } from "@llm4ts/flow/Transcript"
|
|
63
|
+
import { nodeTranscriptFiles, nodeTranscriptSink, transcriptsWanted } from "./Transcripts.ts"
|
|
62
64
|
import { idleAfterFrom } from "./AgentTree.ts"
|
|
63
65
|
import { makeAgentTreeHost, nodeTreeKeys } from "./AgentTreeSurface.ts"
|
|
64
66
|
import { makeJudgmentLog, type JudgmentLogShape } from "@llm4ts/flow/JudgmentLog"
|
|
@@ -93,7 +95,7 @@ import { nodeGeminiCliExecutor } from "./NodeGeminiCliExecutor.ts"
|
|
|
93
95
|
import { nodePlainFileStore } from "./NodePlainFileStore.ts"
|
|
94
96
|
import { nodeProcessExecutor } from "./NodeProcessExecutor.ts"
|
|
95
97
|
import { nodeTemporaryFiles } from "./NodeTemporaryFiles.ts"
|
|
96
|
-
import { prepareConnector } from "./Connectors.ts"
|
|
98
|
+
import { asReadOnly, prepareConnector } from "./Connectors.ts"
|
|
97
99
|
import {
|
|
98
100
|
consumeTerminalEvents,
|
|
99
101
|
formatDurationMs,
|
|
@@ -116,6 +118,8 @@ export interface FlowRunnerDependencies {
|
|
|
116
118
|
readonly readPiModelsJson?: () => string | undefined
|
|
117
119
|
/** For the hosted TypeSafe judgment backend; defaults to the Node client. */
|
|
118
120
|
readonly http?: HttpClientShape
|
|
121
|
+
/** Where `--transcript` writes, given its directory; files on disk by default. */
|
|
122
|
+
readonly transcriptSink?: (directory: string) => TranscriptSink
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
export interface NodeConnectorDependencies {
|
|
@@ -285,6 +289,28 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
285
289
|
): Effect.fn.Return<FlowRunnerBundle, FlowError, Scope.Scope> {
|
|
286
290
|
const events = yield* makeFlowEventHub()
|
|
287
291
|
const runId = options.runId ?? `run-${(yield* Clock.currentTimeMillis).toString()}`
|
|
292
|
+
// `llm4ts run --transcript`: what each seat is told and answers, per story,
|
|
293
|
+
// in its own files — never in the trace.
|
|
294
|
+
const transcriptOn =
|
|
295
|
+
transcriptsWanted(options.environment ?? process.env) && options.persistRun !== false
|
|
296
|
+
const transcripts = transcriptOn
|
|
297
|
+
? (dependencies.transcriptSink ?? nodeTranscriptSink)(
|
|
298
|
+
join(options.workDir, ".llm4ts", "transcripts", runId)
|
|
299
|
+
)
|
|
300
|
+
: undefined
|
|
301
|
+
const recorded = (
|
|
302
|
+
service: LlmServiceShape,
|
|
303
|
+
lane: string | undefined,
|
|
304
|
+
role: string,
|
|
305
|
+
executor?: Effect.Effect<string | undefined>
|
|
306
|
+
): LlmServiceShape =>
|
|
307
|
+
transcripts === undefined
|
|
308
|
+
? service
|
|
309
|
+
: transcriptSeat(service, transcripts, {
|
|
310
|
+
role,
|
|
311
|
+
...(lane === undefined ? {} : { lane }),
|
|
312
|
+
...(executor === undefined ? {} : { executor })
|
|
313
|
+
})
|
|
288
314
|
const judgmentLog =
|
|
289
315
|
options.judgmentLog === true
|
|
290
316
|
? yield* makeJudgmentLog({ files: dependencies.files, root: options.workDir, runId })
|
|
@@ -422,6 +448,7 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
422
448
|
readonly coder: LlmServiceShape & { readonly capabilities: ConnectorCapabilities }
|
|
423
449
|
readonly reasoning: LlmServiceShape
|
|
424
450
|
readonly reviewers: ReadonlyArray<LlmServiceShape>
|
|
451
|
+
readonly judge: LlmServiceShape
|
|
425
452
|
readonly judgment: JudgmentShape
|
|
426
453
|
},
|
|
427
454
|
FlowError,
|
|
@@ -435,14 +462,18 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
435
462
|
const reviewers = yield* Effect.forEach(options.reviewers ?? [], (configuration) =>
|
|
436
463
|
resolveSeat(prepareConnector(bridged(configuration), workDir, environment))
|
|
437
464
|
)
|
|
438
|
-
// The judgment seat
|
|
439
|
-
// an
|
|
465
|
+
// The judgment seat is the reasoner with its tools taken away: a judge
|
|
466
|
+
// reads, it does not act. Over an API reasoner (no tools to take) it is
|
|
467
|
+
// the reasoning seat's service itself, so such a run resolves nothing extra.
|
|
468
|
+
const judgmentConfig =
|
|
469
|
+
options.judgment ??
|
|
470
|
+
(reasoning instanceof CliConnectorConfig ? asReadOnly(reasoning) : undefined)
|
|
440
471
|
const judgmentSeat =
|
|
441
|
-
|
|
472
|
+
judgmentConfig === undefined
|
|
442
473
|
? reasoningService
|
|
443
|
-
: yield* resolveSeat(prepareConnector(bridged(
|
|
444
|
-
const judgment = yield* judgmentFor(judgmentSeat,
|
|
445
|
-
return { coder, reasoning: reasoningService, reviewers, judgment }
|
|
474
|
+
: yield* resolveSeat(prepareConnector(bridged(judgmentConfig), workDir, environment))
|
|
475
|
+
const judgment = yield* judgmentFor(judgmentSeat, judgmentConfig ?? reasoning, environment)
|
|
476
|
+
return { coder, reasoning: reasoningService, reviewers, judge: judgmentSeat, judgment }
|
|
446
477
|
})
|
|
447
478
|
const contextAt = (
|
|
448
479
|
workDir: string,
|
|
@@ -450,20 +481,28 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
450
481
|
readonly coder: LlmServiceShape & { readonly capabilities: ConnectorCapabilities }
|
|
451
482
|
readonly reasoning: LlmServiceShape
|
|
452
483
|
readonly reviewers: ReadonlyArray<LlmServiceShape>
|
|
484
|
+
readonly judge: LlmServiceShape
|
|
453
485
|
readonly judgment: JudgmentShape
|
|
454
486
|
},
|
|
455
487
|
rebind: boolean,
|
|
456
|
-
laneEvents: FlowEventsShape = events
|
|
488
|
+
laneEvents: FlowEventsShape = events,
|
|
489
|
+
lane?: string
|
|
457
490
|
): FlowContextShape =>
|
|
458
491
|
FlowContext.of({
|
|
459
492
|
// Every call is timed on the lane's events, under its role.
|
|
460
|
-
reasoning: timedSeat(seats.reasoning, laneEvents, "reasoning"),
|
|
461
|
-
coder: {
|
|
493
|
+
reasoning: recorded(timedSeat(seats.reasoning, laneEvents, "reasoning"), lane, "reasoning"),
|
|
494
|
+
coder: {
|
|
495
|
+
...seats.coder,
|
|
496
|
+
...recorded(timedSeat(seats.coder, laneEvents, "coder"), lane, "coder")
|
|
497
|
+
},
|
|
462
498
|
judgment: timedJudgment(seats.judgment, laneEvents),
|
|
499
|
+
judge: recorded(timedSeat(seats.judge, laneEvents, "judgment"), lane, "judgment"),
|
|
463
500
|
git: makeGitTool(dependencies.process, workDir, laneEvents),
|
|
464
501
|
hosting: makeGitHubTool(dependencies.process, workDir, laneEvents),
|
|
465
502
|
events: laneEvents,
|
|
466
|
-
reviewers: seats.reviewers.map((reviewer) =>
|
|
503
|
+
reviewers: seats.reviewers.map((reviewer) =>
|
|
504
|
+
recorded(timedSeat(reviewer, laneEvents, "reviewer"), lane, "reviewer")
|
|
505
|
+
),
|
|
467
506
|
coderCapabilities: seats.coder.capabilities,
|
|
468
507
|
userPrompt: options.userPrompt,
|
|
469
508
|
workDir,
|
|
@@ -480,7 +519,8 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
480
519
|
false,
|
|
481
520
|
contextOptions?.label === undefined
|
|
482
521
|
? events
|
|
483
|
-
: withLane(events, { lane: contextOptions.label, workDir: directory })
|
|
522
|
+
: withLane(events, { lane: contextOptions.label, workDir: directory }),
|
|
523
|
+
contextOptions?.label
|
|
484
524
|
)
|
|
485
525
|
)
|
|
486
526
|
}
|
|
@@ -618,17 +658,22 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
618
658
|
held: HeldCoder,
|
|
619
659
|
workDir: string,
|
|
620
660
|
label: string,
|
|
621
|
-
laneEvents: FlowEventsShape
|
|
661
|
+
laneEvents: FlowEventsShape,
|
|
662
|
+
lane: string | undefined
|
|
622
663
|
): RosterView => ({
|
|
623
664
|
forRole: (role) =>
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
665
|
+
recorded(
|
|
666
|
+
timedSeat(
|
|
667
|
+
rosterSeat(roster, source, role, workDir, {
|
|
668
|
+
events: laneEvents,
|
|
669
|
+
avoid: Effect.map(held.executor, (id) => (id === undefined ? [] : [id])),
|
|
670
|
+
borrow: held.lease,
|
|
671
|
+
label
|
|
672
|
+
}),
|
|
673
|
+
laneEvents,
|
|
674
|
+
role
|
|
675
|
+
),
|
|
676
|
+
lane,
|
|
632
677
|
role
|
|
633
678
|
),
|
|
634
679
|
available: roster.available,
|
|
@@ -644,7 +689,8 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
644
689
|
laneEvents: FlowEventsShape
|
|
645
690
|
): Effect.Effect<FlowContextShape, FlowError> =>
|
|
646
691
|
Effect.gen(function* () {
|
|
647
|
-
const
|
|
692
|
+
const lane = rebind ? undefined : label
|
|
693
|
+
const view = viewFor(held, workDir, label, laneEvents, lane)
|
|
648
694
|
const judgmentSeat =
|
|
649
695
|
options.judgment === undefined
|
|
650
696
|
? view.forRole("judge")
|
|
@@ -662,8 +708,14 @@ export const makeFlowRunnerContext = Effect.fn("@llm4ts/runner/FlowRunner.makeCo
|
|
|
662
708
|
: timedJudgment(judged, laneEvents)
|
|
663
709
|
return FlowContext.of({
|
|
664
710
|
reasoning: view.forRole(rebind ? "planner" : "reviewer"),
|
|
665
|
-
coder:
|
|
711
|
+
coder: recorded(
|
|
712
|
+
timedSeat(held.service, laneEvents, "coder"),
|
|
713
|
+
lane,
|
|
714
|
+
"coder",
|
|
715
|
+
held.executor
|
|
716
|
+
),
|
|
666
717
|
judgment,
|
|
718
|
+
judge: judgmentSeat,
|
|
667
719
|
git: makeGitTool(dependencies.process, workDir, laneEvents),
|
|
668
720
|
hosting: makeGitHubTool(dependencies.process, workDir, laneEvents),
|
|
669
721
|
events: laneEvents,
|
|
@@ -781,7 +833,13 @@ export const runWithBundle = Effect.fn("@llm4ts/runner/FlowRunner.runWithBundle"
|
|
|
781
833
|
colour: true
|
|
782
834
|
},
|
|
783
835
|
nodeTreeKeys("interrupt"),
|
|
784
|
-
idleAfterFrom(environment)
|
|
836
|
+
idleAfterFrom(environment),
|
|
837
|
+
transcriptsWanted(environment)
|
|
838
|
+
? {
|
|
839
|
+
directory: join(options.workDir, ".llm4ts", "transcripts", bundle.runId),
|
|
840
|
+
files: nodeTranscriptFiles
|
|
841
|
+
}
|
|
842
|
+
: undefined
|
|
785
843
|
)
|
|
786
844
|
: undefined
|
|
787
845
|
const surface = tree?.surface ?? classic
|