# https://github.com/cristian1991/AIDOCS 项目说明书

生成时间：2026-05-11 23:38:40 UTC

## 目录

- [项目概览](#project-overview)
- [系统架构](#system-architecture)
- [持久化记忆系统](#persistent-memory)
- [Conductor调度系统](#conductor-system)
- [安全门控系统](#security-gates)
- [数据存储与索引](#data-storage)
- [MCP运行时](#mcp-runtime)
- [MCP工具集](#mcp-tools)
- [仪表盘前端](#dashboard-overview)
- [宿主代理集成](#host-integration)

<a id='project-overview'></a>

## 项目概览

### 相关页面

相关主题：[系统架构](#system-architecture)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [README.md](https://github.com/cristian1991/AIDOCS/blob/main/README.md)
- [README_INSTALL.md](https://github.com/cristian1991/AIDOCS/blob/main/README_INSTALL.md)
- [PUBLIC_ROADMAP.md](https://github.com/cristian1991/AIDOCS/blob/main/PUBLIC_ROADMAP.md)
- [SetupWizardPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/SetupWizardPage.tsx)
- [OverviewPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/OverviewPage.tsx)
- [CastleShell.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/CastleShell.tsx)
</details>

# 项目概览

## 简介

AIDOCS 是一个面向 AI 编码代理的持久化记忆与编排平台。它为 AI 代理提供持久化记忆、索引检索和任务编排功能，使代理能够从中断处恢复工作，而无需每次重新探索代码仓库。资料来源：[README.md:1]()

## 核心功能

### 主要特性

| 功能模块 | 说明 |
|---------|------|
| 持久化记忆 | 为 AI 代理存储上下文信息，支持跨会话恢复 |
| 索引检索 | 对项目代码和文档建立索引，支持快速查询 |
| 任务编排 | 管理代理执行流程，协调多个工具调用 |
| MCP 集成 | 支持 Model Context Protocol 连接外部工具 |
| RBAC 权限控制 | 基于角色的访问控制，管理代理权限 |
| 技能管理 | 管理可用的 AI 技能（Skills） |

资料来源：[README.md:1-5]()

## 系统架构

### 整体架构图

```mermaid
graph TD
    subgraph 前端层
        A[AIDOCS Dashboard]
    end
    
    subgraph MCP 服务层
        B[MCP Server]
        C[output_guard]
    end
    
    subgraph 核心功能
        D[Conductor]
        E[Execution Engine]
        F[Skills Registry]
    end
    
    subgraph 数据层
        G[上下文存储]
        H[执行快照]
    end
    
    A -->|Tauri IPC| B
    B --> C
    B --> D
    D --> E
    E --> F
    E --> G
    E --> H
```

### Dashboard 应用结构

Dashboard 是一个基于 React 和 Tauri 构建的桌面应用，提供图形化界面。资料来源：[index.html:1-9]()

```mermaid
graph TD
    subgraph Shell 容器
        A[CastleShell]
        B[Navigation]
        C[StatusBar]
    end
    
    subgraph 主要页面
        D[OverviewPage]
        E[ExecutionPage]
        F[ConductorPage]
        G[RBACPage]
        H[SkillsPage]
        I[RegistryPage]
        J[MonitoringPage]
        K[TomlConfigsPage]
        L[SetupWizardPage]
    end
    
    A --> B
    A --> C
    A --> D
    A --> E
    A --> F
    A --> G
    A --> H
    A --> I
    A --> J
    A --> K
    A --> L
```

## 页面功能详解

### 概览页面 (OverviewPage)

概览页面展示当前会话的核心信息，包括执行快照和上下文预算状态。资料来源：[OverviewPage.tsx:1-50]()

| 组件 | 说明 |
|-----|------|
| 会话摘要 | 显示状态、目标和所有者信息 |
| 上下文预算 | 显示令牌估算、条目数量，支持上下文压缩 |
| 最近执行 | 展示最近 6 条执行事件记录 |

**上下文预算管理：**

```typescript
interface ContextBudget {
    status?: string;
    reason?: string;
    estimated_tokens?: number;
    journal_entries?: number;
    available?: boolean;
}
```

资料来源：[OverviewPage.tsx:30-35]()

### 设置向导页面 (SetupWizardPage)

设置向导引导用户完成项目初始化配置流程，包含以下步骤：资料来源：[SetupWizardPage.tsx:1-100]()

```mermaid
stateDiagram-v2
    [*] --> Welcome
    Welcome --> Project: 选择项目路径
    Project --> Environment: 检测环境
    Environment --> Configure: 环境就绪
    Configure --> Done: 配置完成
    Done --> [*]
```

| 步骤 | 说明 |
|-----|------|
| Welcome | 欢迎页面，介绍 AIDOCS 功能 |
| Project | 选择启用 AIDOCS 的项目文件夹 |
| Environment | 检测 Node.js、Claude CLI 等依赖 |
| Configure | 配置 MCP、hooks 和项目结构 |
| Done | 显示配置结果清单 |

**环境检测结果：**

```typescript
interface DetectResult {
    node: { found: boolean };
    hosts: Array<{
        name: string;
        found: boolean;
        authenticated?: boolean;
        path?: string;
        installable?: boolean;
    }>;
}
```

资料来源：[SetupWizardPage.tsx:50-80]()

### 执行页面 (ExecutionPage)

执行页面记录和展示工具调用的详细信息，包括路由审计和执行状态。资料来源：[ExecutionPage.tsx:1-60]()

**事件详情面板：**

| 字段 | 说明 |
|-----|------|
| Session | 所属会话 ID |
| Observed | 观察时间戳 |
| Lane | 执行通道 |
| Routing | 路由模式（logical/native/fallback） |
| Arguments | 调用参数预览 |
| Result | 执行结果摘要 |

**路由审计信息：**

```typescript
interface RoutingAudit {
    logicalMode?: string;
    nativeMode?: string;
    fallbackUsed?: boolean;
    visible: boolean;
}
```

资料来源：[ConductorPage.tsx:20-30]()

### 权限控制页面 (RBACPage)

RBAC 页面提供基于角色的访问控制管理功能。资料来源：[RBACPage.tsx:1-100]()

| 标签页 | 说明 |
|-------|------|
| Roles | 角色定义（system/custom） |
| Permissions | 权限清单和描述 |
| Escalations | 权限升级记录 |

**权限升级记录字段：**

- requester：请求者
- permission：权限名称
- phrase：触发短语
- session/task：关联会话或任务
- sticky：是否持久化
- created · expires：创建和过期时间

### 技能页面 (SkillsPage)

技能页面管理和展示可用的 AI 技能列表。资料来源：[SkillsPage.tsx:1-80]()

**技能属性：**

| 属性 | 说明 |
|-----|------|
| name | 技能名称 |
| description | 技能描述 |
| skill_kind | 技能类型 |
| provider | 提供者 |
| source | 来源 |
| selected | 是否被选中 |
| active | 是否激活 |
| activation_tags | 激活标签 |
| provider_status | 提供者状态 |

### TOML 配置页面 (TomlConfigsPage)

TOML 配置页面管理项目配置文件，支持分类查看。资料来源：[TomlConfigsPage.tsx:1-80]()

| 配置分类 | 说明 |
|---------|------|
| gate_messages | 消息门控配置 |
| action_hooks | 动作钩子配置 |
| language_descriptors | 语言描述符配置 |

**配置文档属性：**

| 属性 | 说明 |
|-----|------|
| target | 配置目标 |
| active | 是否激活 |
| context | 关联上下文 |

### 监控页面 (MonitoringPage)

监控页面展示系统事件统计信息，按事件类型和来源分类。资料来源：[MonitoringPage.tsx:1-50]()

| 统计维度 | 说明 |
|---------|------|
| By Event Kind | 按事件类型统计 |
| By Source | 按事件来源统计 |

## 安全机制

### 输出守卫 (output_guard)

MCP 服务层包含 `output_guard.py` 模块，用于检测和防护提示注入攻击。资料来源：[output_guard.py:1-50]()

**检测的威胁模式：**

| 类别 | 模式 | 说明 |
|-----|------|------|
| system_override | ignore/forget previous instructions | 系统指令覆盖尝试 |
| role_hijack | you are now a different AI | 角色劫持尝试 |
| instruction_inject | XML 标签注入 | `<system>` 等标签注入 |
| delimiter_escape | 代码块指令注入 | ```system 语法 |
| hidden_instruction | IMPORTANT: ignore/override | 隐藏指令注入 |

**敏感内容检测：**

| 模式 | 正则表达式 | 说明 |
|-----|----------|------|
| env_file_content | `^[A-Z_]{3,}=\S{8,}$` | .env 文件内容泄露 |
| ssh_config | Host/IdentityFile | SSH 配置内容 |

## Shell 布局组件

CastleShell 是应用的主容器组件，整合导航、状态栏和页面内容。资料来源：[CastleShell.tsx:1-100]()

```mermaid
graph TD
    subgraph CastleShell
        A[Navigation Sidebar]
        B[Top Strip]
        C[Main Content Area]
        D[Context Rail]
        E[Status Bar]
    end
    
    subgraph Navigation Items
        A -->|NavKey| O[Overview]
        A --> E[Execution]
        A --> C[Conductor]
        A --> R[RBAC]
        A --> S[Skills]
        A --> M[Registry]
        A --> M2[Monitoring]
        A --> T[TomlConfigs]
    end
```

**状态栏信息：**

| 属性 | 说明 |
|-----|------|
| mcpConnected | MCP 连接状态 |
| projectName | 项目名称 |
| sessionId | 会话 ID |
| activeLayer | 当前活动层 |
| saveState | 保存状态 |

**版本信息显示：**

```tsx
{version && (
    <div className="mx-3 mb-3 rounded-xl border border-castle-line bg-black/25 px-3 py-2">
        <div className="text-[9px] font-bold uppercase tracking-widest text-castle-mute">
            Version
        </div>
        <div className="mt-0.5 font-mono text-xs text-slate-300">{version}</div>
    </div>
)}
```

资料来源：[CastleShell.tsx:20-35]()

## 数据模型

### 执行事件 (ExecutionEvent)

执行事件是系统的核心数据单元，记录每次工具调用的详细信息。资料来源：[OverviewPage.tsx:15-25]()

```typescript
interface ExecutionEvent {
    event_id: string;
    capability_name?: string;
    event_kind: string;
    action_kind?: string;
    observed_at: string;
    status?: string;
    session_id?: string;
    payload?: Record<string, unknown>;
}
```

### 会话快照 (SessionSnapshot)

会话快照包含会话的完整上下文信息。资料来源：[OverviewPage.tsx:20-35]()

```typescript
interface SessionSnapshot {
    overview: {
        status: string;
        goal: string;
        owner: string;
    };
    execution: {
        recent: ExecutionEvent[];
    };
}
```

### 通道事件 (LaneEvent)

通道事件记录与特定执行通道相关的活动。资料来源：[LaneDetailPanel.tsx:1-50]()

| 字段 | 说明 |
|-----|------|
| event_id | 事件唯一标识 |
| observed_at | 观察时间 |
| capability_name | 能力名称 |
| action_kind | 动作类型 |
| status | 状态（applied/allowed/refused/blocked） |

## 安装与部署

### 前提条件

| 依赖项 | 说明 |
|-------|------|
| Node.js | CLI 代理运行环境（可选） |
| Claude CLI | Anthropic Claude 客户端 |
| Python 3.10+ | MCP 服务器运行环境 |

资料来源：[SetupWizardPage.tsx:60-70]()

### 安装命令

AIDOCS 支持通过 pip 安装 MCP 服务器组件。资料来源：[README_INSTALL.md:1-20]()

### 连接配置

Dashboard 与 MCP 服务器通过 Tauri IPC 通信，状态栏实时显示连接状态。资料来源：[CastleShell.tsx:50-70]()

## 路线图

AIDOCS 的公开路线图记录了项目的未来规划。资料来源：[PUBLIC_ROADMAP.md:1-50]()

| 阶段 | 主要目标 |
|-----|---------|
| 当前版本 | 核心功能实现与稳定 |
| 短期目标 | 性能优化和用户体验改进 |
| 长期目标 | 扩展集成和多代理协作 |

## 总结

AIDOCS 为 AI 编码代理提供了完整的上下文管理解决方案。通过持久化记忆、索引检索、执行监控和权限控制等核心功能，它使 AI 代理能够在复杂项目中保持连贯的工作状态。Dashboard 应用提供了直观的图形化界面，让用户能够轻松管理会话、查看执行历史、配置权限和监控系统运行状态。资料来源：[README.md:1-5]()

---

<a id='system-architecture'></a>

## 系统架构

### 相关页面

相关主题：[MCP运行时](#mcp-runtime), [仪表盘前端](#dashboard-overview), [项目概览](#project-overview)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [mcp/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/README.md)
- [mcp/server/aidocs_mcp/claude_hook.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/claude_hook.py)
- [mcp/server/METHODS.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/METHODS.md)
- [mcp/server/aidocs_mcp/server_code_edit_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_code_edit_tools.py)
- [mcp/server/aidocs_mcp/server_code_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_code_tools.py)
- [README.md](https://github.com/cristian1991/AIDOCS/blob/main/README.md)
- [apps/aidocs-dashboard/src/CastleShell.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/CastleShell.tsx)
</details>

# 系统架构

AIDOCS 是一个为 AI 编码代理提供持久化记忆、索引检索和编排能力的开发工具系统。本页面详细阐述其整体架构、核心组件及其交互方式。

---

## 1. 整体架构概览

AIDOCS 采用分层架构设计，核心分为三个主要部分：**MCP 服务器层**、**记忆存储层**、**仪表盘应用层**。

```mermaid
graph TD
    subgraph IDE["IDE / 终端"]
        A[AI 编码代理]
    end
    
    subgraph MCP["MCP 服务器层"]
        B[MCP Server]
        C[Gate 架构]
        D[Tool Handlers]
    end
    
    subgraph Memory["记忆存储层"]
        E[.MEMORY/ 目录]
        F[SQLite 索引]
        G[aidocs.toml]
    end
    
    subgraph Dashboard["仪表盘层"]
        H[React 前端]
        I[Tauri 后端]
    end
    
    A -->|MCP Protocol| B
    B -->|验证/路由| C
    B -->|执行工具| D
    D -->|读写| Memory
    H <-->|IPC| I
    I -->|状态同步| B
```

**资料来源**：[mcp/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/README.md)

---

## 2. 项目目录结构

```
aidocs-mcp/
├── aidocs.toml                  # 运行时配置（静态定义）
├── action_tokens/               # 提示词分类语言文件
│
├── core/                        # 核心运行时
│   ├── .commands/               # 斜杠命令定义
│   ├── hooks/                   # Hook 定义
│   ├── plugins/                 # IDE 插件
│   └── scripts/                 # 安装脚本
│
├── mcp/                         # MCP 服务器
│   └── server/aidocs_mcp/       # Python 服务模块
│       ├── mcp_server.py        # MCP 服务入口
│       ├── service_hub.py       # 服务中枢
│       ├── server_code_tools.py # 代码工具集
│       ├── server_code_edit_tools.py # 编辑工具集
│       ├── claude_hook.py       # Claude Hook 逻辑
│       ├── skill_scanner.py     # 技能扫描器
│       └── tests/               # 1308 个测试
│
└── apps/aidocs-dashboard/       # 仪表盘应用
    ├── src/                     # React 前端
    └── src-tauri/               # Rust 后端
```

**资料来源**：[README.md](https://github.com/cristian1991/AIDOCS/blob/main/README.md)

---

## 3. 核心组件详解

### 3.1 MCP 服务器

MCP 服务器是系统的核心引擎，负责处理来自 AI 代理的所有请求。它包含以下子模块：

| 模块 | 职责 | 主要文件 |
|------|------|----------|
| **mcp_server.py** | MCP 协议入口，请求路由 | 服务主入口 |
| **service_hub.py** | 服务协调与依赖注入 | 服务中枢 |
| **server_code_tools.py** | 代码查询工具实现 | 代码检索工具 |
| **server_code_edit_tools.py** | 代码编辑工具实现 | 编辑操作工具 |
| **claude_hook.py** | AI 行为引导与指令 | 行为指令定义 |
| **skill_scanner.py** | 风险模式识别 | 安全扫描 |

```mermaid
graph LR
    subgraph MCP_Server
        A[mcp_server.py] --> B[service_hub.py]
        B --> C[server_code_tools.py]
        B --> D[server_code_edit_tools.py]
        B --> E[claude_hook.py]
        B --> F[skill_scanner.py]
    end
    
    G[AI Agent] -->|MCP Protocol| A
    A -->|Gate Check| H[Gate Architecture]
    H -->|通过| C
    H -->|通过| D
```

**资料来源**：[mcp/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/README.md)

### 3.2 服务中枢 (Service Hub)

`service_hub.py` 是系统的核心协调器，负责管理所有服务的生命周期和依赖关系。它提供了统一的接口来访问各种功能模块。

**资料来源**：[mcp/server/aidocs_mcp/service_hub.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/service_hub.py)

### 3.3 记忆模型

AIDOCS 在项目内部创建 `.MEMORY/` 目录作为持久化记忆存储：

```
/.MEMORY/
  .aidocs/
    index.aidocs       # 会话启动路由
```

记忆系统采用**文件作为唯一事实来源**的设计原则：
- MCP 读取、验证并写入现有 AIDOCS 文件
- 不创建第二套规范记忆存储
- MCP 是可选组件；Markdown 系统可独立工作
- 索引是项目级别的；会话引导检索而非索引范围
- SQLite 索引是派生数据，可从文件重建

**资料来源**：[mcp/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/README.md)

---

## 4. Gate 架构（安全门控）

AIDOCS 实现了**6 级级联门控系统**，按优先级顺序检查，第一个匹配项生效：

```mermaid
graph TD
    A[工具请求] --> B{Level 1: 托管模式?}
    B -->|托管模式| B1[阻止原始文件工具]
    B -->|非托管| C{Level 2: 基础设施?}
    C -->|基础设施文件| C1[阻止]
    C -->|其他| D{Level 3: 敏感文件?}
    D -->|.env/凭证| D1[阻止]
    D -->|其他| E{Level 4: 记忆路径?}
    E -->|写入操作| E1[意图门控]
    E -->|读取操作| F{Level 5: 读取门控}
    F -->|已发现| F1[允许]
    F -->|未发现| G{Level 6: 编辑门控}
    G -->|有前置读取| G1[允许]
    G -->|无前置读取| G2[阻止]
```

### Gate 级别详情

| 级别 | 门控名称 | 动作 |
|------|----------|------|
| 1 | 托管模式 | 当处于托管模式时阻止原始文件工具 |
| 2 | 基础设施 | 阻止对 aidocs.toml、aidocs_mcp/* 的写入 |
| 3 | 敏感文件 | 阻止 .env、凭证、密钥文件 |
| 4 | 记忆路径 | .MEMORY/ 读取自由，编写操作需意图门控 |
| 5 | 读取门控 | 按文件发现，允许已知精确路径绕过 |
| 6 | 编辑门控 | 需要前置读取/发现记录 |

**资料来源**：[mcp/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/README.md)

---

## 5. 工具集架构

### 5.1 代码查询工具

`server_code_tools.py` 提供了丰富的代码检索能力：

| 工具名称 | 用途 | 输出 |
|----------|------|------|
| `code_get_file_bundle` | 获取文件及依赖 | 文件内容、热区分析、依赖 |
| `code_get_component_tree` | 获取组件导入树 | 导入节点和边 |
| `code_get_style_bundle` | 获取 CSS 匹配 | 类名、选择器、文件位置 |
| `code_get_session_bundle` | 获取会话关联代码 | 会话上下文文件包 |
| `code_get_context_bundle` | 获取上下文引导包 | 排序后的代码项 |
| `code_find_symbols` | 查找数据结构和类型 | 符号、种类、行号 |
| `code_find_frontend_symbols` | 查找前端符号 | 组件、钩子、函数 |
| `code_get_symbol_snippet` | 获取符号代码片段 | 精确代码片段 |
| `code_get_symbol_bundle` | 获取符号完整包 | 定义、引用、依赖 |

**资料来源**：[mcp/server/METHODS.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/METHODS.md)

### 5.2 代码编辑工具

`server_code_edit_tools.py` 实现了受控的编辑操作：

| 工具名称 | 用途 | 特点 |
|----------|------|------|
| `code_str_replace` | 字符串替换编辑 | 精确匹配，支持 replace_all |
| `code_edit_lines` | 行范围重写 | 处理重叠区域 |
| `code_batch_edit` | 批量原子编辑 | 最多 20 个操作/次 |
| `code_create_file` | 创建新文件 | 路径验证和索引更新 |
| `code_insert_blocks` | 块级插入 | 位置感知插入 |

**关键约束**：
- 同一回合内对同一文件进行顺序行编辑会导致行号损坏
- 系统强制要求使用 `code_batch_edit` 或确保非重叠操作
- 托管模式下不允许使用原始 Edit 工具

**资料来源**：[mcp/server/aidocs_mcp/server_code_edit_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_code_edit_tools.py)

---

## 6. AI 行为引导系统

`claude_hook.py` 定义了 AI 代理的行为指令，引导其正确使用 AIDOCS 工具：

### 6.1 动作指令表

| 动作类型 | 指令描述 |
|----------|----------|
| `understand` | 检索工具：`aidocs_bundle` → `aidocs_find` → `aidocs_get_symbol_snippet` |
| `investigate` | 调查工具：已知符号→`aidocs_find`，概念搜索→`aidocs_investigate`，文件架构→`aidocs_bundle` |
| `edit` | 编辑流程：`aidocs_task_begin` → 读取 → 写入 → `aidocs_task_complete` |
| `ai_bundle` | 包检索：`aidocs_bundle(mode="context")` 或 `mode="file"` |
| `read` | 读取：精确路径→直接读取，概念→`aidocs_bundle`，数据库→`aidocs_schema_query` |

**资料来源**：[mcp/server/aidocs_mcp/claude_hook.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/claude_hook.py)

### 6.2 执行提示词

```javascript
// 来自 opencode_plugin.js
function buildAidocsExecutionPrompt() {
  return [
    "Execute the `/aidocs` entry flow now for the current project.",
    "Use the `aidocs` MCP server first when available.",
    "Call the MCP orchestrator entry flow for this project.",
    "If setup is required, initialize AIDOCS first and then continue bootstrap.",
    "If multiple plausible sessions exist, STOP and ask the user which session to bind.",
    "Keep the default user-facing output terse and prefer the top-level `report` field when present.",
    "Report: setup required or not, index sync status, selected session...",
    "Do not broad-read the repo before AIDOCS bootstrap and session selection complete...",
  ].join(" ")
}
```

**资料来源**：[mcp/server/aidocs_mcp/data/opencode_plugin.js](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/data/opencode_plugin.js)

---

## 7. 仪表盘架构

仪表盘应用采用 **Tauri** 框架构建，结合 React 前端和 Rust 后端：

```mermaid
graph LR
    subgraph Frontend["React 前端 (TypeScript)"]
        A[CastleShell.tsx]
        B[SetupWizardPage.tsx]
        C[RegistryPage.tsx]
        D[TomlConfigsPage.tsx]
        E[SettingDetailPanel.tsx]
    end
    
    subgraph Backend["Rust 后端 (Tauri)"]
        F[Tauri IPC]
    end
    
    subgraph State["状态管理"]
        G[dashboardModals.tsx]
        H[LoadingOverlay]
    end
    
    A -->|导航| B
    A -->|导航| C
    A -->|导航| D
    A -->|设置详情| E
    A -->|模态框| G
    A -->|加载状态| H
    A -->|IPC| F
```

### 7.1 核心页面组件

| 组件 | 职责 |
|------|------|
| `CastleShell.tsx` | 主外壳，导航栏，状态栏 |
| `SetupWizardPage.tsx` | 初始化向导（欢迎→项目选择→配置→完成） |
| `RegistryPage.tsx` | MCP 服务器注册表搜索 |
| `TomlConfigsPage.tsx` | TOML 配置编辑器 |
| `SettingDetailPanel.tsx` | 设置详情面板 |

**资料来源**：[apps/aidocs-dashboard/src/CastleShell.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/CastleShell.tsx)

### 7.2 设置向导流程

```
┌─────────────┐     ┌──────────────────┐     ┌─────────────────┐     ┌──────────┐
│   Welcome   │────▶│  Project Select   │────▶│   Configuring    │────▶│   Done   │
└─────────────┘     └──────────────────┘     └─────────────────┘     └──────────┘
                           │                        │                      │
                           ▼                        ▼                      ▼
                    输入项目路径              显示配置进度            展示配置清单
                                              (MCP/hooks/结构)        (下一步指引)
```

完成后的清单项：
- ✅ MCP configured
- ✅ Hooks registered
- ✅ Project initialized
- ✅ 已安装的包列表

**资料来源**：[apps/aidocs-dashboard/src/SetupWizardPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/SetupWizardPage.tsx)

---

## 8. 安全模式与配置

### 8.1 危险操作确认模态框

仪表盘提供安全设置确认机制：

| 设置路径 | 警告信息 |
|----------|----------|
| `dev.dev_mode` | 允许编辑 AIDOCS MCP 服务器源文件，仅在开发时使用 |
| `security.allow_config_edit` | 允许代理通过工具调用修改 AIDOCS 配置，可更改门控设置 |
| `security.enforce` | 禁用工具门控会移除 bash 白名单、原始工具阻止和破坏性命令保护 |

**资料来源**：[apps/aidocs-dashboard/src/dashboardModals.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/dashboardModals.tsx)

### 8.2 风险模式扫描

`skill_scanner.py` 实现了多级风险识别：

| 类别 | 级别 | 描述 |
|------|------|------|
| supply_chain | critical | 管道到 shell 执行 |
| supply_chain | medium | 包安装命令 |
| supply_chain | low | 外部 URL 引用 |
| capability | high | 命令执行声明 |
| capability | medium | 文件系统操作声明 |

**资料来源**：[mcp/server/aidocs_mcp/skill_scanner.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/skill_scanner.py)

---

## 9. 关键设计原则

1. **文件作为唯一事实来源** — 所有数据存储在项目目录中，而非独立数据库
2. **索引可重建** — SQLite 索引是从文件派生的，可随时重建
3. **MCP 可选** — Markdown 系统可独立工作，不依赖 MCP
4. **托管模式安全** — 6 级门控确保 AI 操作在受控范围内
5. **会话引导检索** — 会话上下文指导信息检索优先级

---

## 10. 部署架构

### 10.1 安装方式

| 平台 | 命令 |
|------|------|
| Windows/macOS | 下载 Release，双击运行 |
| Linux/macOS | `curl -fsSL https://raw.githubusercontent.com/cristian1991/AIDOCS/main/core/scripts/install.sh \| bash` |
| Python 环境 | `pip install aidocs-mcp` + `aidocs setup` |

### 10.2 依赖项

```bash
pip install aidocs-mcp              # 核心包
pip install aidocs-mcp[dev]         # 含 pytest
pip install aidocs-mcp[ast]         # 含 tree-sitter（JS/TS AST 解析）
```

**资料来源**：[mcp/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/README.md)

---

<a id='persistent-memory'></a>

## 持久化记忆系统

### 相关页面

相关主题：[数据存储与索引](#data-storage), [MCP工具集](#mcp-tools)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [mcp/server/aidocs_mcp/memory_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/memory_store.py)
- [mcp/server/aidocs_mcp/runtime_service.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/runtime_service.py)
- [mcp/server/aidocs_mcp/claude_hook.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/claude_hook.py)
- [mcp/server/aidocs_mcp/skill_scanner.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/skill_scanner.py)
- [mcp/server/aidocs_mcp/output_guard.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/output_guard.py)
- [mcp/server/aidocs_mcp/data/opencode_plugin.js](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/data/opencode_plugin.js)
</details>

# 持久化记忆系统

## 概述

持久化记忆系统（Persistent Memory System）是 AIDOCS 的核心基础设施，为 AI 编码代理提供持久化上下文存储和检索能力。该系统使代理能够跨会话恢复工作，无需每次都重新探索代码仓库。

AIDOCS 的记忆系统基于 Markdown 文件结构，存储在项目根目录的 `.MEMORY/` 目录中。所有记忆内容以结构化 Markdown 格式保存，支持版本控制和语义搜索。

**核心功能：**

- 持久化上下文 — 代理会话间的记忆保持
- 结构化存储 — 预定义的文件夹层次和文件名规范
- 语义索引 — 基于符号、概念和关系的检索
- 访问控制 — 文件位置校验和内容验证

资料来源：[mcp/server/aidocs_mcp/runtime_service.py:1-50]()

---

## 目录结构

### 顶层布局

`.MEMORY/` 目录采用分层结构，不同类型的记忆内容存储在预定义的子目录中：

```
.MEMORY/
├── .aidocs/           # 模板和脚手架文件
├── .index/            # 语义索引数据
├── sessions/          # 会话级记忆
│   └── <session_id>/
│       ├── plans/     # 会话计划
│       ├── SESSION.md
│       ├── PLAN.md
│       ├── journal.md
│       └── context.md
├── plans/             # 项目级计划
├── roadmaps/          # 路线图文档
├── CHANGELOG.md       # 变更日志（根目录）
├── archive/           # 归档内容
└── config/            # 配置目录
    └── related-projects.md
```

### 保留文件名规则

系统强制执行严格的文件名位置约束，确保记忆内容结构清晰：

| 文件名 | 有效位置 | 说明 |
|--------|----------|------|
| `INDEX.md` | `.MEMORY/` 根目录 | 项目索引页面 |
| `SESSION.md` | `.MEMORY/sessions/<id>/` | 会话元数据 |
| `PLAN.md` | `.MEMORY/sessions/<id>/plans/` | 会话内计划 |
| `journal.md` | `.MEMORY/sessions/<id>/` | 每日工作日志 |
| `context.md` | `.MEMORY/sessions/<id>/` | 会话上下文 |
| `plans.md` | `.MEMORY/plans/` | 项目级计划 |
| `plan.md` | `.MEMORY/plans/` 或会话文件夹 | 计划文档 |
| `roadmap.md` / `roadmaps.md` | `.MEMORY/roadmaps/` | 路线图文档 |
| `changelog.md` | `.MEMORY/CHANGELOG.md` 或 `archive/` | 变更日志 |

**不允许的位置：**

- `bugs.md` — 应使用 issue tracker
- `issues.md` — 应使用 issue tracker

资料来源：[mcp/server/aidocs_mcp/memory_store.py:1-50]()

---

## 架构设计

### 系统组件

```mermaid
graph TD
    subgraph "持久化记忆系统"
        A[.MEMORY/ 目录] --> B[文件存储层]
        B --> C[索引存储]
        C --> D[语义搜索]
        D --> E[检索 API]
        
        F[内容验证器] --> B
        G[文件位置校验器] --> B
    end
    
    subgraph "访问接口"
        E --> H[MCP 工具]
        E --> I[Hook 集成]
        E --> J[Dashboard API]
    end
```

### 内容模式检测

系统通过正则表达式检测潜在的无效或危险内容：

| 模式类型 | 检测目标 | 严重级别 |
|----------|----------|----------|
| 内容注入 | `#TODO` 形式的计划内容 | 中 |
| 强制指令 | `IMPORTANT:` / `CRITICAL:` | 中 |
| 保密指令 | `do not tell/inform/mention` | 中 |
| 混淆内容 | Hex 编码、Base64 引用 | 高 |

资料来源：[mcp/server/aidocs_mcp/memory_store.py:50-100]()

---

## 工具链集成

### MCP 运行时工具

记忆系统通过 MCP（Model Context Protocol）暴露以下工具：

| 工具类别 | 工具名称 | 功能描述 |
|----------|----------|----------|
| 索引 | `index_file`, `index_project` | 索引文件和项目 |
| 检索 | `memory_search`, `semantic_search` | 记忆语义搜索 |
| 写入 | `write_memory`, `append_journal` | 写入记忆内容 |
| 上下文 | `session_resume_bundle` | 恢复会话上下文 |
| 符号 | `code_find_symbols`, `code_get_symbol_snippet` | 代码符号检索 |

### 编辑工作流

```mermaid
graph LR
    A[aidocs_task_begin] --> B[读取记忆]
    B --> C[aidocs_get_lines / aidocs_get_symbol_snippet]
    C --> D[编辑记忆]
    D --> E[aidocs_str_replace / aidocs_edit_lines / aidocs_batch_edit]
    E --> F[aidocs_task_complete]
```

**编辑工具选择指南：**

- `aidocs_str_replace` — 小范围精确替换
- `aidocs_edit_lines` — 行范围重写
- `aidocs_batch_edit` — 多个原子编辑（最多 20 个）

资料来源：[mcp/server/aidocs_mcp/claude_hook.py:1-50]()

---

## 会话管理

### 会话恢复流程

```mermaid
sequenceDiagram
    participant Agent as AI 代理
    participant MCP as MCP 运行时
    participant Store as 记忆存储
    participant Index as 索引存储
    
    Agent->>MCP: 启动新会话
    MCP->>Store: 创建 .MEMORY/sessions/<id>/
    MCP->>Index: 更新会话索引
    
    Agent->>MCP: 请求恢复
    MCP->>Store: 读取 SESSION.md, context.md
    MCP->>Index: 检索相关历史
    Store-->>Agent: 返回上下文束
```

### 会话数据结构

| 文件 | 内容 | 生命周期 |
|------|------|----------|
| `SESSION.md` | 会话元数据 | 整个会话 |
| `PLAN.md` | 当前任务计划 | 任务周期 |
| `journal.md` | 工作日志 | 按日创建 |
| `context.md` | 运行时上下文 | 动态更新 |

资料来源：[mcp/server/aidocs_mcp/runtime_service.py:50-100]()

---

## 安全机制

### 输出守卫

记忆系统集成输出守卫（Output Guard）防止敏感信息泄露：

```python
敏感内容模式:
- env_file_content: [A-Z_]{3,}=\S{8,}  # 可能的 .env 内容
- ssh_config: Host\s+\S+ | IdentityFile  # SSH 配置
```

### 内容验证规则

1. **文件名校验** — 保留文件名必须在指定目录
2. **内容检测** — 正则匹配禁止的模式
3. **路径隔离** — 模板目录（`.aidocs`, `.index`）内容自动跳过验证

资料来源：[mcp/server/aidocs_mcp/output_guard.py:1-50]()

---

## 配置选项

### 相关项目配置

通过 `.MEMORY/config/related-projects.md` 配置项目对比和搜索功能：

```markdown
# 相关项目配置示例
## project-name
描述...
```

### 语义索引配置

| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| 索引深度 | 3 | 目录递归层级 |
| 符号存储 | SQLite | 索引数据库 |
| 缓存策略 | LRU | 内存缓存 |

---

## 使用示例

### 启动新会话

1. 代理通过 `/aidocs` 命令启动
2. 系统创建 `.MEMORY/sessions/<timestamp>/`
3. 初始化 `SESSION.md`, `journal.md`

### 记忆恢复

```javascript
// OpenCode 插件
const bundle = await ai_investigate("session_resume_bundle", {
  mode: "session",
  session_id: currentSession
});
```

### 写入记忆

```python
# MCP 工具调用
aidocs_write_memory(
    path=".MEMORY/sessions/123/plans/feature.md",
    content="# Feature Plan\n\n## Tasks\n- [ ] ...",
    mode="create"
)
```

资料来源：[mcp/server/aidocs_mcp/data/opencode_plugin.js:1-50]()

---

## 与其他系统集成

### Dashboard 集成

AIDOCS Dashboard 提供图形化界面管理记忆：

- **SessionsPage** — 会话历史浏览
- **SkillsPage** — 技能库管理
- **SetupWizardPage** — 首次设置引导

### Host 适配器

| 适配器 | 集成方式 |
|--------|----------|
| Claude Code | Hook 系统 |
| OpenCode | 插件注入 |
| Codex CLI | MCP 协议 |
| Cursor | MCP 协议 |

---

## 最佳实践

1. **文件命名** — 严格遵循保留文件名规则
2. **内容组织** — 计划放 `plans/`、日志放 `journal.md`
3. **上下文更新** — 定期同步 `context.md`
4. **索引维护** — 重大项目使用增量索引
5. **安全意识** — 避免在记忆中存储敏感凭据

---

<a id='conductor-system'></a>

## Conductor调度系统

### 相关页面

相关主题：[持久化记忆系统](#persistent-memory), [宿主代理集成](#host-integration)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [mcp/server/aidocs_mcp/conductor_comms.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/conductor_comms.py)
- [mcp/server/aidocs_mcp/co_conductor.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/co_conductor.py)
- [mcp/server/aidocs_mcp/runtime_conductor_dispatch_service.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/runtime_conductor_dispatch_service.py)
- [mcp/server/aidocs_mcp/agent_orchestrator.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/agent_orchestrator.py)
- [mcp/server/aidocs_mcp/agent_worker_service.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/agent_worker_service.py)
- [apps/aidocs-dashboard/src/ConductorPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/ConductorPage.tsx)
- [apps/aidocs-dashboard/src/ConductorAgentsPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/ConductorAgentsPage.tsx)
</details>

# Conductor调度系统

## 概述

Conductor调度系统是AIDOCS框架中的核心任务编排与多代理协调引擎。该系统负责管理AI编码代理的工作流程、任务分发、状态追踪以及多代理间的通信协作。

Conductor系统的主要职责包括：

- **任务分解与分配**：将复杂任务拆解为可执行的车道（Lane），并智能分配给合适的代理
- **多代理协调**：支持主代理（Conductor）、副代理（Co-Conductor）以及King角色的分层协作
- **执行路由**：根据配置和运行时状态选择合适的执行后端（claude、codex、opencode）
- **状态管理**：维护任务执行状态、阻塞关系和进度追踪
- **持久化编排**：通过持久内存机制确保代理在重启后能够恢复工作上下文

资料来源：[ConductorPage.tsx:1-50]()

## 系统架构

### 核心组件

| 组件名称 | 文件路径 | 职责说明 |
|---------|---------|---------|
| ConductorDispatchService | runtime_conductor_dispatch_service.py | 运行时调度核心，负责任务分发和负载均衡 |
| AgentOrchestrator | agent_orchestrator.py | 代理编排器，管理代理生命周期和状态 |
| ConductorComms | conductor_comms.py | 通信层，处理代理间消息传递 |
| CoConductor | co_conductor.py | 副 conductor，辅助主conductor完成任务分解 |
| AgentWorkerService | agent_worker_service.py | 代理工作服务，执行具体任务单元 |
| ConductorPage | ConductorPage.tsx | 前端UI组件，展示调度状态和交互界面 |

资料来源：[runtime_conductor_dispatch_service.py](), [ConductorPage.tsx:1-30]()

### 层级关系

```mermaid
graph TD
    A[King Role] --> B[Conductor]
    A --> C[Co-Conductor]
    B --> D[Agent Worker Pool]
    C --> D
    B <--> C
    D --> E[External AI Backends]
    E --> F[Claude]
    E --> G[Codex]
    E --> H[OpenCode]
```

King角色位于层级顶端，负责全局战略决策；Conductor负责战术层面的任务分解和调度；Co-Conductor作为辅助角色协助完成复杂任务；Agent Worker实际执行具体任务单元。

资料来源：[ConductorPage.tsx:180-200]()

## 消息角色系统

### MsgRole 类型定义

系统定义了三种消息角色，用于标识不同代理在通信中的职能定位：

```typescript
type MsgRole = "king" | "conductor" | "co-conductor";

const MSG_ROLE_LABEL: Record<MsgRole, string> = {
  king: "King",
  conductor: "Conductor",
  "co-conductor": "Co-Conductor",
};
```

| 角色 | 标签 | 背景色 | 前景色 | 职能说明 |
|-----|------|-------|-------|---------|
| king | King | rgba(245, 197, 24, 0.18) | #f5c518 | 全局决策者，制定战略方向 |
| conductor | Conductor | rgba(140, 224, 175, 0.18) | var(--accent-bright) | 任务分解与调度协调 |
| co-conductor | Co-Conductor | rgba(120, 170, 255, 0.18) | #78aaff | 辅助协调，分担工作负载 |

资料来源：[ConductorPage.tsx:210-230]()

### 消息接收者路由

消息可以定向发送给特定接收者或广播给多个角色：

```typescript
type MsgRecipient = "conductor" | "co-conductor" | "both";
```

| 接收者 | 路由目标 | 使用场景 |
|-------|---------|---------|
| conductor | 仅主Conductor | 单一指挥链的指令传递 |
| co-conductor | 仅Co-Conductor | 辅助任务的独立通信 |
| both | Conductor + Co-Conductor | 需要双方知晓的同步信息 |

资料来源：[ConductorPage.tsx:50-80]()

## 车道（Lane）机制

### 概念定义

Lane是Conductor调度系统中的核心执行单元概念，代表一个可独立或顺序执行的任务链路。系统通过分析任务依赖关系，自动计算车道的可运行状态。

### 车道状态模型

```mermaid
graph TD
    A[Lane Created] --> B{Runnable?}
    B -->|Yes| C[Runnable]
    B -->|No| D[Blocked]
    D --> E{Dependency Met?}
    E -->|Yes| C
    E -->|No| D
    C --> F[Executing]
    F --> G[Completed]
```

### 状态统计展示

前端界面通过Summary面板展示车道聚合状态：

```typescript
<div className="conductor-summary">
  <div className="summary-row"><span>Progress</span><strong>{progressPercent}%</strong></div>
  <div className="summary-row"><span>Total lanes</span><strong>{conductorLanes.length}</strong></div>
  <div className="summary-row"><span>Runnable</span><strong>{runnableLaneIds.length}</strong></div>
  <div className="summary-row"><span>Blocked</span><strong>{Object.keys(blockedReasons).length}</strong></div>
</div>
```

| 指标名称 | 数据来源 | 说明 |
|---------|---------|-----|
| progressPercent | 执行进度计算 | 已完成车道占总车道的百分比 |
| conductorLanes.length | 车道列表 | 当前会话中的总车道数 |
| runnableLaneIds.length | 可运行车道列表 | 依赖满足可立即执行的车道 |
| blockedReasons | 阻塞原因映射 | 按lane ID索引的阻塞原因描述 |

资料来源：[ConductorPage.tsx:100-115]()

## 执行路由机制

### 后端选择

Conductor支持多后端AI服务集成，运行时根据配置和策略选择合适的执行后端：

```typescript
conductorDefaults = {
  backend: entry("conductor.backend")?.current_value ?? "claude",
  models: {
    claude: entry("conductor.claude_model")?.current_value ?? "",
    codex: entry("conductor.codex_model")?.current_value ?? "",
    opencode: entry("conductor.opencode_model")?.current_value ?? "",
  },
};
```

| 后端类型 | 配置键 | 说明 |
|---------|-------|-----|
| claude | conductor.backend | Anthropic Claude模型 |
| codex | conductor.backend | OpenAI Codex模型 |
| opencode | conductor.backend | OpenCode自定义模型 |

### 执行模式

每条执行事件记录包含多种执行模式标记：

```typescript
<span className="execution-event-tokens">L:{logicalMode}</span>
<span className="execution-event-tokens">N:{nativeMode}</span>
<span className="execution-event-lane" style={{ color: "#fbbf24" }}>fallback</span>
```

| 模式类型 | 标识 | 说明 |
|---------|-----|-----|
| Logical Mode | L:xxx | 逻辑执行模式标记 |
| Native Mode | N:xxx | 原生执行模式标记 |
| Fallback | fallback | 降级执行标记，表示使用了备选方案 |

资料来源：[ConductorPage.tsx:150-170](), [ExecutionPage.tsx:1-30]()

## 配置管理

### 路由配置结构

```typescript
const [routing, setRouting] = useState<Record<string, RouteConfig>>({});
const [routingOpen, setRoutingOpen] = useState(false);
const [routingError, setRoutingError] = useState<string | null>(null);
```

| 配置项 | 类型 | 用途 |
|-------|------|-----|
| routing | Record<string, RouteConfig> | 车道路由规则映射 |
| routingOpen | boolean | 路由配置面板展开状态 |
| routingError | string \| null | 路由配置错误信息 |

### 配置获取流程

```mermaid
sequenceDiagram
    participant UI as ConductorPage
    participant Config as ConfigEntries
    participant Backend as AI Backend
    
    UI->>Config: find("conductor.backend")
    Config-->>UI: current_value: "claude"
    UI->>Config: find("conductor.claude_model")
    Config-->>UI: model string
    UI->>Backend: dispatch(model)
    Backend-->>UI: execution result
```

## 前端交互界面

### 组件层级

```mermaid
graph TD
    A[ConductorPage] --> B[ToolCallsPanel]
    A --> C[ConductorChat]
    A --> D[ConductorLanesView]
    A --> E[ConductorSummary]
    C --> F[recipient selector]
    C --> G[message input]
    D --> H[blocked reasons]
    D --> I[runnable indicators]
```

### 消息显示组件

```typescript
<div className={`conductor-msg conductor-msg-${msg.role}`}>
  {msg.msgRole ? <MsgRoleChip role={msg.msgRole} /> : null}
  <strong>{msg.role}</strong>
  <span>{msg.text}</span>
</div>
```

等待回复状态显示：

```typescript
{awaitingReply ? (
  <div className="conductor-msg conductor-msg-system conductor-msg-pending">
    <strong>agent</strong>
    <span>Thinking...</span>
  </div>
) : null}
```

资料来源：[ConductorPage.tsx:30-60]()

## 运行时状态

### MCP连接状态

Conductor系统依赖MCP（Model Context Protocol）进行通信，状态栏实时反映连接状态：

```typescript
<span className="flex items-center gap-1">
  <span className="h-1.5 w-1.5 rounded-full bg-castle-allow" />
  {mcpConnected ? "MCP connected" : "MCP disconnected"}
</span>
```

| 连接状态 | 指示器颜色 | 含义 |
|---------|-----------|-----|
| Connected | bg-castle-allow (绿色) | MCP服务正常运行 |
| Disconnected | bg-castle-deny (红色) | MCP服务不可用 |

### 会话追踪

每个Conductor会话具有唯一标识，用于持久化和恢复：

```typescript
<span>Session</span><strong>{selectedEvent.session_id ?? "n/a"}</strong>
```

资料来源：[CastleShell.tsx:80-100](), [ExecutionPage.tsx:1-20]()

## 执行事件记录

### 事件数据结构

执行事件包含完整的执行上下文信息：

```typescript
<div className="tool-detail-row"><span>Session</span><strong>{selectedEvent.session_id}</strong></div>
<div className="tool-detail-row"><span>Observed</span><strong>{formatTimestamp(selectedEvent.observed_at)}</strong></div>
<div className="tool-detail-row"><span>Lane</span><strong>{eventLane(selectedEvent)}</strong></div>
```

| 字段 | 类型 | 说明 |
|-----|------|-----|
| session_id | string | 所属会话标识 |
| observed_at | timestamp | 事件观察时间 |
| capability_name | string | 执行能力名称 |
| action_kind | string | 执行动作类型 |
| event_kind | string | 事件种类 |
| lane | string | 所属车道标识 |

### 详情展示

```typescript
{payload.args_preview ? (
  <div className="tool-detail-code">
    <div className="section-label">Arguments</div>
    <pre>{detailValue(payload.args_preview)}</pre>
  </div>
) : null}
```

资料来源：[ExecutionPage.tsx:20-60]()

## 概览页面集成

### 上下文预算监控

Conductor与上下文管理集成，提供预算监控功能：

```typescript
<div className="section-label">Context Budget</div>
<div className="summary-row"><span>Status</span><strong>{contextBudget?.status ?? contextBudget?.reason}</strong></div>
<div className="summary-row"><span>Estimated tokens</span><strong>{contextBudget?.estimated_tokens?.toLocaleString()}</strong></div>
<div className="summary-row"><span>Journal entries</span><strong>{contextBudget?.journal_entries ?? 0}</strong></div>
```

| 指标 | 说明 |
|-----|------|
| status | 上下文预算状态 |
| estimated_tokens | 预估Token消耗 |
| journal_entries | 日志条目数量 |

### 最近执行展示

```typescript
{snapshot.execution.recent.slice(0, 6).map((event) => (
  <div key={event.event_id} className="feed-row execution-table-row">
    <strong>{event.capability_name ?? event.event_kind}</strong>
    <span>{event.action_kind ?? event.event_kind}</span>
    <time>{event.observed_at}</time>
  </div>
))}
```

资料来源：[OverviewPage.tsx:1-50]()

## 总结

Conductor调度系统是AIDOCS框架中实现智能任务编排的核心引擎，通过多角色协作、车道机制和灵活的路由策略，使AI代理能够高效协同处理复杂任务。系统采用前后端分离架构，前端提供直观的可视化界面，后端通过Python服务实现核心调度逻辑，并通过MCP协议与各类AI后端集成。

主要特性包括：

- **分层角色系统**：King、Conductor、Co-Conductor形成清晰的职责层级
- **Lane驱动执行**：基于依赖的车道模型确保任务正确排序
- **多后端支持**：统一接口支持Claude、Codex、OpenCode等多种AI后端
- **实时状态追踪**：完善的执行事件记录和进度可视化
- **配置灵活性**：可定制的路由规则和模型参数

---

<a id='security-gates'></a>

## 安全门控系统

### 相关页面

相关主题：[系统架构](#system-architecture), [宿主代理集成](#host-integration)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [mcp/server/aidocs_mcp/access_gate.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/access_gate.py)
- [mcp/server/aidocs_mcp/heuristic_judge.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/heuristic_judge.py)
- [mcp/server/aidocs_mcp/output_guard.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/output_guard.py)
- [mcp/server/aidocs_mcp/rbac.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/rbac.py)
- [mcp/server/aidocs_mcp/tool_policy.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/tool_policy.py)
- [mcp/server/aidocs_mcp/enforcement_pkg/controller.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/enforcement_pkg/controller.py)
</details>

# 安全门控系统

## 概述

AIDOCS 安全门控系统是保护 AI 编码代理安全运行的核心组件，它通过多层防护机制控制代理对系统资源的访问权限。该系统旨在防止代理意外或恶意修改敏感文件、执行危险命令，以及遭受提示词注入攻击。

安全门控系统采用分层架构设计，从文件访问控制、工具策略执行、输出内容审查到基于角色的权限管理，形成完整的防御体系。资料来源：[access_gate.py:1-50]()

## 系统架构

### 组件层次

安全门控系统由以下核心组件构成：

```mermaid
graph TD
    subgraph "访问控制层"
        AG[access_gate.py<br/>访问门控]
        RB[rbac.py<br/>RBAC权限控制]
    end
    
    subgraph "策略执行层"
        TP[tool_policy.py<br/>工具策略]
        EN[controller.py<br/>执行控制器]
    end
    
    subgraph "内容审查层"
        OG[output_guard.py<br/>输出守卫]
        HJ[heuristic_judge.py<br/>启发式判断]
    end
    
    AG --> RB
    TP --> EN
    EN --> AG
    OG --> HJ
```

### 门控决策流程

```mermaid
graph TD
    A[请求进入门控] --> B{请求类型}
    B -->|读取| C[check_read]
    B -->|编辑| D[check_edit<br/>层级1检查]
    B -->|写入| E[check_write<br/>层级2-4检查]
    
    C --> F{路径检查}
    F -->|全局引导文件| G[BLOCK<br/>Tier0拒绝]
    F -->|敏感文件| H[BLOCK<br/>敏感文件保护]
    F -->|正常路径| I[ALLOW]
    
    D --> J{intent标志}
    J -->|true| K[ALLOW]
    J -->|false| L[check_write]
    
    E --> M{配置文件编辑}
    M -->|dev_mode启用| N[ALLOW]
    M -->|正常配置| O[BLOCK]
    
    E --> P{敏感文件检查}
    P -->|是| Q[BLOCK]
    P -->|否| R{其他检查}
```

## 核心组件详解

### 访问门控 (access_gate.py)

access_gate.py 是安全门控系统的核心模块，负责对文件操作进行细粒度控制。

#### 门控决策数据结构

```python
class GateDecision:
    allowed: bool          # 是否允许操作
    level: str             # 门控层级标识
    reason: str            # 决策原因说明
```

#### 门控层级定义

| 层级 | 名称 | 描述 | 优先级 |
|------|------|------|--------|
| 0 | global_bootstrap_tier0 | 全局引导文件保护 | 最高 |
| 1 | sensitive_file_protection | 敏感文件保护 | 高 |
| 2 | edit_gate | 编辑门控 | 中 |
| 3 | write_gate | 写入门控 | 中 |
| 4 | capability_gate | 能力声明门控 | 中低 |

资料来源：[access_gate.py:30-80]()

#### 关键检查函数

**check_edit()** - 层级1编辑检查

```python
@staticmethod
def check_edit(ctx: GateContext, path: str, *, has_intent: bool = False) -> GateDecision:
    """检查文件编辑是否允许"""
    # 层级1：全局引导文件永不接受代理编辑
    if _is_global_bootstrap(path):
        return GateDecision(allowed=False, level="edit_gate", reason="...")
    
    # 如果代理有明确意图且配置允许，则放行
    if has_intent and _check_dev_mode_and_state(path):
        return GateDecision(allowed=True, level="edit_gate")
    
    return GateDecision(allowed=False, level="edit_gate", reason=...)
```

资料来源：[access_gate.py:60-90]()

**check_write()** - 层级2/3/4写入检查

```python
@staticmethod
def check_write(ctx: GateContext, path: str, *, config_edit_mode: str | None = None, has_intent: bool = False) -> GateDecision:
    """检查文件写入/创建是否允许"""
    normalized = _normalize_path(path)
    
    # Tier 0: 全局引导文件保护
    # 永不通过代理修改，仅允许AIDOCS安装器操作
    if _is_global_bootstrap(normalized):
        return GateDecision(
            allowed=False,
            level="global_bootstrap_tier0",
            reason=f"Global host bootstrap file is never agent-writable: {normalized}"
        )
    
    # Level 3: 敏感文件保护
    if _is_sensitive(normalized):
        return GateDecision(
            allowed=False,
            level="sensitive_file_protection",
            reason=_gate_msg("sensitive_file_blocked", path=normalized)
        )
    
    # Level 2a: 配置文件处理
    # ...
```

资料来源：[access_gate.py:95-140]()

### 输出守卫 (output_guard.py)

output_guard.py 负责检测和过滤代理输出中的潜在威胁内容。

#### 守卫模式分类

**提示词注入检测模式**

| 类别 | 正则表达式 | 威胁描述 |
|------|-----------|----------|
| system_override | `ignore\|forget\|disregard.*(?:previous\|prior\|above)` | 系统指令覆盖尝试 |
| role_hijack | `you\s+are\s+now\s+(?:a\s+)?(?:different\|new\|my)` | 角色劫持尝试 |
| instruction_inject | `<\s*(?:system\|instructions?\|prompt)\s*>` | XML标签指令注入 |
| delimiter_escape | ````\s*(?:system\|instructions?)\s*\n` | 代码块指令注入 |
| hidden_instruction | `(?:IMPORTANT\|CRITICAL\|URGENT)\s*:\s*(?:ignore\|override)` | 隐藏指令注入 |

资料来源：[output_guard.py:50-70]()

**敏感内容检测模式**

| 类别 | 正则表达式 | 描述 |
|------|-----------|------|
| env_file_content | `^[A-Z_]{3,}=\S{8,}$` | .env文件内容泄露 |
| ssh_config | `(?:Host\s+\S+\|IdentityFile\s+~/)` | SSH配置内容 |

资料来源：[output_guard.py:75-80]()

#### 扫描与脱敏

```python
REDACTION_MARKER = "[REDACTED:{category}]"

def scan_text(text: str, *, redact: bool = True) -> GuardResult:
    """扫描文本中的安全威胁并可选地进行脱敏处理"""
    # 1. 检测提示词注入模式
    # 2. 检测敏感内容模式
    # 3. 根据redact参数决定是否替换敏感内容
    # 4. 返回GuardResult结构
```

资料来源：[output_guard.py:82-95]()

### 工具策略 (tool_policy.py)

tool_policy.py 定义了工具执行的策略规则，包括允许列表、拒绝列表和气泡策略。

#### 策略动作类型

| 动作 | 描述 |
|------|------|
| allow | 明确允许执行 |
| deny | 明确拒绝执行 |
| bubble | 气泡到上一层级决定 |

#### Shell策略管理

```mermaid
graph LR
    subgraph "BashPolicyPanel"
        PI[策略信息]
        SC[搜索/过滤]
        RB[规则列表]
    end
    
    PI -->|显示统计| SA[允许数/拒绝数/气泡数]
    SC -->|筛选| RB
    RB -->|应用| CT[当前活动层级配置]
```

资料来源：[BashPolicyPanel.tsx:1-50]()

### RBAC权限控制 (rbac.py)

RBAC模块实现了基于角色的访问控制，为不同类型的代理和用户分配不同的权限级别。

#### 权限层级

```mermaid
graph TD
    R1[管理员角色] --> A[全部权限]
    R2[高级代理角色] --> B[受限写权限]
    R3[普通代理角色] --> C[只读+部分写]
    R4[受限角色] --> D[仅读取]
    
    style R1 fill:#ff6b6b
    style R2 fill:#feca57
    style R3 fill:#48dbfb
    style R4 fill:#1dd1a1
```

### 启发式判断 (heuristic_judge.py)

heuristic_judge.py 通过启发式规则评估代理请求的风险级别，辅助门控决策。

#### 风险评估维度

| 维度 | 评估方法 | 风险级别 |
|------|----------|----------|
| supply_chain | 包管理器命令检测 | critical/medium/low |
| capability | 能力声明检测 | high/medium/low |
| file_operation | 文件系统操作检测 | high/medium/low |
| network | 网络请求检测 | high/medium/low |

资料来源：[skill_scanner.py:40-70]()

### 执行控制器 (enforcement_pkg/controller.py)

controller.py 是安全策略的执行中枢，协调各组件的协作。

```python
class EnforcementController:
    """执行控制器 - 协调所有安全检查"""
    
    def check_request(self, request: Request) -> EnforcementResult:
        # 1. RBAC权限检查
        # 2. 工具策略检查
        # 3. 访问门控检查
        # 4. 内容审查
        # 5. 汇总决策
```

资料来源：[controller.py:1-40]()

## 配置管理

### TOML配置文件

AIDOCS通过TOML文件管理安全配置，支持多层级配置覆盖。

```toml
# 配置文件结构示例
[gate_messages]
# 操作钩子配置

[language_descriptors]
# 语言描述符配置

[security]
allow_config_edit = false
enforce = true
```

资料来源：[TomlConfigsPage.tsx:1-30]()

### 安全设置面板

安全相关配置可通过Dashboard界面管理：

| 设置项 | 说明 | 风险等级 |
|--------|------|----------|
| dev.dev_mode | 允许编辑AIDOCS MCP服务端源码 | 高 |
| security.allow_config_edit | 允许代理修改配置 | 高 |
| security.enforce | 启用工具门控 | 中 |

资料来源：[dashboardModals.tsx:1-20]()

## 危险操作确认

对于高风险操作，系统会弹出确认对话框：

```mermaid
sequenceDiagram
    participant AG as 代理请求
    participant GW as 网关
    participant UI as 用户界面
    participant AD as 管理员
    
    AG->>GW: 高风险操作请求
    GW->>UI: 显示确认对话框
    UI->>AD: 请求用户确认
    AD-->>UI: 用户决策
    UI-->>GW: 确认/拒绝结果
    GW->>AG: 执行或阻止
```

资料来源：[dashboardModals.tsx:20-40]()

### 确认对话框警告文本

| 配置项 | 警告内容 |
|--------|----------|
| dev.dev_mode | 启用后允许编辑AIDOCS MCP服务端源文件。仅在开发AIDOCS时使用。 |
| security.allow_config_edit | 允许代理通过工具调用修改AIDOCS配置。代理可以更改门控设置、conductor配置和其他项目设置。 |
| security.enforce | 禁用工具门控将移除bash允许列表、原始工具阻止和破坏性命令保护。代理可以自由使用任何工具。 |

资料来源：[dashboardModals.tsx:25-30]()

## 状态监控

### MCP连接状态

Dashboard底部状态栏显示MCP连接状态：

```tsx
<span className={mcpConnected ? "text-castle-allow" : "text-castle-deny"}>
  <span className="h-1.5 w-1.5 rounded-full bg-castle-allow" />
  MCP connected
</span>
```

| 状态 | 颜色 | 含义 |
|------|------|------|
| 已连接 | 绿色 | MCP服务器正常运行 |
| 断开 | 红色 | MCP连接异常 |

资料来源：[CastleShell.tsx:1-30]()

### 运行时快照

```tsx
export function LoadingOverlay() {
  return (
    <div className="app-overlay" role="status" aria-live="polite">
      <div className="app-overlay-panel">
        <div className="overlay-spinner" />
        <strong>Loading runtime snapshot</strong>
        <span>Refreshing project, session, and settings state.</span>
      </div>
    </div>
  );
}
```

资料来源：[dashboardModals.tsx:50-65]()

## 工作流程示例

### 文件编辑请求流程

```mermaid
graph TD
    A[代理请求编辑文件] --> B{是否为全局引导文件?}
    B -->|是| C[直接拒绝<br/>Tier0保护]
    B -->|否| D{是否为敏感文件?}
    D -->|是| E[拒绝<br/>敏感文件保护]
    D -->|否| F{是否启用dev_mode?}
    F -->|是| G{has_intent标志}
    G -->|true| H[允许编辑]
    G -->|false| I[拒绝]
    F -->|否| J[检查配置文件规则]
    J -->|允许| K[允许写入]
    J -->|拒绝| L[拒绝]
```

### 提示词注入检测流程

```mermaid
graph TD
    A[代理输出文本] --> B{检查system_override模式}
    B -->|匹配| C[标记为注入<br/>记录日志]
    B -->|无| D{检查role_hijack模式}
    D -->|匹配| E[标记为注入]
    D -->|无| F{检查instruction_inject模式}
    F -->|匹配| G[标记为注入]
    F -->|无| H{检查其他模式}
    H --> I[扫描敏感内容]
    I --> J{发现敏感数据?}
    J -->|是| K[脱敏处理]
    J -->|否| L[放行]
    C --> M[返回GuardResult]
    E --> M
    G --> M
    K --> M
    L --> M
```

## 最佳实践

### 开发环境配置

1. 仅在需要开发AIDOCS本身时启用 `dev.dev_mode`
2. 谨慎使用 `security.allow_config_edit`，确认代理确实需要此权限
3. 生产环境建议保持 `security.enforce` 启用状态

### 安全审查要点

| 检查项 | 频率 | 负责角色 |
|--------|------|----------|
| 门控日志审查 | 每日 | 安全管理员 |
| 敏感文件列表更新 | 每周 | 运维人员 |
| RBAC权限审计 | 每月 | 管理员 |
| TOML配置一致性检查 | 每次部署前 | 开发人员 |

### 异常处理

当门控拒绝操作时，系统会返回详细的原因信息：

```
GateDecision(
    allowed=False,
    level="sensitive_file_protection",
    reason="敏感文件被阻止: {path}"
)
```

开发者应捕获这些响应并向用户呈现友好的错误信息。

## 总结

AIDOCS安全门控系统通过多层次、细粒度的防护机制，为AI编码代理提供了全面的安全保障。系统从访问控制、策略执行、内容审查到权限管理等多个维度构建防御体系，有效防止了误操作、恶意攻击和敏感信息泄露等安全风险。理解并正确配置安全门控系统是确保AIDOCS稳定、安全运行的关键。

---

<a id='data-storage'></a>

## 数据存储与索引

### 相关页面

相关主题：[持久化记忆系统](#persistent-memory), [MCP运行时](#mcp-runtime)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [mcp/server/aidocs_mcp/memory_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/memory_store.py)
- [mcp/server/aidocs_mcp/config_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/config_store.py)
- [mcp/server/aidocs_mcp/session_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/session_store.py)
- [mcp/server/aidocs_mcp/code_index_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/code_index_store.py)
- [mcp/server/aidocs_mcp/project_registry_service.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/project_registry_service.py)
- [mcp/server/aidocs_mcp/aidocs_managed_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/aidocs_managed_store.py)
</details>

# 数据存储与索引

AIDOCS 的数据存储与索引系统是整个项目持久化层的核心，负责管理项目配置、会话状态、代码索引和运行时快照。该系统采用多层次存储架构，以文件系统为主体、SQLite 为索引引擎，支持项目级别的内存管理和会话感知的上下文检索。

## 存储架构总览

AIDOCS 的存储架构由多个独立的存储模块组成，每个模块负责特定的数据域。整个系统遵循"文件是唯一真相来源"（Files remain the only source of truth）的核心原则，所有索引都是派生的、可从源文件重建的。

```mermaid
graph TD
    A[项目根目录] --> B[aidocs.toml]
    A --> C[.MEMORY/]
    A --> D[.aidocs/]
    
    B --> E[ConfigStore<br/>配置存储]
    C --> F[SessionStore<br/>会话存储]
    C --> G[MemoryStore<br/>内存文档存储]
    D --> H[CodeIndexStore<br/>代码索引存储]
    
    E --> I[SQLite: aidocs_config.db]
    F --> I
    G --> I
    H --> I
    
    I --> J[派生索引]
    J --> K[代码符号索引]
    J --> L[语义搜索索引]
```

资料来源：[README.md](https://github.com/cristian1991/AIDOCS/blob/main/README.md)

## 核心存储模块

### ConfigStore（配置存储）

`ConfigStore` 负责管理项目级配置文件 `aidocs.toml` 的读取、验证和写入。该模块维护配置项的当前值、默认值，并支持配置变更的历史追踪。

配置存储采用 TOML 格式，主要配置域包括：

| 配置域 | 说明 | 持久化位置 |
|--------|------|-----------|
| `security` | 安全策略配置 | `aidocs.toml` |
| `dev` | 开发模式配置 | `aidocs.toml` |
| `languages` | 索引语言配置 | `aidocs.toml` |
| `mcp` | MCP 服务器配置 | `aidocs.toml` |

配置项具有以下属性结构：

- **path**: 配置项的 TOML 路径（如 `security.enforce`）
- **kind**: 配置值类型（布尔、字符串、数组等）
- **default_value**: 系统默认值
- **current_value**: 当前活跃值
- **scope**: 作用范围（全局或会话级别）

资料来源：[mcp/server/aidocs_mcp/config_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/config_store.py)

### SessionStore（会话存储）

`SessionStore` 管理会话生命周期和会话相关的数据持久化。每个 AI 编码会话在启动时创建唯一标识符，用于关联该会话产生的所有上下文和操作记录。

会话存储的关键职责：

1. **会话创建与标识**: 生成会话 ID，建立会话与项目的绑定关系
2. **上下文快照**: 定期保存会话状态快照，支持会话恢复
3. **会话元数据**: 记录会话起始时间、最近活动时间、关联的代码文件列表
4. **会话清理**: 管理过期会话的清理策略

```mermaid
graph LR
    A[会话启动] --> B[创建会话ID]
    B --> C[初始化会话目录]
    C --> D[绑定到项目]
    D --> E[活动状态]
    E --> F[会话快照]
    E --> G[上下文检索]
    F --> H[会话终止]
    G --> H
    H --> I[归档或清理]
```

资料来源：[mcp/server/aidocs_mcp/session_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/session_store.py)

### MemoryStore（内存文档存储）

`MemoryStore` 是 AIDOCS 的核心文档存储模块，负责管理 `.MEMORY/` 目录下的所有持久化文档。这些文档构成了 AI 代理的"持久记忆"，包括项目不变式、架构决策、工作流程规则等。

#### 文档分类体系

AIDOCS 定义了严格的文档分类体系，每种类型对应特定的存储位置：

| 文档类型 | 存储位置 | 用途说明 |
|----------|----------|----------|
| `invariant` | `.MEMORY/rules/` | 项目不变式和必须遵守的规则 |
| `infrastructure` | `.MEMORY/plans/` | 基础设施配置和架构决策 |
| `preference` | `.MEMORY/rules/` | 代码风格偏好和约定 |
| `caveat` | `.MEMORY/rules/` | 注意事项和已知的坑点 |
| `phase` | `.MEMORY/plans/` | 阶段跟踪和进度文档 |

资料来源：[mcp/server/aidocs_mcp/memory_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/memory_store.py)

#### 保留文件名规则

系统强制执行保留文件名规则，防止文档被错误放置：

```python
_RESERVED_FILENAMES = {
    "plans.md": "只能位于 .MEMORY/plans/",
    "plan.md": "只能位于 .MEMORY/plans/ 或会话文件夹",
    "roadmap.md": "只能位于 .MEMORY/roadmaps/",
    "roadmaps.md": "只能位于 .MEMORY/roadmaps/",
    "bugs.md": "不应存储在 memory 中，应使用 issue tracker",
    "issues.md": "不应存储在 memory 中，应使用 issue tracker",
    "changelog.md": "仅在 .MEMORY/CHANGELOG.md 或 archive/",
}
```

#### 内容模式检测

系统包含内容模式检测器，用于识别可能被错误分类的文档：

| 模式 | 正则表达式 | 触发条件 |
|------|------------|----------|
| 标题模式 | `#\{1,3\}` | 文档包含 H1-H3 标题 |
| 计划模式 | `plan` 关键词 | 内容看起来像计划 |
| Bug 报告模式 | `bug` 关键词 | 内容像是 bug 报告 |

资料来源：[mcp/server/aidocs_mcp/memory_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/memory_store.py)

### CodeIndexStore（代码索引存储）

`CodeIndexStore` 负责构建和维护代码库的符号索引，支持语义搜索、符号查找和代码导航。索引数据存储在 SQLite 数据库中，是完全派生的——可以从源代码随时重建。

#### 索引类型

| 索引类型 | 用途 | 数据来源 |
|----------|------|----------|
| 符号索引 | 类、函数、变量定义位置 | AST 解析 |
| 引用索引 | 符号被引用的位置 | 静态分析 |
| 文本索引 | 全文搜索 | 分词和倒排索引 |
| 依赖索引 | 模块间依赖关系 | 导入语句解析 |

#### 索引触发器

代码索引在以下事件发生时触发重建：

1. **项目初始化**: 首次启用 AIDOCS 时执行全量索引
2. **显式同步**: 调用 `project_sync_indexes` 方法
3. **增量更新**: 检测到文件变更时更新相关索引条目

索引重建采用增量策略，仅重新索引变更的文件及其依赖项，以优化大规模项目的性能。

资料来源：[mcp/server/aidocs_mcp/code_index_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/code_index_store.py)

## 项目注册服务

`ProjectRegistryService` 维护系统中所有已初始化 AIDOCS 的项目列表。该服务跟踪每个项目的根路径、初始化时间、最后访问时间和运行时状态。

### 项目元数据结构

| 字段 | 类型 | 说明 |
|------|------|------|
| `project_root` | Path | 项目根目录路径 |
| `project_name` | String | 项目显示名称 |
| `initialized_at` | DateTime | 初始化时间戳 |
| `last_accessed` | DateTime | 最后访问时间 |
| `session_count` | Integer | 关联的会话数量 |
| `index_status` | Enum | 索引状态（同步中、已同步、需重建） |

### 注册表持久化

项目注册表存储在全局配置目录下的 SQLite 数据库中，与单个项目的 `.MEMORY/` 目录分离，确保即使项目目录被删除，注册信息仍可查询。

```mermaid
graph TD
    A[全局注册表<br/>~/.aidocs/projects.db] --> B[项目元数据表]
    A --> C[运行时快照表]
    A --> D[历史记录表]
    
    B --> E[project_root]
    B --> F[project_name]
    B --> G[initialized_at]
    
    C --> H[snapshot_json]
    C --> I[created_at]
    
    D --> J[change_type]
    D --> K[change_data]
    D --> L[timestamp]
```

资料来源：[mcp/server/aidocs_mcp/project_registry_service.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/project_registry_service.py)

## 托管存储（Managed Store）

`aidocs_managed_store.py` 实现 AIDOCS 的托管模式存储逻辑。托管模式是 AIDOCS 的核心安全特性，在该模式下，系统对文件操作实施严格的访问控制。

### 托管模式架构

```mermaid
graph TD
    A[文件操作请求] --> B{托管模式启用?}
    B -->|否| C[允许直接访问]
    B -->|是| D[Gate 检查链]
    
    D --> E[Level 1: Managed Mode<br/>阻止原始文件工具]
    E --> F[Level 2: Infrastructure<br/>阻止 aidocs.toml 写入]
    F --> G[Level 3: Sensitive Files<br/>阻止凭证文件访问]
    G --> H[Level 4: Memory Path<br/>.MEMORY 读写策略]
    H --> I[Level 5: Read Gate<br/>按文件发现权限]
    I --> J[Level 6: Edit Gate<br/>需要先读取/发现]
    
    J -->|通过| K[允许操作]
    J -->|拒绝| L[阻止操作<br/>返回原因]
    
    C --> K
```

### 存储策略

托管存储支持多种读写策略：

| 策略 | 说明 | 使用场景 |
|------|------|----------|
| `strict` | 所有写入必须通过 AIDOCS 接口 | 高安全要求环境 |
| `relaxed` | 允许直接文件操作 | 开发调试模式 |
| `audit` | 允许直接操作但记录所有变更 | 合规审计 |

资料来源：[mcp/server/aidocs_mcp/aidocs_managed_store.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/aidocs_managed_store.py)

## 运行时快照

运行时快照是 AIDOCS 在特定时刻捕获的项目状态记录，用于支持会话恢复和状态回溯。

### 快照内容

| 组件 | 说明 |
|------|------|
| 项目配置 | aidocs.toml 的完整解析 |
| 活跃会话 | 当前会话的上下文摘要 |
| 索引状态 | 最后一次索引同步的状态 |
| 变更历史 | 最近的文件变更记录 |

### 快照存储

快照数据存储在以下位置：

- **项目级**: `.aidocs/snapshots/{timestamp}.json`
- **全局缓存**: `~/.aidocs/cache/snapshots/`

Dashboard 应用通过 Tauri 后端读取和显示运行时快照，刷新时显示加载动画，提示用户正在同步项目、会话和设置状态。

资料来源：[apps/aidocs-dashboard/src-tauri/src/main.rs](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src-tauri/src/main.rs)

## 索引同步方法

MCP 服务器提供以下方法用于索引管理：

### project_sync_indexes

```python
def project_sync_indexes(project_root: Path, include_tests: bool = False) -> dict
```

**参数说明：**

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `project_root` | Path | 必需 | 项目根目录 |
| `include_tests` | bool | False | 是否包含测试文件索引 |

**返回值：**

```python
{
    "memory_index_sync_result": {...},
    "code_manifest_sync_result": {...}
}
```

### project_check

运行项目结构检查，验证 AIDOCS 初始化完整性。

**返回值：**

| 字段 | 类型 | 说明 |
|------|------|------|
| `mode` | string | 检查模式 |
| `project_root` | string | 项目路径 |
| `exit_code` | int | 退出码 |
| `stdout` | string | 标准输出 |
| `stderr` | string | 错误输出 |
| `ok` | bool | 检查是否通过 |

资料来源：[mcp/server/METHODS.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/METHODS.md)

## TOML 配置文档管理

Dashboard 提供 TOML 配置文档的可视化浏览和管理界面，支持按类别筛选和快速切换。

### 配置文件分类

| 类别 | 路径前缀 | 说明 |
|------|----------|------|
| Project config | `aidocs.toml` | 项目主配置 |
| Intent tokens | `intent_tokens/` | 意图分类语言文件 |
| Workflow hooks | `gate_messages/` | 工作流钩子消息 |
| Index descriptors | `mcp/server/aidocs_mcp/index_languages/` | 语言索引描述符 |
| Session overrides | `.MEMORY/sessions/` | 会话级别的配置覆盖 |

### 配置文档显示

配置文档页面使用扁平表格布局，每行显示：

- **Target**: 配置目标名称
- **Active**: 激活状态（开关形式）
- **Context**: 上下文信息

资料来源：[apps/aidocs-dashboard/src/TomlConfigsPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/TomlConfigsPage.tsx)

## 安全与权限

AIDOCS 的存储系统集成了多层安全机制：

### 敏感文件保护

系统自动阻止对以下文件的读写操作：

- `.env` 文件
- 凭证文件
- API 密钥存储
- 其他安全敏感配置

### 配置变更确认

修改特定配置项时需要用户确认：

| 配置项 | 风险说明 |
|--------|----------|
| `dev.dev_mode` | 允许编辑 AIDOCS MCP 服务器源文件 |
| `security.allow_config_edit` | 允许代理通过工具调用修改配置 |
| `security.enforce` | 禁用工具门控，移除所有安全限制 |

资料来源：[apps/aidocs-dashboard/src/dashboardModals.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/dashboardModals.tsx)

## 总结

AIDOCS 的数据存储与索引系统采用模块化设计，通过清晰的职责划分实现了高效的状态管理和安全的访问控制：

- **ConfigStore** 集中管理项目配置
- **SessionStore** 维护会话生命周期
- **MemoryStore** 组织项目记忆文档
- **CodeIndexStore** 提供快速的代码检索能力
- **ProjectRegistryService** 追踪全局项目状态
- **ManagedStore** 实施安全策略

整个系统的设计哲学是"文件即真相"，所有派生数据都可以从源文件重建，确保了系统的可靠性和可恢复性。

---

<a id='mcp-runtime'></a>

## MCP运行时

### 相关页面

相关主题：[系统架构](#system-architecture), [MCP工具集](#mcp-tools), [宿主代理集成](#host-integration)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [mcp/server/aidocs_mcp/mcp_server.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/mcp_server.py)
- [mcp/server/aidocs_mcp/tool_discovery.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/tool_discovery.py)
- [mcp/server/aidocs_mcp/cli.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/cli.py)
- [mcp/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/README.md)
- [mcp/server/README.md](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/README.md)
- [mcp/server/aidocs_mcp/runtime_prompt_handling_service.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/runtime_prompt_handling_service.py)
- [mcp/server/aidocs_mcp/server_code_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_code_tools.py)
</details>

# MCP运行时

## 概述

MCP运行时（MCP Runtime）是AIDOCS项目的核心组件，为AI编码代理提供持久化记忆、索引检索和工作流编排能力。它作为Model Context Protocol（MCP）服务器运行，使AI代理能够在项目中恢复工作，而无需每次重新探索代码库。

MCP运行时的核心职责包括：

- **工具发现与注册**：自动扫描项目中的MCP服务器和服务
- **代码理解与检索**：提供符号搜索、依赖分析、上下文聚合等能力
- **安全门控**：6级级联安全机制，控制工具使用权限
- **会话管理**：维护代理会话状态和记忆持久化

资料来源：[mcp/README.md]()

## 架构概览

```mermaid
graph TD
    subgraph "MCP客户端层"
        IDE[IDE / Claude CLI]
    end
    
    subgraph "MCP运行时核心"
        Server[MCP Server]
        Tools[工具注册表]
        Gates[安全门控]
        Session[会话管理]
    end
    
    subgraph "记忆存储层"
        Index[.MEMORY/索引]
        SQLite[SQLite索引]
        Plans[计划/路标]
    end
    
    IDE <--> Server
    Server <--> Tools
    Server <--> Gates
    Server <--> Session
    Session <--> Index
    Session <--> SQLite
    Session <--> Plans
```

### 目录结构

MCP服务器代码位于 `mcp/server/aidocs_mcp/` 目录：

```
mcp/server/aidocs_mcp/
  mcp_server.py          # MCP协议服务器主入口
  cli.py                 # 命令行接口
  tool_discovery.py      # 工具发现与注册
  server_code_tools.py   # 代码理解工具集
  runtime_prompt_handling_service.py  # 运行时提示词处理
  memory_store.py        # 记忆存储服务
  skill_scanner.py       # 技能/风险扫描
  claude_hook.py         # Claude交互钩子
```

资料来源：[mcp/server/README.md]()

## 核心组件

### MCP服务器

`mcp_server.py` 是MCP协议的Python实现，负责与AI代理进行通信。它暴露一组工具（Tools）供AI调用：

| 工具类别 | 功能 | 示例 |
|---------|------|------|
| 记忆检索 | `aidocs_bundle`, `aidocs_find`, `aidocs_investigate` | 上下文聚合、符号搜索、概念调查 |
| 代码读取 | `aidocs_get_lines`, `aidocs_get_symbol_snippet` | 按行号或符号名读取代码 |
| 代码编辑 | `aidocs_str_replace`, `aidocs_edit_lines`, `aidocs_batch_edit` | 单点编辑、范围重写、批量原子编辑 |
| 会话管理 | `aidocs_task_begin`, `aidocs_task_complete`, `aidocs_task_update` | 任务生命周期管理 |
| 数据库查询 | `aidocs_schema_query` | 数据库结构查询 |

资料来源：[mcp/server/aidocs_mcp/mcp_server.py]()

### 工具发现系统

`tool_discovery.py` 负责自动扫描和注册项目中可用的MCP服务器：

```mermaid
graph LR
    Scan[扫描目录] --> Parse[解析配置]
    Parse --> Register[注册工具]
    Register --> Expose[暴露给AI]
```

支持发现的服务类型包括：

- 本地MCP服务器
- NPM包中的服务器
- Python包中的服务器
- STDIO传输的服务器

资料来源：[mcp/server/aidocs_mcp/tool_discovery.py]()

### 代码工具集

`server_code_tools.py` 实现代码理解和检索的核心功能：

| 模式 | 功能 | 说明 |
|-----|------|------|
| `dependency` | 依赖聚合 | 获取符号的依赖树 |
| `partial` | 部分聚合 | 获取部分依赖 |
| `symbol` | 符号聚合 | 获取特定符号的上下文 |
| `style` | 样式聚合 | 获取CSS类相关的代码 |
| `session` | 会话聚合 | 获取会话导向的上下文 |
| `context` | 上下文聚合 | 获取通用上下文 |
| `preset` | 预设聚合 | 预定义的聚合模板 |

```python
# 使用示例
if m == "dependency":
    return _grant(hub.code.get_dependency_bundle(root, path=target, limit=limit))
if m == "symbol":
    return _grant(hub.code.get_symbol_bundle(root, symbol=target, limit=limit))
```

资料来源：[mcp/server/aidocs_mcp/server_code_tools.py:1-50]()

## 安全门控架构

MCP运行时实现了6级级联安全门控机制，**首次匹配优先**：

| 级别 | 门控名称 | 动作 | 说明 |
|-----|---------|------|------|
| 1 | Managed Mode | 阻止原始文件工具 | 托管模式下阻止未受控的文件操作 |
| 2 | Infrastructure | 阻止写入 | 保护 `aidocs.toml`、`aidocs_mcp/*` |
| 3 | Sensitive Files | 阻止访问 | 保护 `.env`、凭证、密钥文件 |
| 4 | Memory Path | 读写分离 | `.MEMORY/` 读取自由，工作流写入需意图确认 |
| 5 | Read Gate | 文件级发现 | 按文件发现，支持 `known_exact_path` 绕过 |
| 6 | Edit Gate | 编辑控制 | 要求先读取/发现目标 |

资料来源：[mcp/README.md]()

### 风险模式检测

`skill_scanner.py` 包含技能和风险模式检测：

```python
# 供应链风险模式
_CAPABILITY_RISKS = [
    (re.compile(r"npm\s+install"), "supply_chain", "medium"),
    (re.compile(r"\|\s*(?:ba)?sh"), "supply_chain", "critical"),
    (re.compile(r"https?://..."), "supply_chain", "low"),
]

# 能力声明风险
_CAPABILITY_RISKS = [
    (re.compile(r"read|write|delete\s+file"), "capability", "medium"),
    (re.compile(r"execute|run\s+command"), "capability", "high"),
    (re.compile(r"send|post\s+data"), "capability", "high"),
]
```

资料来源：[mcp/server/aidocs_mcp/skill_scanner.py]()

## 运行时提示词处理

`runtime_prompt_handling_service.py` 处理AI代理的提示词路由：

```mermaid
graph TD
    Prompt[接收提示词] --> Classify[分类动作类型]
    Classify --> Route{路由决策}
    Route -->|需要AIDOCS入口| Entry[/aidocs入口流程]
    Route -->|已阻止| Blocked[返回阻止原因]
    Route -->|可处理| Handled[执行托管处理]
    Entry --> Handled
    Handled --> Report[生成报告]
```

### 处理模式

| 模式 | 说明 | 返回字段 |
|-----|------|---------|
| `requires_aidocs_entry` | 需要 `/aidocs` 入口 | `report`, `next_step` |
| `blocked` | 被安全机制阻止 | `blocked_reason`, `recommended_mcp_flow` |
| `handled` | 已成功处理 | `mode`, `handled`, `classification` |

资料来源：[mcp/server/aidocs_mcp/runtime_prompt_handling_service.py]()

## CLI命令行接口

`cli.py` 提供命令行交互能力：

```bash
# 安装后可用命令
aidocs setup          # 配置MCP、钩子、项目初始化
aidocs doctor         # 验证安装状态
```

### 安装选项

| 安装方式 | 命令 |
|---------|------|
| 基础安装 | `pip install aidocs-mcp` |
| 开发模式 | `pip install aidocs-mcp[dev]` |
| AST解析 | `pip install aidocs-mcp[ast]` |
| 全功能 | `pip install -e ".[dev,ast]"` |

资料来源：[mcp/server/aidocs_mcp/cli.py](), [mcp/README.md]()

## 记忆模型

在初始化项目中，记忆存储在 `/.MEMORY/` 目录：

```
/.MEMORY/
  .aidocs/index.aidocs     # 会话启动路由器
  plans/                   # 计划文档
  roadmaps/                # 路标文档
  archive/                 # 归档内容
```

### 保留文件名规则

为防止错误分类，系统定义了保留文件名规范：

| 文件名 | 正确位置 | 说明 |
|-------|---------|------|
| `plans.md` | `.MEMORY/plans/` | 仅限计划目录 |
| `roadmap.md` | `.MEMORY/roadmaps/` | 仅限路标目录 |
| `bugs.md` | 不属于记忆系统 | 应使用问题跟踪器 |

资料来源：[mcp/server/aidocs_mcp/memory_store.py]()

## 总结

MCP运行时是AIDOCS项目的技术核心，它通过：

1. **标准化工具接口** - MCP协议提供统一的AI-代码交互方式
2. **智能记忆检索** - 多模式上下文聚合，按会话引导
3. **分层安全防护** - 6级门控确保AI操作安全可控
4. **自动化配置** - 一键安装，自动发现和注册服务

这套架构使AI编码代理能够持久化工作记忆，在复杂项目中保持上下文连贯性，同时通过安全门控防止误操作。

---

<a id='mcp-tools'></a>

## MCP工具集

### 相关页面

相关主题：[MCP运行时](#mcp-runtime), [系统架构](#system-architecture)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [mcp/server/aidocs_mcp/server_code_edit_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_code_edit_tools.py)
- [mcp/server/aidocs_mcp/server_code_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_code_tools.py)
- [mcp/server/aidocs_mcp/server_memory_index_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_memory_index_tools.py)
- [mcp/server/aidocs_mcp/server_project_admin_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_project_admin_tools.py)
- [mcp/server/aidocs_mcp/server_run_tools.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/server_run_tools.py)
- [mcp/server/aidocs_mcp/skill_scanner.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/skill_scanner.py)
- [mcp/server/aidocs_mcp/output_guard.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/output_guard.py)
- [mcp/server/aidocs_mcp/claude_hook.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/claude_hook.py)
</details>

# MCP工具集

## 概述

AIDOCS的MCP（Model Context Protocol）工具集是整个系统的核心组件，为AI编码代理提供持久化记忆、索引检索和编排能力。这些工具通过MCP协议暴露给AI代理，使其能够执行代码编辑、文件检索、项目管理、Shell命令执行以及安全审计等操作。

MCP工具集采用模块化架构设计，将不同功能域分离为独立的服务模块：

| 模块名称 | 功能域 | 主要职责 |
|---------|-------|---------|
| `server_code_edit_tools` | 代码编辑 | 文件创建、字符串替换、批量编辑 |
| `server_code_tools` | 代码读取 | 符号检索、行号读取、代码片段获取 |
| `server_memory_index_tools` | 索引管理 | 上下文索引、符号索引、架构查询 |
| `server_project_admin_tools` | 项目管理 | 配置管理、层叠设置、权限控制 |
| `server_run_tools` | 命令执行 | Shell命令、进程管理、管道守卫 |
| `skill_scanner` | 安全审计 | 风险模式识别、供应链检测 |
| `output_guard` | 内容守卫 | 敏感信息过滤、注入检测 |

## 架构设计

```mermaid
graph TD
    subgraph "MCP服务端"
        A[MCP入口] --> B[工具路由器]
        B --> C[server_code_edit_tools]
        B --> D[server_code_tools]
        B --> E[server_memory_index_tools]
        B --> F[server_project_admin_tools]
        B --> G[server_run_tools]
    end
    
    subgraph "安全层"
        H[skill_scanner]
        I[output_guard]
        G --> H
        G --> I
    end
    
    subgraph "存储层"
        J[(索引数据库)]
        K[(项目配置)]
    end
    
    C --> J
    D --> J
    E --> J
    F --> K
```

## 代码编辑工具

`server_code_edit_tools`模块负责处理所有文件修改操作，提供细粒度的代码编辑能力。

### 核心工具函数

| 工具名称 | 功能描述 | 参数说明 |
|---------|---------|---------|
| `code_str_replace` | 精确字符串替换 | `old`: 原字符串, `new`: 新字符串, `replace_all`: 是否全部替换 |
| `code_create_file` | 创建新文件 | `path`: 路径, `content`: 内容 |
| `ai_str_replace` | AI辅助字符串替换 | 支持智能匹配和上下文感知 |
| `ai_batch_edit` | 批量原子编辑 | 最多支持20个编辑操作 |

### 工作流程

```mermaid
sequenceDiagram
    participant Agent as AI代理
    participant Edit as 代码编辑工具
    participant Index as 索引服务
    participant Guard as 安全守卫

    Agent->>Edit: aidocs_str_replace(path, old, new)
    Edit->>Guard: 安全扫描旧/新字符串
    Guard-->>Edit: 扫描通过/拒绝
    Edit->>Edit: file_str_replace(project_root,...)
    Edit->>Index: post_edit_reindex_and_grant()
    Index-->>Edit: 索引更新完成
    Edit-->>Agent: 返回编辑结果
```

### 回合冲突检测

工具实现了`_check_turn_edited`机制，用于防止同一文件在同一回合内被连续编辑导致行号损坏：

> 顺序的基于行的编辑同一文件会损坏行号。强制代理批量操作。ai_batch_edit、ai_str_replace和ai_batch_str_replace绕过此检查——它们在内部处理排序或使用与行无关的匹配。

资料来源：[server_code_edit_tools.py:_check_turn_edited]()

```python
def _check_turn_edited(project_root: Path, path: str, tool_name: str) -> dict[str, Any] | None:
    managed = hub.managed_mode.get_mode(project_root)
    if not managed.get("active"):
        return None
    session_id = str(managed.get("session_id") or "").strip()
    canonical = str(path).replace("\\", "/").strip()
```

## 内存索引工具

`server_memory_index_tools`模块管理AIDOCS的持久化记忆系统，提供代码结构索引和语义检索能力。

### 索引模式

| 模式 | 说明 | 用途 |
|-----|------|-----|
| `file` | 单文件结构 | 快速获取文件概览 |
| `context` | 会话上下文 | 基于当前会话的上下文检索 |
| `subsystem` | 子系统视图 | 理解模块间关系 |
| `symbols` | 符号索引 | 查找类、方法、枚举等 |

### 检索工具链

工具提供了一套递进式检索流程：

1. **`aidocs_bundle`** - 获取上下文束，支持结构化模式
2. **`aidocs_find`** - 符号级别搜索
3. **`aidocs_get_symbol_snippet`** - 读取符号所在代码片段
4. **`aidocs_get_method_signature`** - 获取方法签名
5. **`aidocs_get_constructor_params`** - 获取构造函数参数
6. **`aidocs_get_enum_values`** - 获取枚举值

资料来源：[claude_hook.py:understand]()

> `aidocs_bundle(path, mode="file")` (structure) → `aidocs_find(query, mode="symbols")` (find symbol) → `aidocs_get_symbol_snippet` (read it).

## 安全审计工具

### 技能扫描器（skill_scanner）

`skill_scanner.py`实现了多层次的风险模式识别系统，将风险分为四大类别：

| 风险类别 | 风险等级 | 示例模式 |
|---------|---------|---------|
| 供应链风险 | high/critical | 远程URL下载、Shell管道执行 |
| 能力声明风险 | high/medium | 文件系统操作、命令执行声明 |
| 内容注入风险 | high/medium | Base64引用、十六进制编码内容 |
| 敏感内容泄露 | high | .env文件内容、SSH配置 |

#### 供应链风险模式

```python
_SUPPLY_CHAIN_RISKS = [
    (re.compile(r"(?:curl|wget|fetch)\s+https?://"), "supply_chain", "high"),
    (re.compile(r"(?:pip|npm|cargo|go)\s+install\s+"), "supply_chain", "medium"),
    (re.compile(r"(?:npx|uvx|bunx)\s+\S+"), "supply_chain", "medium"),
    (re.compile(r"\|\s*(?:ba)?sh"), "supply_chain", "critical"),  # 管道到Shell
]
```

资料来源：[skill_scanner.py:_SUPPLY_CHAIN_RISKS]()

#### 能力声明风险模式

```python
_CAPABILITY_RISKS = [
    (re.compile(r"(?i)(?:read|write|delete|modify)\s+(?:file|directory)"), "capability", "medium"),
    (re.compile(r"(?i)(?:execute|run|spawn)\s+(?:command|shell)"), "capability", "high"),
    (re.compile(r"(?i)(?:send|post|upload)\s+data"), "capability", "high"),
]
```

### 输出守卫（output_guard）

`output_guard.py`模块负责在工具执行结果返回给AI代理前进行内容安全检查。

#### Prompt注入检测

```python
_PROMPT_INJECTION_PATTERNS = [
    ("system_override", re.compile(r"(?i)ignore\s+(?:all\s+)?(?:previous|prior)")),  # 系统覆盖尝试
    ("role_hijack", re.compile(r"(?i)you\s+are\s+now\s+(?:a\s+)?(?:different|new)")),  # 角色劫持
    ("instruction_inject", re.compile(r"(?i)<\s*(?:system|instructions?)\s*>")),  # XML标签注入
    ("delimiter_escape", re.compile(r"(?i)```\s*(?:system|instructions?)\s*\n")),  # 代码块注入
]
```

#### 敏感内容模式

```python
_SENSITIVE_CONTENT_PATTERNS = [
    ("env_file_content", re.compile(r"(?m)^[A-Z_]{3,}=\S{8,}$"), "Possible .env file content"),
    ("ssh_config", re.compile(r"(?i)(?:Host\s+\S+|IdentityFile\s+~/)"), "SSH config content"),
]
```

## Shell执行工具

`server_run_tools`模块管理Shell命令执行，是AIDOCS中最敏感的工具集之一。它与Bash策略系统集成，支持命令的允许/拒绝/气泡策略。

### 策略机制

| 策略类型 | 说明 | 优先级 |
|---------|------|-------|
| `allow` | 明确允许的命令 | 最高 |
| `deny` | 明确拒绝的命令 | 次高 |
| `bubble` | 气泡到用户确认 | 中 |
| `default` | 未匹配时的默认行为 | 最低 |

### 执行流程

```mermaid
graph TD
    A[执行Shell命令] --> B{匹配Bash策略}
    B -->|allow| C[直接执行]
    B -->|deny| D[阻止执行]
    B -->|bubble| E[气泡到用户确认]
    B -->|default| F{执行?}
    F -->|yes| C
    F -->|no| D
    C --> G[skill_scanner扫描]
    G --> H{发现风险?}
    H -->|yes| I[记录警告/阻止]
    H -->|no| J[返回结果]
```

## 项目管理工具

`server_project_admin_tools`模块处理项目级配置和层叠设置系统（Layer System）。

### 层叠配置

AIDOCS使用层叠配置系统，允许不同来源的配置按优先级合并：

| 层名称 | 优先级 | 说明 |
|-------|-------|------|
| `project` | 最高 | 项目本地配置 |
| `user` | 中 | 用户级配置 |
| `default` | 最低 | 系统默认配置 |

### 配置编辑权限

该模块还管理`allow_config_edit`设置，控制代理是否有权限通过工具调用修改AIDOCS配置：

> Allows agents to modify AIDOCS config via tool calls. The agent can change gate settings, conductor config, and other project settings.

资料来源：[apps/aidocs-dashboard/src/dashboardModals.tsx]()

## 工具使用指南

### 推荐编辑流程

Claude Hook中定义了标准化的编辑工作流程：

```
aidocs_task_begin → 
  read with aidocs_get_lines or aidocs_get_symbol_snippet → 
  write with ONE of:
    - aidocs_str_replace (small exact-match edit)
    - aidocs_edit_lines (line-range rewrite)
    - aidocs_batch_edit (multiple edits atomic, up to 20)
→ aidocs_task_complete
```

资料来源：[claude_hook.py:edit]()

### 工具签名快捷方式

在编辑前应使用以下工具获取精确的代码签名信息：

- `aidocs_get_method_signature` - 获取方法签名
- `aidocs_get_constructor_params` - 获取构造函数参数
- `aidocs_get_enum_values` - 获取枚举值
- `aidocs_trace(class, mode="css_class")` - CSS追踪
- `aidocs_schema_query(name, mode="entity")` - 数据库架构查询

## 安全考虑

### 双重编辑禁止

在同一回合内，禁止对同一文件的重叠区域进行两次写入操作。系统会检测并阻止这类操作以避免数据损坏。

### 索引刷新机制

每次文件编辑完成后，系统会自动执行`post_edit_reindex_and_grant`操作以确保后续读取不会返回过期数据。

### 危险设置确认

对于关键安全设置（如`security.enforce`、`dev.dev_mode`），系统会弹出确认对话框，要求用户明确确认更改：

> Disabling tool gates removes bash allowlist, raw tool blocking, and destructive command protection. Agents can use any tool freely.

资料来源：[apps/aidocs-dashboard/src/dashboardModals.tsx]()

---

<a id='dashboard-overview'></a>

## 仪表盘前端

### 相关页面

相关主题：[系统架构](#system-architecture)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [apps/aidocs-dashboard/src/SetupWizardPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/SetupWizardPage.tsx)
- [apps/aidocs-dashboard/src/RegistryPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/RegistryPage.tsx)
- [apps/aidocs-dashboard/src/CastleShell.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/CastleShell.tsx)
- [apps/aidocs-dashboard/src/dashboardModals.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/dashboardModals.tsx)
- [apps/aidocs-dashboard/src/TomlConfigsPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/TomlConfigsPage.tsx)
- [apps/aidocs-dashboard/src/OverviewPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/OverviewPage.tsx)
- [apps/aidocs-dashboard/src/ConductorPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/ConductorPage.tsx)
- [apps/aidocs-dashboard/src/LaneDetailPanel.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/LaneDetailPanel.tsx)
- [apps/aidocs-dashboard/src/RBACPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/RBACPage.tsx)
- [apps/aidocs-dashboard/src/BashPolicyPanel.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/BashPolicyPanel.tsx)
- [apps/aidocs-dashboard/src/SettingDetailPanel.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/SettingDetailPanel.tsx)
- [apps/aidocs-dashboard/index.html](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/index.html)
</details>

# 仪表盘前端

## 概述

AIDOCS 仪表盘前端是基于 Tauri + React + TypeScript 构建的桌面应用，为 AI 编码智能体提供项目状态监控、配置管理、工具审计和安全策略可视化界面。

### 技术栈

| 层级 | 技术 | 说明 |
|------|------|------|
| 框架 | Tauri 2.x | Rust 后端 + Web 前端混合架构 |
| 前端 | React 18 + TypeScript | 组件化 UI 开发 |
| 样式 | Tailwind CSS + 自定义 CSS 变量 | 暗色主题 "Castle" 设计系统 |
| 构建 | Vite | 快速开发与热更新 |

入口文件位于 `apps/aidocs-dashboard/index.html`，根组件挂载到 `#root` 节点。

## 架构设计

### 整体布局结构

```
┌─────────────────────────────────────────────────────────────┐
│                      CastleShell (外壳)                      │
├──────────┬──────────────────────────────────────────────────┤
│          │                                                   │
│   导航    │                  主内容区域                       │
│   侧边栏   │               (各功能页面组件)                    │
│          │                                                   │
├──────────┴──────────────────────────────────────────────────┤
│                      状态栏 (Status Bar)                     │
└─────────────────────────────────────────────────────────────┘
```

### 核心组件层次

```mermaid
graph TD
    A[App.tsx - 根组件] --> B[CastleShell - 外壳布局]
    B --> C[导航相关组件]
    B --> D[主内容区]
    B --> E[StatusBar 状态栏]
    D --> F[OverviewPage 概览]
    D --> G[ConductorPage conductor]
    D --> H[TomlConfigsPage 配置]
    D --> I[RBACPage 权限]
    D --> J[SetupWizardPage 向导]
    D --> K[RegistryPage 注册表]
```

## 主要功能模块

### 1. 设置向导 (SetupWizardPage)

设置向导引导用户完成 AIDOCS 的初始配置，包含以下步骤：

| 步骤 | 标识 | 功能描述 |
|------|------|----------|
| 欢迎页 | `welcome` | 介绍 AIDOCS 功能，入口按钮 |
| 项目选择 | `project` | 选择启用 AIDOCS 的项目文件夹 |
| 环境检测 | `env` | 检测 Node.js、主机服务（Claude/OpenAI）等 |
| 配置中 | `configure` | 执行 MCP、hooks、项目结构初始化 |
| 完成 | `done` | 显示配置结果和后续操作指引 |

资料来源：[SetupWizardPage.tsx:1-150]()

#### 进度指示器

```tsx
<div className="setup-steps">
  {SETUP_STEPS.map((s, i) => (
    <div key={s} className={`setup-step-dot ${
      step === s ? "active" : 
      i < SETUP_STEPS.indexOf(step) ? "completed" : ""
    }`} />
  ))}
</div>
```

步骤状态通过 `step` 状态变量控制，支持三种视觉状态：`active`（当前步骤）、`completed`（已完成）、默认（未完成）。

#### 环境检测面板

环境检测模块验证以下依赖项：

- **Node.js**：CLI 智能体必需
- **主机服务**：Claude AI、OpenAI API 等登录状态检测
- **MCP 可用性**：Model Context Protocol 连接状态

对于未检测到的可安装项，提供内联安装复选框：

```tsx
{!h.found && h.installable && (
  <label className="setup-install-toggle">
    <input type="checkbox" checked={installTargets.has(h.name)} 
           onChange={() => toggleTarget(h.name)} />
    Install
  </label>
)}
```

资料来源：[SetupWizardPage.tsx:45-60]()

### 2. 概览页面 (OverviewPage)

概览页面展示当前项目的运行时快照信息，包括：

- 项目状态概览
- 最近执行事件列表

#### 执行事件表格

```tsx
<div className="flat-table">
  <div className="table-head execution-table-row">
    <span>Capability</span>
    <span>Action</span>
    <span>Observed</span>
  </div>
  {snapshot.execution.recent.slice(0, 6).map((event) => (
    <div key={event.event_id} className="feed-row execution-table-row">
      <strong>{event.capability_name ?? event.event_kind}</strong>
      <span>{event.action_kind ?? event.event_kind}</span>
      <time>{event.observed_at}</time>
    </div>
  ))}
</div>
```

显示最近 6 条执行事件，每条包含能力名称、操作类型和观察时间戳。

资料来源：[OverviewPage.tsx:1-50]()

### 3. Conductor 页面 (ConductorPage)

Conductor 页面是工具调用审计的核心界面，提供以下功能：

#### 功能特性

- **Lane 可视化**：展示 conductor lanes 和阻塞原因
- **工具调用详情**：查看每次工具调用的 payload 和 diff
- **路由审计**：记录工具路由决策过程

#### 组件 Props

| 属性 | 类型 | 说明 |
|------|------|------|
| `progressPercent` | `number` | 进度百分比 |
| `conductorLanes` | `Lane[]` | conductor lanes 数组 |
| `runnableLaneIds` | `string[]` | 可运行的 lane ID 列表 |
| `blockedReasons` | `Record<string, string>` | 阻塞原因映射 |
| `recentExecution` | `ExecutionEvent[]` | 最近执行事件 |
| `configEntries` | `ConfigEntry[]` | 配置项列表 |
| `selectedSessionId` | `string` | 选中的会话 ID |
| `projectRoot` | `string` | 项目根路径 |
| `sessionId` | `string` | 当前会话 ID |

#### 工具调用详情模态框

当用户选择某次工具调用事件时，显示详细信息：

```tsx
<div className="tool-detail-row">
  <span>Action</span>
  <strong>{selectedEvent.action_kind ?? selectedEvent.event_kind}</strong>
</div>
<div className="tool-detail-diff">
  <DiffViewer original={oldText} modified={newText} />
</div>
```

支持 `old_str`/`new_str` 或 `old_content`/`new_content` 两种 payload 结构。

资料来源：[ConductorPage.tsx:1-100]()

### 4. 导航外壳 (CastleShell)

CastleShell 是仪表盘的主布局组件，负责：

- 侧边导航栏
- 顶部导航条
- 上下文轨道（Context Rail）
- 状态栏

#### 导航项类型

```tsx
type NavKey = "overview" | "conductor" | "live" | "configs" | 
              "bash_policy" | "rbac" | "registry" | "settings" | "wizard";
```

#### 状态栏组件

```tsx
type CastleStatusBarProps = {
  mcpConnected: boolean;      // MCP 连接状态
  projectName?: string;       // 项目名称
  sessionId?: string;         // 会话 ID
  activeLayer?: string;       // 活跃配置层级
  saveState?: string;         // 保存状态
};
```

状态指示器根据 `mcpConnected` 布尔值显示绿色（MCP connected）或红色（MCP disconnected）。

资料来源：[CastleShell.tsx:1-80]()

### 5. RBAC 页面 (RBACPage)

RBAC（基于角色的访问控制）页面管理权限条目和会话绑定状态。

#### 功能特性

- 查看所有权限条目列表
- 筛选 `sticky`（持久）或 `once`（一次性）权限
- 显示权限的创建时间和过期时间

#### 状态显示

| 状态 | CSS 类 | 说明 |
|------|--------|------|
| `sticky` | `rbac-state-sticky` | 持久权限，会话间保留 |
| `once` | `rbac-state-once` | 一次性权限，单次使用后失效 |

```tsx
{e.sticky ? (
  <span className="rbac-state-sticky">sticky</span>
) : (
  <span className="rbac-state-once">once</span>
)}
```

资料来源：[RBACPage.tsx:1-80]()

### 6. Bash 策略面板 (BashPolicyPanel)

Bash 策略面板管理 shell 命令的允许/拒绝规则。

#### 策略统计

| 统计项 | 说明 |
|--------|------|
| `allowEff` | 允许的命令数 |
| `denyEff` | 拒绝的命令数 |
| `bubbleEff` | 冒泡处理的命令数 |
| `modifiedAtActive` | 在当前活跃层级修改的配置数 |

#### 过滤控件

```tsx
<div className="settings-filter-chips">
  {(["all", "allow", "deny", "bubble", "modified"] as const).map((f) => (
    <button key={f} type="button" 
            className={"filter-chip" + (filter === f ? " is-active" : "")}>
      {f}
    </button>
  ))}
</div>
```

支持按名称匹配过滤和按类型过滤两种方式。

资料来源：[BashPolicyPanel.tsx:1-60]()

### 7. TOML 配置页面 (TomlConfigsPage)

TOML 配置页面提供静态配置的可视化管理。

#### 配置分类

| 分类 | 标识 | 说明 |
|------|------|------|
| 工具门控 | `tool_gates` | 工具调用权限控制 |
| Bash 策略 | `bash_policy` | Shell 命令策略 |
| 操作钩子 | `gate_messages` | Action hooks 消息模板 |
| 语言描述符 | `language_descriptors` | 编程语言定义 |

#### 文档表格

```tsx
<div className="flat-table">
  <div className="table-head toml-table-row">
    <span>Target</span>
    <span>Active</span>
    <span>Context</span>
  </div>
  {filteredDocuments.map((document) => (
    <button key={document.path} type="button" 
            className={document.path === selectedTomlPath ? "table-row ... is-selected" : "table-row ..."}>
      <span title={document.path}>{document.target}</span>
      <span className="toggle-cell">
        <span className={isDocumentActive(document) ? "toggle is-on" : "toggle"}>
          <span className="toggle-knob" />
        </span>
      </span>
    </button>
  ))}
</div>
```

资料来源：[TomlConfigsPage.tsx:1-80]()

### 8. 注册表页面 (RegistryPage)

注册表页面用于搜索和浏览 MCP 服务器列表。

#### 搜索结果卡片

每个 MCP 服务器卡片显示：

- 服务器名称
- 传输方式 (`transport`)
- 启动命令 (`command`)
- 安装命令（支持多种格式）

```tsx
const installText = typeof firstCmd === "string" 
  ? firstCmd 
  : typeof firstCmd === "object" && firstCmd 
    ? String((firstCmd as Record<string, string>).command ?? "") 
    : "";
```

资料来源：[RegistryPage.tsx:1-50]()

### 9. 设置详情面板 (SettingDetailPanel)

设置详情面板展示单个配置项的完整信息和来源追踪。

#### 功能特性

- 显示配置的当前值、默认值和来源层级
- 支持查看每个叶子节点（leaf）的来源
- 按层级着色的 pill 标签显示

#### 来源追踪表格

```tsx
<details className="mb-4">
  <summary>Per-leaf origin ({Object.keys(entry.origin).length} leaves)</summary>
  <table className="w-full font-mono text-[10px]">
    <tbody>
      {Object.entries(entry.origin)
        .sort(([a], [b]) => a.localeCompare(b))
        .map(([leafPath, leafLayer]) => (
          <tr key={leafPath}>
            <td className="px-2 py-1 text-castle-mute">{leafPath}</td>
            <td className="px-2 py-1 text-right">
              <CastlePill tone={LAYER_TONE[leafLayer]}>
                {leafLayer}
              </CastlePill>
            </td>
          </tr>
        ))}
    </tbody>
  </table>
</details>
```

资料来源：[SettingDetailPanel.tsx:1-80]()

### 10. 模态组件 (dashboardModals)

#### 安全变更确认模态

当用户尝试修改敏感配置时，显示确认对话框：

```tsx
{settingPath === "dev.dev_mode" && "Enables editing AIDOCS MCP server source files."}
{settingPath === "security.allow_config_edit" && "Allows agents to modify AIDOCS config via tool calls."}
{settingPath === "security.enforce" && "Disabling tool gates removes bash allowlist..."}
```

#### 加载遮罩

```tsx
<div className="app-overlay" role="status" aria-live="polite">
  <div className="app-overlay-panel">
    <div className="overlay-spinner" aria-hidden="true" />
    <strong>Loading runtime snapshot</strong>
    <span>Refreshing project, session, and settings state.</span>
  </div>
</div>
```

资料来源：[dashboardModals.tsx:1-80]()

### 11. Lane 详情面板 (LaneDetailPanel)

Lane 详情面板展示特定 lane 的详细信息和关联事件。

#### 事件列表组件

```tsx
<div className="flex items-start gap-2 rounded-md bg-black/25 px-2 py-1.5 text-[11px]">
  <time className="shrink-0 font-mono text-castle-mute">
    {(e.observed_at || "").slice(11, 19)}
  </time>
  <div className="min-w-0 flex-1">
    <div className="truncate font-bold text-slate-200">
      {e.capability_name || e.event_kind}
    </div>
    {e.action_kind && (
      <div className="text-castle-mute">{e.action_kind}</div>
    )}
  </div>
  <CastlePill tone={/* 状态相关颜色 */}>
    {e.status}
  </CastlePill>
</div>
```

状态颜色映射：

| 状态 | 颜色基调 |
|------|----------|
| `applied`, `allowed` | `ok` (绿色) |
| `refused`, `blocked` | `danger` (红色) |
| 其他 | `muted` (灰色) |

资料来源：[LaneDetailPanel.tsx:1-60]()

## 数据流架构

### 状态管理流程

```mermaid
graph LR
    A[仪表盘启动] --> B[加载 Runtime Snapshot]
    B --> C[解析项目配置]
    C --> D[渲染导航树]
    D --> E[按需加载页面数据]
    E --> F[WebSocket 实时更新]
    F --> G[状态同步到 UI]
```

### API 交互模式

仪表盘通过 Tauri 命令与后端通信：

```tsx
invoke("open_url", { url }).catch(() => 
  window.open(url, "_blank", "noopener,noreferrer")
);
```

主要 API 调用包括：

- `open_url`：在浏览器中打开 URL
- 项目配置读写
- 会话状态查询
- 配置变更推送

## 设计系统

### Castle 主题色板

| CSS 变量 | 用途 |
|----------|------|
| `--castle-line` | 边框线颜色 |
| `--castle-mute` | 次要文本颜色 |
| `--castle-allow` | 允许/成功状态 |
| `--castle-deny` | 拒绝/错误状态 |
| `bg-black/25` | 面板背景透明度 |

### 通用样式类

| 类名 | 用途 |
|------|------|
| `flat-table` | 扁平化表格容器 |
| `section-label` | 分区标题标签 |
| `action-button` | 操作按钮基础样式 |
| `toggle` / `toggle is-on` | 开关组件状态 |

## 总结

AIDOCS 仪表盘前端采用组件化架构，通过 CastleShell 提供统一的布局框架，各功能页面（概览、Conductor、配置、权限等）作为子组件按需渲染。状态管理依赖 Tauri 的命令调用和 React 的本地状态，实时更新通过 WebSocket 实现。设计系统采用暗色 "Castle" 主题，提供一致的视觉体验和清晰的状态反馈。

---

<a id='host-integration'></a>

## 宿主代理集成

### 相关页面

相关主题：[系统架构](#system-architecture), [MCP运行时](#mcp-runtime), [安全门控系统](#security-gates)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [apps/aidocs-dashboard/src/ConductorPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/ConductorPage.tsx)
- [apps/aidocs-dashboard/src/SetupWizardPage.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/SetupWizardPage.tsx)
- [apps/aidocs-dashboard/src/dashboardModals.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/dashboardModals.tsx)
- [apps/aidocs-dashboard/src/App.tsx](https://github.com/cristian1991/AIDOCS/blob/main/apps/aidocs-dashboard/src/App.tsx)
- [mcp/server/aidocs_mcp/skill_scanner.py](https://github.com/cristian1991/AIDOCS/blob/main/mcp/server/aidocs_mcp/skill_scanner.py)
</details>

# 宿主代理集成

AIDOCS 的宿主代理集成（Host Agent Integration）模块是连接 AI 编码代理（如 Claude、Codex）与 AIDOCS 持久化记忆系统的核心桥梁。该模块负责代理身份识别、运行时上下文注入、能力路由配置以及安全策略执行，确保 AI 代理能够在多项目、多会话环境中保持一致的上下文感知能力。

## 系统架构概览

AIDOCS 采用分层架构设计，将宿主代理集成划分为前端展示层、业务编排层和安全策略层三个主要部分。前端展示层负责可视化配置界面，包括 Conductor 页面、设置详情面板和安装向导；业务编排层处理代理路由、能力声明和执行审计；安全策略层则通过能力风险扫描和配置门控确保代理行为安全可控。

```mermaid
graph TD
    subgraph 前端展示层
        CP[ConductorPage 导体页面]
        SW[SetupWizardPage 安装向导]
        SP[SettingDetailPanel 设置详情]
        DM[dashboardModals 安全确认弹窗]
    end
    
    subgraph 业务编排层
        CR[Conductor 导体编排器]
        RM[路由管理器]
        AU[审计追踪]
    end
    
    subgraph 安全策略层
        SS[skill_scanner 技能扫描器]
        GP[门控策略]
        RB[RBAC 权限控制]
    end
    
    subgraph 宿主代理
        CA[Claude 代理]
        OX[OpenAI Codex]
        OC[OpenCode]
    end
    
    CP --> CR
    SW --> CR
    SP --> GP
    DM --> GP
    CR --> RM
    CR --> AU
    RM --> SS
    SS --> GP
    GP --> RB
    CA --> CR
    OX --> CR
    OC --> CR
```

## 导体配置与后端路由

### 后端类型定义

Conductor 页面提供了对多个 AI 后端的统一配置接口。系统支持三种主要后端类型，分别对应不同的 AI 服务提供商：

| 后端类型 | 说明 | 支持模型 |
|---------|------|---------|
| `claude` | Anthropic Claude 系列 | claude-3-5-sonnet, claude-3-opus 等 |
| `codex` | OpenAI Codex / GPT-4 | gpt-4-turbo, gpt-4o 等 |
| `opencode` | OpenCode 兼容后端 | 自定义部署 |

资料来源：[apps/aidocs-dashboard/src/ConductorPage.tsx:conductorDefaults]()

导体配置通过 `configEntries` 数组管理，每个配置项包含路径（path）、当前值（current_value）等属性。配置项的读取采用防御性编程模式，使用可选链和空值合并确保在配置缺失时系统仍能正常运行：

```typescript
const conductorDefaults = useMemo(() => {
  const entry = (path: string) => configEntries?.find((item) => item.path === path);
  return {
    backend: ((entry("conductor.backend")?.current_value as string | undefined) ?? "claude") as "claude" | "codex" | "opencode",
    models: {
      claude: String(entry("conductor.claude_model")?.current_value ?? ""),
      codex: String(entry("conductor.codex_model")?.current_value ?? ""),
      opencode: String(entry("conductor.opencode_model")?.current_value ?? "")
    }
  };
}, [configEntries]);
```

### 路由配置管理

Conductor 的路由配置存储在 `routing` 状态中，采用 `Record<string, RouteConfig>` 的数据结构，其中键为路由标识符，值为路由配置对象。路由状态通过 `useState` 钩子管理，支持动态更新和错误处理：

```typescript
const [routing, setRouting] = useState<Record<string, RouteConfig>>({});
const [routingOpen, setRoutingOpen] = useState(false);
const [routingError, setRoutingError] = useState<string | null>(null);
```

## 能力声明与执行追踪

### 工具调用事件模型

当宿主代理调用工具时，Conductor 页面会记录完整的事件信息。事件数据结构包含能力名称（capability_name）、动作类型（action_kind）、时间戳（observed_at）以及关联的负载信息：

```typescript
interface ToolCallEvent {
  event_id: string;
  capability_name?: string;
  action_kind?: string;
  event_kind: string;
  observed_at: string;
  payload?: Record<string, unknown>;
}
```

资料来源：[apps/aidocs-dashboard/src/ConductorPage.tsx:toolCallEvent]()

### 差异对比与负载展示

对于包含文本变更的事件，系统提供差异对比视图（DiffViewer）来直观展示旧内容与新内容的变更：

```typescript
const oldText = typeof payload.old_str === "string" 
  ? payload.old_str 
  : typeof payload.old_content === "string" 
    ? payload.old_content 
    : null;
const newText = typeof payload.new_str === "string" 
  ? payload.new_str 
  : typeof payload.new_content === "string" 
    ? payload.new_content 
    : null;

{oldText && newText 
  ? <div className="tool-detail-diff">
      <div className="section-label">Diff</div>
      <DiffViewer original={oldText} modified={newText} />
    </div>
  : null
}
```

资料来源：[apps/aidocs-dashboard/src/ConductorPage.tsx:DiffViewer]()

当事件不包含文本差异但有其他负载数据时，系统以 JSON 格式展示完整的负载内容：

```typescript
{!oldText && !newText && payload && Object.keys(payload).length > 0 
  ? <div className="tool-detail-code">
      <div className="section-label">Payload</div>
      <pre>{JSON.stringify(payload, null, 2)}</pre>
    </div>
  : null
}
```

## 能力风险扫描

### 风险模式定义

skill_scanner 模块定义了针对代理能力声明的风险扫描规则。系统通过正则表达式匹配来识别潜在的危险能力声明，并根据严重程度分为 critical、high、medium、low 四个等级：

| 类别 | 严重程度 | 典型模式 | 说明 |
|------|---------|---------|------|
| `capability` | medium | 文件系统操作声明 | read/write/delete file 等 |
| `capability` | high | 命令执行声明 | execute/run/spawn command 等 |
| `capability` | high | 出站数据传输 | send/post/upload data 等 |
| `capability` | critical | 数据库操作 | database 操作声明 |

资料来源：[mcp/server/aidocs_mcp/skill_scanner.py:_CAPABILITY_RISKS]()

### 供应链安全扫描

除能力声明外，skill_scanner 还包含供应链安全相关的扫描规则，用于检测代理脚本中可能存在的供应链攻击风险：

```python
_CAPABILITY_RISKS: list[tuple[re.Pattern[str], str, str, str]] = [
    # 远程包执行
    (re.compile(r"(?:npx|uvx|bunx)\s+\S+"), "supply_chain", "medium", "Remote package execution"),
    # 外部 URL 引用
    (re.compile(r"https?://(?!(?:github\.com|docs\.|api\.|registry\.))[^\s\"'<>]{20,}"), 
     "supply_chain", "low", "External URL reference"),
    # 管道到 shell
    (re.compile(r"\|\s*(?:ba)?sh"), "supply_chain", "critical", "Pipe to shell execution"),
]
```

资料来源：[mcp/server/aidocs_mcp/skill_scanner.py:_SUPPLY_CHAIN_RISKS]()

## 安全策略与配置门控

### 关键配置项

AIDOCS 提供了多个与宿主代理集成相关的安全配置项，通过安全确认弹窗进行保护：

| 配置项 | 说明 | 风险提示 |
|-------|------|---------|
| `dev.dev_mode` | 开发者模式 | 允许编辑 AIDOCS MCP 服务器源码 |
| `security.allow_config_edit` | 允许配置编辑 | 允许代理通过工具调用修改配置 |
| `security.enforce` | 强制安全策略 | 禁用后移除 bash 白名单和破坏性命令保护 |

资料来源：[apps/aidocs-dashboard/src/dashboardModals.tsx:SecurityConfirmModal]()

### 安全确认流程

当用户尝试修改敏感配置项时，系统会弹出确认对话框，详细说明变更的潜在风险：

```typescript
export function SecurityConfirmModal({ settingPath, close, confirm }) {
  return (
    <div className="modal-backdrop" onClick={close}>
      <div className="modal-panel danger-modal" onClick={(e) => e.stopPropagation()}>
        <div className="page-header modal-header">
          <div>
            <div className="section-label">Confirm Security Change</div>
            <h3>{settingPath}</h3>
          </div>
        </div>
        <p className="warning-text modal-warning-copy">
          {settingPath === "dev.dev_mode" && 
            "Enables editing AIDOCS MCP server source files. Only use when actively developing AIDOCS."}
          {settingPath === "security.allow_config_edit" && 
            "Allows agents to modify AIDOCS config via tool calls."}
          {settingPath === "security.enforce" && 
            "Disabling tool gates removes bash allowlist, raw tool blocking, and destructive command protection."}
        </p>
      </div>
    </div>
  );
}
```

## 安装向导与平台认证

### 主机检测流程

SetupWizardPage 负责引导用户完成 AIDOCS 的初始配置。安装向导会检测系统中已安装的 AI 平台主机，并为未安装的平台提供安装选项：

```typescript
{detectResult.hosts.map((h) => (
  <div key={h.name} 
    className={`setup-check ${h.found 
      ? (h.authenticated === false ? "warn" : "pass") 
      : "missing"}`}>
    <span className="setup-check-icon">
      {h.found ? (h.authenticated === false ? "!" : "+") : "-"}
    </span>
    <span>
      {h.name}
      {h.found && h.authenticated === false ? " (not signed in)" : ""}
    </span>
  </div>
))}
```

资料来源：[apps/aidocs-dashboard/src/SetupWizardPage.tsx:hostDetection]()

### 平台认证流程

对于已安装但未认证的主机，向导提供一键跳转认证功能：

```typescript
<button onClick={() => {
  const url = h.name.includes("Claude") 
    ? "https://claude.ai" 
    : "https://platform.openai.com/api-keys";
  invoke("open_url", { url }).catch(() => 
    window.open(url, "_blank", "noopener,noreferrer")
  );
}}>Sign in</button>
```

### 配置完成清单

安装完成后，向导展示详细的配置结果，包括 MCP 配置路径、钩子注册路径以及已安装的平台列表：

```typescript
<div className="setup-checklist">
  <div className="setup-check pass">
    <span className="setup-check-icon">+</span>
    <span>MCP configured</span>
    <span className="setup-check-detail">{configResult.mcp_path}</span>
  </div>
  <div className="setup-check pass">
    <span className="setup-check-icon">+</span>
    <span>Hooks registered</span>
    <span className="setup-check-detail">{configResult.hooks_path}</span>
  </div>
  {installResult && installResult.installed.length > 0 && (
    <div className="setup-check pass">
      <span className="setup-check-icon">+</span>
      <span>Installed: {installResult.installed.join(", ")}</span>
    </div>
  )}
</div>
```

## 页面懒加载架构

### 动态导入配置

AIDOCS Dashboard 采用 React 的 `lazy` 和 `Suspense` 机制实现页面级代码分割，减少初始加载体积。代理相关的页面组件按需加载：

```typescript
const ConductorPage = lazy(() => 
  import("./ConductorPage").then((module) => ({ 
    default: module.ConductorPage 
  }))
);
const ConductorAgentsPage = lazy(() => 
  import("./ConductorAgentsPage").then((module) => ({ 
    default: module.ConductorAgentsPage 
  }))
);
const ExecutionPage = lazy(() => 
  import("./ExecutionPage").then((module) => ({ 
    default: module.ExecutionPage 
  }))
);
const MonitoringPage = lazy(() => 
  import("./MonitoringPage").then((module) => ({ 
    default: module.MonitoringPage 
  }))
);
```

资料来源：[apps/aidocs-dashboard/src/App.tsx:lazyImports]()

### 路由与状态管理

主应用根据当前激活的导航键（NavKey）动态渲染对应的页面组件。状态管理通过 `useState` 和 `useReducer` 实现，确保导航状态与页面渲染的同步：

```typescript
const [activeNav, setActiveNav] = useState<NavKey>("overview");
const [isLoading, setIsLoading] = useState(false);
const [runtimeSnapshot, setRuntimeSnapshot] = useState<RuntimeSnapshot | null>(null);
```

## 执行流程图

```mermaid
sequenceDiagram
    participant U as 用户
    participant SW as SetupWizard
    participant MC as MCP Server
    participant CA as Claude Agent
    participant CR as Conductor
    
    U->>SW: 选择项目路径
    SW->>MC: 检测主机环境
    MC-->>SW: 返回检测结果
    U->>SW: 安装/认证平台
    U->>SW: 确认配置
    SW->>MC: 应用 MCP 配置
    MC-->>SW: 配置完成
    Note over SW,MC: 安装向导完成
    
    CA->>CR: 工具调用
    CR->>MC: 路由审计
    MC-->>CR: 审计结果
    CR->>CR: 风险扫描
    alt 高风险操作
        CR-->>U: 安全确认弹窗
        U->>CR: 确认/取消
    end
    CR-->>CA: 执行结果
```

## 总结

宿主代理集成是 AIDOCS 系统的核心功能模块，它通过多层架构实现了 AI 代理与项目持久化系统的无缝连接。该模块的主要特性包括：

- **多后端支持**：统一管理 Claude、Codex、OpenCode 等多种 AI 后端
- **动态路由**：支持基于配置的能力路由和执行审计
- **安全门控**：通过能力风险扫描和安全确认弹窗防止危险操作
- **平台认证**：集成化的安装向导简化 AI 平台配置流程
- **代码分割**：采用懒加载机制优化前端性能

通过这些机制，AIDOCS 能够为 AI 编码代理提供一致的上下文感知能力和安全可控的执行环境。

---

---

## Doramagic 踩坑日志

项目：cristian1991/AIDOCS

摘要：发现 9 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：配置坑 - 可能修改宿主 AI 配置。

## 1. 配置坑 · 可能修改宿主 AI 配置

- 严重度：medium
- 证据强度：source_linked
- 发现：项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。
- 对用户的影响：安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。
- 建议检查：列出会写入的配置文件、目录和卸载/回滚步骤。
- 防护动作：涉及宿主配置目录时必须给回滚路径，不能只给安装命令。
- 证据：capability.host_targets | github_repo:1153124183 | https://github.com/cristian1991/AIDOCS | host_targets=mcp_host, claude, claude_code, cursor

## 2. 能力坑 · 能力判断依赖假设

- 严重度：medium
- 证据强度：source_linked
- 发现：README/documentation is current enough for a first validation pass.
- 对用户的影响：假设不成立时，用户拿不到承诺的能力。
- 建议检查：将假设转成下游验证清单。
- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。
- 证据：capability.assumptions | github_repo:1153124183 | https://github.com/cristian1991/AIDOCS | README/documentation is current enough for a first validation pass.

## 3. 维护坑 · 维护活跃度未知

- 严重度：medium
- 证据强度：source_linked
- 发现：未记录 last_activity_observed。
- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。
- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。
- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。
- 证据：evidence.maintainer_signals | github_repo:1153124183 | https://github.com/cristian1991/AIDOCS | last_activity_observed missing

## 4. 安全/权限坑 · 下游验证发现风险项

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：下游已经要求复核，不能在页面中弱化。
- 建议检查：进入安全/权限治理复核队列。
- 防护动作：下游风险存在时必须保持 review/recommendation 降级。
- 证据：downstream_validation.risk_items | github_repo:1153124183 | https://github.com/cristian1991/AIDOCS | no_demo; severity=medium

## 5. 安全/权限坑 · 存在评分风险

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：风险会影响是否适合普通用户安装。
- 建议检查：把风险写入边界卡，并确认是否需要人工复核。
- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。
- 证据：risks.scoring_risks | github_repo:1153124183 | https://github.com/cristian1991/AIDOCS | no_demo; severity=medium

## 6. 安全/权限坑 · 来源证据：v2.0.0 — Unified AccessGate & Agent Enforcement

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v2.0.0 — Unified AccessGate & Agent Enforcement
- 对用户的影响：可能阻塞安装或首次运行。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_2ef38d1286d44ae9b266a98267a2d782 | https://github.com/cristian1991/AIDOCS/releases/tag/v2.0.0 | 来源类型 github_release 暴露的待验证使用条件。

## 7. 安全/权限坑 · 来源证据：v2.0.3 — Token Tracking & Dashboard Fixes

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v2.0.3 — Token Tracking & Dashboard Fixes
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_5428bd20316b4bfa987b009350fc138b | https://github.com/cristian1991/AIDOCS/releases/tag/v2.0.3 | 来源类型 github_release 暴露的待验证使用条件。

## 8. 维护坑 · issue/PR 响应质量未知

- 严重度：low
- 证据强度：source_linked
- 发现：issue_or_pr_quality=unknown。
- 对用户的影响：用户无法判断遇到问题后是否有人维护。
- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。
- 防护动作：issue/PR 响应未知时，必须提示维护风险。
- 证据：evidence.maintainer_signals | github_repo:1153124183 | https://github.com/cristian1991/AIDOCS | issue_or_pr_quality=unknown

## 9. 维护坑 · 发布节奏不明确

- 严重度：low
- 证据强度：source_linked
- 发现：release_recency=unknown。
- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。
- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。
- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。
- 证据：evidence.maintainer_signals | github_repo:1153124183 | https://github.com/cristian1991/AIDOCS | release_recency=unknown

<!-- canonical_name: cristian1991/AIDOCS; human_manual_source: deepwiki_human_wiki -->
