| feat(wave-1): A1-A5 deferred features — worktree lookup, tokenizer, structured output, cached/snip compaction
Wave 1 of the deferred-feature implementation guide. All 5 A-tier features
landed with behavior alignment to third-party/claude-code-main per the
checklists in docs/politdeck-deferred-feature-implementation-guide.md.
A1 worktree lookup
- src/session/worktree/{findGitRoot,resolveCanonicalRoot,findCanonicalProjectRoot,LRUMap}
- filesystem-only async resolution (no git subprocess), NFC-normalized,
LRU(50) memoization, full security validations (layout + back-link +
realpath compare), realpath-canonicalized result so /tmp and /private/tmp
fold consistently on macOS.
- createProjectIdAsync / getPolitProjectChatDirAsync entry points.
A2 real tokenizer fallback
- Math.round (not ceil) parity with legacy roughTokenCountEstimation.
- bytesPerTokenForExt + estimateForFileType (JSON-like = 2, others = 4).
- estimateForBlock covers all 8 PolitDeck block types incl. PolitDeck-only
tool_result_reference; thinking ignores signature; image/pdf/audio use
IMAGE_MAX_TOKEN_SIZE = 2000.
- estimateForMessage adds perMessageOverhead, estimateForMessagesWithPadding
multiplies by 4/3 (ceil) for warning gates.
A3 structured_output (provider-native)
- CanonicalOutputSchema on CanonicalModelRequest.
- OpenAI: response_format={type:"json_schema", strict:true} by default.
- Anthropic: forced hidden __output__ tool with tool_choice=tool.
- extractStructuredOutput recognizes both, plus invalid_json,
multiple_payloads, schema_mismatch via optional validator.
A4 cached microcompact (Anthropic-only)
- CachedMicroCompactionEngine with COMPACTABLE_TOOL_NAMES set.
- Disabled by default; non-Anthropic / subagent → no-op.
- Computes message indices for cache_control: ephemeral breakpoints; the
Anthropic request builder emits cache_control on the marked messages'
last content block. validateCacheHit reads cache_read_input_tokens.
A5 snip compact
- SnipEngine.snip(messages) with keepHeadTurns=2 / keepTailTurns=4 default.
- Tool-pair integrity (strip dangling tool_call / tool_result across the
snip boundary). Boundary marker via createSnipBoundary.
- projectSnippedView for one-shot use, isSnipBoundaryMessage for replay.
Tests: 348 total, 344 pass, 4 pre-existing skips.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| 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 天前 |
| feat(wave-1): A1-A5 deferred features — worktree lookup, tokenizer, structured output, cached/snip compaction
Wave 1 of the deferred-feature implementation guide. All 5 A-tier features
landed with behavior alignment to third-party/claude-code-main per the
checklists in docs/politdeck-deferred-feature-implementation-guide.md.
A1 worktree lookup
- src/session/worktree/{findGitRoot,resolveCanonicalRoot,findCanonicalProjectRoot,LRUMap}
- filesystem-only async resolution (no git subprocess), NFC-normalized,
LRU(50) memoization, full security validations (layout + back-link +
realpath compare), realpath-canonicalized result so /tmp and /private/tmp
fold consistently on macOS.
- createProjectIdAsync / getPolitProjectChatDirAsync entry points.
A2 real tokenizer fallback
- Math.round (not ceil) parity with legacy roughTokenCountEstimation.
- bytesPerTokenForExt + estimateForFileType (JSON-like = 2, others = 4).
- estimateForBlock covers all 8 PolitDeck block types incl. PolitDeck-only
tool_result_reference; thinking ignores signature; image/pdf/audio use
IMAGE_MAX_TOKEN_SIZE = 2000.
- estimateForMessage adds perMessageOverhead, estimateForMessagesWithPadding
multiplies by 4/3 (ceil) for warning gates.
A3 structured_output (provider-native)
- CanonicalOutputSchema on CanonicalModelRequest.
- OpenAI: response_format={type:"json_schema", strict:true} by default.
- Anthropic: forced hidden __output__ tool with tool_choice=tool.
- extractStructuredOutput recognizes both, plus invalid_json,
multiple_payloads, schema_mismatch via optional validator.
A4 cached microcompact (Anthropic-only)
- CachedMicroCompactionEngine with COMPACTABLE_TOOL_NAMES set.
- Disabled by default; non-Anthropic / subagent → no-op.
- Computes message indices for cache_control: ephemeral breakpoints; the
Anthropic request builder emits cache_control on the marked messages'
last content block. validateCacheHit reads cache_read_input_tokens.
A5 snip compact
- SnipEngine.snip(messages) with keepHeadTurns=2 / keepTailTurns=4 default.
- Tool-pair integrity (strip dangling tool_call / tool_result across the
snip boundary). Boundary marker via createSnipBoundary.
- projectSnippedView for one-shot use, isSnipBoundaryMessage for replay.
Tests: 348 total, 344 pass, 4 pre-existing skips.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| 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 天前 |