2026-02-18 13:53:03 -06:00
import type { AdapterConfigFieldsProps } from "../types" ;
import {
2026-02-26 16:34:39 -06:00
Field ,
2026-02-18 13:53:03 -06:00
ToggleField ,
2026-02-26 16:34:39 -06:00
DraftInput ,
2026-02-18 13:53:03 -06:00
help ,
} from "../../components/agent-config-primitives" ;
2026-03-02 16:08:59 -06:00
import { ChoosePathButton } from "../../components/PathInstructionsModal" ;
2026-03-10 10:58:38 -05:00
import { LocalWorkspaceRuntimeFields } from "../local-workspace-runtime-fields" ;
2026-04-11 07:36:42 -05:00
import {
CODEX_LOCAL_FAST_MODE_SUPPORTED_MODELS ,
isCodexLocalFastModeSupported ,
} from "@paperclipai/adapter-codex-local" ;
2026-02-18 13:53:03 -06:00
2026-02-26 16:34:39 -06:00
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" ;
const instructionsFileHint =
2026-03-23 16:55:10 -05:00
"Absolute path to a markdown file (e.g. AGENTS.md) that defines this agent's behavior. Injected into the system prompt at runtime. Note: Codex may still auto-apply repo-scoped AGENTS.md files from the workspace." ;
2026-02-26 16:34:39 -06:00
2026-02-18 13:53:03 -06:00
export function CodexLocalConfigFields ( {
2026-03-10 10:58:38 -05:00
mode ,
2026-02-18 13:53:03 -06:00
isCreate ,
2026-03-10 10:58:38 -05:00
adapterType ,
2026-02-18 13:53:03 -06:00
values ,
set ,
config ,
eff ,
mark ,
2026-03-10 10:58:38 -05:00
models ,
2026-03-16 11:09:36 -05:00
hideInstructionsFile ,
2026-02-18 13:53:03 -06:00
} : AdapterConfigFieldsProps ) {
2026-02-23 19:44:10 -06:00
const bypassEnabled =
config . dangerouslyBypassApprovalsAndSandbox === true || config . dangerouslyBypassSandbox === true ;
2026-04-11 07:36:42 -05:00
const fastModeEnabled = isCreate
? Boolean ( values ! . fastMode )
: eff ( "adapterConfig" , "fastMode" , Boolean ( config . fastMode ) ) ;
const currentModel = isCreate
? String ( values ! . model ? ? "" )
: eff ( "adapterConfig" , "model" , String ( config . model ? ? "" ) ) ;
const fastModeSupported = isCodexLocalFastModeSupported ( currentModel ) ;
const supportedModelsLabel = CODEX_LOCAL_FAST_MODE_SUPPORTED_MODELS . join ( ", " ) ;
2026-02-23 19:44:10 -06:00
2026-02-18 13:53:03 -06:00
return (
< >
2026-03-16 11:09:36 -05:00
{ ! hideInstructionsFile && (
< Field label = "Agent instructions file" hint = { instructionsFileHint } >
< div className = "flex items-center gap-2" >
< DraftInput
value = {
isCreate
? values ! . instructionsFilePath ? ? ""
: eff (
"adapterConfig" ,
"instructionsFilePath" ,
String ( config . instructionsFilePath ? ? "" ) ,
)
}
onCommit = { ( v ) = >
isCreate
? set ! ( { instructionsFilePath : v } )
: mark ( "adapterConfig" , "instructionsFilePath" , v || undefined )
}
immediate
className = { inputClass }
placeholder = "/absolute/path/to/AGENTS.md"
/ >
< ChoosePathButton / >
< / div >
< / Field >
) }
2026-02-18 13:53:03 -06:00
< ToggleField
label = "Bypass sandbox"
hint = { help . dangerouslyBypassSandbox }
checked = {
isCreate
? values ! . dangerouslyBypassSandbox
: eff (
"adapterConfig" ,
"dangerouslyBypassApprovalsAndSandbox" ,
2026-02-23 19:44:10 -06:00
bypassEnabled ,
2026-02-18 13:53:03 -06:00
)
}
onChange = { ( v ) = >
isCreate
? set ! ( { dangerouslyBypassSandbox : v } )
: mark ( "adapterConfig" , "dangerouslyBypassApprovalsAndSandbox" , v )
}
/ >
< ToggleField
label = "Enable search"
hint = { help . search }
checked = {
isCreate
? values ! . search
: eff ( "adapterConfig" , "search" , ! ! config . search )
}
onChange = { ( v ) = >
isCreate
? set ! ( { search : v } )
: mark ( "adapterConfig" , "search" , v )
}
/ >
2026-04-11 07:36:42 -05:00
< ToggleField
label = "Fast mode"
hint = { help . fastMode }
checked = { fastModeEnabled }
onChange = { ( v ) = >
isCreate
? set ! ( { fastMode : v } )
: mark ( "adapterConfig" , "fastMode" , v )
}
/ >
{ fastModeEnabled && (
< div className = "rounded-md border border-amber-300/70 bg-amber-50/80 px-3 py-2 text-sm text-amber-900 dark:border-amber-500/40 dark:bg-amber-500/10 dark:text-amber-100" >
{ fastModeSupported
? "Fast mode consumes credits/tokens much faster than standard Codex runs."
: ` Fast mode currently only works on ${ supportedModelsLabel } . Paperclip will ignore this toggle until the model is switched. ` }
< / div >
) }
2026-03-10 10:58:38 -05:00
< LocalWorkspaceRuntimeFields
isCreate = { isCreate }
values = { values }
set = { set }
config = { config }
mark = { mark }
eff = { eff }
mode = { mode }
adapterType = { adapterType }
models = { models }
/ >
2026-02-18 13:53:03 -06:00
< / >
) ;
}