| refactor: rename Polit/PolitDeck to Pilot/PilotDeck across entire codebase
Automated global rename covering all case variants:
- PolitDeck → PilotDeck, politdeck → pilotdeck, POLITDECK → PILOTDECK
- Polit → Pilot, polit → pilot, POLIT → PILOT, politDeck → pilotDeck
Includes:
- 648 content replacements across 200+ source files
- 24 file renames + 3 directory renames (src/polit→pilot, tests/polit→pilot, docs/polit-config→pilot-config)
- package.json name, bin, env vars updated
- package-lock.json regenerated
- "Politely" in server-manager.ts preserved via placeholder mechanism
- All 587 unit tests pass, tsc --noEmit clean
- E2E tests verified against real OpenRouter API (model, tool-use, context, lifecycle hooks)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| feat: improve attachment and tool result handling
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| chore: scrub stale claudecodeui/claude-code-main residuals
Remove legacy brand leftovers from the pre-PilotDeck era so the repo
stops mentioning unrelated upstream projects and stops carrying parity
fixtures that point at a third-party tree no longer present.
- Drop src/context/memory/edgeclaw-memory-core/README.md (old CloudCLI
install guide that referenced a claude-code-main/ sibling dir).
- Delete tests + fixtures whose only purpose was to assert byte-for-byte
parity against third-party/claude-code-main/** (legacy-behavior tool
scenarios, dual-parity legacy context scenarios, the parity test
helper, and the six parity-* tests that consumed them).
- Rewrite stale code comments in apps/desktop, src/context/compaction,
src/agent/sub, src/context/memory/.../app.css and PermissionsSettingsTab
to drop dangling third-party/claude-code-main/... mirror references
and rename claudecodeui -> PilotDeck ui/server / ui shell.
- Repoint the auth-screen "PilotDeck is open source" footer link from
github.com/siteboon/claudecodeui to github.com/OpenBMB/PilotDeck.
- Align memory source tag written by ui/server with the one used by
the in-process src/** provider (claudecodeui -> pilotdeck) so the
memory_turns SQLite column is consistent across both write paths.
- Update VAPID web-push contact mailto domain (claudecodeui.local ->
pilotdeck.local).
- Drop two stale .gitignore entries for bundle tarballs that the current
build pipeline never produces.
CCR (/api/ccr/* routes, CCRConfig types, <ccr-subagent-model> tag,
CCR_SENTINEL) is intentionally untouched — those are kept for frontend
back-compat. Comparison mentions of "Claude Code" / "Claude Sonnet 4.6"
in README marketing copy are also intentional and untouched.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| refactor: rename Polit/PolitDeck to Pilot/PilotDeck across entire codebase
Automated global rename covering all case variants:
- PolitDeck → PilotDeck, politdeck → pilotdeck, POLITDECK → PILOTDECK
- Polit → Pilot, polit → pilot, POLIT → PILOT, politDeck → pilotDeck
Includes:
- 648 content replacements across 200+ source files
- 24 file renames + 3 directory renames (src/polit→pilot, tests/polit→pilot, docs/polit-config→pilot-config)
- package.json name, bin, env vars updated
- package-lock.json regenerated
- "Politely" in server-manager.ts preserved via placeholder mechanism
- All 587 unit tests pass, tsc --noEmit clean
- E2E tests verified against real OpenRouter API (model, tool-use, context, lifecycle hooks)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| feat(context): land Phase 1.5–6 context module + dual-parity probes
Implements all six phases of the context module rewrite per
docs/politdeck-context-refactor-development-guide.md:
- Phase 1.5: CanonicalModelErrorCode (PTL/RTL/MOR), case-insensitive
PTL classification on both Anthropic and OpenAI protocols, anthropic
signature_delta → CanonicalThinkingBlock.signature, control_boundary
schema with compactMetadata + microcompactMetadata, transcript
recordControlBoundary + replay slicing, ProjectSessionStorage
toolResultsDir.
- Phase 2: ContextRuntime full protocol, 5-section PromptAssembler
(default / user / system / custom / append), MessageProjector with
tool-call/result pairing repair + sliding window, DefaultContextRuntime.
- Phase 3: ToolResultBudget replaces oversized tool_results with the
new CanonicalToolResultReferenceBlock and persists originals to disk
(write-exclusive flag).
- Phase 4: InputProcessor three-layer slash-command dispatch driven by
ExtensionResolver, AttachmentResolver for text / base64 image / pdf
size estimation (intentional difference vs poppler/sharp).
- Phase 5: TokenBudgetManager (char/4 + multimedia constant),
CompactionEngine with legacy buildPostCompactMessages ordering
(B→S→K→A→H), AutoCompactionPolicy thresholds, MicroCompactionEngine
time-based path, ContextOverflowRecovery (50% / 25% / give_up).
- Phase 6: PluginRuntimeExtensionResolver bridging
PolitDeckLoadedPlugin commands/skills, MemoryAttachmentBuilder
feeding MemoryResolver output into the prompt.
Adds a dual-parity test suite (tests/context/parity +
tests/fixtures/context/dual-parity) covering rough_token estimation,
findLastCompactBoundaryIndex, buildPostCompactMessages ordering,
truncateHead keepRatio, and PTL classification — each scenario cites
its legacy source path so updates can be retraced.
New module 245/245 unit tests pass; OpenRouter Kimi K2.6 e2e for both
agent tool-use and DefaultContextRuntime prompt flow are green.
Also bundles the previously uncommitted TUI e2e tracing helpers
(scripts/tui-e2e-record.tsx Proxy wrapWithTrace, ActivityLine spinner)
that supported the context refactor debugging.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 25 天前 |
| chore(branding): complete cleanup of legacy CloudCLI/Claude Code references
- CLOUDCLI_DISABLE_LOCAL_AUTH → PILOTDECK_DISABLE_LOCAL_AUTH
- CLOUDCLI_CRON_DAEMON_* → PILOTDECK_CRON_DAEMON_*
- CLOUDCLI_GITHUB_STARS → PILOTDECK_GITHUB_STARS
- ~/.claude-code-ui/plugins/ → ~/.pilotdeck/plugins/
- claudecodeui-server → pilotdeck-server
- edgeClawConfig i18n key → pilotDeckConfig (248 refs in TSX + settings.json)
- claude-code-main source provenance comments → generic descriptions
- CloudCLI user-facing strings → PilotDeck
- DEFAULT_PROVIDER_FALLBACK "edgeclaw" → "pilotdeck"
- .claude/ config home → .pilotdeck/ in cron daemon services
Co-authored-by: Cursor <cursoragent@cursor.com>
| 9 天前 |
| fix: commit edgeclaw-memory-core built lib/, fix Dockerfile
- Remove lib/ from .gitignore so compiled output ships with the repo
- Build and commit edgeclaw-memory-core/lib/ so deployment works out of the box
- Add auto-build step to root prebuild script
- Fix Dockerfile: use npm instead of pnpm, add memory-core build step
Co-authored-by: Cursor <cursoragent@cursor.com>
| 7 天前 |
| fix(context): handle tool_result_reference in pairing, projection, and subagent filtering
Treat tool_result_reference as a valid tool result in collectToolResultIds,
stripUnpairedToolResults, repairToolResultPairing, isToolResultOnly, and
filterIncompleteToolCalls so externalized results are not orphaned.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 20 天前 |
| fix(plan): let agents manage plan files
Allow plan mode agents to create and choose markdown plan files under .pilotdeck/plans, and require exit_plan_mode to submit an explicit plan_file_path.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 14 天前 |
| chore(branding): complete cleanup of legacy CloudCLI/Claude Code references
- CLOUDCLI_DISABLE_LOCAL_AUTH → PILOTDECK_DISABLE_LOCAL_AUTH
- CLOUDCLI_CRON_DAEMON_* → PILOTDECK_CRON_DAEMON_*
- CLOUDCLI_GITHUB_STARS → PILOTDECK_GITHUB_STARS
- ~/.claude-code-ui/plugins/ → ~/.pilotdeck/plugins/
- claudecodeui-server → pilotdeck-server
- edgeClawConfig i18n key → pilotDeckConfig (248 refs in TSX + settings.json)
- claude-code-main source provenance comments → generic descriptions
- CloudCLI user-facing strings → PilotDeck
- DEFAULT_PROVIDER_FALLBACK "edgeclaw" → "pilotdeck"
- .claude/ config home → .pilotdeck/ in cron daemon services
Co-authored-by: Cursor <cursoragent@cursor.com>
| 9 天前 |
| feat(image): add truncated image validation and multimodal error recovery
- readFile: validate image integrity via EOI marker / sharp decode, attempt re-encode on corruption
- model errors: detect 'failed to apply processor' pattern, mark recoverableViaImageStrip
- context recovery: new strip_images_and_retry decision path
- agent loop: handle strip_images_and_retry by replacing image blocks with text placeholders
- fallback chain: exclude image-strip-recoverable errors from model fallback
Co-authored-by: Cursor <cursoragent@cursor.com>
| 12 天前 |
| fix(agent): post-routing compaction for smaller context-window models
When tokenSaver routes from a large-window model (e.g. sonnet 200k) to
a smaller one (e.g. qwen 32k), compaction still evaluated against the
original model's window — never triggering for the routed model's
actual limit. Split router.stream() into decide()+execute() in
AgentLoop and insert a second tryAutoCompact pass using the routed
model's maxContextTokens when it is smaller than the agent's default.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| fix(agent): post-routing compaction for smaller context-window models
When tokenSaver routes from a large-window model (e.g. sonnet 200k) to
a smaller one (e.g. qwen 32k), compaction still evaluated against the
original model's window — never triggering for the routed model's
actual limit. Split router.stream() into decide()+execute() in
AgentLoop and insert a second tryAutoCompact pass using the routed
model's maxContextTokens when it is smaller than the agent's default.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| fix: repair tool_call/tool_result pairing to prevent OpenAI API rejection
- MessageProjector now injects placeholder tool_results for unmatched
tool_calls and strips orphaned tool_results
- maxMessages truncation respects tool-pair boundaries
- NullContextRuntime uses tool-pair-safe slicing
- 9 new tests, 22/22 green
Co-authored-by: Cursor <cursoragent@cursor.com>
| 20 天前 |
| fix(context): prevent multimodal content from accumulating in context
Separate PDF binary data from tool_result into supplementalMessages,
enforce a 10-page limit for PDFs without explicit pages parameter,
remove image duplication in projectToolResults, add COMPACTABLE_TOOLS
filtering to MicroCompactionEngine with proper multimodal size
estimation, and strip multimedia before full compaction summarization.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 10 天前 |