# VLCode Lite — 全模块规格说明 v0.2.0

> 共 84 个 JS 模块，200+ 函数/方法，127 个 HTTP 端点，34 个 AI 工具
> LLM 模式：仅 Claude CLI（Team 订阅），无 API Key

---

## 目录结构总览

```
src/
├── app.js                          # 主入口类
├── core/                           # 核心引擎（8 个模块）
│   ├── orchestrator.js             #   Agent 循环
│   ├── llm-provider.js             #   Claude CLI 适配器
│   ├── context-manager.js          #   上下文窗口管理
│   ├── prompt-assembler.js         #   系统提示词组装
│   ├── session-pool.js             #   多会话隔离
│   ├── session.js                  #   会话持久化
│   ├── tool-registry.js            #   工具注册中心
│   ├── cli.js                      #   终端界面
│   └── hooks.js                    #   Pre/Post 钩子
├── server/                         # HTTP 服务层（14 个模块）
│   ├── server.js                   #   WebServer 主类
│   ├── sse.js                      #   SSE 事件总线
│   ├── helpers.js                  #   Cookie / 项目初始化
│   ├── index.js                    #   Re-export
│   └── routes/                     #   11 个路由文件
│       ├── chat.js                 #     AI 对话
│       ├── files.js                #     文件管理
│       ├── project.js              #     项目元数据
│       ├── workspace.js            #     多工作区
│       ├── compile.js              #     编译/测试
│       ├── workflow.js             #     工作流执行
│       ├── cloud.js                #     云端认证/同步
│       ├── intelligence.js         #     符号/影响分析
│       ├── tools.js                #     MCP 工具代理
│       ├── conversation.js         #     会话管理
│       └── misc.js                 #     健康检查/杂项
├── tools/                          # AI 工具（34 个）
│   ├── index.js                    #   工具注册入口
│   ├── read-file.js                #   ReadFile
│   ├── edit-file.js                #   EditFile
│   ├── write-file.js               #   WriteFile
│   ├── bash.js                     #   Bash
│   ├── grep.js                     #   Grep
│   ├── glob.js                     #   Glob
│   ├── todo-write.js               #   TodoWrite
│   ├── sub-agent.js                #   SubAgent
│   ├── ask-user.js                 #   AskUserQuestion
│   ├── memory.js                   #   Memory
│   ├── tool-search.js              #   ToolSearch
│   ├── workflow-run.js             #   WorkflowRun
│   ├── workspace-api.js            #   WorkspaceAPI
│   ├── component-fetch.js          #   ComponentFetch
│   ├── browser-inspect.js          #   BrowserInspect
│   ├── doc-center.js               #   DocCenter
│   ├── vl-generate.js              #   VLGenerate
│   ├── vl-adjust.js                #   VLAdjust
│   ├── vl-compile.js               #   VLCompile
│   ├── vl-lint.js                  #   VLLint
│   ├── vl-parse.js                 #   VLParse
│   ├── vl-syntax-ref.js            #   VLSyntaxRef
│   ├── vl-validate.js              #   VLValidate
│   ├── vl-metadata.js              #   VLMetadata
│   ├── vl-component-test.js        #   VLComponentTest
│   ├── vl-symbols.js               #   VLSymbols
│   ├── vl-impact.js                #   VLImpact
│   ├── vl-edit-section.js          #   VLEditSection
│   ├── vl-autofix.js               #   VLAutoFix
│   ├── vl-cascade-edit.js          #   VLCascadeEdit
│   ├── meta-diff.js                #   MetaDiff
│   ├── section-diff.js             #   SectionDiff
│   ├── vl-meta-test.js             #   VLMetaTest
│   ├── autotest-pipeline.js        #   AutoTestPipeline
│   └── autotest/                   #   自动测试子模块（7 个）
│       ├── test-generator.js
│       ├── test-runner.js
│       ├── test-evaluator.js
│       ├── auto-fixer.js
│       ├── case-parser.js
│       ├── report-generator.js
│       ├── workflow-builder.js
│       └── workflow-runner.js
├── vl/                             # VL 语言引擎（15 个模块）
│   ├── project-context.js          #   项目扫描/检测
│   ├── symbol-index.js             #   符号索引
│   ├── smart-context.js            #   智能上下文加载
│   ├── blueprint-context.js        #   蓝图上下文
│   ├── impact-analyzer.js          #   影响分析
│   ├── auto-fix.js                 #   自动修复
│   ├── file-cache.js               #   文件缓存
│   ├── file-watcher.js             #   文件监听
│   ├── metadata-extractor.js       #   ProjectMeta 提取
│   ├── meta-diff.js                #   Meta 差异比较
│   ├── section-diff.js             #   Section 差异合并
│   ├── generation-pipeline.js      #   8-Agent 生成管线
│   ├── workflow-generation-pipeline.js # 工作流驱动生成
│   ├── workflow-executor.js        #   工作流引擎桥接
│   └── meta-test-generator.js      #   测试骨架生成
├── engine/                         # 本地引擎（3 个模块）
│   ├── local-workspace.js          #   本地 Workspace API
│   ├── sse-parser.js               #   SSE 流解析
│   └── workflow-engine-manager.js  #   Go 引擎管理
├── cloud/                          # 云端客户端
│   └── cloud-api.js                #   VisualLogic 云 API
├── mcp/                            # MCP 协议
│   └── mcp-server.js               #   MCP stdio 代理
├── data/                           # 静态数据
│   ├── versions.js                 #   版本常量
│   ├── doc-paths.js                #   DocCenter 路径注册表
│   ├── default-theme.js            #   默认主题
│   └── vl-syntax.md                #   VL Bible（打包）
└── utils/                          # 工具函数
    ├── config.js                   #   配置加载
    └── zip-extract.js              #   ZIP 解压
```

---

## 一、主入口

### `src/app.js` — VLCodeLite

主应用类，协调所有组件的初始化和启动。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor()` | — | 初始化所有模块属性为 null |
| `run(args)` | `args: string[]` | 主入口：加载配置 → 初始化 16 个组件 → 路由到 CLI 或 Web 模式 |
| `printInitStats(initTimeMs, sessionResumed)` | `number, boolean` | 显示初始化统计（符号数、蓝图、LLM Provider、耗时） |
| `startWebMode(initTime)` | `number` | 启动 Express 服务器 + 文件监听 + SSE 广播 |
| `startCLIMode()` | — | 启动交互式 CLI REPL |

---

## 二、核心引擎 `src/core/`

### `orchestrator.js` — AgentOrchestrator

核心 Agent 循环：管理 LLM 交互、工具执行、流式输出、计划模式、上下文管理。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor({config, toolRegistry, contextManager, promptAssembler, cli, projectContext})` | object | 初始化：技能系统、计划模式、权限系统 |
| `processUserMessage(userInput)` | `string` | 同步消息处理（CLI 模式） |
| `processUserMessageStreaming(userInput, callbacks, options)` | `string, object, object` | 流式消息处理（Web 模式），支持 onText/onToolCall/onToolResult/onTodo/onDone/onError 回调 |
| `warmUp()` | — | 预缓存系统提示词和工具 schema |
| `_hasCompileErrors()` | — | 检查最近 30 分钟内的编译错误 |
| `_fixOrphanedToolUse()` | — | 修复 tool_use/tool_result 配对，防止 API 400 |
| `_scheduleRescan()` | — | 防抖项目重扫（1200ms） |
| `_checkMetaDrift(filePath)` | `string` | VL 文件写入后检查 Meta 漂移 |

**辅助函数：**
- `withRetry(fn, { maxRetries, onRetry })` — 指数退避重试（处理 429/529/5xx）

---

### `llm-provider.js` — CLIProvider

Claude CLI 适配器，使用 Team 订阅（零额外成本）。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor(config)` | `object` | 初始化 CLI provider（model、MCP 端口） |
| `_create(params)` | `object` | 非流式调用，返回 Anthropic 兼容响应 |
| `_stream(params)` | `object` | 流式调用，返回 async iterable + finalMessage() + abort() |
| `_callCLI(params)` | `object` | 执行 `claude --print`，自动生成 MCP 配置 |
| `_extractSystemText(system)` | `string\|array` | 从 Anthropic 系统提示格式提取纯文本 |
| `_serializeMessages(messages)` | `array` | 转换消息数组为 CLI stdin 格式 |
| `_exec(args, stdinData, timeout)` | `string[], string, number` | spawn claude CLI 进程 |

**工厂函数：**
- `createProvider(config)` → `CLIProvider` — 始终返回 CLI provider
- `isCLIAvailable()` → `Promise<boolean>` — 检查 claude CLI 是否可用

---

### `context-manager.js` — ContextManager

对话消息历史管理、token 跟踪、智能压缩。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor(config)` | `object` | 初始化上下文窗口（默认 200K tokens） |
| `addUserMessage(content)` | `string\|array` | 添加用户消息 |
| `addAssistantMessage(content)` | `string\|array` | 添加助手消息 |
| `addToolResult(toolUseId, content)` | `string, string\|object` | 添加工具结果（合并同轮 tool_result） |
| `getMessages()` | — | 返回过滤、合并、验证后的消息列表（带 cache_control） |
| `updateFromUsage(usage)` | `object` | 从 API 响应更新真实 token 计数 |
| `needsCompression()` | — | 是否需要压缩（>85% 窗口） |
| `compress(client)` | `object` | 使用 Haiku 模型智能压缩（保留锚点轮次） |
| `toggleExclude(startIdx, endIdx)` | `number, number?` | 切换消息排除状态 |
| `getUsage()` | — | 返回使用统计 |
| `getCompressionStats()` | — | 返回压缩次数和节省 token 数 |

---

### `prompt-assembler.js` — PromptAssembler

动态构建系统提示词，4 段缓存策略。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor(config, projectContext)` | `object, object` | 初始化 |
| `buildSystemPrompt()` | — | 构建系统提示词（VL Bible + 指令手册 + 动态上下文） |
| `buildInstructionManual()` | — | 构建核心规则、VL 规则、工具决策树 |
| `buildDynamicContext()` | — | 构建每轮动态上下文（日期、目录、项目信息、编译错误） |
| `buildInitialReminders()` | — | 首条消息的 system-reminder（项目配置、规则、记忆、文档） |
| `buildToolReminder(toolName, context)` | `string, object` | 工具执行后的条件性提醒 |
| `buildSubAgentPrompt(agentType)` | `string` | 子 Agent 系统提示词 |
| `trackCacheStats(usage)` | `object` | 跟踪缓存命中率 |
| `_loadVLBible()` | — | 加载 VL Bible（项目 → 全局 → 打包） |
| `_loadMemory()` | — | 加载 MEMORY.md（项目 + 全局） |

---

### `session-pool.js` — SessionPool

Per-chatId 会话隔离，轻量多租户。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor(shared)` | `object` | 初始化共享模块，启动 5 分钟 GC |
| `getOrCreate(chatId)` | `string\|number` | 获取或创建会话 |
| `get(chatId)` | `string\|number` | 获取已有会话（不创建） |
| `delete(chatId)` | `string\|number` | 删除会话 |
| `list()` | — | 列出所有活跃会话 |
| `findByName(name)` | `string` | 按会话名查找 |
| `destroy()` | — | 停止 GC 定时器 |

**GC 规则：** 空闲 >30 分钟自动回收。

---

### `session.js` — SessionManager

会话持久化：保存/恢复对话状态、todo、决策、文件变更。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor(workDir)` | `string` | 初始化（`.vl-code/sessions/`） |
| `init()` | — | 创建会话目录 |
| `startOrResume()` | — | 恢复最近会话（<24h）或创建新会话 |
| `save(extra)` | `object?` | 保存当前会话 |
| `addDecision(decision)` | `object` | 记录关键决策（保留最近 50 条） |
| `addFileChange(filePath, changeType)` | `string, string` | 记录文件变更（保留最近 200 条） |
| `saveTodos(todos)` | `array` | 更新 todo 列表 |
| `getRecoveryContext()` | — | 返回恢复上下文（摘要、todo、决策、变更） |
| `saveConversation(convId, data)` | `string, object` | 保存完整对话 |
| `listConversations()` | — | 列出已保存对话 |

---

### `tool-registry.js` — ToolRegistry

工具注册、schema 管理、延迟加载、执行超时保护。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor()` | — | 初始化工具映射 |
| `register(name, {description, parameters, execute, deferred})` | `string, object` | 注册工具（可选延迟加载） |
| `get(name)` | `string` | 获取工具定义 |
| `execute(name, input)` | `string, object` | 执行工具（30s 超时，Bash 60s，长任务 300s） |
| `getToolSchemas()` | — | 返回 Anthropic 格式 schema（跳过未激活的延迟工具） |
| `activateDeferred(name)` | `string` | 激活延迟工具 |
| `listTools()` | — | 列出所有工具名 |
| `listDeferredTools()` | — | 列出未激活的延迟工具 |
| `listActiveTools()` | — | 列出活跃工具名 |
| `clear()` | — | 清空所有工具（workspace 切换时用） |

---

### `cli.js` — CLIInterface

终端界面，格式化输出。

| 方法 | 说明 |
|------|------|
| `printBanner()` | 打印 VL-Code 横幅 |
| `printProjectInfo(summary)` | 打印项目检测信息 |
| `printHelp()` | 打印可用命令 |
| `printStatus(usage)` | 打印上下文窗口使用率（进度条） |
| `printToolCall(name, description)` | 打印工具调用指示器 |
| `printToolResult(name, preview)` | 打印工具结果预览 |
| `printTodo(todos)` | 打印 todo 列表（✓/→/○） |
| `printStreaming(token)` | 实时打印 token |
| `prompt()` | 阻塞等待用户输入 |

---

### `hooks.js` — HooksManager

用户自定义 Pre/Post 操作钩子。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor(workDir)` | `string` | 加载 `.vl-code/hooks.json` |
| `runPre(toolName, input)` | `string, object` | 执行前置钩子，返回 `{blocked, reason}` |
| `runPost(toolName, input, output)` | `string, object, string` | 执行后置钩子（fire-and-forget） |
| `runEvent(eventName, vars)` | `string, object?` | 执行语义生命周期钩子 |
| `hasHooks()` | — | 是否有已配置的钩子 |

---

## 三、HTTP 服务层 `src/server/`

### `server.js` — WebServer

Express 服务器主类。

| 方法 | 参数 | 说明 |
|------|------|------|
| `constructor({config, orchestrator, ...})` | object | 初始化 Express + 中间件 + SessionPool + ConversationRegistry |
| `broadcast(data)` | `object` | SSE 广播到所有已连接客户端 |
| `getSession(req)` | `Request` | 按 chatId 获取/创建会话 |
| `isBusy()` | — | 检查是否有会话正在执行 |
| `reregisterVLTools()` | — | 重新注册工具（workspace 切换后） |
| `autoExtractMeta()` | — | 从文件树自动提取 ProjectMeta |
| `start(port)` | `number` | 启动服务器（端口占用时自动 +1） |

### `sse.js` — SSE 事件总线

| 函数 | 说明 |
|------|------|
| `setupSSE(app, server)` | 注册 `GET /api/events` SSE 端点，跟踪已连接客户端 |

**特性：** 无页面单例限制（允许多个浏览器标签同时连接）。

### `helpers.js` — 服务器工具函数

| 函数 | 说明 |
|------|------|
| `getCookie(config)` | 加载 JWT（project.json → auth.json → vl-cookie.txt → .doccenter_cookie） |
| `clearCookie(config)` | 清除所有位置的 cookie |
| `saveCookie(config, cookie)` | 保存 JWT 到全局 + 项目配置 |
| `loadWorkspaces()` | 读取 workspace 列表 |
| `saveWorkspaces(list)` | 保存 workspace 列表 |
| `ensureVLBible(dataDir)` | 如果需要，复制打包的 VL 语法规范 |
| `hasVLFiles(workDir)` | 检测目录是否包含 VL 项目 |
| `ensureProjectProfile(workDir, seedWorkflowDir)` | 创建 `.vl-code/` 项目配置 |

---

### 路由端点汇总

#### `routes/chat.js` — AI 对话（7 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| POST | `/api/chat` | 流式 LLM 响应（SSE：text/tool_call/thinking/error/done） |
| POST | `/api/abort` | 取消当前对话或工作流 |
| POST | `/api/answer` | 提交 ask_user 问题的答案 |
| GET | `/api/context` | 获取 token 使用统计 |
| POST | `/api/context/clear` | 重置消息历史 |
| POST | `/api/context/toggle-exclude` | 切换消息排除 |
| GET | `/api/context/messages` | 列出所有消息 |

#### `routes/files.js` — 文件管理（13 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/files` | 获取文件树 + 文件列表 |
| GET | `/api/file` | 读取文件内容 |
| GET | `/api/file/raw` | 下载原始文件 |
| POST | `/api/file` | 创建/覆写文件 |
| DELETE | `/api/file` | 删除文件 |
| POST | `/api/files/clear` | 清空项目目录 |
| POST | `/api/upload-zip` | 上传 ZIP 解压 |
| POST | `/api/upload-folder` | 批量写入文件 |
| GET | `/api/export-zip` | 导出项目为 ZIP |
| GET | `/api/browse-dir` | 浏览子目录 |
| POST | `/api/open-folder` | 系统文件管理器打开 |
| GET | `/api/files/autocomplete` | 文件名自动补全 |
| GET | `/api/mentions` | @-mention 文件和符号 |

#### `routes/project.js` — 项目元数据（7 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/project` | 项目摘要 |
| GET | `/api/profile` | 读取 project.json |
| POST | `/api/profile` | 合并保存 project.json |
| GET | `/api/metadata` | 获取 ProjectMeta.json |
| POST | `/api/metadata` | 保存 ProjectMeta.json |
| GET | `/api/metadata/extract` | 自动提取 Meta |
| POST | `/api/project/init` | 创建标准目录结构 |

#### `routes/workspace.js` — 多工作区（10 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/workspaces` | 列出工作区 |
| POST | `/api/workspaces` | 添加工作区 |
| POST | `/api/workspaces/switch` | 切换活跃工作区（重载上下文、重注册工具） |
| DELETE | `/api/workspaces/:id` | 移除工作区 |
| POST | `/api/workspaces/create-project` | 创建新 VL 项目 |
| GET | `/api/workspace-tabs` | 获取打开的标签 |
| POST | `/api/workspace-tabs/close` | 关闭标签 |
| POST | `/api/workspace-tabs/reorder` | 重排标签 |
| GET | `/api/workspace/state` | 获取 UI 状态 |
| POST | `/api/workspace/state` | 保存 UI 状态 |

#### `routes/compile.js` — 编译/测试（10 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| POST | `/api/validate` | VL 项目验证 |
| POST | `/api/compile` | 编译（SSE 进度） |
| POST | `/api/compile/autofix` | 自动修复编译错误（LLM agent） |
| GET | `/api/compile/errors` | 获取最近编译错误 |
| POST | `/api/browser/screenshot` | Playwright 截图 |
| POST | `/api/browser/console` | 获取浏览器控制台日志 |
| POST | `/api/browser/evaluate` | 执行浏览器 JS |
| GET | `/api/browser/screenshot/:name` | 获取已保存截图 |
| POST | `/api/vl-test` | VL 组件测试 |
| POST | `/api/vl-syntax` | VL 语法参考 |

#### `routes/workflow.js` — 工作流（11 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| POST | `/api/workflow/execute` | 执行工作流（SSE 节点进度） |
| POST | `/api/workflow/resume` | 恢复暂停的工作流 |
| POST | `/api/workflow/cancel` | 取消暂停的工作流 |
| POST | `/api/workflow/ephemeral` | 保存临时工作流 |
| GET | `/api/workflows` | 列出所有工作流 |
| GET | `/api/workflow/:name` | 读取工作流 JSON |
| POST | `/api/workflow/:name` | 保存工作流 |
| DELETE | `/api/workflow/:name` | 删除工作流 |
| GET | `/api/workflow-selection` | 获取默认工作流偏好 |
| POST | `/api/workflow-selection` | 设置默认工作流偏好 |
| POST | `/api/generate` | Legacy：委托 orchestrator 生成 |

#### `routes/cloud.js` — 云端认证/同步（17 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/settings` | 获取配置（model, llmProvider, version） |
| POST | `/api/settings` | 更新配置（model, maxOutputTokens, cookie） |
| POST | `/api/cookie/refresh` | 更新/验证 cookie |
| POST | `/api/cloud/login` | 企业账号登录 |
| POST | `/api/cloud/google-login` | Google OAuth 登录 |
| GET | `/api/cloud/status` | 登录状态 + 用户信息 |
| POST | `/api/cloud/logout` | 清除 cookie |
| GET | `/api/cloud/apps` | 列出用户应用 |
| GET | `/api/cloud/workgroup/:gid` | 获取工作组配置 |
| GET | `/api/cloud/files/:gid` | 列出云端文件 |
| POST | `/api/cloud/sync/push` | 上传本地 → 云端 |
| POST | `/api/cloud/sync/pull` | 下载云端 → 本地 |
| POST | `/api/cloud/compile` | 云端编译 |
| POST | `/api/cloud/lint` | 云端 lint |
| GET | `/api/cloud/config/:nid` | 获取域名/预览 URL |
| POST | `/api/cloud/publish` | 发布版本 |
| GET | `/api/cloud/balance` | 查询账户余额 |

#### `routes/intelligence.js` — 符号/影响分析（9 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/symbols/definition/:name` | 符号定义 |
| GET | `/api/symbols/references/:name` | 符号引用 |
| GET | `/api/symbols/complete` | 符号自动补全 |
| GET | `/api/symbols/outline` | 文件符号大纲 |
| GET | `/api/symbols/stats` | 符号统计 |
| POST | `/api/impact/scan` | 变更影响分析 |
| POST | `/api/impact/rename` | 重命名影响分析 |
| GET | `/api/blueprint/status` | 蓝图加载状态 |
| GET | `/api/blueprint/context` | 蓝图文档 |

#### `routes/tools.js` — MCP 工具代理（11 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/tools/list` | 列出所有注册工具 |
| POST | `/api/tools/execute` | 按名称执行工具 |
| GET | `/api/skills` | 列出可用技能 |
| POST | `/api/skill` | 激活并运行技能（SSE） |
| POST | `/api/doccenter/:action` | DocCenter API 代理 |
| GET | `/api/agent/state` | Orchestrator 恢复状态 |
| GET | `/api/agents` | 列出后台 Agent |
| GET | `/api/agents/:id` | Agent 详情 |
| GET | `/api/vl-docs` | 列出同步的 VL 文档 |
| POST | `/api/vl-docs/sync` | 同步文档库 |
| GET | `/api/vl-docs/content` | 读取本地文档内容 |

#### `routes/conversation.js` — 会话管理（18 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/sessions` | 列出活跃会话 |
| GET | `/api/session/:chatId/summary` | 会话摘要 |
| GET | `/api/conversations` | 会话注册表 |
| POST | `/api/conversations` | 创建新会话 |
| PATCH | `/api/conversations/:id` | 更新会话 |
| DELETE | `/api/conversations/:id` | 删除会话 |
| DELETE | `/api/conversations` | 清空所有会话 |
| GET | `/api/chat/state` | 获取会话注册表 |
| POST | `/api/chat/state` | 更新注册表 |
| POST | `/api/chat/persist` | 保存对话到文件 |
| GET | `/api/chat/persist` | 列出已保存对话 |
| GET | `/api/chat/persist/:id` | 加载已保存对话 |
| POST | `/api/chat/generate-title` | 生成对话标题 |
| GET | `/api/chat/history` | 最近对话历史 |
| POST | `/api/debug-log/persist` | 保存调试日志 |
| GET | `/api/history/search` | 搜索消息历史 |
| POST | `/api/plan/enter` | 进入计划模式 |
| POST | `/api/plan/approve` | 批准计划 |
| POST | `/api/plan/cancel` | 取消计划 |
| GET | `/api/plan/status` | 计划模式状态 |

#### `routes/misc.js` — 杂项（15 个端点）

| 方法 | 端点 | 说明 |
|------|------|------|
| GET | `/api/health` | 服务器健康检查 |
| GET | `/api/version` | 应用版本 |
| POST | `/api/undo` | 撤销最近文件编辑 |
| GET | `/api/undo/stack` | 撤销历史 |
| GET | `/api/memory` | 列出记忆文件 |
| GET | `/api/git/status` | Git 状态 |
| POST | `/api/git/commit` | Git 提交 |
| GET | `/api/templates` | 列出项目模板 |
| POST | `/api/templates/create` | 创建模板 |
| POST | `/api/templates/apply` | 应用模板 |
| DELETE | `/api/templates/:id` | 删除模板 |
| POST | `/api/sync/push` | 远程同步推送（Lite 版禁用） |
| POST | `/api/sync/pull` | 远程同步拉取（Lite 版禁用） |
| GET | `/api/sync/status` | 同步状态 |
| DELETE | `/api/detail-log` | 清空详情日志 |

---

## 四、AI 工具 `src/tools/`

### 工具注册 `index.js`

| 函数 | 说明 |
|------|------|
| `registerAllTools(registry, config, projectContext, {localWorkspace})` | 注册核心工具（24 个，始终可用） |
| `registerIntelligenceTools(registry, config, {symbolIndex, impactAnalyzer, autoFix, projectContext})` | 注册智能工具（8 个，需 symbolIndex 初始化后） |

### 核心文件工具

| 工具名 | 参数 | 说明 |
|--------|------|------|
| **ReadFile** | `file_path, offset?, limit?` | 读取文件（行号、二进制检测、编码 fallback） |
| **EditFile** | `file_path, old_string, new_string, replace_all?` | 原子替换（临时文件 + rename，undo 栈） |
| **WriteFile** | `file_path, content` | 创建/覆写文件（自动创建目录） |
| **Bash** | `command, timeout?` | 执行 shell 命令（默认 120s 超时） |
| **Grep** | `pattern, path?, output_mode?, glob?, context?, case_insensitive?, head_limit?` | ripgrep/grep 搜索 |
| **Glob** | `pattern, path?` | 递归模式匹配（按 mtime 排序） |

### 交互工具

| 工具名 | 参数 | 说明 |
|--------|------|------|
| **TodoWrite** | `todos[]` | 任务进度管理（同时只能一个 in_progress） |
| **SubAgent** | `prompt, agentType?, maxTurns?, runInBackground?, resume?, isolation?` | 启动子 Agent（explore/plan/generate/general） |
| **AskUserQuestion** | `question, options[], multiSelect?` | UI 选择控件（拦截式） |
| **Memory** | `operation, scope?, key?, value?, query?` | 持久记忆（read/write/append/list/delete/search） |
| **ToolSearch** | `query?, activate?` | 发现并激活延迟工具 |

### VL 生成工具

| 工具名 | 参数 | 说明 |
|--------|------|------|
| **VLGenerate** | `action, userRequest?, workflow?, targetLang?` | 项目代码生成（auto/meta-direct/3-file/6-file/9-file） |
| **VLAdjust** | `action, changeRequest?, workflow?, targetLang?` | 项目修改（add-page/add-service/theme-customize/general） |
| **WorkflowRun** | `mode, workflow_path?, params?, workspace_id?` | 执行工作流 JSON（SSE 事件广播） |

### VL 验证工具

| 工具名 | 参数 | 说明 |
|--------|------|------|
| **VLCompile** | — | 调用 parsevl API 编译 |
| **VLLint** | — | 云端 lint 检查 |
| **VLParse** | `file_path?` | 解析 VL 文件结构 |
| **VLValidate** | `file_path?` | VL 语法验证 |
| **VLSyntaxRef** | `topic?` | VL 语法参考查询 |

### VL 智能工具（需 symbolIndex）

| 工具名 | 参数 | 说明 |
|--------|------|------|
| **VLSymbols** | `action, name?, prefix?, file_path?` | 符号定义/引用/补全/大纲 |
| **VLImpact** | `action, symbol?, oldName?, newName?` | 影响分析（removal/rename/dead_code） |
| **VLEditSection** | `file_path, section_name, new_content` | 按 section 精确编辑 |
| **VLAutoFix** | `file_path?` | 自动修复 VL 语法问题 |
| **VLCascadeEdit** | `file_path, changes, cascade?` | 级联编辑（跨文件影响传播） |
| **MetaDiff** | `old_meta?, new_meta?` | ProjectMeta 差异比较（确定性，无 LLM） |
| **SectionDiff** | `base_content, incoming_content, strategy?` | Section 级别差异合并 |
| **VLMetaTest** | `action, meta?` | 从 Meta 生成测试骨架 |
| **VLMetadata** | `action?` | 提取/刷新 ProjectMeta |
| **VLComponentTest** | `component?, file_path?` | 组件交互测试 |

### 外部服务工具

| 工具名 | 参数 | 说明 |
|--------|------|------|
| **WorkspaceAPI** | `action, gid?, path?, content?, files?` | 本地/云端 Workspace API 操作 |
| **ComponentFetch** | `action, keyword?, category?, url?, name?, content?` | 组件库搜索/获取/发布 |
| **DocCenter** | `action, docId?, path?, keyword?` | DocCenter 文档 CRUD |
| **BrowserInspect** | `action, selector?, expression?, url?` | Playwright 浏览器操作 |
| **AutoTestPipeline** | `action, testCases?, params?` | 自动测试流水线（生成→运行→评估→修复→报告） |

---

## 五、VL 语言引擎 `src/vl/`

### `project-context.js` — VLProjectContext

VL 项目检测和扫描（零 API 成本）。

| 方法 | 说明 |
|------|------|
| `load()` | 扫描目录，检测 VL 项目，加载配置/元数据/规则 |
| `scan()` | 重新扫描（带并发锁） |
| `getVLFiles()` | 返回 VL 源文件列表 |
| `loadProjectMeta()` | 加载或自动提取 ProjectMeta/1.0 |
| `getFilesByType(type)` | 按类型过滤（app/section/component/service/database/theme） |
| `getSummary()` | 返回项目摘要 |
| `isVLProject()` | 是否为 VL 项目 |
| `getAllFiles()` | 返回所有文件 |

### `symbol-index.js` — VLSymbolIndex

符号索引（go-to-definition、find-references、auto-complete）。

| 方法 | 说明 |
|------|------|
| `build()` | 解析所有文件，构建完整索引 |
| `updateFile(filePath)` | 增量更新单文件 |
| `goToDefinition(name)` | 符号定义位置 |
| `findReferences(name)` | 查找所有引用 |
| `autoComplete(prefix, options)` | 符号补全（支持 $var、--、@event 前缀） |
| `getSymbolInfo(name)` | hover 信息 |
| `getFileOutline(filePath)` | 文件符号大纲 |
| `getCrossReferenceMap()` | 文件依赖图 |
| `getStats()` | 统计（符号数、引用数、耗时） |

### `smart-context.js` — SmartContextLoader

智能上下文加载（依赖图 + 最近编辑 + 编译错误 + 对话历史）。

| 方法 | 说明 |
|------|------|
| `buildGraph()` | 构建依赖图 |
| `discoverRelevantFiles(userMessage)` | 分析用户消息，返回相关文件 |
| `loadContext(relevantFiles, userMessageLength)` | 加载文件到上下文（智能截断） |
| `recordEdit(filePath)` | 记录文件编辑 |
| `updateCompileErrors(errList)` | 更新编译错误文件集 |

### `blueprint-context.js` — BlueprintContext

蓝图上下文（PRD/ServiceMap/UIMap 或 ProjectMeta/1.0）。

| 方法 | 说明 |
|------|------|
| `load()` | 加载蓝图（优先 ProjectMeta，fallback 3-file） |
| `loadFromProjectMeta(meta)` | 从 ProjectMeta 映射到蓝图 |
| `getContextForFile(filePath)` | 返回与文件相关的蓝图片段 |
| `findServicesForSection(sectionName)` | 查找 section 使用的 service |
| `findTablesForService(serviceName)` | 查找 service 访问的数据表 |
| `getValueDomains()` | 返回值域（枚举/常量） |

### `impact-analyzer.js` — ImpactAnalyzer

跨文件 break 检测。

| 方法 | 说明 |
|------|------|
| `analyzeRemoval(symbolName)` | 分析删除符号的影响 |
| `analyzeRename(oldName, newName)` | 分析重命名的影响 |
| `analyzeServiceChange(serviceDomainName, methodName)` | 分析服务合约变更影响 |
| `analyzeComponentChange(componentName, changeType, symbolName)` | 分析组件接口变更影响 |
| `fullProjectScan()` | 全项目扫描（未使用符号、断开引用、未定义 token） |

### `auto-fix.js` — VLAutoFix

自动修复 VL 语法问题。

| 方法 | 说明 |
|------|------|
| `fix(filePath)` | 修复单文件，返回 `{fixed, changes[], content}` |
| `fixAndSave(filePath)` | 修复并写入磁盘 |
| `fixAll()` | 修复所有 VL 文件 |

### `metadata-extractor.js` — 元数据提取函数

| 函数 | 说明 |
|------|------|
| `extractFromFileTree(fileTree, workDir)` | 从 `{path: content}` 提取完整 ProjectMeta |
| `extractSingleFile(filePath, content, workDir)` | 解析单文件为 Meta 条目 |
| `mergeIntoMeta(meta, extracted)` | 合并单文件提取到现有 Meta |
| `validateMeta(meta)` | 验证 Meta 一致性 |

### `meta-diff.js` — Meta 差异比较

| 函数 | 说明 |
|------|------|
| `computeMetaDiff(oldMeta, newMeta, symbolIndex)` | 确定性 diff（毫秒级，无 LLM），返回 `{added, removed, modified, affectedFiles, cascadeImpact, summary}` |

### `section-diff.js` — Section 差异合并

| 函数 | 说明 |
|------|------|
| `parseSections(content)` | 解析为 `Map<sectionName, content>` |
| `sectionDiff(oldContent, newContent)` | 返回 `{added, removed, modified, unchanged}` |
| `mergeSections(base, incoming, strategy, sectionsToReplace)` | 合并（prefer_new/prefer_base/selective） |
| `smartMerge(base, incoming)` | 仅替换修改的 section |

### `workflow-executor.js` — WorkflowExecutor

VL-Workflow-Engine 桥接。

| 方法 | 说明 |
|------|------|
| `execute(workflow, params, callbacks)` | 执行工作流 JSON |
| `resume(nodeId, payload)` | 恢复暂停的工作流 |
| `abort()` | 中止工作流 |
| `_buildLLMAdapter()` | 构建 LLM 适配器 |
| `_buildFileAdapter()` | 构建文件适配器（带 section-merge） |
| `_executeMetaDiff(...)` | MetaDiff 节点自定义处理器 |
| `_executeComponentFetch(...)` | ComponentFetch 节点自定义处理器 |
| `_resolveDocCenterDocs(docs, cb)` | 按 path 获取 DocCenter 文档 |

### `generation-pipeline.js` — GenerationPipeline

8-Agent 编排管线（PRD → DB → ServiceMap → UIMap → CP → VS → SC → VX）。

| 方法 | 说明 |
|------|------|
| `run(params, callbacks)` | 运行完整 8 阶段管线 |
| `callLLM(messages, opts)` | 调用 Claude LLM |
| `parallelGenerate(items, promptFn, pathFn, cb)` | 并行生成（3 并发） |
| `writeArtifact(relativePath, content)` | 写入生成的文件 |

### `meta-test-generator.js` — 测试骨架生成

| 函数 | 说明 |
|------|------|
| `generateTestSkeleton(meta, previewUrls, options)` | 从 ProjectMeta 确定性生成测试用例（无 LLM） |
| `generateAppSmokeTest(...)` | 生成 App 冒烟测试 |
| `generateSectionNavTest(...)` | 生成 Section 导航测试 |
| `generateCRUDWorkflowTest(...)` | 生成 CRUD 工作流测试 |

---

## 六、本地引擎 `src/engine/`

### `local-workspace.js` — LocalWorkspace

本地文件系统实现 VL Workspace API（替代远程 REST API）。

| 方法 | 说明 |
|------|------|
| `createFile({gid, path, content})` | 创建文件 |
| `listFile({gid, path})` | 列出文件（递归） |
| `readFile({gid, path})` | 读取文件 |
| `writeFile({gid, path, content})` | 写入文件 |
| `deleteFile({gid, path})` | 删除文件 |
| `createFiles/readFiles/writeFiles/deleteFiles` | 批量操作 |
| `createDoc/listDoc/readDoc/writeDoc/deleteDoc` | 文档操作（JSON 存储） |

### `workflow-engine-manager.js` — WorkflowEngineManager

Go 工作流引擎生命周期管理。

| 方法 | 说明 |
|------|------|
| `start()` | 启动 Go 引擎（服务器模式） |
| `stop()` | 优雅停止（SIGTERM → SIGKILL） |
| `isReady()` | 检查引擎健康 |
| `streamWorkflow(options)` | SSE 事件 async generator |
| `runWorkflowCLI(options)` | CLI 模式 fallback |

---

## 七、云端与 MCP

### `cloud/cloud-api.js` — CloudAPI

VisualLogic 云平台 API 客户端（27 个方法）。

| 方法 | 说明 |
|------|------|
| `login(username, password, companyName)` | 企业账号登录 |
| `googleLoginOrRegister({email, name, id, picture})` | Google OAuth |
| `validateSession()` | 验证 session |
| `listApps/getWorkGroup/getWorkConfig` | 应用/工作组查询 |
| `listFiles/readFile/writeFile/deleteFiles` | 云端文件操作 |
| `compileWorkspace/lintWorkspace` | 云端编译/lint |
| `syncPush/syncPull/syncAndCompile` | 同步 + 编译 |
| `launchVersion/queryBalance` | 发布/余额查询 |

### `mcp/mcp-server.js` — MCP Server

stdio JSON-RPC MCP 服务器，暴露 VLCode 工具给 Claude CLI。

| MCP 方法 | 说明 |
|----------|------|
| `initialize()` | 返回服务器信息 + 能力 |
| `tools/list()` | 从 VLCode HTTP 获取工具列表 |
| `tools/call({name, arguments})` | 执行工具并返回结果 |

---

## 八、数据常量 `src/data/`

### `versions.js`

| 常量 | 值 | 说明 |
|------|-----|------|
| `VL_VERSION` | `"3.5"` | VL 语法版本 |
| `THEME_VERSION` | `"6.5"` | Theme 版本 |
| `STYLESPACE_VERSION` | `"1.6"` | StyleSpace 版本 |
| `PARSEVL_URL` | `"https://bla...on.aws"` | 编译 API |

### `doc-paths.js`

| 导出 | 说明 |
|------|------|
| `DOCCENTER_API_URL` | 云端 DocCenter API |
| `DOC_REGISTRY` | 完整路径注册表（alias → {path, docId, desc}） |
| `PATH_MAP` | 反向查找（path → info） |
| `pathFor(alias)` | 按别名获取路径号 |
| `docIdFor(alias)` | 按别名获取文档 ID |
| `resolveDocRef(ref)` | 标准化文档引用 |

---

## 九、工具函数 `src/utils/`

### `config.js`

| 函数 | 说明 |
|------|------|
| `loadConfig(args)` | 加载配置（CLI args → .env → 环境变量 → 默认值） |
| `APP_VERSION` | 从 package.json 读取版本号 |

**默认配置：**
```javascript
{
  model: 'claude-opus-4-6',
  maxOutputTokens: 32000,
  port: 3300,
  llmProvider: 'cli',           // 仅 CLI（Team 订阅）
  workflowMode: 'local',
}
```

**API Key 保护：** 启动时检测 `ANTHROPIC_API_KEY`，警告并从 `process.env` 中移除。

### `zip-extract.js`

| 函数 | 说明 |
|------|------|
| `extractZip(base64, targetDir)` | 解压 base64 ZIP 到目标目录 |

---

## 统计汇总

| 类别 | 数量 |
|------|------|
| JS 模块总数 | 84 |
| 核心引擎模块 | 9 |
| HTTP 路由文件 | 11 |
| HTTP 端点 | 127 |
| AI 工具 | 34 (24 核心 + 8 智能 + 2 条件) |
| VL 语言引擎模块 | 15 |
| 本地引擎模块 | 3 |
| 云端/MCP | 2 |
| 数据常量 | 3 |
| 工具函数 | 2 |
| **函数/方法总数** | **200+** |
