From 260a80793a95d7796950a00bdc89cf99f8b196ad Mon Sep 17 00:00:00 2001 From: liruifengv Date: Tue, 7 Jul 2026 13:02:57 +0800 Subject: [PATCH] fix(cli): respect --skills-dir in interactive mode (#1457) The interactive shell entry point dropped opts.skillsDirs when building the harness, so --skills-dir only took effect in prompt mode. Forward it so the flag works in the TUI as documented. --- .../fix-skills-dir-in-interactive-mode.md | 5 ++++ apps/kimi-code/src/cli/run-shell.ts | 1 + apps/kimi-code/test/cli/run-shell.test.ts | 28 +++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 .changeset/fix-skills-dir-in-interactive-mode.md diff --git a/.changeset/fix-skills-dir-in-interactive-mode.md b/.changeset/fix-skills-dir-in-interactive-mode.md new file mode 100644 index 000000000..72b82a777 --- /dev/null +++ b/.changeset/fix-skills-dir-in-interactive-mode.md @@ -0,0 +1,5 @@ +--- +"@moonshot-ai/kimi-code": patch +--- + +Respect the --skills-dir flag in interactive mode. diff --git a/apps/kimi-code/src/cli/run-shell.ts b/apps/kimi-code/src/cli/run-shell.ts index f21046752..caeae907c 100644 --- a/apps/kimi-code/src/cli/run-shell.ts +++ b/apps/kimi-code/src/cli/run-shell.ts @@ -62,6 +62,7 @@ export async function runShell( const harness = createKimiHarness({ homeDir: telemetryBootstrap.homeDir, identity: createKimiCodeHostIdentity(version), + skillDirs: opts.skillsDirs, telemetry: telemetryClient, onOAuthRefresh: (outcome) => { if (outcome.success) { diff --git a/apps/kimi-code/test/cli/run-shell.test.ts b/apps/kimi-code/test/cli/run-shell.test.ts index 3fa673ab9..eafc4a9e0 100644 --- a/apps/kimi-code/test/cli/run-shell.test.ts +++ b/apps/kimi-code/test/cli/run-shell.test.ts @@ -241,6 +241,34 @@ describe('runShell', () => { }); }); + it('forwards skillsDirs from CLI options to the harness', async () => { + mocks.loadTuiConfig.mockResolvedValue({ + theme: 'dark', + editorCommand: null, + notifications: { enabled: true, condition: 'unfocused' }, + }); + mocks.tuiStart.mockResolvedValue(undefined); + + await runShell( + { + session: undefined, + continue: false, + yolo: false, + auto: false, + plan: false, + model: undefined, + outputFormat: undefined, + prompt: undefined, + skillsDirs: ['/skills'], + }, + '1.2.3-test', + ); + + expect(mocks.kimiHarnessConstructor).toHaveBeenCalledWith( + expect.objectContaining({ skillDirs: ['/skills'] }), + ); + }); + it('tracks first launch when device id creation reports first launch', async () => { mocks.loadTuiConfig.mockResolvedValue({ theme: 'dark',