跳转至

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

export function GlobalKeybindingHandlers(): null

15. src/hooks/useCommandKeybindings.tsx

export function CommandKeybindingHandlers(): null

16. src/hooks/useCancelRequest.ts

export function CancelRequestHandler(): null

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

export default function PromptInput(props: PromptInputProps): JSX.Element

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

export function REPL(props: Props): JSX.Element

21. src/screens/Doctor.tsx

export function Doctor(props: Props): JSX.Element

22. src/screens/ResumeConversation.tsx

export function ResumeConversation(props: Props): JSX.Element

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。除 QueryEngineMCPConnectionManager 外都是函数/类型。
Claude Code 风格 = 函数式优先

2. Branded types 体现类型严谨

export type AgentId = string & { __brand: 'AgentId' }
这是编译时防止混用的技巧:AgentId 类型的变量不能直接传 string 参数。
TypeScript 的类型安全哲学

3. Provider + Hook 模式是 React 标准

<AppStateProvider> + useAppState() + <ThemeProvider> + useTheme() + <KeybindingSetup> + useKeybinding()
每个全局服务都遵循这个模式

4. TypeScript 联合类型贯穿全栈

MessageTaskTypeToolTaskStatusPermissionMode 全部是联合类型 + 类型守卫。
这是"读源码前的类型扫盲"

5. async function* 集中在核心循环

query()ask()streamApi()tool.call() 都是 async generator。
整个项目的"流式 API"统一形态