Files
ZacharyZhang-NY 3952c28f16 Login picker: offer all three platforms like the official CLI
The unauthenticated welcome screen previously offered only 'Login with
Kimi Code'. It now lists every interactive platform the shell
advertises, matching the official kimi-cli picker:

  Kimi Code (OAuth)
  Moonshot Open Platform (API key · moonshot.cn)
  Moonshot Open Platform (API key · moonshot.ai)
  Quit

- Shell: new ACP auth methods moonshot-cn / moonshot-ai (advertised
  after kimi-code; the BYOK first-position invariant holds).
  authenticate(moonshot-*) reloads keys from env>config, fails with an
  actionable message when none is configured, validates the key against
  GET {base}/models (401 → 'invalid API key' naming the console), then
  swaps the fresh config in, triggers the model sync, and reports
  auth_mode api_key so the pager treats it like other API-key logins.
  Never session-based; keys never logged.
- Config: save_platform_api_key persists [platforms.<id>].api_key via an
  atomic mode-preserving write under the config lock; refuses OAuth
  platforms, blank keys, and unparseable files.
- TUI: the Pending welcome renders the picker rows from the advertised
  methods (arrows/Enter/mouse; 'l' keeps selecting the OAuth row).
  Choosing a Moonshot row opens a masked paste box ('Paste your Moonshot
  API key (from platform.moonshot.cn)'); Esc returns to the picker,
  Enter persists the key and authenticates in one sequential effect;
  failures return to the picker with the error line, success lands on
  the normal welcome. Startup eager-auth is unchanged: a key already in
  the environment authenticates exactly as before, and single-method
  shells keep the historical auto-device-flow.

Gates: workspace check/clippy 0/0; shell 4870 + tui 6620 lib tests
green; headless probe advertises [kimi-code, moonshot-cn, moonshot-ai]
for a fresh user and xai.api_key-first with a key configured.
2026-07-18 04:02:39 -04:00

3.4 KiB

Smoke checklist (PRD F9)

F9 carries the grok-build harness capabilities forward unchanged. Each row names the capability, the automated case that covers it (run with CARGO_INCREMENTAL=0), and the manual probe when automation cannot reach it. A release is smoke-clean when every row has at least one passing case.

Legend: auto = covered by the named test target in CI; manual = run the listed command and check the listed observable.

# Capability Case How
1 Fullscreen TUI (mouse, themes, shortcuts, slash commands) auto cargo test -p kigi-tui --lib (welcome/menu/mouse/theme suites, 6.6k tests); manual spot: kigi → welcome moon renders, ctrl+q quits
2 Headless / script mode auto cargo test -p kigi-tui --lib headless; manual: kigi -p "Reply OK" prints the reply and exits 0
3 ACP server manual printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}}}\n' | kigi acp → one JSON-RPC result line with "protocolVersion":1
4 MCP client (stdio/http/oauth) auto cargo test -p kigi-mcp --lib, cargo test -p kigi-shell --lib util::config::mcp; manual: kigi mcp add t -- npx -y @modelcontextprotocol/server-everything then kigi mcp doctor t
5 --mcp-config-file injection auto cargo test -p kigi-shell --lib util::config::mcp::tests::cli_mcp; manual: flag + x.ai/mcp/servers_updated notification lists the injected server
6 Skills auto cargo test -p kigi-agent --lib skills
7 Plugins (local load) auto cargo test -p kigi-agent --lib plugins; manual: kigi plugin list
8 Hooks auto cargo test -p kigi-hooks --lib and cargo test -p kigi-shell --lib hooks
9 Sandbox auto cargo test -p kigi-sandbox --lib
10 Checkpoint / session persistence auto cargo test -p kigi-shell --lib session:: (persistence/rewind suites); manual: kigi sessions lists the last session, kigi -c resumes it
11 Worktrees auto cargo test -p kigi-fast-worktree --lib; manual: kigi worktree list
12 Mermaid rendering auto cargo test -p kigi-mermaid --lib
13 Crash handling auto cargo test -p kigi-crash-handler --lib
14 Kimi auth (login picker: device flow + Moonshot API key) auto cargo test -p kigi-shell --lib auth:: (138 cases incl. live-shape fixtures) + cargo test -p kigi-shell --lib auth_method (moonshot validation); manual: kigi login completes in a browser, token lands in keyring service kigi; welcome picker also accepts a Moonshot API key into [platforms.*] in config.toml
15 Inference (ChatCompletions Kimi dialect) auto cargo test -p kigi-sampler (incl. test_kimi_wire); e2e: scratchpad mock flow (write → run → answer), see AGENTS.md
16 Model catalog sync (/models) auto cargo test -p kigi-shell --lib models_fetch + cargo test -p kigi-models --lib
17 Search/fetch tools (OAuth-gated) auto cargo test -p kigi-tools --lib web_search and --lib web_fetch (Kimi wire contracts)
18 Performance budgets auto scripts/bench.shkigi --version p95 ≤ 50 ms, TUI first frame ≤ 300 ms (CI perf job)
19 Coexistence with official kimi-cli manual both logged in on one machine; kigi never reads/writes ~/.kimi or keyring service kimi-code (F7 import is read-only; §9 requires a 24 h parallel-use pass)