Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
bec34e1
docs(changelog): sync 0.40.0 from apps/kimi-code/CHANGELOG.md (#3457)
wbxl2000 Sep 2, 2026
ad5f0a5
fix(agent-core-v2): re-remind uninjected AGENTS.md on directory acces…
7Sageer Sep 2, 2026
cb11fc4
fix(migration-legacy): stop re-prompting for kimi-cli migration once …
sailist Sep 2, 2026
979baad
chore: add changeset for the kimi-cli migration re-prompt fix (#3469)
sailist Sep 2, 2026
0d56222
chore(changesets): drop unpublished @moonshot-ai/kimi-code entries (#…
liruifengv Sep 2, 2026
0d45ddd
ci: release packages (#3456)
github-actions[bot] Sep 2, 2026
b6b9b37
feat(agent-core-v2): add a handoff step after forced stops and report…
RealKai42 Sep 2, 2026
a708769
docs(changelog): sync 0.40.1 from apps/kimi-code/CHANGELOG.md (#3475)
liruifengv Sep 2, 2026
d567a6a
feat(kimi-code): show file-change warning when switching to ask-when-…
7Sageer Sep 2, 2026
e2e5859
docs: annotate renamed permission modes with bilingual names and form…
wenhua020201-arch Sep 2, 2026
9f866cb
refactor(agent-core-v2): rebuild telemetry context as a scope-bound l…
7Sageer Sep 2, 2026
eb4cd4b
fix(agent-core-v2): assemble flag-gated features after config ready (…
7Sageer Sep 2, 2026
8057d30
fix(tower): support config.toml configuration (#3461)
tpoisonooo Sep 2, 2026
7570892
fix(kap-server): stop exiting the process on uncaughtException (#3477)
sailist Sep 2, 2026
c52d583
docs: remove agent-core-v2, kap-server, and transcript package docs (…
sailist Sep 2, 2026
b6f78f9
Revert "fix(agent-core-v2): assemble flag-gated features after config…
7Sageer Sep 2, 2026
0faa878
fix(agent-core-v2): write the bound model into the ambient telemetry …
7Sageer Sep 2, 2026
052e98e
fix(agent-core-v2): rebuild persisted subagents when resuming after a…
RealKai42 Sep 2, 2026
a3f5eec
merge: sync upstream/main 18 commits (2026-09-03) into fork
arrrrny Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/compact-threshold-token-budget.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@moonshot-ai/kimi-code": minor
"@moonshot-ai/kimi-code-sdk": minor
---

Add `/compact-threshold-k [<thousands>|off]` slash command: set a session-scoped absolute compaction trigger in thousands of tokens (e.g. `/compact-threshold-k 120` triggers at 120 000 tokens, regardless of the active model's context size). Mirrors the existing `/compact-threshold` (ratio) command but takes an absolute token cap. The SDK exposes `Session.setCompactionTokenBudget(tokens?)` and the session status payload now includes `compactionTokenBudget` / `compactionTokenBudgetOverridden`.
5 changes: 5 additions & 0 deletions .changeset/drop-subagent-summary-bounce.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Subagent final messages are no longer bounced back for expansion when they are under 200 characters.
5 changes: 0 additions & 5 deletions .changeset/file-history-turn-snapshots.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/permission-mode-file-warning.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Show a warning after switching to Ask When Needed or Never Ask mode.
5 changes: 5 additions & 0 deletions .changeset/resume-subagent-after-restart.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Resuming a subagent by its agent id now works after the session is reopened in a new process; the resumed subagent follows the current permission mode and is matched by its own profile in permission rules.
5 changes: 0 additions & 5 deletions .changeset/sdk-suggest-files.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/tower-mode-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@moonshot-ai/kimi-code": patch
---

Tower mode (experimental, `KIMI_CODE_EXPERIMENTAL_TOWER=1`): fix tower mode never starting when enabled through `[experimental] tower = true` in `config.toml` instead of the environment variable. When tower mode cannot be enabled, the error now names the actual blocker — the disabled experiment, a required restart, or the owning session. When another live session owns the workspace tower, the message also names the owning session's title alongside its id. /tower now also works in a directory that is not a git repository — it runs git init and commits what is there (an empty initial commit for empty directories).
5 changes: 0 additions & 5 deletions .changeset/vscode-at-engine-suggest.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/vscode-at-menu-entries.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/vscode-at-scroll-jitter.md

This file was deleted.

8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,14 @@ zread generate --stdio
- `apps/vis`, `apps/vis/server`, `apps/vis/web`: visual debugging tools for sessions and replays.
- `apps/kimi-inspect`: web inspector for the kap-server `/api/v1/debug` RPC surface — workspace/session browser, per-session transcript chat, per-scope Service panels, and the DI unit inspection view. See `apps/kimi-inspect/AGENTS.md`.
- `packages/agent-core`: the unified agent engine, including Agent, Session, profile, skills, tools, plan, permission, background, records, the in-process DI service layer (`src/services/`), and other core capabilities. See `packages/agent-core/AGENTS.md`.
- `packages/agent-core-v2`: the DI × Scope agent engine (the v2 port behind kap-server). Four `LifecycleScope` tiers — `App` / `Workspace` / `Session` / `Agent` (`app/scopes.ts`) — plus the L3 unit layer (`Service`/`Fiber` units, collection contribution points, the Feature seam in `src/features/`); there is no App-level session lifecycle facade — callers compose `ISessionIndex` → `IWorkspaceLifecycleService.handlerFor` → the handler. See `packages/agent-core-v2/AGENTS.md` and use the `agent-core-dev` skill (`.agents/skills/agent-core-dev/SKILL.md`) when developing here.
- `packages/agent-core-v2`: the DI × Scope agent engine (the v2 port behind kap-server). Four `LifecycleScope` tiers — `App` / `Workspace` / `Session` / `Agent` (`app/scopes.ts`) — plus the L3 unit layer (`Service`/`Fiber` units, collection contribution points, the Feature seam in `src/features/`); there is no App-level session lifecycle facade — callers compose `ISessionIndex` → `IWorkspaceLifecycleService.handlerFor` → the handler.
- `packages/node-sdk`: the public TypeScript SDK and harness.
- `packages/kosong`: the LLM / provider abstraction layer.
- `packages/kaos`: the execution environment and file/process abstractions.
- `packages/oauth`: Kimi OAuth and managed auth utilities.
- `packages/telemetry`: shared client-side telemetry infrastructure.
- `packages/transcript`: the isomorphic transcript rendering data layer — L1 agent-granular store, L2 idempotent operations, L3 `off/turn/block/delta` subscription granularity, L4 framework-free view registry, plus turn-cursor pagination. Pure TypeScript (browser-safe, no engine imports); the sole owner of the transcript contract types (`src/contract/`) and the op-batch sequencing contract. See `packages/transcript/AGENTS.md`.
- `packages/kap-server`: the Kimi Code server, backed by `@moonshot-ai/agent-core-v2`; exposes sessions over REST + WebSocket (`/api/v1` + `/api/v1/ws`), plus the `/api/v1/debug/*` reflection RPC surface (`--debug-endpoints`, loopback bind + bearer auth). See `packages/kap-server/AGENTS.md`.
- `packages/transcript`: the isomorphic transcript rendering data layer — L1 agent-granular store, L2 idempotent operations, L3 `off/turn/block/delta` subscription granularity, L4 framework-free view registry, plus turn-cursor pagination. Pure TypeScript (browser-safe, no engine imports); the sole owner of the transcript contract types (`src/contract/`) and the op-batch sequencing contract.
- `packages/kap-server`: the Kimi Code server, backed by `@moonshot-ai/agent-core-v2`; exposes sessions over REST + WebSocket (`/api/v1` + `/api/v1/ws`), plus the `/api/v1/debug/*` reflection RPC surface (`--debug-endpoints`, loopback bind + bearer auth).
- `packages/klient`: the client SDK — a contract-driven facade over agent-core-v2 (`global.*` / `session(id).*` / `agent(id).*`, zod-validated); transport via subpath entry (`@moonshot-ai/klient/ipc|memory`, both return the same `Klient`); also hosts the e2e suites. See `packages/klient/AGENTS.md`.
- `packages/tree-sitter-bash`: a pure-TypeScript bash parser (no runtime deps, no wasm); `parse(source, { timeoutMs, maxNodes })` runs under a deterministic budget and returns a discriminated `ParseResult` — callers must treat aborted/hasError trees as "cannot analyze" and degrade. Parser only, no safety judgments; see the package README's "Known differences" section.
- `packages/minidb`: the embedded JSON document store (`MiniDb`) behind kap-server's search index — snapshot + WAL persistence with an exclusive write lock, a larger-than-RAM full-text layer, and persistent index generations. See `packages/minidb/AGENTS.md`.
Expand Down Expand Up @@ -117,7 +117,7 @@ zread generate --stdio

- Gate a not-yet-public feature behind an experimental flag. Flags are env-driven and default off: `KIMI_CODE_EXPERIMENTAL_<NAME>` toggles one, `KIMI_CODE_EXPERIMENTAL_FLAG` enables all. Precedence is per-flag env > `[experimental]` config > master env > the flag's `default`. Release by flipping the entry's `default` to `true`.
- `packages/agent-core` (v1): add the flag to the central registry at `packages/agent-core/src/flags/registry.ts`, then check it with `flags.enabled('my-feature')`.
- `packages/agent-core-v2` and kap-server modules: there is no central catalog — declare the flag in the owning domain via `registerFlagDefinition` at import time (see `packages/agent-core-v2/docs/flag.md`), then check it with `IFlagService.enabled(id)`. Current search-index-separation flags: `persistence_minidb_readmodel` (session read model, default on) and `search_worker` (global search worker host, default on).
- `packages/agent-core-v2` and kap-server modules: there is no central catalog — declare the flag in the owning domain via `registerFlagDefinition` at import time, then check it with `IFlagService.enabled(id)`. Current search-index-separation flags: `persistence_minidb_readmodel` (session read model, default on) and `search_worker` (global search worker host, default on).

## Where to Update Instructions

Expand Down
6 changes: 6 additions & 0 deletions apps/kimi-code/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# @moonshot-ai/kimi-code

## 0.40.1

### Patch Changes

- [#3469](https://github.com/MoonshotAI/kimi-code/pull/3469) [`979baad`](https://github.com/MoonshotAI/kimi-code/commit/979baad8597aa1760917752b3663f1eb4e40eeb0) Thanks [@sailist](https://github.com/sailist)! - Fix the condition for showing the kimi-cli migration prompt.

## 0.40.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion apps/kimi-code/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@moonshot-ai/kimi-code",
"version": "0.40.0",
"version": "0.40.1",
"description": "The Starting Point for Next-Gen Agents",
"license": "MIT",
"author": "Moonshot AI",
Expand Down
6 changes: 3 additions & 3 deletions apps/kimi-code/src/cli/v2/run-v2-print.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ export async function runV2Print(
// model is reconciled via setContext once resolved.
telemetryService = app.accessor.get(ITelemetryService);
if (telemetryEnabled) {
telemetryService.setAppender(
telemetryService.addAppender(
createCloudAppender(app.accessor, {
deviceId,
appName: CLI_USER_AGENT_PRODUCT,
Expand All @@ -223,7 +223,7 @@ export async function runV2Print(
const resolved = await resolveNativeSession(app, opts, workDir, defaultModel, stderr);
restorePermission = resolved.restorePermission;

telemetryService.setContext({ sessionId: resolved.session.id, model: resolved.telemetryModel });
telemetryService.setContext({ session_id: resolved.session.id, model: resolved.telemetryModel });
if (firstLaunch) {
telemetryService.track2('first_launch');
}
Expand Down Expand Up @@ -253,7 +253,7 @@ export async function runV2Print(
}
writeResumeHint(resolved.session.id, outputFormat, stdout, stderr);

telemetryService.withContext({ sessionId: resolved.session.id }).track2('exit', {
telemetryService.withContext({ session_id: resolved.session.id }).track2('exit', {
duration_ms: Date.now() - startedAt,
});
} finally {
Expand Down
12 changes: 1 addition & 11 deletions apps/kimi-code/src/migration/detect-pending.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { existsSync } from 'node:fs';

import {
detectMigration,
countImportedSessionsNeedingRepair,
shouldSuppressMigration,
type MigrationPlan,
} from '@moonshot-ai/migration-legacy';
Expand Down Expand Up @@ -35,16 +34,8 @@ export async function detectPendingMigration(
): Promise<MigrationPlan | null> {
const { sourceHome, targetHome } = input;
if (!existsSync(sourceHome)) return null;
// Imported sessions an older migrator left without turn-structure records
// are unfinished migration work the completion marker must not hide — a
// repair need lifts the suppression. The scan is cheap (one state.json plus
// a wire-head read per imported session) and failure-tolerant.
const sessionsNeedingRepair = await countImportedSessionsNeedingRepair(targetHome).catch(
() => 0,
);
if (
input.ignoreMarker !== true &&
sessionsNeedingRepair === 0 &&
shouldSuppressMigration({ sourceHome, targetHome })
) {
return null;
Expand Down Expand Up @@ -73,9 +64,8 @@ export async function detectPendingMigration(
!plan.hasUserHistory &&
!plan.hasSkills &&
!plan.hasPlans &&
sessionsNeedingRepair === 0 &&
(plan.sessionScanFailures?.length ?? 0) === 0;
if (nothingToMigrate) return null;

return { ...plan, sessionsNeedingRepair };
return plan;
}
6 changes: 0 additions & 6 deletions apps/kimi-code/src/migration/migration-screen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -304,11 +304,6 @@ export class MigrationScreenComponent extends Container implements Focusable {
chalk.hex(colors.success)(` ✓ ${sum.sessions.sessionsMigrated} sessions migrated`),
);
}
if (sum.sessions.sessionsRepaired > 0) {
lines.push(
chalk.hex(colors.success)(` ✓ ${sum.sessions.sessionsRepaired} sessions repaired`),
);
}
if (sum.plans.copied > 0) {
lines.push(chalk.hex(colors.success)(` ✓ ${sum.plans.copied} plan files copied`));
}
Expand All @@ -325,7 +320,6 @@ export class MigrationScreenComponent extends Container implements Focusable {
}
if (
sum.sessions.sessionsMigrated === 0 &&
sum.sessions.sessionsRepaired === 0 &&
sum.plans.copied === 0 &&
migratedKinds.length === 0
) {
Expand Down
2 changes: 1 addition & 1 deletion apps/kimi-code/src/migration/run-headless.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ function logReport(
if (scope.sessions) {
log(
`sessions: scanned=${s.bucketsScanned} attempted=${s.sessionsAttempted} migrated=${s.sessionsMigrated}` +
` already-migrated=${s.sessionsAlreadyMigrated} repaired=${s.sessionsRepaired} skipped-empty=${s.sessionsSkippedEmpty}` +
` already-migrated=${s.sessionsAlreadyMigrated} skipped-empty=${s.sessionsSkippedEmpty}` +
` skipped-malformed=${s.sessionsSkippedMalformed} skipped-placeholder=${s.sessionsSkippedPlaceholder}` +
` failed=${s.sessionsFailed.length} conflicts=${s.sessionsConflicts.length}` +
(s.bucketsSkippedNonlocalKaos > 0 ? ` buckets-skipped-nonlocal-kaos=${s.bucketsSkippedNonlocalKaos}` : '') +
Expand Down
9 changes: 8 additions & 1 deletion apps/kimi-code/src/tui/commands/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import { ConfirmDialogComponent } from '../components/dialogs/confirm-dialog';
import { DEFAULT_TUI_CONFIG, saveTuiConfig, type TuiConfig } from '../config';
import type { ThemeName } from '#/tui/theme';
import { currentTheme, isBuiltInTheme, lightColors, loadCustomThemeMerged } from '#/tui/theme';
import { NO_ACTIVE_SESSION_MESSAGE } from '../constant/kimi-tui';
import { NO_ACTIVE_SESSION_MESSAGE, UNCONFIRMED_FILE_CHANGES_WARNING } from '../constant/kimi-tui';
import { formatErrorMessage } from '../utils/event-payload';
import { PERMISSION_MODE_DISPLAY_NAMES } from '../utils/permission-mode';
import { thinkingEffortToConfig } from '../utils/thinking-config';
Expand Down Expand Up @@ -149,6 +149,7 @@ export async function handleYoloCommand(host: SlashCommandHost, args: string): P
await session?.setPermission('yolo');
host.setAppState({ permissionMode: 'yolo' });
host.showNotice('Ask When Needed mode: ON', 'Routine edits and commands run automatically; risky actions, questions, and plans still ask.');
host.showStatus(UNCONFIRMED_FILE_CHANGES_WARNING, 'warning');
return;
}

Expand All @@ -172,6 +173,7 @@ export async function handleYoloCommand(host: SlashCommandHost, args: string): P
await session?.setPermission('yolo');
host.setAppState({ permissionMode: 'yolo' });
host.showNotice('Ask When Needed mode: ON', 'Routine edits and commands run automatically; risky actions, questions, and plans still ask.');
host.showStatus(UNCONFIRMED_FILE_CHANGES_WARNING, 'warning');
}
}

Expand All @@ -195,6 +197,7 @@ export async function handleAutoCommand(host: SlashCommandHost, args: string): P
await session?.setPermission('auto');
host.setAppState({ permissionMode: 'auto' });
host.showNotice('Never Ask mode: ON', 'Never interrupts you; everything runs and is decided automatically.');
host.showStatus(UNCONFIRMED_FILE_CHANGES_WARNING, 'warning');
return;
}

Expand All @@ -218,6 +221,7 @@ export async function handleAutoCommand(host: SlashCommandHost, args: string): P
await session?.setPermission('auto');
host.setAppState({ permissionMode: 'auto' });
host.showNotice('Never Ask mode: ON', 'Never interrupts you; everything runs and is decided automatically.');
host.showStatus(UNCONFIRMED_FILE_CHANGES_WARNING, 'warning');
}
}

Expand Down Expand Up @@ -1764,6 +1768,9 @@ async function applyPermissionChoice(host: SlashCommandHost, mode: PermissionMod

host.setAppState({ permissionMode: mode });
host.showNotice(`Permission mode: ${PERMISSION_MODE_DISPLAY_NAMES[mode]}`);
if (mode !== 'manual') {
host.showStatus(UNCONFIRMED_FILE_CHANGES_WARNING, 'warning');
}
}

export function showSettingsSelector(host: SlashCommandHost): void {
Expand Down
12 changes: 11 additions & 1 deletion apps/kimi-code/src/tui/commands/goal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
GoalStatusMessageComponent,
UpcomingGoalAddedMessageComponent,
} from '../components/messages/goal-panel';
import { LLM_NOT_SET_MESSAGE } from '../constant/kimi-tui';
import { LLM_NOT_SET_MESSAGE, UNCONFIRMED_FILE_CHANGES_WARNING } from '../constant/kimi-tui';
import {
appendGoalQueueItem,
moveGoalQueueItem,
Expand All @@ -25,6 +25,7 @@ import {
type GoalQueueSnapshot,
} from '../goal-queue-store';
import { formatErrorMessage } from '../utils/event-payload';
import { PERMISSION_MODE_DISPLAY_NAMES } from '../utils/permission-mode';
import { canRestoreSubmittedInput } from './resolve';
import type { SlashCommandHost } from './dispatch';

Expand All @@ -39,6 +40,7 @@ type GoalCommandHost = Pick<
| 'requireSession'
| 'setAppState'
| 'showError'
| 'showNotice'
| 'showStatus'
| 'track'
| 'mountEditorReplacement'
Expand Down Expand Up @@ -443,6 +445,14 @@ async function startGoalWithPermission(
// previous mode so the session is not left more permissive than before.
if (!started && switched) {
await setPermissionForGoal(host, previousMode);
return;
}
// Announce the switch only once the goal actually starts: shown earlier, a
// failed creation would leave a stale permissive-mode notice in the
// transcript even though the rollback above restored the previous mode.
if (switched) {
host.showNotice(`Permission mode: ${PERMISSION_MODE_DISPLAY_NAMES[choice]}`);
host.showStatus(UNCONFIRMED_FILE_CHANGES_WARNING, 'warning');
}
}

Expand Down
5 changes: 4 additions & 1 deletion apps/kimi-code/src/tui/commands/swarm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import {
SwarmModeMarkerComponent,
type SwarmModeMarkerState,
} from '../components/messages/swarm-markers';
import { LLM_NOT_SET_MESSAGE, NO_ACTIVE_SESSION_MESSAGE } from '../constant/kimi-tui';
import { LLM_NOT_SET_MESSAGE, NO_ACTIVE_SESSION_MESSAGE, UNCONFIRMED_FILE_CHANGES_WARNING } from '../constant/kimi-tui';
import { formatErrorMessage } from '../utils/event-payload';
import { PERMISSION_MODE_DISPLAY_NAMES } from '../utils/permission-mode';
import type { SlashCommandHost } from './dispatch';

export async function handleSwarmCommand(host: SlashCommandHost, args: string): Promise<void> {
Expand Down Expand Up @@ -85,6 +86,8 @@ async function setPermissionForSwarm(host: SlashCommandHost, mode: PermissionMod
return false;
}
host.setAppState({ permissionMode: mode });
host.showNotice(`Permission mode: ${PERMISSION_MODE_DISPLAY_NAMES[mode]}`);
host.showStatus(UNCONFIRMED_FILE_CHANGES_WARNING, 'warning');
return true;
}

Expand Down
11 changes: 9 additions & 2 deletions apps/kimi-code/src/tui/components/messages/status-message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,23 @@ export class NoticeMessageComponent extends Container {
this.titleText = new Text(` ${currentTheme.fg('textStrong', title)}`, 0, 0);
this.addChild(this.titleText);
if (detail !== undefined && detail.length > 0) {
this.detailText = new Text(` ${currentTheme.fg('textDim', detail)}`, 0, 0);
this.detailText = new Text(this.renderDetail(detail), 0, 0);
this.addChild(this.detailText);
}
}

override invalidate(): void {
this.titleText.setText(` ${currentTheme.fg('textStrong', this.title)}`);
if (this.detailText !== undefined && this.detail !== undefined) {
this.detailText.setText(` ${currentTheme.fg('textDim', this.detail)}`);
this.detailText.setText(this.renderDetail(this.detail));
}
super.invalidate();
}

// Indent every line, not just the first. The `detail` may be multi-line;
// prefixing the whole string once would only indent the first line and leave
// the rest at column 0 (same handling as StatusMessageComponent).
private renderDetail(detail: string): string {
return currentTheme.fg('textDim', detail).split('\n').map((line) => ` ${line}`).join('\n');
}
}
2 changes: 2 additions & 0 deletions apps/kimi-code/src/tui/constant/kimi-tui.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ export { DEFAULT_OAUTH_PROVIDER_NAME, OAUTH_LOGIN_REQUIRED_CODE, PRODUCT_NAME }

export const LLM_NOT_SET_MESSAGE = 'LLM not set, send "/login" to login';
export const NO_ACTIVE_SESSION_MESSAGE = 'No active session. Send /login to login.';
export const UNCONFIRMED_FILE_CHANGES_WARNING =
'In this mode, Kimi Code can modify or delete files without your confirmation';
export const CTRL_D_HINT = 'Press Ctrl+D again to exit';
export const CTRL_C_HINT = 'Press Ctrl+C again to exit';
export const MAIN_AGENT_ID = 'main';
Expand Down
Loading
Loading