Update Fusion's matched Pi dependencies and compatibility coverage for version 0.82.0. - Pin Pi AI and coding-agent packages to the exact 0.82.0 release pair. - Refresh provider catalog, supplemental model, auth storage, and Droid thinking coverage. - Add the published CLI patch changeset. Files changed: .changeset/fn-8564-pi-082.md | 7 + packages/cli/package.json | 4 +- packages/cli/src/__tests__/package-config.test.ts | 2 +- packages/core/package.json | 2 +- packages/dashboard/package.json | 2 +- ...ister-model-routes-kimi-k3-supplemental.test.ts | 6 +- packages/engine/package.json | 4 +- .../src/__tests__/provider-registration.test.ts | 4 +- packages/engine/src/auth-storage.ts | 11 +- packages/engine/src/pi.ts | 6 + packages/pi-claude-cli/package.json | 8 +- .../src/thinking-config.ts | 10 +- pnpm-lock.yaml | 176 +++++++++++---------- pnpm-workspace.yaml | 6 +- .../__tests__/check-pi-versions-pinned.test.mjs | 8 +- 15 files changed, 142 insertions(+), 114 deletions(-) Fusion-Task-Id: FN-8564 Fusion-Task-Lineage: 543c5e17-4cb2-446f-9a1c-ec7ec8b8117a Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
95 lines
3.4 KiB
TypeScript
95 lines
3.4 KiB
TypeScript
/**
|
|
* Thinking effort configuration for mapping pi's ThinkingLevel to Droid CLI --effort flags.
|
|
*
|
|
* Maps pi's reasoning levels (minimal/low/medium/high/xhigh/max) to the CLI's effort
|
|
* levels (low/medium/high/max). Opus models get an elevated mapping where medium
|
|
* becomes high and high becomes max, leveraging their superior reasoning capability.
|
|
*
|
|
* FNXC:DroidThinking 2026-07-16-18:20:
|
|
* Pi's ThinkingLevel includes `max`. Keep both exhaustive mappings explicit:
|
|
* non-Opus must still avoid the CLI's max effort, while Opus may use it.
|
|
*
|
|
* FNXC:DroidThinking 2026-07-24-12:00:
|
|
* FN-8564 updates the workspace runtime to Pi 0.82.0 while retaining `max`.
|
|
* Keep these exhaustive maps aligned with the installed type rather than casting
|
|
* unknown thinking levels through the Droid CLI boundary.
|
|
*
|
|
* IMPORTANT: The CLI does NOT support --thinking-budget. Only --effort is supported.
|
|
*/
|
|
|
|
import type { ThinkingLevel, ThinkingBudgets } from "@earendil-works/pi-ai";
|
|
|
|
/** CLI effort levels accepted by the --effort flag */
|
|
export type CliEffortLevel = "low" | "medium" | "high" | "max";
|
|
|
|
/**
|
|
* Standard model mapping: pi ThinkingLevel -> CLI effort.
|
|
* Non-Opus models never receive "max" (would cause CLI error).
|
|
*/
|
|
const STANDARD_EFFORT_MAP: Record<ThinkingLevel, CliEffortLevel> = {
|
|
minimal: "low",
|
|
low: "low",
|
|
medium: "medium",
|
|
high: "high",
|
|
xhigh: "high", // non-Opus: silently downgrade (max not supported)
|
|
max: "high", // non-Opus: silently downgrade (max not supported)
|
|
};
|
|
|
|
/**
|
|
* Opus model mapping: shifted up for elevated reasoning.
|
|
* Opus models get max capability at high/xhigh levels.
|
|
*/
|
|
const OPUS_EFFORT_MAP: Record<ThinkingLevel, CliEffortLevel> = {
|
|
minimal: "low",
|
|
low: "low",
|
|
medium: "high", // shifted: standard high
|
|
high: "max", // shifted: maximum capability
|
|
xhigh: "max", // Opus gets max
|
|
max: "max", // Opus gets max
|
|
};
|
|
|
|
/**
|
|
* Detect whether a model ID refers to an Opus model.
|
|
* Uses includes('opus') for forward-compatibility with future Opus versions.
|
|
*
|
|
* @param modelId - The model identifier string
|
|
* @returns true if the model is an Opus variant
|
|
*/
|
|
export function isOpusModel(modelId: string): boolean {
|
|
return modelId.includes("opus");
|
|
}
|
|
|
|
/**
|
|
* Map pi's ThinkingLevel to a CLI effort string.
|
|
*
|
|
* When reasoning is undefined, returns undefined so the --effort flag is omitted
|
|
* entirely, letting the CLI use its default behavior. When thinkingBudgets are
|
|
* provided, a console.warn is logged because the CLI only supports effort levels,
|
|
* not token budgets.
|
|
*
|
|
* @param reasoning - Pi's thinking level (undefined = omit flag)
|
|
* @param modelId - Model ID for Opus detection
|
|
* @param thinkingBudgets - Custom budgets (logged as unsupported, not applied)
|
|
* @returns CLI effort level string, or undefined if flag should be omitted
|
|
*/
|
|
export function mapThinkingEffort(
|
|
reasoning?: ThinkingLevel,
|
|
modelId?: string,
|
|
thinkingBudgets?: ThinkingBudgets,
|
|
): CliEffortLevel | undefined {
|
|
if (reasoning === undefined) {
|
|
return undefined; // omit --effort flag entirely
|
|
}
|
|
|
|
if (thinkingBudgets && Object.keys(thinkingBudgets).length > 0) {
|
|
console.warn(
|
|
"[droid-cli] Custom thinkingBudgets are not supported with CLI subprocess. " +
|
|
"The CLI uses --effort levels instead of token budgets. Budgets will be ignored.",
|
|
);
|
|
}
|
|
|
|
const isOpus = modelId ? isOpusModel(modelId) : false;
|
|
const map = isOpus ? OPUS_EFFORT_MAP : STANDARD_EFFORT_MAP;
|
|
return map[reasoning];
|
|
}
|