forked from farhoodlabs/paperclip
47ccd946b6
Refactor monolithic heartbeat service, AgentConfigForm, and CLI heartbeat-run into a proper adapter registry pattern. Each adapter type (process, claude-local, codex-local, http) gets its own module with server-side execution logic, CLI invocation, and UI config form. Significantly reduces file sizes and enables adding new adapters without touching core code. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
78 lines
1.9 KiB
TypeScript
78 lines
1.9 KiB
TypeScript
import type { AdapterConfigFieldsProps } from "../types";
|
|
import {
|
|
Field,
|
|
DraftInput,
|
|
help,
|
|
} from "../../components/agent-config-primitives";
|
|
|
|
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 formatArgList(value: unknown): string {
|
|
if (Array.isArray(value)) {
|
|
return value
|
|
.filter((item): item is string => typeof item === "string")
|
|
.join(", ");
|
|
}
|
|
return typeof value === "string" ? value : "";
|
|
}
|
|
|
|
function parseCommaArgs(value: string): string[] {
|
|
return value
|
|
.split(",")
|
|
.map((item) => item.trim())
|
|
.filter(Boolean);
|
|
}
|
|
|
|
export function ProcessConfigFields({
|
|
isCreate,
|
|
values,
|
|
set,
|
|
config,
|
|
eff,
|
|
mark,
|
|
}: AdapterConfigFieldsProps) {
|
|
return (
|
|
<>
|
|
<Field label="Command" hint={help.command}>
|
|
<DraftInput
|
|
value={
|
|
isCreate
|
|
? values!.command
|
|
: eff("adapterConfig", "command", String(config.command ?? ""))
|
|
}
|
|
onCommit={(v) =>
|
|
isCreate
|
|
? set!({ command: v })
|
|
: mark("adapterConfig", "command", v || undefined)
|
|
}
|
|
immediate
|
|
className={inputClass}
|
|
placeholder="e.g. node, python"
|
|
/>
|
|
</Field>
|
|
<Field label="Args (comma-separated)" hint={help.args}>
|
|
<DraftInput
|
|
value={
|
|
isCreate
|
|
? values!.args
|
|
: eff("adapterConfig", "args", formatArgList(config.args))
|
|
}
|
|
onCommit={(v) =>
|
|
isCreate
|
|
? set!({ args: v })
|
|
: mark(
|
|
"adapterConfig",
|
|
"args",
|
|
v ? parseCommaArgs(v) : undefined,
|
|
)
|
|
}
|
|
immediate
|
|
className={inputClass}
|
|
placeholder="e.g. script.js, --flag"
|
|
/>
|
|
</Field>
|
|
</>
|
|
);
|
|
}
|