clanka 0.0.1

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 (72) hide show
  1. package/README.md +3 -0
  2. package/dist/Agent.d.ts +119 -0
  3. package/dist/Agent.d.ts.map +1 -0
  4. package/dist/Agent.js +240 -0
  5. package/dist/Agent.js.map +1 -0
  6. package/dist/AgentTools.d.ts +246 -0
  7. package/dist/AgentTools.d.ts.map +1 -0
  8. package/dist/AgentTools.js +374 -0
  9. package/dist/AgentTools.js.map +1 -0
  10. package/dist/AgentTools.test.d.ts +2 -0
  11. package/dist/AgentTools.test.d.ts.map +1 -0
  12. package/dist/AgentTools.test.js +147 -0
  13. package/dist/AgentTools.test.js.map +1 -0
  14. package/dist/ApplyPatch.d.ts +27 -0
  15. package/dist/ApplyPatch.d.ts.map +1 -0
  16. package/dist/ApplyPatch.js +343 -0
  17. package/dist/ApplyPatch.js.map +1 -0
  18. package/dist/ApplyPatch.test.d.ts +2 -0
  19. package/dist/ApplyPatch.test.d.ts.map +1 -0
  20. package/dist/ApplyPatch.test.js +99 -0
  21. package/dist/ApplyPatch.test.js.map +1 -0
  22. package/dist/Codex.d.ts +11 -0
  23. package/dist/Codex.d.ts.map +1 -0
  24. package/dist/Codex.js +14 -0
  25. package/dist/Codex.js.map +1 -0
  26. package/dist/CodexAuth.d.ts +68 -0
  27. package/dist/CodexAuth.d.ts.map +1 -0
  28. package/dist/CodexAuth.js +270 -0
  29. package/dist/CodexAuth.js.map +1 -0
  30. package/dist/CodexAuth.test.d.ts +2 -0
  31. package/dist/CodexAuth.test.d.ts.map +1 -0
  32. package/dist/CodexAuth.test.js +425 -0
  33. package/dist/CodexAuth.test.js.map +1 -0
  34. package/dist/Executor.d.ts +20 -0
  35. package/dist/Executor.d.ts.map +1 -0
  36. package/dist/Executor.js +76 -0
  37. package/dist/Executor.js.map +1 -0
  38. package/dist/OutputFormatter.d.ts +11 -0
  39. package/dist/OutputFormatter.d.ts.map +1 -0
  40. package/dist/OutputFormatter.js +5 -0
  41. package/dist/OutputFormatter.js.map +1 -0
  42. package/dist/ToolkitRenderer.d.ts +17 -0
  43. package/dist/ToolkitRenderer.d.ts.map +1 -0
  44. package/dist/ToolkitRenderer.js +25 -0
  45. package/dist/ToolkitRenderer.js.map +1 -0
  46. package/dist/TypeBuilder.d.ts +11 -0
  47. package/dist/TypeBuilder.d.ts.map +1 -0
  48. package/dist/TypeBuilder.js +383 -0
  49. package/dist/TypeBuilder.js.map +1 -0
  50. package/dist/TypeBuilder.test.d.ts +2 -0
  51. package/dist/TypeBuilder.test.d.ts.map +1 -0
  52. package/dist/TypeBuilder.test.js +243 -0
  53. package/dist/TypeBuilder.test.js.map +1 -0
  54. package/dist/index.d.ts +25 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +25 -0
  57. package/dist/index.js.map +1 -0
  58. package/package.json +72 -0
  59. package/src/Agent.ts +398 -0
  60. package/src/AgentTools.test.ts +215 -0
  61. package/src/AgentTools.ts +507 -0
  62. package/src/ApplyPatch.test.ts +154 -0
  63. package/src/ApplyPatch.ts +473 -0
  64. package/src/Codex.ts +14 -0
  65. package/src/CodexAuth.test.ts +729 -0
  66. package/src/CodexAuth.ts +571 -0
  67. package/src/Executor.ts +129 -0
  68. package/src/OutputFormatter.ts +17 -0
  69. package/src/ToolkitRenderer.ts +39 -0
  70. package/src/TypeBuilder.test.ts +508 -0
  71. package/src/TypeBuilder.ts +670 -0
  72. package/src/index.ts +29 -0
@@ -0,0 +1,374 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { Array, Data, Deferred, Effect, FileSystem, Path, pipe, Schema, ServiceMap, Stream, } from "effect";
5
+ import { Tool, Toolkit } from "effect/unstable/ai";
6
+ import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
7
+ import * as Glob from "glob";
8
+ import * as Rg from "@vscode/ripgrep";
9
+ import { parsePatch, patchChunks } from "./ApplyPatch.js";
10
+ /**
11
+ * @since 1.0.0
12
+ * @category Context
13
+ */
14
+ export class CurrentDirectory extends ServiceMap.Service()("clanka/AgentTools/CurrentDirectory") {
15
+ }
16
+ /**
17
+ * @since 1.0.0
18
+ * @category Context
19
+ */
20
+ export class TaskCompleteDeferred extends ServiceMap.Service()("clanka/AgentTools/TaskCompleteDeferred") {
21
+ }
22
+ /**
23
+ * @since 1.0.0
24
+ * @category Context
25
+ */
26
+ export class SubagentContext extends ServiceMap.Service()("clanka/AgentTools/SubagentContext") {
27
+ }
28
+ /**
29
+ * @since 1.0.0
30
+ * @category Context
31
+ */
32
+ export const makeContextNoop = (cwd) => SubagentContext.serviceMap({
33
+ spawn: () => Effect.die("Not implemented"),
34
+ }).pipe(ServiceMap.add(CurrentDirectory, cwd ?? "/"), ServiceMap.add(TaskCompleteDeferred, Deferred.makeUnsafe()));
35
+ /**
36
+ * @since 1.0.0
37
+ * @category Toolkit
38
+ */
39
+ export const AgentTools = Toolkit.make(Tool.make("readFile", {
40
+ description: "Read a file and optionally filter the lines to return. Returns null if the file doesn't exist.",
41
+ parameters: Schema.Struct({
42
+ path: Schema.String,
43
+ startLine: Schema.optional(Schema.Number),
44
+ endLine: Schema.optional(Schema.Number),
45
+ }),
46
+ success: Schema.NullOr(Schema.String),
47
+ dependencies: [CurrentDirectory],
48
+ }), Tool.make("createFile", {
49
+ description: "Write content to a file, creating parent directories if needed.",
50
+ parameters: Schema.Struct({
51
+ path: Schema.String,
52
+ content: Schema.String,
53
+ }),
54
+ dependencies: [CurrentDirectory],
55
+ }), Tool.make("applyPatch", {
56
+ description: "Apply a wrapped patch with Add/Delete/Update sections.",
57
+ parameters: Schema.String.annotate({
58
+ identifier: "patch",
59
+ }),
60
+ success: Schema.String,
61
+ dependencies: [CurrentDirectory],
62
+ }), Tool.make("removeFile", {
63
+ description: "Remove a file.",
64
+ parameters: Schema.String.annotate({
65
+ identifier: "path",
66
+ }),
67
+ dependencies: [CurrentDirectory],
68
+ }), Tool.make("renameFile", {
69
+ description: "Rename or move a file, creating parent directories if needed.",
70
+ parameters: Schema.Struct({
71
+ from: Schema.String,
72
+ to: Schema.String,
73
+ }),
74
+ dependencies: [CurrentDirectory],
75
+ }), Tool.make("mkdir", {
76
+ description: "Make a directory, creating parent directories if needed.",
77
+ parameters: Schema.String.annotate({
78
+ identifier: "path",
79
+ }),
80
+ dependencies: [CurrentDirectory],
81
+ }), Tool.make("ls", {
82
+ description: "List the contents of a directory",
83
+ parameters: Schema.String.annotate({
84
+ identifier: "directory",
85
+ }),
86
+ success: Schema.Array(Schema.String),
87
+ dependencies: [CurrentDirectory],
88
+ }), Tool.make("rg", {
89
+ description: "Search for a pattern in files using ripgrep.",
90
+ parameters: Schema.Struct({
91
+ pattern: Schema.String,
92
+ glob: Schema.optional(Schema.String).annotate({
93
+ documentation: "--glob",
94
+ }),
95
+ maxLines: Schema.optional(Schema.Finite).annotate({
96
+ documentation: "The total maximum number of lines to return across all files (default: 500)",
97
+ }),
98
+ }),
99
+ success: Schema.String,
100
+ dependencies: [CurrentDirectory],
101
+ }), Tool.make("glob", {
102
+ description: "Find files matching a glob pattern.",
103
+ parameters: Schema.String.annotate({
104
+ identifier: "pattern",
105
+ }),
106
+ success: Schema.Array(Schema.String),
107
+ dependencies: [CurrentDirectory],
108
+ }), Tool.make("bash", {
109
+ description: "Run a bash command and return the output",
110
+ parameters: Schema.String.annotate({
111
+ identifier: "command",
112
+ }),
113
+ success: Schema.String,
114
+ dependencies: [CurrentDirectory],
115
+ }), Tool.make("gh", {
116
+ description: "Use the GitHub CLI to run a command and return the output",
117
+ parameters: Schema.Array(Schema.String).annotate({
118
+ identifier: "args",
119
+ }),
120
+ success: Schema.String,
121
+ dependencies: [CurrentDirectory],
122
+ }), Tool.make("subagent", {
123
+ description: "Prompt another agent with the same tools to assist with a subtask. The subagent will return a markdown summary of the work it did.",
124
+ parameters: Schema.String.annotate({
125
+ identifier: "prompt",
126
+ }),
127
+ success: Schema.String,
128
+ dependencies: [SubagentContext],
129
+ }), Tool.make("sleep", {
130
+ description: "Sleep for a specified number of milliseconds",
131
+ parameters: Schema.Finite.annotate({
132
+ identifier: "ms",
133
+ }),
134
+ }), Tool.make("taskComplete", {
135
+ description: "Only call this when you have fully completed the user's task. Provide a markdown summary of the work you have done.",
136
+ parameters: Schema.String.annotate({
137
+ identifier: "summary",
138
+ }),
139
+ dependencies: [TaskCompleteDeferred],
140
+ }));
141
+ /**
142
+ * @since 1.0.0
143
+ * @category Toolkit
144
+ */
145
+ export const AgentToolHandlers = AgentTools.toLayer(Effect.gen(function* () {
146
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
147
+ const fs = yield* FileSystem.FileSystem;
148
+ const pathService = yield* Path.Path;
149
+ const execute = Effect.fn(function* (command) {
150
+ const handle = yield* spawner.spawn(command);
151
+ return yield* handle.all.pipe(Stream.decodeText, Stream.mkString, Effect.flatMap(Effect.fnUntraced(function* (output) {
152
+ const exitCode = yield* handle.exitCode;
153
+ if (exitCode === 0)
154
+ return output;
155
+ return yield* Effect.die(new Error(`Command failed with exit code ${exitCode}: ${output}`));
156
+ })));
157
+ }, Effect.scoped);
158
+ return AgentTools.of({
159
+ readFile: Effect.fn("AgentTools.readFile")(function* (options) {
160
+ yield* Effect.logInfo(`Calling "readFile"`).pipe(Effect.annotateLogs(options));
161
+ const cwd = yield* CurrentDirectory;
162
+ let stream = pipe(fs.stream(pathService.resolve(cwd, options.path)), Stream.decodeText, Stream.splitLines);
163
+ if (options.startLine) {
164
+ stream = Stream.drop(stream, options.startLine - 1);
165
+ }
166
+ if (options.endLine) {
167
+ stream = Stream.take(stream, options.endLine - (options.startLine ?? 1) + 1);
168
+ }
169
+ return yield* Stream.runCollect(stream).pipe(Effect.map(Array.join("\n")), Effect.catchReason("PlatformError", "NotFound", () => Effect.succeed(null)), Effect.orDie);
170
+ }),
171
+ createFile: Effect.fn("AgentTools.createFile")(function* (options) {
172
+ yield* Effect.logInfo(`Calling "createFile"`).pipe(Effect.annotateLogs({ path: options.path }));
173
+ const cwd = yield* CurrentDirectory;
174
+ const path = pathService.resolve(cwd, options.path);
175
+ if (yield* fs.exists(path)) {
176
+ return yield* Effect.die("File already exists");
177
+ }
178
+ yield* fs.makeDirectory(pathService.dirname(path), {
179
+ recursive: true,
180
+ });
181
+ yield* fs.writeFileString(path, options.content);
182
+ }, Effect.orDie),
183
+ removeFile: Effect.fn("AgentTools.removeFile")(function* (path) {
184
+ yield* Effect.logInfo(`Calling "removeFile"`).pipe(Effect.annotateLogs({ path }));
185
+ const cwd = yield* CurrentDirectory;
186
+ return yield* fs.remove(pathService.resolve(cwd, path), { force: true });
187
+ }, Effect.orDie),
188
+ renameFile: Effect.fn("AgentTools.renameFile")(function* (options) {
189
+ yield* Effect.logInfo(`Calling "renameFile"`).pipe(Effect.annotateLogs(options));
190
+ const cwd = yield* CurrentDirectory;
191
+ const from = pathService.resolve(cwd, options.from);
192
+ const to = pathService.resolve(cwd, options.to);
193
+ yield* fs.makeDirectory(pathService.dirname(to), {
194
+ recursive: true,
195
+ });
196
+ return yield* fs.rename(from, to);
197
+ }, Effect.orDie),
198
+ mkdir: Effect.fn("AgentTools.mkdir")(function* (path) {
199
+ yield* Effect.logInfo(`Calling "mkdir"`).pipe(Effect.annotateLogs({ path }));
200
+ const cwd = yield* CurrentDirectory;
201
+ return yield* fs.makeDirectory(pathService.resolve(cwd, path), {
202
+ recursive: true,
203
+ });
204
+ }, Effect.orDie),
205
+ ls: Effect.fn("AgentTools.ls")(function* (path) {
206
+ yield* Effect.logInfo(`Calling "ls"`).pipe(Effect.annotateLogs({ path }));
207
+ const cwd = yield* CurrentDirectory;
208
+ return yield* fs
209
+ .readDirectory(pathService.resolve(cwd, path))
210
+ .pipe(Effect.orDie);
211
+ }),
212
+ rg: Effect.fn("AgentTools.rg")(function* (options) {
213
+ yield* Effect.logInfo(`Calling "rg"`).pipe(Effect.annotateLogs(options));
214
+ const cwd = yield* CurrentDirectory;
215
+ const args = ["--max-filesize", "1M", "--line-number"];
216
+ if (options.glob) {
217
+ args.push("--glob", options.glob);
218
+ }
219
+ args.push(options.pattern);
220
+ let stream = pipe(spawner.streamLines(ChildProcess.make(Rg.rgPath, args, {
221
+ cwd,
222
+ stdin: "ignore",
223
+ })), Stream.map((line) => {
224
+ if (line.length <= 500)
225
+ return line;
226
+ return line.slice(0, 500) + "...[truncated]";
227
+ }));
228
+ stream = Stream.take(stream, options.maxLines ?? 500);
229
+ return yield* Stream.runCollect(stream).pipe(Effect.map(Array.join("\n")), Effect.orDie);
230
+ }),
231
+ glob: Effect.fn("AgentTools.glob")(function* (pattern) {
232
+ yield* Effect.logInfo(`Calling "glob"`).pipe(Effect.annotateLogs({ pattern }));
233
+ const cwd = yield* CurrentDirectory;
234
+ return yield* Effect.promise(() => Glob.glob(pattern, { cwd }));
235
+ }),
236
+ bash: Effect.fn("AgentTools.bash")(function* (command) {
237
+ yield* Effect.logInfo(`Calling "bash"`).pipe(Effect.annotateLogs({ command }));
238
+ const cwd = yield* CurrentDirectory;
239
+ const cmd = ChildProcess.make("bash", ["-c", command], {
240
+ cwd,
241
+ stdin: "ignore",
242
+ });
243
+ return yield* execute(cmd);
244
+ }, Effect.orDie),
245
+ gh: Effect.fn("AgentTools.gh")(function* (args) {
246
+ yield* Effect.logInfo(`Calling "gh"`).pipe(Effect.annotateLogs({ args }));
247
+ const cwd = yield* CurrentDirectory;
248
+ const cmd = ChildProcess.make("gh", args, {
249
+ cwd,
250
+ stdin: "ignore",
251
+ });
252
+ return yield* execute(cmd);
253
+ }, Effect.orDie),
254
+ sleep: Effect.fn("AgentTools.sleep")(function* (ms) {
255
+ yield* Effect.logInfo(`Calling "sleep" for ${ms}ms`);
256
+ return yield* Effect.sleep(ms);
257
+ }),
258
+ applyPatch: Effect.fn("AgentTools.applyPatch")(function* (patchText) {
259
+ yield* Effect.logInfo(`Calling "applyPatch"`);
260
+ const cwd = yield* CurrentDirectory;
261
+ const fail = (path, reason) => Effect.fail(new ApplyPatchError({
262
+ message: `verification failed: Failed to read file to ${reason}: ${path}`,
263
+ }));
264
+ const state = new Map();
265
+ const steps = [];
266
+ const out = [];
267
+ const rel = (path) => pathService.relative(cwd, path).replaceAll("\\", "/");
268
+ const load = Effect.fn("AgentTools.applyPatch.load")(function* (path, reason) {
269
+ if (state.has(path)) {
270
+ const input = state.get(path);
271
+ if (input === null) {
272
+ return yield* fail(path, reason);
273
+ }
274
+ return input;
275
+ }
276
+ const input = yield* fs.readFileString(path);
277
+ state.set(path, input);
278
+ return input;
279
+ });
280
+ for (const patch of parsePatch(patchText)) {
281
+ const path = pathService.resolve(cwd, patch.path);
282
+ switch (patch.type) {
283
+ case "add": {
284
+ const next = patch.content.length === 0 || patch.content.endsWith("\n")
285
+ ? patch.content
286
+ : `${patch.content}\n`;
287
+ state.set(path, next);
288
+ steps.push({
289
+ type: "add",
290
+ path,
291
+ next,
292
+ });
293
+ out.push(`A ${rel(path)}`);
294
+ break;
295
+ }
296
+ case "delete": {
297
+ yield* load(path, "delete");
298
+ state.set(path, null);
299
+ steps.push({
300
+ type: "delete",
301
+ path,
302
+ });
303
+ out.push(`D ${rel(path)}`);
304
+ break;
305
+ }
306
+ case "update": {
307
+ const input = yield* load(path, "update");
308
+ const next = patchChunks(path, input, patch.chunks);
309
+ const movePath = patch.movePath === undefined
310
+ ? undefined
311
+ : pathService.resolve(cwd, patch.movePath);
312
+ if (movePath === undefined || movePath === path) {
313
+ state.set(path, next);
314
+ steps.push({
315
+ type: "update",
316
+ path,
317
+ next,
318
+ });
319
+ out.push(`M ${rel(path)}`);
320
+ break;
321
+ }
322
+ state.set(path, null);
323
+ state.set(movePath, next);
324
+ steps.push({
325
+ type: "move",
326
+ path,
327
+ movePath,
328
+ next,
329
+ });
330
+ out.push(`M ${rel(movePath)}`);
331
+ break;
332
+ }
333
+ }
334
+ }
335
+ for (const step of steps) {
336
+ switch (step.type) {
337
+ case "add":
338
+ case "update": {
339
+ yield* fs.makeDirectory(pathService.dirname(step.path), {
340
+ recursive: true,
341
+ });
342
+ yield* fs.writeFileString(step.path, step.next);
343
+ break;
344
+ }
345
+ case "move": {
346
+ yield* fs.makeDirectory(pathService.dirname(step.movePath), {
347
+ recursive: true,
348
+ });
349
+ yield* fs.writeFileString(step.movePath, step.next);
350
+ yield* fs.remove(step.path);
351
+ break;
352
+ }
353
+ case "delete": {
354
+ yield* fs.remove(step.path);
355
+ break;
356
+ }
357
+ }
358
+ }
359
+ return `Success. Updated the following files:\n${out.join("\n")}`;
360
+ }, Effect.orDie),
361
+ subagent: Effect.fn("AgentTools.subagent")(function* (prompt) {
362
+ yield* Effect.logInfo(`Calling "subagent"`).pipe(Effect.annotateLogs({ prompt }));
363
+ const context = yield* SubagentContext;
364
+ return yield* context.spawn({ prompt });
365
+ }, Effect.orDie),
366
+ taskComplete: Effect.fn("AgentTools.taskComplete")(function* (message) {
367
+ const deferred = yield* TaskCompleteDeferred;
368
+ yield* Deferred.succeed(deferred, message);
369
+ }),
370
+ });
371
+ }));
372
+ class ApplyPatchError extends Data.TaggedClass("ApplyPatchError") {
373
+ }
374
+ //# sourceMappingURL=AgentTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentTools.js","sourceRoot":"","sources":["../src/AgentTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AgentTools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentTools.test.d.ts","sourceRoot":"","sources":["../src/AgentTools.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,147 @@
1
+ import { tmpdir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { NodeFileSystem, NodeServices } from "@effect/platform-node";
4
+ import { Deferred, Effect, FileSystem, Stream } from "effect";
5
+ import { describe, it } from "@effect/vitest";
6
+ import { expect } from "vitest";
7
+ import { AgentToolHandlers, AgentTools, CurrentDirectory, makeContextNoop, TaskCompleteDeferred, } from "./AgentTools.js";
8
+ import { Executor } from "./Executor.js";
9
+ import { ToolkitRenderer } from "./ToolkitRenderer.js";
10
+ const makeTempRoot = (prefix) => Effect.gen(function* () {
11
+ const fs = yield* FileSystem.FileSystem;
12
+ return yield* fs.makeTempDirectoryScoped({
13
+ directory: tmpdir(),
14
+ prefix,
15
+ });
16
+ });
17
+ describe("AgentTools", () => {
18
+ it.effect("renders the tool signatures", () => Effect.gen(function* () {
19
+ const renderer = yield* ToolkitRenderer;
20
+ const output = renderer.render(AgentTools);
21
+ expect(output).toContain("/** Read a file and optionally filter the lines to return. Returns null if the file doesn't exist. */");
22
+ expect(output).toContain("declare function readFile(options: {");
23
+ expect(output).toContain("readonly path: string;");
24
+ expect(output).toContain("readonly startLine?: number | undefined;");
25
+ expect(output).toContain("readonly endLine?: number | undefined;");
26
+ expect(output).toContain("/** Apply a wrapped patch with Add/Delete/Update sections. */");
27
+ expect(output).toContain("declare function applyPatch(patch: string): Promise<string>");
28
+ expect(output).not.toContain("declare function python(");
29
+ }).pipe(Effect.provide([
30
+ AgentToolHandlers,
31
+ Executor.layer,
32
+ ToolkitRenderer.layer,
33
+ ]), Effect.provide(NodeServices.layer), Effect.provideService(CurrentDirectory, process.cwd()), Effect.provideServiceEffect(TaskCompleteDeferred, Deferred.make())));
34
+ it.effect("applies multi-file patches with add, move, and delete", () => Effect.gen(function* () {
35
+ const fs = yield* FileSystem.FileSystem;
36
+ const tempRoot = yield* makeTempRoot("clanka-apply-patch-");
37
+ yield* fs.makeDirectory(join(tempRoot, "src"), { recursive: true });
38
+ yield* fs.writeFileString(join(tempRoot, "src", "app.txt"), "old\n");
39
+ yield* fs.writeFileString(join(tempRoot, "obsolete.txt"), "remove me\n");
40
+ const executor = yield* Executor;
41
+ const tools = yield* AgentTools;
42
+ const output = yield* executor
43
+ .execute({
44
+ tools,
45
+ script: [
46
+ "const output = await applyPatch(`",
47
+ "*** Begin Patch",
48
+ "*** Add File: notes/hello.txt",
49
+ "+hello",
50
+ "*** Update File: src/app.txt",
51
+ "*** Move to: src/main.txt",
52
+ "@@",
53
+ "-old",
54
+ "+new",
55
+ "*** Delete File: obsolete.txt",
56
+ "*** End Patch",
57
+ "`)",
58
+ "console.log(output)",
59
+ ].join("\n"),
60
+ })
61
+ .pipe(Stream.mkString, Effect.provideServices(makeContextNoop(tempRoot)));
62
+ expect(output).toContain("A notes/hello.txt");
63
+ expect(output).toContain("M src/main.txt");
64
+ expect(output).toContain("D obsolete.txt");
65
+ expect(yield* fs.readFileString(join(tempRoot, "notes", "hello.txt"))).toBe("hello\n");
66
+ expect(yield* fs.readFileString(join(tempRoot, "src", "main.txt"))).toBe("new\n");
67
+ yield* Effect.flip(fs.readFileString(join(tempRoot, "obsolete.txt")));
68
+ yield* Effect.flip(fs.readFileString(join(tempRoot, "src", "app.txt")));
69
+ }).pipe(Effect.provide([
70
+ AgentToolHandlers,
71
+ Executor.layer,
72
+ ToolkitRenderer.layer,
73
+ ]), Effect.provide(NodeServices.layer)));
74
+ it.effect("plans later hunks against in-memory file state", () => Effect.gen(function* () {
75
+ const fs = yield* FileSystem.FileSystem;
76
+ const tempRoot = yield* makeTempRoot("clanka-apply-patch-state-");
77
+ yield* fs.makeDirectory(join(tempRoot, "src"), { recursive: true });
78
+ yield* fs.writeFileString(join(tempRoot, "src", "app.txt"), "old\n");
79
+ const executor = yield* Executor;
80
+ const tools = yield* AgentTools;
81
+ const output = yield* executor
82
+ .execute({
83
+ tools,
84
+ script: [
85
+ "const output = await applyPatch(`",
86
+ "*** Begin Patch",
87
+ "*** Add File: notes/hello.txt",
88
+ "+hello",
89
+ "*** Update File: notes/hello.txt",
90
+ "@@",
91
+ "-hello",
92
+ "+hello again",
93
+ "*** Update File: src/app.txt",
94
+ "*** Move to: src/main.txt",
95
+ "@@",
96
+ "-old",
97
+ "+new",
98
+ "*** Update File: src/main.txt",
99
+ "@@",
100
+ "-new",
101
+ "+newer",
102
+ "*** End Patch",
103
+ "`)",
104
+ "console.log(output)",
105
+ ].join("\n"),
106
+ })
107
+ .pipe(Stream.mkString, Effect.provideServices(makeContextNoop(tempRoot)));
108
+ expect(output).toContain("A notes/hello.txt");
109
+ expect(output).toContain("M notes/hello.txt");
110
+ expect(output).toContain("M src/main.txt");
111
+ expect(yield* fs.readFileString(join(tempRoot, "notes", "hello.txt"))).toBe("hello again\n");
112
+ expect(yield* fs.readFileString(join(tempRoot, "src", "main.txt"))).toBe("newer\n");
113
+ yield* Effect.flip(fs.readFileString(join(tempRoot, "src", "app.txt")));
114
+ }).pipe(Effect.provide([
115
+ AgentToolHandlers,
116
+ Executor.layer,
117
+ ToolkitRenderer.layer,
118
+ ]), Effect.provide(NodeServices.layer)));
119
+ it.effect("renames a file", () => Effect.gen(function* () {
120
+ const fs = yield* FileSystem.FileSystem;
121
+ const tempRoot = yield* makeTempRoot("clanka-rename-file-");
122
+ yield* fs.makeDirectory(join(tempRoot, "src"), { recursive: true });
123
+ yield* fs.writeFileString(join(tempRoot, "src", "app.txt"), "hello\n");
124
+ const executor = yield* Executor;
125
+ const tools = yield* AgentTools;
126
+ yield* executor
127
+ .execute({
128
+ tools,
129
+ script: [
130
+ "await renameFile({",
131
+ ' from: "src/app.txt",',
132
+ ' to: "src/main.txt",',
133
+ "})",
134
+ 'console.log("renamed")',
135
+ ].join("\n"),
136
+ })
137
+ .pipe(Stream.mkString, Effect.provideServices(makeContextNoop(tempRoot)));
138
+ expect(yield* fs.readFileString(join(tempRoot, "src", "main.txt"))).toBe("hello\n");
139
+ yield* Effect.flip(fs.readFileString(join(tempRoot, "src", "app.txt")));
140
+ }).pipe(Effect.provide([
141
+ AgentToolHandlers,
142
+ Executor.layer,
143
+ ToolkitRenderer.layer,
144
+ NodeFileSystem.layer,
145
+ ]), Effect.provide(NodeServices.layer)));
146
+ });
147
+ //# sourceMappingURL=AgentTools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentTools.test.js","sourceRoot":"","sources":["../src/AgentTools.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ export type Chunk = {
5
+ readonly old: ReadonlyArray<string>;
6
+ readonly next: ReadonlyArray<string>;
7
+ readonly ctx?: string;
8
+ readonly eof?: boolean;
9
+ };
10
+ export type FilePatch = {
11
+ readonly type: "add";
12
+ readonly path: string;
13
+ readonly content: string;
14
+ } | {
15
+ readonly type: "delete";
16
+ readonly path: string;
17
+ } | {
18
+ readonly type: "update";
19
+ readonly path: string;
20
+ readonly chunks: ReadonlyArray<Chunk>;
21
+ readonly movePath?: string;
22
+ };
23
+ export declare const parsePatch: (input: string) => ReadonlyArray<FilePatch>;
24
+ export declare const wrappedPath: (input: string) => string | undefined;
25
+ export declare const patchChunks: (file: string, input: string, chunks: ReadonlyArray<Chunk>) => string;
26
+ export declare const patchContent: (file: string, input: string, patchText: string) => string;
27
+ //# sourceMappingURL=ApplyPatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplyPatch.d.ts","sourceRoot":"","sources":["../src/ApplyPatch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAOD,MAAM,MAAM,SAAS,GACjB;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAgKL,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,aAAa,CAAC,SAAS,CAuFjE,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,SAMpD,CAAA;AA8JD,eAAO,MAAM,WAAW,GACtB,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,QAAQ,aAAa,CAAC,KAAK,CAAC,KAC3B,MAkBF,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,WAAW,MAAM,KAChB,MAAoD,CAAA"}