Skip to content

v0.2.26 — Multi-Model Registry + Dangling Symlink Fix (#70)#71

Merged
Linux2010 merged 12 commits into
mainfrom
v0.2.26
Jul 25, 2026
Merged

v0.2.26 — Multi-Model Registry + Dangling Symlink Fix (#70)#71
Linux2010 merged 12 commits into
mainfrom
v0.2.26

Conversation

@Linux2010

Copy link
Copy Markdown
Owner

v0.2.26

Model Registry (Slice 1-6)

  • ModelRegistry: Provider + ModelProfile 配置解析、验证、fail-fast 迁移提示
  • Context 优先级: config > discovery > builtin > default,字段级合并
  • ModelClientPool: 按 provider 缓存 OpenAI client,切换模型时不泄漏配置
  • Temperature 策略: 兼容模型 → temperature: 0,推理模型 → 省略字段

Bug Fix: #70 — Dangling Symlink Crash

  • safeStatSync + safeReadFileSync helpers 优雅处理 dangling symlinks
  • 应用到 readFileSync_listFiles_editFile_
  • 不再抛 ENOENT 崩溃,改为返回明确错误信息

Test Baseline

Build: tsc 零错误
Model Registry: 20/20 tests passing
Model Client Pool: 11/11 tests passing

Closes #70

Linux2010 and others added 12 commits July 23, 2026 13:20
- Add safeStatSync and safeReadFileSync helpers that return null
  instead of throwing ENOENT for dangling symlinks
- Apply to readFileSync_, listFiles_, and editFile_
- Also includes v0.2.26 ModelRegistry + ModelClientPool

Co-Authored-By: Claude <[email protected]>
…ModelCoordinator

- config.ts now builds ModelRegistry from providers+models format
- Legacy 4-field config shows migration hint and falls back
- ModelCoordinator with prepare/commit, preflight compact flag
- model_changed events for all renderers
- ModelClientPool integrated into OpenHorseCLIConfig

Co-Authored-By: Claude <[email protected]>
- Replaced empty handleTarget stub with full implementation
- Uses GoalCoordinator from runtime/goals/coordinator
- Supports: create, pause, resume, clear, status, edit, replace
- Uses ctx.sessionId for session binding

Co-Authored-By: Claude <[email protected]>
- Add safeStatSync guard before createReadStream in grep_
- Add stream error listener to catch ENOENT on dangling symlinks
- Skip dangling symlinks in collectFiles with statSync fallback check
- Add user-friendly warning when symlinks are skipped
- Also guard base path stat in grep_ against dangling symlinks

Co-Authored-By: Claude <[email protected]>
…audit evidence

Key additions to reach v0.2.24 plan parity:
1. scheduleGoalContinuation() — auto-starts next turn after current turn completes
2. User steering during active goal updates constraints without replacing objective
3. Completion audit uses actual evidence from turn outcome
4. canContinue guard prevents continuation after pause/defer

Co-Authored-By: Claude <[email protected]>
…Y all pass

Key fixes:
- interrupt() now defers goal continuation (prevents immediate restart)
- /target pause/status/resume/budget/clear allowed during active turn
- PTY smoke reordered to test commands while goal is paused
- scheduleGoalContinuation checks canContinue guard

PTY: V024_TARGET_PTY_OK (12/12 scenarios pass)

Co-Authored-By: Claude <[email protected]>
@Linux2010
Linux2010 merged commit ef2c5a3 into main Jul 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: ENOENT crash when target project has dangling symlink in node_modules

1 participant