Something went wrong. Try again.
fork of prime agent with changes i want but are not upstreamable probqbly (and some fixes)
Something went wrong. Try again.
2.6 kB · 95 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596/** * Extensions Configuration * * Extensions intercept agent events and can register custom tools. * They provide a unified system for extensions, custom tools, commands, and more. * * By default, extension files are discovered from: * - ~/.pi/agent/extensions/ * - <cwd>/.pi/extensions/ * - Paths specified in settings.json "extensions" array * * An extension is a TypeScript file that exports a default function: * export default function (pi: ExtensionAPI) { ... } */
import { createAgentSession, DefaultResourceLoader, getAgentDir, SessionManager,} from "@earendil-works/pi-coding-agent";
// Extensions are discovered automatically from standard locations.// You can also add paths via settings.json or DefaultResourceLoader options.
const resourceLoader = new DefaultResourceLoader({ cwd: process.cwd(), agentDir: getAgentDir(), additionalExtensionPaths: ["./my-logging-extension.ts", "./my-safety-extension.ts"], extensionFactories: [ (pi) => { pi.on("agent_start", () => { console.log("[Inline Extension] Agent starting"); }); }, ],});await resourceLoader.reload();
const { session } = await createAgentSession({ resourceLoader, sessionManager: SessionManager.inMemory(),});
session.subscribe((event) => { if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") { process.stdout.write(event.assistantMessageEvent.delta); }});
await session.prompt("List files in the current directory.");console.log();
// Example extension file (./my-logging-extension.ts):/*import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
export default function (pi: ExtensionAPI) { pi.on("agent_start", async () => { console.log("[Extension] Agent starting"); });
pi.on("tool_call", async (event) => { console.log(\`[Extension] Tool: \${event.toolName}\`); // Return { block: true, reason: "..." } to block execution return undefined; });
pi.on("agent_end", async (event) => { console.log(\`[Extension] Done, \${event.messages.length} messages\`); });
// Register a custom tool pi.registerTool({ name: "my_tool", label: "My Tool", description: "Does something useful", parameters: Type.Object({ input: Type.String(), }), execute: async (_toolCallId, params, _signal, _onUpdate, _ctx) => ({ content: [{ type: "text", text: \`Processed: \${params.input}\` }], details: {}, }), });
// Register a command pi.registerCommand("mycommand", { description: "Do something", handler: async (args, ctx) => { ctx.ui.notify(\`Command executed with: \${args}\`); }, });}*/