From f49098eb76e278f82c9f1bb6cfd927187d384d2e Mon Sep 17 00:00:00 2001 From: can1357 Date: Wed, 8 Apr 2026 21:08:05 +0200 Subject: [PATCH] config: configured PI_STRICT_EDIT_MODE for model-specific edit behavior - Added PI_STRICT_EDIT_MODE environment variable to control model-specific edit mode defaults. - Wrapped model-specific edit mode logic behind PI_STRICT_EDIT_MODE condition for conditional behavior. - Replaced Bun.env direct access with $env utility for consistent environment variable handling. - Updated rate-edit-tool and typescript-edit-benchmark to set PI_STRICT_EDIT_MODE in test environments. --- packages/coding-agent/CHANGELOG.md | 2 ++ packages/coding-agent/src/utils/edit-mode.ts | 16 ++++++++++------ .../typescript-edit-benchmark/src/runner.ts | 18 ++++++++++-------- scripts/rate-edit-tool.py | 2 +- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 4fe407477..41dbaf97f 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [Unreleased] + ### Added - Added support for embedded URL selectors (`:raw` and `:L#-L#` line ranges) in read command paths @@ -11,6 +12,7 @@ ### Changed +- Made model-specific edit mode defaults conditional on `PI_STRICT_EDIT_MODE` environment variable for greater flexibility in edit mode selection - Updated slash command handlers to support returning remaining text as prompt input instead of consuming input entirely - Enhanced slash command parser to recognize both whitespace and colon (`:`) as command argument separators - Updated indentation guidance for chunk edit content to use single leading spaces per indent level instead of tabs diff --git a/packages/coding-agent/src/utils/edit-mode.ts b/packages/coding-agent/src/utils/edit-mode.ts index 0918173c9..29cf75d42 100644 --- a/packages/coding-agent/src/utils/edit-mode.ts +++ b/packages/coding-agent/src/utils/edit-mode.ts @@ -1,3 +1,5 @@ +import { $env } from "@oh-my-pi/pi-utils"; + export type EditMode = "replace" | "patch" | "hashline" | "chunk"; export const DEFAULT_EDIT_MODE: EditMode = "hashline"; @@ -31,14 +33,16 @@ export function resolveEditMode(session: EditModeSessionLike): EditMode { const modelVariant = session.settings.getEditVariantForModel?.(activeModel); if (modelVariant) return modelVariant; - const envMode = normalizeEditMode(Bun.env.PI_EDIT_VARIANT); + const envMode = normalizeEditMode($env.PI_EDIT_VARIANT); if (envMode) return envMode; - if (activeModel?.includes("spark")) return "replace"; - if (activeModel?.includes("nano")) return "replace"; - if (activeModel?.includes("mini")) return "replace"; - if (activeModel?.includes("haiku")) return "replace"; - if (activeModel?.includes("flash")) return "replace"; + if ($env.PI_STRICT_EDIT_MODE === "1") { + if (activeModel?.includes("spark")) return "replace"; + if (activeModel?.includes("nano")) return "replace"; + if (activeModel?.includes("mini")) return "replace"; + if (activeModel?.includes("haiku")) return "replace"; + if (activeModel?.includes("flash")) return "replace"; + } const settingsMode = normalizeEditMode(String(session.settings.get("edit.mode") ?? "")); return settingsMode ?? DEFAULT_EDIT_MODE; diff --git a/packages/typescript-edit-benchmark/src/runner.ts b/packages/typescript-edit-benchmark/src/runner.ts index e0e2964c4..7b5b792f4 100644 --- a/packages/typescript-edit-benchmark/src/runner.ts +++ b/packages/typescript-edit-benchmark/src/runner.ts @@ -908,6 +908,15 @@ async function runSingleTask( `{"type":"meta","task":"${task.id}","run":${runIndex},"workDir":"${cwd}","providerSessionId":${JSON.stringify(sessionSetup.providerSessionId)}}\n`, ); + if (config.editVariant !== undefined) process.env.PI_EDIT_VARIANT = config.editVariant; + if (config.editFuzzy !== undefined) + process.env.PI_EDIT_FUZZY = config.editFuzzy === "auto" ? "auto" : config.editFuzzy ? "1" : "0"; + if (config.editFuzzyThreshold !== undefined) + process.env.PI_EDIT_FUZZY_THRESHOLD = + config.editFuzzyThreshold === "auto" ? "auto" : String(config.editFuzzyThreshold); + process.env.PI_STRICT_EDIT_MODE = "1"; + process.env.PI_NO_TITLE = "1"; + const useInProcess = config.inProcess !== false; const client: BenchmarkClient = useInProcess ? new InProcessClient({ @@ -921,20 +930,13 @@ async function runSingleTask( shared, }) : (() => { - const env: Record = { PI_NO_TITLE: "1" }; - if (config.editVariant !== undefined) env.PI_EDIT_VARIANT = config.editVariant; - if (config.editFuzzy !== undefined) - env.PI_EDIT_FUZZY = config.editFuzzy === "auto" ? "auto" : config.editFuzzy ? "1" : "0"; - if (config.editFuzzyThreshold !== undefined) - env.PI_EDIT_FUZZY_THRESHOLD = - config.editFuzzyThreshold === "auto" ? "auto" : String(config.editFuzzyThreshold); const rpc = new RpcClient({ cliPath: CLI_PATH, cwd, provider: config.provider, model: config.model, args: sessionSetup.rpcArgs, - env, + env: { ...process.env } as Record, }); return Object.assign(rpc, { dispose: async () => rpc[Symbol.dispose](), diff --git a/scripts/rate-edit-tool.py b/scripts/rate-edit-tool.py index e7516d0ae..d4c2874bc 100755 --- a/scripts/rate-edit-tool.py +++ b/scripts/rate-edit-tool.py @@ -1322,7 +1322,7 @@ def run_model_sync( executable=omp_bin, model=model, cwd=workspace, - env={"OPENROUTER_API_KEY": openrouter_key}, + env={"OPENROUTER_API_KEY": openrouter_key, "PI_STRICT_EDIT_MODE": "1"}, thinking="high", tools=TOOL_WHITELIST, no_skills=True,