clanka 0.5.2 → 0.6.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 (79) hide show
  1. package/dist/Acp.d.ts.map +1 -1
  2. package/dist/Acp.js +195 -16
  3. package/dist/Acp.js.map +1 -1
  4. package/dist/AcpImage.test.d.ts +2 -0
  5. package/dist/AcpImage.test.d.ts.map +1 -0
  6. package/dist/AcpImage.test.js +470 -0
  7. package/dist/AcpImage.test.js.map +1 -0
  8. package/dist/Agent.d.ts +9 -2
  9. package/dist/Agent.d.ts.map +1 -1
  10. package/dist/Agent.js +43 -6
  11. package/dist/Agent.js.map +1 -1
  12. package/dist/AgentExecutor.d.ts +27 -5
  13. package/dist/AgentExecutor.d.ts.map +1 -1
  14. package/dist/AgentExecutor.js +29 -4
  15. package/dist/AgentExecutor.js.map +1 -1
  16. package/dist/AgentExecutorImage.test.d.ts +2 -0
  17. package/dist/AgentExecutorImage.test.d.ts.map +1 -0
  18. package/dist/AgentExecutorImage.test.js +63 -0
  19. package/dist/AgentExecutorImage.test.js.map +1 -0
  20. package/dist/AgentImage.test.d.ts +2 -0
  21. package/dist/AgentImage.test.d.ts.map +1 -0
  22. package/dist/AgentImage.test.js +176 -0
  23. package/dist/AgentImage.test.js.map +1 -0
  24. package/dist/AgentTools.d.ts +25 -5
  25. package/dist/AgentTools.d.ts.map +1 -1
  26. package/dist/AgentTools.js +40 -4
  27. package/dist/AgentTools.js.map +1 -1
  28. package/dist/AgentToolsImage.test.d.ts +2 -0
  29. package/dist/AgentToolsImage.test.d.ts.map +1 -0
  30. package/dist/AgentToolsImage.test.js +158 -0
  31. package/dist/AgentToolsImage.test.js.map +1 -0
  32. package/dist/Codex.js +6 -1
  33. package/dist/Codex.js.map +1 -1
  34. package/dist/Compaction.d.ts.map +1 -1
  35. package/dist/Compaction.js +16 -1
  36. package/dist/Compaction.js.map +1 -1
  37. package/dist/CompactionImage.test.d.ts +2 -0
  38. package/dist/CompactionImage.test.d.ts.map +1 -0
  39. package/dist/CompactionImage.test.js +105 -0
  40. package/dist/CompactionImage.test.js.map +1 -0
  41. package/dist/Copilot.d.ts.map +1 -1
  42. package/dist/Copilot.js +5 -1
  43. package/dist/Copilot.js.map +1 -1
  44. package/dist/Image.d.ts +192 -0
  45. package/dist/Image.d.ts.map +1 -0
  46. package/dist/Image.js +586 -0
  47. package/dist/Image.js.map +1 -0
  48. package/dist/Image.test.d.ts +2 -0
  49. package/dist/Image.test.d.ts.map +1 -0
  50. package/dist/Image.test.js +142 -0
  51. package/dist/Image.test.js.map +1 -0
  52. package/dist/cli.js +2 -1
  53. package/dist/cli.js.map +1 -1
  54. package/dist/fixtures/TestImages.d.ts +73 -0
  55. package/dist/fixtures/TestImages.d.ts.map +1 -0
  56. package/dist/fixtures/TestImages.js +263 -0
  57. package/dist/fixtures/TestImages.js.map +1 -0
  58. package/dist/index.d.ts +4 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +4 -0
  61. package/dist/index.js.map +1 -1
  62. package/package.json +2 -1
  63. package/src/Acp.ts +274 -21
  64. package/src/AcpImage.test.ts +676 -0
  65. package/src/Agent.ts +69 -7
  66. package/src/AgentExecutor.ts +51 -3
  67. package/src/AgentExecutorImage.test.ts +103 -0
  68. package/src/AgentImage.test.ts +295 -0
  69. package/src/AgentTools.ts +78 -7
  70. package/src/AgentToolsImage.test.ts +302 -0
  71. package/src/Codex.ts +6 -1
  72. package/src/Compaction.ts +16 -1
  73. package/src/CompactionImage.test.ts +142 -0
  74. package/src/Copilot.ts +5 -1
  75. package/src/Image.test.ts +220 -0
  76. package/src/Image.ts +704 -0
  77. package/src/cli.ts +2 -1
  78. package/src/fixtures/TestImages.ts +287 -0
  79. package/src/index.ts +5 -0
@@ -0,0 +1,176 @@
1
+ import { assert, describe, it } from "@effect/vitest";
2
+ import * as Duration from "effect/Duration";
3
+ import * as Deferred from "effect/Deferred";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Exit from "effect/Exit";
6
+ import * as Layer from "effect/Layer";
7
+ import * as Option from "effect/Option";
8
+ import * as Stream from "effect/Stream";
9
+ import * as AiError from "effect/unstable/ai/AiError";
10
+ import * as LanguageModel from "effect/unstable/ai/LanguageModel";
11
+ import * as Model from "effect/unstable/ai/Model";
12
+ import * as Agent from "./Agent.js";
13
+ import * as AgentExecutor from "./AgentExecutor.js";
14
+ import { tinyPng } from "./fixtures/TestImages.js";
15
+ const capabilities = new AgentExecutor.Capabilities({
16
+ toolsDts: "",
17
+ agentsMd: Option.none(),
18
+ supportsSearch: false,
19
+ skills: [],
20
+ });
21
+ const makeExecutor = (execute = () => Stream.empty) => AgentExecutor.AgentExecutor.of({
22
+ capabilities: Effect.succeed(capabilities),
23
+ execute,
24
+ executeUnsafe: () => Effect.die("executeUnsafe not implemented"),
25
+ });
26
+ const runAgent = (options) => Effect.gen(function* () {
27
+ const calls = [];
28
+ const languageModel = yield* LanguageModel.make({
29
+ generateText: () => Effect.succeed([]),
30
+ streamText: (providerOptions) => {
31
+ const call = { prompt: providerOptions.prompt };
32
+ const index = calls.push(call) - 1;
33
+ return options.respond(call, index);
34
+ },
35
+ });
36
+ const modelLayer = Layer.mergeAll(Layer.succeed(LanguageModel.LanguageModel, languageModel), Layer.succeed(Model.ProviderName, "test-provider"), Layer.succeed(Model.ModelName, "test-model"));
37
+ const agent = yield* Agent.make.pipe(Effect.provideService(AgentExecutor.AgentExecutor, options.executor ?? makeExecutor()));
38
+ const exit = yield* agent.send({ prompt: options.prompt }).pipe(Effect.flatMap((stream) => stream.pipe(Stream.runDrain, Effect.as(""), Effect.catchTag("AgentFinished", (finished) => Effect.succeed(finished.summary)))), Effect.provide(Layer.mergeAll(modelLayer, Agent.ConversationMode.layer(true), Agent.layerSubagentModel(modelLayer), Agent.AgentModelConfig.layer(options.modelConfig ?? {}), Layer.succeed(Agent.TurnTimeout, Duration.minutes(5)))), Effect.exit);
39
+ return { exit, calls, history: agent.history.current };
40
+ }).pipe(Effect.scoped);
41
+ const text = (content) => [
42
+ { type: "text-start", id: "t" },
43
+ { type: "text-delta", id: "t", delta: content },
44
+ { type: "text-end", id: "t" },
45
+ ];
46
+ const toolCall = (id, script) => ({
47
+ type: "tool-call",
48
+ id,
49
+ name: "execute",
50
+ params: { script },
51
+ });
52
+ /** A user turn with a caption and a screenshot, as ACP ingest would build. */
53
+ const imagePrompt = [
54
+ {
55
+ role: "user",
56
+ content: [
57
+ { type: "text", text: "what is in this screenshot?" },
58
+ {
59
+ type: "file",
60
+ mediaType: "image/png",
61
+ fileName: "shot.png",
62
+ data: tinyPng,
63
+ },
64
+ ],
65
+ },
66
+ ];
67
+ const fileParts = (prompt) => prompt.content.flatMap((message) => message.role === "user"
68
+ ? message.content.filter((part) => part.type === "file")
69
+ : []);
70
+ const userText = (prompt) => prompt.content
71
+ .flatMap((message) => message.role === "user"
72
+ ? message.content.flatMap((part) => part.type === "text" ? [part.text] : [])
73
+ : [])
74
+ .join("\n");
75
+ const omittedNote = /\[image: shot\.png omitted\]/;
76
+ /** Mirrors the OpenAI rejection for image input on a text-only model. */
77
+ const unsupportedImageError = AiError.make({
78
+ module: "OpenAiLanguageModel",
79
+ method: "streamText",
80
+ reason: new AiError.InvalidRequestError({
81
+ description: "Invalid content type. image_url is only supported by certain models. (POST https://api.openai.com/v1/responses) [code: invalid_value]",
82
+ }),
83
+ });
84
+ const unrelatedError = AiError.make({
85
+ module: "OpenAiLanguageModel",
86
+ method: "streamText",
87
+ reason: new AiError.InvalidRequestError({
88
+ description: "Unsupported parameter: 'temperature' is not supported with this model. (POST https://api.openai.com/v1/responses)",
89
+ }),
90
+ });
91
+ describe("Agent images", () => {
92
+ it.effect("strips images and leaves an omitted note for a model known not to take images", () => Effect.gen(function* () {
93
+ const { exit, calls } = yield* runAgent({
94
+ prompt: imagePrompt,
95
+ modelConfig: { supportsImages: false },
96
+ respond: () => Stream.fromIterable(text("I cannot see images.")),
97
+ });
98
+ assert.isTrue(Exit.isSuccess(exit));
99
+ assert.strictEqual(calls.length, 1);
100
+ assert.strictEqual(fileParts(calls[0].prompt).length, 0);
101
+ const prompt = userText(calls[0].prompt);
102
+ assert.include(prompt, "what is in this screenshot?");
103
+ assert.match(prompt, omittedNote);
104
+ }));
105
+ it.effect("retries without images and discards attachments from the failed attempt", () => Effect.gen(function* () {
106
+ const attached = yield* Deferred.make();
107
+ let executions = 0;
108
+ const executor = makeExecutor(({ onImage }) => Stream.fromEffect(Effect.gen(function* () {
109
+ executions++;
110
+ yield* onImage({
111
+ data: tinyPng,
112
+ mediaType: "image/png",
113
+ fileName: executions === 1 ? "discarded.png" : "shot.png",
114
+ });
115
+ yield* Deferred.succeed(attached, undefined);
116
+ return "Image attached";
117
+ })));
118
+ const { exit, calls, history } = yield* runAgent({
119
+ prompt: imagePrompt,
120
+ executor,
121
+ respond: (_, index) => index === 0
122
+ ? Stream.make(toolCall("discarded", 'await readFile({ path: "shot.png" })')).pipe(
123
+ // Advance past the tool-call chunk so its handler starts.
124
+ Stream.concat(Stream.make({ type: "text-start", id: "failed" })), Stream.concat(Stream.fromEffect(Deferred.await(attached).pipe(Effect.andThen(Effect.fail(unsupportedImageError))))))
125
+ : index === 1
126
+ ? Stream.make(toolCall("retried", 'await readFile({ path: "shot.png" })'))
127
+ : Stream.fromIterable(text("Text only, but I tried.")),
128
+ });
129
+ assert.isTrue(Exit.isSuccess(exit));
130
+ assert.strictEqual(calls.length, 3);
131
+ assert.strictEqual(executions, 2);
132
+ assert.deepStrictEqual(fileParts(history).map((part) => part.fileName), ["shot.png", "shot.png"]);
133
+ assert.strictEqual(fileParts(calls[0].prompt).length, 1);
134
+ assert.strictEqual(fileParts(calls[1].prompt).length, 0);
135
+ const retried = userText(calls[1].prompt);
136
+ assert.include(retried, "what is in this screenshot?");
137
+ assert.match(retried, omittedNote);
138
+ }));
139
+ it.effect("does not retry when the provider rejects it a second time", () => Effect.gen(function* () {
140
+ const { exit, calls } = yield* runAgent({
141
+ prompt: imagePrompt,
142
+ respond: () => Stream.fail(unsupportedImageError),
143
+ });
144
+ assert.isTrue(Exit.isFailure(exit));
145
+ assert.strictEqual(calls.length, 2);
146
+ }));
147
+ it.effect("does not treat other invalid-request errors as image rejections", () => Effect.gen(function* () {
148
+ const { exit, calls } = yield* runAgent({
149
+ prompt: imagePrompt,
150
+ respond: () => Stream.fail(unrelatedError),
151
+ });
152
+ assert.isTrue(Exit.isFailure(exit));
153
+ assert.strictEqual(calls.length, 1);
154
+ }));
155
+ it.effect("does not copy image bytes into a delegate prompt", () => Effect.gen(function* () {
156
+ const executor = makeExecutor(({ onSubagent }) => Stream.fromEffect(onSubagent("child task: describe the layout")));
157
+ const { exit, calls } = yield* runAgent({
158
+ prompt: imagePrompt,
159
+ executor,
160
+ respond: (call, index) => {
161
+ if (index === 0) {
162
+ return Stream.make(toolCall("call-1", 'await delegate("describe the layout")'));
163
+ }
164
+ const isChild = userText(call.prompt).includes("child task");
165
+ return Stream.fromIterable(text(isChild ? "child done" : "parent done"));
166
+ },
167
+ });
168
+ assert.isTrue(Exit.isSuccess(exit));
169
+ const child = calls.find((call) => userText(call.prompt).includes("child task"));
170
+ assert.isDefined(child, "the delegate call reached the model");
171
+ assert.strictEqual(fileParts(child.prompt).length, 0);
172
+ // The parent still has its image.
173
+ assert.strictEqual(fileParts(calls[0].prompt).length, 1);
174
+ }));
175
+ });
176
+ //# sourceMappingURL=AgentImage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentImage.test.js","sourceRoot":"","sources":["../src/AgentImage.test.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import * as FileSystem from "effect/FileSystem";
11
11
  import * as Path from "effect/Path";
12
12
  import * as Layer from "effect/Layer";
13
13
  import * as SemanticSearch from "./SemanticSearch/Service.ts";
14
+ import * as Image from "./Image.ts";
14
15
  declare const CurrentDirectory_base: Context.ServiceClass<CurrentDirectory, "clanka/AgentTools/CurrentDirectory", string>;
15
16
  /**
16
17
  * @since 1.0.0
@@ -39,11 +40,30 @@ declare const SubagentExecutor_base: Context.ServiceClass<SubagentExecutor, "cla
39
40
  */
40
41
  export declare class SubagentExecutor extends SubagentExecutor_base {
41
42
  }
43
+ /**
44
+ * An image read by `readFile`, handed to the Agent so it can be spliced onto
45
+ * the Prompt for the next model turn.
46
+ *
47
+ * @since 1.0.0
48
+ * @category Models
49
+ */
50
+ export interface ImageAttachment {
51
+ readonly fileName: string;
52
+ readonly mediaType: Image.ImageMediaType;
53
+ readonly data: Uint8Array;
54
+ }
55
+ declare const ImageAttacher_base: Context.ServiceClass<ImageAttacher, "clanka/AgentTools/ImageAttacher", (image: ImageAttachment) => Effect.Effect<void>>;
42
56
  /**
43
57
  * @since 1.0.0
44
58
  * @category Context
45
59
  */
46
- export declare const makeContextNoop: (cwd?: string) => Context.Context<CurrentDirectory | DirectoryChanger | SubagentExecutor | TaskCompleter>;
60
+ export declare class ImageAttacher extends ImageAttacher_base {
61
+ }
62
+ /**
63
+ * @since 1.0.0
64
+ * @category Context
65
+ */
66
+ export declare const makeContextNoop: (cwd?: string) => Context.Context<CurrentDirectory | DirectoryChanger | ImageAttacher | SubagentExecutor | TaskCompleter>;
47
67
  declare const TodoItem_base: Schema.Opaque<TodoItem, Schema.Struct<{
48
68
  readonly id: Schema.Number;
49
69
  readonly text: Schema.String;
@@ -138,7 +158,7 @@ export declare const AgentTools: Toolkit.Toolkit<{
138
158
  readonly success: Schema.NullOr<Schema.String>;
139
159
  readonly failure: Schema.Never;
140
160
  readonly failureMode: "error";
141
- }, CurrentDirectory>;
161
+ }, CurrentDirectory | ImageAttacher>;
142
162
  readonly removeFile: Tool.Tool<"removeFile", {
143
163
  readonly parameters: Schema.String;
144
164
  readonly success: Schema.Void;
@@ -289,7 +309,7 @@ export declare const AgentToolsWithSearch: Toolkit.Toolkit<{
289
309
  readonly success: Schema.NullOr<Schema.String>;
290
310
  readonly failure: Schema.Never;
291
311
  readonly failureMode: "error";
292
- }, CurrentDirectory>;
312
+ }, CurrentDirectory | ImageAttacher>;
293
313
  readonly removeFile: Tool.Tool<"removeFile", {
294
314
  readonly parameters: Schema.String;
295
315
  readonly success: Schema.Void;
@@ -446,7 +466,7 @@ export declare const AgentToolHandlersNoDeps: Layer.Layer<Tool.HandlersFor<{
446
466
  readonly success: Schema.NullOr<Schema.String>;
447
467
  readonly failure: Schema.Never;
448
468
  readonly failureMode: "error";
449
- }, CurrentDirectory>;
469
+ }, CurrentDirectory | ImageAttacher>;
450
470
  readonly removeFile: Tool.Tool<"removeFile", {
451
471
  readonly parameters: Schema.String;
452
472
  readonly success: Schema.Void;
@@ -608,7 +628,7 @@ export declare const AgentToolHandlersTest: Layer.Layer<Tool.HandlersFor<{
608
628
  readonly success: Schema.NullOr<Schema.String>;
609
629
  readonly failure: Schema.Never;
610
630
  readonly failureMode: "error";
611
- }, CurrentDirectory>;
631
+ }, CurrentDirectory | ImageAttacher>;
612
632
  readonly removeFile: Tool.Tool<"removeFile", {
613
633
  readonly parameters: Schema.String;
614
634
  readonly success: Schema.Void;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTools.d.ts","sourceRoot":"","sources":["../src/AgentTools.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAClE,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,mBAAmB,MAAM,6CAA6C,CAAA;AAClF,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAMnC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;;AAE7D;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAGG;CAAG;8HAQ9B,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAN9C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAGG;CAAG;kHAQjC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AANzC;;;GAGG;AACH,qBAAa,aAAc,SAAQ,kBAGG;CAAG;2HAQ9B,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAN3C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAGG;CAAG;AAE5C;;;GAGG;AACH,eAAO,MAAM,eAAe,SAAU,MAAM,4FAKzC,CAAA;;;;;;;;;;AAEH,cAAM,QAAS,SAAQ,aAMtB;CAAG;AAEJ;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuKtB,CAAA;AAcD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAwC,CAAA;AAEzE;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2IAgYnC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,KAAK,CACzC,IAAI,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,KAAK,CAAC,EACnD,KAAK,EACH,UAAU,CAAC,UAAU,GACrB,IAAI,CAAC,IAAI,GACT,mBAAmB,CAAC,mBAAmB,GACvC,UAAU,CAAC,UAAU,CAGxB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uFAKjC,CAAA"}
1
+ {"version":3,"file":"AgentTools.d.ts","sourceRoot":"","sources":["../src/AgentTools.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,9 @@ import { pipe } from "effect/Function";
20
20
  import * as Array from "effect/Array";
21
21
  import * as Data from "effect/Data";
22
22
  import * as Layer from "effect/Layer";
23
+ import * as Option from "effect/Option";
23
24
  import * as SemanticSearch from "./SemanticSearch/Service.js";
25
+ import * as Image from "./Image.js";
24
26
  /**
25
27
  * @since 1.0.0
26
28
  * @category Context
@@ -49,7 +51,13 @@ export class SubagentExecutor extends Context.Service()("clanka/AgentTools/Subag
49
51
  * @since 1.0.0
50
52
  * @category Context
51
53
  */
52
- export const makeContextNoop = (cwd) => SubagentExecutor.context(() => Effect.die("Not implemented")).pipe(Context.add(CurrentDirectory, cwd ?? "/"), Context.add(DirectoryChanger, () => Effect.die("Not implemented")), Context.add(TaskCompleter, () => Effect.void));
54
+ export class ImageAttacher extends Context.Service()("clanka/AgentTools/ImageAttacher") {
55
+ }
56
+ /**
57
+ * @since 1.0.0
58
+ * @category Context
59
+ */
60
+ export const makeContextNoop = (cwd) => SubagentExecutor.context(() => Effect.die("Not implemented")).pipe(Context.add(CurrentDirectory, cwd ?? "/"), Context.add(DirectoryChanger, () => Effect.die("Not implemented")), Context.add(TaskCompleter, () => Effect.void), Context.add(ImageAttacher, () => Effect.void));
53
61
  class TodoItem extends Schema.Opaque()(Schema.Struct({
54
62
  id: Schema.Number,
55
63
  text: Schema.String,
@@ -66,14 +74,14 @@ export const AgentTools = Toolkit.make(Tool.make("changeDirectory", {
66
74
  success: Schema.String,
67
75
  dependencies: [DirectoryChanger],
68
76
  }), Tool.make("readFile", {
69
- description: "Read a file and optionally filter the lines to return. Returns null if the file doesn't exist.",
77
+ description: "Read a file and optionally filter the lines to return. Returns null if the file doesn't exist. For png/jpeg/gif/webp files the image itself is attached to your next turn and a short marker is returned instead of the bytes; line ranges are not allowed on images.",
70
78
  parameters: Schema.Struct({
71
79
  path: Schema.String,
72
80
  startLine: Schema.optional(Schema.Number),
73
81
  endLine: Schema.optional(Schema.Number),
74
82
  }),
75
83
  success: Schema.NullOr(Schema.String),
76
- dependencies: [CurrentDirectory],
84
+ dependencies: [CurrentDirectory, ImageAttacher],
77
85
  }), Tool.make("rg", {
78
86
  description: "Search for a pattern in files using ripgrep",
79
87
  parameters: Schema.Struct({
@@ -232,6 +240,29 @@ export const AgentToolHandlersNoDeps = AgentToolsWithSearch.toLayer(Effect.gen(f
232
240
  return yield* Effect.die(new Error(`Command failed with exit code ${exitCode}: ${output}`));
233
241
  })));
234
242
  }, Effect.scoped);
243
+ /**
244
+ * Image branch of `readFile`: the bytes go to the `ImageAttacher` for
245
+ * the next model turn and the script only sees a marker.
246
+ */
247
+ const readImage = Effect.fnUntraced(function* (path, extensionType, options) {
248
+ if (options.startLine !== undefined || options.endLine !== undefined) {
249
+ return yield* Effect.die(new Error(`startLine / endLine are not supported for images: ${path}`));
250
+ }
251
+ const bytes = yield* Image.readBoundedFile(fs, path).pipe(Effect.catchReason("PlatformError", "NotFound", () => Effect.succeed(null)), Effect.orDie);
252
+ if (bytes === null)
253
+ return null;
254
+ // The extension picks the branch; the magic bytes pick the real type.
255
+ const mediaType = Option.getOrElse(Image.mediaTypeFromBytes(bytes), () => extensionType);
256
+ const prepared = yield* Image.prepare({ data: bytes, mediaType }).pipe(Effect.mapError((error) => new Error(`${error.message} (${path})`)), Effect.orDie);
257
+ const fileName = pathService.basename(path);
258
+ const attach = yield* ImageAttacher;
259
+ yield* attach({
260
+ fileName,
261
+ mediaType: prepared.mediaType,
262
+ data: prepared.data,
263
+ });
264
+ return `Image attached: ${fileName}`;
265
+ });
235
266
  return AgentToolsWithSearch.of({
236
267
  changeDirectory: Effect.fn("AgentTools.changeDirectory")(function* (directory) {
237
268
  yield* Effect.logInfo(`Calling "changeDirectory"`).pipe(Effect.annotateLogs({ directory }));
@@ -241,7 +272,12 @@ export const AgentToolHandlersNoDeps = AgentToolsWithSearch.toLayer(Effect.gen(f
241
272
  readFile: Effect.fn("AgentTools.readFile")(function* (options) {
242
273
  yield* Effect.logInfo(`Calling "readFile"`).pipe(Effect.annotateLogs(options));
243
274
  const cwd = yield* CurrentDirectory;
244
- let stream = pipe(fs.stream(pathService.resolve(cwd, options.path)), Stream.decodeText, Stream.splitLines);
275
+ const path = pathService.resolve(cwd, options.path);
276
+ const imageType = Image.mediaTypeFromPath(path);
277
+ if (Option.isSome(imageType)) {
278
+ return yield* readImage(path, imageType.value, options);
279
+ }
280
+ let stream = pipe(fs.stream(path), Stream.decodeText, Stream.splitLines);
245
281
  if (options.startLine) {
246
282
  stream = Stream.drop(stream, options.startLine - 1);
247
283
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTools.js","sourceRoot":"","sources":["../src/AgentTools.ts"],"names":[],"mappings":"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"}
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=AgentToolsImage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentToolsImage.test.d.ts","sourceRoot":"","sources":["../src/AgentToolsImage.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ import * as Photon from "@silvia-odwyer/photon-node";
2
+ import { assert, describe, it } from "@effect/vitest";
3
+ import { vi } from "vitest";
4
+ import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient";
5
+ import * as NodeServices from "@effect/platform-node/NodeServices";
6
+ import * as Duration from "effect/Duration";
7
+ import * as Effect from "effect/Effect";
8
+ import * as Exit from "effect/Exit";
9
+ import * as FileSystem from "effect/FileSystem";
10
+ import * as Layer from "effect/Layer";
11
+ import * as Path from "effect/Path";
12
+ import * as Stream from "effect/Stream";
13
+ import * as LanguageModel from "effect/unstable/ai/LanguageModel";
14
+ import * as Model from "effect/unstable/ai/Model";
15
+ import * as Agent from "./Agent.js";
16
+ import * as AgentExecutor from "./AgentExecutor.js";
17
+ import { bytesOf, dimensions, encodePng, equalBytes, tinyPng, } from "./fixtures/TestImages.js";
18
+ const svgText = '<svg xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1"/></svg>';
19
+ /**
20
+ * A temp project directory holding the image fixtures, with a real local
21
+ * executor rooted in it.
22
+ */
23
+ const withProject = (f) => Effect.gen(function* () {
24
+ const fs = yield* FileSystem.FileSystem;
25
+ const path = yield* Path.Path;
26
+ const project = yield* fs.makeTempDirectoryScoped();
27
+ yield* fs.writeFile(path.join(project, "shot.png"), tinyPng);
28
+ yield* fs.writeFile(path.join(project, "wide.png"), encodePng({ width: 2500, height: 100 }));
29
+ yield* fs.writeFileString(path.join(project, "logo.svg"), svgText);
30
+ yield* fs.writeFile(path.join(project, "broken.png"), new TextEncoder().encode("this is not a png".repeat(20)));
31
+ return yield* f(project).pipe(Effect.provide(AgentExecutor.layerLocal({ directory: project }).pipe(Layer.provide(NodeHttpClient.layerUndici))));
32
+ }).pipe(Effect.provide(NodeServices.layer), Effect.scoped);
33
+ const readFile = (params) => Effect.gen(function* () {
34
+ const executor = yield* AgentExecutor.AgentExecutor;
35
+ return yield* executor.executeUnsafe({ tool: "readFile", params });
36
+ });
37
+ describe("readFile images", () => {
38
+ it.effect("rejects startLine / endLine on an image", () => withProject(() => Effect.gen(function* () {
39
+ const withStart = yield* Effect.exit(readFile({ path: "shot.png", startLine: 1 }));
40
+ assert.isTrue(Exit.isFailure(withStart));
41
+ const withEnd = yield* Effect.exit(readFile({ path: "shot.png", endLine: 5 }));
42
+ assert.isTrue(Exit.isFailure(withEnd));
43
+ })));
44
+ it.effect("rejects undecodable and over-ceiling images without decoding them", () => withProject((project) => Effect.gen(function* () {
45
+ const fs = yield* FileSystem.FileSystem;
46
+ const path = yield* Path.Path;
47
+ // Sparse file one byte over the shared 20 MiB input ceiling.
48
+ const huge = path.join(project, "huge.png");
49
+ yield* fs.writeFile(huge, tinyPng);
50
+ yield* fs.truncate(huge, 20 * 1024 * 1024 + 1);
51
+ const decoder = vi.spyOn(Photon.PhotonImage, "new_from_byteslice");
52
+ try {
53
+ const broken = yield* Effect.exit(readFile({ path: "broken.png" }));
54
+ assert.isTrue(Exit.isFailure(broken));
55
+ const oversized = yield* Effect.exit(readFile({ path: "huge.png" }));
56
+ assert.isTrue(Exit.isFailure(oversized));
57
+ assert.strictEqual(decoder.mock.calls.length, 0, "neither garbage nor an over-ceiling file may reach the decoder");
58
+ }
59
+ finally {
60
+ decoder.mockRestore();
61
+ }
62
+ })));
63
+ });
64
+ const runAgent = (options) => Effect.gen(function* () {
65
+ const calls = [];
66
+ const outputs = [];
67
+ const languageModel = yield* LanguageModel.make({
68
+ generateText: () => Effect.succeed([]),
69
+ streamText: (providerOptions) => {
70
+ const call = { prompt: providerOptions.prompt };
71
+ const index = calls.push(call) - 1;
72
+ return options.respond(call, index);
73
+ },
74
+ });
75
+ const modelLayer = Layer.mergeAll(Layer.succeed(LanguageModel.LanguageModel, languageModel), Layer.succeed(Model.ProviderName, "test-provider"), Layer.succeed(Model.ModelName, "test-model"));
76
+ const agent = yield* Agent.make;
77
+ const exit = yield* agent.send({ prompt: "read the screenshot" }).pipe(Effect.flatMap((stream) => stream.pipe(Stream.runForEach((output) => Effect.sync(() => {
78
+ outputs.push(output);
79
+ })), Effect.as(""), Effect.catchTag("AgentFinished", (finished) => Effect.succeed(finished.summary)))), Effect.provide(Layer.mergeAll(modelLayer, Agent.ConversationMode.layer(true), Agent.layerSubagentModel(modelLayer), Layer.succeed(Agent.TurnTimeout, Duration.minutes(5)))), Effect.exit);
80
+ return { exit, calls, outputs };
81
+ }).pipe(Effect.scoped);
82
+ const toolCall = (id, script) => ({
83
+ type: "tool-call",
84
+ id,
85
+ name: "execute",
86
+ params: { script },
87
+ });
88
+ const text = (content) => [
89
+ { type: "text-start", id: "t" },
90
+ { type: "text-delta", id: "t", delta: content },
91
+ { type: "text-end", id: "t" },
92
+ ];
93
+ const toolResultText = (message) => {
94
+ if (message.role !== "tool")
95
+ return undefined;
96
+ const part = message.content.find((p) => p.type === "tool-result");
97
+ return part && typeof part.result === "string" ? part.result : undefined;
98
+ };
99
+ const fileParts = (message) => message.role === "user"
100
+ ? message.content.filter((part) => part.type === "file")
101
+ : [];
102
+ describe("readFile image injection", () => {
103
+ it.effect("injects an image as a file part after the execute result", () => withProject(() => Effect.gen(function* () {
104
+ const { exit, calls, outputs } = yield* runAgent({
105
+ respond: (_, index) => index === 0
106
+ ? Stream.make(toolCall("call-1", 'console.log(await readFile({ path: "shot.png" }))'))
107
+ : Stream.fromIterable(text("It is a red rectangle.")),
108
+ });
109
+ assert.isTrue(Exit.isSuccess(exit));
110
+ assert.strictEqual(calls.length, 2);
111
+ const messages = calls[1].prompt.content;
112
+ const resultIndex = messages.findIndex((m) => toolResultText(m)?.includes("Image attached: shot.png"));
113
+ assert.notStrictEqual(resultIndex, -1, "script saw the marker");
114
+ const image = messages
115
+ .slice(resultIndex + 1)
116
+ .flatMap(fileParts)
117
+ .find((part) => part.mediaType === "image/png");
118
+ assert.isDefined(image, "a file part follows the tool result");
119
+ assert.strictEqual(calls[1].prompt.content.flatMap(fileParts).length, 1);
120
+ assert.strictEqual(image.fileName, "shot.png");
121
+ assert.isTrue(equalBytes(bytesOf(image.data), tinyPng));
122
+ // The first model call had no image: injection happens after the
123
+ // script runs, not before.
124
+ assert.strictEqual(calls[0].prompt.content.flatMap(fileParts).length, 0);
125
+ // The script output shown to the client is the marker, not bytes.
126
+ const scriptOutput = outputs.find((o) => o._tag === "ScriptOutput");
127
+ assert.isDefined(scriptOutput);
128
+ assert.include(scriptOutput.output, "Image attached: shot.png");
129
+ assert.isBelow(scriptOutput.output.length, 200);
130
+ })));
131
+ it.effect("applies the image limits to readFile images", () => withProject(() => Effect.gen(function* () {
132
+ const { exit, calls } = yield* runAgent({
133
+ respond: (_, index) => index === 0
134
+ ? Stream.make(toolCall("call-1", 'console.log(await readFile({ path: "wide.png" }))'))
135
+ : Stream.fromIterable(text("done")),
136
+ });
137
+ assert.isTrue(Exit.isSuccess(exit));
138
+ const images = calls[1].prompt.content.flatMap(fileParts);
139
+ assert.strictEqual(images.length, 1);
140
+ const size = dimensions(bytesOf(images[0].data));
141
+ assert.isAtMost(size.width, 2000);
142
+ assert.isAtMost(size.height, 2000);
143
+ })));
144
+ it.effect("reads SVG as text without injecting an image", () => withProject(() => Effect.gen(function* () {
145
+ const { calls } = yield* runAgent({
146
+ respond: (_, index) => index === 0
147
+ ? Stream.make(toolCall("call-1", 'console.log(await readFile({ path: "logo.svg" }))'))
148
+ : Stream.fromIterable(text("done")),
149
+ });
150
+ assert.strictEqual(calls.length, 2);
151
+ assert.strictEqual(calls[1].prompt.content.flatMap(fileParts).length, 0);
152
+ const result = calls[1].prompt.content
153
+ .map(toolResultText)
154
+ .find((r) => r !== undefined);
155
+ assert.include(result, "<svg");
156
+ })));
157
+ });
158
+ //# sourceMappingURL=AgentToolsImage.test.js.map