| 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: add lifecycle hook runtime
Co-authored-by: Cursor <cursoragent@cursor.com>
| 25 天前 |
| feat(plugins): support standalone SKILL.md directory discovery and loading
Add discoverSkillPaths() and loadSkillFromPath() to enable loading
standalone skill directories (containing SKILL.md without plugin.json)
as pseudo-plugins, mirroring Claude Code's ~/.claude/skills/{name}/
convention. PluginRuntime now discovers and loads skills in parallel
alongside traditional plugins.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 20 天前 |
| feat(deferred-features): wave 2 — B1 elicitation, B2 web_fetch, B3 MCP instructions
Wave 2 of the deferred-feature implementation guide:
- B1 elicitation + ask_user_question:
* New PolitDeckElicitationChannel protocol with InMemoryElicitationChannel
* validateHtmlPreview port (legacy parity — fragments, no <script>/<style>)
* Rebuilt ask_user_question tool with shouldDefer:true, full schema parity
(1-4 questions, 2-4 options, uniqueness checks, header/option size limits,
HTML preview validation), and elicitation-channel-driven user consent
* Tool runtime context now exposes optional elicitation channel
* 9 dedicated tests + skeleton test updated
- B2 web_fetch full version:
* Modular layout: web/{preapprovedHosts,urlValidation,urlContentCache,
urlFetcher,secondaryPrompt}.ts
* Behaviour parity for W1-W14 from §5.2: 2000-char URL limit, validation
(no creds, multi-label hosts), HTTP→HTTPS upgrade, 10 MB content cap,
60s timeout, 10 redirect hops, ±www permitted-redirect, hand-rolled
LRU cache with 15min TTL / 50 MB ceiling, turndown HTML→Markdown,
100 KB markdown cap, 167-entry preapproved-host list, secondary model
call via context.model
* Tool now requires both url and prompt; opt-in via createBuiltinRegistry
* 16 dedicated tests covering all 13 behaviours
* Adds turndown dependency
- B3 MCP instructions read-only injection:
* truncateMcpInstructionString helper (2048-char cap, parity with legacy)
* PluginRuntime.getAllMcpInstructions aggregator: reads static instructions
from manifest.mcpServers[*].instructions, deduplicates (first plugin
wins), sorts by serverName for prompt-cache stability
* PromptAssembler renders <mcp-instructions><server name="…">…</server>
block, drops empty entries, omits the entire block when nothing to say
* 8 PluginRuntime tests + 3 PromptAssembler tests
Test status: 383 tests, 379 pass, 4 pre-existing skips, 0 fail.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |