mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-23 08:45:50 +00:00
refactor: 拆分 3 个过大 ACP 文件为模块化子文件(每个 <500 行)
通过 4 阶段 workflow(分析 → 计划 → 重构 → 验证)将 3 个超大的 ACP 源文件拆分为 28 个模块化子文件,每个均严格小于 500 行,且完整保留 所有公共 API(barrel 模式重导出)。 变更概要: - packages/acp-link/src/server.ts: 1800 → 20 行(barrel),新增 11 个子模块 (server/types、payload-decode、permission-mode、runtime-state、dispatch、 handlers-agent、handlers-session、acp-client、client-send、start-server、 testing-internals) - src/services/acp/agent.ts: 1297 → 33 行(barrel),新增 9 个子模块 (agent/AcpAgent、sessionTypes、permissionMode、configOptions、promptQueue、 internalAccessors、createSessionMethod、sessionLifecycle、promptFlow) - src/services/acp/bridge.ts: 1516 → 29 行(barrel),新增 8 个子模块 (bridge/types、paths、contentBlocks、toolInfo、toolResults、modelUsage、 notifications、forwarding) 验证: - bun run precheck 全通过(typecheck + lint + 5851 tests) - ACP service tests: 176 pass / 0 fail - ACP link tests: 47 pass / 0 fail - 所有外部消费者(entry.ts、permissions.ts、__tests__/)的 import 路径不变 - 测试文件零修改 迁移计划详见 docs/acp-refactor-plan.md。 Co-Authored-By: glm-5.2 <zai-org@claude-code-best.win>
This commit is contained in:
71
packages/acp-link/src/server/permission-mode.ts
Normal file
71
packages/acp-link/src/server/permission-mode.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { getDefaultPermissionMode } from './runtime-state.js'
|
||||
|
||||
export const ACP_LINK_PERMISSION_MODE_ALIASES = {
|
||||
auto: 'auto',
|
||||
default: 'default',
|
||||
acceptedits: 'acceptEdits',
|
||||
dontask: 'dontAsk',
|
||||
plan: 'plan',
|
||||
bypasspermissions: 'bypassPermissions',
|
||||
bypass: 'bypassPermissions',
|
||||
} as const
|
||||
|
||||
export type AcpLinkPermissionMode =
|
||||
(typeof ACP_LINK_PERMISSION_MODE_ALIASES)[keyof typeof ACP_LINK_PERMISSION_MODE_ALIASES]
|
||||
|
||||
export function resolveNewSessionPermissionMode(
|
||||
requestedMode: string | undefined,
|
||||
defaultMode: string | undefined,
|
||||
): string | undefined {
|
||||
const requested = resolveAcpLinkPermissionMode(requestedMode)
|
||||
const localDefault = resolveAcpLinkPermissionMode(defaultMode)
|
||||
|
||||
if (!requested) {
|
||||
return localDefault
|
||||
}
|
||||
|
||||
if (requested !== 'bypassPermissions') {
|
||||
return requested
|
||||
}
|
||||
|
||||
if (localDefault === 'bypassPermissions') {
|
||||
return 'bypassPermissions'
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
'bypassPermissions requires local ACP_PERMISSION_MODE=bypassPermissions before a client can request it.',
|
||||
)
|
||||
}
|
||||
|
||||
export function resolveAcpLinkPermissionMode(
|
||||
mode: string | undefined,
|
||||
): AcpLinkPermissionMode | undefined {
|
||||
if (mode === undefined) return undefined
|
||||
|
||||
const normalized = mode?.trim().toLowerCase()
|
||||
if (!normalized) {
|
||||
throw new Error('Invalid permissionMode: expected a non-empty string.')
|
||||
}
|
||||
|
||||
const resolved =
|
||||
ACP_LINK_PERMISSION_MODE_ALIASES[
|
||||
normalized as keyof typeof ACP_LINK_PERMISSION_MODE_ALIASES
|
||||
]
|
||||
if (!resolved) {
|
||||
throw new Error(`Invalid permissionMode: ${mode}.`)
|
||||
}
|
||||
|
||||
return resolved
|
||||
}
|
||||
|
||||
export function buildAgentEnv(): NodeJS.ProcessEnv {
|
||||
const DEFAULT_PERMISSION_MODE = getDefaultPermissionMode()
|
||||
if (!DEFAULT_PERMISSION_MODE) {
|
||||
return process.env
|
||||
}
|
||||
|
||||
return {
|
||||
...process.env,
|
||||
ACP_PERMISSION_MODE: DEFAULT_PERMISSION_MODE,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user