80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
/**
|
|
* API Demo Extension
|
|
*
|
|
* Demonstrates using ExtensionAPI's logger, injected `pi.zod`, and pi module access.
|
|
* These features are now exposed directly on the ExtensionAPI, matching
|
|
* the CustomToolAPI interface.
|
|
*/
|
|
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
|
|
export default function (pi: ExtensionAPI) {
|
|
const { z } = pi.zod;
|
|
|
|
// Access the logger for debugging
|
|
pi.logger.debug("API demo extension loaded");
|
|
|
|
pi.registerTool({
|
|
name: "api_demo",
|
|
label: "API Demo",
|
|
description: "Demonstrates ExtensionAPI capabilities: logger, zod, and pi module access",
|
|
parameters: z.object({
|
|
message: z.string().describe("Test message"),
|
|
logLevel: z.enum(["error", "warn", "debug"]).default("debug").describe("Log level to use"),
|
|
}),
|
|
|
|
async execute(_toolCallId, params, _onUpdate, ctx, _signal) {
|
|
const { message, logLevel } = params;
|
|
|
|
// Use logger at specified level
|
|
pi.logger[logLevel]("API demo tool executed", { message, logLevel });
|
|
|
|
// Access pi module utilities
|
|
const { logger: piLogger } = pi.pi;
|
|
piLogger.debug("Accessed pi module from extension", { sessionFile: ctx.sessionManager.getSessionFile() });
|
|
|
|
// Get session information
|
|
const sessionInfo = `Session: ${ctx.sessionManager.getSessionFile()}`;
|
|
const modelInfo = ctx.model ? `Model: ${ctx.model.id}` : "Model: none";
|
|
|
|
return {
|
|
content: [
|
|
{
|
|
type: "text",
|
|
text: [
|
|
`API Demo Tool executed successfully!`,
|
|
``,
|
|
`Message: ${message}`,
|
|
`Log Level: ${logLevel}`,
|
|
``,
|
|
`Features demonstrated:`,
|
|
`1. ✓ Logger access via pi.logger`,
|
|
`2. ✓ Zod access via pi.zod`,
|
|
`3. ✓ Pi module access via pi.pi`,
|
|
``,
|
|
`Context:`,
|
|
`- ${sessionInfo}`,
|
|
`- ${modelInfo}`,
|
|
`- CWD: ${ctx.cwd}`,
|
|
].join("\n"),
|
|
},
|
|
],
|
|
details: {
|
|
message,
|
|
logLevel,
|
|
sessionFile: ctx.sessionManager.getSessionFile(),
|
|
modelId: ctx.model?.id,
|
|
},
|
|
};
|
|
},
|
|
});
|
|
|
|
// Demonstrate event handling with logger
|
|
pi.on("session_start", async () => {
|
|
pi.logger.debug("Session started", { extension: "api-demo" });
|
|
});
|
|
|
|
pi.on("agent_start", async () => {
|
|
pi.logger.debug("Agent started", { extension: "api-demo" });
|
|
});
|
|
}
|