TaiChu 细粒度代码架构 v7 · SSP1-0

鸿蒙多设备AI助手"小艺" · 代码架构/实体关系/工作流(用户↔系统)/数据流 · 源 00_code_structure.md

一、代码架构图(模块×层)

graph TD APP["apps/ taichu-cli · phone-ui"] --> RT["taichu-core-sdk/runtime.rs<br/>Runtime / SessionManager"] RT --> SESS["L3 agent-session/session.rs<br/>AgentSession(编排:工具注册/重试/压缩)"] SESS --> PB["L2.5 agent-framework<br/>prompt_builder.rs · tool_assembly.rs · system_prompt.rs · model.rs · auth.rs"] PB --> AG["L2 agent-loop/agent.rs<br/>Agent(状态机:state/steering/follow_up/cancel)"] AG --> LOOP["L1 agent-loop/agent_loop.rs<br/>run_loop 双循环(无状态)"] LOOP --> LLM["llm-provider<br/>provider.rs(OpenAI/AS-gateway compat) · event_stream.rs"] LOOP --> TOOLS["BoxAgentTool 执行<br/>before/after hook · steering poll"] TOOLS --> SK["skills/system/* 15技能<br/>exec_os_api · exec_cli(bm/aa/ohos-*)"] SESS --> SUB["subagent/ · cloud-collab/<br/>SubagentRunner · RelayClient · listener/presence"] PB --> MEM["plugins/context_engine/jiuwen/lcm<br/>SQLite/file · 树形摘要RAG · compaction"] SESS --> STORE["services/java<br/>session-store · workspace-store"] TOOLS --> ENV["L6 设备/系统环境<br/>exec无沙箱 · 各App数据"]

二、实体对象关系图(本体论映射)

graph LR Agent["Agent(agent.rs:118)"] -->|持有| State["AgentState<br/>system_prompt/messages/tools"] Agent -->|run_loop| Loop["run_loop(agent_loop.rs:149)"] Loop -->|stream| Provider["LLM Provider(GLM compat)"] Loop -->|execute_tool_calls:665| Tool["AgentTool(trait)"] Tool -.子类.-> ExecOS["exec_os_api / exec_cli"] Tool -.子类.-> PCS["PCS/searchMessage/searchGallery"] PB["LocalFsPromptBuilder:36"] -->|build_system_prompt:74| Slots["槽位:IDENTITY/SOUL/USER/MEMORY/AGENTS/TOOLS/skills"] Slots -.不可信源.-> PCS Slots -.持久化注入.-> MEM["MEMORY.md / LCM摘要"] SecHook["SessionToolHook(默认无拦截!)"] -.before/after.-> Tool Sub["SubagentRunner"] -->|relay| Mailbox["mailbox(无per-msg鉴权!)"]

三、工作流图(用户视角 vs 系统视角)

sequenceDiagram participant U as 用户 participant A as Agent(L2) participant L as run_loop(L1) participant M as LLM participant T as Tool/设备 U->>A: prompt("关闭蓝牙") agent.rs:501 A->>L: run_loop(UserMsg) L->>L: ①ASSEMBLING 组装system_prompt(注入落点) :348 L->>M: ②stream_assistant_response :204 M-->>L: tool_calls L->>L: ③execute_tool_calls :665 Note over L: SkillLoad门控→validate(JSON Schema)→before_hook(默认放行) L->>T: ④tool.execute :1292 (exec_cli) T-->>L: 返回(拼进ctx.messages=注入面) L->>L: ⑤steering/follow_up · ⚠SAFETY_VALIDATE缺失 L-->>A: AgentEnd A-->>U: 结果

四、数据流图(信任域 + 注入面)

flowchart LR subgraph 不可信源 PCS_R["PCS/searchMessage返回"]:::u MEMmd["MEMORY.md/LCM摘要"]:::u RELAY["cloud relay消息(弱鉴权)"]:::u USERIN["用户输入(半可信)"]:::s end PCS_R --> CTX["ctx.messages / system_prompt<br/>(无sanitize直接拼接)"]:::u MEMmd --> CTX RELAY --> CTX USERIN --> CTX CTX --> LLM["LLM(GLM 内生安全对齐:敏感操作提醒)"]:::g LLM --> SINK["Sink: exec_os_api/exec_cli/sendSMS/cron"]:::r SINK --> ENV["设备/各App数据 + 华为云内网"]:::r SINK -.SaveMemory.-> MEMmd classDef u fill:#3a1212,stroke:#f87171,color:#fca5a5 classDef s fill:#2a2410,stroke:#d29922,color:#fcd34d classDef g fill:#0a2010,stroke:#34d399,color:#6ee7b7 classDef r fill:#1a0d12,stroke:#a855f7,color:#d8b4fe

关键锚点 & 安全要点

- AgentLoop 双循环:`agent-loop/agent_loop.rs:149`(run_loop)、`:204`(stream)、`:665`(execute_tool_calls)、`:1292`(tool.execute)
- 提示词组装:`agent-session/system_prompt.rs:74`(build_system_prompt)、`agent-framework/prompt_builder.rs:36`
- 安全 hook(默认无拦截):`agent-session/session_tool_hook.rs:30`
- SSRF 防护:`builtintools/web/url_guard.rs:10`
- 模型/凭证:`agent-framework/model.rs:17`(ModelPolicy)、`.taichu.json`(api_key明文)、`llm-router/src/auth.rs:57`(jwt默认secret)
- cloud-collab mailbox(弱鉴权):`cloud-collab-relay-transport/src/client.rs:326`(listen)
- LCM 树形RAG:`plugins/context_engine/jiuwen/src/lcm/recall/expand.rs`

## 安全要点(驱动后续提问 + AP 设计)
1. **无 SAFETY_VALIDATE**:仅工具参数 JSON Schema 校验 + url_guard SSRF;无系统性安全检查;SessionToolHook 默认放行。
2. **exec 无沙箱**:exec_os_api/exec_cli 直达 host;CodeExec 开放执行=多Sink网关。
3. **注入面**:工具返回(PCS/searchMessage)直接拼 ctx;MEMORY.md/LCM 持久化注入;cloud relay 弱鉴权。
4. **凭证明文**:.taichu.json api_key、jwt 默认 secret。
5. **跨设备**:cloud-collab mailbox 无 per-msg 鉴权→越权读指令(对应 InfraCompromise 危害方向)。