feat(monorepo): merged codex providers and extensions

This commit is contained in:
can1357
2026-01-05 15:37:44 +01:00
parent 56e760f2bc
commit 15fbe228b3
176 changed files with 16020 additions and 2443 deletions
@@ -0,0 +1,87 @@
/**
* API Demo Extension
*
* Demonstrates using ExtensionAPI's logger, typebox, 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) {
// 1. Access TypeBox directly from pi.typebox (no separate import needed)
const { Type } = pi.typebox;
// 2. Access the logger for debugging
pi.logger.debug("API demo extension loaded");
// 3. Register a tool that uses all three API features
pi.registerTool({
name: "api_demo",
label: "API Demo",
description: "Demonstrates ExtensionAPI capabilities: logger, typebox, and pi module access",
parameters: Type.Object({
message: Type.String({ description: "Test message" }),
logLevel: Type.Optional(
Type.Union([Type.Literal("error"), Type.Literal("warn"), Type.Literal("debug")], {
description: "Log level to use",
default: "debug",
}),
),
}),
async execute(_toolCallId, params, _onUpdate, ctx, _signal) {
const { message, logLevel = "debug" } = params as { message: string; logLevel?: "error" | "warn" | "debug" };
// 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. ✓ TypeBox access via pi.typebox`,
`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" });
});
}