mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-18 11:02:06 +00:00
- Removed Attachment from agent package (now in web-ui/coding-agent) - Agent.prompt now takes (text, images?: ImageContent[]) - Removed transports from web-ui (duplicate of agent package) - Updated coding-agent to use local message types - Updated mom package for new agent API Remaining: Fix AgentInterface.ts to compose UserMessageWithAttachments
47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import type { AgentTool } from "@mariozechner/pi-agent-core";
|
|
import { Type } from "@sinclair/typebox";
|
|
import { basename, resolve as resolvePath } from "path";
|
|
|
|
// This will be set by the agent before running
|
|
let uploadFn: ((filePath: string, title?: string) => Promise<void>) | null = null;
|
|
|
|
export function setUploadFunction(fn: (filePath: string, title?: string) => Promise<void>): void {
|
|
uploadFn = fn;
|
|
}
|
|
|
|
const attachSchema = Type.Object({
|
|
label: Type.String({ description: "Brief description of what you're sharing (shown to user)" }),
|
|
path: Type.String({ description: "Path to the file to attach" }),
|
|
title: Type.Optional(Type.String({ description: "Title for the file (defaults to filename)" })),
|
|
});
|
|
|
|
export const attachTool: AgentTool<typeof attachSchema> = {
|
|
name: "attach",
|
|
label: "attach",
|
|
description:
|
|
"Attach a file to your response. Use this to share files, images, or documents with the user. Only files from /workspace/ can be attached.",
|
|
parameters: attachSchema,
|
|
execute: async (
|
|
_toolCallId: string,
|
|
{ path, title }: { label: string; path: string; title?: string },
|
|
signal?: AbortSignal,
|
|
) => {
|
|
if (!uploadFn) {
|
|
throw new Error("Upload function not configured");
|
|
}
|
|
|
|
if (signal?.aborted) {
|
|
throw new Error("Operation aborted");
|
|
}
|
|
|
|
const absolutePath = resolvePath(path);
|
|
const fileName = title || basename(absolutePath);
|
|
|
|
await uploadFn(absolutePath, fileName);
|
|
|
|
return {
|
|
content: [{ type: "text" as const, text: `Attached file: ${fileName}` }],
|
|
details: undefined,
|
|
};
|
|
},
|
|
};
|