From da11a1cd786c6c5b2bddea176ea0691e17330051 Mon Sep 17 00:00:00 2001 From: "haozhe.yang" Date: Thu, 3 Sep 2026 20:47:39 +0800 Subject: [PATCH 1/2] refactor: remove the legacy agent-core v1 package Delete packages/agent-core (v1 engine) and migrate node-sdk fully onto agent-core-v2: - node-sdk owns its public contract (error protocol, KimiConfig schema and file IO, process-global logging facade, telemetry client interface); event and interaction types re-export from @moonshot-ai/protocol or agent-core-v2 - createKimiHarness is now the single harness factory, backed by the v2 client; the v1 SDKRpcClient is deleted - CLI and vscode run agent-core-v2 unconditionally; KIMI_CODE_LEGACY_FLAG and useAgentCoreV1 are removed - the wire.jsonl replay fold moves into agent-core-v2's replayBuilder (foldWireRecords), and the v2 journal now persists tool-call display so replay restores diff/todo displays - TUI engineV2 branches collapse to the v2 path --- .agents/skills/gen-changesets/SKILL.md | 2 +- .agents/skills/write-tui/SKILL.md | 2 +- .changeset/README.md | 3 +- AGENTS.md | 4 +- CONTRIBUTING.md | 4 +- CONTRIBUTING.zh-CN.md | 4 +- apps/kimi-code/AGENTS.md | 2 +- apps/kimi-code/scripts/dev.mjs | 2 +- .../scripts/plugin-manifest-version.mjs | 2 +- apps/kimi-code/src/cli/experimental-v2.ts | 35 - apps/kimi-code/src/cli/prompt-session.ts | 46 +- apps/kimi-code/src/cli/run-prompt.ts | 598 +- apps/kimi-code/src/cli/run-shell.ts | 11 +- apps/kimi-code/src/cli/sub/export.ts | 7 +- apps/kimi-code/src/cli/sub/fork.ts | 4 +- apps/kimi-code/src/cli/sub/provider.ts | 10 +- apps/kimi-code/src/cli/sub/session.ts | 5 +- apps/kimi-code/src/cli/telemetry.ts | 9 +- apps/kimi-code/src/cli/v2/run-v2-print.ts | 2 - apps/kimi-code/src/tui/commands/add-dir.ts | 4 - apps/kimi-code/src/tui/commands/btw.ts | 6 +- apps/kimi-code/src/tui/commands/config.ts | 13 +- apps/kimi-code/src/tui/commands/dispatch.ts | 30 +- apps/kimi-code/src/tui/commands/info.ts | 6 +- apps/kimi-code/src/tui/commands/plugins.ts | 49 +- apps/kimi-code/src/tui/commands/provider.ts | 2 +- apps/kimi-code/src/tui/commands/registry.ts | 1 - apps/kimi-code/src/tui/commands/reload.ts | 7 +- apps/kimi-code/src/tui/commands/resolve.ts | 4 +- apps/kimi-code/src/tui/commands/session.ts | 4 - apps/kimi-code/src/tui/commands/tower.ts | 10 +- apps/kimi-code/src/tui/commands/types.ts | 2 - .../src/tui/components/messages/tool-call.ts | 4 +- .../src/tui/controllers/auth-flow.ts | 87 +- .../tui/controllers/cache-hint-controller.ts | 5 +- .../src/tui/controllers/editor-keyboard.ts | 15 - .../tui/controllers/plugin-update-notifier.ts | 4 +- apps/kimi-code/src/tui/kimi-tui.ts | 67 +- .../src/tui/utils/image-placeholder.ts | 2 +- .../kimi-code/src/tui/utils/message-replay.ts | 4 +- apps/kimi-code/test/cli/doctor.test.ts | 6 +- apps/kimi-code/test/cli/export.test.ts | 50 +- apps/kimi-code/test/cli/goal-prompt.test.ts | 312 +- apps/kimi-code/test/cli/options.test.ts | 6 +- apps/kimi-code/test/cli/provider.test.ts | 28 +- apps/kimi-code/test/cli/run-prompt.test.ts | 1426 +---- apps/kimi-code/test/cli/run-shell.test.ts | 37 +- .../test/e2e/local-logging-export.e2e.test.ts | 35 +- .../test/tui/commands/add-dir.test.ts | 1 - apps/kimi-code/test/tui/commands/goal.test.ts | 4 - .../tui/commands/plugins-capability.test.ts | 40 +- .../test/tui/commands/provider.test.ts | 4 +- .../test/tui/commands/registry.test.ts | 3 +- .../test/tui/commands/reload.test.ts | 1 - .../test/tui/commands/resolve.test.ts | 10 - .../kimi-code/test/tui/commands/tower.test.ts | 13 - .../test/tui/controllers/auth-flow.test.ts | 22 +- .../controllers/cache-hint-controller.test.ts | 1 - .../editor-keyboard-image-paste.test.ts | 57 +- .../tui/controllers/editor-keyboard.test.ts | 21 +- .../test/tui/kimi-tui-message-flow.test.ts | 92 +- .../test/tui/kimi-tui-startup.test.ts | 238 +- apps/kimi-code/tsconfig.dev.json | 3 +- apps/kimi-code/tsconfig.json | 2 +- apps/vscode/docs/node-sdk-migration.md | 6 +- apps/vscode/package.json | 5 - apps/vscode/scripts/watch-extension.mjs | 1 - apps/vscode/src/bridge-handler.ts | 9 +- apps/vscode/src/config/vscode-settings.ts | 26 - apps/vscode/src/runtime/kimi-runtime.ts | 10 +- apps/vscode/test/bridge-handler.test.ts | 22 +- .../test/kimi-harness.integration.test.ts | 7 +- apps/vscode/test/kimi-runtime.test.ts | 34 +- apps/vscode/test/vscode-settings.test.ts | 71 - apps/vscode/tsdown.config.ts | 1 - docs/en/configuration/config-files.md | 2 +- docs/en/configuration/env-vars.md | 5 +- docs/en/customization/plugins.md | 2 +- docs/zh/configuration/config-files.md | 2 +- docs/zh/configuration/env-vars.md | 5 +- docs/zh/customization/plugins.md | 2 +- flake.nix | 4 +- package.json | 1 - .../agent-core-v2/docs/state-manifest.d.ts | 75 +- .../agent-core-v2/docs/wire-manifest.d.ts | 1 + .../scripts/check-import-boundaries.mjs | 10 - .../src/agent/contextMemory/loopEventFold.ts | 17 +- .../src/agent/contextMemory/types.ts | 2 + .../src/agent/loop/loopService.ts | 3 +- .../src/agent/replayBuilder/fold.ts | 537 ++ .../src/agent/toolExecutor/toolExecutor.ts | 2 + .../agent/toolExecutor/toolExecutorService.ts | 1 + .../skill/catalog/builtin/mcp-config.md | 2 +- .../todo/tools/todo-list/todoListTool.ts | 4 + packages/agent-core-v2/src/index.ts | 1 + .../test/agent/replayBuilder/fold.test.ts | 411 ++ .../test/features/plan/plan.test.ts | 4 +- .../test/lint/import-boundaries.test.ts | 29 - packages/agent-core/AGENTS.md | 12 - packages/agent-core/CHANGELOG.md | 529 -- packages/agent-core/README.md | 11 - packages/agent-core/package.json | 119 - .../scripts/generate-webp-dec-wasm.mjs | 36 - .../src/agent/background/agent-task.ts | 74 - .../agent-core/src/agent/background/index.ts | 1116 ---- .../src/agent/background/persist.ts | 259 - .../src/agent/background/process-task.ts | 201 - .../src/agent/background/question-task.ts | 72 - .../agent-core/src/agent/background/task.ts | 68 - .../compaction/compaction-instruction.md | 78 - .../compaction/compaction-summary-prefix.md | 1 - .../agent-core/src/agent/compaction/full.ts | 798 --- .../src/agent/compaction/handoff.ts | 344 -- .../agent-core/src/agent/compaction/index.ts | 5 - .../agent-core/src/agent/compaction/micro.ts | 168 - .../src/agent/compaction/render-messages.ts | 111 - .../src/agent/compaction/strategy.ts | 85 - .../agent-core/src/agent/compaction/types.ts | 64 - packages/agent-core/src/agent/config/index.ts | 307 - .../agent-core/src/agent/config/thinking.ts | 136 - packages/agent-core/src/agent/config/types.ts | 21 - .../src/agent/context/dynamic-tools.ts | 149 - .../agent-core/src/agent/context/index.ts | 845 --- .../src/agent/context/notification-xml.ts | 67 - .../agent-core/src/agent/context/projector.ts | 680 -- .../src/agent/context/tool-result-render.ts | 108 - packages/agent-core/src/agent/cron/index.ts | 1 - packages/agent-core/src/agent/cron/manager.ts | 599 -- packages/agent-core/src/agent/goal/index.ts | 776 --- packages/agent-core/src/agent/index.ts | 776 --- .../agent-core/src/agent/injection/goal.ts | 215 - .../src/agent/injection/injector.ts | 39 - .../agent-core/src/agent/injection/manager.ts | 118 - .../src/agent/injection/permission-mode.ts | 38 - .../src/agent/injection/plan-mode.ts | 181 - .../agent/injection/plugin-session-start.ts | 78 - .../src/agent/injection/todo-list.ts | 131 - .../src/agent/injection/tools-diff.ts | 51 - .../src/agent/llm-request-logger.ts | 77 - .../src/agent/llm-request-recorder.ts | 140 - .../agent-core/src/agent/permission/index.ts | 320 - .../src/agent/permission/matches-rule.ts | 98 - .../policies/agent-swarm-exclusive-deny.ts | 45 - .../permission/policies/auto-mode-approve.ts | 15 - .../auto-mode-ask-user-question-deny.ts | 18 - .../policies/default-tool-approve.ts | 37 - .../src/agent/permission/policies/deny-all.ts | 15 - .../policies/exit-plan-mode-review-ask.ts | 172 - .../agent/permission/policies/fallback-ask.ts | 11 - .../permission/policies/file-access-ask.ts | 113 - .../policies/git-cwd-write-approve.ts | 41 - .../policies/goal-start-review-ask.ts | 49 - .../src/agent/permission/policies/index.ts | 71 - .../policies/plan-mode-guard-deny.ts | 65 - .../policies/plan-mode-tool-approve.ts | 54 - .../permission/policies/pre-tool-call-hook.ts | 27 - .../policies/session-approval-history.ts | 46 - .../swarm-mode-agent-swarm-approve.ts | 16 - .../policies/user-configured-rules.ts | 115 - .../permission/policies/yolo-mode-approve.ts | 15 - .../agent-core/src/agent/permission/types.ts | 101 - packages/agent-core/src/agent/plan/index.ts | 146 - .../agent-core/src/agent/records/blobref.ts | 249 - .../agent-core/src/agent/records/index.ts | 350 -- .../src/agent/records/migration/index.ts | 90 - .../src/agent/records/migration/v1.1.ts | 52 - .../src/agent/records/migration/v1.2.ts | 63 - .../src/agent/records/migration/v1.3.ts | 18 - .../src/agent/records/migration/v1.4.ts | 112 - .../src/agent/records/persistence.ts | 219 - .../agent-core/src/agent/records/types.ts | 253 - packages/agent-core/src/agent/replay/build.ts | 20 - packages/agent-core/src/agent/replay/index.ts | 104 - packages/agent-core/src/agent/replay/turns.ts | 67 - packages/agent-core/src/agent/skill/index.ts | 86 - packages/agent-core/src/agent/skill/prompt.ts | 66 - packages/agent-core/src/agent/skill/types.ts | 10 - .../src/agent/swarm/enter-reminder.md | 21 - .../src/agent/swarm/exit-reminder.md | 5 - packages/agent-core/src/agent/swarm/index.ts | 60 - packages/agent-core/src/agent/tool/index.ts | 1029 --- packages/agent-core/src/agent/tool/types.ts | 33 - .../src/agent/turn/canonical-args.ts | 28 - packages/agent-core/src/agent/turn/index.ts | 1649 ----- .../agent-core/src/agent/turn/kosong-llm.ts | 345 -- .../src/agent/turn/media-resolve.ts | 159 - .../agent-core/src/agent/turn/tool-dedup.ts | 302 - .../src/agent/turn/tool-result-budget.ts | 91 - packages/agent-core/src/agent/usage/index.ts | 79 - packages/agent-core/src/base/common/event.ts | 144 - .../agent-core/src/config/kimi-env-params.ts | 140 - packages/agent-core/src/config/merge.ts | 62 - packages/agent-core/src/config/migrations.ts | 78 - packages/agent-core/src/config/path.ts | 18 - .../agent-core/src/config/print-defaults.ts | 55 - packages/agent-core/src/config/resolve.ts | 44 - .../agent-core/src/config/workspace-local.ts | 320 - packages/agent-core/src/di/README.md | 319 - packages/agent-core/src/di/descriptors.ts | 31 - packages/agent-core/src/di/errors.ts | 51 - packages/agent-core/src/di/extensions.ts | 101 - packages/agent-core/src/di/graph.ts | 89 - packages/agent-core/src/di/index.ts | 50 - packages/agent-core/src/di/instantiation.ts | 145 - .../agent-core/src/di/instantiationService.ts | 581 -- packages/agent-core/src/di/lifecycle.ts | 662 -- .../agent-core/src/di/serviceCollection.ts | 56 - packages/agent-core/src/di/test.ts | 5 - .../src/di/testInstantiationService.ts | 335 - packages/agent-core/src/di/util/idleValue.ts | 136 - packages/agent-core/src/di/util/linkedList.ts | 86 - packages/agent-core/src/errors.ts | 5 - packages/agent-core/src/errors/classes.ts | 28 - packages/agent-core/src/errors/index.ts | 25 - packages/agent-core/src/errors/serialize.ts | 180 - .../agent-core/src/errors/unexpectedError.ts | 73 - packages/agent-core/src/flags/index.ts | 3 - packages/agent-core/src/flags/registry.ts | 47 - packages/agent-core/src/flags/resolver.ts | 99 - packages/agent-core/src/flags/types.ts | 50 - packages/agent-core/src/index.ts | 181 - packages/agent-core/src/logging/index.ts | 33 - packages/agent-core/src/logging/logger.ts | 445 -- packages/agent-core/src/logging/types.ts | 91 - packages/agent-core/src/loop/README.md | 57 - packages/agent-core/src/loop/errors.ts | 32 - packages/agent-core/src/loop/events.ts | 215 - packages/agent-core/src/loop/index.ts | 76 - packages/agent-core/src/loop/llm.ts | 129 - packages/agent-core/src/loop/retry.ts | 202 - packages/agent-core/src/loop/run-turn.ts | 255 - packages/agent-core/src/loop/tool-access.ts | 118 - .../agent-core/src/loop/tool-args-parse.ts | 25 - packages/agent-core/src/loop/tool-call.ts | 793 --- .../agent-core/src/loop/tool-scheduler.ts | 100 - packages/agent-core/src/loop/turn-step.ts | 587 -- packages/agent-core/src/loop/types.ts | 268 - packages/agent-core/src/mcp/auth-tool.ts | 186 - packages/agent-core/src/mcp/client-http.ts | 225 - packages/agent-core/src/mcp/client-remote.ts | 32 - packages/agent-core/src/mcp/client-shared.ts | 101 - packages/agent-core/src/mcp/client-sse.ts | 179 - packages/agent-core/src/mcp/client-stdio.ts | 268 - packages/agent-core/src/mcp/config-loader.ts | 218 - packages/agent-core/src/mcp/config-view.ts | 29 - .../agent-core/src/mcp/connection-manager.ts | 730 --- packages/agent-core/src/mcp/global-config.ts | 165 - packages/agent-core/src/mcp/index.ts | 8 - .../src/mcp/oauth/callback-server.ts | 194 - packages/agent-core/src/mcp/oauth/index.ts | 4 - packages/agent-core/src/mcp/oauth/provider.ts | 316 - packages/agent-core/src/mcp/oauth/service.ts | 647 -- packages/agent-core/src/mcp/oauth/store.ts | 140 - packages/agent-core/src/mcp/output.ts | 450 -- packages/agent-core/src/mcp/registry.ts | 181 - packages/agent-core/src/mcp/session-config.ts | 53 - packages/agent-core/src/mcp/tool-naming.ts | 49 - packages/agent-core/src/mcp/types.ts | 107 - packages/agent-core/src/plugin.ts | 1 - packages/agent-core/src/plugin/archive.ts | 147 - packages/agent-core/src/plugin/commands.ts | 78 - .../agent-core/src/plugin/github-resolver.ts | 155 - packages/agent-core/src/plugin/index.ts | 10 - packages/agent-core/src/plugin/manager.ts | 573 -- packages/agent-core/src/plugin/manifest.ts | 577 -- packages/agent-core/src/plugin/source.ts | 112 - packages/agent-core/src/plugin/store.ts | 64 - packages/agent-core/src/plugin/types.ts | 194 - .../src/profile/agentfile/catalog.ts | 488 -- .../src/profile/agentfile/discovery.ts | 128 - .../src/profile/agentfile/from-file.ts | 131 - .../agent-core/src/profile/agentfile/index.ts | 9 - .../src/profile/agentfile/parser.ts | 192 - .../agent-core/src/profile/agentfile/paths.ts | 59 - .../agent-core/src/profile/agentfile/roots.ts | 111 - .../src/profile/agentfile/system-file.ts | 87 - .../agent-core/src/profile/agentfile/types.ts | 70 - .../src/profile/agentfile/validate.ts | 62 - packages/agent-core/src/profile/context.ts | 204 - packages/agent-core/src/profile/default.ts | 26 - .../agent-core/src/profile/default/agent.yaml | 43 - .../agent-core/src/profile/default/coder.yaml | 30 - .../src/profile/default/explore.yaml | 37 - .../agent-core/src/profile/default/init.md | 21 - .../agent-core/src/profile/default/plan.yaml | 21 - .../agent-core/src/profile/default/system.md | 154 - packages/agent-core/src/profile/index.ts | 6 - packages/agent-core/src/profile/load.ts | 125 - .../agent-core/src/profile/plugin-sections.ts | 36 - .../agent-core/src/profile/prompt-sections.ts | 26 - packages/agent-core/src/profile/resolve.ts | 238 - packages/agent-core/src/profile/types.ts | 74 - packages/agent-core/src/prompt-modules.d.ts | 7 - packages/agent-core/src/rpc/client.ts | 110 - packages/agent-core/src/rpc/core-api.ts | 736 --- packages/agent-core/src/rpc/core-impl.ts | 2402 ------- packages/agent-core/src/rpc/events.ts | 53 - packages/agent-core/src/rpc/index.ts | 7 - packages/agent-core/src/rpc/resumed.ts | 51 - packages/agent-core/src/rpc/sdk-api.ts | 84 - packages/agent-core/src/rpc/types.ts | 29 - packages/agent-core/src/services/AGENTS.md | 190 - .../src/services/approval/approval.ts | 151 - .../src/services/auth/managedAuth.ts | 178 - .../src/services/authSummary/authSummary.ts | 116 - .../authSummary/authSummaryService.ts | 157 - .../agent-core/src/services/config/config.ts | 12 - .../src/services/config/configService.ts | 105 - .../src/services/coreProcess/coreProcess.ts | 92 - .../services/coreProcess/coreProcessClient.ts | 72 - .../coreProcess/coreProcessService.ts | 278 - .../src/services/environment/environment.ts | 32 - .../agent-core/src/services/event/event.ts | 66 - .../src/services/event/eventService.ts | 41 - .../src/services/fileStore/fileStore.ts | 55 - .../services/fileStore/fileStoreService.ts | 213 - .../src/services/fileStore/index.ts | 9 - packages/agent-core/src/services/fs/fs.ts | 127 - packages/agent-core/src/services/fs/fsGit.ts | 163 - .../src/services/fs/fsGitService.ts | 341 - .../src/services/fs/fsPathSafety.ts | 118 - .../agent-core/src/services/fs/fsSearch.ts | 33 - .../src/services/fs/fsSearchService.ts | 656 -- .../agent-core/src/services/fs/fsService.ts | 709 --- .../agent-core/src/services/fs/fsWatcher.ts | 82 - .../src/services/fs/fsWatcherService.ts | 432 -- packages/agent-core/src/services/fs/index.ts | 39 - packages/agent-core/src/services/index.ts | 212 - .../agent-core/src/services/logger/logger.ts | 17 - packages/agent-core/src/services/mcp/mcp.ts | 135 - .../agent-core/src/services/mcp/mcpService.ts | 68 - .../src/services/message/message.ts | 284 - .../src/services/message/messageService.ts | 222 - .../src/services/message/transcript.ts | 414 -- .../src/services/modelCatalog/modelCatalog.ts | 118 - .../modelCatalog/modelCatalogService.ts | 260 - .../agent-core/src/services/oauth/oauth.ts | 109 - .../src/services/oauth/oauthService.ts | 310 - .../agent-core/src/services/prompt/prompt.ts | 391 -- .../src/services/prompt/promptService.ts | 1009 --- .../src/services/question/question.ts | 262 - .../src/services/session/session.ts | 147 - .../src/services/session/sessionService.ts | 636 -- .../agent-core/src/services/skill/skill.ts | 122 - .../src/services/skill/skillService.ts | 79 - packages/agent-core/src/services/task/task.ts | 203 - .../src/services/task/taskService.ts | 122 - .../src/services/terminal/terminal.ts | 94 - .../src/services/terminal/terminalService.ts | 276 - packages/agent-core/src/services/tool/tool.ts | 102 - .../src/services/tool/toolService.ts | 52 - .../src/services/workspace/index.ts | 15 - .../src/services/workspace/workspaceFs.ts | 56 - .../services/workspace/workspaceFsService.ts | 95 - .../services/workspace/workspaceRegistry.ts | 77 - .../workspace/workspaceRegistryService.ts | 494 -- .../agent-core/src/session/export/index.ts | 4 - .../agent-core/src/session/export/manifest.ts | 40 - .../src/session/export/session-export.ts | 95 - .../src/session/export/wire-scan.ts | 69 - packages/agent-core/src/session/export/zip.ts | 69 - .../agent-core/src/session/git-context.ts | 297 - .../agent-core/src/session/hooks/engine.ts | 188 - .../agent-core/src/session/hooks/index.ts | 4 - .../agent-core/src/session/hooks/runner.ts | 264 - .../agent-core/src/session/hooks/types.ts | 72 - .../src/session/hooks/user-prompt.ts | 66 - packages/agent-core/src/session/index.ts | 1471 ----- .../src/session/main-agent-profile.ts | 19 - .../agent-core/src/session/prompt-metadata.ts | 79 - .../src/session/provider-manager.ts | 508 -- packages/agent-core/src/session/rpc.ts | 374 -- .../agent-core/src/session/store/index.ts | 8 - .../src/session/store/session-index.ts | 138 - .../src/session/store/session-store.ts | 1042 ---- .../src/session/store/workdir-key.ts | 52 - .../session/store/workspace-registry-file.ts | 181 - .../agent-core/src/session/subagent-batch.ts | 683 -- .../src/session/subagent-binding.ts | 146 - .../agent-core/src/session/subagent-host.ts | 687 --- .../src/session/summary-continuation.md | 5 - .../src/skill/builtin/check-kimi-code-docs.md | 44 - .../src/skill/builtin/check-kimi-code-docs.ts | 22 - .../src/skill/builtin/custom-theme.md | 132 - .../src/skill/builtin/custom-theme.ts | 23 - .../src/skill/builtin/import-from-cc-codex.md | 281 - .../src/skill/builtin/import-from-cc-codex.ts | 23 - .../agent-core/src/skill/builtin/index.ts | 36 - .../src/skill/builtin/mcp-config.md | 130 - .../src/skill/builtin/mcp-config.ts | 23 - .../agent-core/src/skill/builtin/sub-skill.ts | 51 - .../src/skill/builtin/sub-skill/SKILL.md | 23 - .../builtin/sub-skill/consolidate/SKILL.md | 43 - .../skill/builtin/sub-skill/review/SKILL.md | 47 - .../src/skill/builtin/update-config.md | 111 - .../src/skill/builtin/update-config.ts | 22 - .../src/skill/builtin/write-goal.md | 94 - .../src/skill/builtin/write-goal.ts | 22 - packages/agent-core/src/skill/index.ts | 5 - packages/agent-core/src/skill/parser.ts | 296 - packages/agent-core/src/skill/registry.ts | 200 - packages/agent-core/src/skill/scanner.ts | 502 -- packages/agent-core/src/skill/types.ts | 94 - .../agent-core/src/tools/args-validator.ts | 93 - .../agent-core/src/tools/background/format.ts | 14 - .../agent-core/src/tools/background/index.ts | 10 - .../src/tools/background/task-list.md | 25 - .../src/tools/background/task-list.ts | 69 - .../src/tools/background/task-output.md | 12 - .../src/tools/background/task-output.ts | 146 - .../src/tools/background/task-stop.md | 13 - .../src/tools/background/task-stop.ts | 93 - .../agent-background-disabled.md | 1 - .../collaboration/agent-background-enabled.md | 3 - .../builtin/collaboration/agent-swarm.md | 11 - .../builtin/collaboration/agent-swarm.ts | 316 - .../src/tools/builtin/collaboration/agent.md | 16 - .../src/tools/builtin/collaboration/agent.ts | 431 -- .../tools/builtin/collaboration/ask-user.md | 21 - .../tools/builtin/collaboration/ask-user.ts | 356 -- .../tools/builtin/collaboration/skill-tool.md | 1 - .../tools/builtin/collaboration/skill-tool.ts | 183 - .../agent-core/src/tools/builtin/file/edit.md | 13 - .../agent-core/src/tools/builtin/file/edit.ts | 164 - .../agent-core/src/tools/builtin/file/glob.md | 16 - .../agent-core/src/tools/builtin/file/glob.ts | 389 -- .../agent-core/src/tools/builtin/file/grep.md | 9 - .../agent-core/src/tools/builtin/file/grep.ts | 786 --- .../src/tools/builtin/file/line-endings.ts | 51 - .../src/tools/builtin/file/read-media.md | 15 - .../src/tools/builtin/file/read-media.ts | 587 -- .../agent-core/src/tools/builtin/file/read.md | 17 - .../agent-core/src/tools/builtin/file/read.ts | 567 -- .../src/tools/builtin/file/write.md | 11 - .../src/tools/builtin/file/write.ts | 157 - .../src/tools/builtin/goal/create-goal.md | 20 - .../src/tools/builtin/goal/create-goal.ts | 77 - .../src/tools/builtin/goal/get-goal.md | 5 - .../src/tools/builtin/goal/get-goal.ts | 37 - .../src/tools/builtin/goal/outcome-prompts.ts | 46 - .../src/tools/builtin/goal/serialize.ts | 17 - .../src/tools/builtin/goal/set-goal-budget.md | 26 - .../src/tools/builtin/goal/set-goal-budget.ts | 160 - .../src/tools/builtin/goal/update-goal.md | 7 - .../src/tools/builtin/goal/update-goal.ts | 97 - .../agent-core/src/tools/builtin/index.ts | 27 - .../tools/builtin/planning/enter-plan-mode.md | 26 - .../tools/builtin/planning/enter-plan-mode.ts | 83 - .../tools/builtin/planning/exit-plan-mode.md | 25 - .../tools/builtin/planning/exit-plan-mode.ts | 234 - .../src/tools/builtin/select-tools.ts | 130 - .../src/tools/builtin/shell/bash.md | 43 - .../src/tools/builtin/shell/bash.ts | 614 -- .../src/tools/builtin/state/todo-list.md | 30 - .../src/tools/builtin/state/todo-list.ts | 143 - .../src/tools/builtin/web/fetch-url.md | 3 - .../src/tools/builtin/web/fetch-url.ts | 131 - .../src/tools/builtin/web/web-search.md | 5 - .../src/tools/builtin/web/web-search.ts | 139 - packages/agent-core/src/tools/cron/clock.ts | 148 - .../agent-core/src/tools/cron/cron-create.md | 90 - .../agent-core/src/tools/cron/cron-create.ts | 328 - .../agent-core/src/tools/cron/cron-delete.md | 43 - .../agent-core/src/tools/cron/cron-delete.ts | 119 - .../agent-core/src/tools/cron/cron-expr.ts | 451 -- .../src/tools/cron/cron-fire-xml.ts | 44 - .../agent-core/src/tools/cron/cron-list.md | 54 - .../agent-core/src/tools/cron/cron-list.ts | 172 - packages/agent-core/src/tools/cron/jitter.ts | 170 - packages/agent-core/src/tools/cron/persist.ts | 64 - .../agent-core/src/tools/cron/scheduler.ts | 516 -- .../src/tools/cron/session-store.ts | 151 - .../src/tools/cron/telemetry-events.ts | 11 - .../agent-core/src/tools/cron/time-format.ts | 24 - packages/agent-core/src/tools/cron/types.ts | 29 - .../agent-core/src/tools/display/index.ts | 1 - .../agent-core/src/tools/display/schemas.ts | 8 - .../src/tools/policies/path-access.ts | 272 - .../src/tools/policies/sensitive.ts | 82 - .../src/tools/providers/local-fetch-url.ts | 381 -- .../src/tools/providers/moonshot-fetch-url.ts | 128 - .../tools/providers/moonshot-web-search.ts | 138 - packages/agent-core/src/tools/store.ts | 13 - .../agent-core/src/tools/support/file-type.ts | 457 -- .../src/tools/support/git-worktree.ts | 86 - .../src/tools/support/image-compress.ts | 1194 ---- .../src/tools/support/image-format-policy.ts | 270 - .../src/tools/support/image-limits.ts | 50 - .../src/tools/support/image-originals.ts | 125 - .../src/tools/support/input-schema.ts | 62 - .../src/tools/support/list-directory.ts | 124 - .../src/tools/support/path-glob-match.ts | 146 - .../src/tools/support/result-builder.ts | 153 - .../src/tools/support/rg-locator.ts | 377 -- .../src/tools/support/rule-match.ts | 41 - .../agent-core/src/tools/support/run-rg.ts | 257 - .../agent-core/src/tools/support/services.ts | 6 - .../agent-core/src/tools/support/stream.ts | 6 - .../src/tools/support/video-delivery.ts | 89 - .../src/tools/support/webp-dec-wasm.ts | 7 - .../src/tools/support/webp-decode.ts | 86 - .../agent-core/src/tools/support/workspace.ts | 17 - packages/agent-core/src/utils/abort.ts | 100 - .../agent-core/src/utils/completion-budget.ts | 94 - packages/agent-core/src/utils/fs.ts | 187 - packages/agent-core/src/utils/hero-slug.ts | 267 - .../agent-core/src/utils/per-id-json-store.ts | 151 - packages/agent-core/src/utils/promise.ts | 80 - packages/agent-core/src/utils/proxy.ts | 378 -- .../agent-core/src/utils/render-prompt.ts | 19 - packages/agent-core/src/utils/tokens.ts | 121 - packages/agent-core/src/utils/types.ts | 13 - packages/agent-core/src/utils/workdir-slug.ts | 11 - packages/agent-core/src/utils/xml-escape.ts | 18 - packages/agent-core/src/version.ts | 13 - .../agent/background/agent-timeout.test.ts | 136 - .../background/foreground-persistence.test.ts | 147 - .../agent/background/heartbeat-stale.test.ts | 78 - .../test/agent/background/helpers.ts | 127 - .../test/agent/background/ids.test.ts | 66 - .../test/agent/background/manager.test.ts | 996 --- .../agent/background/output-access.test.ts | 135 - .../agent/background/output-limit.test.ts | 240 - .../test/agent/background/persist.test.ts | 162 - .../background/persistence-compat.test.ts | 126 - .../test/agent/background/reconcile.test.ts | 224 - .../test/agent/background/rpc-events.test.ts | 651 -- packages/agent-core/test/agent/basic.test.ts | 507 -- .../agent/bg-idle-notification-repro.test.ts | 320 - .../compaction/anthropic-compliance.test.ts | 305 - .../compaction/compaction-scenarios.test.ts | 612 -- .../test/agent/compaction/full.test.ts | 2766 --------- .../test/agent/compaction/handoff.test.ts | 366 -- .../test/agent/compaction/micro.test.ts | 990 --- .../test/agent/compaction/strategy.test.ts | 89 - .../test/agent/config-state.test.ts | 740 --- packages/agent-core/test/agent/config.test.ts | 302 - .../test/agent/config/thinking.test.ts | 240 - .../agent-core/test/agent/context.test.ts | 1544 ----- .../test/agent/context/projector.test.ts | 1072 ---- .../test/agent/cron/agent-integration.test.ts | 81 - .../test/agent/cron/cron.e2e.test.ts | 207 - .../test/agent/cron/harness/stub.ts | 143 - .../test/agent/cron/manager.test.ts | 513 -- .../test/agent/cron/manual-tick.test.ts | 230 - .../agent-core/test/agent/cron/resume.test.ts | 349 -- .../test/agent/cron/subagent-skip.test.ts | 87 - .../test/agent/dynamic-tools.test.ts | 125 - packages/agent-core/test/agent/goal.test.ts | 438 -- .../agent-core/test/agent/harness/agent.ts | 1120 ---- .../agent-core/test/agent/harness/index.ts | 16 - .../test/agent/harness/scripted-generate.ts | 162 - .../test/agent/harness/snapshots.ts | 341 - .../agent/image-caption-injection.test.ts | 172 - .../test/agent/injection/goal.test.ts | 252 - .../test/agent/injection/manager.test.ts | 158 - .../test/agent/injection/plan-mode.test.ts | 151 - .../injection/plugin-session-start.test.ts | 271 - .../test/agent/injection/todo-list.test.ts | 170 - .../agent-core/test/agent/kosong-llm.test.ts | 492 -- .../test/agent/llm-request-recorder.test.ts | 408 -- .../agent-core/test/agent/permission.test.ts | 4199 ------------- .../permission/default-tool-approve.test.ts | 67 - .../permission/goal-start-review-ask.test.ts | 104 - packages/agent-core/test/agent/plan.test.ts | 646 -- .../agent-core/test/agent/question.test.ts | 57 - .../test/agent/records/blobref.test.ts | 398 -- .../test/agent/records/index.test.ts | 683 -- .../test/agent/records/migration.test.ts | 35 - .../test/agent/records/migration/utils.ts | 38 - .../test/agent/records/migration/v1.1.test.ts | 80 - .../test/agent/records/migration/v1.2.test.ts | 98 - .../test/agent/records/migration/v1.4.test.ts | 76 - .../test/agent/records/persistence.test.ts | 283 - packages/agent-core/test/agent/resume.test.ts | 1767 ------ .../test/agent/skill-prompt.test.ts | 55 - .../test/agent/skill-tool-manager.test.ts | 236 - .../test/agent/tool-result-render.test.ts | 121 - .../test/agent/tool-select.e2e.test.ts | 847 --- packages/agent-core/test/agent/tool.test.ts | 763 --- packages/agent-core/test/agent/turn.test.ts | 3075 --------- .../test/agent/turn/tool-dedup.test.ts | 650 -- packages/agent-core/test/agent/usage.test.ts | 140 - .../agent-core/test/base/common/event.test.ts | 256 - .../agent-core/test/config/configs.test.ts | 1075 ---- .../agent-core/test/config/env-model.test.ts | 281 - .../test/config/kimi-env-params.test.ts | 248 - .../test/config/model-overrides.test.ts | 223 - .../agent-core/test/config/resolve.test.ts | 37 - .../test/config/secondary-model.test.ts | 266 - .../test/config/workspace-local.test.ts | 204 - .../agent-core/test/di/auto-inject.test.ts | 197 - packages/agent-core/test/di/child.test.ts | 390 -- .../agent-core/test/di/collection.test.ts | 73 - packages/agent-core/test/di/cyclic.test.ts | 223 - packages/agent-core/test/di/decorator.test.ts | 113 - packages/agent-core/test/di/delayed.test.ts | 207 - .../agent-core/test/di/descriptor.test.ts | 64 - .../agent-core/test/di/extensions.test.ts | 223 - packages/agent-core/test/di/graph.test.ts | 38 - .../agent-core/test/di/instantiation.test.ts | 328 - packages/agent-core/test/di/lifecycle.test.ts | 744 --- .../agent-core/test/di/self-register.test.ts | 41 - .../test/di/test-instantiation.test.ts | 238 - packages/agent-core/test/di/trace.test.ts | 53 - .../agent-core/test/errors/serialize.test.ts | 98 - .../test/errors/unexpectedError.test.ts | 81 - .../agent-core/test/fixtures/telemetry.ts | 32 - .../agent-core/test/fixtures/test-kaos.ts | 16 - .../agent-core/test/flags/resolver.test.ts | 204 - .../test/harness/coder-subagent-tools.test.ts | 444 -- .../test/harness/goal-session.test.ts | 1081 ---- .../test/harness/model-alias-session.test.ts | 608 -- .../test/harness/plan-mode-session.test.ts | 99 - .../test/harness/runtime-provider.test.ts | 1329 ---- .../agent-core/test/harness/runtime.test.ts | 1558 ----- .../test/harness/skill-session.test.ts | 730 --- packages/agent-core/test/hooks/engine.test.ts | 399 -- .../agent-core/test/hooks/integration.test.ts | 336 - packages/agent-core/test/hooks/runner.test.ts | 126 - .../agent-core/test/logging/formatter.test.ts | 231 - .../agent-core/test/logging/logger.test.ts | 485 -- .../agent-core/test/logging/sinks.test.ts | 156 - .../agent-core/test/loop/abort.e2e.test.ts | 284 - .../test/loop/api-shape.e2e.test.ts | 604 -- .../test/loop/error-paths.e2e.test.ts | 181 - .../agent-core/test/loop/events.e2e.test.ts | 189 - .../test/loop/fixtures/collecting-sink.ts | 82 - .../agent-core/test/loop/fixtures/fake-llm.ts | 205 - .../agent-core/test/loop/fixtures/helpers.ts | 144 - .../test/loop/fixtures/recording-context.ts | 99 - .../agent-core/test/loop/fixtures/tools.ts | 307 - .../agent-core/test/loop/hooks.e2e.test.ts | 546 -- packages/agent-core/test/loop/retry.test.ts | 303 - .../test/loop/streaming.e2e.test.ts | 200 - .../test/loop/tool-args-parse.test.ts | 45 - .../test/loop/tool-call.e2e.test.ts | 995 --- .../loop/tool-exchange-fallback.e2e.test.ts | 474 -- .../test/loop/tool-scheduler.test.ts | 307 - .../test/loop/transcript.e2e.test.ts | 221 - .../test/loop/turn-lifecycle.e2e.test.ts | 237 - .../agent-core/test/mcp/auth-tool.test.ts | 147 - .../agent-core/test/mcp/client-http.test.ts | 271 - .../agent-core/test/mcp/client-sse.test.ts | 142 - .../agent-core/test/mcp/client-stdio.test.ts | 354 -- .../agent-core/test/mcp/config-loader.test.ts | 355 -- .../test/mcp/connection-manager.test.ts | 1511 ----- .../crash-after-connect-stdio-server.mjs | 57 - .../test/mcp/fixtures/cwd-stdio-server.mjs | 21 - .../fixtures/hanging-list-stdio-server.mjs | 38 - .../test/mcp/fixtures/mock-stdio-server.mjs | 55 - .../test/mcp/fixtures/slow-stdio-server.mjs | 26 - .../mcp/fixtures/slow-tool-stdio-server.mjs | 23 - .../stderr-then-exit-stdio-server.mjs | 7 - .../structured-content-stdio-server.mjs | 80 - .../test/mcp/oauth-callback-server.test.ts | 87 - .../agent-core/test/mcp/oauth-service.test.ts | 802 --- .../agent-core/test/mcp/oauth-store.test.ts | 217 - packages/agent-core/test/mcp/output.test.ts | 932 --- packages/agent-core/test/mcp/registry.test.ts | 240 - .../test/mcp/session-config-merge.test.ts | 68 - .../test/mcp/tool-manager-mcp.test.ts | 663 -- .../agent-core/test/mcp/tool-naming.test.ts | 64 - .../agent-core/test/plugin/archive.test.ts | 237 - .../agent-core/test/plugin/commands.test.ts | 65 - .../test/plugin/github-resolver.test.ts | 313 - .../test/plugin/integration.test.ts | 117 - .../agent-core/test/plugin/manager.test.ts | 1136 ---- .../agent-core/test/plugin/manifest.test.ts | 728 --- .../agent-core/test/plugin/source.test.ts | 228 - packages/agent-core/test/plugin/store.test.ts | 120 - .../test/profile/agent-profile-loader.test.ts | 278 - .../agent-core/test/profile/agentfile.test.ts | 803 --- .../agent-core/test/profile/context.test.ts | 204 - .../profile/default-agent-profiles.test.ts | 129 - .../test/prompt-placeholders.test.ts | 81 - .../agent-core/test/rpc/config-rpc.test.ts | 173 - .../agent-core/test/rpc/create-rpc.test.ts | 203 - packages/agent-core/test/rpc/mcp-rpc.test.ts | 1239 ---- .../agent-core/test/rpc/plugins-rpc.test.ts | 323 - .../test/services/approval-adapter.test.ts | 102 - .../test/services/coreProcessService.test.ts | 378 -- .../test/services/fs-git-service.test.ts | 195 - .../test/services/interfaces.test.ts | 257 - .../test/services/message-service.test.ts | 406 -- .../test/services/message-transcript.test.ts | 689 --- .../services/model-catalog-service.test.ts | 562 -- .../test/services/oauth-service.test.ts | 339 - .../test/services/prompt-service.test.ts | 1708 ----- .../test/services/question-adapter.test.ts | 290 - .../test/services/session-service.test.ts | 1268 ---- .../test/services/task-service.test.ts | 298 - .../test/services/terminal-service.test.ts | 295 - .../test/services/tool-service.test.ts | 244 - .../test/services/workspace-registry.test.ts | 721 --- .../test/session/cron-stop-on-close.test.ts | 94 - .../test/session/git-context.test.ts | 276 - packages/agent-core/test/session/init.test.ts | 1016 --- .../test/session/lifecycle-hooks.test.ts | 815 --- .../test/session/prompt-metadata.test.ts | 170 - .../agent-core/test/session/store.test.ts | 431 -- .../test/session/subagent-batch.test.ts | 905 --- .../test/session/subagent-host.test.ts | 2062 ------- packages/agent-core/test/setup.ts | 13 - .../test/skill/builtin-custom-theme.test.ts | 59 - .../test/skill/builtin-sub-skill.test.ts | 107 - .../test/skill/builtin-update-config.test.ts | 67 - .../test/skill/parser-frontmatter.test.ts | 27 - packages/agent-core/test/skill/parser.test.ts | 314 - .../agent-core/test/skill/registry.test.ts | 163 - .../agent-core/test/skill/scanner.test.ts | 1425 ----- packages/agent-core/test/tools/agent.test.ts | 984 --- .../agent-core/test/tools/ask-user.test.ts | 552 -- .../test/tools/background/task-tools.test.ts | 595 -- .../agent-core/test/tools/bash-env.test.ts | 106 - .../test/tools/bash-windows-kill.test.ts | 10 - packages/agent-core/test/tools/bash.test.ts | 1434 ----- .../test/tools/builtin-current.test.ts | 958 --- .../agent-core/test/tools/cron/clock.test.ts | 147 - .../test/tools/cron/cron-create.test.ts | 637 -- .../test/tools/cron/cron-delete.test.ts | 177 - .../test/tools/cron/cron-expr.test.ts | 398 -- .../test/tools/cron/cron-fire-xml.test.ts | 92 - .../test/tools/cron/cron-list.test.ts | 421 -- .../agent-core/test/tools/cron/jitter.test.ts | 277 - .../test/tools/cron/no-date-now.test.ts | 53 - .../test/tools/cron/persist.test.ts | 74 - .../test/tools/cron/scheduler.test.ts | 618 -- .../test/tools/cron/session-store.test.ts | 180 - packages/agent-core/test/tools/edit.test.ts | 385 -- .../test/tools/enter-plan-mode.test.ts | 160 - .../test/tools/exit-plan-mode-options.test.ts | 291 - .../test/tools/exit-plan-mode.test.ts | 201 - .../agent-core/test/tools/fetch-url.test.ts | 319 - .../agent-core/test/tools/file-type.test.ts | 597 -- .../test/tools/fixtures/execute-tool.ts | 37 - .../test/tools/fixtures/fake-kaos.ts | 105 - packages/agent-core/test/tools/glob.test.ts | 730 --- packages/agent-core/test/tools/goal.test.ts | 421 -- packages/agent-core/test/tools/grep.test.ts | 1883 ------ .../test/tools/image-compress.test.ts | 1859 ------ .../test/tools/image-originals.test.ts | 114 - .../test/tools/input-schema-io.test.ts | 129 - .../test/tools/list-directory.test.ts | 290 - .../agent-core/test/tools/path-guard.test.ts | 482 -- .../test/tools/plan-mode-hard-block.test.ts | 299 - .../enter-plan-mode-telemetry.test.ts | 55 - .../planning/exit-plan-mode-telemetry.test.ts | 285 - .../test/tools/policies/sensitive.test.ts | 71 - .../tools/providers/local-fetch-url.test.ts | 395 -- .../providers/moonshot-fetch-url.test.ts | 94 - .../agent-core/test/tools/read-file.test.ts | 71 - .../test/tools/read-media-desc.test.ts | 27 - .../agent-core/test/tools/read-media.test.ts | 1522 ----- packages/agent-core/test/tools/read.test.ts | 988 --- .../test/tools/result-builder.test.ts | 162 - .../agent-core/test/tools/rg-locator.test.ts | 533 -- .../test/tools/shell-cancel.test.ts | 62 - .../test/tools/shell-quoting.test.ts | 184 - .../test/tools/skill-tool-dispatch.test.ts | 123 - .../agent-core/test/tools/skill-tool.test.ts | 295 - .../agent-core/test/tools/todo-list.test.ts | 219 - .../agent-core/test/tools/web-search.test.ts | 376 -- packages/agent-core/test/tools/write.test.ts | 326 - packages/agent-core/test/utils/abort.test.ts | 76 - .../test/utils/completion-budget.test.ts | 250 - .../agent-core/test/utils/hero-slug.test.ts | 25 - .../test/utils/per-id-json-store.test.ts | 176 - packages/agent-core/test/utils/proxy.test.ts | 433 -- packages/agent-core/test/utils/tokens.test.ts | 101 - packages/agent-core/tsconfig.json | 7 - packages/agent-core/tsdown.config.ts | 20 - packages/agent-core/vitest.config.ts | 9 - packages/kaos/src/login-shell-path.ts | 3 +- packages/klient/scripts/run-docker-e2e.sh | 1 - .../kosong/test/fixtures/args-validator.ts | 2 +- .../kosong/test/fixtures/simple-toolset.ts | 2 +- .../test/sessions/workdir-bucket.test.ts | 2 +- packages/node-sdk/api-extractor.json | 1 - packages/node-sdk/examples/t8-race-direct.ts | 60 - packages/node-sdk/package.json | 2 +- packages/node-sdk/scripts/build-dts.mjs | 6 +- packages/node-sdk/src/auth.ts | 2 +- packages/node-sdk/src/catalog.ts | 2 +- packages/node-sdk/src/config-rpc.ts | 45 +- .../src/config/env-model.ts | 39 +- .../src/config/index.ts | 9 +- .../src/config/model.ts | 15 - packages/node-sdk/src/config/resolve.ts | 10 + .../src/config/schema.ts | 111 +- .../src/config/secondary-model.ts | 49 - .../src/config/toml.ts | 78 +- .../types.ts => node-sdk/src/context.ts} | 21 +- .../codes.ts => node-sdk/src/errors.ts} | 169 +- packages/node-sdk/src/events.ts | 55 +- packages/node-sdk/src/flag.ts | 17 + packages/node-sdk/src/image.ts | 98 + packages/node-sdk/src/index.ts | 58 +- packages/node-sdk/src/interaction.ts | 37 + .../node-sdk/src/kimi-code-model-provider.ts | 12 +- packages/node-sdk/src/kimi-harness.ts | 18 +- .../src/logging/formatter.ts | 23 +- packages/node-sdk/src/logging/index.ts | 5 + packages/node-sdk/src/logging/logger.ts | 210 + .../src/logging/resolve-config.ts | 19 +- .../src/logging/sinks.ts | 8 +- packages/node-sdk/src/logging/types.ts | 50 + packages/node-sdk/src/mcp.ts | 54 + packages/node-sdk/src/model-provider.ts | 38 + packages/node-sdk/src/oauth-error.ts | 2 +- packages/node-sdk/src/permission.ts | 4 + packages/node-sdk/src/proxy.ts | 13 + packages/node-sdk/src/replay.ts | 127 + packages/node-sdk/src/rpc.ts | 993 +-- packages/node-sdk/src/sdk-rpc-client-v2.ts | 83 +- packages/node-sdk/src/sdk-rpc-client.ts | 159 - packages/node-sdk/src/session.ts | 11 +- packages/node-sdk/src/task.ts | 17 + .../{agent-core => node-sdk}/src/telemetry.ts | 17 - packages/node-sdk/src/tool.ts | 8 + packages/node-sdk/src/types.ts | 104 +- packages/node-sdk/src/utils/fs.ts | 72 + packages/node-sdk/src/v2/event-mapper.ts | 2 +- packages/node-sdk/src/v2/global-mcp.ts | 10 +- packages/node-sdk/src/v2/import-context.ts | 24 +- packages/node-sdk/src/v2/resume-replay.ts | 136 +- packages/node-sdk/src/v2/session-mapper.ts | 8 +- packages/node-sdk/src/v2/session-wiring.ts | 19 +- packages/node-sdk/test/auth-facade.test.ts | 1080 ---- packages/node-sdk/test/catalog.test.ts | 2 +- packages/node-sdk/test/config.test.ts | 367 +- .../test/create-session-transport.test.ts | 987 --- packages/node-sdk/test/export-session.test.ts | 347 -- packages/node-sdk/test/kimi-harness.test.ts | 159 - packages/node-sdk/test/list-sessions.test.ts | 354 +- packages/node-sdk/test/local-logging.test.ts | 391 -- packages/node-sdk/test/mcp-config.test.ts | 797 --- packages/node-sdk/test/rename-session.test.ts | 228 - .../test/runtime-provider-identity.test.ts | 186 - .../test/runtime-provider-oauth.test.ts | 229 - .../node-sdk/test/sdk-rpc-client-v2.test.ts | 48 +- .../test/session-background-tasks.test.ts | 107 - packages/node-sdk/test/session-cancel.test.ts | 193 - .../node-sdk/test/session-context.test.ts | 232 - .../test/session-event-wiring.test.ts | 2 +- .../session-plan-compact-usage-resume.test.ts | 394 -- .../test/session-prompt-events.test.ts | 170 +- .../test/session-prompt-input.test.ts | 120 - .../node-sdk/test/session-set-model.test.ts | 177 - .../test/session-set-permission.test.ts | 80 - .../test/session-set-thinking.test.ts | 75 - packages/node-sdk/test/session-skills.test.ts | 116 +- packages/node-sdk/test/session-steer.test.ts | 112 - packages/node-sdk/test/v1-v2-parity.test.ts | 5491 ----------------- packages/node-sdk/tsconfig.dts.json | 5 +- packages/node-sdk/tsconfig.json | 2 +- packages/node-sdk/tsdown.config.ts | 1 - packages/node-sdk/vitest.config.ts | 1 - packages/oauth/src/refreshProviderModels.ts | 6 +- packages/protocol/src/events.ts | 2 +- packages/protocol/src/task.ts | 2 +- pnpm-lock.yaml | 876 +-- scripts/check-service-naming.mjs | 2 +- 863 files changed, 2782 insertions(+), 193144 deletions(-) delete mode 100644 apps/kimi-code/src/cli/experimental-v2.ts delete mode 100644 apps/vscode/test/vscode-settings.test.ts create mode 100644 packages/agent-core-v2/src/agent/replayBuilder/fold.ts create mode 100644 packages/agent-core-v2/test/agent/replayBuilder/fold.test.ts delete mode 100644 packages/agent-core/AGENTS.md delete mode 100644 packages/agent-core/CHANGELOG.md delete mode 100644 packages/agent-core/README.md delete mode 100644 packages/agent-core/package.json delete mode 100644 packages/agent-core/scripts/generate-webp-dec-wasm.mjs delete mode 100644 packages/agent-core/src/agent/background/agent-task.ts delete mode 100644 packages/agent-core/src/agent/background/index.ts delete mode 100644 packages/agent-core/src/agent/background/persist.ts delete mode 100644 packages/agent-core/src/agent/background/process-task.ts delete mode 100644 packages/agent-core/src/agent/background/question-task.ts delete mode 100644 packages/agent-core/src/agent/background/task.ts delete mode 100644 packages/agent-core/src/agent/compaction/compaction-instruction.md delete mode 100644 packages/agent-core/src/agent/compaction/compaction-summary-prefix.md delete mode 100644 packages/agent-core/src/agent/compaction/full.ts delete mode 100644 packages/agent-core/src/agent/compaction/handoff.ts delete mode 100644 packages/agent-core/src/agent/compaction/index.ts delete mode 100644 packages/agent-core/src/agent/compaction/micro.ts delete mode 100644 packages/agent-core/src/agent/compaction/render-messages.ts delete mode 100644 packages/agent-core/src/agent/compaction/strategy.ts delete mode 100644 packages/agent-core/src/agent/compaction/types.ts delete mode 100644 packages/agent-core/src/agent/config/index.ts delete mode 100644 packages/agent-core/src/agent/config/thinking.ts delete mode 100644 packages/agent-core/src/agent/config/types.ts delete mode 100644 packages/agent-core/src/agent/context/dynamic-tools.ts delete mode 100644 packages/agent-core/src/agent/context/index.ts delete mode 100644 packages/agent-core/src/agent/context/notification-xml.ts delete mode 100644 packages/agent-core/src/agent/context/projector.ts delete mode 100644 packages/agent-core/src/agent/context/tool-result-render.ts delete mode 100644 packages/agent-core/src/agent/cron/index.ts delete mode 100644 packages/agent-core/src/agent/cron/manager.ts delete mode 100644 packages/agent-core/src/agent/goal/index.ts delete mode 100644 packages/agent-core/src/agent/index.ts delete mode 100644 packages/agent-core/src/agent/injection/goal.ts delete mode 100644 packages/agent-core/src/agent/injection/injector.ts delete mode 100644 packages/agent-core/src/agent/injection/manager.ts delete mode 100644 packages/agent-core/src/agent/injection/permission-mode.ts delete mode 100644 packages/agent-core/src/agent/injection/plan-mode.ts delete mode 100644 packages/agent-core/src/agent/injection/plugin-session-start.ts delete mode 100644 packages/agent-core/src/agent/injection/todo-list.ts delete mode 100644 packages/agent-core/src/agent/injection/tools-diff.ts delete mode 100644 packages/agent-core/src/agent/llm-request-logger.ts delete mode 100644 packages/agent-core/src/agent/llm-request-recorder.ts delete mode 100644 packages/agent-core/src/agent/permission/index.ts delete mode 100644 packages/agent-core/src/agent/permission/matches-rule.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/agent-swarm-exclusive-deny.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/auto-mode-approve.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/auto-mode-ask-user-question-deny.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/default-tool-approve.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/deny-all.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/exit-plan-mode-review-ask.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/fallback-ask.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/file-access-ask.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/git-cwd-write-approve.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/goal-start-review-ask.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/index.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/plan-mode-guard-deny.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/plan-mode-tool-approve.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/pre-tool-call-hook.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/session-approval-history.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/swarm-mode-agent-swarm-approve.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/user-configured-rules.ts delete mode 100644 packages/agent-core/src/agent/permission/policies/yolo-mode-approve.ts delete mode 100644 packages/agent-core/src/agent/permission/types.ts delete mode 100644 packages/agent-core/src/agent/plan/index.ts delete mode 100644 packages/agent-core/src/agent/records/blobref.ts delete mode 100644 packages/agent-core/src/agent/records/index.ts delete mode 100644 packages/agent-core/src/agent/records/migration/index.ts delete mode 100644 packages/agent-core/src/agent/records/migration/v1.1.ts delete mode 100644 packages/agent-core/src/agent/records/migration/v1.2.ts delete mode 100644 packages/agent-core/src/agent/records/migration/v1.3.ts delete mode 100644 packages/agent-core/src/agent/records/migration/v1.4.ts delete mode 100644 packages/agent-core/src/agent/records/persistence.ts delete mode 100644 packages/agent-core/src/agent/records/types.ts delete mode 100644 packages/agent-core/src/agent/replay/build.ts delete mode 100644 packages/agent-core/src/agent/replay/index.ts delete mode 100644 packages/agent-core/src/agent/replay/turns.ts delete mode 100644 packages/agent-core/src/agent/skill/index.ts delete mode 100644 packages/agent-core/src/agent/skill/prompt.ts delete mode 100644 packages/agent-core/src/agent/skill/types.ts delete mode 100644 packages/agent-core/src/agent/swarm/enter-reminder.md delete mode 100644 packages/agent-core/src/agent/swarm/exit-reminder.md delete mode 100644 packages/agent-core/src/agent/swarm/index.ts delete mode 100644 packages/agent-core/src/agent/tool/index.ts delete mode 100644 packages/agent-core/src/agent/tool/types.ts delete mode 100644 packages/agent-core/src/agent/turn/canonical-args.ts delete mode 100644 packages/agent-core/src/agent/turn/index.ts delete mode 100644 packages/agent-core/src/agent/turn/kosong-llm.ts delete mode 100644 packages/agent-core/src/agent/turn/media-resolve.ts delete mode 100644 packages/agent-core/src/agent/turn/tool-dedup.ts delete mode 100644 packages/agent-core/src/agent/turn/tool-result-budget.ts delete mode 100644 packages/agent-core/src/agent/usage/index.ts delete mode 100644 packages/agent-core/src/base/common/event.ts delete mode 100644 packages/agent-core/src/config/kimi-env-params.ts delete mode 100644 packages/agent-core/src/config/merge.ts delete mode 100644 packages/agent-core/src/config/migrations.ts delete mode 100644 packages/agent-core/src/config/path.ts delete mode 100644 packages/agent-core/src/config/print-defaults.ts delete mode 100644 packages/agent-core/src/config/resolve.ts delete mode 100644 packages/agent-core/src/config/workspace-local.ts delete mode 100644 packages/agent-core/src/di/README.md delete mode 100644 packages/agent-core/src/di/descriptors.ts delete mode 100644 packages/agent-core/src/di/errors.ts delete mode 100644 packages/agent-core/src/di/extensions.ts delete mode 100644 packages/agent-core/src/di/graph.ts delete mode 100644 packages/agent-core/src/di/index.ts delete mode 100644 packages/agent-core/src/di/instantiation.ts delete mode 100644 packages/agent-core/src/di/instantiationService.ts delete mode 100644 packages/agent-core/src/di/lifecycle.ts delete mode 100644 packages/agent-core/src/di/serviceCollection.ts delete mode 100644 packages/agent-core/src/di/test.ts delete mode 100644 packages/agent-core/src/di/testInstantiationService.ts delete mode 100644 packages/agent-core/src/di/util/idleValue.ts delete mode 100644 packages/agent-core/src/di/util/linkedList.ts delete mode 100644 packages/agent-core/src/errors.ts delete mode 100644 packages/agent-core/src/errors/classes.ts delete mode 100644 packages/agent-core/src/errors/index.ts delete mode 100644 packages/agent-core/src/errors/serialize.ts delete mode 100644 packages/agent-core/src/errors/unexpectedError.ts delete mode 100644 packages/agent-core/src/flags/index.ts delete mode 100644 packages/agent-core/src/flags/registry.ts delete mode 100644 packages/agent-core/src/flags/resolver.ts delete mode 100644 packages/agent-core/src/flags/types.ts delete mode 100644 packages/agent-core/src/index.ts delete mode 100644 packages/agent-core/src/logging/index.ts delete mode 100644 packages/agent-core/src/logging/logger.ts delete mode 100644 packages/agent-core/src/logging/types.ts delete mode 100644 packages/agent-core/src/loop/README.md delete mode 100644 packages/agent-core/src/loop/errors.ts delete mode 100644 packages/agent-core/src/loop/events.ts delete mode 100644 packages/agent-core/src/loop/index.ts delete mode 100644 packages/agent-core/src/loop/llm.ts delete mode 100644 packages/agent-core/src/loop/retry.ts delete mode 100644 packages/agent-core/src/loop/run-turn.ts delete mode 100644 packages/agent-core/src/loop/tool-access.ts delete mode 100644 packages/agent-core/src/loop/tool-args-parse.ts delete mode 100644 packages/agent-core/src/loop/tool-call.ts delete mode 100644 packages/agent-core/src/loop/tool-scheduler.ts delete mode 100644 packages/agent-core/src/loop/turn-step.ts delete mode 100644 packages/agent-core/src/loop/types.ts delete mode 100644 packages/agent-core/src/mcp/auth-tool.ts delete mode 100644 packages/agent-core/src/mcp/client-http.ts delete mode 100644 packages/agent-core/src/mcp/client-remote.ts delete mode 100644 packages/agent-core/src/mcp/client-shared.ts delete mode 100644 packages/agent-core/src/mcp/client-sse.ts delete mode 100644 packages/agent-core/src/mcp/client-stdio.ts delete mode 100644 packages/agent-core/src/mcp/config-loader.ts delete mode 100644 packages/agent-core/src/mcp/config-view.ts delete mode 100644 packages/agent-core/src/mcp/connection-manager.ts delete mode 100644 packages/agent-core/src/mcp/global-config.ts delete mode 100644 packages/agent-core/src/mcp/index.ts delete mode 100644 packages/agent-core/src/mcp/oauth/callback-server.ts delete mode 100644 packages/agent-core/src/mcp/oauth/index.ts delete mode 100644 packages/agent-core/src/mcp/oauth/provider.ts delete mode 100644 packages/agent-core/src/mcp/oauth/service.ts delete mode 100644 packages/agent-core/src/mcp/oauth/store.ts delete mode 100644 packages/agent-core/src/mcp/output.ts delete mode 100644 packages/agent-core/src/mcp/registry.ts delete mode 100644 packages/agent-core/src/mcp/session-config.ts delete mode 100644 packages/agent-core/src/mcp/tool-naming.ts delete mode 100644 packages/agent-core/src/mcp/types.ts delete mode 100644 packages/agent-core/src/plugin.ts delete mode 100644 packages/agent-core/src/plugin/archive.ts delete mode 100644 packages/agent-core/src/plugin/commands.ts delete mode 100644 packages/agent-core/src/plugin/github-resolver.ts delete mode 100644 packages/agent-core/src/plugin/index.ts delete mode 100644 packages/agent-core/src/plugin/manager.ts delete mode 100644 packages/agent-core/src/plugin/manifest.ts delete mode 100644 packages/agent-core/src/plugin/source.ts delete mode 100644 packages/agent-core/src/plugin/store.ts delete mode 100644 packages/agent-core/src/plugin/types.ts delete mode 100644 packages/agent-core/src/profile/agentfile/catalog.ts delete mode 100644 packages/agent-core/src/profile/agentfile/discovery.ts delete mode 100644 packages/agent-core/src/profile/agentfile/from-file.ts delete mode 100644 packages/agent-core/src/profile/agentfile/index.ts delete mode 100644 packages/agent-core/src/profile/agentfile/parser.ts delete mode 100644 packages/agent-core/src/profile/agentfile/paths.ts delete mode 100644 packages/agent-core/src/profile/agentfile/roots.ts delete mode 100644 packages/agent-core/src/profile/agentfile/system-file.ts delete mode 100644 packages/agent-core/src/profile/agentfile/types.ts delete mode 100644 packages/agent-core/src/profile/agentfile/validate.ts delete mode 100644 packages/agent-core/src/profile/context.ts delete mode 100644 packages/agent-core/src/profile/default.ts delete mode 100644 packages/agent-core/src/profile/default/agent.yaml delete mode 100644 packages/agent-core/src/profile/default/coder.yaml delete mode 100644 packages/agent-core/src/profile/default/explore.yaml delete mode 100644 packages/agent-core/src/profile/default/init.md delete mode 100644 packages/agent-core/src/profile/default/plan.yaml delete mode 100644 packages/agent-core/src/profile/default/system.md delete mode 100644 packages/agent-core/src/profile/index.ts delete mode 100644 packages/agent-core/src/profile/load.ts delete mode 100644 packages/agent-core/src/profile/plugin-sections.ts delete mode 100644 packages/agent-core/src/profile/prompt-sections.ts delete mode 100644 packages/agent-core/src/profile/resolve.ts delete mode 100644 packages/agent-core/src/profile/types.ts delete mode 100644 packages/agent-core/src/prompt-modules.d.ts delete mode 100644 packages/agent-core/src/rpc/client.ts delete mode 100644 packages/agent-core/src/rpc/core-api.ts delete mode 100644 packages/agent-core/src/rpc/core-impl.ts delete mode 100644 packages/agent-core/src/rpc/events.ts delete mode 100644 packages/agent-core/src/rpc/index.ts delete mode 100644 packages/agent-core/src/rpc/resumed.ts delete mode 100644 packages/agent-core/src/rpc/sdk-api.ts delete mode 100644 packages/agent-core/src/rpc/types.ts delete mode 100644 packages/agent-core/src/services/AGENTS.md delete mode 100644 packages/agent-core/src/services/approval/approval.ts delete mode 100644 packages/agent-core/src/services/auth/managedAuth.ts delete mode 100644 packages/agent-core/src/services/authSummary/authSummary.ts delete mode 100644 packages/agent-core/src/services/authSummary/authSummaryService.ts delete mode 100644 packages/agent-core/src/services/config/config.ts delete mode 100644 packages/agent-core/src/services/config/configService.ts delete mode 100644 packages/agent-core/src/services/coreProcess/coreProcess.ts delete mode 100644 packages/agent-core/src/services/coreProcess/coreProcessClient.ts delete mode 100644 packages/agent-core/src/services/coreProcess/coreProcessService.ts delete mode 100644 packages/agent-core/src/services/environment/environment.ts delete mode 100644 packages/agent-core/src/services/event/event.ts delete mode 100644 packages/agent-core/src/services/event/eventService.ts delete mode 100644 packages/agent-core/src/services/fileStore/fileStore.ts delete mode 100644 packages/agent-core/src/services/fileStore/fileStoreService.ts delete mode 100644 packages/agent-core/src/services/fileStore/index.ts delete mode 100644 packages/agent-core/src/services/fs/fs.ts delete mode 100644 packages/agent-core/src/services/fs/fsGit.ts delete mode 100644 packages/agent-core/src/services/fs/fsGitService.ts delete mode 100644 packages/agent-core/src/services/fs/fsPathSafety.ts delete mode 100644 packages/agent-core/src/services/fs/fsSearch.ts delete mode 100644 packages/agent-core/src/services/fs/fsSearchService.ts delete mode 100644 packages/agent-core/src/services/fs/fsService.ts delete mode 100644 packages/agent-core/src/services/fs/fsWatcher.ts delete mode 100644 packages/agent-core/src/services/fs/fsWatcherService.ts delete mode 100644 packages/agent-core/src/services/fs/index.ts delete mode 100644 packages/agent-core/src/services/index.ts delete mode 100644 packages/agent-core/src/services/logger/logger.ts delete mode 100644 packages/agent-core/src/services/mcp/mcp.ts delete mode 100644 packages/agent-core/src/services/mcp/mcpService.ts delete mode 100644 packages/agent-core/src/services/message/message.ts delete mode 100644 packages/agent-core/src/services/message/messageService.ts delete mode 100644 packages/agent-core/src/services/message/transcript.ts delete mode 100644 packages/agent-core/src/services/modelCatalog/modelCatalog.ts delete mode 100644 packages/agent-core/src/services/modelCatalog/modelCatalogService.ts delete mode 100644 packages/agent-core/src/services/oauth/oauth.ts delete mode 100644 packages/agent-core/src/services/oauth/oauthService.ts delete mode 100644 packages/agent-core/src/services/prompt/prompt.ts delete mode 100644 packages/agent-core/src/services/prompt/promptService.ts delete mode 100644 packages/agent-core/src/services/question/question.ts delete mode 100644 packages/agent-core/src/services/session/session.ts delete mode 100644 packages/agent-core/src/services/session/sessionService.ts delete mode 100644 packages/agent-core/src/services/skill/skill.ts delete mode 100644 packages/agent-core/src/services/skill/skillService.ts delete mode 100644 packages/agent-core/src/services/task/task.ts delete mode 100644 packages/agent-core/src/services/task/taskService.ts delete mode 100644 packages/agent-core/src/services/terminal/terminal.ts delete mode 100644 packages/agent-core/src/services/terminal/terminalService.ts delete mode 100644 packages/agent-core/src/services/tool/tool.ts delete mode 100644 packages/agent-core/src/services/tool/toolService.ts delete mode 100644 packages/agent-core/src/services/workspace/index.ts delete mode 100644 packages/agent-core/src/services/workspace/workspaceFs.ts delete mode 100644 packages/agent-core/src/services/workspace/workspaceFsService.ts delete mode 100644 packages/agent-core/src/services/workspace/workspaceRegistry.ts delete mode 100644 packages/agent-core/src/services/workspace/workspaceRegistryService.ts delete mode 100644 packages/agent-core/src/session/export/index.ts delete mode 100644 packages/agent-core/src/session/export/manifest.ts delete mode 100644 packages/agent-core/src/session/export/session-export.ts delete mode 100644 packages/agent-core/src/session/export/wire-scan.ts delete mode 100644 packages/agent-core/src/session/export/zip.ts delete mode 100644 packages/agent-core/src/session/git-context.ts delete mode 100644 packages/agent-core/src/session/hooks/engine.ts delete mode 100644 packages/agent-core/src/session/hooks/index.ts delete mode 100644 packages/agent-core/src/session/hooks/runner.ts delete mode 100644 packages/agent-core/src/session/hooks/types.ts delete mode 100644 packages/agent-core/src/session/hooks/user-prompt.ts delete mode 100644 packages/agent-core/src/session/index.ts delete mode 100644 packages/agent-core/src/session/main-agent-profile.ts delete mode 100644 packages/agent-core/src/session/prompt-metadata.ts delete mode 100644 packages/agent-core/src/session/provider-manager.ts delete mode 100644 packages/agent-core/src/session/rpc.ts delete mode 100644 packages/agent-core/src/session/store/index.ts delete mode 100644 packages/agent-core/src/session/store/session-index.ts delete mode 100644 packages/agent-core/src/session/store/session-store.ts delete mode 100644 packages/agent-core/src/session/store/workdir-key.ts delete mode 100644 packages/agent-core/src/session/store/workspace-registry-file.ts delete mode 100644 packages/agent-core/src/session/subagent-batch.ts delete mode 100644 packages/agent-core/src/session/subagent-binding.ts delete mode 100644 packages/agent-core/src/session/subagent-host.ts delete mode 100644 packages/agent-core/src/session/summary-continuation.md delete mode 100644 packages/agent-core/src/skill/builtin/check-kimi-code-docs.md delete mode 100644 packages/agent-core/src/skill/builtin/check-kimi-code-docs.ts delete mode 100644 packages/agent-core/src/skill/builtin/custom-theme.md delete mode 100644 packages/agent-core/src/skill/builtin/custom-theme.ts delete mode 100644 packages/agent-core/src/skill/builtin/import-from-cc-codex.md delete mode 100644 packages/agent-core/src/skill/builtin/import-from-cc-codex.ts delete mode 100644 packages/agent-core/src/skill/builtin/index.ts delete mode 100644 packages/agent-core/src/skill/builtin/mcp-config.md delete mode 100644 packages/agent-core/src/skill/builtin/mcp-config.ts delete mode 100644 packages/agent-core/src/skill/builtin/sub-skill.ts delete mode 100644 packages/agent-core/src/skill/builtin/sub-skill/SKILL.md delete mode 100644 packages/agent-core/src/skill/builtin/sub-skill/consolidate/SKILL.md delete mode 100644 packages/agent-core/src/skill/builtin/sub-skill/review/SKILL.md delete mode 100644 packages/agent-core/src/skill/builtin/update-config.md delete mode 100644 packages/agent-core/src/skill/builtin/update-config.ts delete mode 100644 packages/agent-core/src/skill/builtin/write-goal.md delete mode 100644 packages/agent-core/src/skill/builtin/write-goal.ts delete mode 100644 packages/agent-core/src/skill/index.ts delete mode 100644 packages/agent-core/src/skill/parser.ts delete mode 100644 packages/agent-core/src/skill/registry.ts delete mode 100644 packages/agent-core/src/skill/scanner.ts delete mode 100644 packages/agent-core/src/skill/types.ts delete mode 100644 packages/agent-core/src/tools/args-validator.ts delete mode 100644 packages/agent-core/src/tools/background/format.ts delete mode 100644 packages/agent-core/src/tools/background/index.ts delete mode 100644 packages/agent-core/src/tools/background/task-list.md delete mode 100644 packages/agent-core/src/tools/background/task-list.ts delete mode 100644 packages/agent-core/src/tools/background/task-output.md delete mode 100644 packages/agent-core/src/tools/background/task-output.ts delete mode 100644 packages/agent-core/src/tools/background/task-stop.md delete mode 100644 packages/agent-core/src/tools/background/task-stop.ts delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/agent-background-disabled.md delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/agent-background-enabled.md delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/agent-swarm.md delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/agent-swarm.ts delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/agent.md delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/agent.ts delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/ask-user.md delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/ask-user.ts delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/skill-tool.md delete mode 100644 packages/agent-core/src/tools/builtin/collaboration/skill-tool.ts delete mode 100644 packages/agent-core/src/tools/builtin/file/edit.md delete mode 100644 packages/agent-core/src/tools/builtin/file/edit.ts delete mode 100644 packages/agent-core/src/tools/builtin/file/glob.md delete mode 100644 packages/agent-core/src/tools/builtin/file/glob.ts delete mode 100644 packages/agent-core/src/tools/builtin/file/grep.md delete mode 100644 packages/agent-core/src/tools/builtin/file/grep.ts delete mode 100644 packages/agent-core/src/tools/builtin/file/line-endings.ts delete mode 100644 packages/agent-core/src/tools/builtin/file/read-media.md delete mode 100644 packages/agent-core/src/tools/builtin/file/read-media.ts delete mode 100644 packages/agent-core/src/tools/builtin/file/read.md delete mode 100644 packages/agent-core/src/tools/builtin/file/read.ts delete mode 100644 packages/agent-core/src/tools/builtin/file/write.md delete mode 100644 packages/agent-core/src/tools/builtin/file/write.ts delete mode 100644 packages/agent-core/src/tools/builtin/goal/create-goal.md delete mode 100644 packages/agent-core/src/tools/builtin/goal/create-goal.ts delete mode 100644 packages/agent-core/src/tools/builtin/goal/get-goal.md delete mode 100644 packages/agent-core/src/tools/builtin/goal/get-goal.ts delete mode 100644 packages/agent-core/src/tools/builtin/goal/outcome-prompts.ts delete mode 100644 packages/agent-core/src/tools/builtin/goal/serialize.ts delete mode 100644 packages/agent-core/src/tools/builtin/goal/set-goal-budget.md delete mode 100644 packages/agent-core/src/tools/builtin/goal/set-goal-budget.ts delete mode 100644 packages/agent-core/src/tools/builtin/goal/update-goal.md delete mode 100644 packages/agent-core/src/tools/builtin/goal/update-goal.ts delete mode 100644 packages/agent-core/src/tools/builtin/index.ts delete mode 100644 packages/agent-core/src/tools/builtin/planning/enter-plan-mode.md delete mode 100644 packages/agent-core/src/tools/builtin/planning/enter-plan-mode.ts delete mode 100644 packages/agent-core/src/tools/builtin/planning/exit-plan-mode.md delete mode 100644 packages/agent-core/src/tools/builtin/planning/exit-plan-mode.ts delete mode 100644 packages/agent-core/src/tools/builtin/select-tools.ts delete mode 100644 packages/agent-core/src/tools/builtin/shell/bash.md delete mode 100644 packages/agent-core/src/tools/builtin/shell/bash.ts delete mode 100644 packages/agent-core/src/tools/builtin/state/todo-list.md delete mode 100644 packages/agent-core/src/tools/builtin/state/todo-list.ts delete mode 100644 packages/agent-core/src/tools/builtin/web/fetch-url.md delete mode 100644 packages/agent-core/src/tools/builtin/web/fetch-url.ts delete mode 100644 packages/agent-core/src/tools/builtin/web/web-search.md delete mode 100644 packages/agent-core/src/tools/builtin/web/web-search.ts delete mode 100644 packages/agent-core/src/tools/cron/clock.ts delete mode 100644 packages/agent-core/src/tools/cron/cron-create.md delete mode 100644 packages/agent-core/src/tools/cron/cron-create.ts delete mode 100644 packages/agent-core/src/tools/cron/cron-delete.md delete mode 100644 packages/agent-core/src/tools/cron/cron-delete.ts delete mode 100644 packages/agent-core/src/tools/cron/cron-expr.ts delete mode 100644 packages/agent-core/src/tools/cron/cron-fire-xml.ts delete mode 100644 packages/agent-core/src/tools/cron/cron-list.md delete mode 100644 packages/agent-core/src/tools/cron/cron-list.ts delete mode 100644 packages/agent-core/src/tools/cron/jitter.ts delete mode 100644 packages/agent-core/src/tools/cron/persist.ts delete mode 100644 packages/agent-core/src/tools/cron/scheduler.ts delete mode 100644 packages/agent-core/src/tools/cron/session-store.ts delete mode 100644 packages/agent-core/src/tools/cron/telemetry-events.ts delete mode 100644 packages/agent-core/src/tools/cron/time-format.ts delete mode 100644 packages/agent-core/src/tools/cron/types.ts delete mode 100644 packages/agent-core/src/tools/display/index.ts delete mode 100644 packages/agent-core/src/tools/display/schemas.ts delete mode 100644 packages/agent-core/src/tools/policies/path-access.ts delete mode 100644 packages/agent-core/src/tools/policies/sensitive.ts delete mode 100644 packages/agent-core/src/tools/providers/local-fetch-url.ts delete mode 100644 packages/agent-core/src/tools/providers/moonshot-fetch-url.ts delete mode 100644 packages/agent-core/src/tools/providers/moonshot-web-search.ts delete mode 100644 packages/agent-core/src/tools/store.ts delete mode 100644 packages/agent-core/src/tools/support/file-type.ts delete mode 100644 packages/agent-core/src/tools/support/git-worktree.ts delete mode 100644 packages/agent-core/src/tools/support/image-compress.ts delete mode 100644 packages/agent-core/src/tools/support/image-format-policy.ts delete mode 100644 packages/agent-core/src/tools/support/image-limits.ts delete mode 100644 packages/agent-core/src/tools/support/image-originals.ts delete mode 100644 packages/agent-core/src/tools/support/input-schema.ts delete mode 100644 packages/agent-core/src/tools/support/list-directory.ts delete mode 100644 packages/agent-core/src/tools/support/path-glob-match.ts delete mode 100644 packages/agent-core/src/tools/support/result-builder.ts delete mode 100644 packages/agent-core/src/tools/support/rg-locator.ts delete mode 100644 packages/agent-core/src/tools/support/rule-match.ts delete mode 100644 packages/agent-core/src/tools/support/run-rg.ts delete mode 100644 packages/agent-core/src/tools/support/services.ts delete mode 100644 packages/agent-core/src/tools/support/stream.ts delete mode 100644 packages/agent-core/src/tools/support/video-delivery.ts delete mode 100644 packages/agent-core/src/tools/support/webp-dec-wasm.ts delete mode 100644 packages/agent-core/src/tools/support/webp-decode.ts delete mode 100644 packages/agent-core/src/tools/support/workspace.ts delete mode 100644 packages/agent-core/src/utils/abort.ts delete mode 100644 packages/agent-core/src/utils/completion-budget.ts delete mode 100644 packages/agent-core/src/utils/fs.ts delete mode 100644 packages/agent-core/src/utils/hero-slug.ts delete mode 100644 packages/agent-core/src/utils/per-id-json-store.ts delete mode 100644 packages/agent-core/src/utils/promise.ts delete mode 100644 packages/agent-core/src/utils/proxy.ts delete mode 100644 packages/agent-core/src/utils/render-prompt.ts delete mode 100644 packages/agent-core/src/utils/tokens.ts delete mode 100644 packages/agent-core/src/utils/types.ts delete mode 100644 packages/agent-core/src/utils/workdir-slug.ts delete mode 100644 packages/agent-core/src/utils/xml-escape.ts delete mode 100644 packages/agent-core/src/version.ts delete mode 100644 packages/agent-core/test/agent/background/agent-timeout.test.ts delete mode 100644 packages/agent-core/test/agent/background/foreground-persistence.test.ts delete mode 100644 packages/agent-core/test/agent/background/heartbeat-stale.test.ts delete mode 100644 packages/agent-core/test/agent/background/helpers.ts delete mode 100644 packages/agent-core/test/agent/background/ids.test.ts delete mode 100644 packages/agent-core/test/agent/background/manager.test.ts delete mode 100644 packages/agent-core/test/agent/background/output-access.test.ts delete mode 100644 packages/agent-core/test/agent/background/output-limit.test.ts delete mode 100644 packages/agent-core/test/agent/background/persist.test.ts delete mode 100644 packages/agent-core/test/agent/background/persistence-compat.test.ts delete mode 100644 packages/agent-core/test/agent/background/reconcile.test.ts delete mode 100644 packages/agent-core/test/agent/background/rpc-events.test.ts delete mode 100644 packages/agent-core/test/agent/basic.test.ts delete mode 100644 packages/agent-core/test/agent/bg-idle-notification-repro.test.ts delete mode 100644 packages/agent-core/test/agent/compaction/anthropic-compliance.test.ts delete mode 100644 packages/agent-core/test/agent/compaction/compaction-scenarios.test.ts delete mode 100644 packages/agent-core/test/agent/compaction/full.test.ts delete mode 100644 packages/agent-core/test/agent/compaction/handoff.test.ts delete mode 100644 packages/agent-core/test/agent/compaction/micro.test.ts delete mode 100644 packages/agent-core/test/agent/compaction/strategy.test.ts delete mode 100644 packages/agent-core/test/agent/config-state.test.ts delete mode 100644 packages/agent-core/test/agent/config.test.ts delete mode 100644 packages/agent-core/test/agent/config/thinking.test.ts delete mode 100644 packages/agent-core/test/agent/context.test.ts delete mode 100644 packages/agent-core/test/agent/context/projector.test.ts delete mode 100644 packages/agent-core/test/agent/cron/agent-integration.test.ts delete mode 100644 packages/agent-core/test/agent/cron/cron.e2e.test.ts delete mode 100644 packages/agent-core/test/agent/cron/harness/stub.ts delete mode 100644 packages/agent-core/test/agent/cron/manager.test.ts delete mode 100644 packages/agent-core/test/agent/cron/manual-tick.test.ts delete mode 100644 packages/agent-core/test/agent/cron/resume.test.ts delete mode 100644 packages/agent-core/test/agent/cron/subagent-skip.test.ts delete mode 100644 packages/agent-core/test/agent/dynamic-tools.test.ts delete mode 100644 packages/agent-core/test/agent/goal.test.ts delete mode 100644 packages/agent-core/test/agent/harness/agent.ts delete mode 100644 packages/agent-core/test/agent/harness/index.ts delete mode 100644 packages/agent-core/test/agent/harness/scripted-generate.ts delete mode 100644 packages/agent-core/test/agent/harness/snapshots.ts delete mode 100644 packages/agent-core/test/agent/image-caption-injection.test.ts delete mode 100644 packages/agent-core/test/agent/injection/goal.test.ts delete mode 100644 packages/agent-core/test/agent/injection/manager.test.ts delete mode 100644 packages/agent-core/test/agent/injection/plan-mode.test.ts delete mode 100644 packages/agent-core/test/agent/injection/plugin-session-start.test.ts delete mode 100644 packages/agent-core/test/agent/injection/todo-list.test.ts delete mode 100644 packages/agent-core/test/agent/kosong-llm.test.ts delete mode 100644 packages/agent-core/test/agent/llm-request-recorder.test.ts delete mode 100644 packages/agent-core/test/agent/permission.test.ts delete mode 100644 packages/agent-core/test/agent/permission/default-tool-approve.test.ts delete mode 100644 packages/agent-core/test/agent/permission/goal-start-review-ask.test.ts delete mode 100644 packages/agent-core/test/agent/plan.test.ts delete mode 100644 packages/agent-core/test/agent/question.test.ts delete mode 100644 packages/agent-core/test/agent/records/blobref.test.ts delete mode 100644 packages/agent-core/test/agent/records/index.test.ts delete mode 100644 packages/agent-core/test/agent/records/migration.test.ts delete mode 100644 packages/agent-core/test/agent/records/migration/utils.ts delete mode 100644 packages/agent-core/test/agent/records/migration/v1.1.test.ts delete mode 100644 packages/agent-core/test/agent/records/migration/v1.2.test.ts delete mode 100644 packages/agent-core/test/agent/records/migration/v1.4.test.ts delete mode 100644 packages/agent-core/test/agent/records/persistence.test.ts delete mode 100644 packages/agent-core/test/agent/resume.test.ts delete mode 100644 packages/agent-core/test/agent/skill-prompt.test.ts delete mode 100644 packages/agent-core/test/agent/skill-tool-manager.test.ts delete mode 100644 packages/agent-core/test/agent/tool-result-render.test.ts delete mode 100644 packages/agent-core/test/agent/tool-select.e2e.test.ts delete mode 100644 packages/agent-core/test/agent/tool.test.ts delete mode 100644 packages/agent-core/test/agent/turn.test.ts delete mode 100644 packages/agent-core/test/agent/turn/tool-dedup.test.ts delete mode 100644 packages/agent-core/test/agent/usage.test.ts delete mode 100644 packages/agent-core/test/base/common/event.test.ts delete mode 100644 packages/agent-core/test/config/configs.test.ts delete mode 100644 packages/agent-core/test/config/env-model.test.ts delete mode 100644 packages/agent-core/test/config/kimi-env-params.test.ts delete mode 100644 packages/agent-core/test/config/model-overrides.test.ts delete mode 100644 packages/agent-core/test/config/resolve.test.ts delete mode 100644 packages/agent-core/test/config/secondary-model.test.ts delete mode 100644 packages/agent-core/test/config/workspace-local.test.ts delete mode 100644 packages/agent-core/test/di/auto-inject.test.ts delete mode 100644 packages/agent-core/test/di/child.test.ts delete mode 100644 packages/agent-core/test/di/collection.test.ts delete mode 100644 packages/agent-core/test/di/cyclic.test.ts delete mode 100644 packages/agent-core/test/di/decorator.test.ts delete mode 100644 packages/agent-core/test/di/delayed.test.ts delete mode 100644 packages/agent-core/test/di/descriptor.test.ts delete mode 100644 packages/agent-core/test/di/extensions.test.ts delete mode 100644 packages/agent-core/test/di/graph.test.ts delete mode 100644 packages/agent-core/test/di/instantiation.test.ts delete mode 100644 packages/agent-core/test/di/lifecycle.test.ts delete mode 100644 packages/agent-core/test/di/self-register.test.ts delete mode 100644 packages/agent-core/test/di/test-instantiation.test.ts delete mode 100644 packages/agent-core/test/di/trace.test.ts delete mode 100644 packages/agent-core/test/errors/serialize.test.ts delete mode 100644 packages/agent-core/test/errors/unexpectedError.test.ts delete mode 100644 packages/agent-core/test/fixtures/telemetry.ts delete mode 100644 packages/agent-core/test/fixtures/test-kaos.ts delete mode 100644 packages/agent-core/test/flags/resolver.test.ts delete mode 100644 packages/agent-core/test/harness/coder-subagent-tools.test.ts delete mode 100644 packages/agent-core/test/harness/goal-session.test.ts delete mode 100644 packages/agent-core/test/harness/model-alias-session.test.ts delete mode 100644 packages/agent-core/test/harness/plan-mode-session.test.ts delete mode 100644 packages/agent-core/test/harness/runtime-provider.test.ts delete mode 100644 packages/agent-core/test/harness/runtime.test.ts delete mode 100644 packages/agent-core/test/harness/skill-session.test.ts delete mode 100644 packages/agent-core/test/hooks/engine.test.ts delete mode 100644 packages/agent-core/test/hooks/integration.test.ts delete mode 100644 packages/agent-core/test/hooks/runner.test.ts delete mode 100644 packages/agent-core/test/logging/formatter.test.ts delete mode 100644 packages/agent-core/test/logging/logger.test.ts delete mode 100644 packages/agent-core/test/logging/sinks.test.ts delete mode 100644 packages/agent-core/test/loop/abort.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/api-shape.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/error-paths.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/events.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/fixtures/collecting-sink.ts delete mode 100644 packages/agent-core/test/loop/fixtures/fake-llm.ts delete mode 100644 packages/agent-core/test/loop/fixtures/helpers.ts delete mode 100644 packages/agent-core/test/loop/fixtures/recording-context.ts delete mode 100644 packages/agent-core/test/loop/fixtures/tools.ts delete mode 100644 packages/agent-core/test/loop/hooks.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/retry.test.ts delete mode 100644 packages/agent-core/test/loop/streaming.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/tool-args-parse.test.ts delete mode 100644 packages/agent-core/test/loop/tool-call.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/tool-exchange-fallback.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/tool-scheduler.test.ts delete mode 100644 packages/agent-core/test/loop/transcript.e2e.test.ts delete mode 100644 packages/agent-core/test/loop/turn-lifecycle.e2e.test.ts delete mode 100644 packages/agent-core/test/mcp/auth-tool.test.ts delete mode 100644 packages/agent-core/test/mcp/client-http.test.ts delete mode 100644 packages/agent-core/test/mcp/client-sse.test.ts delete mode 100644 packages/agent-core/test/mcp/client-stdio.test.ts delete mode 100644 packages/agent-core/test/mcp/config-loader.test.ts delete mode 100644 packages/agent-core/test/mcp/connection-manager.test.ts delete mode 100644 packages/agent-core/test/mcp/fixtures/crash-after-connect-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/fixtures/cwd-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/fixtures/hanging-list-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/fixtures/mock-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/fixtures/slow-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/fixtures/slow-tool-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/fixtures/stderr-then-exit-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/fixtures/structured-content-stdio-server.mjs delete mode 100644 packages/agent-core/test/mcp/oauth-callback-server.test.ts delete mode 100644 packages/agent-core/test/mcp/oauth-service.test.ts delete mode 100644 packages/agent-core/test/mcp/oauth-store.test.ts delete mode 100644 packages/agent-core/test/mcp/output.test.ts delete mode 100644 packages/agent-core/test/mcp/registry.test.ts delete mode 100644 packages/agent-core/test/mcp/session-config-merge.test.ts delete mode 100644 packages/agent-core/test/mcp/tool-manager-mcp.test.ts delete mode 100644 packages/agent-core/test/mcp/tool-naming.test.ts delete mode 100644 packages/agent-core/test/plugin/archive.test.ts delete mode 100644 packages/agent-core/test/plugin/commands.test.ts delete mode 100644 packages/agent-core/test/plugin/github-resolver.test.ts delete mode 100644 packages/agent-core/test/plugin/integration.test.ts delete mode 100644 packages/agent-core/test/plugin/manager.test.ts delete mode 100644 packages/agent-core/test/plugin/manifest.test.ts delete mode 100644 packages/agent-core/test/plugin/source.test.ts delete mode 100644 packages/agent-core/test/plugin/store.test.ts delete mode 100644 packages/agent-core/test/profile/agent-profile-loader.test.ts delete mode 100644 packages/agent-core/test/profile/agentfile.test.ts delete mode 100644 packages/agent-core/test/profile/context.test.ts delete mode 100644 packages/agent-core/test/profile/default-agent-profiles.test.ts delete mode 100644 packages/agent-core/test/prompt-placeholders.test.ts delete mode 100644 packages/agent-core/test/rpc/config-rpc.test.ts delete mode 100644 packages/agent-core/test/rpc/create-rpc.test.ts delete mode 100644 packages/agent-core/test/rpc/mcp-rpc.test.ts delete mode 100644 packages/agent-core/test/rpc/plugins-rpc.test.ts delete mode 100644 packages/agent-core/test/services/approval-adapter.test.ts delete mode 100644 packages/agent-core/test/services/coreProcessService.test.ts delete mode 100644 packages/agent-core/test/services/fs-git-service.test.ts delete mode 100644 packages/agent-core/test/services/interfaces.test.ts delete mode 100644 packages/agent-core/test/services/message-service.test.ts delete mode 100644 packages/agent-core/test/services/message-transcript.test.ts delete mode 100644 packages/agent-core/test/services/model-catalog-service.test.ts delete mode 100644 packages/agent-core/test/services/oauth-service.test.ts delete mode 100644 packages/agent-core/test/services/prompt-service.test.ts delete mode 100644 packages/agent-core/test/services/question-adapter.test.ts delete mode 100644 packages/agent-core/test/services/session-service.test.ts delete mode 100644 packages/agent-core/test/services/task-service.test.ts delete mode 100644 packages/agent-core/test/services/terminal-service.test.ts delete mode 100644 packages/agent-core/test/services/tool-service.test.ts delete mode 100644 packages/agent-core/test/services/workspace-registry.test.ts delete mode 100644 packages/agent-core/test/session/cron-stop-on-close.test.ts delete mode 100644 packages/agent-core/test/session/git-context.test.ts delete mode 100644 packages/agent-core/test/session/init.test.ts delete mode 100644 packages/agent-core/test/session/lifecycle-hooks.test.ts delete mode 100644 packages/agent-core/test/session/prompt-metadata.test.ts delete mode 100644 packages/agent-core/test/session/store.test.ts delete mode 100644 packages/agent-core/test/session/subagent-batch.test.ts delete mode 100644 packages/agent-core/test/session/subagent-host.test.ts delete mode 100644 packages/agent-core/test/setup.ts delete mode 100644 packages/agent-core/test/skill/builtin-custom-theme.test.ts delete mode 100644 packages/agent-core/test/skill/builtin-sub-skill.test.ts delete mode 100644 packages/agent-core/test/skill/builtin-update-config.test.ts delete mode 100644 packages/agent-core/test/skill/parser-frontmatter.test.ts delete mode 100644 packages/agent-core/test/skill/parser.test.ts delete mode 100644 packages/agent-core/test/skill/registry.test.ts delete mode 100644 packages/agent-core/test/skill/scanner.test.ts delete mode 100644 packages/agent-core/test/tools/agent.test.ts delete mode 100644 packages/agent-core/test/tools/ask-user.test.ts delete mode 100644 packages/agent-core/test/tools/background/task-tools.test.ts delete mode 100644 packages/agent-core/test/tools/bash-env.test.ts delete mode 100644 packages/agent-core/test/tools/bash-windows-kill.test.ts delete mode 100644 packages/agent-core/test/tools/bash.test.ts delete mode 100644 packages/agent-core/test/tools/builtin-current.test.ts delete mode 100644 packages/agent-core/test/tools/cron/clock.test.ts delete mode 100644 packages/agent-core/test/tools/cron/cron-create.test.ts delete mode 100644 packages/agent-core/test/tools/cron/cron-delete.test.ts delete mode 100644 packages/agent-core/test/tools/cron/cron-expr.test.ts delete mode 100644 packages/agent-core/test/tools/cron/cron-fire-xml.test.ts delete mode 100644 packages/agent-core/test/tools/cron/cron-list.test.ts delete mode 100644 packages/agent-core/test/tools/cron/jitter.test.ts delete mode 100644 packages/agent-core/test/tools/cron/no-date-now.test.ts delete mode 100644 packages/agent-core/test/tools/cron/persist.test.ts delete mode 100644 packages/agent-core/test/tools/cron/scheduler.test.ts delete mode 100644 packages/agent-core/test/tools/cron/session-store.test.ts delete mode 100644 packages/agent-core/test/tools/edit.test.ts delete mode 100644 packages/agent-core/test/tools/enter-plan-mode.test.ts delete mode 100644 packages/agent-core/test/tools/exit-plan-mode-options.test.ts delete mode 100644 packages/agent-core/test/tools/exit-plan-mode.test.ts delete mode 100644 packages/agent-core/test/tools/fetch-url.test.ts delete mode 100644 packages/agent-core/test/tools/file-type.test.ts delete mode 100644 packages/agent-core/test/tools/fixtures/execute-tool.ts delete mode 100644 packages/agent-core/test/tools/fixtures/fake-kaos.ts delete mode 100644 packages/agent-core/test/tools/glob.test.ts delete mode 100644 packages/agent-core/test/tools/goal.test.ts delete mode 100644 packages/agent-core/test/tools/grep.test.ts delete mode 100644 packages/agent-core/test/tools/image-compress.test.ts delete mode 100644 packages/agent-core/test/tools/image-originals.test.ts delete mode 100644 packages/agent-core/test/tools/input-schema-io.test.ts delete mode 100644 packages/agent-core/test/tools/list-directory.test.ts delete mode 100644 packages/agent-core/test/tools/path-guard.test.ts delete mode 100644 packages/agent-core/test/tools/plan-mode-hard-block.test.ts delete mode 100644 packages/agent-core/test/tools/planning/enter-plan-mode-telemetry.test.ts delete mode 100644 packages/agent-core/test/tools/planning/exit-plan-mode-telemetry.test.ts delete mode 100644 packages/agent-core/test/tools/policies/sensitive.test.ts delete mode 100644 packages/agent-core/test/tools/providers/local-fetch-url.test.ts delete mode 100644 packages/agent-core/test/tools/providers/moonshot-fetch-url.test.ts delete mode 100644 packages/agent-core/test/tools/read-file.test.ts delete mode 100644 packages/agent-core/test/tools/read-media-desc.test.ts delete mode 100644 packages/agent-core/test/tools/read-media.test.ts delete mode 100644 packages/agent-core/test/tools/read.test.ts delete mode 100644 packages/agent-core/test/tools/result-builder.test.ts delete mode 100644 packages/agent-core/test/tools/rg-locator.test.ts delete mode 100644 packages/agent-core/test/tools/shell-cancel.test.ts delete mode 100644 packages/agent-core/test/tools/shell-quoting.test.ts delete mode 100644 packages/agent-core/test/tools/skill-tool-dispatch.test.ts delete mode 100644 packages/agent-core/test/tools/skill-tool.test.ts delete mode 100644 packages/agent-core/test/tools/todo-list.test.ts delete mode 100644 packages/agent-core/test/tools/web-search.test.ts delete mode 100644 packages/agent-core/test/tools/write.test.ts delete mode 100644 packages/agent-core/test/utils/abort.test.ts delete mode 100644 packages/agent-core/test/utils/completion-budget.test.ts delete mode 100644 packages/agent-core/test/utils/hero-slug.test.ts delete mode 100644 packages/agent-core/test/utils/per-id-json-store.test.ts delete mode 100644 packages/agent-core/test/utils/proxy.test.ts delete mode 100644 packages/agent-core/test/utils/tokens.test.ts delete mode 100644 packages/agent-core/tsconfig.json delete mode 100644 packages/agent-core/tsdown.config.ts delete mode 100644 packages/agent-core/vitest.config.ts delete mode 100644 packages/node-sdk/examples/t8-race-direct.ts rename packages/{agent-core => node-sdk}/src/config/env-model.ts (70%) rename packages/{agent-core => node-sdk}/src/config/index.ts (52%) rename packages/{agent-core => node-sdk}/src/config/model.ts (67%) create mode 100644 packages/node-sdk/src/config/resolve.ts rename packages/{agent-core => node-sdk}/src/config/schema.ts (72%) rename packages/{agent-core => node-sdk}/src/config/secondary-model.ts (57%) rename packages/{agent-core => node-sdk}/src/config/toml.ts (86%) rename packages/{agent-core/src/agent/context/types.ts => node-sdk/src/context.ts} (74%) rename packages/{agent-core/src/errors/codes.ts => node-sdk/src/errors.ts} (77%) create mode 100644 packages/node-sdk/src/flag.ts create mode 100644 packages/node-sdk/src/image.ts create mode 100644 packages/node-sdk/src/interaction.ts rename packages/{agent-core => node-sdk}/src/logging/formatter.ts (87%) create mode 100644 packages/node-sdk/src/logging/index.ts create mode 100644 packages/node-sdk/src/logging/logger.ts rename packages/{agent-core => node-sdk}/src/logging/resolve-config.ts (68%) rename packages/{agent-core => node-sdk}/src/logging/sinks.ts (96%) create mode 100644 packages/node-sdk/src/logging/types.ts create mode 100644 packages/node-sdk/src/mcp.ts create mode 100644 packages/node-sdk/src/model-provider.ts create mode 100644 packages/node-sdk/src/permission.ts create mode 100644 packages/node-sdk/src/proxy.ts create mode 100644 packages/node-sdk/src/replay.ts delete mode 100644 packages/node-sdk/src/sdk-rpc-client.ts create mode 100644 packages/node-sdk/src/task.ts rename packages/{agent-core => node-sdk}/src/telemetry.ts (64%) create mode 100644 packages/node-sdk/src/tool.ts create mode 100644 packages/node-sdk/src/utils/fs.ts delete mode 100644 packages/node-sdk/test/auth-facade.test.ts delete mode 100644 packages/node-sdk/test/create-session-transport.test.ts delete mode 100644 packages/node-sdk/test/export-session.test.ts delete mode 100644 packages/node-sdk/test/kimi-harness.test.ts delete mode 100644 packages/node-sdk/test/local-logging.test.ts delete mode 100644 packages/node-sdk/test/mcp-config.test.ts delete mode 100644 packages/node-sdk/test/rename-session.test.ts delete mode 100644 packages/node-sdk/test/runtime-provider-identity.test.ts delete mode 100644 packages/node-sdk/test/runtime-provider-oauth.test.ts delete mode 100644 packages/node-sdk/test/session-background-tasks.test.ts delete mode 100644 packages/node-sdk/test/session-cancel.test.ts delete mode 100644 packages/node-sdk/test/session-context.test.ts delete mode 100644 packages/node-sdk/test/session-plan-compact-usage-resume.test.ts delete mode 100644 packages/node-sdk/test/session-set-model.test.ts delete mode 100644 packages/node-sdk/test/session-set-permission.test.ts delete mode 100644 packages/node-sdk/test/session-set-thinking.test.ts delete mode 100644 packages/node-sdk/test/session-steer.test.ts delete mode 100644 packages/node-sdk/test/v1-v2-parity.test.ts diff --git a/.agents/skills/gen-changesets/SKILL.md b/.agents/skills/gen-changesets/SKILL.md index 3ab4458ba99..e37dce80164 100644 --- a/.agents/skills/gen-changesets/SKILL.md +++ b/.agents/skills/gen-changesets/SKILL.md @@ -5,7 +5,7 @@ description: Use when generating changesets in the kimi-code repository — deci # Generate Changesets -The only user-facing published package is the CLI: `@moonshot-ai/kimi-code`. All other `@moonshot-ai/*` packages (sdk, agent-core, kosong, kaos, oauth, telemetry, and so on) are internal. +The only user-facing published package is the CLI: `@moonshot-ai/kimi-code`. All other `@moonshot-ai/*` packages (sdk, kosong, kaos, oauth, telemetry, and so on) are internal. ## 1. Whether to Write diff --git a/.agents/skills/write-tui/SKILL.md b/.agents/skills/write-tui/SKILL.md index 3952b84b5c5..027b574cf09 100644 --- a/.agents/skills/write-tui/SKILL.md +++ b/.agents/skills/write-tui/SKILL.md @@ -68,7 +68,7 @@ Themes are managed centrally under `src/tui/theme/`: - `bundle.ts` — packs `colors`, `styles`, `markdownTheme` into a `KimiTUIThemeBundle`. - `index.ts` / `detect.ts` — theme type and auto/dark/light resolution. -> **Keep the color-token set in sync.** `ColorPalette` in `colors.ts` is the source of truth for color tokens. When you add, rename, or remove one, update its mirrors in the same change: the custom-theme JSON schema (`apps/kimi-code/src/tui/theme/theme-schema.json`), the token tables in the custom-theme docs (`docs/en/customization/themes.md` and `docs/zh/customization/themes.md`), and the token table in the `custom-theme` built-in skill (`packages/agent-core/src/skill/builtin/custom-theme.md`). +> **Keep the color-token set in sync.** `ColorPalette` in `colors.ts` is the source of truth for color tokens. When you add, rename, or remove one, update its mirrors in the same change: the custom-theme JSON schema (`apps/kimi-code/src/tui/theme/theme-schema.json`), the token tables in the custom-theme docs (`docs/en/customization/themes.md` and `docs/zh/customization/themes.md`), and the token table in the `custom-theme` built-in skill (`packages/agent-core-v2/src/features/skill/catalog/builtin/custom-theme.md`). Apply / switch flow: diff --git a/.changeset/README.md b/.changeset/README.md index 88fa0f78977..ce6afc094f8 100644 --- a/.changeset/README.md +++ b/.changeset/README.md @@ -15,7 +15,6 @@ Current publishable packages: All other workspace packages are private internal packages, are not published to npm, and are excluded via `ignore` in `.changeset/config.json`: -- `@moonshot-ai/agent-core` - `@moonshot-ai/kaos` - `@moonshot-ai/kimi-code-oauth` - `@moonshot-ai/kimi-telemetry` @@ -145,7 +144,7 @@ The root-level `pnpm run publish` first runs typecheck, lint, sherif, test, buil - Changeset files must be committed to the repository — release PRs are only triggered after they're merged. - Release PRs require human review and merge; they will not publish automatically. - Do not add release changesets for private internal packages; only select `@moonshot-ai/kimi-code` and `@moonshot-ai/kimi-code-sdk`. -- If a change in an underlying internal package alters user-visible behavior or public API of a publishable package, add a changeset to the affected publishable package. For example, when a bug fixed in `@moonshot-ai/agent-core` resolves an issue CLI users encounter, add a changeset to `@moonshot-ai/kimi-code` describing the user-visible fix. +- If a change in an underlying internal package alters user-visible behavior or public API of a publishable package, add a changeset to the affected publishable package. For example, when a bug fixed in `@moonshot-ai/kosong` resolves an issue CLI users encounter, add a changeset to `@moonshot-ai/kimi-code` describing the user-visible fix. - `@moonshot-ai/kimi-code` is the official CLI package name; after a global install it provides the `kimi` command. - Make sure each publishable package on npm has a Trusted Publisher configured. diff --git a/AGENTS.md b/AGENTS.md index b7481516411..f22bab43ca1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,11 +14,10 @@ This is a TypeScript monorepo built for agent-assisted development. Keep the roo ## Project Map -- `apps/kimi-code`: the CLI / TUI application. It consumes core capabilities through `@moonshot-ai/kimi-code-sdk` and must not depend directly on `@moonshot-ai/agent-core`. When writing or modifying its terminal UI, use the `write-tui` skill (`.agents/skills/write-tui/SKILL.md`). +- `apps/kimi-code`: the CLI / TUI application. It consumes core capabilities through `@moonshot-ai/kimi-code-sdk` and must not depend directly on engine packages. When writing or modifying its terminal UI, use the `write-tui` skill (`.agents/skills/write-tui/SKILL.md`). - the browser web UI: **its source no longer lives in this repo.** It is developed in the code-app repo (`apps/web`) and shipped as the committed, prebuilt bundle `apps/kimi-code/dist-web` (gitignored, force-added), synced from code-app with `KIMI_CODE_REPO= pnpm run sync:web` — sync and commit the bundle in the same change whenever the web UI should ship differently. `apps/kimi-code/scripts/check-web-assets.mjs` guards packaging against a missing bundle. To hack on the web UI against this repo's server, run `pnpm dev:server` here and point code-app's `pnpm dev:web` at it via `KIMI_SERVER_URL`. - `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. - `packages/node-sdk`: the public TypeScript SDK and harness. - `packages/kosong`: the LLM / provider abstraction layer. @@ -64,7 +63,6 @@ This is a TypeScript monorepo built for agent-assisted development. Keep the roo ## Experimental Features - Gate a not-yet-public feature behind an experimental flag. Flags are env-driven and default off: `KIMI_CODE_EXPERIMENTAL_` 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, 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 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff90b934b38..a5e50c77806 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,12 +60,12 @@ All commits and PR titles must follow [Conventional Commits](https://www.convent | Type | Use for | Example | |----------|---------------------------------------------|-------------------------------------------| -| feat | A new feature | feat(agent-core): add tool dedup | +| feat | A new feature | feat(agent-core-v2): add tool dedup | | fix | A bug fix | fix(tui): correct status bar alignment | | docs | Documentation only | docs: clarify install instructions | | chore | Tooling / housekeeping | chore: bump dependencies | | refactor | Internal refactor without behavior change | refactor(kosong): extract retry helper | -| test | Adding or improving tests | test(agent-core): cover skill resolver | +| test | Adding or improving tests | test(agent-core-v2): cover skill resolver | | ci | CI / build pipeline changes | ci: cache pnpm store | | build | Build system / artifact changes | build(native): add win32-arm64 target | | perf | Performance improvement | perf(session): batch event flushes | diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md index 160e6d76c18..92ea4107b07 100644 --- a/CONTRIBUTING.zh-CN.md +++ b/CONTRIBUTING.zh-CN.md @@ -60,12 +60,12 @@ pnpm install | 类型 | 用途 | 示例 | |----------|------------------------------------------|----------------------------------------| -| feat | 新功能 | feat(agent-core): add tool dedup | +| feat | 新功能 | feat(agent-core-v2): add tool dedup | | fix | bug 修复 | fix(tui): correct status bar alignment | | docs | 仅文档 | docs: clarify install instructions | | chore | 工具 / 杂务 | chore: bump dependencies | | refactor | 无行为变更的内部重构 | refactor(kosong): extract retry helper | -| test | 新增或改进测试 | test(agent-core): cover skill resolver | +| test | 新增或改进测试 | test(agent-core-v2): cover skill resolver | | ci | CI / 构建流水线变更 | ci: cache pnpm store | | build | 构建系统 / 产物变更 | build(native): add win32-arm64 target | | perf | 性能优化 | perf(session): batch event flushes | diff --git a/apps/kimi-code/AGENTS.md b/apps/kimi-code/AGENTS.md index 857dc09e930..630252ff330 100644 --- a/apps/kimi-code/AGENTS.md +++ b/apps/kimi-code/AGENTS.md @@ -42,7 +42,7 @@ Main directories: - `reverse-rpc` converts SDK approval/question requests into the data shape a UI panel/dialog needs, and converts the user's choice back into an SDK response. - `theme` is the single source of truth for colors and styles. Components must not bypass the theme system and use chalk named colors directly. - `utils` holds utility functions with no UI-state dependency. Logic that needs `TUIState` or a component instance must not live under app-level `src/utils`. -- `apps/kimi-code` may only use core capabilities through `@moonshot-ai/kimi-code-sdk`. Do not import `@moonshot-ai/agent-core` directly in app code. +- `apps/kimi-code` may only use core capabilities through `@moonshot-ai/kimi-code-sdk`. Do not import engine packages directly in app code. ## TUI Coding Conventions diff --git a/apps/kimi-code/scripts/dev.mjs b/apps/kimi-code/scripts/dev.mjs index 124413a03ea..3934f34e7b2 100644 --- a/apps/kimi-code/scripts/dev.mjs +++ b/apps/kimi-code/scripts/dev.mjs @@ -52,7 +52,7 @@ const child = spawn( tsxCli, // Use the dev tsconfig whose `include` covers packages/*/src, so tsx's // esbuild transform sees `experimentalDecorators: true` for DI parameter - // decorators in agent-core. Mirrors `dev:server` in package.json. + // decorators in agent-core-v2. Mirrors `dev:server` in package.json. '--tsconfig', resolve(APP_ROOT, 'tsconfig.dev.json'), '--import', diff --git a/apps/kimi-code/scripts/plugin-manifest-version.mjs b/apps/kimi-code/scripts/plugin-manifest-version.mjs index 1fd768af54a..a7a73f1ba94 100644 --- a/apps/kimi-code/scripts/plugin-manifest-version.mjs +++ b/apps/kimi-code/scripts/plugin-manifest-version.mjs @@ -2,7 +2,7 @@ import { readFile } from 'node:fs/promises'; import { resolve } from 'node:path'; // Read a local plugin directory's declared version from its manifest, mirroring -// the plugin loader's precedence (packages/agent-core/src/plugin/manifest.ts): +// the plugin loader's precedence (packages/agent-core-v2/src/app/plugin/manager.ts): // `kimi.plugin.json` is authoritative once it exists, and `.kimi-plugin/plugin.json` // is only consulted when the root manifest is absent. Returns undefined when no // manifest is present or the chosen manifest has no version — callers then leave diff --git a/apps/kimi-code/src/cli/experimental-v2.ts b/apps/kimi-code/src/cli/experimental-v2.ts deleted file mode 100644 index 8ccb56ebdda..00000000000 --- a/apps/kimi-code/src/cli/experimental-v2.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Agent engine routing gates for the CLI surfaces. - * - * `kimi -p` and the interactive TUI use the native - * agent-core-v2 path by default. A truthy `KIMI_CODE_LEGACY_FLAG` selects the - * legacy agent-core-backed path instead. `KIMI_CODE_EXPERIMENTAL_FLAG` remains - * the master switch for experimental features within either engine; it does - * not select the engine. - * - * Note: `kimi web` always boots kap-server (the agent-core-v2 engine - * server) — it does not consult this switch. - */ - -export const KIMI_LEGACY_ENV = 'KIMI_CODE_LEGACY_FLAG'; - -const TRUTHY_VALUES = new Set(['1', 'true', 'yes', 'on']); - -function isTruthyEnv( - key: string, - env: Readonly>, -): boolean { - return TRUTHY_VALUES.has((env[key] ?? '').trim().toLowerCase()); -} - -export function isLegacyEnabled( - env: Readonly> = process.env, -): boolean { - return isTruthyEnv(KIMI_LEGACY_ENV, env); -} - -export function isKimiV2Enabled( - env: Readonly> = process.env, -): boolean { - return !isLegacyEnabled(env); -} diff --git a/apps/kimi-code/src/cli/prompt-session.ts b/apps/kimi-code/src/cli/prompt-session.ts index e4b4410af9a..668fa3ddfd6 100644 --- a/apps/kimi-code/src/cli/prompt-session.ts +++ b/apps/kimi-code/src/cli/prompt-session.ts @@ -1,35 +1,13 @@ -/** - * Minimal harness/session surface consumed by `kimi -p` (print mode). - * - * `run-prompt.ts` only needs a small subset of the SDK `KimiHarness` / `Session` - * API. Coding the print-mode driver against these narrow interfaces — instead of - * the concrete SDK classes — lets the same driver run on either the legacy - * engine (`createKimiHarness`) or the default agent-core-v2 engine - * (`createPromptHarnessV2`, selected unless `KIMI_CODE_LEGACY_FLAG` is truthy). - * Both the legacy `KimiHarness` / `Session` and the v2 harness structurally - * satisfy these interfaces, so no adapter wrappers are needed on the legacy path. - */ - import type { - ApprovalHandler, ConfigDiagnostics, - CreateGoalInput, CreateSessionOptions, - Event, - GetCronTasksResult, - GoalSnapshot, - GoalToolResult, KimiAuthFacade, KimiConfig, ListSessionsOptions, - PermissionMode, - PromptInput, - QuestionHandler, ResumeSessionInput, - SessionStatus, + Session, SessionSummary, TelemetryProperties, - Unsubscribe, } from '@moonshot-ai/kimi-code-sdk'; export interface PromptHarness { @@ -42,25 +20,7 @@ export interface PromptHarness { getConfig(): Promise>; getConfigDiagnostics(): Promise; listSessions(options: ListSessionsOptions): Promise; - createSession(options: CreateSessionOptions): Promise; - resumeSession(input: ResumeSessionInput): Promise; + createSession(options: CreateSessionOptions): Promise; + resumeSession(input: ResumeSessionInput): Promise; close(): Promise; } - -export interface PromptSession { - readonly id: string; - readonly workDir: string; - - getStatus(): Promise; - setModel(model: string): Promise; - setPermission(mode: PermissionMode): Promise; - setApprovalHandler(handler: ApprovalHandler | undefined): void; - setQuestionHandler(handler: QuestionHandler | undefined): void; - onEvent(listener: (event: Event) => void): Unsubscribe; - prompt(input: string | PromptInput): Promise; - waitForBackgroundTasksOnPrint(): Promise; - handlePrintMainTurnCompleted?(): Promise<'finish' | 'continue'>; - createGoal(input: CreateGoalInput): Promise; - getGoal(): Promise; - getCronTasks(): Promise; -} diff --git a/apps/kimi-code/src/cli/run-prompt.ts b/apps/kimi-code/src/cli/run-prompt.ts index cd519b223ea..65a49446872 100644 --- a/apps/kimi-code/src/cli/run-prompt.ts +++ b/apps/kimi-code/src/cli/run-prompt.ts @@ -1,63 +1,8 @@ -import { - setCrashPhase, - setTelemetryContext, - shutdownTelemetry, - track, - withTelemetryContext, -} from '@moonshot-ai/kimi-telemetry'; -import chalk from 'chalk'; -import { - createKimiHarness, - log, - type Event, - type GoalSnapshot, - type SessionStatus, - type TelemetryClient, -} from '@moonshot-ai/kimi-code-sdk'; -import { resolve } from 'pathe'; +import type { CLIOptions } from './options'; -import { CLI_SHUTDOWN_TIMEOUT_MS, PROMPT_CLEANUP_TIMEOUT_MS } from '#/constant/app'; - -import { resolveAgentProfileSelection } from './agent-selection'; -import { isKimiV2Enabled } from './experimental-v2'; -import { resolveOutputFormat } from './options'; -import type { CLIOptions, PromptOutputFormat } from './options'; -import { - formatGoalSummaryText, - goalExitCode, - goalSummaryJson, - parseHeadlessGoalCreate, - type HeadlessGoalCreate, -} from './goal-prompt'; -import type { PromptHarness, PromptSession } from './prompt-session'; -import { PromptJsonWriter, PromptTranscriptWriter, writeResumeHint } from './prompt-render'; -import { createCliTelemetryBootstrap, initializeCliTelemetry } from './telemetry'; -import { createKimiCodeHostIdentity } from './version'; - -/** - * Await `promise`, but stop waiting after `timeoutMs`. - * - * The timeout only bounds how long we WAIT — it does not change the outcome: - * - if `promise` settles first, its result is propagated (a rejection throws), - * so a cleanup step that actually fails in time still surfaces; - * - if the timeout wins, we resolve (give up waiting) and swallow the abandoned - * promise's eventual late rejection so it can't surface as an unhandled - * rejection. - * - * Used to bound shutdown so a wedged cleanup step can't keep a completed - * headless run alive, without silently swallowing a cleanup that fails fast. The - * timer stays ref'd so a cleanup step that suspends on an unref'd handle (e.g. - * telemetry's retry backoff when the network is blocked) can't drain the event - * loop and exit 0 before the rejection propagates — the timer keeps the loop - * alive until it fires, then gives the rejection a chance to surface. A wedged - * cleanup is still bounded by `timeoutMs`, so this can't hang the run forever. - */ export async function raceWithTimeout(promise: Promise, timeoutMs: number): Promise { let timedOut = false; let timer: ReturnType | undefined; - // Attach the catch eagerly (synchronously) so `promise` is always consumed and - // a late rejection can never become an unhandled rejection. Before the timeout - // wins, the handler rethrows so a real cleanup failure still propagates. const guarded = promise.catch((error: unknown) => { if (timedOut) return; throw error; @@ -92,321 +37,13 @@ export interface PromptProcess { exit(code?: number): never | void; } -const PROMPT_UI_MODE = 'print'; -const PROMPT_MAIN_AGENT_ID = 'main'; - export async function runPrompt( opts: CLIOptions, version: string, io: PromptRunIO = {}, ): Promise { - if (isKimiV2Enabled()) { - // The agent-core-v2 engine runs on its own native DI service runtime (see - // v2/run-v2-print.ts); it does not share the v1 PromptHarness path below. - // Loaded lazily so the v2 module graph stays off the legacy path. - const { runV2Print } = await import('./v2/run-v2-print'); - await runV2Print(opts, version, io); - return; - } - - const startedAt = Date.now(); - const stdout = io.stdout ?? process.stdout; - const stderr = io.stderr ?? process.stderr; - const promptProcess = io.process ?? process; - const outputFormat = resolveOutputFormat(opts); - const workDir = process.cwd(); - const telemetryBootstrap = createCliTelemetryBootstrap(); - const telemetryClient: TelemetryClient = { - track, - withContext: withTelemetryContext, - setContext: setTelemetryContext, - }; - const harness = await createPromptHarness({ - homeDir: telemetryBootstrap.homeDir, - identity: createKimiCodeHostIdentity(version), - uiMode: PROMPT_UI_MODE, - skillDirs: opts.skillsDirs, - telemetry: telemetryClient, - onOAuthRefresh: (outcome) => { - if (outcome.success) { - track('oauth_refresh', { outcome: 'success' }); - return; - } - track('oauth_refresh', { outcome: 'error', reason: outcome.reason }); - }, - sessionStartedProperties: { yolo: false, plan: false, afk: true }, - }); - log.info('kimi-code starting', { - version, - uiMode: PROMPT_UI_MODE, - nodeVersion: process.version, - platform: `${process.platform}/${process.arch}`, - workDir, - }); - let restorePromptSessionPermission = async (): Promise => {}; - let removeTerminationCleanup: (() => void) | undefined; - let cleanupPromise: Promise | undefined; - const cleanupPromptRun = async (): Promise => { - const pending = (cleanupPromise ??= (async () => { - removeTerminationCleanup?.(); - setCrashPhase('shutdown'); - try { - await restorePromptSessionPermission(); - } finally { - await shutdownTelemetry({ timeoutMs: CLI_SHUTDOWN_TIMEOUT_MS }); - await harness.close(); - } - })()); - // Bound cleanup so a wedged shutdown step (e.g. a SessionEnd hook, MCP - // shutdown, or a connection blackholed by a restrictive firewall) cannot - // keep a completed headless run alive forever. The cleanup keeps running in - // the background if it overruns; the caller (`kimi -p`) force-exits shortly - // after, so any straggling work is torn down with the process. - await raceWithTimeout(pending, PROMPT_CLEANUP_TIMEOUT_MS); - }; - removeTerminationCleanup = installPromptTerminationCleanup(promptProcess, cleanupPromptRun); - - try { - await harness.ensureConfigFile(); - const config = await harness.getConfig(); - for (const warning of (await harness.getConfigDiagnostics()).warnings) { - stderr.write(`Warning: ${warning}\n`); - } - const { session, restorePermission, telemetryModel, goalModel } = - await resolvePromptSession( - harness, - opts, - workDir, - config.defaultModel, - stderr, - (restorePermission) => { - restorePromptSessionPermission = restorePermission; - }, - ); - restorePromptSessionPermission = restorePermission; - - initializeCliTelemetry({ - harness, - bootstrap: telemetryBootstrap, - config, - version, - uiMode: PROMPT_UI_MODE, - model: telemetryModel, - sessionId: session.id, - }); - setCrashPhase('runtime'); - - // Headless goal mode: `kimi -p "/goal "`. The goal driver keeps - // the turn-run alive across continuation turns, so the normal prompt-turn - // waiter blocks until the goal is terminal; we then emit a summary and set a - // distinct exit code. - const goalCreate = parseHeadlessGoalCreate(opts.prompt!); - if (goalCreate !== undefined) { - await runHeadlessGoal(session, goalCreate, goalModel, outputFormat, stdout, stderr); - } else { - await runPromptTurn( - session as PrintTurnSession, - opts.prompt!, - outputFormat, - stdout, - stderr, - ); - } - writeResumeHint(session.id, outputFormat, stdout, stderr); - - withTelemetryContext({ sessionId: session.id }).track('exit', { - duration_ms: Date.now() - startedAt, - }); - } finally { - await cleanupPromptRun(); - } -} - -async function createPromptHarness( - options: Parameters[0], -): Promise { - // The v2 engine is dispatched earlier in `runPrompt` (see the - // `isKimiV2Enabled()` branch) and never reaches here; this is the v1 path. - return createKimiHarness(options); -} - -async function runHeadlessGoal( - session: PromptSession, - goal: HeadlessGoalCreate, - model: string | undefined, - outputFormat: PromptOutputFormat, - stdout: PromptOutput, - stderr: PromptOutput, -): Promise { - requireConfiguredModel(model); - await session.createGoal({ - objective: goal.objective, - replace: goal.replace, - }); - let completedSnapshot: GoalSnapshot | null = null; - const unsubscribeGoalEvents = session.onEvent((event) => { - if ( - event.type === 'goal.updated' && - event.agentId === 'main' && - event.change?.kind === 'completion' && - event.snapshot !== null - ) { - completedSnapshot = event.snapshot; - } - }); - try { - // The objective is sent as the normal prompt; goal continuation keeps the - // turn alive until a terminal state is reached. - await runPromptTurn( - session as PrintTurnSession, - goal.objective, - outputFormat, - stdout, - stderr, - ); - } finally { - unsubscribeGoalEvents(); - const snapshot = completedSnapshot ?? (await session.getGoal()).goal; - if (outputFormat === 'stream-json') { - stdout.write(`${JSON.stringify(goalSummaryJson(snapshot))}\n`); - } else { - stderr.write(`${formatGoalSummaryText(snapshot)}\n`); - } - // Map the terminal goal status to a distinct, non-fatal exit code. A turn - // that threw (error / cancellation) already propagates its own exit path. - if (snapshot !== null && snapshot.status !== 'complete') { - process.exitCode = goalExitCode(snapshot.status); - } - } -} - -interface ResolvedPromptSession { - readonly session: PromptSession; - readonly resumed: boolean; - readonly restorePermission: () => Promise; - readonly telemetryModel?: string; - readonly goalModel?: string; -} - -async function resolvePromptSession( - harness: PromptHarness, - opts: CLIOptions, - workDir: string, - defaultModel: string | undefined, - stderr: PromptOutput, - setRestorePermission: (restorePermission: () => Promise) => void, -): Promise { - // `--agent`/`--agent-file` are creation-only: validateOptions rejects them - // together with --session/--continue, so resume paths never forward a - // profile — the bound agent is restored from the session itself. - if (opts.session !== undefined) { - const sessions = await harness.listSessions({ sessionId: opts.session, workDir }); - const target = sessions[0]; - if (target === undefined) { - throw new Error(`Session "${opts.session}" not found.`); - } - if (resolve(target.workDir) !== resolve(workDir)) { - stderr.write( - `${chalk.hex('#E8A838')( - `Session "${opts.session}" was created under a different directory.\n` + - ` cd "${target.workDir}" && kimi -r ${opts.session}`, - )}\n\n`, - ); - throw new Error( - `Session "${opts.session}" was created under a different directory.`, - ); - } - const session = await harness.resumeSession({ - id: opts.session, - additionalDirs: opts.addDirs?.length ? opts.addDirs : undefined, - }); - const status = await session.getStatus(); - const restorePermission = await forcePromptPermission( - session, - status.permission, - setRestorePermission, - ); - if (opts.model !== undefined) { - await session.setModel(opts.model); - } - installHeadlessHandlers(session); - return { - session, - resumed: true, - restorePermission, - telemetryModel: configuredModel(opts.model, status.model, defaultModel), - goalModel: configuredModel(opts.model, status.model), - }; - } - - if (opts.continue) { - const sessions = await harness.listSessions({ workDir }); - const previous = sessions[0]; - if (previous !== undefined) { - const session = await harness.resumeSession({ - id: previous.id, - additionalDirs: opts.addDirs?.length ? opts.addDirs : undefined, - }); - const status = await session.getStatus(); - const restorePermission = await forcePromptPermission( - session, - status.permission, - setRestorePermission, - ); - if (opts.model !== undefined) { - await session.setModel(opts.model); - } - installHeadlessHandlers(session); - return { - session, - resumed: true, - restorePermission, - telemetryModel: configuredModel(opts.model, status.model, defaultModel), - goalModel: configuredModel(opts.model, status.model), - }; - } - stderr.write(`No sessions to continue under "${workDir}"; starting a fresh session.\n`); - } - - const agentProfile = await resolveAgentProfileSelection(opts, workDir); - const model = requireConfiguredModel(opts.model, defaultModel); - const session = await harness.createSession({ - workDir, - model, - permission: 'auto', - additionalDirs: opts.addDirs?.length ? opts.addDirs : undefined, - agentProfile, - agentFiles: opts.agentFiles?.length ? opts.agentFiles : undefined, - drainAgentTasksOnStop: true, - }); - installHeadlessHandlers(session); - return { - session, - resumed: false, - restorePermission: async () => {}, - telemetryModel: model, - goalModel: model, - }; -} - -async function forcePromptPermission( - session: PromptSession, - previousPermission: SessionStatus['permission'], - setRestorePermission: (restorePermission: () => Promise) => void, -): Promise<() => Promise> { - let overridePermission: Promise | undefined; - const restorePermission = async () => { - await overridePermission?.catch(() => {}); - if (previousPermission !== 'auto') { - await session.setPermission(previousPermission); - } - }; - setRestorePermission(restorePermission); - if (previousPermission !== 'auto') { - overridePermission = session.setPermission('auto'); - await overridePermission; - } - return restorePermission; + const { runV2Print } = await import('./v2/run-v2-print'); + await runV2Print(opts, version, io); } export function requireConfiguredModel(...models: readonly (string | undefined)[]): string { @@ -423,11 +60,6 @@ export function configuredModel(...models: readonly (string | undefined)[]): str return models.find((model) => model !== undefined && model.trim().length > 0); } -function installHeadlessHandlers(session: PromptSession): void { - session.setApprovalHandler(() => ({ decision: 'approved' })); - session.setQuestionHandler(() => null); -} - export function installPromptTerminationCleanup( promptProcess: PromptProcess, cleanup: () => Promise, @@ -460,227 +92,3 @@ export function signalExitCode(signal: NodeJS.Signals): number { if (signal === 'SIGHUP') return 129; return 143; } - -type PrintTurnSession = PromptSession & - Required>; - -function runPromptTurn( - session: PrintTurnSession, - prompt: string, - outputFormat: PromptOutputFormat, - stdout: PromptOutput, - stderr: PromptOutput, -): Promise { - let activeTurnId: number | undefined; - let activeAgentId: string | undefined; - const outputWriter = - outputFormat === 'stream-json' - ? new PromptJsonWriter(stdout) - : new PromptTranscriptWriter(stdout, stderr); - let settled = false; - let unsubscribe: (() => void) | undefined; - // A `kimi -p` run is not done just because the model ended a turn: an active - // goal drives continuation turns on its own, and a scheduled cron task fires - // later from an idle session — both trigger new turns after `end_turn`. While - // either is pending, something must keep the event loop alive: the cron - // scheduler's tick is deliberately unref'd, so without a ref'd handle the - // process would drain and exit before the next turn is ever triggered. This - // no-op interval is that handle; finish() always clears it. - let keepAliveTimer: NodeJS.Timeout | undefined; - const holdEventLoop = (): void => { - keepAliveTimer ??= setInterval(() => {}, 60_000); - }; - const releaseEventLoop = (): void => { - if (keepAliveTimer === undefined) return; - clearInterval(keepAliveTimer); - keepAliveTimer = undefined; - }; - - return new Promise((resolve, reject) => { - const finish = (error?: Error): void => { - if (settled) return; - settled = true; - releaseEventLoop(); - unsubscribe?.(); - outputWriter.finish(); - if (error !== undefined) { - reject(error); - return; - } - resolve(); - }; - - // Re-evaluates whether the run can settle now that the main agent is idle. - // The run outlives a completed turn while a goal is still active (the goal - // driver launches the next continuation turn itself) or while cron tasks - // with a future fire remain (their fire steers a fresh turn when idle). - // Called on turn.ended and on a terminal goal.updated — the latter covers - // the driver blocking a goal on a hard budget, which emits no further - // turn.ended. Only when neither is pending do we drain background tasks - // and settle. - const evaluateRunCompletion = async (): Promise => { - try { - const { goal } = await session.getGoal(); - if (settled || activeTurnId !== undefined) return; - if (goal?.status === 'active') { - holdEventLoop(); - return; - } - const { tasks } = await session.getCronTasks(); - if (settled || activeTurnId !== undefined) return; - // A task whose expression has no future fire can never trigger a - // turn; don't hold the run open for it. - if (tasks.some((task) => task.nextFireAt !== null)) { - holdEventLoop(); - return; - } - await finishCompletedTurn(); - } catch (error) { - finish(error instanceof Error ? error : new Error(String(error))); - } - }; - - unsubscribe = session.onEvent((event) => { - if (event.type === 'error') { - if (event.agentId !== PROMPT_MAIN_AGENT_ID) { - return; - } - finish(new Error(`${event.code}: ${event.message}`)); - return; - } - if (event.type === 'turn.started') { - if (event.agentId !== PROMPT_MAIN_AGENT_ID) { - return; - } - activeTurnId = event.turnId; - activeAgentId = event.agentId; - return; - } - if ( - event.type === 'goal.updated' && - event.agentId === PROMPT_MAIN_AGENT_ID && - activeTurnId === undefined && - event.snapshot !== null && - event.snapshot.status !== 'active' - ) { - void evaluateRunCompletion(); - return; - } - if ( - activeTurnId === undefined || - activeAgentId === undefined || - !hasTurnId(event) || - event.turnId !== activeTurnId || - event.agentId !== activeAgentId - ) { - return; - } - switch (event.type) { - case 'turn.step.started': - case 'turn.step.interrupted': - outputWriter.flushAssistant(); - return; - case 'turn.step.retrying': - outputWriter.discardAssistant(); - outputWriter.writeRetrying(event); - return; - case 'assistant.delta': - outputWriter.writeAssistantDelta(event.delta); - return; - case 'hook.result': - outputWriter.writeHookResult(event); - return; - case 'thinking.delta': - outputWriter.writeThinkingDelta(event.delta); - return; - case 'tool.call.started': - outputWriter.writeToolCall(event.toolCallId, event.name, event.args); - return; - case 'tool.call.delta': - outputWriter.writeToolCallDelta(event.toolCallId, event.name, event.argumentsPart); - return; - case 'tool.result': - outputWriter.writeToolResult(event.toolCallId, event.output); - return; - case 'tool.progress': - if (event.update.text !== undefined && event.update.text.length > 0) { - stderr.write( - event.update.text.endsWith('\n') ? event.update.text : `${event.update.text}\n`, - ); - } - return; - case 'turn.ended': - if (event.reason === 'completed') { - outputWriter.flushAssistant(); - activeTurnId = undefined; - activeAgentId = undefined; - void evaluateRunCompletion(); - return; - } - finish(new Error(formatTurnEndedFailure(event))); - return; - case 'agent.status.updated': - case 'background.task.started': - case 'background.task.terminated': - case 'compaction.blocked': - case 'compaction.cancelled': - case 'compaction.completed': - case 'compaction.started': - case 'cron.fired': - case 'goal.updated': - case 'mcp.server.status': - case 'session.meta.updated': - case 'skill.activated': - case 'subagent.completed': - case 'subagent.failed': - case 'subagent.spawned': - case 'subagent.started': - case 'subagent.suspended': - case 'tool.list.updated': - case 'turn.step.completed': - case 'warning': - return; - } - }); - - session.prompt(prompt).catch((error: unknown) => { - finish(error instanceof Error ? error : new Error(String(error))); - }); - - async function finishCompletedTurn(): Promise { - // Flush the buffered assistant message before the end-of-turn policy - // runs: in stream-json mode the final message is only emitted by - // finish(), so a long drain/steer wait would otherwise withhold the main - // turn's result until the run exits. - outputWriter.flushAssistant(); - try { - const action = await session.handlePrintMainTurnCompleted(); - if (action === 'continue') { - // Stay alive: a still-pending background task will, on completion, - // steer the main agent into a new turn whose events we keep mapping. - // Do not finish yet. - holdEventLoop(); - return; - } - } catch (error) { - log.warn('handlePrintMainTurnCompleted failed', { error }); - } - finish(); - } - }); -} - -function hasTurnId(event: Event): event is Event & { readonly turnId: number } { - return 'turnId' in event; -} - -function formatTurnEndedFailure(event: Extract): string { - if (event.error?.code === 'provider.filtered') { - return 'Provider safety policy blocked the response.'; - } - if (event.error !== undefined) return `${event.error.code}: ${event.error.message}`; - if (event.reason === 'blocked') { - return 'Prompt hook blocked the request.'; - } - return `Prompt turn ended with reason: ${event.reason}`; -} diff --git a/apps/kimi-code/src/cli/run-shell.ts b/apps/kimi-code/src/cli/run-shell.ts index 4845c47a479..c81f57bc514 100644 --- a/apps/kimi-code/src/cli/run-shell.ts +++ b/apps/kimi-code/src/cli/run-shell.ts @@ -3,7 +3,6 @@ import { homedir } from 'node:os'; import { createKimiHarness, - createKimiHarnessV2, flushDiagnosticLogsSync, log, type KimiHarness, @@ -32,7 +31,6 @@ import { resolveCommandPath } from '#/utils/process/resolve-command'; import type { CLIOptions } from './options'; import { resolveAgentProfileSelection } from './agent-selection'; -import { isKimiV2Enabled } from './experimental-v2'; import { createCliTelemetryBootstrap, initializeCliTelemetry } from './telemetry'; import { createKimiCodeHostIdentity } from './version'; @@ -81,13 +79,7 @@ export async function runShell( }, sessionStartedProperties: { yolo: opts.yolo, auto: opts.auto, plan: opts.plan, afk: false }, }; - // The agent-core-v2 route is the default (same engine gate as `kimi -p`): - // the harness is the SDK's v2-backed client, so the whole TUI runs on the - // agent-core-v2 engine unless the legacy flag is set. - const engineV2 = isKimiV2Enabled(); - const harness = engineV2 - ? createKimiHarnessV2(harnessOptions) - : createKimiHarness(harnessOptions); + const harness = createKimiHarness(harnessOptions); startupTrace('harness:created'); log.info('kimi-code starting', { version, @@ -139,7 +131,6 @@ export async function runShell( startupNotice: configWarning, migrationPlan, migrateOnly: runOptions.migrateOnly, - engineV2, telemetryDisabled: config.telemetry === false, }); diff --git a/apps/kimi-code/src/cli/sub/export.ts b/apps/kimi-code/src/cli/sub/export.ts index 38796832c9b..79c13154358 100644 --- a/apps/kimi-code/src/cli/sub/export.ts +++ b/apps/kimi-code/src/cli/sub/export.ts @@ -15,7 +15,6 @@ import { } from '@moonshot-ai/kimi-telemetry'; import { createKimiHarness, - createKimiHarnessV2, type ExportSessionInput, type ExportSessionResult, type KimiHarness, @@ -31,8 +30,6 @@ import { detectInstallSource } from '#/cli/update/source'; import { createKimiCodeHostIdentity } from '#/cli/version'; import { detectShellEnvironment } from '#/utils/process/shell-env'; -import { isKimiV2Enabled } from '../experimental-v2'; - interface WritableLike { write(chunk: string): boolean; } @@ -155,9 +152,7 @@ function createDefaultExportDeps(overrides: Partial = {}): ExportDep }; const getHarness = (): KimiHarness => { const currentTelemetryBootstrap = getTelemetryBootstrap(); - // Same engine gate as `kimi -p` / the TUI: the SDK's v2-backed harness by - // default, the legacy agent-core harness when KIMI_CODE_LEGACY_FLAG is set. - harness ??= (isKimiV2Enabled() ? createKimiHarnessV2 : createKimiHarness)({ + harness ??= createKimiHarness({ homeDir: currentTelemetryBootstrap.homeDir, identity, telemetry: telemetryClient, diff --git a/apps/kimi-code/src/cli/sub/fork.ts b/apps/kimi-code/src/cli/sub/fork.ts index 50711f33a1b..17802cc2a8a 100644 --- a/apps/kimi-code/src/cli/sub/fork.ts +++ b/apps/kimi-code/src/cli/sub/fork.ts @@ -8,7 +8,6 @@ import { } from '@moonshot-ai/kimi-telemetry'; import { createKimiHarness, - createKimiHarnessV2, type KimiHarness, type SessionSummary, type TelemetryClient, @@ -18,7 +17,6 @@ import type { Command } from 'commander'; import { CLI_SHUTDOWN_TIMEOUT_MS, CLI_UI_MODE } from '#/constant/app'; import { createCliTelemetryBootstrap, initializeCliTelemetry } from '#/cli/telemetry'; import { createKimiCodeHostIdentity } from '#/cli/version'; -import { isKimiV2Enabled } from '../experimental-v2'; interface WritableLike { write(chunk: string): boolean; @@ -121,7 +119,7 @@ function createDefaultForkDeps(overrides: Partial = {}): ForkDeps & { }; const getHarness = (): KimiHarness => { const currentTelemetryBootstrap = getTelemetryBootstrap(); - harness ??= (isKimiV2Enabled() ? createKimiHarnessV2 : createKimiHarness)({ + harness ??= createKimiHarness({ homeDir: currentTelemetryBootstrap.homeDir, identity, telemetry: telemetryClient, diff --git a/apps/kimi-code/src/cli/sub/provider.ts b/apps/kimi-code/src/cli/sub/provider.ts index 0b73d81f26a..6d901198bc3 100644 --- a/apps/kimi-code/src/cli/sub/provider.ts +++ b/apps/kimi-code/src/cli/sub/provider.ts @@ -24,7 +24,6 @@ import { catalogProviderModels, CatalogFetchError, createKimiHarness, - createKimiHarnessV2, DEFAULT_CATALOG_URL, resolveCatalogImport, type Catalog, @@ -37,8 +36,6 @@ import type { Command } from 'commander'; import { createKimiCodeHostIdentity, createKimiCodeUserAgent } from '#/cli/version'; import { fetchCatalogOrBuiltIn } from '#/utils/catalog-fetch'; -import { isKimiV2Enabled } from '../experimental-v2'; - interface WritableLike { write(chunk: string): boolean; } @@ -409,7 +406,7 @@ export async function handleCatalogAdd( // Always restore `[thinking]` from what was there before — including // `undefined`. Persisting `enabled: false` when the user never set it would - // make `resolveThinkingEffort` (agent-core/src/agent/config/thinking.ts) treat + // make `resolveThinkingEffort` (agent-core-v2/src/kosong/model/thinking.ts) treat // it as an explicit "off" request and silently disable thinking, even for // thinking-capable models. config.thinking = previousThinking; @@ -563,10 +560,7 @@ function resolveDeps(overrides: Partial = {}): ResolvedProviderDep getHarness: overrides.getHarness ?? (() => { - // Same engine gate as the TUI's `/provider` flow: the SDK's v2-backed - // harness by default, the legacy agent-core harness when - // KIMI_CODE_LEGACY_FLAG is set. - harness ??= (isKimiV2Enabled() ? createKimiHarnessV2 : createKimiHarness)({ identity }); + harness ??= createKimiHarness({ identity }); return harness; }), stdout: overrides.stdout ?? process.stdout, diff --git a/apps/kimi-code/src/cli/sub/session.ts b/apps/kimi-code/src/cli/sub/session.ts index a15fc2063ee..e25f572488d 100644 --- a/apps/kimi-code/src/cli/sub/session.ts +++ b/apps/kimi-code/src/cli/sub/session.ts @@ -9,7 +9,6 @@ import { setTelemetryContext, track, withTelemetryContext } from '@moonshot-ai/kimi-telemetry'; import { createKimiHarness, - createKimiHarnessV2, type KimiHarness, type ListSessionsOptions, type SessionSummary, @@ -20,8 +19,6 @@ import type { Command } from 'commander'; import { createCliTelemetryBootstrap } from '#/cli/telemetry'; import { createKimiCodeHostIdentity } from '#/cli/version'; -import { isKimiV2Enabled } from '../experimental-v2'; - interface WritableLike { write(chunk: string): boolean; } @@ -106,7 +103,7 @@ function createDefaultSessionListDeps( setContext: setTelemetryContext, }; const getHarness = (): KimiHarness => { - harness ??= (isKimiV2Enabled() ? createKimiHarnessV2 : createKimiHarness)({ + harness ??= createKimiHarness({ homeDir: createCliTelemetryBootstrap().homeDir, identity, telemetry: telemetryClient, diff --git a/apps/kimi-code/src/cli/telemetry.ts b/apps/kimi-code/src/cli/telemetry.ts index 3c3b63d8a14..666ea0c51b0 100644 --- a/apps/kimi-code/src/cli/telemetry.ts +++ b/apps/kimi-code/src/cli/telemetry.ts @@ -75,13 +75,8 @@ export interface InitializeServerTelemetryOptions { * Bootstrap telemetry for the `kimi web` host. * * Mirrors {@link initializeCliTelemetry}: mints the device id, reads config to - * honor the `telemetry` toggle and pick up the default model, attaches the - * sink with `ui_mode = "web"`, and returns a {@link TelemetryClient} the - * caller hands to `startServer` via `coreProcessOptions.telemetry`. That wires - * the same real client into `KimiCore`, so agent-core events emitted inside the - * server process (`mcp_connected`, `session_load_failed`, plan-mode / cron - * events, …) actually leave the process carrying the enriched context - * (`app_name` / `version` / `ui_mode` / `model` / platform fields). + * honor the `telemetry` toggle and pick up the default model, and attaches the + * sink with `ui_mode = "web"`. * * The returned client wraps the `@moonshot-ai/kimi-telemetry` module * functions, so the module-level `track` / `withTelemetryContext` (used to diff --git a/apps/kimi-code/src/cli/v2/run-v2-print.ts b/apps/kimi-code/src/cli/v2/run-v2-print.ts index f329c0e06c2..63900cfb19c 100644 --- a/apps/kimi-code/src/cli/v2/run-v2-print.ts +++ b/apps/kimi-code/src/cli/v2/run-v2-print.ts @@ -12,8 +12,6 @@ * `Turn.result` for authoritative completion, * - applies the print-mode background policy (config-driven, v1-aligned: * `exit` / `drain` / `steer`) before exiting. - * - * Selected by `runPrompt` unless `KIMI_CODE_LEGACY_FLAG` is truthy. */ import { readFile } from 'node:fs/promises'; diff --git a/apps/kimi-code/src/tui/commands/add-dir.ts b/apps/kimi-code/src/tui/commands/add-dir.ts index 228b71d14c8..8d76e20f35e 100644 --- a/apps/kimi-code/src/tui/commands/add-dir.ts +++ b/apps/kimi-code/src/tui/commands/add-dir.ts @@ -23,10 +23,6 @@ export async function handleAddDirCommand(host: SlashCommandHost, args: string): } if (session === undefined) { - if (!host.engineV2) { - host.showError(NO_ACTIVE_SESSION_MESSAGE); - return; - } // The path-adding form needs a live session; lazy-create it on first use // (the read-only `list`/bare forms above tolerate a missing session). session = await host.ensureSession(); diff --git a/apps/kimi-code/src/tui/commands/btw.ts b/apps/kimi-code/src/tui/commands/btw.ts index 72b3b5806b0..a36c3e018cd 100644 --- a/apps/kimi-code/src/tui/commands/btw.ts +++ b/apps/kimi-code/src/tui/commands/btw.ts @@ -14,9 +14,9 @@ export async function handleBtwCommand(host: SlashCommandHost, args: string): Pr try { const agentId = await session.startBtw(); - const activations = host.engineV2 - ? extractInlineSkillActivations(prompt, host.skillCommandMap, { includeLeading: true }) - : []; + const activations = extractInlineSkillActivations(prompt, host.skillCommandMap, { + includeLeading: true, + }); host.btwPanelController.open( agentId, prompt, diff --git a/apps/kimi-code/src/tui/commands/config.ts b/apps/kimi-code/src/tui/commands/config.ts index 10086bf8123..e099058e545 100644 --- a/apps/kimi-code/src/tui/commands/config.ts +++ b/apps/kimi-code/src/tui/commands/config.ts @@ -131,10 +131,6 @@ async function applyPlanMode(host: SlashCommandHost, session: Session, enabled: export async function handleYoloCommand(host: SlashCommandHost, args: string): Promise { const session = host.session; - if (session === undefined && !host.engineV2) { - host.showError(NO_ACTIVE_SESSION_MESSAGE); - return; - } // v2 session-less: the chosen mode is recorded in appState and passed to the // lazy-created session; apply the runtime permission only when one exists. @@ -179,10 +175,6 @@ export async function handleYoloCommand(host: SlashCommandHost, args: string): P export async function handleAutoCommand(host: SlashCommandHost, args: string): Promise { const session = host.session; - if (session === undefined && !host.engineV2) { - host.showError(NO_ACTIVE_SESSION_MESSAGE); - return; - } // v2 session-less: the chosen mode is recorded in appState and passed to the // lazy-created session; apply the runtime permission only when one exists. @@ -498,7 +490,7 @@ async function performModelSwitch( persist: boolean, ): Promise { let session = host.session; - if (session === undefined && host.engineV2) { + if (session === undefined) { // A first prompt may still be inside lazy creation: wait it out so the // switch lands on the new session instead of being overwritten by its // assembly. @@ -900,9 +892,6 @@ async function applyPermissionChoice(host: SlashCommandHost, mode: PermissionMod try { if (host.session !== undefined) { await host.session.setPermission(mode); - } else if (!host.engineV2) { - host.showError(NO_ACTIVE_SESSION_MESSAGE); - return; } // v2 session-less: the chosen mode is recorded in appState and passed to // the lazy-created session. diff --git a/apps/kimi-code/src/tui/commands/dispatch.ts b/apps/kimi-code/src/tui/commands/dispatch.ts index afe3b88be43..3f83d130c5a 100644 --- a/apps/kimi-code/src/tui/commands/dispatch.ts +++ b/apps/kimi-code/src/tui/commands/dispatch.ts @@ -120,8 +120,6 @@ export interface SlashCommandHost { state: TUIState; session: Session | undefined; readonly harness: KimiHarness; - /** agent-core-v2 engine; enables lazy session creation. */ - readonly engineV2: boolean; cancelInFlight: (() => void) | undefined; deferUserMessages: boolean; @@ -229,20 +227,17 @@ export function dispatchInput(host: SlashCommandHost, text: string): void { if (parseSlashInput(text) !== null) { // A leading skill command combined with further inline skill tokens // (`/skill:a args /skill:b`) is one grouped submission on the v2 engine. - if (host.engineV2 && dispatchInlineSkillCombo(host, text)) { + if (dispatchInlineSkillCombo(host, text)) { return; } void executeSlashCommand(host, text); return; } - // Inline skill tokens anywhere in a plain prompt (v2 engine only); on the - // legacy engine they keep their plain-text meaning. - if (host.engineV2) { - const activations = extractInlineSkillActivations(text, host.skillCommandMap); - if (activations.length > 0) { - void host.sendInlineSkillUserInput(text, activations); - return; - } + // Inline skill tokens anywhere in a plain prompt activate the skills. + const activations = extractInlineSkillActivations(text, host.skillCommandMap); + if (activations.length > 0) { + void host.sendInlineSkillUserInput(text, activations); + return; } host.sendNormalUserInput(text); } @@ -271,7 +266,6 @@ function dispatchInlineSkillCombo(host: SlashCommandHost, text: string): boolean pluginCommandMap: host.pluginCommandMap, isStreaming: false, isCompacting: false, - engineV2: host.engineV2, }); if (intent.kind !== 'skill' && intent.kind !== 'message') return false; @@ -309,7 +303,6 @@ async function executeSlashCommand(host: SlashCommandHost, input: string): Promi pluginCommandMap: host.pluginCommandMap, isStreaming: host.state.appState.streamingPhase !== 'idle', isCompacting: host.state.appState.isCompacting, - engineV2: host.engineV2, }); switch (intent.kind) { @@ -405,16 +398,11 @@ async function executeSlashCommand(host: SlashCommandHost, input: string): Promi } /** - * Lazy-create the session for a slash command that needs one (v2 engine). - * v1 keeps the historical "no active session" error; on v2 a missing session - * means the TUI started session-less, so commands create it on first use. - * Returns undefined (error already shown) when creation fails. + * Lazy-create the session for a slash command that needs one (v2 engine). A + * missing session means the TUI started session-less, so commands create it + * on first use. Returns undefined (error already shown) when creation fails. */ async function ensureSessionForCommand(host: SlashCommandHost): Promise { - if (!host.engineV2) { - host.showError(LLM_NOT_SET_MESSAGE); - return undefined; - } return host.ensureSession(); } diff --git a/apps/kimi-code/src/tui/commands/info.ts b/apps/kimi-code/src/tui/commands/info.ts index 8de248ca8d7..af7f30b7cdc 100644 --- a/apps/kimi-code/src/tui/commands/info.ts +++ b/apps/kimi-code/src/tui/commands/info.ts @@ -178,7 +178,7 @@ export async function showStatusReport(host: SlashCommandHost): Promise { permissionMode: appState.permissionMode, planMode: appState.planMode, towerMode: appState.towerMode, - towerAvailable: host.engineV2 && isExperimentalFlagEnabled('tower'), + towerAvailable: isExperimentalFlagEnabled('tower'), contextUsage: appState.contextUsage, contextTokens: appState.contextTokens, maxContextTokens: appState.maxContextTokens, @@ -198,12 +198,10 @@ export async function showMcpServers(host: SlashCommandHost): Promise { try { if (host.session !== undefined) { servers = await host.session.listMcpServers(); - } else if (host.engineV2) { + } else { // v2 session-less: the MCP connection set is workspace-scoped, so it is // inspectable before the first session exists. servers = await host.harness.listWorkspaceMcpServers(host.state.appState.workDir); - } else { - servers = await host.requireSession().listMcpServers(); } } catch (error) { host.showError(`Failed to load MCP servers: ${formatErrorMessage(error)}`); diff --git a/apps/kimi-code/src/tui/commands/plugins.ts b/apps/kimi-code/src/tui/commands/plugins.ts index 6ee5b731f94..4b54ee8087d 100644 --- a/apps/kimi-code/src/tui/commands/plugins.ts +++ b/apps/kimi-code/src/tui/commands/plugins.ts @@ -10,7 +10,6 @@ import { } from '@moonshot-ai/kimi-code-sdk'; import { Markdown, Spacer } from '@moonshot-ai/pi-tui'; -import { NO_ACTIVE_SESSION_MESSAGE } from '../constant/kimi-tui'; import { PluginInstallTrustConfirmComponent, PluginMcpSelectorComponent, @@ -82,16 +81,12 @@ type PluginApi = Pick< >; /** - * Resolve the plugin-management API. On the v2 engine plugin state is - * app-global, so a session-less startup still gets a working `/plugins` - * through the harness's global facade; on v1 (and once a session exists) the - * session's own API is used. + * Resolve the plugin-management API. Plugin state is app-global, so a + * session-less startup still gets a working `/plugins` through the harness's + * global facade; once a session exists the session's own API is used. */ async function resolvePluginApi(host: SlashCommandHost): Promise { if (host.session !== undefined) return host.session; - if (!host.engineV2) { - throw new Error(NO_ACTIVE_SESSION_MESSAGE); - } return { listPlugins: () => host.harness.listPlugins(), installPlugin: (source) => host.harness.installPlugin(source), @@ -215,16 +210,12 @@ export async function handlePluginsCommand(host: SlashCommandHost, rawArgs: stri * Resolve the capability API. Like plugin state, capability state is * app-global on the v2 engine, so a session-less startup still gets * readiness and installs through the harness's global facade; with a live - * session the session's own API is used (v1 included, where the capability - * surface then reports itself unavailable). + * session the session's own API is used. */ type CapabilityApi = Pick; async function resolveCapabilityApi(host: SlashCommandHost): Promise { if (host.session !== undefined) return host.session; - if (!host.engineV2) { - throw new Error(NO_ACTIVE_SESSION_MESSAGE); - } return host.harness; } @@ -263,12 +254,10 @@ async function showPluginsPicker( } let capabilities: readonly CapabilityStatus[] = []; - if (host.engineV2) { - try { - capabilities = await (await resolveCapabilityApi(host)).listCapabilities(); - } catch (error) { - log.warn('capability status unavailable', { error }); - } + try { + capabilities = await (await resolveCapabilityApi(host)).listCapabilities(); + } catch (error) { + log.warn('capability status unavailable', { error }); } const installedIds = new Set(plugins.map((plugin) => plugin.id)); @@ -354,10 +343,9 @@ async function loadMarketplaceCatalog( source: string | undefined, capabilities: readonly CapabilityStatus[], ): Promise { - const builtInEntries = - host.engineV2 && isDefaultMarketplaceCatalog(source) - ? capabilities.map(capabilityMarketplaceEntry) - : undefined; + const builtInEntries = isDefaultMarketplaceCatalog(source) + ? capabilities.map(capabilityMarketplaceEntry) + : undefined; let marketplace: PluginMarketplace; let catalog: PluginMarketplace; try { @@ -483,8 +471,8 @@ const CAPABILITY_POLL_ATTEMPTS = 260; // ~3 minutes of runtime setup budget /** Client-injected v2 entries install their runtime and plugin together. * Trust keys on the parser-proof `builtIn` flag — the `capability:` * source string stays purely diagnostic. */ -function isCapabilityEntry(host: SlashCommandHost, entry: PluginMarketplaceEntry): boolean { - return host.engineV2 && entry.builtIn === true; +function isCapabilityEntry(entry: PluginMarketplaceEntry): boolean { + return entry.builtIn === true; } /** @@ -492,11 +480,8 @@ function isCapabilityEntry(host: SlashCommandHost, entry: PluginMarketplaceEntry * is answering membership by running `listCapabilities()`, which fires every * entry's detector (seconds of probes) just to print one hint line. */ -function isCapabilityPluginId(host: SlashCommandHost, id: string): boolean { - return ( - host.engineV2 && - (id === 'kimi-cu' || id === 'kimi-cu-win' || id === 'kimi-webbridge') - ); +function isCapabilityPluginId(id: string): boolean { + return id === 'kimi-cu' || id === 'kimi-cu-win' || id === 'kimi-webbridge'; } /** Poll a background capability install until it settles (or we run out of budget). */ @@ -717,7 +702,7 @@ async function handlePluginsPanelSelection( await showPluginsPicker(host, { initialTab: 'installed' }); return; case 'install': - if (isCapabilityEntry(host, selection.entry)) { + if (isCapabilityEntry(selection.entry)) { await installCapabilityFromPanel(host, panel, selection.entry); return; } @@ -773,7 +758,7 @@ async function handlePluginMcpSelection( async function removePlugin(host: SlashCommandHost, id: string): Promise { await (await resolvePluginApi(host)).removePlugin(id); host.showStatus(`Removed ${id}.`); - if (isCapabilityPluginId(host, id)) { + if (isCapabilityPluginId(id)) { host.showStatus( 'Note: the runtime binaries were left untouched, but Kimi Code plugin wiring is disabled for new sessions. Restart Kimi Code before reinstalling from the Official tab.', ); diff --git a/apps/kimi-code/src/tui/commands/provider.ts b/apps/kimi-code/src/tui/commands/provider.ts index 3a2f22e8ee5..492072a9145 100644 --- a/apps/kimi-code/src/tui/commands/provider.ts +++ b/apps/kimi-code/src/tui/commands/provider.ts @@ -306,7 +306,7 @@ export async function setDefaultModel( effort, model === undefined ? undefined : effectiveModelForHost(host, model), ); - if (host.session === undefined && host.engineV2) { + if (host.session === undefined) { // A first prompt may still be inside lazy creation: wait it out so the // pick lands on the new session instead of racing its assembly (same // coordination as the /model path). diff --git a/apps/kimi-code/src/tui/commands/registry.ts b/apps/kimi-code/src/tui/commands/registry.ts index 7888de62777..ea6aa0bb195 100644 --- a/apps/kimi-code/src/tui/commands/registry.ts +++ b/apps/kimi-code/src/tui/commands/registry.ts @@ -201,7 +201,6 @@ export const BUILTIN_SLASH_COMMANDS = [ // for the previous one to finish. availability: 'always', experimentalFlag: 'tower', - requiresEngineV2: true, }, { name: 'model', diff --git a/apps/kimi-code/src/tui/commands/reload.ts b/apps/kimi-code/src/tui/commands/reload.ts index 608c947c40e..2fa34312902 100644 --- a/apps/kimi-code/src/tui/commands/reload.ts +++ b/apps/kimi-code/src/tui/commands/reload.ts @@ -30,8 +30,7 @@ export async function handleReloadCommand(host: SlashCommandHost): Promise const config = await host.harness.getConfig({ reload: true }); setExperimentalFeatures(await host.harness.getExperimentalFeatures()); - const sessionlessV2 = session === undefined && host.engineV2; - if (sessionlessV2) { + if (session === undefined) { // Session-less v2: rebuild the workspace-level dynamic commands too, so // skill/plugin changes apply before the first session exists. await host.refreshSkillCommands(); @@ -45,9 +44,7 @@ export async function handleReloadCommand(host: SlashCommandHost): Promise // Still session-less on the v2 engine: refresh the lazy defaults too, so // defaults edited externally (config.toml, a newly added default model) // reach the first lazy-created session instead of staying stale. - if (sessionlessV2) { - await host.hydrateLazyConfigDefaults(); - } + await host.hydrateLazyConfigDefaults(); host.showStatus( 'Runtime and TUI config reloaded; no active session.', 'success', diff --git a/apps/kimi-code/src/tui/commands/resolve.ts b/apps/kimi-code/src/tui/commands/resolve.ts index de1d89a575a..7bcc942ad17 100644 --- a/apps/kimi-code/src/tui/commands/resolve.ts +++ b/apps/kimi-code/src/tui/commands/resolve.ts @@ -51,7 +51,6 @@ export interface ResolveSlashCommandInput { readonly pluginCommandMap: ReadonlyMap; readonly isStreaming: boolean; readonly isCompacting: boolean; - readonly engineV2: boolean; } export function resolveSlashCommandInput(options: ResolveSlashCommandInput): SlashCommandIntent { @@ -62,8 +61,7 @@ export function resolveSlashCommandInput(options: ResolveSlashCommandInput): Sla // `command` is a literal union where only some members carry `experimentalFlag`; widen to read it. if ( command !== undefined && - isExperimentalFlagEnabled((command as KimiSlashCommand).experimentalFlag) && - (!(command as KimiSlashCommand).requiresEngineV2 || options.engineV2) + isExperimentalFlagEnabled((command as KimiSlashCommand).experimentalFlag) ) { const busyReason = slashCommandBusyReason(options); if ( diff --git a/apps/kimi-code/src/tui/commands/session.ts b/apps/kimi-code/src/tui/commands/session.ts index df853fde56f..0f773209b7e 100644 --- a/apps/kimi-code/src/tui/commands/session.ts +++ b/apps/kimi-code/src/tui/commands/session.ts @@ -33,10 +33,6 @@ export async function handleTitleCommand(host: SlashCommandHost, args: string): let session = host.session; if (session === undefined) { - if (!host.engineV2) { - host.showError(NO_ACTIVE_SESSION_MESSAGE); - return; - } // Setting a title needs a live session; lazy-create it on first use (the // bare read-only form above works session-less). session = await host.ensureSession(); diff --git a/apps/kimi-code/src/tui/commands/tower.ts b/apps/kimi-code/src/tui/commands/tower.ts index 78d2ac02b64..890a1c3fa4f 100644 --- a/apps/kimi-code/src/tui/commands/tower.ts +++ b/apps/kimi-code/src/tui/commands/tower.ts @@ -1,10 +1,6 @@ import type { Session } from '@moonshot-ai/kimi-code-sdk'; -import { - NO_ACTIVE_SESSION_MESSAGE, - TOWER_STATUS_PROMPT, - TOWER_TEARDOWN_PROMPT, -} from '../constant/kimi-tui'; +import { TOWER_STATUS_PROMPT, TOWER_TEARDOWN_PROMPT } from '../constant/kimi-tui'; import { formatErrorMessage } from '../utils/event-payload'; import type { SlashCommandHost } from './dispatch'; @@ -88,10 +84,6 @@ async function setTowerMode( async function requireSessionEnsured(host: SlashCommandHost): Promise { if (host.session !== undefined) return host.session; - if (!host.engineV2) { - host.showError(NO_ACTIVE_SESSION_MESSAGE); - return undefined; - } // v2 session-less: lazy-create the session, then toggle — the same path // the first prompt takes. return host.ensureSession(); diff --git a/apps/kimi-code/src/tui/commands/types.ts b/apps/kimi-code/src/tui/commands/types.ts index b317e5d076e..9380bbee388 100644 --- a/apps/kimi-code/src/tui/commands/types.ts +++ b/apps/kimi-code/src/tui/commands/types.ts @@ -11,8 +11,6 @@ export interface KimiSlashCommand extends SlashCom /** When set, the command is hidden from the palette and blocked unless this flag is enabled. * A plain string: the gating flag may live in either engine's registry (v1 core or v2 domain). */ readonly experimentalFlag?: string; - /** When set, the command is hidden and unresolved on the legacy (v1) engine. */ - readonly requiresEngineV2?: boolean; /** * Generic argument autocompletion. `argumentPrefix` is the text typed after * `/ `; return suggestions or `null`. Declared as a plain function diff --git a/apps/kimi-code/src/tui/components/messages/tool-call.ts b/apps/kimi-code/src/tui/components/messages/tool-call.ts index 449b2c9abf7..96a2beb1551 100644 --- a/apps/kimi-code/src/tui/components/messages/tool-call.ts +++ b/apps/kimi-code/src/tui/components/messages/tool-call.ts @@ -201,8 +201,8 @@ const PLAN_SAVED_TO_RE = /\nPlan saved to: ([^\n]+)\n/; /** * Parses the ExitPlanMode result content string to recover the approval outcome * and optional plan path. Core-side templates live in - * `packages/agent-core/src/tools/builtin/planning/exit-plan-mode.ts` and - * `.../agent/permission/policies/exit-plan-mode-review-ask.ts`: + * `packages/agent-core-v2/src/features/plan/tools/exit-plan-mode/exitPlanModeTool.ts` and + * `packages/agent-core-v2/src/features/plan/exitPlanModeReview.ts`: * - Approved output starts with 'Exited plan mode.' and selected options * are reported as 'Selected approach: