2 Commits

Author SHA1 Message Date
lemon07r 194da3cc9b Release v1.0.6: fix chat.params crash and add reasoning variants
Two user-visible fixes:

1. Runtime crash 'undefined is not an object (evaluating
   input.provider.info.id)' on any chat. The @opencode-ai/plugin
   ProviderContext type claims .info.id exists, but opencode's
   session/llm.ts::stream passes the flat ProviderConfig as provider
   (research/opencode/packages/opencode/src/session/llm.ts ~line 168).
   Gate on input.model.providerID instead — matches cloudflare.ts,
   codex.ts, github-copilot/copilot.ts.

2. Ctrl+T reasoning variants (off/auto/low/medium/high) were not
   available. README config now declares model.variants, which opencode
   merges into options before chat.params runs; the hook normalizes
   'auto' to omit both thinking and reasoning_effort so Moonshot picks
   dynamically, matching kimi-cli's 'nothing passed' default.

Also:
- AGENTS.md rule 4 updated with 'auto' row and the providerID gating
  warning, citing the live 2026-04-17 repro.
- test/plugin.test.ts input shape updated to match runtime; added a
  test for the 'auto' variant.
2026-04-17 04:19:59 -04:00
lemon07r 64550fb057 Release v1.0.2: broaden offline test coverage
Adds one test file per source file plus a shared fetch mock helper:

- test/constants.test.ts: OAuth scope/client_id/PROVIDER_ID/MODEL_ID pins,
  rules 1, 6, 8.
- test/headers.test.ts: seven fingerprint header keys, UA/X-Msh-Version
  track KIMI_CLI_VERSION, ASCII-only values, device-id format and
  stability across calls (rules 1, 2).
- test/oauth.test.ts: form-encoded bodies for device-start/refresh,
  authorization_pending/expired_token/unknown-error branches, non-OK and
  non-JSON error shapes.
- test/plugin.test.ts: chat.params provider+model gating, full effort
  matrix (rule 4), prompt_cache_key gating (rule 5), camelCase effort
  input, loader Authorization ownership (rule 3), refresh-on-expiry with
  persistAuth, 401 single-retry no-loop, device-flow authorize wiring.
- test/_util/fetchMock.ts: zero-dep global-fetch swap returning canned
  Responses with call capture.

Notes:

- Tests use the real ~/.kimi/device_id; getDeviceId is idempotent and the
  file is shared with kimi-cli by design (AGENTS.md rule 2), so no HOME
  redirect is needed. Attempted monkey-patching os.homedir instead is
  fragile under Bun's eager import-binding resolution.
- pollDeviceToken tests use interval=1 because `device.interval || 5`
  treats 0 as the default 5s and would push each iteration past the
  default bun-test timeout.

Total: 35 tests, ~5s to run.
2026-04-17 03:18:23 -04:00