|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project are documented here. |
| 4 | +Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) - SemVer. |
| 5 | + |
| 6 | +## [Unreleased] |
| 7 | + |
| 8 | +## [1.0.0] - 2026-10-18 |
| 9 | + |
| 10 | +First modular release. Migrates the single-file `commandcode-quota` plugin into a |
| 11 | +structured package with dynamic model discovery. |
| 12 | + |
| 13 | +### Added |
| 14 | + |
| 15 | +- Dynamic model discovery from `GET /provider/v1/models` through the OpenCode v2 |
| 16 | + model editor, with transport-aware filtering and automatic `[FREE PROMO]` |
| 17 | + badges for free/promo tiers. |
| 18 | +- On-disk model catalog cache (12h TTL) so an upstream outage cannot leave the |
| 19 | + provider with an empty model list at startup. |
| 20 | +- Multi-source credential resolution: `COMMAND_CODE_API_KEY`, `COMMANDCODE_KEY_FILE`, |
| 21 | + `$XDG_CONFIG_HOME/commandcode/key.txt`, `/etc/environment`, then the official CLI |
| 22 | + stores under `~/.commandcode/`. |
| 23 | +- Strict origin guard (`isCommandCodeHost`) for credential injection, plus the |
| 24 | + `COMMANDCODE_ALLOWED_HOSTS` allow-list opt-in. |
| 25 | +- Bounded API calls via `AbortSignal.timeout` (10s default). |
| 26 | +- Vision capability metadata (`image` input) for multimodal models. |
| 27 | +- `applyModelCatalog` exported for testability. |
| 28 | +- Offline test suite (58 tests) and an opt-in live suite gated by |
| 29 | + `COMMANDCODE_LIVE_TESTS`. |
| 30 | +- Strict typecheck configuration (`allowImportingTsExtensions`, `strict`, |
| 31 | + `noUncheckedIndexedAccess`) with `bun-types`. |
| 32 | +- Documentation: `README.md`, `docs/ARCHITECTURE.md`, `docs/CONFIGURATION.md`, |
| 33 | + `docs/TROUBLESHOOTING.md`, `LICENSE`. |
| 34 | + |
| 35 | +### Changed |
| 36 | + |
| 37 | +- State directory, key paths and the connection-close sentinel are resolved from |
| 38 | + `XDG`/home instead of hardcoded `/root` paths. |
| 39 | +- Retry telemetry now ignores non-Command-Code providers, keeping |
| 40 | + `commandcode-retries.log` meaningful. |
| 41 | +- The `retry` log records the provider id and degrades gracefully when the hook |
| 42 | + is unsupported by the running build. |
| 43 | + |
| 44 | +### Fixed |
| 45 | + |
| 46 | +- **Security:** credentials were attached based on substring URL matching |
| 47 | + (`api.commandcode.ai` anywhere in the URL, or any URL containing |
| 48 | + `/provider/v1/chat/completions`). That leaked the API key to lookalike hosts |
| 49 | + such as `api.commandcode.ai.evil.com`, to any host carrying the provider path, |
| 50 | + and to values injected in query strings or fragments. |
| 51 | +- Anthropic-shaped models (`claude-*`, `/messages` only) were registered under the |
| 52 | + OpenAI-compatible transport and failed with `400 unsupported_model`. They are now |
| 53 | + filtered out. |
| 54 | +- Free-model detection missed `-free` / `_free` / `.free` id shapes, so e.g. |
| 55 | + `poolside/laguna-s-2.1-free` was not tagged. |
| 56 | +- The sanitizer had regressed relative to the proven v1 implementation: `null` and |
| 57 | + empty tool response content was no longer normalized, orphan detection was no |
| 58 | + longer order-sensitive, and malformed `tool_call` entries were not pruned. |
| 59 | +- The sanitizer mutated the caller's message array in place instead of working on |
| 60 | + a shallow clone. |
| 61 | +- The watchdog could fire an abort after a consumer cancellation, and a throwing |
| 62 | + logging callback could leave the stream open. |
| 63 | +- Quota report rendering crashed on a missing window; it now degrades per field. |
| 64 | + |
| 65 | +### Removed |
| 66 | + |
| 67 | +- Hardcoded user-specific absolute paths removed from the runtime code in favour of |
| 68 | + XDG/home resolution. |
| 69 | +- Network calls from the default test suite. |
0 commit comments