/** * pi SDK adapter boundary * Owns direct pi SDK imports and exposes narrow bridge-facing helpers/types for the extension composition layer */ import { type AgentEndEvent, type AgentStartEvent, type BeforeAgentStartEvent, type ExtensionAPI, type ExtensionCommandContext, type ExtensionContext, type SessionShutdownEvent, type SessionStartEvent, SettingsManager, } from "@mariozechner/pi-coding-agent"; export type { AgentEndEvent, AgentStartEvent, BeforeAgentStartEvent, ExtensionAPI, ExtensionCommandContext, ExtensionContext, SessionShutdownEvent, SessionStartEvent, }; export interface PiSettingsManager { reload: () => Promise; getEnabledModels: () => string[] | undefined; } export interface PiExtensionApiRuntimePorts { sendUserMessage: ExtensionAPI["sendUserMessage"]; exec: ExtensionAPI["exec"]; getThinkingLevel: ExtensionAPI["getThinkingLevel"]; setThinkingLevel: ExtensionAPI["setThinkingLevel"]; setModel: ExtensionAPI["setModel"]; } export function createExtensionApiRuntimePorts( api: Pick< ExtensionAPI, | "sendUserMessage" | "exec" | "getThinkingLevel" | "setThinkingLevel" | "setModel" >, ): PiExtensionApiRuntimePorts { return { sendUserMessage: (content) => api.sendUserMessage(content), exec: (command, args, options) => api.exec(command, args, options), getThinkingLevel: () => api.getThinkingLevel(), setThinkingLevel: (level) => api.setThinkingLevel(level), setModel: (model) => api.setModel(model), }; } export function createSettingsManager(cwd: string): PiSettingsManager { return SettingsManager.create(cwd); } export function getExtensionContextModel( ctx: ExtensionContext, ): ExtensionContext["model"] { return ctx.model; } export function getExtensionContextCwd(ctx: ExtensionContext): string { return ctx.cwd; } export function getExtensionContextSessionFile(ctx: ExtensionContext): string | undefined { const manager = ctx.sessionManager as { getSessionFile?: () => string | undefined }; return manager.getSessionFile?.(); } export function isExtensionContextIdle(ctx: ExtensionContext): boolean { return ctx.isIdle(); } export function hasExtensionContextPendingMessages( ctx: ExtensionContext, ): boolean { return ctx.hasPendingMessages(); } export function compactExtensionContext( ctx: ExtensionContext, callbacks: Parameters[0], ): ReturnType { return ctx.compact(callbacks); }