@llm4ts/runner 0.1.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/LICENSE +21 -0
- package/README.md +61 -0
- package/dist/Cli.d.ts +5 -0
- package/dist/Cli.d.ts.map +1 -0
- package/dist/Cli.js +36 -0
- package/dist/Cli.js.map +1 -0
- package/dist/CoderPolicy.d.ts +12 -0
- package/dist/CoderPolicy.d.ts.map +1 -0
- package/dist/CoderPolicy.js +59 -0
- package/dist/CoderPolicy.js.map +1 -0
- package/dist/Connectors.d.ts +28 -0
- package/dist/Connectors.d.ts.map +1 -0
- package/dist/Connectors.js +165 -0
- package/dist/Connectors.js.map +1 -0
- package/dist/Doctor.d.ts +4 -0
- package/dist/Doctor.d.ts.map +1 -0
- package/dist/Doctor.js +33 -0
- package/dist/Doctor.js.map +1 -0
- package/dist/FlowArgs.d.ts +34 -0
- package/dist/FlowArgs.d.ts.map +1 -0
- package/dist/FlowArgs.js +136 -0
- package/dist/FlowArgs.js.map +1 -0
- package/dist/FlowRunner.d.ts +48 -0
- package/dist/FlowRunner.d.ts.map +1 -0
- package/dist/FlowRunner.js +97 -0
- package/dist/FlowRunner.js.map +1 -0
- package/dist/McpStdio.d.ts +7 -0
- package/dist/McpStdio.d.ts.map +1 -0
- package/dist/McpStdio.js +19 -0
- package/dist/McpStdio.js.map +1 -0
- package/dist/NodeGeminiCliExecutor.d.ts +7 -0
- package/dist/NodeGeminiCliExecutor.d.ts.map +1 -0
- package/dist/NodeGeminiCliExecutor.js +26 -0
- package/dist/NodeGeminiCliExecutor.js.map +1 -0
- package/dist/NodeHttpClient.d.ts +5 -0
- package/dist/NodeHttpClient.d.ts.map +1 -0
- package/dist/NodeHttpClient.js +109 -0
- package/dist/NodeHttpClient.js.map +1 -0
- package/dist/NodePlainFileStore.d.ts +5 -0
- package/dist/NodePlainFileStore.d.ts.map +1 -0
- package/dist/NodePlainFileStore.js +64 -0
- package/dist/NodePlainFileStore.js.map +1 -0
- package/dist/NodeProcessExecutor.d.ts +5 -0
- package/dist/NodeProcessExecutor.d.ts.map +1 -0
- package/dist/NodeProcessExecutor.js +212 -0
- package/dist/NodeProcessExecutor.js.map +1 -0
- package/dist/NodeRuntime.d.ts +4 -0
- package/dist/NodeRuntime.d.ts.map +1 -0
- package/dist/NodeRuntime.js +11 -0
- package/dist/NodeRuntime.js.map +1 -0
- package/dist/NodeTemporaryFiles.d.ts +5 -0
- package/dist/NodeTemporaryFiles.d.ts.map +1 -0
- package/dist/NodeTemporaryFiles.js +30 -0
- package/dist/NodeTemporaryFiles.js.map +1 -0
- package/dist/NodeWorkspace.d.ts +6 -0
- package/dist/NodeWorkspace.d.ts.map +1 -0
- package/dist/NodeWorkspace.js +231 -0
- package/dist/NodeWorkspace.js.map +1 -0
- package/dist/Package.d.ts +2 -0
- package/dist/Package.d.ts.map +1 -0
- package/dist/Package.js +2 -0
- package/dist/Package.js.map +1 -0
- package/dist/ReviewFingerprint.d.ts +2 -0
- package/dist/ReviewFingerprint.d.ts.map +1 -0
- package/dist/ReviewFingerprint.js +13 -0
- package/dist/ReviewFingerprint.js.map +1 -0
- package/dist/Terminal.d.ts +46 -0
- package/dist/Terminal.d.ts.map +1 -0
- package/dist/Terminal.js +226 -0
- package/dist/Terminal.js.map +1 -0
- package/dist/TerminalInteraction.d.ts +4 -0
- package/dist/TerminalInteraction.d.ts.map +1 -0
- package/dist/TerminalInteraction.js +25 -0
- package/dist/TerminalInteraction.js.map +1 -0
- package/dist/cli-main.d.ts +3 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +39 -0
- package/dist/cli-main.js.map +1 -0
- package/package.json +74 -0
- package/src/Cli.ts +51 -0
- package/src/CoderPolicy.ts +82 -0
- package/src/Connectors.ts +225 -0
- package/src/Doctor.ts +44 -0
- package/src/FlowArgs.ts +167 -0
- package/src/FlowRunner.ts +220 -0
- package/src/McpStdio.ts +41 -0
- package/src/NodeGeminiCliExecutor.ts +56 -0
- package/src/NodeHttpClient.ts +224 -0
- package/src/NodePlainFileStore.ts +75 -0
- package/src/NodeProcessExecutor.ts +331 -0
- package/src/NodeRuntime.ts +19 -0
- package/src/NodeTemporaryFiles.ts +46 -0
- package/src/NodeWorkspace.ts +282 -0
- package/src/Package.ts +1 -0
- package/src/ReviewFingerprint.ts +13 -0
- package/src/Terminal.ts +329 -0
- package/src/TerminalInteraction.ts +43 -0
- package/src/cli-main.ts +53 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import * as readline from "node:readline";
|
|
3
|
+
import * as Cause from "effect/Cause";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import * as Queue from "effect/Queue";
|
|
7
|
+
import * as Stream from "effect/Stream";
|
|
8
|
+
import { ProcessExecutor, ProcessResult, makeProcessExecutor } from "@llm4ts/core/ProcessExecutor";
|
|
9
|
+
import { InvalidRequestError, ProviderError } from "@llm4ts/core/Errors";
|
|
10
|
+
const maxStderrLines = 256;
|
|
11
|
+
const errorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
12
|
+
const commandName = (argv) => argv[0] ?? "process";
|
|
13
|
+
const invalidArgv = () => InvalidRequestError.make({ message: "empty argv" });
|
|
14
|
+
const processFailure = (argv, detail) => ProviderError.make({
|
|
15
|
+
message: detail.includes("ENOENT")
|
|
16
|
+
? `${commandName(argv)} failed: command not found. Install '${commandName(argv)}' and make sure it is on your PATH` +
|
|
17
|
+
` (coding-agent CLIs can be switched with LLM4TS_CODER)`
|
|
18
|
+
: `${commandName(argv)} failed: ${detail}`
|
|
19
|
+
});
|
|
20
|
+
const spawnChild = (argv, cwd, envVars) => {
|
|
21
|
+
const [command, ...args] = argv;
|
|
22
|
+
if (command === undefined) {
|
|
23
|
+
return Effect.fail(ProviderError.make({
|
|
24
|
+
message: "process failed: empty argv"
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
return Effect.try({
|
|
28
|
+
try: () => spawn(command, args, {
|
|
29
|
+
cwd,
|
|
30
|
+
env: {
|
|
31
|
+
...process.env,
|
|
32
|
+
...envVars
|
|
33
|
+
},
|
|
34
|
+
stdio: "pipe"
|
|
35
|
+
}),
|
|
36
|
+
catch: (error) => processFailure(argv, errorMessage(error))
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
const killChild = (child) => Effect.sync(() => {
|
|
40
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
41
|
+
child.kill("SIGKILL");
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const writeAndCloseStdin = (child, stdin) => {
|
|
45
|
+
if (stdin === undefined) {
|
|
46
|
+
child.stdin.end();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
child.stdin.end(stdin);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const awaitCapturedProcess = (child, argv, stdin) => Effect.callback((resume) => {
|
|
53
|
+
const stdout = [];
|
|
54
|
+
const stderr = [];
|
|
55
|
+
const outLines = readline.createInterface({ input: child.stdout });
|
|
56
|
+
const errLines = readline.createInterface({ input: child.stderr });
|
|
57
|
+
const onStdout = (line) => {
|
|
58
|
+
stdout.push(line);
|
|
59
|
+
};
|
|
60
|
+
const onStderr = (line) => {
|
|
61
|
+
stderr.push(line);
|
|
62
|
+
};
|
|
63
|
+
const onError = (error) => {
|
|
64
|
+
resume(Effect.fail(processFailure(argv, error.message)));
|
|
65
|
+
};
|
|
66
|
+
const onClose = (exitCode) => {
|
|
67
|
+
resume(Effect.succeed(ProcessResult.make({
|
|
68
|
+
stdout,
|
|
69
|
+
stderr,
|
|
70
|
+
exitCode: exitCode ?? -1
|
|
71
|
+
})));
|
|
72
|
+
};
|
|
73
|
+
outLines.on("line", onStdout);
|
|
74
|
+
errLines.on("line", onStderr);
|
|
75
|
+
child.once("error", onError);
|
|
76
|
+
child.once("close", onClose);
|
|
77
|
+
writeAndCloseStdin(child, stdin);
|
|
78
|
+
return Effect.sync(() => {
|
|
79
|
+
child.off("error", onError);
|
|
80
|
+
child.off("close", onClose);
|
|
81
|
+
outLines.close();
|
|
82
|
+
errLines.close();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
const runCaptured = (argv, cwd, envVars, stdin) => {
|
|
86
|
+
if (argv.length === 0) {
|
|
87
|
+
return Effect.fail(invalidArgv());
|
|
88
|
+
}
|
|
89
|
+
return Effect.acquireUseRelease(spawnChild(argv, cwd, envVars), (child) => awaitCapturedProcess(child, argv, stdin), (child) => killChild(child));
|
|
90
|
+
};
|
|
91
|
+
const childLines = (child, argv, options) => Stream.callback((queue) => Effect.gen(function* () {
|
|
92
|
+
const stderr = [];
|
|
93
|
+
const outLines = readline.createInterface({ input: child.stdout });
|
|
94
|
+
const errLines = readline.createInterface({ input: child.stderr });
|
|
95
|
+
const onStdout = (line) => {
|
|
96
|
+
Queue.offerUnsafe(queue, line);
|
|
97
|
+
};
|
|
98
|
+
const onStderr = (line) => {
|
|
99
|
+
if (stderr.length < maxStderrLines) {
|
|
100
|
+
stderr.push(line);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const onError = (error) => {
|
|
104
|
+
Queue.failCauseUnsafe(queue, Cause.fail(processFailure(argv, error.message)));
|
|
105
|
+
};
|
|
106
|
+
const onClose = (exitCode) => {
|
|
107
|
+
if (options.failOnNonZero && exitCode !== 0) {
|
|
108
|
+
const detail = `${commandName(argv)} exited with code ${exitCode ?? -1}${stderr.length === 0 ? "" : `: ${stderr.join("\n")}`}`;
|
|
109
|
+
Queue.failCauseUnsafe(queue, Cause.fail(processFailure(argv, detail)));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
Queue.endUnsafe(queue);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
outLines.on("line", onStdout);
|
|
116
|
+
errLines.on("line", onStderr);
|
|
117
|
+
child.once("error", onError);
|
|
118
|
+
child.once("close", onClose);
|
|
119
|
+
yield* Effect.addFinalizer(() => Effect.sync(() => {
|
|
120
|
+
child.off("error", onError);
|
|
121
|
+
child.off("close", onClose);
|
|
122
|
+
outLines.close();
|
|
123
|
+
errLines.close();
|
|
124
|
+
}).pipe(Effect.andThen(options.killOnClose ? killChild(child) : Effect.void)));
|
|
125
|
+
}));
|
|
126
|
+
const runStreaming = (argv, cwd, envVars, stdin) => {
|
|
127
|
+
if (argv.length === 0) {
|
|
128
|
+
return Stream.fail(invalidArgv());
|
|
129
|
+
}
|
|
130
|
+
return Stream.callback((queue) => Effect.gen(function* () {
|
|
131
|
+
const child = yield* Effect.acquireRelease(spawnChild(argv, cwd, envVars), (process) => killChild(process));
|
|
132
|
+
const stderr = [];
|
|
133
|
+
const outLines = readline.createInterface({ input: child.stdout });
|
|
134
|
+
const errLines = readline.createInterface({ input: child.stderr });
|
|
135
|
+
const onStdout = (line) => {
|
|
136
|
+
Queue.offerUnsafe(queue, line);
|
|
137
|
+
};
|
|
138
|
+
const onStderr = (line) => {
|
|
139
|
+
if (stderr.length < maxStderrLines) {
|
|
140
|
+
stderr.push(line);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
const onError = (error) => {
|
|
144
|
+
Queue.failCauseUnsafe(queue, Cause.fail(processFailure(argv, error.message)));
|
|
145
|
+
};
|
|
146
|
+
const onClose = (exitCode) => {
|
|
147
|
+
if (exitCode === 0) {
|
|
148
|
+
Queue.endUnsafe(queue);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const detail = `${commandName(argv)} exited with code ${exitCode ?? -1}${stderr.length === 0 ? "" : `: ${stderr.join("\n")}`}`;
|
|
152
|
+
Queue.failCauseUnsafe(queue, Cause.fail(processFailure(argv, detail)));
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
outLines.on("line", onStdout);
|
|
156
|
+
errLines.on("line", onStderr);
|
|
157
|
+
child.once("error", onError);
|
|
158
|
+
child.once("close", onClose);
|
|
159
|
+
writeAndCloseStdin(child, stdin);
|
|
160
|
+
yield* Effect.addFinalizer(() => Effect.sync(() => {
|
|
161
|
+
child.off("error", onError);
|
|
162
|
+
child.off("close", onClose);
|
|
163
|
+
outLines.close();
|
|
164
|
+
errLines.close();
|
|
165
|
+
}));
|
|
166
|
+
}));
|
|
167
|
+
};
|
|
168
|
+
const writeLine = (child, argv, line) => Effect.callback((resume) => {
|
|
169
|
+
const onError = (error) => {
|
|
170
|
+
resume(Effect.fail(processFailure(argv, error.message)));
|
|
171
|
+
};
|
|
172
|
+
child.stdin.once("error", onError);
|
|
173
|
+
child.stdin.write(`${line}\n`, (error) => {
|
|
174
|
+
child.stdin.off("error", onError);
|
|
175
|
+
resume(error === null || error === undefined
|
|
176
|
+
? Effect.void
|
|
177
|
+
: Effect.fail(processFailure(argv, error.message)));
|
|
178
|
+
});
|
|
179
|
+
return Effect.sync(() => {
|
|
180
|
+
child.stdin.off("error", onError);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
const bidirectionalBundle = (stdin, stdout) => [stdin, stdout];
|
|
184
|
+
const runBidirectional = (argv, cwd, envVars) => {
|
|
185
|
+
if (argv.length === 0) {
|
|
186
|
+
return Effect.fail(invalidArgv());
|
|
187
|
+
}
|
|
188
|
+
return Effect.gen(function* () {
|
|
189
|
+
const input = yield* Effect.acquireRelease(Queue.unbounded(), (queue) => Queue.shutdown(queue).pipe(Effect.asVoid));
|
|
190
|
+
const child = yield* Effect.acquireRelease(spawnChild(argv, cwd, envVars), (process) => killChild(process));
|
|
191
|
+
const pump = Effect.suspend(function loop() {
|
|
192
|
+
return Effect.flatMap(Queue.take(input), (line) => writeLine(child, argv, line).pipe(Effect.andThen(Effect.suspend(loop))));
|
|
193
|
+
}).pipe(Effect.ensuring(Effect.sync(() => {
|
|
194
|
+
child.stdin.end();
|
|
195
|
+
})), Effect.catchCause(() => Effect.void));
|
|
196
|
+
yield* Effect.forkScoped(pump);
|
|
197
|
+
return bidirectionalBundle(input, childLines(child, argv, {
|
|
198
|
+
stdin: undefined,
|
|
199
|
+
killOnClose: false,
|
|
200
|
+
failOnNonZero: false
|
|
201
|
+
}));
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
export const nodeProcessExecutor = makeProcessExecutor({
|
|
205
|
+
run: (argv, cwd, envVars) => runCaptured(argv, cwd, envVars, undefined),
|
|
206
|
+
runStreaming: (argv, cwd, envVars) => runStreaming(argv, cwd, envVars, undefined),
|
|
207
|
+
runWithStdin: (argv, cwd, envVars, stdin) => runCaptured(argv, cwd, envVars, stdin),
|
|
208
|
+
runStreamingWithStdin: (argv, cwd, envVars, stdin) => runStreaming(argv, cwd, envVars, stdin),
|
|
209
|
+
runBidirectional
|
|
210
|
+
});
|
|
211
|
+
export const NodeProcessExecutorLive = Layer.succeed(ProcessExecutor)(nodeProcessExecutor);
|
|
212
|
+
//# sourceMappingURL=NodeProcessExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeProcessExecutor.js","sourceRoot":"","sources":["../src/NodeProcessExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
export declare const NodeBoundaryLayers: Layer.Layer<import("@llm4ts/core/HttpClient.ts").HttpClient | import("@llm4ts/core/ProcessExecutor.ts").ProcessExecutor | import("@llm4ts/core/providers/GeminiCliProvider.ts").GeminiCliExecutor | import("@llm4ts/flow/Persistence.ts").PlainFileStore | import("@llm4ts/core/TemporaryFiles.ts").TemporaryFiles, never, never>;
|
|
3
|
+
export declare const NodeRuntimeLive: Layer.Layer<import("@llm4ts/core/HttpClient.ts").HttpClient | import("@llm4ts/core/ProcessExecutor.ts").ProcessExecutor | import("@llm4ts/core/providers/GeminiCliProvider.ts").GeminiCliExecutor | import("@llm4ts/flow/Persistence.ts").PlainFileStore | import("@llm4ts/core/TemporaryFiles.ts").TemporaryFiles | import("@llm4ts/core/ConnectorRegistry.ts").ConnectorRegistry, never, never>;
|
|
4
|
+
//# sourceMappingURL=NodeRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeRuntime.d.ts","sourceRoot":"","sources":["../src/NodeRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAQrC,eAAO,MAAM,kBAAkB,mUAM9B,CAAA;AAID,eAAO,MAAM,eAAe,mYAA6D,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { ConnectorRegistryLive } from "@llm4ts/core/providers/ConnectorFactories";
|
|
3
|
+
import { NodeHttpClientLive } from "./NodeHttpClient.js";
|
|
4
|
+
import { NodeGeminiCliExecutorLive } from "./NodeGeminiCliExecutor.js";
|
|
5
|
+
import { NodePlainFileStoreLive } from "./NodePlainFileStore.js";
|
|
6
|
+
import { NodeProcessExecutorLive } from "./NodeProcessExecutor.js";
|
|
7
|
+
import { NodeTemporaryFilesLive } from "./NodeTemporaryFiles.js";
|
|
8
|
+
export const NodeBoundaryLayers = Layer.mergeAll(NodeHttpClientLive, NodeProcessExecutorLive, NodeTemporaryFilesLive, NodeGeminiCliExecutorLive, NodePlainFileStoreLive);
|
|
9
|
+
const NodeConnectorRegistryLive = ConnectorRegistryLive.pipe(Layer.provide(NodeBoundaryLayers));
|
|
10
|
+
export const NodeRuntimeLive = Layer.merge(NodeBoundaryLayers, NodeConnectorRegistryLive);
|
|
11
|
+
//# sourceMappingURL=NodeRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeRuntime.js","sourceRoot":"","sources":["../src/NodeRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,QAAQ,CAC9C,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,CACvB,CAAA;AAED,MAAM,yBAAyB,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAA;AAE/F,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { TemporaryFiles, type TemporaryFilesShape } from "@llm4ts/core/TemporaryFiles";
|
|
3
|
+
export declare const nodeTemporaryFiles: TemporaryFilesShape;
|
|
4
|
+
export declare const NodeTemporaryFilesLive: Layer.Layer<TemporaryFiles, never, never>;
|
|
5
|
+
//# sourceMappingURL=NodeTemporaryFiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeTemporaryFiles.d.ts","sourceRoot":"","sources":["../src/NodeTemporaryFiles.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAWtF,eAAO,MAAM,kBAAkB,EAAE,mBA2BhC,CAAA;AAED,eAAO,MAAM,sBAAsB,2CAAoD,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import { TemporaryFiles } from "@llm4ts/core/TemporaryFiles";
|
|
7
|
+
import { ProviderError } from "@llm4ts/core/Errors";
|
|
8
|
+
const errorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
9
|
+
export const nodeTemporaryFiles = {
|
|
10
|
+
write: (prefix, suffix, contents) => Effect.acquireRelease(Effect.tryPromise({
|
|
11
|
+
try: async () => {
|
|
12
|
+
const directory = await mkdtemp(join(tmpdir(), prefix));
|
|
13
|
+
const path = join(directory, `value${suffix}`);
|
|
14
|
+
await writeFile(path, contents, "utf8");
|
|
15
|
+
return {
|
|
16
|
+
directory,
|
|
17
|
+
path
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
catch: (error) => ProviderError.make({
|
|
21
|
+
message: `Failed to create temporary file: ${errorMessage(error)}`,
|
|
22
|
+
cause: error
|
|
23
|
+
})
|
|
24
|
+
}), ({ directory }) => Effect.promise(() => rm(directory, {
|
|
25
|
+
recursive: true,
|
|
26
|
+
force: true
|
|
27
|
+
})).pipe(Effect.catchCause(() => Effect.void))).pipe(Effect.map(({ path }) => path))
|
|
28
|
+
};
|
|
29
|
+
export const NodeTemporaryFilesLive = Layer.succeed(TemporaryFiles, nodeTemporaryFiles);
|
|
30
|
+
//# sourceMappingURL=NodeTemporaryFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeTemporaryFiles.js","sourceRoot":"","sources":["../src/NodeTemporaryFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAA4B,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAOnD,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE,CAC9C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAExD,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAClC,MAAM,CAAC,cAAc,CACnB,MAAM,CAAC,UAAU,CAAC;QAChB,GAAG,EAAE,KAAK,IAA4B,EAAE;YACtC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,MAAM,EAAE,CAAC,CAAA;YAC9C,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YACvC,OAAO;gBACL,SAAS;gBACT,IAAI;aACL,CAAA;QACH,CAAC;QACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,aAAa,CAAC,IAAI,CAAC;YACjB,OAAO,EAAE,oCAAoC,YAAY,CAAC,KAAK,CAAC,EAAE;YAClE,KAAK,EAAE,KAAK;SACb,CAAC;KACL,CAAC,EACF,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,EAAE,CAAC,SAAS,EAAE;QACZ,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;KACZ,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAC/C,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;CACzC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import { Workspace, type WorkspaceError, type WorkspaceLimits, type WorkspaceShape } from "@llm4ts/flow/Workspace";
|
|
4
|
+
export declare const makeNodeWorkspace: (configuredRoot: string, limits?: WorkspaceLimits | undefined) => Effect.Effect<WorkspaceShape, WorkspaceError, never>;
|
|
5
|
+
export declare const NodeWorkspaceLive: (root: string, limits?: WorkspaceLimits) => Layer.Layer<Workspace, WorkspaceError>;
|
|
6
|
+
//# sourceMappingURL=NodeWorkspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeWorkspace.d.ts","sourceRoot":"","sources":["../src/NodeWorkspace.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAEL,SAAS,EAET,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAA;AAmD/B,eAAO,MAAM,iBAAiB,wHA4M5B,CAAA;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,SAAQ,eAAwC,KAC/C,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CACkB,CAAA"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { lstat, mkdir, readFile, readdir, realpath, stat, writeFile, appendFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import { SearchMatch, Workspace, defaultWorkspaceLimits } from "@llm4ts/flow/Workspace";
|
|
6
|
+
import { WorkspaceIoError, WorkspaceLimitError, WorkspacePathError } from "@llm4ts/flow/FlowError";
|
|
7
|
+
const errorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
8
|
+
const isMissing = (error) => error instanceof Error && "code" in error && error.code === "ENOENT";
|
|
9
|
+
const contains = (root, target) => {
|
|
10
|
+
const path = relative(root, target);
|
|
11
|
+
return path === "" || (!path.startsWith(`..${sep}`) && path !== ".." && !isAbsolute(path));
|
|
12
|
+
};
|
|
13
|
+
const globRegex = (glob) => {
|
|
14
|
+
let source = "";
|
|
15
|
+
for (let index = 0; index < glob.length; index += 1) {
|
|
16
|
+
const character = glob.charAt(index);
|
|
17
|
+
if (character === "*" && glob.charAt(index + 1) === "*") {
|
|
18
|
+
source += ".*";
|
|
19
|
+
index += 1;
|
|
20
|
+
}
|
|
21
|
+
else if (character === "*") {
|
|
22
|
+
source += "[^/]*";
|
|
23
|
+
}
|
|
24
|
+
else if (character === "?") {
|
|
25
|
+
source += "[^/]";
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
source += character.replace(/[\\^$.[\]{}()+|]/g, "\\$&");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return new RegExp(`^${source}$`);
|
|
32
|
+
};
|
|
33
|
+
const nearestExistingParent = async (path) => {
|
|
34
|
+
let current = path;
|
|
35
|
+
while (true) {
|
|
36
|
+
try {
|
|
37
|
+
await lstat(current);
|
|
38
|
+
return current;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (!isMissing(error)) {
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
const parent = dirname(current);
|
|
45
|
+
if (parent === current) {
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
current = parent;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
export const makeNodeWorkspace = Effect.fn("@llm4ts/runner/NodeWorkspace.make")(function* (configuredRoot, limits = defaultWorkspaceLimits) {
|
|
53
|
+
const root = yield* Effect.tryPromise({
|
|
54
|
+
try: () => realpath(resolve(configuredRoot)),
|
|
55
|
+
catch: (error) => WorkspaceIoError.make({
|
|
56
|
+
operation: "open workspace",
|
|
57
|
+
path: configuredRoot,
|
|
58
|
+
message: errorMessage(error),
|
|
59
|
+
cause: error
|
|
60
|
+
})
|
|
61
|
+
});
|
|
62
|
+
const resolveSafe = (input) => Effect.tryPromise({
|
|
63
|
+
try: async () => {
|
|
64
|
+
const lexical = resolve(root, input);
|
|
65
|
+
if (!contains(root, lexical)) {
|
|
66
|
+
throw WorkspacePathError.make({
|
|
67
|
+
path: input,
|
|
68
|
+
message: "path escapes the configured workspace"
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const existing = await nearestExistingParent(lexical);
|
|
72
|
+
const physical = await realpath(existing);
|
|
73
|
+
if (!contains(root, physical)) {
|
|
74
|
+
throw WorkspacePathError.make({
|
|
75
|
+
path: input,
|
|
76
|
+
message: "path resolves through a symlink outside the configured workspace"
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return lexical;
|
|
80
|
+
},
|
|
81
|
+
catch: (error) => error instanceof WorkspacePathError
|
|
82
|
+
? error
|
|
83
|
+
: WorkspaceIoError.make({
|
|
84
|
+
operation: "resolve",
|
|
85
|
+
path: input,
|
|
86
|
+
message: errorMessage(error),
|
|
87
|
+
cause: error
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
const read = Effect.fn("@llm4ts/runner/NodeWorkspace.read")(function* (input) {
|
|
91
|
+
const path = yield* resolveSafe(input);
|
|
92
|
+
const info = yield* Effect.tryPromise({
|
|
93
|
+
try: () => stat(path),
|
|
94
|
+
catch: (error) => WorkspaceIoError.make({
|
|
95
|
+
operation: "read",
|
|
96
|
+
path: input,
|
|
97
|
+
message: errorMessage(error),
|
|
98
|
+
cause: error
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
if (info.size > limits.maxReadBytes) {
|
|
102
|
+
return yield* WorkspaceLimitError.make({
|
|
103
|
+
operation: "read bytes",
|
|
104
|
+
limit: limits.maxReadBytes,
|
|
105
|
+
actual: info.size
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return yield* Effect.tryPromise({
|
|
109
|
+
try: () => readFile(path, "utf8"),
|
|
110
|
+
catch: (error) => WorkspaceIoError.make({
|
|
111
|
+
operation: "read",
|
|
112
|
+
path: input,
|
|
113
|
+
message: errorMessage(error),
|
|
114
|
+
cause: error
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
const writeBounded = (operation, input, contents) => Effect.gen(function* () {
|
|
119
|
+
const bytes = Buffer.byteLength(contents);
|
|
120
|
+
if (bytes > limits.maxWriteBytes) {
|
|
121
|
+
return yield* WorkspaceLimitError.make({
|
|
122
|
+
operation: `${operation} bytes`,
|
|
123
|
+
limit: limits.maxWriteBytes,
|
|
124
|
+
actual: bytes
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
const path = yield* resolveSafe(input);
|
|
128
|
+
yield* Effect.tryPromise({
|
|
129
|
+
try: async () => {
|
|
130
|
+
await mkdir(dirname(path), { recursive: true });
|
|
131
|
+
if (operation === "write") {
|
|
132
|
+
await writeFile(path, contents, "utf8");
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
await appendFile(path, contents, "utf8");
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
catch: (error) => WorkspaceIoError.make({
|
|
139
|
+
operation,
|
|
140
|
+
path: input,
|
|
141
|
+
message: errorMessage(error),
|
|
142
|
+
cause: error
|
|
143
|
+
})
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
const discover = (pattern = "**/*") => Effect.tryPromise({
|
|
147
|
+
try: async () => {
|
|
148
|
+
const normalizedPattern = pattern.replaceAll("\\", "/");
|
|
149
|
+
const matcher = normalizedPattern === "**/*" ? /.*/ : globRegex(normalizedPattern);
|
|
150
|
+
const results = [];
|
|
151
|
+
const walk = async (directory, depth) => {
|
|
152
|
+
if (depth > limits.maxDepth) {
|
|
153
|
+
throw WorkspaceLimitError.make({
|
|
154
|
+
operation: "discovery depth",
|
|
155
|
+
limit: limits.maxDepth,
|
|
156
|
+
actual: depth
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
const entries = await readdir(directory, { withFileTypes: true });
|
|
160
|
+
entries.sort((left, right) => left.name.localeCompare(right.name));
|
|
161
|
+
for (const entry of entries) {
|
|
162
|
+
if (entry.isSymbolicLink()) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const absolute = resolve(directory, entry.name);
|
|
166
|
+
const path = relative(root, absolute).split(sep).join("/");
|
|
167
|
+
if (entry.isDirectory()) {
|
|
168
|
+
await walk(absolute, depth + 1);
|
|
169
|
+
}
|
|
170
|
+
else if (entry.isFile() && matcher.test(path)) {
|
|
171
|
+
results.push(path);
|
|
172
|
+
if (results.length > limits.maxResults) {
|
|
173
|
+
throw WorkspaceLimitError.make({
|
|
174
|
+
operation: "discovery results",
|
|
175
|
+
limit: limits.maxResults,
|
|
176
|
+
actual: results.length
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
await walk(root, 0);
|
|
183
|
+
return results;
|
|
184
|
+
},
|
|
185
|
+
catch: (error) => error instanceof WorkspaceLimitError
|
|
186
|
+
? error
|
|
187
|
+
: WorkspaceIoError.make({
|
|
188
|
+
operation: "discover",
|
|
189
|
+
path: root,
|
|
190
|
+
message: errorMessage(error),
|
|
191
|
+
cause: error
|
|
192
|
+
})
|
|
193
|
+
});
|
|
194
|
+
const search = Effect.fn("@llm4ts/runner/NodeWorkspace.search")(function* (query, pattern = "**/*") {
|
|
195
|
+
const paths = yield* discover(pattern);
|
|
196
|
+
const matches = [];
|
|
197
|
+
for (const path of paths) {
|
|
198
|
+
const text = yield* read(path);
|
|
199
|
+
const lines = text.split("\n");
|
|
200
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
201
|
+
const line = lines[index] ?? "";
|
|
202
|
+
if (line.includes(query)) {
|
|
203
|
+
matches.push(SearchMatch.make({
|
|
204
|
+
path,
|
|
205
|
+
line: index + 1,
|
|
206
|
+
text: line
|
|
207
|
+
}));
|
|
208
|
+
if (matches.length > limits.maxResults) {
|
|
209
|
+
return yield* WorkspaceLimitError.make({
|
|
210
|
+
operation: "search results",
|
|
211
|
+
limit: limits.maxResults,
|
|
212
|
+
actual: matches.length
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return matches;
|
|
219
|
+
});
|
|
220
|
+
return {
|
|
221
|
+
root,
|
|
222
|
+
resolve: resolveSafe,
|
|
223
|
+
read,
|
|
224
|
+
write: (path, contents) => writeBounded("write", path, contents),
|
|
225
|
+
append: (path, contents) => writeBounded("append", path, contents),
|
|
226
|
+
discover,
|
|
227
|
+
search
|
|
228
|
+
};
|
|
229
|
+
});
|
|
230
|
+
export const NodeWorkspaceLive = (root, limits = defaultWorkspaceLimits) => Layer.effect(Workspace, makeNodeWorkspace(root, limits));
|
|
231
|
+
//# sourceMappingURL=NodeWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeWorkspace.js","sourceRoot":"","sources":["../src/NodeWorkspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Package.d.ts","sourceRoot":"","sources":["../src/Package.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,mBAAmB,CAAA"}
|
package/dist/Package.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Package.js","sourceRoot":"","sources":["../src/Package.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewFingerprint.d.ts","sourceRoot":"","sources":["../src/ReviewFingerprint.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,GAAI,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,KAAG,MAUnE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
export const reviewFingerprint = (...parts) => {
|
|
3
|
+
const digest = createHash("sha256");
|
|
4
|
+
for (const part of parts) {
|
|
5
|
+
const bytes = Buffer.from(part, "utf8");
|
|
6
|
+
const length = Buffer.alloc(4);
|
|
7
|
+
length.writeUInt32BE(bytes.length);
|
|
8
|
+
digest.update(length);
|
|
9
|
+
digest.update(bytes);
|
|
10
|
+
}
|
|
11
|
+
return digest.digest("hex");
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=ReviewFingerprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewFingerprint.js","sourceRoot":"","sources":["../src/ReviewFingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,KAA4B,EAAU,EAAE;IAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC,CAAA"}
|