diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 31353915..cc493161 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- SDK: passing `extensions: []` now disables extension discovery as documented ([#465](https://github.com/badlogic/pi-mono/pull/465) by [@aliou](https://github.com/aliou)) + ## [0.36.0] - 2026-01-05 ### Added diff --git a/packages/coding-agent/examples/sdk/12-full-control.ts b/packages/coding-agent/examples/sdk/12-full-control.ts index a51c2d37..2d361b8e 100644 --- a/packages/coding-agent/examples/sdk/12-full-control.ts +++ b/packages/coding-agent/examples/sdk/12-full-control.ts @@ -6,10 +6,6 @@ * IMPORTANT: When providing `tools` with a custom `cwd`, use the tool factory * functions (createReadTool, createBashTool, etc.) to ensure tools resolve * paths relative to your cwd. - * - * NOTE: Extensions (extensions, custom tools) are always loaded via discovery. - * To use custom extensions, place them in the extensions directory or - * pass paths via additionalExtensionPaths. */ import { getModel } from "@mariozechner/pi-ai"; @@ -57,8 +53,8 @@ const { session } = await createAgentSession({ Available: read, bash. Be concise.`, // Use factory functions with the same cwd to ensure path resolution works correctly tools: [createReadTool(cwd), createBashTool(cwd)], - // Extensions are loaded from disk - use additionalExtensionPaths to add custom ones - // additionalExtensionPaths: ["./my-extension.ts"], + // Pass empty array to disable extension discovery, or provide inline factories + extensions: [], skills: [], contextFiles: [], promptTemplates: [], diff --git a/packages/coding-agent/src/core/sdk.ts b/packages/coding-agent/src/core/sdk.ts index e575a485..b89f6e85 100644 --- a/packages/coding-agent/src/core/sdk.ts +++ b/packages/coding-agent/src/core/sdk.ts @@ -444,6 +444,14 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {} errors: [], setUIContext: () => {}, }; + } else if (options.extensions !== undefined) { + // User explicitly provided extensions array (even if empty) - skip discovery + // Inline factories from options.extensions are loaded below + extensionsResult = { + extensions: [], + errors: [], + setUIContext: () => {}, + }; } else { // Discover extensions, merging with additional paths const configuredPaths = [...settingsManager.getExtensionPaths(), ...(options.additionalExtensionPaths ?? [])];