Reference | 导出符号速查¶
目的:找"哪个函数 / 类型"在哪个文件。 覆盖:核心模块的 export 列表。
1. src/state/store.ts¶
// 类型
export type Listener = () => void
export type OnChangeArgs<T> = { newState: T; oldState: T }
export type OnChange<T> = (args: OnChangeArgs<T>) => void
export type Store<T> = {
getState: () => T
setState: (updater: (prev: T) => T) => void
subscribe: (listener: Listener) => () => void
}
// 函数
export function createStore<T>(initialState: T, onChange?: OnChange<T>): Store<T>
2. src/state/AppStateStore.ts¶
// 类型
export type CompletionBoundary = ... // 完成边界
export type AppState = { ... } // 主 state(569 行)
// 工厂
export function createAppState(): AppState
3. src/state/AppState.tsx¶
// Context
export const AppStateContext: React.Context<...>
// Provider
export function AppStateProvider({ children, store }: Props): JSX.Element
// Hook
export function useAppState<T>(selector: (state: AppState) => T): T
4. src/Tool.ts¶
// 类型
export type ToolInputJSONSchema = { ... }
export type ToolUseContext = { ... }
export type ToolPermissionContext = DeepImmutable<{ ... }>
export type ToolResult<T> = { content: T, is_error?: boolean }
export type Tool = { name: string, description: string, inputSchema: AnyObject, ... }
export type Tools = readonly Tool[]
export type ToolDef = { ... }
export type ValidationResult = { result: true | { errorMessage: string } }
// 函数
export function getEmptyToolPermissionContext(): ToolPermissionContext
export function toolMatchesName(tool: Tool, name: string): boolean
export function findToolByName(tools: Tools, name: string): Tool | undefined
export function filterToolProgressMessages<P>(messages: Progress[]): P[]
export function buildTool<D>(def: D): BuiltTool<D>
5. src/tools.ts¶
// 注册表
export const REPL_ONLY_TOOLS: string[]
export const TOOL_PRESETS = ['default'] as const
export type ToolPreset = (typeof TOOL_PRESETS)[number]
// 函数
export function parseToolPreset(preset: string): ToolPreset | null
export function getToolsForDefaultPreset(): string[]
export function getAllBaseTools(): Tools
export function filterToolsByDenyRules<T extends Tools>(tools: T, rules: ...): T
export const getTools: (permissionContext: ToolPermissionContext) => Tools
export function assembleToolPool(...): Tools
6. src/Task.ts¶
// 类型
export type TaskType =
| 'local_bash'
| 'local_agent'
| 'remote_agent'
| 'in_process_teammate'
| 'local_workflow'
| 'monitor_mcp'
| 'dream'
export type TaskStatus =
| 'pending'
| 'running'
| 'completed'
| 'failed'
| 'killed'
export type TaskHandle = { taskId: string, cleanup?: () => void }
export type SetAppState = (f: (prev: AppState) => AppState) => void
export type TaskContext = { abortController: AbortController, getAppState: () => AppState, ... }
// 函数
export function isTerminalTaskStatus(status: TaskStatus): boolean
7. src/query.ts¶
// 主循环
export async function* query(
messages: Message[],
systemPrompt: SystemPrompt,
context: ToolUseContext,
canUseTool: CanUseToolFn,
options: QueryOptions
): AsyncGenerator<StreamEvent, void, void>
// 内部
function* yieldMissingToolResultBlocks(...): Generator<...>
function isWithheldMaxOutputTokens(...): boolean
async function* queryLoop(...): AsyncGenerator<...>
8. src/QueryEngine.ts¶
// Class
export class QueryEngine {
// 内部状态
// ...
async *ask(messages: Message[]): AsyncGenerator<AskEvent>
}
// 顶层
export async function* ask(...): AsyncGenerator<...>
9. src/services/api/claude.ts¶
// 推测导出
export async function* streamApi(params: MessageStreamParams): AsyncGenerator<StreamEvent>
export function createClient(options: ClientOptions): Anthropic
export function makeRequest(messages: Message[], options: RequestOptions): Promise<Response>
10. src/services/mcp/MCPConnectionManager.tsx¶
export class MCPConnectionManager {
async addServer(config: MCPServerConfig): Promise<void>
async removeServer(name: string): Promise<void>
async callTool(serverName: string, toolName: string, input: unknown): Promise<ToolResult>
async reconnect(serverName: string): Promise<void>
listServers(): MCPServerConfig[]
}
export function getMCPManager(): MCPConnectionManager
11. src/services/compact/¶
// autoCompact.ts
export function isAutoCompactEnabled(): boolean
export function calculateTokenWarningState(...): 'ok' | 'warning' | 'critical' | 'auto_compact'
// microCompact.ts
export function shouldMicroCompact(result: ToolResult): boolean
export function microCompactToolResult(result: ToolResult): ToolResult
// compact.ts
export function buildPostCompactMessages(messages: Message[], summary: string): Message[]
12. src/bridge/bridgeMain.ts¶
// 推测导出
export class BridgeMain {
async start(): Promise<void>
async stop(): Promise<void>
send(message: BridgeMessage): void
onMessage(handler: (msg: BridgeMessage) => void): () => void
}
export function getBridge(): BridgeMain
13. src/keybindings/¶
// KeybindingProviderSetup.tsx
export function KeybindingSetup({ children }: Props): JSX.Element
// useKeybinding.ts(推测)
export function useKeybinding(config: KeybindingConfig): void
// useKeybindings.ts
export function useKeybindings(configs: KeybindingConfig[]): void
// useShortcutDisplay.ts
export function useShortcutDisplay(): (keys: string) => string
// shortcutFormat.ts
export function getShortcutDisplay(keys: string, platform: Platform): string
14. src/hooks/useGlobalKeybindings.tsx¶
15. src/hooks/useCommandKeybindings.tsx¶
16. src/hooks/useCancelRequest.ts¶
17. src/components/design-system/¶
// Dialog.tsx
export function Dialog(props: DialogProps): JSX.Element
// ThemeProvider.tsx
export function ThemeProvider({ children }: Props): JSX.Element
export function useTheme(): Theme
// Tabs.tsx
export function Tabs(props: TabsProps): JSX.Element
// 其他 12 个组件略
18. src/components/PromptInput/PromptInput.tsx¶
19. src/components/VirtualMessageList.tsx¶
export function VirtualMessageList(props: Props): JSX.Element
export type JumpHandle = { jumpTo: (id: string) => void, scrollToTop: () => void, ... }
20. src/screens/REPL.tsx¶
21. src/screens/Doctor.tsx¶
22. src/screens/ResumeConversation.tsx¶
23. src/ink/ink.tsx¶
// Ink class
export default class Ink {
constructor(tree: ReactNode, options: Options)
render(): void
unmount(): void
waitUntilExit(): Promise<void>
}
// 函数
export function drainStdin(stdin?: NodeJS.ReadStream): void
// 类型
export type Options = { ... }
24. src/ink/hooks/use-input.ts¶
export function useInput(
handler: (input: string, key: Key) => void,
options?: { isActive?: boolean }
): void
25. src/types/¶
// message.ts
export type UserMessage = { ... }
export type AssistantMessage = { ... }
export type ToolUseMessage = { ... }
export type ToolResultMessage = { ... }
export type SystemMessage = { ... }
export type Message = UserMessage | AssistantMessage | ...
export type StreamEvent = ...
// permissions.ts
export type PermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'
export type PermissionResult = { behavior: 'allow' } | { behavior: 'deny', message: string } | { behavior: 'ask' }
// ids.ts
export type AgentId = string & { __brand: 'AgentId' } // branded type
export type SessionId = string & { __brand: 'SessionId' }
export function asAgentId(s: string): AgentId
export function asSessionId(s: string): SessionId
关键洞察¶
1. 导出以"类型 + 函数"为主¶
几乎没有 导出 class。除 QueryEngine 和 MCPConnectionManager 外都是函数/类型。
Claude Code 风格 = 函数式优先。
2. Branded types 体现类型严谨¶
这是编译时防止混用的技巧:AgentId 类型的变量不能直接传 string 参数。TypeScript 的类型安全哲学。
3. Provider + Hook 模式是 React 标准¶
<AppStateProvider> + useAppState() + <ThemeProvider> + useTheme() + <KeybindingSetup> + useKeybinding()
每个全局服务都遵循这个模式。
4. TypeScript 联合类型贯穿全栈¶
Message、TaskType、Tool、TaskStatus、PermissionMode 全部是联合类型 + 类型守卫。
这是"读源码前的类型扫盲"。
5. async function* 集中在核心循环¶
query()、ask()、streamApi()、tool.call() 都是 async generator。
整个项目的"流式 API"统一形态。