steipete--codexbar
3.1 KiB
3.1 KiB
summary, read_when
| summary | read_when | |||
|---|---|---|---|---|
| CLI refactor plan: JSON-only errors, config validation, SettingsStore split. |
|
CLI Refactor Plan
Goals
- JSON-only: every error is valid JSON on stdout (no mixed stderr).
- Per-provider errors: provider failures yield provider-scoped error payloads.
- Config validation: warn on invalid fields, unsupported source modes, bad regions.
- Config parity: add CLI command to validate (and optionally dump) config.
- SettingsStore split: files <500 LOC; clear separation (defaults vs config).
Constraints (keep)
- Provider ordering stays driven by config
providers[]order. - Provider enable/disable stays in config (
enabled). - No Keychain persistence for provider secrets.
- CLI still supports text output for non-JSON use.
Error JSON shape
- JSON output remains an array for
usageandcostcommands. - Errors appear as payload entries with
errorset. - Global/CLI errors use
provider: "cli"andsource: "cli".
{
"provider": "cli",
"source": "cli",
"error": { "code": 1, "message": "...", "kind": "config" }
}
Config validation rules
sourcemust be in provider descriptorfetchPlan.sourceModes.apiKeyonly valid when provider supports.api.cookieSourceonly valid when provider supports.web/.auto.regiononly forzaiorminimaxwith known values.workspaceIDonly foropencode.tokenAccountsonly for providers inTokenAccountSupportCatalog.
CLI commands
codexbar config validate- Prints JSON issues (or text summary).
- Exit non-zero if any errors.
- (Optional)
codexbar config dump- Prints normalized config JSON.
Step-by-step implementation guide
- Add validation types
CodexBarConfigIssue+CodexBarConfigValidatorinCodexBarCore/Config.- Keep file <500 LOC.
- Hook validation into CLI
- New
config validatecommand. --json-onlyemits JSON array of issues.
- New
- Unify CLI error reporting
- Parse
--json-onlyearly. - Route all exits through a JSON-aware reporter.
- Use provider-scoped errors where possible.
- Parse
- Split CLIEntry.swift
- Extract helpers + payload structs into dedicated files (<500 LOC each).
- Split SettingsStore.swift
- Move config-backed computed properties to
SettingsStore+Config.swift. - Move defaults-backed computed properties to
SettingsStore+Defaults.swift. - Move provider detection to
SettingsStore+ProviderDetection.swift.
- Move config-backed computed properties to
- Provider toggles cleanup
- Remove unused
ProviderToggleStore+ tests; keep migrator path for legacy toggles.
- Remove unused
- Tests
- CLI json-only error payloads (invalid source, invalid provider selection).
- Config validation (bad region/source/apiKey field).
- SettingsStore order/toggle invariants still pass.
- Verification
make test,swiftformat Sources Tests,swiftlint --strict,make check../Scripts/compile_and_run.sh.- CLI e2e:
codexbar --json-only ...,codexbar config validate.