| refactor(coding-agent): removed async model registry factory and migration warmup path
- Removed ModelRegistry.create and updated construction sites to use new ModelRegistry directly.
- Dropped the async ConfigFile migration warmup path and switched migration handling to the unified #ensureMigrated logic used by relocate and load flows.
- Adjusted model registry tests to instantiate ModelRegistry through the constructor.
| 1 天前 |
| fix(coding-agent,ai): file-lock race + render-utils sanitization + google named-tool routing
F1 (coding-agent): close the withFileLock mkdir-vs-writeLockInfo race that
let a losing contender wipe the winner's freshly-created lock directory.
Every lock now carries a per-process UUID token; releaseLock verifies the
token before fs.rm, and isLockStale no longer treats an info-less but
fresh dir (or a dir that vanished mid-check) as stale.
F4 (coding-agent): sanitize tabs and truncate oversized error strings in
formatErrorMessage so error renderings that embed file content
(apply_patch, hashline, etc.) cannot break terminal alignment or
overflow the line width.
F7 (ai): support named-tool routing on Google providers. Widens
GoogleSharedStreamOptions.toolChoice and GoogleGeminiCliOptions.toolChoice
to accept { mode: 'ANY'; allowedFunctionNames }. mapGoogleToolChoice
now converts ToolChoice { type: 'tool'|'function', name } to the wire
shape (mirroring mapAnthropicToolChoice). buildGoogleGenerateContentParams
and the gemini-cli request serializer honor the allow-list.
| 1 天前 |
| feat(coding-agent): migrated keybindings config to YAML with JSON migration
- Changed canonical config path from keybindings.json to keybindings.yml.
- Added automatic migration of legacy JSON to YAML on first load.
- Retained read support for keybindings.yaml without promoting it to canonical.
- Added tests for yml, yaml, and JSON migration scenarios.
| 1 天前 |
| Allow disabling MCP client timeouts
| 6 天前 |
| feat(mnemosyne): added session-scoped visibility, graph tools, and safety hardening
- Filtered recall, fact, vector, temporal, and polyphonic voices to session-owned or explicitly global memories.
- Implemented graph_query and graph_link MCP tool handlers via EpisodicGraph; wired annotations and graph into Mnemosyne's external-db path.
- Fixed restore to stage and integrity-check before replacing the live database, rolling back on failure.
- Deduped generateId with a per-process nonce to prevent batch duplicate-content collisions.
| 2 天前 |
| feat(memory): added Mnemosyne local SQLite memory backend
- Introduced @oh-my-pi/pi-mnemosyne workspace package with BeamMemory, recall/retain, FTS, and optional fastembed ONNX embeddings.
- Wired memory.backend = "mnemosyne" into the coding-agent settings schema and backend resolver.
- Added MnemosyneSessionState for per-session auto-recall on first turn and auto-retain after completed turns.
- Documented configuration, environment variables, and operational notes in docs/mnemosyne-memory-backend.md.
| 2 天前 |
| refactor(coding-agent): removed async model registry factory and migration warmup path
- Removed ModelRegistry.create and updated construction sites to use new ModelRegistry directly.
- Dropped the async ConfigFile migration warmup path and switched migration handling to the unified #ensureMigrated logic used by relocate and load flows.
- Adjusted model registry tests to instantiate ModelRegistry through the constructor.
| 1 天前 |
| refactor(coding-agent): replaced console.warn with logger.warn calls
- Migrated warning output from raw console.warn+chalk to the shared logger utility.
- Removed unused chalk import as a result.
| 15 天前 |
| feat(model-registry): added proxy discovery type for mixed Anthropic/OpenAI proxies
- Added discovery.type: proxy that hits GET /v1/models and routes each model via supported_endpoint_types (anthropic → /v1/messages, openai → /v1/chat/completions).
- Made provider-level api optional when discovery.type is proxy, since wire protocol is derived per-model.
- Increased discovery fetch timeout from 250ms to 10s to accommodate remote proxies.
- Documented proxy discovery configuration in docs/models.md.
| 2 天前 |
| refactor(coding-agent)!: removed href/hline helpers and fixed blank-line payload semantics
- Removed href, hrefr, and hline Handlebars helpers along with shared hashline anchor state; unused by any template.
- Changed blank lines between ops from silent separators to literal payload lines appended to the open op.
- Added overlapping-delete validation to reject before/after-block patch patterns.
- Simplified hashline prompt doc, removing template-helper examples and tightening rules.
| 5 天前 |
| refactor(natives): migrated native bindings to NAPI-RS with auto-generated types
- Migrated native bindings from TypeScript wrappers to NAPI-RS generated modules with auto-generated type definitions and runtime enums.
- Replaced chunk tree API with stateful ChunkState class supporting render, edit, and resolve operations with improved error handling.
- Converted callback signatures to error-first pattern (error, result) for shell, PTY, glob, and grep operations.
- Introduced type-safe enums for MacOSAppearance, GrepOutputMode, KeyEventType, ImageFormat, and AstMatchStrictness replacing string literals.
- Refactored chunk tree implementation with dedicated modules for edit, indent, resolve, and state management with comprehensive validation.
- Moved clipboard utilities from native bindings to coding-agent package with improved OSC 52 and Termux compatibility.
| 1 个月前 |
| refactor(shake): removed shake-summary mode and local-model compressor
- Dropped summarizeShakeRegions, the shake-summary prompt, and related types.
- Removed shake-summary compaction strategy and providers.shakeSummaryModel setting.
- Migrated existing shake-summary configs to plain shake on load.
- Simplified /shake to elide and images modes only.
| 1 天前 |
| refactor(shake): removed shake-summary mode and local-model compressor
- Dropped summarizeShakeRegions, the shake-summary prompt, and related types.
- Removed shake-summary compaction strategy and providers.shakeSummaryModel setting.
- Migrated existing shake-summary configs to plain shake on load.
- Simplified /shake to elide and images modes only.
| 1 天前 |