pi-mcp-adapter 5.3.1 → 5.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,7 +51,8 @@ export function hashProjectServerDefinition(definition) {
51
51
  }
52
52
  export function canonicalProjectRoot(cwd) {
53
53
  try {
54
- return realpathSync(cwd);
54
+ // The native realpath returns the on-disk casing, so `C:\Users\Me` and `c:\users\me` share approvals.
55
+ return realpathSync.native(cwd);
55
56
  }
56
57
  catch {
57
58
  return resolve(cwd);
@@ -87,9 +88,9 @@ function linkedWorktreeRepoScope(dotGit) {
87
88
  const pointer = /^gitdir: (.+)$/m.exec(readFileSync(dotGit, "utf8"))?.[1]?.trim();
88
89
  if (!pointer)
89
90
  return undefined;
90
- const adminDir = realpathSync(resolve(dirname(dotGit), pointer));
91
+ const adminDir = realpathSync.native(resolve(dirname(dotGit), pointer));
91
92
  const backLink = readFileSync(join(adminDir, "gitdir"), "utf8").trim();
92
- if (realpathSync(resolve(adminDir, backLink)) !== realpathSync(dotGit))
93
+ if (realpathSync.native(resolve(adminDir, backLink)) !== realpathSync.native(dotGit))
93
94
  return undefined;
94
95
  const commonDir = dirname(dirname(adminDir));
95
96
  const bare = /^\s*bare\s*=\s*(true|yes|on|1)\s*$/im.test(readFileSync(join(commonDir, "config"), "utf8"));
@@ -142,6 +143,45 @@ export function approveProjectServer(cwd, serverName, definition) {
142
143
  approvedAt: new Date().toISOString(),
143
144
  });
144
145
  }
146
+ function isApproved(approvals, projectRoot, serverName, definition) {
147
+ const definitionHash = hashProjectServerDefinition(definition);
148
+ return approvals.approvals.some(entry => entry.projectRoot === projectRoot && entry.serverName === serverName && entry.definitionHash === definitionHash);
149
+ }
150
+ function isProjectTrusted(ctx) {
151
+ try {
152
+ return ctx.isProjectTrusted();
153
+ }
154
+ catch {
155
+ return false;
156
+ }
157
+ }
158
+ /**
159
+ * After the adapter edits config on the user's behalf (a panel save), re-approve each named project
160
+ * server whose pre-edit definition was approved, so the edit does not revoke the approval. Only a
161
+ * `directTools` change carries the approval over; any other difference, such as a concurrent edit to
162
+ * the file, still needs a new approval. A server without a matching approval stays unapproved: an
163
+ * adapter edit never creates one.
164
+ */
165
+ export function keepProjectServerApprovals(ctx, before, after, serverNames) {
166
+ if (!isProjectTrusted(ctx))
167
+ return;
168
+ const projectServers = asLoadedConfig(after).projectServers;
169
+ const projectRoot = projectApprovalScope(ctx.cwd);
170
+ const approvals = loadApprovals();
171
+ for (const name of serverNames) {
172
+ const previous = before.mcpServers[name];
173
+ const next = after.mcpServers[name];
174
+ if (!previous || !next || !projectServers.has(name))
175
+ continue;
176
+ if (!isApproved(approvals, projectRoot, name, previous))
177
+ continue;
178
+ const { directTools: _previousDirectTools, ...previousRest } = previous;
179
+ const { directTools: _nextDirectTools, ...nextRest } = next;
180
+ if (hashProjectServerDefinition(previousRest) !== hashProjectServerDefinition(nextRest))
181
+ continue;
182
+ approveProjectServer(ctx.cwd, name, next);
183
+ }
184
+ }
145
185
  function describeServer(definition) {
146
186
  if (definition.command) {
147
187
  return [definition.command, ...(definition.args ?? [])].map(value => JSON.stringify(value)).join(" ");
@@ -157,13 +197,7 @@ export async function applyProjectServerTrust(loaded, ctx) {
157
197
  const blockedServers = new Map();
158
198
  if (loaded.projectServers.size === 0)
159
199
  return { config, blockedServers };
160
- let projectTrusted = false;
161
- try {
162
- projectTrusted = ctx.isProjectTrusted();
163
- }
164
- catch {
165
- projectTrusted = false;
166
- }
200
+ const projectTrusted = isProjectTrusted(ctx);
167
201
  // RPC sessions also have a UI, but Pi reads RPC input only after session_start, so a dialog here never resolves.
168
202
  const interactive = ctx.hasUI && ctx.mode === "tui";
169
203
  const projectRoot = projectApprovalScope(ctx.cwd);
@@ -172,8 +206,7 @@ export async function applyProjectServerTrust(loaded, ctx) {
172
206
  const definition = config.mcpServers[name];
173
207
  if (!definition || isServerDisabled(definition))
174
208
  continue;
175
- const definitionHash = hashProjectServerDefinition(definition);
176
- const approved = approvals.approvals.some(entry => entry.projectRoot === projectRoot && entry.serverName === name && entry.definitionHash === definitionHash);
209
+ const approved = isApproved(approvals, projectRoot, name, definition);
177
210
  if (projectTrusted && (approved || (!interactive && loaded.projectServerPolicy === "allow")))
178
211
  continue;
179
212
  let reason;
@@ -1 +1 @@
1
- {"version":3,"file":"project-server-trust.js","sourceRoot":"","sources":["../project-server-trust.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-server-trust.js","sourceRoot":"","sources":["../project-server-trust.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
- import type { Api, Model } from "@earendil-works/pi-ai";
1
+ import type { Api, Model, ModelThinkingLevel } from "@earendil-works/pi-ai";
2
2
  import type { ExtensionUIContext, ModelRegistry } from "@earendil-works/pi-coding-agent";
3
3
  import type { Client } from "@modelcontextprotocol/client";
4
4
  import { type CreateMessageRequest, type CreateMessageResult } from "@modelcontextprotocol/client";
5
5
  export type SamplingUIContext = Pick<ExtensionUIContext, "confirm">;
6
- export type SamplingModelRegistry = Pick<ModelRegistry, "getAvailable" | "complete">;
6
+ export type SamplingModelRegistry = Pick<ModelRegistry, "getAvailable" | "complete"> & Partial<Pick<ModelRegistry, "streamSimple">>;
7
7
  export interface SamplingHandlerOptions {
8
8
  serverName: string;
9
9
  autoApprove: boolean;
10
10
  ui?: SamplingUIContext;
11
11
  modelRegistry: SamplingModelRegistry;
12
12
  getCurrentModel: () => Model<Api> | undefined;
13
+ getThinkingLevel: () => ModelThinkingLevel;
13
14
  getSignal: () => AbortSignal | undefined;
14
15
  }
15
16
  export type ServerSamplingConfig = Omit<SamplingHandlerOptions, "serverName">;
@@ -29,15 +29,24 @@ export async function handleSamplingRequest(options, request) {
29
29
  throwIfAborted(signal);
30
30
  await confirmSampling(options, "Approve MCP sampling request", formatRequestApproval(options.serverName, `${model.provider}/${model.id}`, params.systemPrompt, messages));
31
31
  throwIfAborted(signal);
32
- const result = await options.modelRegistry.complete(model, {
32
+ const context = {
33
33
  ...(params.systemPrompt !== undefined ? { systemPrompt: params.systemPrompt } : {}),
34
34
  messages,
35
- }, {
35
+ };
36
+ const requestOptions = {
36
37
  maxTokens: params.maxTokens,
37
38
  ...(params.temperature !== undefined ? { temperature: params.temperature } : {}),
38
39
  ...(params.metadata !== undefined ? { metadata: params.metadata } : {}),
39
40
  ...(signal ? { signal } : {}),
40
- });
41
+ };
42
+ const thinkingLevel = options.getThinkingLevel();
43
+ // Only streamSimple applies the thinking level; Pi before 0.86 has no streamSimple, so sampling runs with thinking off there.
44
+ const result = options.modelRegistry.streamSimple
45
+ ? await options.modelRegistry.streamSimple(model, context, {
46
+ ...requestOptions,
47
+ ...(thinkingLevel !== "off" ? { reasoning: thinkingLevel } : {}),
48
+ }).result()
49
+ : await options.modelRegistry.complete(model, context, requestOptions);
41
50
  const converted = convertAssistantResult(result);
42
51
  throwIfAborted(signal);
43
52
  await confirmSampling(options, "Return MCP sampling response", formatResponseApproval(options.serverName, converted));
@@ -1 +1 @@
1
- {"version":3,"file":"sampling-handler.js","sourceRoot":"","sources":["../sampling-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sampling-handler.js","sourceRoot":"","sources":["../sampling-handler.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ Where the adapter reads MCP servers from, which file wins, how project servers a
8
8
 
9
9
  **Open the panel from a key:** To open the panel without clearing a prompt you are typing, bind `mcp.panel.open` in Pi's [`keybindings.json`](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/keybindings.md), for example `{ "mcp.panel.open": "alt+m" }`, then run `/reload`. You can bind one key or a list of keys. There is no default key.
10
10
 
11
- **Guided first-run setup:** Run `/mcp-adapter setup` to choose the normal write target for new shared servers — project `.mcp.json` or global `~/.config/mcp/mcp.json` — inspect detected shared MCP files, adopt compatibility imports from other hosts, open discovered config paths, preview exact before/after file diffs for writes, scaffold a minimal selected config, add a curated known server (DeepWiki, Context7, Parallel Search, Tavily Search, Notion, GitHub, Chrome DevTools, or Figma (desktop) when the Figma app is installed), or quick-add RepoPrompt into a standard/shared MCP file.
11
+ **Guided first-run setup:** Run `/mcp-adapter setup` to choose the normal write target for new shared servers — project `.mcp.json` or global `~/.config/mcp/mcp.json` — inspect detected shared MCP files, adopt compatibility imports from other hosts, open discovered config paths, preview exact before/after file diffs for writes, scaffold a minimal selected config, add a curated known server (DeepWiki, Context7, Parallel Search, Tavily Search, Notion, GitHub (signs in with the GitHub CLI token from `gh auth token`), Chrome DevTools, or Figma (desktop) when the Figma app is installed), or quick-add RepoPrompt into a standard/shared MCP file.
12
12
 
13
13
  **Figma:** Figma's remote server, `https://mcp.figma.com/mcp`, only accepts approved clients, and Pi isn't approved yet. Use the Figma desktop app's local server instead: run `/mcp-adapter setup` and add Figma (desktop). It needs a Dev or Full seat on a paid Figma plan; to turn it on, open a Design file, switch to Dev Mode (Shift+D), and click "Enable desktop MCP server" in the inspect panel.
14
14
 
@@ -94,6 +94,8 @@ Within the selected root, `.mcp.json` and `<configDir>/mcp-adapter.json` load fr
94
94
 
95
95
  Prefer `.mcp.json` for project-local shared MCP config and `~/.config/mcp/mcp.json` for user-global shared MCP config. Use `.pi/mcp-adapter.json` for adapter-specific project overrides. Project files override user-global sources.
96
96
 
97
+ Entries for the same server merge field by field, but credentials (`headers`, bearer tokens, `oauth`, and the other auth fields) stay with the `url` they were written for: when a higher-precedence file sets a different `url`, the lower file's credentials are not sent, and the adapter says so at startup, naming both files. The notice covers config files and their imports; a url change between two files of the same host (such as global and project `opencode.json`), or for a server from a package or plugin, drops credentials the same way without a notice.
98
+
97
99
  ## Import Existing Configs
98
100
 
99
101
  Shared MCP files are loaded automatically. Use `imports` only for host-specific config formats that are not already covered by `.mcp.json` or `~/.config/mcp/mcp.json`.
package/index.ts CHANGED
@@ -13,7 +13,7 @@ import { cloneMcpConfig, discoverConfiguredClaudePluginSkills, getLegacyMcpMigra
13
13
  import { approveProjectServer, excludeProjectServersAtLoadTime, hasProjectServerDefinitions } from "./project-server-trust.ts";
14
14
  import { buildProxyDescription, getLargeDirectToolsAdvisory, getMissingConfiguredDirectToolServers, prepareDirectToolArguments, resolveDirectTools } from "./direct-tool-surface.ts";
15
15
  import { isServerInActiveFailureBackoff } from "./failure-backoff.ts";
16
- import { computeServerHash, isServerCacheValid, loadMetadataCache, parseDirectToolSelectors, type MetadataCache } from "./metadata-cache.ts";
16
+ import { isServerCacheValid, loadMetadataCache, parseDirectToolSelectors, withSessionMetadata, type MetadataCache } from "./metadata-cache.ts";
17
17
  import { createPromptCommand, resolveCachedPrompts } from "./prompts.ts";
18
18
  import { logger } from "./logger.ts";
19
19
  import { formatMcpFooterStatus, formatTerminalError, getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from "./utils.ts";
@@ -687,26 +687,11 @@ function installMcpAdapter(pi: ExtensionAPI, options: McpAdapterOptions) {
687
687
  }
688
688
  }
689
689
 
690
- function loadToolSurfaceCache(config: McpConfig): MetadataCache | null {
691
- const cache = loadMetadataCache();
692
- const currentState = state;
693
- if (!currentState?.sessionMetadata?.size) return cache;
694
- const servers = { ...cache?.servers };
695
- for (const [serverName, entry] of currentState.sessionMetadata) {
696
- const definition = config.mcpServers[serverName];
697
- if (!definition || isServerDisabled(definition)) continue;
698
- if (entry.configHash !== computeServerHash(definition)) continue;
699
- const { ttlMs: _sessionTtl, cacheScope: _sessionScope, ...sessionEntry } = entry;
700
- servers[serverName] = { ...sessionEntry, cachedAt: Date.now() };
701
- }
702
- return { version: 1, servers };
703
- }
704
-
705
690
  function syncToolSurface(ctx?: ExtensionContext): void {
706
691
  const notificationGeneration = lifecycleGeneration;
707
692
  const notificationOwner = currentOwner;
708
693
  const config = state?.config ?? earlyConfig;
709
- const cache = loadToolSurfaceCache(config);
694
+ const cache = withSessionMetadata(loadMetadataCache(), config, state?.sessionMetadata);
710
695
  const result = syncDirectTools(config, cache);
711
696
  if (state) {
712
697
  const directToolCounts = state.directToolCounts ?? new Map<string, number>();
package/init.ts CHANGED
@@ -171,6 +171,7 @@ export async function initializeMcp(
171
171
  ...(ui !== undefined ? { ui } : {}),
172
172
  modelRegistry,
173
173
  getCurrentModel: () => owner.isActive() ? ctx.model : undefined,
174
+ getThinkingLevel: () => owner.isActive() ? pi.getThinkingLevel() : "off",
174
175
  getSignal: () => owner.isActive()
175
176
  ? combineAbortSignals(owner.signal, ctx.signal)
176
177
  : owner.signal,
package/metadata-cache.ts CHANGED
@@ -56,6 +56,27 @@ export function loadMetadataCache(): MetadataCache | null {
56
56
  }
57
57
  }
58
58
 
59
+ /**
60
+ * The cache plus what this session already listed. Private or zero-TTL listings are never
61
+ * persisted as valid, but this session's own listing still counts for this session.
62
+ */
63
+ export function withSessionMetadata(
64
+ cache: MetadataCache | null,
65
+ config: McpConfig,
66
+ sessionMetadata: ReadonlyMap<string, ServerCacheEntry> | undefined,
67
+ ): MetadataCache | null {
68
+ if (!sessionMetadata?.size) return cache;
69
+ const servers = { ...cache?.servers };
70
+ for (const [serverName, entry] of sessionMetadata) {
71
+ const definition = config.mcpServers[serverName];
72
+ if (!definition || isServerDisabled(definition)) continue;
73
+ if (entry.configHash !== computeServerHash(definition)) continue;
74
+ const { ttlMs: _sessionTtl, cacheScope: _sessionScope, ...sessionEntry } = entry;
75
+ servers[serverName] = { ...sessionEntry, cachedAt: Date.now() };
76
+ }
77
+ return { version: CACHE_VERSION, servers };
78
+ }
79
+
59
80
  export function saveMetadataCache(cache: MetadataCache, options: { startupSnapshot?: MetadataCache["servers"] } = {}): void {
60
81
  updateMetadataCacheFile(servers => {
61
82
  const next = { ...servers };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-mcp-adapter",
3
- "version": "5.3.1",
3
+ "version": "5.3.2",
4
4
  "description": "MCP (Model Context Protocol) adapter extension for Pi coding agent",
5
5
  "type": "module",
6
6
  "types": "./index.ts",
@@ -80,7 +80,8 @@ export function hashProjectServerDefinition(definition: ServerDefinition): strin
80
80
 
81
81
  export function canonicalProjectRoot(cwd: string): string {
82
82
  try {
83
- return realpathSync(cwd);
83
+ // The native realpath returns the on-disk casing, so `C:\Users\Me` and `c:\users\me` share approvals.
84
+ return realpathSync.native(cwd);
84
85
  } catch {
85
86
  return resolve(cwd);
86
87
  }
@@ -114,9 +115,9 @@ function linkedWorktreeRepoScope(dotGit: string): string | undefined {
114
115
  if (!lstatSync(dotGit).isFile()) return undefined;
115
116
  const pointer = /^gitdir: (.+)$/m.exec(readFileSync(dotGit, "utf8"))?.[1]?.trim();
116
117
  if (!pointer) return undefined;
117
- const adminDir = realpathSync(resolve(dirname(dotGit), pointer));
118
+ const adminDir = realpathSync.native(resolve(dirname(dotGit), pointer));
118
119
  const backLink = readFileSync(join(adminDir, "gitdir"), "utf8").trim();
119
- if (realpathSync(resolve(adminDir, backLink)) !== realpathSync(dotGit)) return undefined;
120
+ if (realpathSync.native(resolve(adminDir, backLink)) !== realpathSync.native(dotGit)) return undefined;
120
121
  const commonDir = dirname(dirname(adminDir));
121
122
  const bare = /^\s*bare\s*=\s*(true|yes|on|1)\s*$/im.test(readFileSync(join(commonDir, "config"), "utf8"));
122
123
  return basename(commonDir) === ".git" && !bare ? dirname(commonDir) : `git-dir:${commonDir}`;
@@ -169,6 +170,49 @@ export function approveProjectServer(cwd: string, serverName: string, definition
169
170
  });
170
171
  }
171
172
 
173
+ function isApproved(approvals: ApprovalStore, projectRoot: string, serverName: string, definition: ServerDefinition): boolean {
174
+ const definitionHash = hashProjectServerDefinition(definition);
175
+ return approvals.approvals.some(entry =>
176
+ entry.projectRoot === projectRoot && entry.serverName === serverName && entry.definitionHash === definitionHash);
177
+ }
178
+
179
+ function isProjectTrusted(ctx: Pick<ExtensionContext, "isProjectTrusted">): boolean {
180
+ try {
181
+ return ctx.isProjectTrusted();
182
+ } catch {
183
+ return false;
184
+ }
185
+ }
186
+
187
+ /**
188
+ * After the adapter edits config on the user's behalf (a panel save), re-approve each named project
189
+ * server whose pre-edit definition was approved, so the edit does not revoke the approval. Only a
190
+ * `directTools` change carries the approval over; any other difference, such as a concurrent edit to
191
+ * the file, still needs a new approval. A server without a matching approval stays unapproved: an
192
+ * adapter edit never creates one.
193
+ */
194
+ export function keepProjectServerApprovals(
195
+ ctx: Pick<ExtensionContext, "cwd" | "isProjectTrusted">,
196
+ before: McpConfig,
197
+ after: McpConfig,
198
+ serverNames: Iterable<string>,
199
+ ): void {
200
+ if (!isProjectTrusted(ctx)) return;
201
+ const projectServers = asLoadedConfig(after).projectServers;
202
+ const projectRoot = projectApprovalScope(ctx.cwd);
203
+ const approvals = loadApprovals();
204
+ for (const name of serverNames) {
205
+ const previous = before.mcpServers[name];
206
+ const next = after.mcpServers[name];
207
+ if (!previous || !next || !projectServers.has(name)) continue;
208
+ if (!isApproved(approvals, projectRoot, name, previous)) continue;
209
+ const { directTools: _previousDirectTools, ...previousRest } = previous;
210
+ const { directTools: _nextDirectTools, ...nextRest } = next;
211
+ if (hashProjectServerDefinition(previousRest) !== hashProjectServerDefinition(nextRest)) continue;
212
+ approveProjectServer(ctx.cwd, name, next);
213
+ }
214
+ }
215
+
172
216
  function describeServer(definition: ServerDefinition): string {
173
217
  if (definition.command) {
174
218
  return [definition.command, ...(definition.args ?? [])].map(value => JSON.stringify(value)).join(" ");
@@ -186,12 +230,7 @@ export async function applyProjectServerTrust(
186
230
  const blockedServers = new Map<string, ProjectServerBlock>();
187
231
  if (loaded.projectServers.size === 0) return { config, blockedServers };
188
232
 
189
- let projectTrusted = false;
190
- try {
191
- projectTrusted = ctx.isProjectTrusted();
192
- } catch {
193
- projectTrusted = false;
194
- }
233
+ const projectTrusted = isProjectTrusted(ctx);
195
234
  // RPC sessions also have a UI, but Pi reads RPC input only after session_start, so a dialog here never resolves.
196
235
  const interactive = ctx.hasUI && ctx.mode === "tui";
197
236
  const projectRoot = projectApprovalScope(ctx.cwd);
@@ -200,9 +239,7 @@ export async function applyProjectServerTrust(
200
239
  for (const [name, source] of loaded.projectServers) {
201
240
  const definition = config.mcpServers[name];
202
241
  if (!definition || isServerDisabled(definition)) continue;
203
- const definitionHash = hashProjectServerDefinition(definition);
204
- const approved = approvals.approvals.some(entry =>
205
- entry.projectRoot === projectRoot && entry.serverName === name && entry.definitionHash === definitionHash);
242
+ const approved = isApproved(approvals, projectRoot, name, definition);
206
243
  if (projectTrusted && (approved || (!interactive && loaded.projectServerPolicy === "allow"))) continue;
207
244
 
208
245
  let reason: ProjectServerBlockReason;
@@ -1,4 +1,4 @@
1
- import type { Api, AssistantMessage, Message, Model, TextContent } from "@earendil-works/pi-ai";
1
+ import type { Api, AssistantMessage, Message, Model, ModelThinkingLevel, TextContent } from "@earendil-works/pi-ai";
2
2
  import { truncateAtWord } from "./utils.ts";
3
3
  import { throwIfAborted } from "./abort.ts";
4
4
  import type { ExtensionUIContext, ModelRegistry } from "@earendil-works/pi-coding-agent";
@@ -12,7 +12,7 @@ import {
12
12
  } from "@modelcontextprotocol/client";
13
13
 
14
14
  export type SamplingUIContext = Pick<ExtensionUIContext, "confirm">;
15
- export type SamplingModelRegistry = Pick<ModelRegistry, "getAvailable" | "complete">;
15
+ export type SamplingModelRegistry = Pick<ModelRegistry, "getAvailable" | "complete"> & Partial<Pick<ModelRegistry, "streamSimple">>;
16
16
 
17
17
  export interface SamplingHandlerOptions {
18
18
  serverName: string;
@@ -20,6 +20,7 @@ export interface SamplingHandlerOptions {
20
20
  ui?: SamplingUIContext;
21
21
  modelRegistry: SamplingModelRegistry;
22
22
  getCurrentModel: () => Model<Api> | undefined;
23
+ getThinkingLevel: () => ModelThinkingLevel;
23
24
  getSignal: () => AbortSignal | undefined;
24
25
  }
25
26
 
@@ -65,19 +66,24 @@ export async function handleSamplingRequest(
65
66
  );
66
67
  throwIfAborted(signal);
67
68
 
68
- const result = await options.modelRegistry.complete(
69
- model,
70
- {
71
- ...(params.systemPrompt !== undefined ? { systemPrompt: params.systemPrompt } : {}),
72
- messages,
73
- },
74
- {
75
- maxTokens: params.maxTokens,
76
- ...(params.temperature !== undefined ? { temperature: params.temperature } : {}),
77
- ...(params.metadata !== undefined ? { metadata: params.metadata as Record<string, unknown> } : {}),
78
- ...(signal ? { signal } : {}),
79
- },
80
- );
69
+ const context = {
70
+ ...(params.systemPrompt !== undefined ? { systemPrompt: params.systemPrompt } : {}),
71
+ messages,
72
+ };
73
+ const requestOptions = {
74
+ maxTokens: params.maxTokens,
75
+ ...(params.temperature !== undefined ? { temperature: params.temperature } : {}),
76
+ ...(params.metadata !== undefined ? { metadata: params.metadata as Record<string, unknown> } : {}),
77
+ ...(signal ? { signal } : {}),
78
+ };
79
+ const thinkingLevel = options.getThinkingLevel();
80
+ // Only streamSimple applies the thinking level; Pi before 0.86 has no streamSimple, so sampling runs with thinking off there.
81
+ const result = options.modelRegistry.streamSimple
82
+ ? await options.modelRegistry.streamSimple(model, context, {
83
+ ...requestOptions,
84
+ ...(thinkingLevel !== "off" ? { reasoning: thinkingLevel } : {}),
85
+ }).result()
86
+ : await options.modelRegistry.complete(model, context, requestOptions);
81
87
 
82
88
  const converted = convertAssistantResult(result);
83
89
  throwIfAborted(signal);