文件最后提交记录最后更新时间
fix: cross-platform Windows compatibility for core runtime - paths.ts: normalize Windows backslashes and strip drive letters in project IDs - createBackup/restoreBackup: guard fs.chmod on Windows (no Unix permissions) - ProjectSessionStorage: sanitize illegal Windows filename characters (:, <, >, ", |, ?, *) - JsonlTranscriptWriter: use path.join for subagent paths instead of hardcoded / - BackgroundTaskRuntime: remove platform guard, let Windows use the same runtime - commandRunner: Windows-compatible process termination (taskkill vs SIGTERM) - listProjects: platform-aware project ID resolution - createLocalGateway: sanitize session keys for browser screenshot paths - pilotPaths.js: sync createLegacyProjectId with paths.ts normalization - package.json: cross-platform build script using Node.js fs module Co-authored-by: Cursor <cursoragent@cursor.com> 9 天前
feat(session): close 6 deferred gates — parent chain, compact boundary, metadata, listing/search Closes session deferred gates per docs/politdeck-session-refactor-development-guide.md §11: 1. session-parent-chain — new TranscriptChain.ts buildConversationChain() builds a DAG from entryId/parentEntryId links and picks the longest root→leaf path. Falls back to sequence order for pre-chain transcripts. Orphans (missing parentEntryId) are appended at the end of the chain (partial parity with legacy recoverOrphanedParallelToolResults). 2. session-compact-boundary — already resolved in Phase 1.5 (control_boundary schema + findLastCompactBoundaryIndex + TranscriptReplay slicing). Doc status updated from deferred to resolved. 3. session-metadata-store — SessionMetadataStore.restoreFromReplay() seeds the in-memory snapshot from replayed metadata without writing to the transcript. reappendTail() re-appends the full metadata snapshot at the transcript tail so readSessionLite() (head/tail reader) can see the latest title/tag without scanning the whole file. resumeAgentSession() now returns metadata and uses restoreFromReplay. 4. session-listing + session-lite-reader — listAllSessions({ politHome }) scans all projects under {politHome}/projects/*/chats/*.jsonl. searchSessionsByTitle({ projectRoot, politHome, query }) does case-insensitive substring match against customTitle / aiTitle / firstPrompt. Both return results sorted by lastModified descending. Tests: - tests/session/transcript/chain.test.ts (5 cases): linear chain, longest branch selection, orphan recovery, no-entryId fallback, empty input. - tests/session/metadata/metadata-store.test.ts (4 cases): restoreFromReplay, reappendTail writes, empty no-op, restore+save merge. - tests/session/storage/list-all-sessions.test.ts (6 cases): cross-project listing, limit/offset pagination, missing dir, title search match, firstPrompt fallback match, case-insensitive search. Docs: - §3 adds implementation progress table (6 features resolved). - §9 Feature Matrix: 5 rows upgraded from deferred/partial to compare. - §11 Deferred Register: 6 gates marked resolved with resolution notes. Regression: 301 / 297 pass / 4 skipped (real-API e2e) / 0 fail. Co-authored-by: Cursor <cursoragent@cursor.com> 24 天前
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: cross-platform Windows compatibility for core runtime - paths.ts: normalize Windows backslashes and strip drive letters in project IDs - createBackup/restoreBackup: guard fs.chmod on Windows (no Unix permissions) - ProjectSessionStorage: sanitize illegal Windows filename characters (:, <, >, ", |, ?, *) - JsonlTranscriptWriter: use path.join for subagent paths instead of hardcoded / - BackgroundTaskRuntime: remove platform guard, let Windows use the same runtime - commandRunner: Windows-compatible process termination (taskkill vs SIGTERM) - listProjects: platform-aware project ID resolution - createLocalGateway: sanitize session keys for browser screenshot paths - pilotPaths.js: sync createLegacyProjectId with paths.ts normalization - package.json: cross-platform build script using Node.js fs module Co-authored-by: Cursor <cursoragent@cursor.com> 9 天前
fix(model): deep-clone nested content in cloneMessages cloneMessages used spread to shallow-copy content blocks, leaving CanonicalToolResultBlock.content and CanonicalToolCallBlock.input as shared references between original and clone. Extract a shared clone utility that deep-copies these nested structures and replace three duplicate private implementations. 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 天前
feat(gateway): hot-reload extension changes without transcript replay Temporarily ignore project-local YAML so global config stays authoritative while cached sessions can pick up config and plugin or skill updates on the next turn without rereading transcripts. Co-authored-by: Cursor <cursoragent@cursor.com> 19 天前