- Update root AGENTS.md: hook count 44→46, commit fcb90d92, generated 2026-02-24 - Update src/AGENTS.md: core hooks 35→37, session hooks 21→23 - Update src/hooks/AGENTS.md: 46 hooks total, add modelFallback/noSisyphusGpt/noHephaestusNonGpt/runtimeFallback, jsonErrorRecovery moved to tool-guard (tier 2) - Create src/tools/hashline-edit/AGENTS.md (93 lines): documents three-op model, LINE#ID format, execution pipeline - Refresh timestamps: 2026-02-21→2026-02-24 on 28 files - Update plugin/AGENTS.md hook composition counts 🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
62 lines
1.9 KiB
Markdown
62 lines
1.9 KiB
Markdown
[sisyphus-bot]
|
|
|
|
## Confirmed Bug
|
|
|
|
We have identified the root cause of this issue. The bug is in the config writing logic during installation.
|
|
|
|
### Root Cause
|
|
|
|
**File:** `src/cli/config-manager/write-omo-config.ts` (line 46)
|
|
|
|
```typescript
|
|
const merged = deepMergeRecord(existing, newConfig)
|
|
```
|
|
|
|
When a user runs `oh-my-opencode install` (even just to update settings), the installer:
|
|
1. Reads the existing config (with user's custom model settings)
|
|
2. Generates a **new** config based on detected provider availability
|
|
3. Calls `deepMergeRecord(existing, newConfig)`
|
|
4. Writes the result back
|
|
|
|
**The problem:** `deepMergeRecord` overwrites values in `existing` with values from `newConfig`. This means your custom `"model": "openai/gpt-5.2-codex"` gets overwritten by the generated default model (e.g., `anthropic/claude-opus-4-6` if Claude is available).
|
|
|
|
### Why This Happens
|
|
|
|
Looking at `deepMergeRecord` (line 24-25):
|
|
```typescript
|
|
} else if (sourceValue !== undefined) {
|
|
result[key] = sourceValue as TTarget[keyof TTarget]
|
|
}
|
|
```
|
|
|
|
Any defined value in the source (generated config) overwrites the target (user's config).
|
|
|
|
### Fix Approach
|
|
|
|
The merge direction should be reversed to respect user overrides:
|
|
```typescript
|
|
const merged = deepMergeRecord(newConfig, existing)
|
|
```
|
|
|
|
This ensures:
|
|
- User's explicit settings take precedence
|
|
- Only new/undefined keys get populated from generated defaults
|
|
- Custom model choices are preserved
|
|
|
|
### SEVERITY: HIGH
|
|
|
|
- **Impact:** User configuration is overwritten without consent
|
|
- **Affected Files:**
|
|
- `src/cli/config-manager/write-omo-config.ts`
|
|
- `src/cli/config-manager/deep-merge-record.ts`
|
|
- **Trigger:** Running `oh-my-opencode install` (even for unrelated updates)
|
|
|
|
### Workaround (Until Fix)
|
|
|
|
Backup your config before running install:
|
|
```bash
|
|
cp ~/.config/opencode/oh-my-opencode.jsonc ~/.config/opencode/oh-my-opencode.jsonc.backup
|
|
```
|
|
|
|
We're working on a fix that will preserve your explicit model configurations.
|