源码索引
本页分析版本本页由
npm run generate:source-index自动生成,请勿手工编辑。 全书共 336 处源码引用,全部固定在earendil-works/pi@c13ffe1。
earendil-works/pi@c13ffe12026-07-30按章节
3.5 Agent 与 Agent Loop
packages/agent/src/types.ts:422-428·AgentEventpackages/agent/src/agent-loop.ts:155-200·runLooppackages/agent/src/agent-loop.ts:203-224·executeToolCalls
3.7 Compaction、Extension 与 Skill
packages/agent/src/harness/compaction/compaction.ts:163-178·CompactionSettingspackages/agent/src/harness/compaction/compaction.ts:262-266·shouldCompactpackages/coding-agent/src/core/extensions/types.ts:1669-1682·Extensionpackages/agent/src/harness/types.ts:58-75·Skill
3.6 Agent Harness、Session 与状态
packages/ai/package.json:2-4·@earendil-works/pi-aipackages/agent/src/index.ts:1-6·harness/agent-harness.tspackages/agent/src/harness/agent-harness.ts:171-197·AgentHarnesspackages/agent/src/harness/agent-harness.ts:538-565·handleAgentEventpackages/coding-agent/package.json:2-4·@earendil-works/pi-coding-agent
3.1 LLM 与模型 API
packages/ai/src/providers/faux.ts:73-94·fauxAssistantMessagepackages/coding-agent/test/agent-session-runtime-events.test.ts:42-46·createRuntimeHost
3.2 消息、上下文与 token
packages/ai/src/types.ts:393-433·Messagepackages/ai/src/types.ts:487-491·Context
3.3 流式输出(Streaming)
packages/ai/src/types.ts:493-513·AssistantMessageEventpackages/ai/src/api/anthropic-messages.ts:654-666·parseStreamingJson
3.4 工具调用(Tool Calling)
packages/ai/src/types.ts:480-485·Toolpackages/ai/src/types.ts:360-366·ToolCallpackages/ai/src/types.ts:399-413·AssistantMessagepackages/ai/src/types.ts:415-431·ToolResultMessage
2.5 异步编程:Promise 与 async/await
packages/coding-agent/src/core/tools/write.ts:194-226·executepackages/coding-agent/src/modes/interactive/interactive-mode.ts:705-716·init
2.6 异步迭代器与 for await
packages/ai/src/utils/event-stream.ts:4-67·EventStreampackages/ai/src/api/anthropic-messages.ts:446-485·iterateAnthropicEvents
2.9 错误处理与测试基础
packages/agent/src/harness/types.ts:160-173·FileErrorpackages/agent/src/harness/env/nodejs.ts:92-118·toFileErrorpackages/coding-agent/test/path-utils.test.ts:1-12·expandPath
2.7 事件、回调与取消(AbortController)
packages/agent/src/agent.ts:306-314·abortpackages/ai/src/utils/abort-signals.ts:6-41·combineAbortSignals
1.2 运行第一个 TypeScript 程序
pi-test.sh:57-57·tsxpackage.json:60-60·tsx
2.4 泛型、class 与类型收窄
packages/agent/src/harness/types.ts:23-34·Resultpackages/agent/src/agent.ts:171-177·Agentpackages/agent/src/harness/session/session.ts:150-157·Sessionpackages/agent/src/harness/types.ts:47-56·toError
2.2 interface、type 与函数类型
packages/ai/src/types.ts:480-485·Toolpackages/agent/src/types.ts:379-403·AgentToolpackages/agent/src/types.ts:42-42·ToolExecutionMode
1.4 模块系统:import 与 export
packages/agent/package.json:5-5packages/agent/src/agent.ts:1-30·runAgentLooptsconfig.base.json:18-19·allowImportingTsExtensionspackages/agent/src/index.ts:1-50
2.8 Node.js 文件、路径与进程 API
packages/agent/src/harness/tools/read.ts:53-56·executepackages/agent/src/harness/env/nodejs.ts:1-19·node:fs/promisespackages/agent/src/harness/env/nodejs.ts:541-569·readBinaryFile
1.3 npm、package.json 与项目结构
package.json:5-13·workspacespackages/coding-agent/package.json:41-44·dependenciespackages/coding-agent/package.json:9-11·bin
2.1 类型入门:基本类型与对象
packages/ai/src/types.ts:354-358·ImageContentpackages/ai/src/types.ts:368-389·Usage
2.3 union、字面量与可辨识联合
packages/ai/src/types.ts:338-366·TextContentpackages/ai/src/types.ts:399-413·AssistantMessagepackages/ai/src/types.ts:433-433·Messagepackages/ai/src/types.ts:501-513·AssistantMessageEvent
1.1 JavaScript、TypeScript 与 Node.js
package.json:63-65·enginestsconfig.base.json:2-6
8.5 取消与 Extension Hook
packages/agent/src/agent.ts:471-494·runWithLifecyclepackages/agent/src/agent.ts:306-314·abortpackages/agent/src/agent-loop.ts:196-200·stopReasonpackages/agent/src/agent-loop.ts:666-693·executePreparedToolCallpackages/coding-agent/src/core/extensions/types.ts:1494-1495·ExtensionFactorypackages/coding-agent/src/core/extensions/loader.ts:459-485·loadExtensionpackages/coding-agent/src/core/extensions/loader.ts:405-433·loadExtensionModulepackages/coding-agent/src/core/extensions/types.ts:1185-1231·ExtensionAPIpackages/coding-agent/src/core/event-bus.ts:12-33·createEventBuspackages/coding-agent/src/core/extensions/runner.ts:796-828·emitpackages/coding-agent/src/core/extensions/loader.ts:247-254·registerToolpackages/coding-agent/src/core/agent-session.ts:2517-2521·toolRegistrypackages/coding-agent/src/core/extensions/loader.ts:172-181·createExtensionRuntime
8.1 最小 CLI 与 Fake Model
packages/coding-agent/src/main.ts:239-251·promptConfirmpackages/coding-agent/src/main.ts:109-120·resolveAppModepackages/ai/src/types.ts:487-491·Contextpackages/ai/src/types.ts:393-433·Messagepackages/ai/src/providers/faux.ts:96-103·FauxResponseSteppackages/ai/src/providers/faux.ts:445-464·streampackages/agent/src/types.ts:18-32·StreamFn
8.3 Agent Loop 与工具执行
packages/agent/src/agent-loop.ts:155-275·runLooppackages/agent/src/agent-loop.ts:381-406·failToolCallsFromTruncatedMessagepackages/agent/src/agent-loop.ts:582-584·shouldTerminateToolBatchpackages/agent/src/agent-loop.ts:600-664·prepareToolCallpackages/ai/src/utils/validation.ts:278-310·validateToolArgumentspackages/ai/src/types.ts:480-485·Toolpackages/agent/src/types.ts:380-403·AgentToolpackages/agent/src/types.ts:422-437·AgentEvent
8.2 消息历史与流式事件
packages/ai/src/types.ts:493-513·AssistantMessageEventpackages/ai/src/types.ts:312-324·StreamFunctionpackages/agent/src/types.ts:18-32·StreamFnpackages/agent/src/types.ts:422-437·AgentEventpackages/agent/src/agent-loop.ts:317-359·message_updatepackages/ai/src/utils/event-stream.ts:69-83·AssistantMessageEventStreampackages/agent/src/agent-loop.ts:193-200·stopReasonpackages/ai/src/providers/faux.ts:359-374·splitStringByTokenSize
8.0 Mini Harness 总览与准备
packages/ai/src/types.ts:487-491·Contextpackages/ai/src/types.ts:312-324·StreamFunctionpackages/ai/src/types.ts:501-513·AssistantMessageEventpackages/agent/src/types.ts:422-437·AgentEventpackages/agent/src/harness/types.ts:715-740·AgentHarnessOwnEventpackages/ai/src/types.ts:16-26·KnownApipackages/ai/src/types.ts:34-72·KnownProviderpackages/agent/src/agent.ts:225-231·toolExecution
8.6 接入真实模型(可选)
packages/ai/src/providers/anthropic.ts:9-36·anthropicApiKeyAuthpackages/coding-agent/src/core/auth-storage.ts:180-182·AuthStoragepackages/ai/src/types.ts:312-324·StreamFunctionpackages/ai/src/api/anthropic-messages.ts:387-444·iterateSseMessagespackages/ai/src/api/anthropic-messages.ts:446-485·iterateAnthropicEventspackages/ai/src/api/anthropic-messages.ts:654-666·input_json_deltapackages/ai/src/api/anthropic-messages.ts:1325-1351·mapStopReason
8.4 Session 保存与恢复
packages/coding-agent/src/core/session-manager.ts:30-39·SessionHeaderpackages/coding-agent/src/core/session-manager.ts:46-51·SessionEntryBasepackages/coding-agent/src/core/session-manager.ts:143-153·SessionEntrypackages/coding-agent/src/core/agent-session.ts:625-643·appendMessagepackages/coding-agent/src/core/session-manager.ts:1015-1042·_persistpackages/coding-agent/src/core/session-manager.ts:514-556·loadEntriesFromFilepackages/coding-agent/src/core/session-manager.ts:277-291·migrateToCurrentVersionpackages/agent/src/harness/session/jsonl-storage.ts:65-77·parseHeaderLinepackages/coding-agent/src/main.ts:386-388·continueRecentpackages/coding-agent/src/core/session-manager.ts:635-656·findMostRecentSessionpackages/coding-agent/src/core/session-manager.ts:1557-1565·continueRecentpackages/coding-agent/src/core/sdk.ts:362-374·agent.state.messages
7.4 自定义 Provider
packages/coding-agent/src/core/extensions/types.ts:1400-1401·registerProviderpackages/coding-agent/examples/extensions/custom-provider-anthropic/index.ts:574-610·pi.registerProviderpackages/coding-agent/src/core/extensions/loader.ts:376-384·registerProviderpackages/coding-agent/src/core/extensions/loader.ts:208-215·pendingProviderRegistrationspackages/coding-agent/src/core/extensions/runner.ts:352-369·pendingProviderRegistrationspackages/coding-agent/src/core/agent-session.ts:2438-2451·registerNativeProviderpackages/coding-agent/src/core/model-runtime.ts:550-586·registerProviderpackages/coding-agent/src/core/model-runtime.ts:202-224·recomposeProviderpackages/coding-agent/src/core/provider-composer.ts:446-466·streamWithpackages/coding-agent/src/extensions/index.ts:1-4·builtInExtensions
7.3 自定义工具与斜杠命令
packages/coding-agent/src/core/extensions/types.ts:449-498·ToolDefinitionpackages/coding-agent/src/core/extensions/loader.ts:247-254·registerToolpackages/coding-agent/src/core/extensions/runner.ts:449-460·getAllRegisteredToolspackages/coding-agent/src/core/agent-session.ts:2455-2521·_refreshToolRegistrypackages/coding-agent/src/core/extensions/wrapper.ts:17-37·wrapRegisteredToolpackages/agent/src/agent-loop.ts:600-618·prepareToolCallpackages/coding-agent/src/core/slash-commands.ts:19-42·BUILTIN_SLASH_COMMANDSpackages/coding-agent/src/core/extensions/loader.ts:256-263·registerCommandpackages/coding-agent/src/core/agent-session.ts:1270-1294·_tryExecuteExtensionCommandpackages/coding-agent/src/modes/interactive/interactive-mode.ts:571-655·createBaseAutocompleteProvider
7.1 Extension 系统
packages/coding-agent/src/core/extensions/types.ts:1494-1495·ExtensionFactorypackages/coding-agent/src/core/extensions/loader.ts:631-641·discoverExtensionsInDirpackages/coding-agent/src/core/extensions/loader.ts:413-424·createJitipackages/coding-agent/src/core/extensions/loader.ts:459-485·loadExtensionpackages/coding-agent/src/core/extensions/types.ts:1185-1231·ExtensionAPIpackages/coding-agent/src/core/extensions/loader.ts:172-194·createExtensionRuntimepackages/coding-agent/src/core/extensions/runner.ts:796-828·RunnerEmitResultpackages/coding-agent/src/core/agent-session.ts:468-488·_installAgentToolHookspackages/coding-agent/src/core/event-bus.ts:12-33·createEventBuspackages/coding-agent/examples/extensions/pirate.ts:15-46·pirateExtension
7.2 Skill 系统
packages/coding-agent/src/core/skills.ts:67-81·SkillFrontmatterpackages/coding-agent/src/core/skills.ts:295-307·frontmatter.name || parentDirNamepackages/coding-agent/src/core/package-manager.ts:2342-2358·userAgentsSkillsDirpackages/coding-agent/src/core/package-manager.ts:405-409·dir === rootpackages/coding-agent/src/core/skills.ts:160-171·loadSkillsFromDirpackages/coding-agent/src/core/resource-loader.ts:467-472·updateSkillsFromPathspackages/coding-agent/src/core/agent-session.ts:1021-1054·_rebuildSystemPromptpackages/coding-agent/src/core/system-prompt.ts:154-157·formatSkillsForPrompt(skills)packages/coding-agent/src/core/skills.ts:335-361·formatSkillsForPromptpackages/coding-agent/src/core/agent-session.ts:1301-1325·_expandSkillCommand
6.3 pi-agent-core:Agent 与循环
packages/agent/src/agent-loop.ts:155-174·runLooppackages/agent/src/agent-loop.ts:196-224·hasMoreToolCallspackages/agent/src/agent-loop.ts:247-274·getFollowUpMessagespackages/agent/src/types.ts:422-437·AgentEventpackages/agent/src/agent.ts:337-377·promptpackages/agent/src/agent.ts:460-468·getSteeringMessagespackages/agent/src/agent.ts:210-231·getDefaultStreamFnpackages/agent/src/harness/agent-harness.ts:613-622·runAgentLooppackages/agent/src/harness/agent-harness.ts:538-565·handleAgentEventpackages/agent/src/harness/agent-harness.ts:707-722·nextTurn
6.1 pi-ai:统一的模型接口
packages/ai/src/providers/all.ts:131-137·builtinModelspackages/ai/src/models.ts:127-187·Modelspackages/ai/src/models.ts:504-510·completepackages/ai/src/types.ts:338-433·Messagepackages/ai/src/types.ts:501-513·AssistantMessageEventpackages/ai/src/utils/event-stream.ts:4-67·EventStreampackages/ai/src/api/anthropic-messages.ts:387-444·iterateSseMessagespackages/ai/src/api/anthropic-messages.ts:654-666·input_json_deltapackages/ai/src/utils/json-parse.ts:104-124·parseStreamingJsonpackages/ai/src/providers/faux.ts:523-541·fauxProvider
6.6 Context 构造与 Compaction
packages/coding-agent/src/core/session-manager.ts:383-408·sessionEntryToContextMessagespackages/coding-agent/src/core/session-manager.ts:418-454·buildContextEntriespackages/coding-agent/src/core/messages.ts:148-195·convertToLlmpackages/agent/src/agent-loop.ts:281-302·streamAssistantResponsepackages/coding-agent/src/core/compaction/compaction.ts:235-238·shouldCompactpackages/coding-agent/src/core/agent-session.ts:1953-2042·_checkCompactionpackages/ai/src/utils/overflow.ts:132-161·isContextOverflowpackages/coding-agent/src/core/compaction/compaction.ts:710-789·prepareCompactionpackages/coding-agent/src/core/compaction/compaction.ts:403-461·findCutPointpackages/coding-agent/src/core/compaction/compaction.ts:562-581·completeSummarization
6.10 交互模式与 RPC 模式
packages/coding-agent/src/main.ts:109-124·resolveAppModepackages/coding-agent/src/main.ts:793-797·createAgentSessionRuntimepackages/coding-agent/src/core/agent-session-runtime.ts:67-79·AgentSessionRuntimepackages/coding-agent/src/main.ts:868-909·runRpcModepackages/coding-agent/src/modes/rpc/jsonl.ts:4-12·serializeJsonLinepackages/coding-agent/src/modes/rpc/rpc-types.ts:20-73·RpcCommandpackages/coding-agent/src/modes/rpc/rpc-mode.ts:49-61·runRpcModepackages/coding-agent/src/modes/rpc/rpc-mode.ts:747-797·handleInputLinepackages/coding-agent/src/modes/print-mode.ts:104-117·getHeaderpackages/server/src/rpc-process.ts:50-61·getSpawnCommand
6.7 系统提示词与 Prompt Templates
packages/coding-agent/src/core/system-prompt.ts:8-25·BuildSystemPromptOptionspackages/coding-agent/src/core/system-prompt.ts:121-138·let promptpackages/coding-agent/src/core/system-prompt.ts:140-159·appendSectionpackages/coding-agent/src/core/system-prompt.ts:46-72·customPromptpackages/coding-agent/src/core/agent-session.ts:1021-1055·_rebuildSystemPromptpackages/coding-agent/src/core/resource-loader.ts:525-541·systemPromptSourcepackages/coding-agent/src/core/resource-loader.ts:53-68·resolvePromptInputpackages/coding-agent/src/core/prompt-templates.ts:104-133·loadTemplateFromFilepackages/coding-agent/src/core/prompt-templates.ts:269-285·expandPromptTemplatepackages/coding-agent/src/core/prompt-templates.ts:70-102·substituteArgs
6.2 Provider 与模型注册
packages/ai/src/models.ts:75-120·Providerpackages/ai/src/providers/cerebras.ts:6-15·cerebrasProviderpackages/ai/src/providers/all.ts:87-128·builtinProviderspackages/ai/src/providers/all.ts:131-137·builtinModelspackages/ai/src/models.generated.ts:42-118·MODELSpackages/ai/scripts/generate-models.ts:1081-1086·loadModelsDevDatapackages/ai/src/api/lazy.ts:68-75·lazyApipackages/coding-agent/src/core/model-resolver.ts:195-248·parseModelPatternpackages/ai/src/auth/helpers.ts:9-27·envApiKeyAuthpackages/coding-agent/src/core/model-runtime.ts:135-174·static async create
6.11 SDK:把 Pi 当作库使用
packages/coding-agent/src/core/sdk.ts:169-185·createAgentSessionpackages/coding-agent/src/core/sdk.ts:302-330·streamFnpackages/coding-agent/src/core/sdk.ts:376-398·new AgentSessionpackages/coding-agent/src/core/session-manager.ts:1567-1570·static inMemorypackages/coding-agent/src/core/session-manager.ts:1015-1016·_persistpackages/coding-agent/src/core/agent-session-runtime.ts:414-432·createAgentSessionRuntimepackages/coding-agent/src/index.ts:328-344packages/coding-agent/src/modes/rpc/rpc-client.ts:73-97·async startpackages/ai/src/providers/faux.ts:523-541·fauxProviderpackages/coding-agent/src/core/model-runtime.ts:541-548·registerNativeProvider
6.5 Session 存储格式与会话树
packages/agent/src/harness/types.ts:498-514·SessionStoragepackages/agent/src/harness/session/session.ts:219-227·appendMessagepackages/agent/src/harness/types.ts:528-538·SessionRepopackages/agent/src/harness/types.ts:453-464·SessionTreeEntrypackages/agent/src/harness/session/session.ts:338-358·moveTopackages/agent/src/harness/session/jsonl-storage.ts:350-369·getPathToRootOrCompactionpackages/agent/src/harness/session/jsonl-storage.ts:278-287·appendEntrypackages/agent/src/harness/session/jsonl-repo.ts:134-161·forkpackages/agent/src/harness/session/memory-storage.ts:43-62·InMemorySessionStoragepackages/storage/sqlite-node/src/sqlite/repo.ts:43-53·SqliteSessionRepo
6.8 配置系统
packages/coding-agent/src/config.ts:515-521·getAgentDirpackages/coding-agent/src/core/settings-manager.ts:188-197·FileSettingsStoragepackages/coding-agent/src/core/settings-manager.ts:83-129·export interface Settingspackages/coding-agent/src/core/settings-manager.ts:132-160·deepMergeSettingspackages/coding-agent/src/core/settings-manager.ts:350-366·loadFromStoragepackages/coding-agent/src/core/project-trust.ts:46-96·resolveProjectTrustedpackages/coding-agent/src/core/settings-manager.ts:578-607·persistScopedSettingspackages/coding-agent/src/main.ts:625-629·getSessionDirpackages/coding-agent/src/core/sdk.ts:224-236·getDefaultThinkingLevel
6.4 工具系统:定义、校验与执行
packages/ai/src/types.ts:480-485·Toolpackages/agent/src/types.ts:380-403·AgentToolpackages/coding-agent/src/core/extensions/types.ts:449-486·ToolDefinitionpackages/agent/src/agent-loop.ts:616-618·validateToolArgumentspackages/ai/src/utils/validation.ts:278-299·validateToolArgumentspackages/coding-agent/src/core/tools/index.ts:156-166·createAllToolDefinitionspackages/coding-agent/src/core/tools/read.ts:236-263·resolveReadPathAsyncpackages/coding-agent/src/core/tools/truncate.ts:168-213·truncateTailpackages/coding-agent/src/core/tools/output-accumulator.ts:91-119·snapshotpackages/coding-agent/src/core/tools/file-mutation-queue.ts:32-61·withFileMutationQueue
6.9 pi-tui:终端界面库
packages/tui/src/tui.ts:23-47·Componentpackages/tui/src/tui.ts:235-244·render(width: number): string[]packages/tui/src/TuiMainScreen.ts:260-287·firstChangedpackages/tui/src/tui.ts:730-771·requestRenderpackages/tui/src/TuiAltScreen.ts:121-135·afterTerminalStoppackages/coding-agent/src/modes/interactive/interactive-mode.ts:337-343·createInteractiveTuipackages/coding-agent/src/modes/interactive/interactive-mode.ts:735-746·setFocuspackages/coding-agent/src/modes/interactive/interactive-mode.ts:2960-2993·message_updatepackages/coding-agent/src/modes/interactive/components/assistant-message.ts:83-95·updateContentpackages/coding-agent/src/modes/interactive/components/footer.ts:84-104·render(width: number): string[]
4.3 monorepo 与 package 地图
package.json:5-13·workspacespackages/coding-agent/package.json:9-11·bin
4.1 Pi 是什么
pi-test.sh:57·tsx
4.4 从哪里开始读源码
packages/coding-agent/src/cli.ts:20·mainpackages/coding-agent/src/main.ts:521·export async function mainpackages/coding-agent/src/main.ts:109-120·resolveAppMode
5.6 取消与错误处理
packages/coding-agent/src/modes/interactive/interactive-mode.ts:2596-2622·onEscapepackages/agent/src/agent.ts:306-314·abortpackages/agent/src/agent-loop.ts:304-312·streamFunctionpackages/ai/src/api/anthropic-messages.ts:760-769·stopReasonpackages/agent/src/agent-loop.ts:196-200·stopReasonpackages/ai/src/api/transform-messages.ts:185-197·insertSyntheticToolResultspackages/ai/src/utils/provider-retry.ts:105-125·retryProviderRequestpackages/ai/src/utils/retry.ts:222-227·isRetryableAssistantErrorpackages/ai/src/utils/overflow.ts:132-160·isContextOverflowpackages/coding-agent/src/core/agent-session.ts:1075-1103·_handlePostAgentRun
5.5 Session 的创建、保存与恢复
packages/coding-agent/src/core/session-manager.ts:476-481·getDefaultSessionDirPathpackages/coding-agent/src/core/session-manager.ts:930-956·newSessionpackages/coding-agent/src/core/session-manager.ts:32-51·SessionEntryBasepackages/coding-agent/src/core/sdk.ts:362-374·agent.state.messagespackages/coding-agent/src/core/agent-session.ts:595-643·_handleAgentEventpackages/coding-agent/src/core/session-manager.ts:1015-1042·_persistpackages/agent/src/harness/agent-harness.ts:538-556·handleAgentEventpackages/coding-agent/src/core/session-manager.ts:1354-1374·branchpackages/coding-agent/src/core/session-manager.ts:958-977·_buildIndexpackages/coding-agent/src/main.ts:312-403·createSessionManager
5.2 一次普通请求的完整路径
packages/coding-agent/src/modes/interactive/interactive-mode.ts:936-945·getUserInputpackages/coding-agent/src/modes/interactive/interactive-mode.ts:2862-2872·onInputCallbackpackages/coding-agent/src/core/agent-session.ts:1114-1129·async promptpackages/coding-agent/src/core/agent-session.ts:1177-1195·hasConfiguredAuthpackages/coding-agent/src/core/agent-session.ts:1061-1073·_runAgentPromptpackages/agent/src/agent.ts:398-412·runPromptMessagespackages/agent/src/agent-loop.ts:170-200·hasMoreToolCallspackages/agent/src/agent-loop.ts:288-312·streamFunctionpackages/coding-agent/src/core/sdk.ts:294-312·streamFnpackages/coding-agent/src/core/agent-session.ts:594-622·_handleAgentEvent
5.1 启动:pi 命令如何跑起来
packages/coding-agent/src/cli.ts:1-20·mainpackages/coding-agent/src/main.ts:534-538·getAgentDirpackages/coding-agent/src/cli/args.ts:64-70·parseArgspackages/coding-agent/src/config.ts:514-521·getAgentDirpackages/coding-agent/src/core/settings-manager.ts:192-197·projectSettingsPathpackages/coding-agent/src/core/settings-manager.ts:350-353·loadFromStoragepackages/coding-agent/src/core/project-trust.ts:46-96·resolveProjectTrustedpackages/coding-agent/src/main.ts:312-320·createSessionManagerpackages/coding-agent/src/main.ts:685-690·createAgentSessionServicespackages/coding-agent/src/core/agent-session-runtime.ts:414-432·createAgentSessionRuntime
5.4 流式事件如何传播到界面
packages/ai/src/types.ts:501-513·AssistantMessageEventpackages/ai/src/api/anthropic-messages.ts:629-641·content_block_deltapackages/ai/src/utils/event-stream.ts:21-36·pushpackages/agent/src/types.ts:422-437·AgentEventpackages/agent/src/agent-loop.ts:317-344·message_updatepackages/agent/src/agent.ts:529-576·processEventspackages/coding-agent/src/core/agent-session.ts:139-181·AgentSessionEventpackages/coding-agent/src/core/agent-session.ts:595-622·_handleAgentEventpackages/coding-agent/src/modes/interactive/interactive-mode.ts:2960-2993·message_updatepackages/coding-agent/src/modes/print-mode.ts:104-117·writeRawStdout
5.3 一次 Tool Call 的完整循环
packages/ai/src/types.ts:360-366·ToolCallpackages/agent/src/agent-loop.ts:203-224·hasMoreToolCallspackages/agent/src/agent-loop.ts:381-406·failToolCallsFromTruncatedMessagepackages/agent/src/agent-loop.ts:411-426·executeToolCallspackages/agent/src/agent-loop.ts:600-664·prepareToolCallpackages/ai/src/utils/validation.ts:278-310·validateToolArgumentspackages/agent/src/agent-loop.ts:666-707·executePreparedToolCallpackages/coding-agent/src/core/tools/read.ts:203-243·createReadToolDefinitionpackages/coding-agent/src/core/tools/truncate.ts:78-119·truncateHeadpackages/agent/src/agent-loop.ts:773-792·createToolResultMessage
按 package 与文件
packages/agent
packages/agent/package.jsonpackages/agent/src/agent-loop.tsrunLoop→ 见 3.5 Agent 与 Agent LoopexecuteToolCalls→ 见 3.5 Agent 与 Agent LoopstopReason→ 见 8.5 取消与 Extension HookexecutePreparedToolCall→ 见 8.5 取消与 Extension HookfailToolCallsFromTruncatedMessage→ 见 8.3 Agent Loop 与工具执行shouldTerminateToolBatch→ 见 8.3 Agent Loop 与工具执行prepareToolCall→ 见 8.3 Agent Loop 与工具执行message_update→ 见 8.2 消息历史与流式事件hasMoreToolCalls→ 见 6.3 pi-agent-core:Agent 与循环getFollowUpMessages→ 见 6.3 pi-agent-core:Agent 与循环streamAssistantResponse→ 见 6.6 Context 构造与 CompactionvalidateToolArguments→ 见 6.4 工具系统:定义、校验与执行streamFunction→ 见 5.6 取消与错误处理createToolResultMessage→ 见 5.3 一次 Tool Call 的完整循环
packages/agent/src/agent.tsabort→ 见 2.7 事件、回调与取消(AbortController)Agent→ 见 2.4 泛型、class 与类型收窄runAgentLoop→ 见 1.4 模块系统:import 与 exportrunWithLifecycle→ 见 8.5 取消与 Extension HooktoolExecution→ 见 8.0 Mini Harness 总览与准备prompt→ 见 6.3 pi-agent-core:Agent 与循环getSteeringMessages→ 见 6.3 pi-agent-core:Agent 与循环getDefaultStreamFn→ 见 6.3 pi-agent-core:Agent 与循环runPromptMessages→ 见 5.2 一次普通请求的完整路径processEvents→ 见 5.4 流式事件如何传播到界面
packages/agent/src/harness/agent-harness.tsAgentHarness→ 见 3.6 Agent Harness、Session 与状态handleAgentEvent→ 见 3.6 Agent Harness、Session 与状态runAgentLoop→ 见 6.3 pi-agent-core:Agent 与循环nextTurn→ 见 6.3 pi-agent-core:Agent 与循环
packages/agent/src/harness/compaction/compaction.tsCompactionSettings→ 见 3.7 Compaction、Extension 与 SkillshouldCompact→ 见 3.7 Compaction、Extension 与 Skill
packages/agent/src/harness/env/nodejs.tstoFileError→ 见 2.9 错误处理与测试基础node:fs/promises→ 见 2.8 Node.js 文件、路径与进程 APIreadBinaryFile→ 见 2.8 Node.js 文件、路径与进程 API
packages/agent/src/harness/session/jsonl-repo.tsfork→ 见 6.5 Session 存储格式与会话树
packages/agent/src/harness/session/jsonl-storage.tsparseHeaderLine→ 见 8.4 Session 保存与恢复getPathToRootOrCompaction→ 见 6.5 Session 存储格式与会话树appendEntry→ 见 6.5 Session 存储格式与会话树
packages/agent/src/harness/session/memory-storage.tsInMemorySessionStorage→ 见 6.5 Session 存储格式与会话树
packages/agent/src/harness/session/session.tsSession→ 见 2.4 泛型、class 与类型收窄appendMessage→ 见 6.5 Session 存储格式与会话树moveTo→ 见 6.5 Session 存储格式与会话树
packages/agent/src/harness/tools/read.tsexecute→ 见 2.8 Node.js 文件、路径与进程 API
packages/agent/src/harness/types.tsSkill→ 见 3.7 Compaction、Extension 与 SkillFileError→ 见 2.9 错误处理与测试基础Result→ 见 2.4 泛型、class 与类型收窄toError→ 见 2.4 泛型、class 与类型收窄AgentHarnessOwnEvent→ 见 8.0 Mini Harness 总览与准备SessionStorage→ 见 6.5 Session 存储格式与会话树SessionRepo→ 见 6.5 Session 存储格式与会话树SessionTreeEntry→ 见 6.5 Session 存储格式与会话树
packages/agent/src/index.tsharness/agent-harness.ts→ 见 3.6 Agent Harness、Session 与状态
packages/agent/src/types.tsAgentEvent→ 见 3.5 Agent 与 Agent LoopAgentTool→ 见 2.2 interface、type 与函数类型ToolExecutionMode→ 见 2.2 interface、type 与函数类型StreamFn→ 见 8.1 最小 CLI 与 Fake Model
packages/ai
packages/ai/package.json@earendil-works/pi-ai→ 见 3.6 Agent Harness、Session 与状态
packages/ai/scripts/generate-models.tsloadModelsDevData→ 见 6.2 Provider 与模型注册
packages/ai/src/api/anthropic-messages.tsparseStreamingJson→ 见 3.3 流式输出(Streaming)iterateAnthropicEvents→ 见 2.6 异步迭代器与 for awaititerateSseMessages→ 见 8.6 接入真实模型(可选)input_json_delta→ 见 8.6 接入真实模型(可选)mapStopReason→ 见 8.6 接入真实模型(可选)stopReason→ 见 5.6 取消与错误处理content_block_delta→ 见 5.4 流式事件如何传播到界面
packages/ai/src/api/lazy.tslazyApi→ 见 6.2 Provider 与模型注册
packages/ai/src/api/transform-messages.tsinsertSyntheticToolResults→ 见 5.6 取消与错误处理
packages/ai/src/auth/helpers.tsenvApiKeyAuth→ 见 6.2 Provider 与模型注册
packages/ai/src/models.generated.tsMODELS→ 见 6.2 Provider 与模型注册
packages/ai/src/models.tsModels→ 见 6.1 pi-ai:统一的模型接口complete→ 见 6.1 pi-ai:统一的模型接口Provider→ 见 6.2 Provider 与模型注册
packages/ai/src/providers/all.tsbuiltinModels→ 见 6.1 pi-ai:统一的模型接口builtinProviders→ 见 6.2 Provider 与模型注册
packages/ai/src/providers/anthropic.tsanthropicApiKeyAuth→ 见 8.6 接入真实模型(可选)
packages/ai/src/providers/cerebras.tscerebrasProvider→ 见 6.2 Provider 与模型注册
packages/ai/src/providers/faux.tsfauxAssistantMessage→ 见 3.1 LLM 与模型 APIFauxResponseStep→ 见 8.1 最小 CLI 与 Fake Modelstream→ 见 8.1 最小 CLI 与 Fake ModelsplitStringByTokenSize→ 见 8.2 消息历史与流式事件fauxProvider→ 见 6.1 pi-ai:统一的模型接口
packages/ai/src/types.tsMessage→ 见 3.2 消息、上下文与 tokenContext→ 见 3.2 消息、上下文与 tokenAssistantMessageEvent→ 见 3.3 流式输出(Streaming)Tool→ 见 3.4 工具调用(Tool Calling)ToolCall→ 见 3.4 工具调用(Tool Calling)AssistantMessage→ 见 3.4 工具调用(Tool Calling)ToolResultMessage→ 见 3.4 工具调用(Tool Calling)ImageContent→ 见 2.1 类型入门:基本类型与对象Usage→ 见 2.1 类型入门:基本类型与对象TextContent→ 见 2.3 union、字面量与可辨识联合StreamFunction→ 见 8.2 消息历史与流式事件KnownApi→ 见 8.0 Mini Harness 总览与准备KnownProvider→ 见 8.0 Mini Harness 总览与准备
packages/ai/src/utils/abort-signals.tscombineAbortSignals→ 见 2.7 事件、回调与取消(AbortController)
packages/ai/src/utils/event-stream.tsEventStream→ 见 2.6 异步迭代器与 for awaitAssistantMessageEventStream→ 见 8.2 消息历史与流式事件push→ 见 5.4 流式事件如何传播到界面
packages/ai/src/utils/json-parse.tsparseStreamingJson→ 见 6.1 pi-ai:统一的模型接口
packages/ai/src/utils/overflow.tsisContextOverflow→ 见 6.6 Context 构造与 Compaction
packages/ai/src/utils/provider-retry.tsretryProviderRequest→ 见 5.6 取消与错误处理
packages/ai/src/utils/retry.tsisRetryableAssistantError→ 见 5.6 取消与错误处理
packages/ai/src/utils/validation.tsvalidateToolArguments→ 见 8.3 Agent Loop 与工具执行
packages/coding-agent
packages/coding-agent/examples/extensions/custom-provider-anthropic/index.tspi.registerProvider→ 见 7.4 自定义 Provider
packages/coding-agent/examples/extensions/pirate.tspirateExtension→ 见 7.1 Extension 系统
packages/coding-agent/package.json@earendil-works/pi-coding-agent→ 见 3.6 Agent Harness、Session 与状态dependencies→ 见 1.3 npm、package.json 与项目结构bin→ 见 1.3 npm、package.json 与项目结构
packages/coding-agent/src/cli.tsmain→ 见 4.4 从哪里开始读源码
packages/coding-agent/src/cli/args.tsparseArgs→ 见 5.1 启动:pi 命令如何跑起来
packages/coding-agent/src/config.tsgetAgentDir→ 见 6.8 配置系统
packages/coding-agent/src/core/agent-session-runtime.tsAgentSessionRuntime→ 见 6.10 交互模式与 RPC 模式createAgentSessionRuntime→ 见 6.11 SDK:把 Pi 当作库使用
packages/coding-agent/src/core/agent-session.tstoolRegistry→ 见 8.5 取消与 Extension HookappendMessage→ 见 8.4 Session 保存与恢复registerNativeProvider→ 见 7.4 自定义 Provider_refreshToolRegistry→ 见 7.3 自定义工具与斜杠命令_tryExecuteExtensionCommand→ 见 7.3 自定义工具与斜杠命令_installAgentToolHooks→ 见 7.1 Extension 系统_rebuildSystemPrompt→ 见 7.2 Skill 系统_expandSkillCommand→ 见 7.2 Skill 系统_checkCompaction→ 见 6.6 Context 构造与 Compaction_handlePostAgentRun→ 见 5.6 取消与错误处理_handleAgentEvent→ 见 5.5 Session 的创建、保存与恢复async prompt→ 见 5.2 一次普通请求的完整路径hasConfiguredAuth→ 见 5.2 一次普通请求的完整路径_runAgentPrompt→ 见 5.2 一次普通请求的完整路径AgentSessionEvent→ 见 5.4 流式事件如何传播到界面
packages/coding-agent/src/core/auth-storage.tsAuthStorage→ 见 8.6 接入真实模型(可选)
packages/coding-agent/src/core/compaction/compaction.tsshouldCompact→ 见 6.6 Context 构造与 CompactionprepareCompaction→ 见 6.6 Context 构造与 CompactionfindCutPoint→ 见 6.6 Context 构造与 CompactioncompleteSummarization→ 见 6.6 Context 构造与 Compaction
packages/coding-agent/src/core/event-bus.tscreateEventBus→ 见 8.5 取消与 Extension Hook
packages/coding-agent/src/core/extensions/loader.tsloadExtension→ 见 8.5 取消与 Extension HookloadExtensionModule→ 见 8.5 取消与 Extension HookregisterTool→ 见 8.5 取消与 Extension HookcreateExtensionRuntime→ 见 8.5 取消与 Extension HookregisterProvider→ 见 7.4 自定义 ProviderpendingProviderRegistrations→ 见 7.4 自定义 ProviderregisterCommand→ 见 7.3 自定义工具与斜杠命令discoverExtensionsInDir→ 见 7.1 Extension 系统createJiti→ 见 7.1 Extension 系统
packages/coding-agent/src/core/extensions/runner.tsemit→ 见 8.5 取消与 Extension HookpendingProviderRegistrations→ 见 7.4 自定义 ProvidergetAllRegisteredTools→ 见 7.3 自定义工具与斜杠命令RunnerEmitResult→ 见 7.1 Extension 系统
packages/coding-agent/src/core/extensions/types.tsExtension→ 见 3.7 Compaction、Extension 与 SkillExtensionFactory→ 见 8.5 取消与 Extension HookExtensionAPI→ 见 8.5 取消与 Extension HookregisterProvider→ 见 7.4 自定义 ProviderToolDefinition→ 见 7.3 自定义工具与斜杠命令
packages/coding-agent/src/core/extensions/wrapper.tswrapRegisteredTool→ 见 7.3 自定义工具与斜杠命令
packages/coding-agent/src/core/messages.tsconvertToLlm→ 见 6.6 Context 构造与 Compaction
packages/coding-agent/src/core/model-resolver.tsparseModelPattern→ 见 6.2 Provider 与模型注册
packages/coding-agent/src/core/model-runtime.tsregisterProvider→ 见 7.4 自定义 ProviderrecomposeProvider→ 见 7.4 自定义 Providerstatic async create→ 见 6.2 Provider 与模型注册registerNativeProvider→ 见 6.11 SDK:把 Pi 当作库使用
packages/coding-agent/src/core/package-manager.tsuserAgentsSkillsDir→ 见 7.2 Skill 系统dir === root→ 见 7.2 Skill 系统
packages/coding-agent/src/core/project-trust.tsresolveProjectTrusted→ 见 6.8 配置系统
packages/coding-agent/src/core/prompt-templates.tsloadTemplateFromFile→ 见 6.7 系统提示词与 Prompt TemplatesexpandPromptTemplate→ 见 6.7 系统提示词与 Prompt TemplatessubstituteArgs→ 见 6.7 系统提示词与 Prompt Templates
packages/coding-agent/src/core/provider-composer.tsstreamWith→ 见 7.4 自定义 Provider
packages/coding-agent/src/core/resource-loader.tsupdateSkillsFromPaths→ 见 7.2 Skill 系统systemPromptSource→ 见 6.7 系统提示词与 Prompt TemplatesresolvePromptInput→ 见 6.7 系统提示词与 Prompt Templates
packages/coding-agent/src/core/sdk.tsagent.state.messages→ 见 8.4 Session 保存与恢复createAgentSession→ 见 6.11 SDK:把 Pi 当作库使用streamFn→ 见 6.11 SDK:把 Pi 当作库使用new AgentSession→ 见 6.11 SDK:把 Pi 当作库使用getDefaultThinkingLevel→ 见 6.8 配置系统
packages/coding-agent/src/core/session-manager.tsSessionHeader→ 见 8.4 Session 保存与恢复SessionEntryBase→ 见 8.4 Session 保存与恢复SessionEntry→ 见 8.4 Session 保存与恢复_persist→ 见 8.4 Session 保存与恢复loadEntriesFromFile→ 见 8.4 Session 保存与恢复migrateToCurrentVersion→ 见 8.4 Session 保存与恢复findMostRecentSession→ 见 8.4 Session 保存与恢复continueRecent→ 见 8.4 Session 保存与恢复sessionEntryToContextMessages→ 见 6.6 Context 构造与 CompactionbuildContextEntries→ 见 6.6 Context 构造与 Compactionstatic inMemory→ 见 6.11 SDK:把 Pi 当作库使用getDefaultSessionDirPath→ 见 5.5 Session 的创建、保存与恢复newSession→ 见 5.5 Session 的创建、保存与恢复branch→ 见 5.5 Session 的创建、保存与恢复_buildIndex→ 见 5.5 Session 的创建、保存与恢复
packages/coding-agent/src/core/settings-manager.tspackages/coding-agent/src/core/skills.tsSkillFrontmatter→ 见 7.2 Skill 系统frontmatter.name || parentDirName→ 见 7.2 Skill 系统loadSkillsFromDir→ 见 7.2 Skill 系统formatSkillsForPrompt→ 见 7.2 Skill 系统
packages/coding-agent/src/core/slash-commands.tsBUILTIN_SLASH_COMMANDS→ 见 7.3 自定义工具与斜杠命令
packages/coding-agent/src/core/system-prompt.tsformatSkillsForPrompt(skills)→ 见 7.2 Skill 系统BuildSystemPromptOptions→ 见 6.7 系统提示词与 Prompt Templateslet prompt→ 见 6.7 系统提示词与 Prompt TemplatesappendSection→ 见 6.7 系统提示词与 Prompt TemplatescustomPrompt→ 见 6.7 系统提示词与 Prompt Templates
packages/coding-agent/src/core/tools/file-mutation-queue.tswithFileMutationQueue→ 见 6.4 工具系统:定义、校验与执行
packages/coding-agent/src/core/tools/index.tscreateAllToolDefinitions→ 见 6.4 工具系统:定义、校验与执行
packages/coding-agent/src/core/tools/output-accumulator.tssnapshot→ 见 6.4 工具系统:定义、校验与执行
packages/coding-agent/src/core/tools/read.tsresolveReadPathAsync→ 见 6.4 工具系统:定义、校验与执行createReadToolDefinition→ 见 5.3 一次 Tool Call 的完整循环
packages/coding-agent/src/core/tools/truncate.tstruncateTail→ 见 6.4 工具系统:定义、校验与执行truncateHead→ 见 5.3 一次 Tool Call 的完整循环
packages/coding-agent/src/core/tools/write.tsexecute→ 见 2.5 异步编程:Promise 与 async/await
packages/coding-agent/src/extensions/index.tsbuiltInExtensions→ 见 7.4 自定义 Provider
packages/coding-agent/src/index.tspackages/coding-agent/src/main.tspromptConfirm→ 见 8.1 最小 CLI 与 Fake ModelresolveAppMode→ 见 8.1 最小 CLI 与 Fake ModelcontinueRecent→ 见 8.4 Session 保存与恢复createAgentSessionRuntime→ 见 6.10 交互模式与 RPC 模式runRpcMode→ 见 6.10 交互模式与 RPC 模式getSessionDir→ 见 6.8 配置系统export async function main→ 见 4.4 从哪里开始读源码createSessionManager→ 见 5.5 Session 的创建、保存与恢复getAgentDir→ 见 5.1 启动:pi 命令如何跑起来createAgentSessionServices→ 见 5.1 启动:pi 命令如何跑起来
packages/coding-agent/src/modes/interactive/components/assistant-message.tsupdateContent→ 见 6.9 pi-tui:终端界面库
packages/coding-agent/src/modes/interactive/components/footer.tsrender(width: number): string[]→ 见 6.9 pi-tui:终端界面库
packages/coding-agent/src/modes/interactive/interactive-mode.tsinit→ 见 2.5 异步编程:Promise 与 async/awaitcreateBaseAutocompleteProvider→ 见 7.3 自定义工具与斜杠命令createInteractiveTui→ 见 6.9 pi-tui:终端界面库setFocus→ 见 6.9 pi-tui:终端界面库message_update→ 见 6.9 pi-tui:终端界面库onEscape→ 见 5.6 取消与错误处理getUserInput→ 见 5.2 一次普通请求的完整路径onInputCallback→ 见 5.2 一次普通请求的完整路径
packages/coding-agent/src/modes/print-mode.tsgetHeader→ 见 6.10 交互模式与 RPC 模式writeRawStdout→ 见 5.4 流式事件如何传播到界面
packages/coding-agent/src/modes/rpc/jsonl.tsserializeJsonLine→ 见 6.10 交互模式与 RPC 模式
packages/coding-agent/src/modes/rpc/rpc-client.tsasync start→ 见 6.11 SDK:把 Pi 当作库使用
packages/coding-agent/src/modes/rpc/rpc-mode.tsrunRpcMode→ 见 6.10 交互模式与 RPC 模式handleInputLine→ 见 6.10 交互模式与 RPC 模式
packages/coding-agent/src/modes/rpc/rpc-types.tsRpcCommand→ 见 6.10 交互模式与 RPC 模式
packages/coding-agent/test/agent-session-runtime-events.test.tscreateRuntimeHost→ 见 3.1 LLM 与模型 API
packages/coding-agent/test/path-utils.test.tsexpandPath→ 见 2.9 错误处理与测试基础
packages/server
packages/server/src/rpc-process.tsgetSpawnCommand→ 见 6.10 交互模式与 RPC 模式
packages/storage/sqlite-node
packages/storage/sqlite-node/src/sqlite/repo.tsSqliteSessionRepo→ 见 6.5 Session 存储格式与会话树
packages/tui
packages/tui/src/TuiAltScreen.tsafterTerminalStop→ 见 6.9 pi-tui:终端界面库
packages/tui/src/TuiMainScreen.tsfirstChanged→ 见 6.9 pi-tui:终端界面库
packages/tui/src/tui.tsComponent→ 见 6.9 pi-tui:终端界面库render(width: number): string[]→ 见 6.9 pi-tui:终端界面库requestRender→ 见 6.9 pi-tui:终端界面库
(仓库根目录)
package.jsontsx→ 见 1.2 运行第一个 TypeScript 程序workspaces→ 见 1.3 npm、package.json 与项目结构engines→ 见 1.1 JavaScript、TypeScript 与 Node.js
pi-test.shtsx→ 见 1.2 运行第一个 TypeScript 程序
tsconfig.base.jsonallowImportingTsExtensions→ 见 1.4 模块系统:import 与 export