Avoid collision with the existing Opswitch product while keeping the repository name as opencode-provider-switch. This aligns the CLI, provider key, config paths, examples, and Trellis history under one public-facing name.
217 lines
5.4 KiB
Markdown
217 lines
5.4 KiB
Markdown
# Journal - Apale (Part 1)
|
|
|
|
> AI development session journal
|
|
> Started: 2026-04-16
|
|
|
|
---
|
|
|
|
|
|
|
|
## Session 1: Finalize OPS MVP review PRD
|
|
|
|
**Date**: 2026-04-17
|
|
**Task**: Finalize OPS MVP review PRD
|
|
**Branch**: `master`
|
|
|
|
### Summary
|
|
|
|
(Add summary)
|
|
|
|
### Main Changes
|
|
|
|
| Area | Description |
|
|
|------|-------------|
|
|
| PRD Redesign | Reframed OPS MVP around alias-driven multi-provider failover for OpenAI Responses only. |
|
|
| OpenCode Integration | Locked config-sync approach for exposing aliases through `provider.ops.models`, with connected-provider requirement. |
|
|
| Failover Semantics | Finalized pre-first-byte-only failover, streaming pass-through, and no mid-stream provider switching. |
|
|
| MVP Boundaries | Locked import scope to config-defined `@ai-sdk/openai`, excluded `auth.json` as provider definition source, and kept `ops doctor` static by default. |
|
|
| Task Closure | Marked review task completed, cleared current task, and archived both finished docs tasks. |
|
|
|
|
**Updated Files**:
|
|
- `.trellis/tasks/archive/2026-04/04-17-04-17-ops-mvp-design-review/prd.md`
|
|
- `.trellis/tasks/archive/2026-04/04-17-04-17-ops-mvp-design-review/task.json`
|
|
- `.trellis/tasks/archive/2026-04/04-17-ops-mvp-design/task.json`
|
|
|
|
**Notes**:
|
|
- Follow-up implementation should start in a new task from the finalized PRD.
|
|
- Existing unrelated worktree change in `AGENTS.md` was left untouched.
|
|
|
|
|
|
### Git Commits
|
|
|
|
| Hash | Message |
|
|
|------|---------|
|
|
| `eeacdc4` | (see git log) |
|
|
| `00747fa` | (see git log) |
|
|
| `ca0b3c4` | (see git log) |
|
|
|
|
### Testing
|
|
|
|
- [OK] (Add test results)
|
|
|
|
### Status
|
|
|
|
[OK] **Completed**
|
|
|
|
### Next Steps
|
|
|
|
- None - task complete
|
|
|
|
|
|
## Session 2: Build OPS MVP failover proxy
|
|
|
|
**Date**: 2026-04-17
|
|
**Task**: Build OPS MVP failover proxy
|
|
**Branch**: `master`
|
|
|
|
### Summary
|
|
|
|
Implemented the Go-based OPS MVP: local config, provider and alias CLI, OpenCode sync/import, and a streaming OpenAI Responses proxy with deterministic pre-first-byte failover. Added Chinese and English README documentation for quick onboarding.
|
|
|
|
### Main Changes
|
|
|
|
(Add details)
|
|
|
|
### Git Commits
|
|
|
|
| Hash | Message |
|
|
|------|---------|
|
|
| `2b04d91` | (see git log) |
|
|
|
|
### Testing
|
|
|
|
- [OK] (Add test results)
|
|
|
|
### Status
|
|
|
|
[OK] **Completed**
|
|
|
|
### Next Steps
|
|
|
|
- None - task complete
|
|
|
|
|
|
## Session 3: Support disabling providers in ocswitch
|
|
|
|
**Date**: 2026-04-17
|
|
**Task**: Support disabling providers in ocswitch
|
|
**Branch**: `master`
|
|
|
|
### Summary
|
|
|
|
Added provider-level disable/enable support, made failover skip disabled providers without mutating alias target state, and aligned doctor/opencode sync/models exposure with routable aliases.
|
|
|
|
### Main Changes
|
|
|
|
(Add details)
|
|
|
|
### Git Commits
|
|
|
|
| Hash | Message |
|
|
|------|---------|
|
|
| `HEAD` | (see git log) |
|
|
|
|
### Testing
|
|
|
|
- [OK] (Add test results)
|
|
|
|
### Status
|
|
|
|
[OK] **Completed**
|
|
|
|
### Next Steps
|
|
|
|
- None - task complete
|
|
|
|
|
|
## Session 4: Review MVP completion status
|
|
|
|
**Date**: 2026-04-17
|
|
**Task**: Review MVP completion status
|
|
**Branch**: `master`
|
|
|
|
### Summary
|
|
|
|
Reviewed current implementation against the archived MVP PRD and classified implemented, missing, and beyond-MVP features.
|
|
|
|
### Main Changes
|
|
|
|
| Category | Result |
|
|
|---|---|
|
|
| Overall status | MVP core flow is effectively complete |
|
|
| Implemented MVP | Local ocswitch config, provider/alias CLI, OpenCode sync, static doctor, `/v1/responses` proxy, streaming pass-through, pre-first-byte failover, debug headers |
|
|
| Partial / missing MVP edges | `doctor` validates generated preview more than on-disk synced state; OpenCode provider import only reads `options.apiKey`, not broader header-style auth |
|
|
| Beyond MVP | `provider enable/disable`, minimal `/v1/models`, broader alias normalization, careful OpenCode config patching |
|
|
|
|
**Reviewed Sources**:
|
|
- `.trellis/tasks/archive/2026-04/04-17-04-17-ops-mvp-design-review/prd.md`
|
|
- `internal/config/config.go`
|
|
- `internal/cli/provider.go`
|
|
- `internal/cli/alias.go`
|
|
- `internal/cli/opencode.go`
|
|
- `internal/cli/doctor.go`
|
|
- `internal/cli/serve.go`
|
|
- `internal/opencode/opencode.go`
|
|
- `internal/proxy/server.go`
|
|
- `internal/proxy/server_test.go`
|
|
- `internal/opencode/opencode_test.go`
|
|
- `internal/cli/cli_test.go`
|
|
- `internal/config/config_test.go`
|
|
|
|
**Verification**:
|
|
- Ran `go test ./...` successfully: 34 tests passed across 5 packages.
|
|
|
|
|
|
### Git Commits
|
|
|
|
(No commits - planning session)
|
|
|
|
### Testing
|
|
|
|
- [OK] (Add test results)
|
|
|
|
### Status
|
|
|
|
[OK] **Completed**
|
|
|
|
### Next Steps
|
|
|
|
- None - task complete
|
|
|
|
|
|
## Session 5: Fix sync command panic
|
|
|
|
**Date**: 2026-04-17
|
|
**Task**: Fix sync command panic
|
|
**Branch**: `master`
|
|
|
|
### Summary
|
|
|
|
Fixed a panic in opencode sync when preserved model metadata contains slices, and added package plus CLI regression coverage.
|
|
|
|
### Main Changes
|
|
|
|
- Root cause: `internal/opencode/opencode.go` compared `interface{}` values directly inside `mapsEqualShallow`, which panicked when preserved `provider.ocswitch.models.<alias>` metadata included slices.
|
|
- Fix: replaced the unsafe hand-rolled comparison with `reflect.DeepEqual` so existing model metadata with nested maps/slices can be compared safely during `sync`.
|
|
- Added regression tests in `internal/opencode/opencode_test.go` and `internal/cli/cli_test.go` covering preserved slice metadata and a real `opencode sync --target` no-op path.
|
|
- Verification: ran `rtk go test ./internal/opencode`, `rtk go test ./internal/cli ./internal/opencode`, and `rtk go test ./...` successfully.
|
|
|
|
|
|
### Git Commits
|
|
|
|
| Hash | Message |
|
|
|------|---------|
|
|
| `887eb14` | (see git log) |
|
|
|
|
### Testing
|
|
|
|
- [OK] (Add test results)
|
|
|
|
### Status
|
|
|
|
[OK] **Completed**
|
|
|
|
### Next Steps
|
|
|
|
- None - task complete
|