This file provides guidance to Wave Code when working with code in this repository.
npm run compile: 编译后端 (TypeScript) 和前端 (Webpack)。npm run compile:backend: 仅编译 VS Code 扩展后端。npm run compile:frontend: 仅编译 React webview 前端。npm run watch: 同时运行后端 and 前端的监听器。
npm test: 运行 Playwright 端到端测试.npm run test:demo: 运行演示专用 Playwright 测试(用于生成截图和验证 UI)。npm run test:demo -- tests/demo/your-test.demo.ts: 运行单个演示测试。npm run package: 将扩展打包为.vsix文件。
本仓库是一个带有基于 React 的 webview 聊天界面的 VS Code 扩展。
src/extension.ts: 入口点。管理ChatProvider的生命周期。src/chatProvider.ts: 核心协调器。实现WebviewViewProvider并管理多个ChatSession实例(侧边栏、标签页和窗口模式)。src/session/chatSession.ts: 封装wave-agent-sdk。处理智能体初始化、消息发送和配置更新。src/session/messageHandler.ts: 处理来自 webview 的消息并将其分发到相应的服务或会话。src/session/webviewManager.ts: 管理不同 webview 面板(侧边栏、标签页/窗口的 WebviewPanel)的创建和通信。src/services/: 包含配置、文件操作、会话持久化和插件管理的业务逻辑。pluginService.ts: 插件管理服务,包括插件的安装、启用、禁用和市场管理。
webview/src/index.tsx: React 应用程序的入口点。webview/src/components/ChatApp.tsx: 使用useReducer模式管理聊天状态的主要组件。webview/src/components/ConfigurationDialog.tsx: 用于管理 AI 设置(API 密钥、模型、语言等)和插件管理的 UI。包含三个主要标签页:- 常规设置: API 配置、模型选择、语言设置
- 插件管理: 探索新插件、已安装插件、插件市场
- 通信 (Communication): 使用
vscode.postMessage和window.addEventListener('message', ...)与后端通信。 - VS Code API 限制:
acquireVsCodeApi()在整个 Webview 生命周期内只能被调用一次。必须在根组件(如index.tsx)调用并作为 Prop 传递给子组件,严禁在子组件中重复获取,否则会导致 Webview 崩溃。
该扩展严重依赖 wave-agent-sdk 来实现 AI 能力。智能体使用项目特定的工具(Bash、文件操作、LSP)进行初始化,并处理复杂的推理和工具执行逻辑。
升级 SDK 并查看 changelog:
- 升级:
npm install wave-agent-sdk@^<version> - 查看 changelog(GitHub 的 tag message):
gh api repos/netease-lcap/wave-agent/git/tags/$(gh api repos/netease-lcap/wave-agent/git/ref/tags/v<version> --jq '.object.sha') --jq '.message'
- 强制性 TDD: 任何代码变更(包括 Bug 修复、新功能开发、重构等)都必须遵循测试驱动开发 (TDD) 方法。
- 必须编写测试: 在提交任何更改之前,必须编写并验证相应的测试用例(如 Playwright E2E 测试)。
- 测试目录规范:
- 功能/集成测试: 放置在
tests/webview/目录下,文件名以.test.ts结尾。 - 演示/截图测试: 放置在
tests/demo/目录下,文件名以.demo.ts结尾。
- 功能/集成测试: 放置在
- UI 验证: 对于 UI 更改,使用
tests/demo/编写 Playwright 脚本,模拟扩展消息并捕获截图,以便进行手动或自动验证。 - LSP 探索: 使用
LSP工具探索第三方库(如wave-agent-sdk),因为源代码可能不在src文件夹中。
spec.html: 产品规格说明书。每当需求或 UI 功能发生变化时,必须更新此文件。- 截图 (Screenshots): 位于
screenshots/目录,用于在spec.html中记录 UI 的当前状态。截图文件不需要添加到 git。