import { resolveRtkRewrite, type RtkRewriteProviderOptions } from "./rtk-rewrite-provider.js"; import { splitLeadingEnvAssignments } from "./shell-env-prefix.js"; import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import type { RtkIntegrationConfig } from "./types.js"; export interface RewriteDecision { changed: boolean; originalCommand: string; rewrittenCommand: string; reason: "ok" | "empty" | "already_rtk" | "no_match"; warning?: string; } export async function computeRewriteDecision( command: string, _config: RtkIntegrationConfig, pi: ExtensionAPI, rewriteOptions: RtkRewriteProviderOptions = {}, ): Promise { if (!command || !command.trim()) { return { changed: false, originalCommand: command, rewrittenCommand: command, reason: "empty" }; } const trimmedStart = command.trimStart(); const effectiveCommand = splitLeadingEnvAssignments(trimmedStart).command.trimStart(); if (effectiveCommand === "rtk" || effectiveCommand.startsWith("rtk ")) { return { changed: false, originalCommand: command, rewrittenCommand: command, reason: "already_rtk" }; } const result = await resolveRtkRewrite(pi, command, rewriteOptions); if (result.changed && result.rewrittenCommand) { return { changed: true, originalCommand: command, rewrittenCommand: result.rewrittenCommand, reason: "ok", }; } return { changed: false, originalCommand: command, rewrittenCommand: command, reason: "no_match", warning: result.error, }; }