mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-04 11:01:16 +01:00
fix(ui): hide legacy commands for native Claude
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
7ede05c1c5
commit
7c0f3d75a6
3 files changed
+22
-2
No files matched your search
@@ -10,6 +10,10 @@ Local Apple Silicon API-key task and follow-up are the first gate. Keep existing
|
||||
|
||||
## Current state
|
||||
|
||||
- Local ordinary API-key onboarding, useful task, revision, cold resume with high effort, independent artifact downloads and persistence passed. The active preview is `http://127.0.0.1:3105/CLAA/issues/CLAA-1`.
|
||||
- The user redirected the remaining live checks to API keys. Subscription login remains supported, but no further attended subscription qualification is required; subscription follow-up is not claimed.
|
||||
- Shared runner controls passed light/dark, 390-pixel mobile and keyboard opening/closing checks. The walkthrough found native Command/Extra args controls; they are now hidden for native execution. The saved Claude preservation test covers this path. Agent form 111 tests, UI TypeScript and token gates passed.
|
||||
- Four-target cloud producers and required source checks are running on 9788c05; clean-install consumers are still pending. The existing authorized SSH development host is Linux ARM64 with GNU libc 2.39; qualification will use an isolated directory and preserve its other services.
|
||||
- Reviewed source chat “Make Paperclip Runner the default”; source worktree remains separate and active.
|
||||
- Isolated feature branch starts at the exact requested SHA.
|
||||
- Workspace dependencies installed with pinned pnpm 9.15.4 and lifecycle scripts disabled.
|
||||
|
||||
@@ -701,7 +701,23 @@ describe("AgentConfigForm environment selector", () => {
|
||||
expect(result.onSave.mock.calls[0][0].runner).toBeUndefined();
|
||||
});
|
||||
|
||||
it.each([{ provider: "opencode", model: "openrouter/anthropic/claude-sonnet-4.6" }, { provider: "acpx", acpxAgent: "claude" }, { provider: "unknown-provider" }])("preserves saved native $provider configuration with the experimental gate off", async adapterConfig => {
|
||||
it("shows Claude's saved runner without legacy command controls when the experimental gate is off", async () => {
|
||||
mockInstanceSettingsApi.getExperimental.mockResolvedValue({ enableNativeRunner: false });
|
||||
const result = await renderForm([], { adapterType: "paperclip_runner", adapterConfig: { provider: "acpx", acpxAgent: "claude", model: "claude-opus-5-5", modelReasoningEffort: "high" } }, { showAdapterTypeField: true });
|
||||
roots.push(result.root);
|
||||
expect(result.container.querySelector('[aria-label="Harness"]')?.textContent).toContain("Claude");
|
||||
await clickByText(result.container, "Advanced");
|
||||
expect(result.container.querySelector('[aria-label="Runner"]')?.textContent).toContain("Paperclip Runner");
|
||||
const labels = Array.from(result.container.querySelectorAll("label")).map(label => label.textContent?.trim());
|
||||
expect(labels).not.toContain("Command");
|
||||
expect(labels).not.toContain("Extra args (comma-separated)");
|
||||
await act(async () => setInputValue(result.container.querySelector<HTMLInputElement>('[placeholder="Agent name"]')!, "Renamed Claude"));
|
||||
await flushReact();
|
||||
await clickByText(result.container, "Save");
|
||||
expect(result.onSave).toHaveBeenCalledWith({ name: "Renamed Claude" });
|
||||
});
|
||||
|
||||
it.each([{ provider: "opencode", model: "openrouter/anthropic/claude-sonnet-4.6" }, { provider: "unknown-provider" }])("preserves saved native $provider configuration with the experimental gate off", async adapterConfig => {
|
||||
mockInstanceSettingsApi.getExperimental.mockResolvedValue({ enableNativeRunner: false });
|
||||
const result = await renderForm([], { adapterType: "paperclip_runner", adapterConfig }, { showAdapterTypeField: true });
|
||||
roots.push(result.root);
|
||||
|
||||
@@ -1901,7 +1901,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) {
|
||||
defaultRunner={runnerAvailability?.defaultRunner}
|
||||
supportedRunners={runnerAvailability?.supportedRunners}
|
||||
onChange={next => isCreate ? set!({ runner: next }) : setOverlay(prev => ({ ...prev, runner: next }))} />}
|
||||
{isLocal && (<> {/*
|
||||
{isLocal && fieldsAdapterType !== "paperclip_runner" && (<> {/*
|
||||
The command names a binary on the execution host, so the
|
||||
managed-sandbox-only policy hides it: the platform-managed image
|
||||
owns the binary. Hiding is presentation only. A stored
|
||||
|
||||
Reference in new issue
Block a user