Skip to content

Commit 4ab4506

Browse files
fix: 修复 USER_TYPE=ant 时 TUI 无法启动的问题
反编译版本中 global.d.ts 声明的全局函数运行时未定义, 通过显式 import、stub 组件和全局 polyfill 修复。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent ce29527 commit 4ab4506

9 files changed

Lines changed: 477 additions & 341 deletions

File tree

DEV-LOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# DEV-LOG
2+
3+
## USER_TYPE=ant TUI 修复 (2026-04-02)
4+
5+
`global.d.ts` 声明的全局函数在反编译版本运行时未定义,导致 `USER_TYPE=ant` 时 TUI 崩溃。
6+
7+
修复方式:显式 import / 本地 stub / 全局 stub / 新建 stub 文件。涉及文件:
8+
`cli.tsx`, `model.ts`, `context.ts`, `effort.ts`, `thinking.ts`, `undercover.ts`, `Spinner.tsx`, `AntModelSwitchCallout.tsx`(新建), `UndercoverAutoCallout.tsx`(新建)
9+
10+
注意:
11+
- `USER_TYPE=ant` 启用 alt-screen 全屏模式,中心区域满屏是预期行为
12+
- `global.d.ts` 中剩余未 stub 的全局函数(`getAntModels` 等)遇到 `X is not defined` 时按同样模式处理
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Stub — ant-only component, not available in decompiled build
2+
import React from 'react';
3+
4+
export function AntModelSwitchCallout(_props: {
5+
onDone: (selection: string, modelAlias?: string) => void;
6+
}): React.ReactElement | null {
7+
return null;
8+
}
9+
10+
export function shouldShowModelSwitchCallout(): boolean {
11+
return false;
12+
}

src/components/Spinner.tsx

Lines changed: 213 additions & 82 deletions
Large diffs are not rendered by default.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Stub — ant-only component, not available in decompiled build
2+
import React, { useEffect } from 'react';
3+
4+
export function UndercoverAutoCallout({ onDone }: { onDone: () => void }): React.ReactElement | null {
5+
useEffect(() => {
6+
onDone();
7+
}, [onDone]);
8+
return null;
9+
}

src/entrypoints/cli.tsx

Lines changed: 226 additions & 259 deletions
Large diffs are not rendered by default.

src/utils/context.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { CONTEXT_1M_BETA_HEADER } from '../constants/betas.js'
33
import { getGlobalConfig } from './config.js'
44
import { isEnvTruthy } from './envUtils.js'
55
import { getCanonicalName } from './model/model.js'
6+
import { resolveAntModel } from './model/antModels.js'
67
import { getModelCapability } from './model/modelCapabilities.js'
78

89
// Model context window size (200k tokens for all models right now)

src/utils/effort.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { getAPIProvider } from './model/providers.js'
77
import { get3PModelCapabilityOverride } from './model/modelSupportOverrides.js'
88
import { isEnvTruthy } from './envUtils.js'
99
import type { EffortLevel } from 'src/entrypoints/sdk/runtimeTypes.js'
10+
import { resolveAntModel } from './model/antModels.js'
11+
import { getAntModelOverrideConfig } from './model/antModels.js'
1012

1113
export type { EffortLevel }
1214

src/utils/model/model.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* during dead code elimination
77
*/
88
import { getMainLoopModelOverride } from '../../bootstrap/state.js'
9+
import { resolveAntModel, getAntModelOverrideConfig } from './antModels.js'
910
import {
1011
getSubscriptionType,
1112
isClaudeAISubscriber,

src/utils/thinking.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { getCanonicalName } from './model/model.js'
66
import { get3PModelCapabilityOverride } from './model/modelSupportOverrides.js'
77
import { getAPIProvider } from './model/providers.js'
88
import { getSettingsWithErrors } from './settings/settings.js'
9+
import { resolveAntModel } from './model/antModels.js'
910

1011
export type ThinkingConfig =
1112
| { type: 'adaptive' }

0 commit comments

Comments
 (0)