mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-14 01:50:39 +09:00
133 lines
4.3 KiB
TypeScript
133 lines
4.3 KiB
TypeScript
import type { AdapterConfigFieldsProps } from "../types";
|
|
import {
|
|
Field,
|
|
ToggleField,
|
|
DraftInput,
|
|
help,
|
|
} from "../../components/agent-config-primitives";
|
|
import { ChoosePathButton } from "../../components/PathInstructionsModal";
|
|
import { LocalWorkspaceRuntimeFields } from "../local-workspace-runtime-fields";
|
|
import {
|
|
CODEX_LOCAL_FAST_MODE_SUPPORTED_MODELS,
|
|
isCodexLocalFastModeSupported,
|
|
} from "@paperclipai/adapter-codex-local";
|
|
|
|
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 =
|
|
"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.";
|
|
|
|
export function CodexLocalConfigFields({
|
|
mode,
|
|
isCreate,
|
|
adapterType,
|
|
values,
|
|
set,
|
|
config,
|
|
eff,
|
|
mark,
|
|
models,
|
|
hideInstructionsFile,
|
|
}: AdapterConfigFieldsProps) {
|
|
const bypassEnabled =
|
|
config.dangerouslyBypassApprovalsAndSandbox === true || config.dangerouslyBypassSandbox === true;
|
|
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(", ");
|
|
|
|
return (
|
|
<>
|
|
{!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>
|
|
)}
|
|
<ToggleField
|
|
label="Bypass sandbox"
|
|
hint={help.dangerouslyBypassSandbox}
|
|
checked={
|
|
isCreate
|
|
? values!.dangerouslyBypassSandbox
|
|
: eff(
|
|
"adapterConfig",
|
|
"dangerouslyBypassApprovalsAndSandbox",
|
|
bypassEnabled,
|
|
)
|
|
}
|
|
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)
|
|
}
|
|
/>
|
|
<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>
|
|
)}
|
|
<LocalWorkspaceRuntimeFields
|
|
isCreate={isCreate}
|
|
values={values}
|
|
set={set}
|
|
config={config}
|
|
mark={mark}
|
|
eff={eff}
|
|
mode={mode}
|
|
adapterType={adapterType}
|
|
models={models}
|
|
/>
|
|
</>
|
|
);
|
|
}
|