| fix(security): Windows permission compatibility
- Add Windows dangerous command deny patterns: Remove-Item -Recurse,
del /s, rd /s, Format-Volume, iex+iwr, Start-Process RunAs,
Set-ExecutionPolicy, Stop-Process -Force
- Add Windows safe-read patterns: Get-ChildItem, Get-Content, dir, type, etc.
- Block Windows device paths: CON, NUL, COM, LPT, PhysicalDrive, \\.\, \\?\
- Platform-aware quick-block shortcuts in permissions settings UI
- SnapshotCopyProvider: use PowerShell for directory size on Windows
Co-authored-by: tp <tp@t14-windows>
Co-authored-by: Cursor <cursoragent@cursor.com>
| 9 天前 |
| feat(tool): align edit_file/read_file with robust edit design
- Partial reads now register write snapshots, allowing edits after
ranged read_file calls instead of requiring a full read
- Layered stale check: full-read snapshots fall back to content hash
comparison; partial-read snapshots reject on mtime change directly
- Persist writeSnapshots and readFileState across session recreation
via AgentLoop.snapshotFileState → TurnRunner → AgentSession →
createLocalGateway.recreateSession seedState pipeline
- Two-level old_string matching: exact match first, then curly-quote
normalized match via new editNormalization.ts module
- Pre-process new_string: strip trailing whitespace (except markdown)
- Improved error messages: echo old_string on not-found, show match
count on ambiguous matches
- Tool descriptions now explicitly state read-before-write constraint
and character-exact old_string requirement
- Updated and added tests covering all new behavior (30 tests pass)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| 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 天前 |
| 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(tools): align ask_user_question model schema copy
Co-authored-by: Cursor <cursoragent@cursor.com>
| 16 天前 |
| fix(tools): make bash command required and remove empty-command fallback
Change the command parameter from optional to required in the BashInput
type. Remove the empty-command soft-return since the schema now rejects
calls without a command at validation time.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 16 天前 |
| feat(tool): align edit_file/read_file with robust edit design
- Partial reads now register write snapshots, allowing edits after
ranged read_file calls instead of requiring a full read
- Layered stale check: full-read snapshots fall back to content hash
comparison; partial-read snapshots reject on mtime change directly
- Persist writeSnapshots and readFileState across session recreation
via AgentLoop.snapshotFileState → TurnRunner → AgentSession →
createLocalGateway.recreateSession seedState pipeline
- Two-level old_string matching: exact match first, then curly-quote
normalized match via new editNormalization.ts module
- Pre-process new_string: strip trailing whitespace (except markdown)
- Improved error messages: echo old_string on not-found, show match
count on ambiguous matches
- Tool descriptions now explicitly state read-before-write constraint
and character-exact old_string requirement
- Updated and added tests covering all new behavior (30 tests pass)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(tool): align edit_file/read_file with robust edit design
- Partial reads now register write snapshots, allowing edits after
ranged read_file calls instead of requiring a full read
- Layered stale check: full-read snapshots fall back to content hash
comparison; partial-read snapshots reject on mtime change directly
- Persist writeSnapshots and readFileState across session recreation
via AgentLoop.snapshotFileState → TurnRunner → AgentSession →
createLocalGateway.recreateSession seedState pipeline
- Two-level old_string matching: exact match first, then curly-quote
normalized match via new editNormalization.ts module
- Pre-process new_string: strip trailing whitespace (except markdown)
- Improved error messages: echo old_string on not-found, show match
count on ambiguous matches
- Tool descriptions now explicitly state read-before-write constraint
and character-exact old_string requirement
- Updated and added tests covering all new behavior (30 tests pass)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| fix(tools): align glob copy with runtime behavior
Bring the glob tool description closer to the legacy style while keeping the wording accurate for PilotDeck's workspace-scoped and stable-sorted behavior.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| feat(tools): align grep with ripgrep behavior
Wrap grep with ripgrep, expand the tool schema, and make pagination consistent across content, file, and count modes so agent search behaves closer to Claude Code.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| feat(tool): add property-level descriptions to all builtin tool schemas
Add description fields to every parameter in the inputSchema of bash,
edit_file, glob, grep, mcp_resources, plan_mode, read_file,
structured_output, task_create/list/output/stop, and write_file.
This helps weaker models (e.g. DeepSeek) understand parameter semantics
directly from the JSON Schema, reducing invalid_tool_input errors and
improving first-attempt accuracy.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 17 天前 |
| 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 天前 |
| 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 天前 |
| feat(plan): pass planTitle/planSummary as structured data from backend to plan card
Extract plan title and summary on the backend (planMode.ts) and thread
them through the gateway event, bridge, and useChatMessages into the
PlanApprovedCard component, replacing the previous approach of parsing
truncated resultPreview text on the frontend.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 7 天前 |
| feat(tool): align edit_file/read_file with robust edit design
- Partial reads now register write snapshots, allowing edits after
ranged read_file calls instead of requiring a full read
- Layered stale check: full-read snapshots fall back to content hash
comparison; partial-read snapshots reject on mtime change directly
- Persist writeSnapshots and readFileState across session recreation
via AgentLoop.snapshotFileState → TurnRunner → AgentSession →
createLocalGateway.recreateSession seedState pipeline
- Two-level old_string matching: exact match first, then curly-quote
normalized match via new editNormalization.ts module
- Pre-process new_string: strip trailing whitespace (except markdown)
- Improved error messages: echo old_string on not-found, show match
count on ambiguous matches
- Tool descriptions now explicitly state read-before-write constraint
and character-exact old_string requirement
- Updated and added tests covering all new behavior (30 tests pass)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(skills): add read_skill builtin tool for on-demand skill loading
Add read_skill tool that loads SKILL.md content by name, register it
as an opt-in option in createBuiltinRegistry, and update PromptAssembler
to instruct the model to use the tool for skills listed in the prompt.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 20 天前 |
| fix(tool): add missing type field to structured_output value schema
Some model providers reject tool schemas when a property lacks an
explicit type. Add a union type covering all JSON-serializable
kinds so the tool definition is accepted universally.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 10 天前 |
| feat(tool): add property-level descriptions to all builtin tool schemas
Add description fields to every parameter in the inputSchema of bash,
edit_file, glob, grep, mcp_resources, plan_mode, read_file,
structured_output, task_create/list/output/stop, and write_file.
This helps weaker models (e.g. DeepSeek) understand parameter semantics
directly from the JSON Schema, reducing invalid_tool_input errors and
improving first-attempt accuracy.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 17 天前 |
| feat(todo): add TodoWrite plan execution flow
Require plan-driven sessions to initialize and refresh TodoWrite checklists before side-effecting tools run, and render markdown todo updates in the web UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| fix(tools): align web tool model descriptions
Clarify web_fetch's model-visible contract so it matches the fallback-to-raw-markdown path, and expand web_search's description to reflect PilotDeck's real SerpAPI/Tavily behavior without introducing Claude-only fields.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 16 天前 |
| feat(tools): add configurable web search providers
Add GLM, Tavily, and custom provider support for the web_search tool so deployments can choose a single search backend from settings.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 15 天前 |
| feat(tool): align edit_file/read_file with robust edit design
- Partial reads now register write snapshots, allowing edits after
ranged read_file calls instead of requiring a full read
- Layered stale check: full-read snapshots fall back to content hash
comparison; partial-read snapshots reject on mtime change directly
- Persist writeSnapshots and readFileState across session recreation
via AgentLoop.snapshotFileState → TurnRunner → AgentSession →
createLocalGateway.recreateSession seedState pipeline
- Two-level old_string matching: exact match first, then curly-quote
normalized match via new editNormalization.ts module
- Pre-process new_string: strip trailing whitespace (except markdown)
- Improved error messages: echo old_string on not-found, show match
count on ambiguous matches
- Tool descriptions now explicitly state read-before-write constraint
and character-exact old_string requirement
- Updated and added tests covering all new behavior (30 tests pass)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |