Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
0401ec4
refactor(agent-core-v2): extract btw into a features/btw Feature unit…
sailist Aug 10, 2026
2acf22f
refactor(agent-core-v2): invert sessionLifecycle/MCP dependency via l…
sailist Aug 11, 2026
71ff2a0
fix(kimi-code): close pre-trust-gate bare command resolution on Windo…
sailist Aug 11, 2026
e702817
fix(agent-core-v2): degrade idle-session steer to turn launch like v1…
sailist Aug 11, 2026
8603549
feat(agent-core-v2): add event-subscription introspection (#2806)
sailist Aug 11, 2026
64abebc
fix(apps/kimi-code): allow deselecting Other option in multi-select q…
huangzheng2016 Aug 11, 2026
158c81d
fix: surface a readable error when Git Bash is missing on Windows (#2…
huangzheng2016 Aug 11, 2026
ad12ad8
feat(kimi-code): show live background agent activity in the /tasks pa…
liruifengv Aug 11, 2026
911d41b
chore(changesets): simplify pending CLI changelog entries (#2823)
liruifengv Aug 11, 2026
619564d
fix(kap-server): add WebSocket heartbeat to survive proxy idle timeou…
wbxl2000 Aug 11, 2026
e5be391
fix(kimi-code): resolve footer git status commands through PATH (#2838)
sailist Aug 12, 2026
3c9e3b2
feat(kimi-code): paginate the session picker list (#2826)
liruifengv Aug 12, 2026
df8ce73
feat(kimi-code): show step retry progress in the activity indicator (…
liruifengv Aug 12, 2026
68ce3c7
chore: sync web dist from code-app (#2840)
wbxl2000 Aug 12, 2026
101c4d1
feat(agent-core-v2): remove Agent and AgentSwarm from builtin profile…
sailist Aug 12, 2026
f6ee44e
ci: release packages (#2710)
github-actions[bot] Aug 12, 2026
3fc841f
docs(changelog): sync 0.35.0 from apps/kimi-code/CHANGELOG.md (#2841)
liruifengv Aug 12, 2026
26ddc1d
feat(plugins): add Modern Web Guidance to marketplace (#2842)
wbxl2000 Aug 12, 2026
dc8db90
docs(server): add local server guide and API reference (#2839)
sailist Aug 12, 2026
26a37f3
fix(kap-server): restrict debug RPC fallback to feature-contributed s…
sailist Aug 12, 2026
c212ae9
fix(kimi-code): show MCP launch targets in the workspace trust prompt…
sailist Aug 12, 2026
43c68f5
feat(agent-core-v2): keep session updatedAt stable across meta manage…
liruifengv Aug 12, 2026
f40bf04
refactor(agent-core-v2): unify model-facing reminder scheduling (#2623)
7Sageer Aug 12, 2026
3b0936d
fix(agent-core): only discover the root SKILL.md for plugin skills fa…
sailist Aug 12, 2026
35d9a36
chore(changelog): thank security reporters in 0.35.0 entry (#2845)
liruifengv Aug 12, 2026
ec84a6f
feat(kimi-code): re-baseline pi-tui on upstream v0.84.1 and add fulls…
liruifengv Aug 12, 2026
30f56a2
fix(agent-core-v2): disable SDK-internal retries that blocked cancell…
liruifengv Aug 12, 2026
fe3cdae
fix(agent-core-v2): drop interrupted thinking-only assistant messages…
7Sageer Aug 12, 2026
719da94
chore: rebuild web dist against kimi-code 0.35.0 (#2853)
wbxl2000 Aug 12, 2026
23e68ee
refactor(agent-core-v2): remove the agent RPC aggregation layer (#2871)
sailist Aug 13, 2026
504e629
feat(mcp): inspect effective authorization state in v1 (#2856)
pvzheroes125 Aug 13, 2026
c9bfe8b
feat: replace the secondary-model experiment with a declarative subag…
7Sageer Aug 13, 2026
6e31722
chore: drop deprecations for unreleased [subagent] pool keys (#2877)
7Sageer Aug 13, 2026
314b394
refactor(agent-core-v2): extract swarm into a scope-organized feature…
sailist Aug 13, 2026
b6144f9
ci: release packages (#2846)
github-actions[bot] Aug 13, 2026
f8a88c1
docs(changelog): sync 0.36.0 from apps/kimi-code/CHANGELOG.md (#2880)
liruifengv Aug 13, 2026
5912d4c
fix: stop repeated file-watcher errors on Windows drive-root and UNC …
7Sageer Aug 13, 2026
6be2697
feat: auto-generate session titles via the managed chat_title tool (#…
7Sageer Aug 13, 2026
4739284
refactor(features): extract session init feature (#2887)
sailist Aug 13, 2026
1811bd4
fix(tui): keep banner main text readable with long tags on narrow ter…
liruifengv Aug 13, 2026
4a93f70
feat(oauth): add browser-safe ./device subpath export (#2885)
liruifengv Aug 13, 2026
4425409
fix(features): retract contributed service metadata (#2886)
sailist Aug 13, 2026
c60e3e3
docs: drop legacy secondary-model content and unify subagent terminol…
7Sageer Aug 13, 2026
67e73f3
refactor(agent-core-v2): extract date change feature (#2895)
sailist Aug 13, 2026
0473b3a
test(minidb): deflake the evict-lru compaction-churn guard (#2892)
7Sageer Aug 13, 2026
5857ba2
test(kap-server): deflake three timing-sensitive tests (#2894)
7Sageer Aug 13, 2026
1414d46
refactor(agent-core-v2): fold session lifecycle hooks into sessionLif…
sailist Aug 13, 2026
102984a
fix: settle cancelled MCP OAuth callbacks (#2899)
oocz Aug 13, 2026
287ff23
chore: sync upstream/main (0.36.0) into the fork
mbuckaway Aug 13, 2026
61cc132
test: align fork-identity and removed-API assertions with the 0.36 sync
mbuckaway Aug 13, 2026
b4e8c90
test(tui): supply supermoonMode in the fullscreen-layout fixture
mbuckaway Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .agents/skills/agent-core-dev/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ pass `ConfigTarget.Memory` for a per-run override that is never written to disk.
- `src/kosong/model/thinking.ts` (owner domain, not `config`) — the `resolveThinkingEffort` helper and the authoritative `ThinkingConfig` type (the `thinking` section itself registers from `src/app/kosongConfig/configSection.ts`).
- `src/app/config/configPure.ts` — `isPlainObject`, `deepMerge`, `omitUndefined`, `describeUnknownError`.

A domain that owns a section keeps the schema in its own `configSection.ts` (e.g. `src/app/flag/flag.ts` for `experimental`, `src/agent/loop/configSection.ts` for `loopControl`). Exception: kosong-owned sections (`providers`, `models`, `thinking`) — kosong is a pure, persistence-free abstraction layer that defines only the types (`src/kosong/{provider,model}`); the section constants, the zod schemas (re-derived from those types and compile-time pinned via `AssertExact<Equal<z.infer<typeof Schema>, Type>>`, see `_base/utils/typeEquality.ts`), the registrations, env bindings, and TOML transforms all live in the persistence wrapper `src/app/kosongConfig/configSection.ts`. (`modelCatalog` and `secondaryModel` have no kosong-side type at all — their sections are fully self-contained in `app/kosongConfig`, types derived from the schemas.) A cross-section env overlay (e.g. the `KIMI_MODEL_*` synthesis) lives in the wrapper too (`src/app/kosongConfig/envOverlay.ts`; the `[secondary_model]` derived-entry synthesis in `secondaryModelOverlay.ts`) and is registered via module-level `registerConfigOverlay`. The two-way sync between config sections and kosong's in-memory registries is owned by `IKosongConfigService` (`src/app/kosongConfig/kosongConfigService.ts`).
A domain that owns a section keeps the schema in its own `configSection.ts` (e.g. `src/app/flag/flag.ts` for `experimental`, `src/agent/loop/configSection.ts` for `loopControl`). Exception: kosong-owned sections (`providers`, `models`, `thinking`) — kosong is a pure, persistence-free abstraction layer that defines only the types (`src/kosong/{provider,model}`); the section constants, the zod schemas (re-derived from those types and compile-time pinned via `AssertExact<Equal<z.infer<typeof Schema>, Type>>`, see `_base/utils/typeEquality.ts`), the registrations, env bindings, and TOML transforms all live in the persistence wrapper `src/app/kosongConfig/configSection.ts`. (`modelCatalog` has no kosong-side type at all — its section is fully self-contained in `app/kosongConfig`, types derived from the schema.) A cross-section env overlay (e.g. the `KIMI_MODEL_*` synthesis in `src/app/kosongConfig/envOverlay.ts`) lives in the wrapper too and is registered via module-level `registerConfigOverlay`. The session subagent domain owns two sections in `src/session/subagent/configSection.ts`: `[subagent]` (`timeout_ms` on disk) and `[secondary_model]` (`default_model` plus the `[secondary_model.models]` pool, with a lone legacy v1 `model` key honored as a fallback default below `default_model`); neither carries a cross-section overlay. Cross-field pool validation (default present / in-pool / every key resolvable) runs at session creation in `subagentModelsValidationService.ts`, not in the schema. The two-way sync between config sections and kosong's in-memory registries is owned by `IKosongConfigService` (`src/app/kosongConfig/kosongConfigService.ts`).

## Scope

Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/agent-core-dev/edge-exposure.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ A Service method is directly exposable iff **all** hold:
3. Errors are `KimiError` (coded).
4. It is a command/query, not a factory, stream, byte-store, or sink.

If any fail → wrap in a **facade** (a Service that takes ids, returns data, throws `KimiError`) and expose the facade. The repo already ships a wire-shaped facade in `rpc/core-api.ts` (`CoreAPI` / `SessionAPI` / `AgentAPI`) behind `IAgentRPCService` / `ISessionRPCService` — prefer building the HTTP edge on top of it rather than re-deriving a new one.
If any fail → add a wire-safe orchestration method to the owning domain Service (e.g. `IAgentPromptService.submit` settles `{turn_id}` instead of returning the live `PromptHandle`) or compose several domain Services at the edge — kap-server's `routes/prompts.ts` is the reference for edge-side composition.

## 3. Per-scope `resource:action` map

Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/agent-core-dev/server-align.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ const route = defineRoute(
app.post(route.path, route.options, route.handler);
```

**For `/api/v2` (native):** add a `resource:action` entry to `actionMap` ([edge-exposure.md](edge-exposure.md) §3). If the method fails the direct-exposure rules (returns a handle / stream / bytes, takes a live object), wrap it in a wire-shaped facade first (`IAgentRPCService` / `ISessionRPCService`) and map to the facade — as `prompts:*` does via `IAgentRPCService`.
**For `/api/v2` (native):** add a `resource:action` entry to `actionMap` ([edge-exposure.md](edge-exposure.md) §3). If the method fails the direct-exposure rules (returns a handle / stream / bytes, takes a live object), add a wire-safe orchestration method to the owning domain Service first — as `prompts:submit` maps to `IAgentPromptService.submit`, which settles `{turn_id}` engine-side instead of returning the live `PromptHandle`.

### 5. Map errors

Expand Down Expand Up @@ -218,7 +218,7 @@ This is the reference alignment (commits `feat(server-v2): port v1 /sessions/:si

**The split.**

- `/api/v2` keeps the native shape — `prompts:submit` / `steer` / `undo` / `clear` / `cancel` map to `IAgentRPCService` (a wire facade over the v2 turn driver) in `actionMap`. The native `IAgentPromptService` is untouched.
- `/api/v2` keeps the native shape — `prompts:submit` / `steer` / `undo` / `clear` / `cancel` map to the domain Services (`IAgentPromptService.submit` / `submitSteer`, `IAgentConversationUndoService.undo`, `IAgentLoopService.cancelFromUser`) in `actionMap`.
- `/api/v1` gets an `AgentPromptLegacyService` (`prompt/`, `LifecycleScope.Agent`) that re-implements the v1 scheduler — queue, `prompt_id`, steer/abort, auto-start-next — **on top of** the native `IAgentPromptService`. The `/api/v1` routes consume the LegacyService.

**The schema.** Both surfaces import `promptSubmissionSchema` / `promptSubmitResultSchema` / `promptListResponseSchema` / `promptSteerRequestSchema` / `promptSteerResultSchema` / `promptAbortResponseSchema` from the shared v1 wire schemas (see `packages/kap-server/src/protocol`). The `/api/v1` and `/api/v2` routes are therefore compatible with released clients by construction; the LegacyService projects v2 turn results back into those protocol shapes.
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/agent-core-dev/service-authoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ File names derive from the interface / class names so that scope and role are vi
| Shared-types file | `<domain>.types.ts` | `log.types.ts` |
| Errors file | `<name>.errors.ts` | `appendLogStore.errors.ts` |

Acronym-aware lowerCamelCase lowercases a leading acronym as a group: `ILLMRequester` → `llmRequester.ts`, `IWSGateway` → `wsGateway.ts`, `IOAuthToolkit` → `oauthToolkit.ts`, `IAgentRPCService` → `agentRpcService.ts`.
Acronym-aware lowerCamelCase lowercases a leading acronym as a group: `ILLMRequester` → `llmRequester.ts`, `IWSGateway` → `wsGateway.ts`, `IOAuthToolkit` → `oauthToolkit.ts`, `IMcpServerService` → `mcpServerService.ts`.

Because the impl class always ends in `Service` and the interface file never does, the two files of one service never collide — even for `Store` / `Registry` / `Resolver` interfaces (`IAppendLogStore` → `appendLogStore.ts` + `appendLogStoreService.ts`).

Expand Down
5 changes: 5 additions & 0 deletions .changeset/agent-core-v2-session-title.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/agent-core-v2": minor
---

Add the Session-scoped `ISessionTitleService` for managed AI session titles: composes the excerpt sent to the platform chat_title tool from the main agent's conversation (the first user prompts, the strict `first_turn` pair, or the head+tail `digest` for multi-turn sessions; assistant segments keep only final text), persists the result with a `titleKind` (`replaceable` / `generated` / `custom`) that never overwrites a user-renamed title unless explicitly forced, and rebroadcasts `session.meta.updated`. Gated by the new experimental `auto_session_title` flag and a managed OAuth login.
5 changes: 5 additions & 0 deletions .changeset/auto-session-title.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code-sdk": minor
---

Add `generateSessionTitle` (v2 engine) for managed AI session titles: optional `force` regeneration over generated/custom titles and selectable conversation excerpts (`user_prompts` / `first_turn` / `digest`). Gated by the experimental `auto_session_title` flag and a managed OAuth login.
6 changes: 0 additions & 6 deletions .changeset/calm-mcp-auth-probe.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/compaction-token-full-request-basis.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/fix-banner-long-tag-narrow-terminal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Fix startup banner text wrapping on narrow terminals.
5 changes: 5 additions & 0 deletions .changeset/fix-mcp-oauth-cancel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Fix MCP OAuth cancellation leaving an in-flight authorization waiting for its callback timeout.
5 changes: 0 additions & 5 deletions .changeset/fix-tui-startup-freeze.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/fix-windows-project-root-watch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Fix repeated file-watcher errors on Windows when the workspace is a drive root (such as `E:\`) or a UNC network share.
5 changes: 0 additions & 5 deletions .changeset/isolate-session-profile-catalogs.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/kap-server-session-title-route.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kap-server": patch
---

Add `POST /api/v1/sessions/{session_id}/title/generate` with an optional `{ "force": true, "source": "user_prompts" | "first_turn" | "digest" }` body; unknown sessions return 40401 and unavailable generation (flag off, no managed login, no prompt yet, backend failure) returns the new 40923 SESSION_TITLE_UNAVAILABLE.
5 changes: 5 additions & 0 deletions .changeset/klient-session-title.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/klient": patch
---

Expose `session(id).generateTitle({ force, source })` on the session facade and the matching `sessionTitleService` wire contract.
5 changes: 5 additions & 0 deletions .changeset/oauth-chat-title.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code-oauth": patch
---

Add `fetchChatTitle` for the managed platform `/tools` `chat_title` method: protocol headers, an 8s timeout, response validation, and structured failures.
5 changes: 5 additions & 0 deletions .changeset/oauth-device-subpath-export.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code-oauth": minor
---

Add a browser-safe `./device` subpath export exposing the device-code flow's pure-fetch HTTP wrappers and flow config, so browser bundles can run OAuth sign-in without pulling in Node-only modules. Import from `@moonshot-ai/kimi-code-oauth/device`.
5 changes: 0 additions & 5 deletions .changeset/quiet-mcp-auth-status.md

This file was deleted.

1 change: 1 addition & 0 deletions apps/kimi-code/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ The theme apply/switch mechanics live in the `write-tui` skill. The following ru

## General Coding Requirements

- The startup path before the workspace trust gate (`KimiTUI.start()` -> `maybeRunWorkspaceTrustPrompt()`) must not spawn child processes by bare command name — on Windows, cmd.exe / CreateProcess resolve them from the current directory first, so a binary planted in an untrusted workspace would run before the user confirms trust. When an external command is unavoidable, resolve it with `resolveCommandPath` from `src/utils/process/resolve-command.ts`, which returns an absolute PATH hit and refuses matches inside the cwd.
- For optional object properties, pass `undefined` directly — do not use conditional spread.
- Optional object properties do not need to additionally allow `undefined` in the type.
- Internal methods with only a single parameter should not be turned into options objects just for stylistic uniformity.
Expand Down
Loading
Loading