mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-27 11:20:42 +01:00
## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - Adapter names are part of the board-facing agent setup and management experience. > - The product now treats adapters as harnesses, while execution environments are modeled separately. > - Several built-in adapter labels still carried legacy local wording from the older harness-by-environment model. > - That wording makes the UI noisier and implies a distinction users no longer need to reason about. > - This pull request normalizes adapter display labels while keeping persisted adapter type identifiers unchanged. > - The benefit is clearer adapter selection and management copy without a database migration. ## Linked Issues or Issue Description No public GitHub issue was found for this exact cleanup. Related public PRs: - Supersedes #8910, an earlier branch for the same cleanup that did not include the later docs/gateway/Cursor alignment. - Refs #8819, which is related display-registry work for external multi-segment adapter labels, but not a duplicate of this built-in label cleanup. Feature request details: - Subsystem affected: Cross-cutting (`ui/`, `packages/adapters`, and docs). - Problem or motivation: user-facing adapter names include legacy local qualifiers even though adapters map to harnesses and environments are first-class elsewhere. - Proposed solution: remove the legacy local wording from built-in display labels, keep machine-readable adapter type ids unchanged, and keep gateway disambiguation where it is useful. - Alternatives considered: changing persisted adapter type ids was ruled out because it would create migration and compatibility risk; one-off UI replacements were ruled out because the display registry is already the correct central label boundary. - Roadmap alignment: this is small adapter UX polish, not a new roadmap-level core feature. ## What Changed - Updated the adapter display registry so known adapter labels are final and no built-in local adapter renders a legacy local suffix. - Preserved clean derived labels for unknown plugin local types while keeping gateway disambiguation for unknown gateway types. - Updated `AdapterManager` to prefer registry labels when the server reports raw adapter type ids for built-ins. - Removed legacy local wording from built-in adapter metadata labels in UI and adapter packages. - Aligned Cursor adapter metadata with the central display registry label. - Updated adapter docs and Storybook fixtures to match the new display names. - Added focused registry coverage for built-in labels and unknown plugin suffix behavior. ## Verification - `pnpm check:tokens` - `git diff --check origin/master...fix/adapter-display-labels` - Patch-addition scan for added secrets, private paths, and internal links: no matches. - GitHub duplicate search for open adapter-label/local-suffix issues and PRs; #8910 was identified as the older superseded public PR. - `pnpm exec vitest run ui/src/adapters/adapter-display-registry.test.ts` - `pnpm --filter @paperclipai/ui typecheck` - Stale-label scan found no remaining user-facing display-label suffixes; remaining local wording is operational/test terminology such as adapter ids, docs about running locally, and test descriptions. ## Risks Low risk. The change is display-label and documentation focused, and adapter type ids remain unchanged. The main risk is ambiguous gateway naming, mitigated by keeping explicit gateway labels where variants need disambiguation. ## Model Used OpenAI GPT-5 via Codex, tool-enabled coding agent in a local repository workspace. Context window size is not exposed by this environment. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] All Paperclip CI gates are green - [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge Co-authored-by: Paperclip <noreply@paperclip.ing>
109 lines
4.0 KiB
TypeScript
109 lines
4.0 KiB
TypeScript
import type { AdapterModelProfileDefinition } from "@paperclipai/adapter-utils";
|
|
|
|
export const type = "cursor";
|
|
export const label = "Cursor";
|
|
|
|
// Cursor CLI is not distributed as an npm package — the official install
|
|
// path is the upstream installer script at cursor.com/install. Other adapters
|
|
// in this repo prefer `npm install -g <pkg>` which is content-addressed by the
|
|
// registry; cursor must use `curl | bash` until upstream publishes a registry
|
|
// artifact. Pinning a commit/version here would require shipping our own
|
|
// mirror of the installer; revisit if Cursor adds an npm/release-asset
|
|
// equivalent.
|
|
export const SANDBOX_INSTALL_COMMAND = "curl https://cursor.com/install -fsS | bash";
|
|
|
|
export const DEFAULT_CURSOR_LOCAL_MODEL = "auto";
|
|
|
|
const CURSOR_FALLBACK_MODEL_IDS = [
|
|
"auto",
|
|
"composer-1.5",
|
|
"composer-1",
|
|
"gpt-5.3-codex-low",
|
|
"gpt-5.3-codex-low-fast",
|
|
"gpt-5.3-codex",
|
|
"gpt-5.3-codex-fast",
|
|
"gpt-5.3-codex-high",
|
|
"gpt-5.3-codex-high-fast",
|
|
"gpt-5.3-codex-xhigh",
|
|
"gpt-5.3-codex-xhigh-fast",
|
|
"gpt-5.3-codex-spark-preview",
|
|
"gpt-5.2",
|
|
"gpt-5.2-codex-low",
|
|
"gpt-5.2-codex-low-fast",
|
|
"gpt-5.2-codex",
|
|
"gpt-5.2-codex-fast",
|
|
"gpt-5.2-codex-high",
|
|
"gpt-5.2-codex-high-fast",
|
|
"gpt-5.2-codex-xhigh",
|
|
"gpt-5.2-codex-xhigh-fast",
|
|
"gpt-5.1-codex-max",
|
|
"gpt-5.1-codex-max-high",
|
|
"gpt-5.2-high",
|
|
"gpt-5.1-high",
|
|
"gpt-5.1-codex-mini",
|
|
"opus-4.6-thinking",
|
|
"opus-4.6",
|
|
"opus-4.5",
|
|
"opus-4.5-thinking",
|
|
"sonnet-4.6",
|
|
"sonnet-4.6-thinking",
|
|
"sonnet-4.5",
|
|
"sonnet-4.5-thinking",
|
|
"gemini-3.1-pro",
|
|
"gemini-3-pro",
|
|
"gemini-3-flash",
|
|
"grok",
|
|
"kimi-k2.5",
|
|
];
|
|
|
|
export const models = CURSOR_FALLBACK_MODEL_IDS.map((id) => ({ id, label: id }));
|
|
|
|
export const modelProfiles: AdapterModelProfileDefinition[] = [
|
|
{
|
|
key: "cheap",
|
|
label: "Cheap",
|
|
description: "Use Cursor's known Codex mini model as the budget lane instead of assuming auto is cheap.",
|
|
adapterConfig: {
|
|
model: "gpt-5.1-codex-mini",
|
|
},
|
|
source: "adapter_default",
|
|
},
|
|
];
|
|
|
|
export const agentConfigurationDoc = `# cursor agent configuration
|
|
|
|
Adapter: cursor
|
|
|
|
Use when:
|
|
- You want Paperclip to run Cursor Agent CLI locally as the agent runtime
|
|
- You want Cursor chat session resume across heartbeats via --resume
|
|
- You want structured stream output in run logs via --output-format stream-json
|
|
|
|
Don't use when:
|
|
- You need webhook-style external invocation (use openclaw_gateway or http)
|
|
- You only need one-shot shell commands (use process)
|
|
- Cursor Agent CLI is not installed on the machine
|
|
|
|
Core fields:
|
|
- cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)
|
|
- instructionsFilePath (string, optional): absolute path to a markdown instructions file prepended to the run prompt
|
|
- promptTemplate (string, optional): run prompt template
|
|
- model (string, optional): Cursor model id (for example auto or gpt-5.3-codex)
|
|
- mode (string, optional): Cursor execution mode passed as --mode (plan|ask). Leave unset for normal autonomous runs.
|
|
- command (string, optional): defaults to "agent"
|
|
- extraArgs (string[], optional): additional CLI args
|
|
- env (object, optional): KEY=VALUE environment variables
|
|
|
|
Operational fields:
|
|
- timeoutSec (number, optional): run timeout in seconds
|
|
- graceSec (number, optional): SIGTERM grace period in seconds
|
|
|
|
Notes:
|
|
- Runs are executed with: agent -p --output-format stream-json ...
|
|
- Prompts are piped to Cursor via stdin.
|
|
- Sessions are resumed with --resume when stored session cwd matches current cwd.
|
|
- Paperclip auto-injects local skills into "~/.cursor/skills" when missing, so Cursor can discover "$paperclip" and related skills on local runs.
|
|
- Paperclip auto-adds --yolo unless one of --trust/--yolo/-f is already present in extraArgs.
|
|
- Remote sandbox runs prepend "~/.cursor/bin" and "~/.local/bin" to PATH and prefer the installed absolute entrypoint from one of those directories when the default Cursor command is requested, so installer-managed sandbox leases do not need hardcoded command paths.
|
|
`;
|