diff --git a/README.md b/README.md index 669ac8b..3748d23 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ ## opencode-kimi-full -An [opencode](https://opencode.ai) plugin that adds the official Kimi For Coding OAuth provider plus the Kimi-specific request metadata that `kimi-cli` sends. +An [opencode](https://opencode.ai) plugin that makes the Kimi Code path in opencode behave like the official `kimi-cli`, instead of a generic OpenAI-compatible provider. -This plugin: +Compared with stock opencode Kimi setups, this plugin: - uses the official Kimi device flow against `https://auth.kimi.com` with `scope: kimi-code` - talks to `https://api.kimi.com/coding/v1` through `@ai-sdk/openai-compatible` @@ -12,7 +12,7 @@ This plugin: - discovers the authoritative wire model slug, API display name, and context length from `/coding/v1/models` - keeps tokens in opencode's auth store while mirroring `kimi-cli`'s refresh / retry behavior -Kimi K2.6 is no longer exclusive to this path. The reason this plugin exists is different: it keeps opencode on the same OAuth, fingerprint, and Kimi-extension-field path as the official `kimi-cli`, without sharing `kimi-cli`'s credential files. +That is the value of using this plugin instead of a plain opencode provider entry: it preserves the Kimi-only OAuth path, fingerprint, and request extensions that the generic route does not. Contributor and agent documentation lives in [`AGENTS.md`](./AGENTS.md). @@ -20,10 +20,11 @@ Contributor and agent documentation lives in [`AGENTS.md`](./AGENTS.md). ### Quick Start -1. Install the plugin: `opencode plugin opencode-kimi-full --global` -2. Paste the provider block from [Configure](#configure) into your opencode config. +1. Install the plugin globally: `opencode plugin opencode-kimi-full --global` +2. If you are testing a local checkout instead of the published package, install the checkout path instead: `opencode plugin /absolute/path/to/opencode-kimi-full --global` 3. Run `opencode auth login -p kimi-for-coding-oauth` and approve the device flow in your browser. -4. Select `kimi-for-coding-oauth/kimi-for-coding` in opencode. +4. Paste the provider block from [Configure](#configure) into your opencode config. +5. Select `kimi-for-coding-oauth/kimi-for-coding` in opencode. ### Requirements @@ -32,13 +33,23 @@ Contributor and agent documentation lives in [`AGENTS.md`](./AGENTS.md). ### Install +Recommended: + ```sh opencode plugin opencode-kimi-full --global ``` -That installs the plugin through opencode and adds it to your global config. +That installs the published package and adds the plugin to your global opencode config, so `opencode auth login -p kimi-for-coding-oauth` works from any directory. -Or add the package name to the `plugin` list in `~/.config/opencode/opencode.json` or a project-local `.opencode/opencode.json`: +From a local checkout: + +```sh +opencode plugin /absolute/path/to/opencode-kimi-full --global +``` + +That is the command you want when you are editing this repo and want opencode to load your working tree. Changing files in a checkout does nothing unless opencode is pointed at that checkout path. + +If you prefer managing plugin registration manually, add the plugin to the `plugin` list in `~/.config/opencode/opencode.json` or a project-local `.opencode/opencode.json`: ```json { @@ -47,10 +58,7 @@ Or add the package name to the `plugin` list in `~/.config/opencode/opencode.jso } ``` -
-From a local checkout - -Point the `plugin` entry at the repo root instead of the npm package name: +For a local checkout, point the `plugin` entry at the repo root instead of the npm package name: ```json { @@ -59,16 +67,15 @@ Point the `plugin` entry at the repo root instead of the npm package name: } ``` -
+If you use a project-local `.opencode/opencode.json`, the plugin only exists when you run `opencode` inside that project tree. If you want `opencode auth login` to work from anywhere, use the `--global` install above. ### Configure -After the plugin is installed, paste this provider entry into `~/.config/opencode/opencode.json` or `.opencode/opencode.json`: +After the plugin is installed and login works, paste this provider entry into `~/.config/opencode/opencode.json` or `.opencode/opencode.json`: ```json { "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-kimi-full"], "provider": { "kimi-for-coding-oauth": { "name": "Kimi For Coding (OAuth)", @@ -95,6 +102,8 @@ After the plugin is installed, paste this provider entry into `~/.config/opencod } ``` +This block is for using the model after login. It does **not** register the auth provider by itself. What makes `opencode auth login -p kimi-for-coding-oauth` work is the plugin being loaded via `opencode plugin ...` or the `plugin` array above. + Use these two ids exactly as written: - **provider id** `kimi-for-coding-oauth` — the plugin's `auth` and `chat.params` hooks match on it. @@ -119,6 +128,26 @@ During login the plugin: Access tokens refresh automatically while you use the model. +
+Troubleshooting: Unknown provider "kimi-for-coding-oauth" + +That error means opencode did not load this plugin at all. The Kimi OAuth flow has not started yet. + +The usual causes are: + +- You skipped `opencode plugin opencode-kimi-full --global` or `opencode plugin /absolute/path/to/opencode-kimi-full --global`. +- You edited a local checkout, but opencode is not pointed at that checkout path. +- You put the plugin in a project-local `.opencode/opencode.json`, but ran `opencode auth login` from another directory. +- You added the `provider` block, but not the `plugin` entry or plugin install. + +Fastest fix: + +1. Install the plugin globally with `opencode plugin opencode-kimi-full --global`, or `opencode plugin /absolute/path/to/opencode-kimi-full --global` for a checkout. +2. Confirm your opencode config now contains the plugin entry. +3. Run `opencode auth login -p kimi-for-coding-oauth` again. + +
+
Login and refresh details @@ -155,9 +184,9 @@ Every `kimi-for-coding` request also gets `prompt_cache_key` set to opencode's s
Why this plugin exists -This plugin exists to bring the official Kimi Code OAuth path and Kimi-specific request extensions into opencode without sharing `kimi-cli`'s credential files. +Stock opencode can already talk to generic Moonshot and OpenAI-compatible endpoints. This plugin exists for the Kimi Code path specifically: it brings the official Kimi OAuth flow and Kimi-specific request behavior into opencode without sharing `kimi-cli`'s credential files. -**What it changes.** +**What it adds over the generic route.** - OAuth device flow with `scope: kimi-code`. - `@ai-sdk/openai-compatible` pointed at `https://api.kimi.com/coding/v1`. diff --git a/test/plugin.test.ts b/test/plugin.test.ts index af0466a..3c568cd 100644 --- a/test/plugin.test.ts +++ b/test/plugin.test.ts @@ -74,6 +74,12 @@ async function getHooks() { return { hooks, writes } } +test("plugin registers auth under PROVIDER_ID", async () => { + const { hooks } = await getHooks() + expect(hooks.auth?.provider).toBe(PROVIDER_ID) + expect(hooks.auth?.methods?.[0]?.label).toBe("Kimi Code (device flow)") +}) + // ---------- chat hooks ------------------------------------------------------ const INTERNAL_PROMPT_CACHE_KEY_HEADER = "x-opencode-kimi-prompt-cache-key"