Conversation
📝 WalkthroughWalkthroughThis PR consolidates TypeScript configuration by introducing a shared Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (8)
packages/mcp-client/src/__tests__/manager.test.ts (1)
68-68: Consider simplifying the assertion.The
connectedEvent as unknown as stringdouble assertion works but may be unnecessary. SinceconnectedEventis typed asstring | nulland you expect it to be a string at this point, you could use a non-null assertion or add a type guard for clearer intent:- expect(connectedEvent as unknown as string).toBe('test-server') + expect(connectedEvent!).toBe('test-server')Alternatively, the existing assertion is functionally correct for test code.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/mcp-client/src/__tests__/manager.test.ts` at line 68, The assertion uses a double cast on connectedEvent (connectedEvent as unknown as string); replace this with a clearer check by asserting non-null (using a non-null assertion on connectedEvent) or adding an explicit type guard before the expect so the test reads that connectedEvent is a string and then expects 'test-server'; update the expect line that references connectedEvent to remove the unnecessary double-cast and use either a non-null assertion or a short type guard for clarity.packages/builtin-tools/tsconfig.json (1)
2-2: Extendtsconfig.base.jsonfor consistency with other packages.All other packages in
packages/extend../../tsconfig.base.json, while this one extends../../tsconfig.json. Align with the established pattern.Proposed change
- "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/builtin-tools/tsconfig.json` at line 2, Update the "extends" field in the packages/builtin-tools/tsconfig.json so it points to the shared base tsconfig used by other packages (change the current "../../tsconfig.json" reference to "../../tsconfig.base.json") to maintain consistency with the rest of the monorepo.packages/remote-control-server/src/routes/v2/worker.ts (1)
9-9: Prefer explicit param guard over non-null assertion.Line 9 uses a force-cast for
id. Please narrow with a guard before calling session services.As per coding guidelines,
**/*.{ts,tsx}: Use type guards to narrow union types instead of force-casting to a specific type.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/remote-control-server/src/routes/v2/worker.ts` at line 9, Replace the non-null assertion on c.req.param("id") with an explicit guard: read the raw value from c.req.param("id") into a local (e.g., rawId), check if it's undefined or empty and handle that case (return a 4xx response or throw a controlled error) before assigning sessionId and calling session service methods (those usages of sessionId in this route handler). This ensures you avoid the `!` cast on sessionId and only call the session service functions when the id is present and validated.packages/remote-control-server/src/routes/v2/code-sessions.ts (1)
18-18: Replace forced non-null assertion with explicit param narrowing.Line 18 uses
c.req.param("id")!, which force-casts instead of narrowing. Prefer a runtime guard and early return for strict-safe typing.Suggested change
- const sessionId = c.req.param("id")!; + const sessionId = c.req.param("id"); + if (!sessionId) { + return c.json({ error: { type: "bad_request", message: "Missing session id" } }, 400); + }As per coding guidelines,
**/*.{ts,tsx}: Use type guards to narrow union types instead of force-casting to a specific type.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/remote-control-server/src/routes/v2/code-sessions.ts` at line 18, The code force-asserts the route param with c.req.param("id")! into sessionId; replace this with a runtime guard that checks the param exists and is the expected type/format (e.g., string/non-empty) and perform an early return or send a 400/422 error when it’s missing/invalid before using sessionId. Update the handler around sessionId to use the validated value (from c.req.param("id")) after the guard instead of the non-null assertion.packages/remote-control-server/src/routes/web/control.ts (1)
11-11: Avoidc.get("uuid")!inside shared helper; pass a narrowed UUID.Line 11 force-casts
uuid. Narrow in the route handler and passuuid: stringintocheckOwnershipso the helper stays safe and reusable.Suggested refactor
-function checkOwnership(c: { get: (key: string) => string | undefined }, sessionId: string) { - const uuid = c.get("uuid")!; +function checkOwnership(sessionId: string, uuid: string) { if (!storeIsSessionOwner(sessionId, uuid)) { return { error: true, session: null }; } const session = getSession(sessionId);- const { error } = checkOwnership(c, sessionId); + const uuid = c.get("uuid"); + if (!uuid) { + return c.json({ error: { type: "unauthorized", message: "Missing UUID" } }, 401); + } + const { error } = checkOwnership(sessionId, uuid);As per coding guidelines,
**/*.{ts,tsx}: Use type guards to narrow union types instead of force-casting to a specific type.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/remote-control-server/src/routes/web/control.ts` at line 11, The helper currently force-casts the context UUID with c.get("uuid")!; instead, narrow the UUID in the route handler and pass a typed string into the helper: change checkOwnership to accept uuid: string (update its signature and all callers) and remove c.get("uuid")! from inside checkOwnership, and in the route handler read c.get("uuid") using a type guard (e.g., ensure it's a string or throw/respond) then call checkOwnership(uuid, ...) so the helper no longer relies on a non-null assertion.packages/remote-control-server/src/routes/v2/worker-events.ts (1)
10-10: Use guardedsessionIdextraction instead of!in both handlers.Lines 10 and 25 force-cast route params. Narrow once per handler with an early
400return (or shared helper) to keep strict typing accurate.As per coding guidelines,
**/*.{ts,tsx}: Use type guards to narrow union types instead of force-casting to a specific type.Also applies to: 25-25
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/remote-control-server/src/routes/v2/worker-events.ts` at line 10, Replace the non-null assertion when reading the route param with a guarded extraction: call c.req.param("id") and check if it is undefined or empty; if so, return a 400 response early (or use a small helper used by both handlers) instead of using the `!` operator. Update the two occurrences where `const sessionId = c.req.param("id")!` is used so that `sessionId` is properly narrowed before use (refer to `c.req.param("id")` and the `sessionId` variable in each handler), and ensure the handlers send a 400 error with a clear message when the param is missing.packages/remote-control-server/src/routes/v1/sessions.ts (1)
41-41: Replaceparam("id")!calls with guardedsessionIdlocals.These lines rely on force-casting and repeatedly fetch
id. Guard once per route, then reusesessionIdfor downstream calls.As per coding guidelines,
**/*.{ts,tsx}: Use type guards to narrow union types instead of force-casting to a specific type.Also applies to: 52-52, 54-54, 61-61, 70-70
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/remote-control-server/src/routes/v1/sessions.ts` at line 41, Replace force-casting calls to c.req.param("id")! by first reading and guarding the param into a local (e.g., const sessionId = c.req.param("id")), validate it's present (and a string) and return an appropriate error response if missing, then pass that sessionId variable into getSession and the other downstream calls referenced in this file (the occurrences at getSession(...), and the other usages reported around lines 52, 54, 61, 70). This removes the non-null assertion and avoids repeated param lookups; ensure you update calls like getSession(sessionId) and any stop/update/session-related functions to use the guarded sessionId local.packages/remote-control-server/src/routes/web/sessions.ts (1)
14-14: Avoid repeateduuid!assertions; narrow once with a shared guard/helper.These lines all force-cast
c.get("uuid"). Please replace with explicit narrowing (or arequireUuidhelper) to keep strict-mode guarantees without assertions.Example helper pattern
+function requireUuid(c: { get: (key: string) => string | undefined }) { + const uuid = c.get("uuid"); + return uuid ?? null; +}- const uuid = c.get("uuid")!; + const uuid = requireUuid(c); + if (!uuid) { + return c.json({ error: { type: "unauthorized", message: "Missing UUID" } }, 401); + }As per coding guidelines,
**/*.{ts,tsx}: Use type guards to narrow union types instead of force-casting to a specific type.Also applies to: 40-40, 47-47, 54-54, 68-68, 85-85
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/remote-control-server/src/routes/web/sessions.ts` at line 14, Replace the repeated non-null assertions on c.get("uuid") by introducing a single type-narrowing guard (e.g., a requireUuid(c) helper or inline if-check) that throws or returns a typed string when missing, then use the returned value for uuid instead of calling c.get("uuid")! at each site (replace occurrences around the uuid variable at const uuid = c.get("uuid")! and the other occurrences referenced). Ensure the helper's signature narrows the type to string (or throws a descriptive error) so callers like the code that currently assigns to uuid no longer need the `!` assertion.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@build.ts`:
- Around line 94-108: The BUN_DESTRUCTURE regex is created with the /g flag so
calling BUN_DESTRUCTURE.test(content) across files can advance its internal
lastIndex and skip matches; fix by resetting BUN_DESTRUCTURE.lastIndex = 0
before each test call inside the files loop (or remove the global flag and use a
non-global regex for the existence check), then proceed to call
content.replace(BUN_DESTRUCTURE, BUN_DESTRUCTURE_SAFE) and increment bunPatched
as before; reference BUN_DESTRUCTURE, BUN_DESTRUCTURE_SAFE, and the for (const
file of files) loop when applying the change.
In `@packages/`@ant/computer-use-swift/tsconfig.json:
- Line 2: The package tsconfig currently extends "../../../tsconfig.json" which
is inconsistent with other packages; edit the package's tsconfig.json to change
the "extends" value to "tsconfig.base.json" (matching other packages) so it
inherits the shared base config directly and avoids pulling in root-level path
mappings; confirm the "extends" field in this package's tsconfig.json is the
only differing config and update any related package-level overrides if needed.
---
Nitpick comments:
In `@packages/builtin-tools/tsconfig.json`:
- Line 2: Update the "extends" field in the packages/builtin-tools/tsconfig.json
so it points to the shared base tsconfig used by other packages (change the
current "../../tsconfig.json" reference to "../../tsconfig.base.json") to
maintain consistency with the rest of the monorepo.
In `@packages/mcp-client/src/__tests__/manager.test.ts`:
- Line 68: The assertion uses a double cast on connectedEvent (connectedEvent as
unknown as string); replace this with a clearer check by asserting non-null
(using a non-null assertion on connectedEvent) or adding an explicit type guard
before the expect so the test reads that connectedEvent is a string and then
expects 'test-server'; update the expect line that references connectedEvent to
remove the unnecessary double-cast and use either a non-null assertion or a
short type guard for clarity.
In `@packages/remote-control-server/src/routes/v1/sessions.ts`:
- Line 41: Replace force-casting calls to c.req.param("id")! by first reading
and guarding the param into a local (e.g., const sessionId = c.req.param("id")),
validate it's present (and a string) and return an appropriate error response if
missing, then pass that sessionId variable into getSession and the other
downstream calls referenced in this file (the occurrences at getSession(...),
and the other usages reported around lines 52, 54, 61, 70). This removes the
non-null assertion and avoids repeated param lookups; ensure you update calls
like getSession(sessionId) and any stop/update/session-related functions to use
the guarded sessionId local.
In `@packages/remote-control-server/src/routes/v2/code-sessions.ts`:
- Line 18: The code force-asserts the route param with c.req.param("id")! into
sessionId; replace this with a runtime guard that checks the param exists and is
the expected type/format (e.g., string/non-empty) and perform an early return or
send a 400/422 error when it’s missing/invalid before using sessionId. Update
the handler around sessionId to use the validated value (from c.req.param("id"))
after the guard instead of the non-null assertion.
In `@packages/remote-control-server/src/routes/v2/worker-events.ts`:
- Line 10: Replace the non-null assertion when reading the route param with a
guarded extraction: call c.req.param("id") and check if it is undefined or
empty; if so, return a 400 response early (or use a small helper used by both
handlers) instead of using the `!` operator. Update the two occurrences where
`const sessionId = c.req.param("id")!` is used so that `sessionId` is properly
narrowed before use (refer to `c.req.param("id")` and the `sessionId` variable
in each handler), and ensure the handlers send a 400 error with a clear message
when the param is missing.
In `@packages/remote-control-server/src/routes/v2/worker.ts`:
- Line 9: Replace the non-null assertion on c.req.param("id") with an explicit
guard: read the raw value from c.req.param("id") into a local (e.g., rawId),
check if it's undefined or empty and handle that case (return a 4xx response or
throw a controlled error) before assigning sessionId and calling session service
methods (those usages of sessionId in this route handler). This ensures you
avoid the `!` cast on sessionId and only call the session service functions when
the id is present and validated.
In `@packages/remote-control-server/src/routes/web/control.ts`:
- Line 11: The helper currently force-casts the context UUID with
c.get("uuid")!; instead, narrow the UUID in the route handler and pass a typed
string into the helper: change checkOwnership to accept uuid: string (update its
signature and all callers) and remove c.get("uuid")! from inside checkOwnership,
and in the route handler read c.get("uuid") using a type guard (e.g., ensure
it's a string or throw/respond) then call checkOwnership(uuid, ...) so the
helper no longer relies on a non-null assertion.
In `@packages/remote-control-server/src/routes/web/sessions.ts`:
- Line 14: Replace the repeated non-null assertions on c.get("uuid") by
introducing a single type-narrowing guard (e.g., a requireUuid(c) helper or
inline if-check) that throws or returns a typed string when missing, then use
the returned value for uuid instead of calling c.get("uuid")! at each site
(replace occurrences around the uuid variable at const uuid = c.get("uuid")! and
the other occurrences referenced). Ensure the helper's signature narrows the
type to string (or throws a descriptive error) so callers like the code that
currently assigns to uuid no longer need the `!` assertion.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 4ed8be0b-9c89-4c9a-a68d-7e66e844bdb4
⛔ Files ignored due to path filters (1)
bun.lockis excluded by!**/*.lock
📒 Files selected for processing (38)
CLAUDE.mdbuild.tspackage.jsonpackages/@ant/claude-for-chrome-mcp/tsconfig.jsonpackages/@ant/computer-use-input/src/backends/darwin.tspackages/@ant/computer-use-input/tsconfig.jsonpackages/@ant/computer-use-mcp/tsconfig.jsonpackages/@ant/computer-use-swift/src/backends/darwin.tspackages/@ant/computer-use-swift/src/backends/linux.tspackages/@ant/computer-use-swift/src/types.tspackages/@ant/computer-use-swift/tsconfig.jsonpackages/@ant/ink/tsconfig.jsonpackages/agent-tools/src/__tests__/compat.test.tspackages/agent-tools/tsconfig.jsonpackages/audio-capture-napi/tsconfig.jsonpackages/builtin-tools/tsconfig.jsonpackages/color-diff-napi/src/__tests__/color-diff.test.tspackages/color-diff-napi/tsconfig.jsonpackages/image-processor-napi/tsconfig.jsonpackages/mcp-client/src/__tests__/InProcessTransport.test.tspackages/mcp-client/src/__tests__/discovery.test.tspackages/mcp-client/src/__tests__/manager.test.tspackages/mcp-client/tsconfig.jsonpackages/modifiers-napi/tsconfig.jsonpackages/remote-control-server/src/__tests__/disconnect-monitor.test.tspackages/remote-control-server/src/routes/v1/environments.tspackages/remote-control-server/src/routes/v1/environments.work.tspackages/remote-control-server/src/routes/v1/sessions.tspackages/remote-control-server/src/routes/v2/code-sessions.tspackages/remote-control-server/src/routes/v2/worker-events-stream.tspackages/remote-control-server/src/routes/v2/worker-events.tspackages/remote-control-server/src/routes/v2/worker.tspackages/remote-control-server/src/routes/web/control.tspackages/remote-control-server/src/routes/web/sessions.tspackages/remote-control-server/tsconfig.jsonpackages/url-handler-napi/tsconfig.jsontsconfig.base.jsontsconfig.json
| const BUN_DESTRUCTURE = /var \{([^}]+)\} = globalThis\.Bun;?/g | ||
| const BUN_DESTRUCTURE_SAFE = 'var {$1} = typeof globalThis.Bun !== "undefined" ? globalThis.Bun : {};' | ||
| for (const file of files) { | ||
| if (!file.endsWith('.js')) continue | ||
| const filePath = join(outdir, file) | ||
| const content = await readFile(filePath, 'utf-8') | ||
| if (BUN_DESTRUCTURE.test(content)) { | ||
| await writeFile( | ||
| filePath, | ||
| content.replace(BUN_DESTRUCTURE, BUN_DESTRUCTURE_SAFE), | ||
| ) | ||
| bunPatched++ | ||
| } | ||
| } | ||
| BUN_DESTRUCTURE.lastIndex = 0 |
There was a problem hiding this comment.
Regex lastIndex state bug may cause missed patches.
The /g flag causes BUN_DESTRUCTURE.test() to advance lastIndex on each match. When iterating over multiple files, lastIndex isn't reset before each test() call, potentially causing the regex to miss matches in subsequent files if they occur before the current lastIndex position.
🐛 Proposed fix: reset lastIndex before each test
for (const file of files) {
if (!file.endsWith('.js')) continue
const filePath = join(outdir, file)
const content = await readFile(filePath, 'utf-8')
+ BUN_DESTRUCTURE.lastIndex = 0
if (BUN_DESTRUCTURE.test(content)) {
+ BUN_DESTRUCTURE.lastIndex = 0
await writeFile(
filePath,
content.replace(BUN_DESTRUCTURE, BUN_DESTRUCTURE_SAFE),
)
bunPatched++
}
}
-BUN_DESTRUCTURE.lastIndex = 0Alternatively, use a non-global regex for the existence check:
-const BUN_DESTRUCTURE = /var \{([^}]+)\} = globalThis\.Bun;?/g
+const BUN_DESTRUCTURE = /var \{([^}]+)\} = globalThis\.Bun;?/g
+const BUN_DESTRUCTURE_CHECK = /var \{[^}]+\} = globalThis\.Bun;?/
...
- if (BUN_DESTRUCTURE.test(content)) {
+ if (BUN_DESTRUCTURE_CHECK.test(content)) {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@build.ts` around lines 94 - 108, The BUN_DESTRUCTURE regex is created with
the /g flag so calling BUN_DESTRUCTURE.test(content) across files can advance
its internal lastIndex and skip matches; fix by resetting
BUN_DESTRUCTURE.lastIndex = 0 before each test call inside the files loop (or
remove the global flag and use a non-global regex for the existence check), then
proceed to call content.replace(BUN_DESTRUCTURE, BUN_DESTRUCTURE_SAFE) and
increment bunPatched as before; reference BUN_DESTRUCTURE, BUN_DESTRUCTURE_SAFE,
and the for (const file of files) loop when applying the change.
| @@ -0,0 +1,5 @@ | |||
| { | |||
| "extends": "../../../tsconfig.json", | |||
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
Inconsistent base configuration extension.
This package extends ../../../tsconfig.json while all other packages in this PR extend tsconfig.base.json directly. This creates an inconsistency in the TypeScript configuration hierarchy and may inherit unnecessary path mappings meant for the root configuration.
♻️ Proposed fix to align with other packages
- "extends": "../../../tsconfig.json",
+ "extends": "../../../tsconfig.base.json",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "extends": "../../../tsconfig.json", | |
| "extends": "../../../tsconfig.base.json", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/`@ant/computer-use-swift/tsconfig.json at line 2, The package
tsconfig currently extends "../../../tsconfig.json" which is inconsistent with
other packages; edit the package's tsconfig.json to change the "extends" value
to "tsconfig.base.json" (matching other packages) so it inherits the shared base
config directly and avoids pulling in root-level path mappings; confirm the
"extends" field in this package's tsconfig.json is the only differing config and
update any related package-level overrides if needed.
* fix: 修复 Bun 的 polyfill 问题 * fix: 类型修复完成 * feat: 统一所有包的类型文件 * fix: 修复构建问题
* refactor: 创建 @anthropic-ai/model-provider 包骨架与类型定义 - 新建 workspace 包 packages/@anthropic-ai/model-provider - 定义 ModelProviderHooks 接口(依赖注入:分析、成本、日志等) - 定义 ClientFactories 接口(Anthropic/OpenAI/Gemini/Grok 客户端工厂) - 搬入核心类型:Message 体系、NonNullableUsage、EMPTY_USAGE、SystemPrompt、错误常量 - 主项目 src/types/message.ts 等改为 re-export,保持向后兼容 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: 提升 OpenAI 转换器和模型映射到 model-provider 包 - 搬入 OpenAI 消息转换(convertMessages)、工具转换(convertTools)、流适配(streamAdapter) - 搬入 OpenAI 和 Grok 模型映射(resolveOpenAIModel、resolveGrokModel) - 主项目文件改为 thin re-export proxy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: 搬入 Gemini 兼容层到 model-provider 包 - 搬入 Gemini 类型定义、消息转换、工具转换、流适配、模型映射 - 主项目 gemini/ 目录下文件改为 thin re-export proxy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: 搬入 errorUtils 并迁移消费者导入到 model-provider - 搬入 formatAPIError、extractConnectionErrorDetails 等 errorUtils - 迁移 10 个消费者文件直接从 @anthropic-ai/model-provider 导入 - 更新 emptyUsage、sdkUtilityTypes、systemPromptType 为 re-export proxy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: compact 模型降级为 -1 模式(Opus→Sonnet, Sonnet→Haiku) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 添加 agent-loop 绘图 * Revert "feat: compact 模型降级为 -1 模式(Opus→Sonnet, Sonnet→Haiku)" This reverts commit e458d63. * docs: 添加简化版 agent loop * fix: 修复 n 快捷键导致关闭的问题 * fix: 修复 node 下 ws 没打包问题 * docs: 修复链接 * test: 添加测试支持 * fix: 修复类型问题(#267) (#271) * fix: 修复 Bun 的 polyfill 问题 * fix: 类型修复完成 * feat: 统一所有包的类型文件 * fix: 修复构建问题 * test: 修复类型校验 (#279) * fix: 修复 Bun 的 polyfill 问题 * fix: 类型修复完成 * feat: 统一所有包的类型文件 * fix: 修复构建问题 * fix(remote-control): harden self-hosted session flows (#278) Co-authored-by: chengzifeng <chengzifeng@meituan.com> * docs: update contributors * build: 新增 vite 构建流程 * feat: 添加环境变量支持以覆盖 max_tokens 设置 * feat(langfuse): LLM generation 记录工具定义 将 Anthropic 格式的工具定义转换为 Langfuse 兼容的 OpenAI 格式, 并在 generation 的 input 中以 { messages, tools } 结构传入, 以便在 Langfuse UI 中查看完整的工具定义信息。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: 添加对 ACP 协议的支持 (#284) * feat: 适配 zed acp 协议 * docs: 完善 acp 文档 * chore: 1.4.0 * conflict: 解决冲突 * feat: 添加测试覆盖率上报 * style: 改名加移动文件夹位置 * refactor: 移动测试用例及实现 * test: 修复测试用例完成 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Cheng Zi Feng <1154238323@qq.com> Co-authored-by: chengzifeng <chengzifeng@meituan.com> Co-authored-by: claude-code-best <272536312+claude-code-best@users.noreply.github.com>
Summary by CodeRabbit
New Features
Bug Fixes
Chores