Files
oh-my-pi/packages/coding-agent/src/utils/edit-mode.ts
T
can1357 6bf09bedb0 refactor(chunk): restructured language classifiers to declarative rule tables
- Migrated language classifiers from imperative methods to declarative semantic rule tables with ClassifierTables and StructuralOverrides.
- Extracted node shape analysis into dedicated shape module with field priority constants and helper functions for AST traversal.
- Added schema module with language-aware node metadata and thread-local language context management.
- Centralized environment variable parsing across codebase using $flag(), $envpos(), and isBunTestRuntime() utilities.
- Added PI_CHUNK_AUTOINDENT configuration to control indentation normalization in chunk read/edit operations.
- Enhanced system prompt with instruction priority, output contract, tool persistence, and completeness guidelines.
2026-04-10 13:33:00 +02:00

50 lines
1.6 KiB
TypeScript

import { $env, $flag } from "@oh-my-pi/pi-utils";
export type EditMode = "replace" | "patch" | "hashline" | "chunk";
export const DEFAULT_EDIT_MODE: EditMode = "hashline";
const EDIT_MODE_IDS = {
chunk: "chunk",
hashline: "hashline",
patch: "patch",
replace: "replace",
} as const satisfies Record<string, EditMode>;
export const EDIT_MODES = Object.keys(EDIT_MODE_IDS) as EditMode[];
export function normalizeEditMode(mode?: string | null): EditMode | undefined {
if (!mode) return undefined;
return EDIT_MODE_IDS[mode as keyof typeof EDIT_MODE_IDS];
}
export interface EditModeSettingsLike {
get(key: "edit.mode"): unknown;
getEditVariantForModel?(model: string | undefined): EditMode | null;
}
export interface EditModeSessionLike {
settings: EditModeSettingsLike;
getActiveModelString?: () => string | undefined;
}
export function resolveEditMode(session: EditModeSessionLike): EditMode {
const activeModel = session.getActiveModelString?.();
const modelVariant = session.settings.getEditVariantForModel?.(activeModel);
if (modelVariant) return modelVariant;
const envMode = normalizeEditMode($env.PI_EDIT_VARIANT);
if (envMode) return envMode;
if (!$flag("PI_STRICT_EDIT_MODE")) {
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;
}