Commit graph

299 commits

Author SHA1 Message Date
haozhe.yang
18224d47ff refactor(services,daemon,agent-core): align service registry bootstrap and expand DI lifecycle primitives
- remove defaultServicesModule() and services/src/module.ts; consume getSingletonServiceDescriptors() directly\n- update daemon service registrations and bootstrap to use registry descriptors\n- add DisposableMap, DisposableSet, disposable tracking, and disposeOnReturn to agent-core DI\n- update AGENTS.md with new registration patterns
2026-06-11 10:14:45 +08:00
haozhe.yang
d4eacc7e7d feat(prompt): add prompt queue and steer support
- add per-session prompt queue: concurrent submits return queued status\n- add list/steer REST endpoints and protocol schemas\n- synthesize prompt.steered lifecycle event\n- add debug endpoint to inject active prompts for e2e testing\n- add daemon-e2e queue + steer invariant test\n- fix WS ping frame handling in daemon-e2e client
2026-06-11 10:14:45 +08:00
haozhe.yang
f5c2c7ad0f fix(di): make ServiceCollection private and add startup service overrides
- make InstantiationService.services private to prevent external mutation\n- add serviceOverrides to DaemonStartOptions for test injection\n- refactor e2e tests to use startup overrides instead of post-boot container hacks
2026-06-11 10:14:45 +08:00
haozhe.yang
f65615b85d refactor(agent-core): align DI container with VS Code instantiation service
- move InstantiationType to extensions module; change SyncDescriptor0 to interface\n- add _strict mode and spread args to invokeFunction\n- construct parent-owned descriptors in parent scope\n- materialise delayed services in child scope with global graph tracking\n- update TestInstantiationService ctor and tests for new semantics
2026-06-11 10:14:45 +08:00
haozhe.yang
1bbf7d41ef test(daemon-e2e): split monolithic recent-daemon-apis scenario into focused scenarios
- replace scenario 06 with dedicated 06-09 files for model catalog, session children, pending recovery, and image file prompts\n- add prompt execution coverage for parent and child sessions\n- update README scenario index
2026-06-11 10:14:45 +08:00
haozhe.yang
6994c52af0 feat(daemon): expose session undo action via daemon API
- Add POST /api/v1/sessions/{session_id}:undo endpoint\n- Add undo request/response schemas and SESSION_UNDO_UNAVAILABLE error code\n- Refactor OpenAPI transforms to support fork, compact, and undo actions\n- Implement SessionService.undo with history validation and compaction boundary guards\n- Add E2E and unit tests for undo endpoint and service logic
2026-06-11 10:14:45 +08:00
haozhe.yang
a7f31367d5 feat(daemon,web): expand daemon APIs and web client
- restructure daemon/services DI wiring and lifecycle events
- add session, workspace, model catalog, file, and reverse-RPC REST APIs
- add daemon e2e package with structured scenarios and HTML trace reports
- polish kimi-web rendering, mobile layout, diff view, and session UX
2026-06-11 10:14:45 +08:00
haozhe.yang
44e85af405 feat(daemon,services): default-wire Kimi-for-Coding identity headers via HarnessBridge
Add an optional `identity` field to HarnessBridgeOptions and default-wire
`kimiRequestHeaders` (User-Agent + X-Msh-Platform/Version/Device-Id) plus
`appVersion` from it. Without these the daemon-hosted KimiCore made
outbound fetches with the Node default User-Agent and the managed
Kimi-for-Coding endpoint rejected with 40340 ("only available for Coding
Agents such as Kimi CLI, …"). The in-process TUI path was unaffected
because SDKRpcClient already synthesised the same headers from its own
identity. Explicit `kimiRequestHeaders` / `appVersion` still win.

apps/kimi-code wires this through its `daemon` subcommand using the
existing `createKimiCodeHostIdentity(version)` helper, and ships a small
`dev:daemon:restart` press-Enter-to-respawn helper so the dev loop can
pick up a fresh build without manually killing the lock-holder.
2026-06-11 10:14:44 +08:00
qer
c03fac8246 feat(web): add Kimi web client (apps/kimi-web)
A browser peer to the Kimi Code TUI that talks to the local daemon over
REST + WS (/api/v1, raw agent-core event stream).

Highlights:
- Workspace + session model: a workspace is a real folder; sessions are
  scoped to it. Dual sidebar — a workspace rail (collapsible icons ⇄ named
  rows) + a resizable, project-scoped session column. One-click new session,
  folder browser (fs:browse) to add workspaces, cross-session attention markers.
- Conversation: streaming thinking/text/tool calls, follow-to-bottom with a
  "new messages" pill, markdown with highlight.js syntax highlighting + diff
  coloring, per-tool header summaries, image attachments, @mention files,
  slash commands, editable message queue, max-width reading column with
  left/center alignment.
- Controls (StatusLine): model picker, context meter, thinking-level selector,
  plan-mode toggle, permission selector; /status panel; every prompt carries
  model + thinking + permission_mode + plan_mode per the daemon contract.
- Auth: OAuth device-code login/logout, managed-provider account menu.
- Tabs: ~/chat, ~/diff (git changes), ~/files (tree + preview), ~/tasks.
- i18n (vue-i18n): en/zh, browser detection + localStorage, EN/中文 switcher.
- Vue 3 + Vite + TS; 294 unit tests; typecheck + build green.
2026-06-11 10:14:44 +08:00
haozhe.yang
b66599e59e fix(services): wire default OAuth token resolver into HarnessBridge
- default-construct KimiAuthFacade in HarnessBridge when caller omits resolveOAuthTokenProvider\n- stop synthesized always-throw AUTH_LOGIN_REQUIRED closure after device-code login\n- remove tsx watch from dev:daemon to avoid restart loops\n- ignore Docker artifacts in .gitignore\n- add regression test for default resolver wiring
2026-06-11 10:14:44 +08:00
haozhe.yang
41e25ee97e feat(auth): add readiness probe and OAuth device-code flow endpoints
- add GET /v1/auth readiness probe with authSummarySchema (P2.1)\n- add /v1/oauth/* device-code flow start/poll/cancel/logout routes (P2.7)\n- add IAuthSummaryService and IOAuthService implementations\n- gate prompt submission behind auth readiness (4011x error codes)\n- add e2e tests for auth and OAuth endpoints\n- add protocol schemas and rest-auth unit tests
2026-06-11 10:14:44 +08:00
haozhe.yang
c3b18e95a4 feat(daemon): add OpenAPI docs for REST routes
- add Swagger/OpenAPI generation and /documentation UI\n- move REST route registration under /api/v1\n- generate route schemas from Zod definitions\n- add daemon Swagger e2e coverage and dev daemon scripts
2026-06-11 10:14:44 +08:00
haozhe.yang
be4d0f77b6 feat: bootstrap local daemon with REST/WS gateway, DI, and protocol/services packages
Squash of 50 commits (9954d7f..c50167a) introducing the local daemon stack:

- @moonshot-ai/protocol: envelope, error codes, pagination/time/request_id helpers,
  ws-control schemas, re-export of event/display types from node-sdk.
- @moonshot-ai/services: broker interfaces, HarnessBridge core + BridgeClientAPI,
  defaultServicesModule shell.
- agent-core/di: vendored DI subsystem with createDecorator + serviceIds singleton,
  SyncDescriptor, InstantiationService (singleton-per-container, child scopes,
  IDisposable lifecycle), graph-based cycle detection, descriptor + @IFoo auto-injection,
  supportsDelayedInstantiation Proxy + GlobalIdleValue, TestInstantiationService,
  Trace, registerSingleton registry, README.
- @moonshot-ai/daemon: new package providing 'kimi daemon' command with
  - filesystem lock against concurrent instances,
  - REST gateway: /v1/meta, sessions CRUD, messages history, prompt submit,
    approval bridge (WS broadcast + 60s timeout), question bridge (5-kind normalization),
    tools list, MCP list/restart, background tasks, fs list/read/stat (+ batch),
    fs search/grep (rg fallback + timeout), fs git_status, fs download streaming,
    fs WS watch (chokidar, 100-path cap), Files store (multipart upload,
    streaming download, delete),
  - WS gateway: handshake, ping/pong heartbeat, subscribe/unsubscribe,
    DaemonEventBus with per-session seq, ring buffer with replay + resync_required,
    abort control message,
  - DI wiring of all services + brokers + HarnessBridge,
  - migration of all ctors to @IFoo decorator-based DI (P2.1–P2.6) with
    experimentalDecorators enabled.
2026-06-11 10:14:44 +08:00
qer
71f5926d0e
feat(datasource): add yuandian_law legal data source + request-id trace (#611)
Some checks are pending
CI / build (push) Waiting to run
CI / test (push) Waiting to run
CI / lint (push) Waiting to run
CI / typecheck (push) Waiting to run
Nix Build / Check flake.nix workspace sync (push) Waiting to run
Nix Build / nix build .#kimi-code (push) Blocked by required conditions
Release / Release (push) Waiting to run
Release / Deploy docs (push) Blocked by required conditions
Release / Native release artifact (push) Blocked by required conditions
Release / Publish native release assets (push) Blocked by required conditions
- Register the yuandian_law (元典法律数据库) data source for Chinese
  laws/regulations and judicial case search.
- Append a request-id / tool-call-id trace line to every tool result so
  failures can be correlated with backend logs.
- Fix the documented MCP tool names in SKILL.md (-data -> _data).
- Also includes the dev marketplace-server env isolation fix in dev.mjs.

Co-authored-by: qer <Anna_Knapprfr@mail.com>
2026-06-10 22:29:51 +08:00
7Sageer
d8cdebf3c0
fix: stop silently dropping unsupported multimodal content in kosong providers (#632)
Some checks are pending
CI / build (push) Waiting to run
CI / test (push) Waiting to run
CI / lint (push) Waiting to run
CI / typecheck (push) Waiting to run
Nix Build / Check flake.nix workspace sync (push) Waiting to run
Nix Build / nix build .#kimi-code (push) Blocked by required conditions
Release / Release (push) Waiting to run
Release / Deploy docs (push) Blocked by required conditions
Release / Native release artifact (push) Blocked by required conditions
Release / Publish native release assets (push) Blocked by required conditions
* fix: stop silently dropping unsupported media in provider conversions

* fix: keep non-standard audio/video parts off the chat completions wire
2026-06-10 21:39:03 +08:00
Cyning12
42a104a840
docs: align getting-started Node.js requirement with package engines (#622)
Fixes misleading npm install prerequisite (24.15.0) so docs match
apps/kimi-code package.json engines.node >=22.19.0.

Co-authored-by: cyning <cyning12@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: liruifengv <liruifeng1024@gmail.com>
2026-06-10 21:31:32 +08:00
liruifengv
296142544e
feat: alias search and two-line descriptions for slash command autocomplete (#631)
* feat: search slash command aliases in autocomplete

Slash-command name completion now matches aliases and shows them in the
label as `name (alias1, alias2)` when the match came from an alias.
Argument completion resolves aliases too. The intercepted completion
keeps the inner provider's conventions: argument hints stay in the
suggestion description, and primary-name matches outrank alias matches
on score ties.

* feat: wrap autocomplete descriptions onto up to two lines

Long slash command / skill descriptions used to be truncated to a single
line in the completion menu. CustomEditor now swaps the slash menu's list
for a WrappingSelectList that wraps descriptions to at most two lines,
ellipsizing past the second; non-slash completion keeps pi-tui's
single-line list.

Plain-text truncations also strip the trailing ANSI reset that pi-tui's
truncateToWidth appends — embedded inside the theme colouring it reset
the rest of the row, so a selected row with a truncated name rendered
its two description lines in different colours.

* chore: make changeset wording user-facing

* style: pass optional description directly instead of conditional spread

Follows the AGENTS.md convention for optional object properties.
2026-06-10 21:26:36 +08:00
liruifengv
fabc3b218f
docs: limit changelog TOC to version headings (#633) 2026-06-10 21:15:41 +08:00
liruifengv
89097aa02c
docs: sync changelog 0.13.1 & 0.14 (#620)
* docs(changelog): sync 0.13.1 from apps/kimi-code/CHANGELOG.md

* docs(changelog): sync 0.14.0 from apps/kimi-code/CHANGELOG.md
2026-06-10 20:54:26 +08:00
Haozhe
7ec738c4a1
fix(agent-core): suppress premature stream close on shell timeout or kill (#604)
- Add terminating-state guard to skip ERR_STREAM_PREMATURE_CLOSE when a process is killed or times out
- Ensure timeout/kill reason is reported instead of the internal stream error
- Add changeset for agent-core and kimi-code
2026-06-10 20:02:47 +08:00
Haozhe
0ee91066ea
fix(acp-adapter): convert Unix paths to Windows separators for ACP file RPC (#628)
- fix readTextFile and writeTextFile to use backslash separators on win32
- add changeset for acp-adapter and kimi-code
2026-06-10 20:00:54 +08:00
github-actions[bot]
ecc0496115
ci: release packages (#621)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-10 18:31:01 +08:00
7Sageer
856ec00290
fix: preserve tool result images in chat completions (#626) 2026-06-10 18:09:53 +08:00
qer
b253a82a7a
feat(agent-core): add Interrupt hook for user-interrupted turns (#607)
Fires an observation-only Interrupt event when a turn is aborted by the user (e.g. pressing Esc). Previously neither Stop nor StopFailure fired on interrupt, so external tooling that tracks status from hooks stayed stuck on a working state.
2026-06-10 15:35:25 +08:00
github-actions[bot]
3f9226f014
ci: release packages (#608)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-10 15:11:40 +08:00
liruifengv
1fbe0e4ee8
fix: truncate goal marker text to terminal width (#619) 2026-06-10 15:09:33 +08:00
_Kerman
b853823609
chore: undo selector as a patch (#618) 2026-06-10 14:44:51 +08:00
_Kerman
494554eac5
feat: add undo selector (#615) 2026-06-10 14:22:02 +08:00
Haozhe
4603d8ad6e
feat(protocol): extract shared protocol package from agent-core (#612)
* feat(protocol): extract shared protocol package from agent-core

- add `@moonshot-ai/protocol` package with REST/WS schemas, envelopes, error codes, event types, and display schemas\n- migrate agent-core `events.ts` and `display/schemas.ts` to re-export from protocol
- add centralized `onUnexpectedError` handler for safe emitter listener callbacks
- reject forkSession when source session has an active running turn
- add protocol schema tests and unexpectedError handler tests
2026-06-10 14:03:38 +08:00
7Sageer
95a124804e
chore: downgrade Fable 5 changeset to patch (#614) 2026-06-10 13:54:27 +08:00
7Sageer
b747c6a950
feat(kosong): support claude-fable-5 with adaptive thinking (#610)
* feat(kosong): support claude-fable-5 adaptive thinking

claude-fable-5 only accepts thinking: {type: "adaptive"} with
output_config.effort; the legacy enabled/budget_tokens config and an
explicit disabled config both return HTTP 400.

- Parse the fable family in Claude model ids (major-only version)
- Route fable >= 5 to adaptive thinking; allow xhigh effort
- Omit the thinking field entirely when thinking is off on fable
- Register the 128k output ceiling and thinking/vision capability

* update .changeset

Updated the configuration to use adaptive thinking for Claude Fable 5 support.

Signed-off-by: 7Sageer <12210216@mail.sustech.edu.cn>

---------

Signed-off-by: 7Sageer <12210216@mail.sustech.edu.cn>
2026-06-10 13:15:24 +08:00
liruifengv
32d7080837
fix(skill): clarify active skill prompts (#598)
* fix(skill): clarify active skill prompts

* fix(skill): preserve nested skill trigger
2026-06-10 12:46:23 +08:00
7Sageer
1580f35136
fix: align datasource plugin environment (#595)
* fix: align datasource plugin environment

* refactor: inject managed Kimi env into all stdio plugins

Pin the datasource credential-name test to the canonical
resolveKimiCodeOAuthKey so a digest drift in the standalone plugin
fails CI, and drop the hardcoded plugin-name special case so every
stdio plugin receives the active managed Kimi base URL / OAuth host
consistently (process.env and KIMI_CODE_HOME are already shared with
all plugins).
2026-06-10 12:42:27 +08:00
Luyu Cheng
2ebe38769f
feat(agent-core): strengthen Edit-over-Write preference in tool prompts (#540) 2026-06-10 12:22:25 +08:00
_Kerman
a1b419ab59
fix: stop asking for yolo external writes (#606) 2026-06-10 12:19:33 +08:00
liruifengv
99b3748dbe
docs(changelog): sync 0.12.1, 0.13.0 from apps/kimi-code/CHANGELOG.md (#605) 2026-06-10 11:09:20 +08:00
github-actions[bot]
25cf13ac97
ci: release packages (#588)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-10 10:47:32 +08:00
qer
40506f49d6
feat(tui): show available plugin updates in the marketplace (#593)
Installed plugins whose marketplace version is newer than the local
version now render an `update <local> → <latest>` badge and update in
place on Enter; up-to-date plugins show `installed · v<version>`.

Dev-server and CDN-build marketplace generation now stamp each entry's
version from the plugin manifest so the advertised "latest" stays accurate.
Adds a pure computeUpdateStatus() (semver, no spurious downgrades) with tests.

Co-authored-by: qer <Anna_Knapprfr@mail.com>
2026-06-09 21:28:36 +08:00
liruifengv
46f909d694
docs: add built-in skill commands section to slash-commands and skills pages (#596) 2026-06-09 20:39:33 +08:00
7Sageer
e48234af57
fix: avoid Windows command shim launches (#591) 2026-06-09 20:20:44 +08:00
liruifengv
f2863af267
fix: keep login fallback prompt visible (#594) 2026-06-09 20:06:07 +08:00
liruifengv
0abde8662a
fix(tui): clarify grouped subagent progress (#587) 2026-06-09 19:21:46 +08:00
liruifengv
f863127ab7
feat: custom color themes (#484)
* Refactor theme

* custom theme support

* docs: add custom themes guide

Document the custom theme file location, the color token reference, selecting a theme via /theme and tui.toml, and fallback behavior. Link it from the customization sidebar and the tui.toml theme field.

* feat(skill): add built-in custom-theme skill

Guides the model (or a manual /custom-theme run) to author a theme JSON in ~/.kimi-code/themes/: docs token reference, deliberate color choices, hex validation, and how to apply via /theme or /reload-tui. Note in the write-tui skill to keep the token set in sync across colors.ts, the schema, the docs, and this skill. Enrich the custom-theme changeset to cover all three usage paths.

* chore: remove theme research report

* fix(tui): resolve lint errors after main merge

Remove unused chalk/currentTheme/ResolvedTheme imports left by the theme refactor; break the theme <-> pi-tui-theme import cycle by dropping the markdown/editor theme getters from the Theme class (consumers call createMarkdownTheme directly); fix unused vars/params, a floating promise, and a redundant union type.

* fix(tui): address custom theme review feedback

- await applyTheme before refreshing terminal theme tracking, so
  switching to "auto" installs the watcher against the new state
- invalidate the transcript on automatic (terminal-driven) theme
  changes so already-rendered entries repaint
- rebuild UsagePanel bodies on invalidate (previously a no-op); /usage,
  /status, /mcp and /plugins now repaint on a theme switch
- repaint the compaction header on invalidate
- validate a custom theme before applying it from the /theme picker
- hide reserved dark/light/auto names from the custom theme list
- escape the theme name when writing tui.toml
- stop the custom theme loader writing warnings to the raw terminal
- remove a stray hello.ts

* refactor(tui): polish custom theme feature

- footer and todo-panel read the currentTheme singleton directly at
  render time instead of caching a palette copy; drop their setColors
  methods and the manual setColors calls on every theme change
- support "base": "dark" | "light" in custom theme files so a partial
  light theme inherits the light palette for unspecified tokens
- reconcile the docs and the custom-theme skill with the silent
  invalid-color fallback (no terminal warning)

* refactor(tui): live-repaint the agent swarm progress panel

Read the currentTheme palette through a getter instead of caching it at
construction time, so the swarm progress panel recolors on a theme switch
like the rest of the transcript. Drops the now-unused `colors` option.

* chore: remove plan.md

* docs: update custom theme guide

* docs: document custom theme skill command

* fix(skill): make custom theme user-triggered only
2026-06-09 18:55:15 +08:00
liruifengv
d85dc0b96a
feat: add Claude Codex import skill (#582) 2026-06-09 18:44:10 +08:00
liruifengv
7cb4a23e01
fix: truncate queued messages to a single line (#586) 2026-06-09 17:26:41 +08:00
github-actions[bot]
c79972c28c
ci: release packages (#585)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 17:02:42 +08:00
liruifengv
11bb62c12f
fix: allow obsolete experimental config entries (#584)
* fix: allow obsolete experimental config entries

* docs: remove config docs update from PR
2026-06-09 17:00:48 +08:00
7Sageer
aa3471f5d3
fix(kosong): pass through chat reasoning effort (#581) 2026-06-09 16:59:41 +08:00
liruifengv
75a894e9ad
docs(changelog): sync 0.12.0 from apps/kimi-code/CHANGELOG.md (#571) 2026-06-09 12:17:20 +08:00
github-actions[bot]
20f7aa337a
ci: release packages (#491)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 11:54:52 +08:00