@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.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -0
  3. package/dist/Cli.d.ts +5 -0
  4. package/dist/Cli.d.ts.map +1 -0
  5. package/dist/Cli.js +36 -0
  6. package/dist/Cli.js.map +1 -0
  7. package/dist/CoderPolicy.d.ts +12 -0
  8. package/dist/CoderPolicy.d.ts.map +1 -0
  9. package/dist/CoderPolicy.js +59 -0
  10. package/dist/CoderPolicy.js.map +1 -0
  11. package/dist/Connectors.d.ts +28 -0
  12. package/dist/Connectors.d.ts.map +1 -0
  13. package/dist/Connectors.js +165 -0
  14. package/dist/Connectors.js.map +1 -0
  15. package/dist/Doctor.d.ts +4 -0
  16. package/dist/Doctor.d.ts.map +1 -0
  17. package/dist/Doctor.js +33 -0
  18. package/dist/Doctor.js.map +1 -0
  19. package/dist/FlowArgs.d.ts +34 -0
  20. package/dist/FlowArgs.d.ts.map +1 -0
  21. package/dist/FlowArgs.js +136 -0
  22. package/dist/FlowArgs.js.map +1 -0
  23. package/dist/FlowRunner.d.ts +48 -0
  24. package/dist/FlowRunner.d.ts.map +1 -0
  25. package/dist/FlowRunner.js +97 -0
  26. package/dist/FlowRunner.js.map +1 -0
  27. package/dist/McpStdio.d.ts +7 -0
  28. package/dist/McpStdio.d.ts.map +1 -0
  29. package/dist/McpStdio.js +19 -0
  30. package/dist/McpStdio.js.map +1 -0
  31. package/dist/NodeGeminiCliExecutor.d.ts +7 -0
  32. package/dist/NodeGeminiCliExecutor.d.ts.map +1 -0
  33. package/dist/NodeGeminiCliExecutor.js +26 -0
  34. package/dist/NodeGeminiCliExecutor.js.map +1 -0
  35. package/dist/NodeHttpClient.d.ts +5 -0
  36. package/dist/NodeHttpClient.d.ts.map +1 -0
  37. package/dist/NodeHttpClient.js +109 -0
  38. package/dist/NodeHttpClient.js.map +1 -0
  39. package/dist/NodePlainFileStore.d.ts +5 -0
  40. package/dist/NodePlainFileStore.d.ts.map +1 -0
  41. package/dist/NodePlainFileStore.js +64 -0
  42. package/dist/NodePlainFileStore.js.map +1 -0
  43. package/dist/NodeProcessExecutor.d.ts +5 -0
  44. package/dist/NodeProcessExecutor.d.ts.map +1 -0
  45. package/dist/NodeProcessExecutor.js +212 -0
  46. package/dist/NodeProcessExecutor.js.map +1 -0
  47. package/dist/NodeRuntime.d.ts +4 -0
  48. package/dist/NodeRuntime.d.ts.map +1 -0
  49. package/dist/NodeRuntime.js +11 -0
  50. package/dist/NodeRuntime.js.map +1 -0
  51. package/dist/NodeTemporaryFiles.d.ts +5 -0
  52. package/dist/NodeTemporaryFiles.d.ts.map +1 -0
  53. package/dist/NodeTemporaryFiles.js +30 -0
  54. package/dist/NodeTemporaryFiles.js.map +1 -0
  55. package/dist/NodeWorkspace.d.ts +6 -0
  56. package/dist/NodeWorkspace.d.ts.map +1 -0
  57. package/dist/NodeWorkspace.js +231 -0
  58. package/dist/NodeWorkspace.js.map +1 -0
  59. package/dist/Package.d.ts +2 -0
  60. package/dist/Package.d.ts.map +1 -0
  61. package/dist/Package.js +2 -0
  62. package/dist/Package.js.map +1 -0
  63. package/dist/ReviewFingerprint.d.ts +2 -0
  64. package/dist/ReviewFingerprint.d.ts.map +1 -0
  65. package/dist/ReviewFingerprint.js +13 -0
  66. package/dist/ReviewFingerprint.js.map +1 -0
  67. package/dist/Terminal.d.ts +46 -0
  68. package/dist/Terminal.d.ts.map +1 -0
  69. package/dist/Terminal.js +226 -0
  70. package/dist/Terminal.js.map +1 -0
  71. package/dist/TerminalInteraction.d.ts +4 -0
  72. package/dist/TerminalInteraction.d.ts.map +1 -0
  73. package/dist/TerminalInteraction.js +25 -0
  74. package/dist/TerminalInteraction.js.map +1 -0
  75. package/dist/cli-main.d.ts +3 -0
  76. package/dist/cli-main.d.ts.map +1 -0
  77. package/dist/cli-main.js +39 -0
  78. package/dist/cli-main.js.map +1 -0
  79. package/package.json +74 -0
  80. package/src/Cli.ts +51 -0
  81. package/src/CoderPolicy.ts +82 -0
  82. package/src/Connectors.ts +225 -0
  83. package/src/Doctor.ts +44 -0
  84. package/src/FlowArgs.ts +167 -0
  85. package/src/FlowRunner.ts +220 -0
  86. package/src/McpStdio.ts +41 -0
  87. package/src/NodeGeminiCliExecutor.ts +56 -0
  88. package/src/NodeHttpClient.ts +224 -0
  89. package/src/NodePlainFileStore.ts +75 -0
  90. package/src/NodeProcessExecutor.ts +331 -0
  91. package/src/NodeRuntime.ts +19 -0
  92. package/src/NodeTemporaryFiles.ts +46 -0
  93. package/src/NodeWorkspace.ts +282 -0
  94. package/src/Package.ts +1 -0
  95. package/src/ReviewFingerprint.ts +13 -0
  96. package/src/Terminal.ts +329 -0
  97. package/src/TerminalInteraction.ts +43 -0
  98. 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,2 @@
1
+ export declare const packageName = "@llm4ts/runner";
2
+ //# sourceMappingURL=Package.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Package.d.ts","sourceRoot":"","sources":["../src/Package.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const packageName = "@llm4ts/runner";
2
+ //# sourceMappingURL=Package.js.map
@@ -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,2 @@
1
+ export declare const reviewFingerprint: (...parts: ReadonlyArray<string>) => string;
2
+ //# sourceMappingURL=ReviewFingerprint.d.ts.map
@@ -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"}