import type { AdapterConfigFieldsProps } from "./types"; import { DraftInput, Field, help } from "../components/agent-config-primitives"; import { RuntimeServicesJsonField } from "./runtime-json-fields"; const inputClass = "w-full rounded-md border border-border px-2.5 py-1.5 bg-transparent outline-none text-sm font-mono placeholder:text-muted-foreground/40"; function asRecord(value: unknown): Record { return typeof value === "object" && value !== null && !Array.isArray(value) ? (value as Record) : {}; } function asString(value: unknown): string { return typeof value === "string" ? value : ""; } function readWorkspaceStrategy(config: Record) { const strategy = asRecord(config.workspaceStrategy); const type = asString(strategy.type) || "project_primary"; return { type, baseRef: asString(strategy.baseRef), branchTemplate: asString(strategy.branchTemplate), worktreeParentDir: asString(strategy.worktreeParentDir), }; } function buildWorkspaceStrategyPatch(input: { type: string; baseRef?: string; branchTemplate?: string; worktreeParentDir?: string; }) { if (input.type !== "git_worktree") return undefined; return { type: "git_worktree", ...(input.baseRef ? { baseRef: input.baseRef } : {}), ...(input.branchTemplate ? { branchTemplate: input.branchTemplate } : {}), ...(input.worktreeParentDir ? { worktreeParentDir: input.worktreeParentDir } : {}), }; } export function LocalWorkspaceRuntimeFields({ isCreate, values, set, config, mark, }: AdapterConfigFieldsProps) { const existing = readWorkspaceStrategy(config); const strategyType = isCreate ? values!.workspaceStrategyType ?? "project_primary" : existing.type; const updateEditWorkspaceStrategy = (patch: Partial) => { const next = { ...existing, ...patch, }; mark( "adapterConfig", "workspaceStrategy", buildWorkspaceStrategyPatch(next), ); }; return ( <> {strategyType === "git_worktree" && ( <> isCreate ? set!({ workspaceBaseRef: v }) : updateEditWorkspaceStrategy({ baseRef: v || "" }) } immediate className={inputClass} placeholder="origin/main" /> isCreate ? set!({ workspaceBranchTemplate: v }) : updateEditWorkspaceStrategy({ branchTemplate: v || "" }) } immediate className={inputClass} placeholder="{{issue.identifier}}-{{slug}}" /> isCreate ? set!({ worktreeParentDir: v }) : updateEditWorkspaceStrategy({ worktreeParentDir: v || "" }) } immediate className={inputClass} placeholder=".paperclip/worktrees" /> )} ); }