flavor-code 1.2.7 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +405 -369
- package/README.zh-CN.md +387 -356
- package/dist/agent/loop.d.ts +4 -0
- package/dist/agent/types.d.ts +10 -0
- package/dist/{app-R3SDG2OH.js → app-USAFQVSX.js} +379 -12
- package/dist/{chunk-NVLYFU6P.js → chunk-F2HMO5Q2.js} +28 -11
- package/dist/{chunk-WN2EZV3Y.js → chunk-G32MCAZA.js} +1 -1
- package/dist/{chunk-N2S7USST.js → chunk-RQTYHUMK.js} +2 -1
- package/dist/{chunk-5RHJ3PQN.js → chunk-WGYNTR4Q.js} +1834 -495
- package/dist/{chunk-HFR2WS6T.js → chunk-XFCJXRJ2.js} +18 -5
- package/dist/{claude-ink-WPWPEL5A.js → claude-ink-ORUA7GWG.js} +2 -2
- package/dist/cli.js +9 -8
- package/dist/config/protected-file.d.ts +6 -0
- package/dist/config/schema.d.ts +2 -0
- package/dist/context/manager.d.ts +2 -0
- package/dist/context/workspace-instructions.d.ts +10 -0
- package/dist/desktop/main.js +12736 -5178
- package/dist/desktop/pixel-worker.js +73 -0
- package/dist/desktop/preload.cjs +80 -2
- package/dist/desktop-renderer/assets/index-D-s27J39.js +151 -0
- package/dist/desktop-renderer/assets/index-DMZBSGrp.css +1 -0
- package/dist/desktop-renderer/index.html +3 -4
- package/dist/harness/local.d.ts +4 -1
- package/dist/jobs/registry.d.ts +48 -0
- package/dist/{load-XC5JYYBQ.js → load-6ZMEBHSG.js} +1 -1
- package/dist/models/anthropic.d.ts +4 -0
- package/dist/permissions/engine.d.ts +7 -0
- package/dist/production.d.ts +13 -1
- package/dist/sdk/index.js +4 -4
- package/dist/terminal/service.d.ts +57 -0
- package/dist/tools/files.d.ts +10 -0
- package/dist/tools/jobs.d.ts +4 -0
- package/dist/tools/runtime.d.ts +2 -0
- package/dist/tools/shell.d.ts +13 -3
- package/dist/tools/terminal.d.ts +3 -0
- package/dist/tools/types.d.ts +76 -4
- package/dist/tools/web.d.ts +53 -0
- package/package.json +13 -2
- package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +752 -1
- package/dist/desktop-renderer/assets/index-CLrVaR9H.js +0 -143
- package/dist/desktop-renderer/assets/index-Cm_ktmXm.css +0 -1
package/README.zh-CN.md
CHANGED
|
@@ -1,369 +1,400 @@
|
|
|
1
|
-
<p align="center"><a href="./README.md">English</a> | <b><a href="./README.zh-CN.md">简体中文</a></b></p>
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
<img src="./assets/icon-transparent-512.png" alt="Flavor Code Logo" width="168" />
|
|
5
|
-
<h1>Flavor Code</h1>
|
|
6
|
-
<p><strong>本地优先、可审计、可恢复的 AI 编程助手</strong></p>
|
|
7
|
-
<p>在终端、Electron 桌面端和 VS Code 中读代码、改文件、运行命令并完成复杂任务。</p>
|
|
8
|
-
|
|
9
|
-
<p>
|
|
10
|
-
<a href="https://www.npmjs.com/package/flavor-code"><img alt="npm version" src="https://img.shields.io/npm/v/flavor-code?color=cb3837&logo=npm" /></a>
|
|
11
|
-
<a href="https://github.com/YachuanWzh/flavor-code/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/YachuanWzh/flavor-code/actions/workflows/ci.yml/badge.svg?branch=main" /></a>
|
|
12
|
-
<img alt="Node.js 20+" src="https://img.shields.io/badge/Node.js-20%2B-339933?logo=nodedotjs&logoColor=white" />
|
|
13
|
-
<a href="./LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-blue.svg" /></a>
|
|
14
|
-
</p>
|
|
15
|
-
|
|
16
|
-
<p>
|
|
17
|
-
<a href="#快速开始">快速开始</a> ·
|
|
18
|
-
<a href="#核心能力">核心能力</a> ·
|
|
19
|
-
<a href="#使用入口">使用入口</a> ·
|
|
20
|
-
<a href="#权限与沙箱">安全</a> ·
|
|
21
|
-
<a href="#开发">参与开发</a>
|
|
22
|
-
|
|
23
|
-
</
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
|
33
|
-
|
|
|
1
|
+
<p align="center"><a href="./README.md">English</a> | <b><a href="./README.zh-CN.md">简体中文</a></b></p>
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
<img src="./assets/icon-transparent-512.png" alt="Flavor Code Logo" width="168" />
|
|
5
|
+
<h1>Flavor Code</h1>
|
|
6
|
+
<p><strong>本地优先、可审计、可恢复的 AI 编程助手</strong></p>
|
|
7
|
+
<p>在终端、Electron 桌面端和 VS Code 中读代码、改文件、运行命令并完成复杂任务。</p>
|
|
8
|
+
|
|
9
|
+
<p>
|
|
10
|
+
<a href="https://www.npmjs.com/package/flavor-code"><img alt="npm version" src="https://img.shields.io/npm/v/flavor-code?color=cb3837&logo=npm" /></a>
|
|
11
|
+
<a href="https://github.com/YachuanWzh/flavor-code/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/YachuanWzh/flavor-code/actions/workflows/ci.yml/badge.svg?branch=main" /></a>
|
|
12
|
+
<img alt="Node.js 20+" src="https://img.shields.io/badge/Node.js-20%2B-339933?logo=nodedotjs&logoColor=white" />
|
|
13
|
+
<a href="./LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-blue.svg" /></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p>
|
|
17
|
+
<a href="#快速开始">快速开始</a> ·
|
|
18
|
+
<a href="#核心能力">核心能力</a> ·
|
|
19
|
+
<a href="#使用入口">使用入口</a> ·
|
|
20
|
+
<a href="#权限与沙箱">安全</a> ·
|
|
21
|
+
<a href="#开发">参与开发</a> ·
|
|
22
|
+
<a href="./CHANGELOG.md">更新日志</a>
|
|
23
|
+
</p>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
Flavor Code 接入 OpenAI、Anthropic 或兼容服务,在受控工作区内使用文件、搜索、Shell、MCP 和自定义工具。复杂任务可以拆成计划和并行子任务;会话、Diff、工具调用、checkpoint 与审计记录全部保存在本地,便于恢复、复查和继续工作。
|
|
29
|
+
|
|
30
|
+
## 核心能力
|
|
31
|
+
|
|
32
|
+
| | 能力 | 你得到什么 |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| 🖥️ | **一个运行时,三个入口** | CLI、Electron 与 VS Code 共享模型配置、会话和工具能力 |
|
|
34
35
|
| 🧭 | **复杂任务可控推进** | 任务计划、子 Agent、steering、follow-up、`/loop` 和 `/goal` |
|
|
35
36
|
| ⏪ | **结果可追溯、可恢复** | 完整时间线、checkpoint、rewind、trace、Diff 和失败审计 |
|
|
36
37
|
| 🧠 | **本地长期上下文** | 记忆、Skill、插件和项目指南均保存在本机 |
|
|
38
|
+
| 🎨 | **D2C 设计转代码** | 导入 Pixso 导出结果,由 Agent 生成 Vue/React 实现并自动进行像素级视觉评估(仅 Electron) |
|
|
37
39
|
| 🛡️ | **明确的权限边界** | 分别控制读、写、Shell、网络和破坏性操作,也可使用 Docker |
|
|
38
40
|
|
|
39
|
-
##
|
|
40
|
-
|
|
41
|
-
> [!IMPORTANT]
|
|
42
|
-
> CLI 需要 Node.js 20 或更高版本。Windows 桌面端也可以直接从 [Releases](https://github.com/YachuanWzh/flavor-code/releases) 下载。
|
|
43
|
-
|
|
44
|
-
**1. 安装**
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npm install -g flavor-code
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
**2. 在项目中启动**
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
cd your-project
|
|
54
|
-
flavor
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
**3. 初始化项目上下文**
|
|
58
|
-
|
|
59
|
-
首次进入项目后运行 `/init`。Flavor 会分析语言、包管理器、源码目录和验证命令,并生成 `FLAVOR.md` 项目指南。
|
|
60
|
-
|
|
61
|
-
也可以直接执行一次性任务:
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
flavor --print "分析这个项目并列出最值得修复的三个问题"
|
|
65
|
-
flavor --resume
|
|
66
|
-
flavor --resume -p "继续完成剩余工作"
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
非交互模式会拒绝需要人工审批的操作,不会悬挂等待输入。
|
|
70
|
-
|
|
71
|
-
## 配置模型
|
|
72
|
-
|
|
73
|
-
最快的方式是设置环境变量:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
# macOS / Linux
|
|
77
|
-
export OPENAI_API_KEY="sk-..."
|
|
78
|
-
|
|
79
|
-
# Windows PowerShell
|
|
80
|
-
$env:OPENAI_API_KEY = "sk-..."
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
也可以把密钥放在项目根目录的 `.env`。
|
|
41
|
+
## 1.2.9 运行时生产力
|
|
84
42
|
|
|
85
|
-
|
|
86
|
-
<summary><strong>使用 <code>.flavor/flavor.json</code> 配置多个 Provider</strong></summary>
|
|
43
|
+
1.2.9 新增分层项目指令、安全写入、后台任务、持久终端和原生 Web 工具。通常只需用自然语言描述目标,Agent 会选择合适的工具;需要精确控制时,也可以在提示词中明确指定工具和参数。
|
|
87
44
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
```json
|
|
91
|
-
{
|
|
92
|
-
"providers": {
|
|
93
|
-
"openai": {
|
|
94
|
-
"type": "openai",
|
|
95
|
-
"apiKey": "${OPENAI_API_KEY}",
|
|
96
|
-
"defaultModel": "gpt-5",
|
|
97
|
-
"cheapModel": "gpt-5-mini"
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
"agents": {
|
|
101
|
-
"main": { "model": "openai:gpt-5" },
|
|
102
|
-
"subagent": { "model": "openai:gpt-5-mini" }
|
|
103
|
-
},
|
|
104
|
-
"permissionMode": "default",
|
|
105
|
-
"maxSubagents": 3,
|
|
106
|
-
"language": "zh-CN"
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
配置按以下顺序合并,后者优先:
|
|
111
|
-
|
|
112
|
-
1. 全局 `~/.flavor-code/flavor.json`
|
|
113
|
-
2. 项目 `.flavor/flavor.json`
|
|
114
|
-
3. `.env`
|
|
115
|
-
4. 进程环境变量
|
|
116
|
-
|
|
117
|
-
支持的常用 Provider 类型:
|
|
118
|
-
|
|
119
|
-
- `openai`:OpenAI 官方接口
|
|
120
|
-
- `anthropic`:Anthropic 官方接口
|
|
121
|
-
- `openai-compatible`:兼容 OpenAI 协议的服务
|
|
122
|
-
|
|
123
|
-
</details>
|
|
124
|
-
|
|
125
|
-
OAuth PKCE 的运行时行为与配置约定见 [PKCE 规范](./docs/specs/pkce-runtime-config.md)。完整配置字段以 [配置 Schema](./src/config/schema.ts) 为准。
|
|
126
|
-
|
|
127
|
-
## 使用入口
|
|
128
|
-
|
|
129
|
-
| 入口 | 适合场景 | 启动方式 |
|
|
130
|
-
| --- | --- | --- |
|
|
131
|
-
| **CLI** | 日常开发、远程环境、脚本与 CI | `flavor` |
|
|
132
|
-
| **Electron** | 可视化会话、Diff、权限和资源管理 | `npm run desktop:start` |
|
|
133
|
-
| **VS Code / Qoder** | 编辑器上下文、诊断修复和任务控制面 | `npm run ide:install` |
|
|
134
|
-
|
|
135
|
-
### CLI
|
|
136
|
-
|
|
137
|
-
直接运行 `flavor` 后输入自然语言即可。输入 `/` 会显示内置命令、插件命令和 Skill。
|
|
138
|
-
|
|
139
|
-
常用命令:
|
|
140
|
-
|
|
141
|
-
| 命令 | 作用 |
|
|
45
|
+
| 功能 | 使用方式 |
|
|
142
46
|
| --- | --- |
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
运行中可以提交 steering 或排队 follow-up;当前模型响应结束后,任务会在安全边界处接收新指令。
|
|
157
|
-
|
|
158
|
-
### Electron 桌面端
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
npm run desktop:dev # 开发模式
|
|
162
|
-
npm run desktop:start # 构建并启动
|
|
163
|
-
npm run desktop:pack # Windows 免安装目录
|
|
164
|
-
npm run desktop:dist # Windows NSIS 安装包
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
桌面端提供项目和会话切换、流式 Markdown、工具与 Diff 展示、权限确认、任务状态,以及 Skill、MCP、记忆和模型管理。
|
|
168
|
-
|
|
169
|
-
### VS Code / Qoder
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
npm run vscode:install # 安装到 VS Code
|
|
173
|
-
npm run qoder:install # 安装到 Qoder
|
|
174
|
-
npm run ide:install # 自动选择已安装的 IDE
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
扩展包含 `@flavor` Chat Participant、Mission Control、Changes & Health、Time Machine、诊断修复、CodeLens、checkpoint 和 rewind。若 `flavor` 不在 `PATH`,请设置 `flavorCode.executable`。
|
|
178
|
-
|
|
179
|
-
## MCP、Skill 与插件
|
|
180
|
-
|
|
181
|
-
Flavor 可以连接 stdio 或 Streamable HTTP MCP 服务。项目配置示例:
|
|
182
|
-
|
|
183
|
-
<details>
|
|
184
|
-
<summary><strong>MCP 配置与 CLI 示例</strong></summary>
|
|
185
|
-
|
|
186
|
-
```json
|
|
187
|
-
{
|
|
188
|
-
"mcpServers": {
|
|
189
|
-
"docs": {
|
|
190
|
-
"url": "https://example.com/mcp",
|
|
191
|
-
"headers": {
|
|
192
|
-
"Authorization": "Bearer ${MCP_TOKEN}"
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
MCP 配置也可以通过 CLI 管理:
|
|
200
|
-
|
|
201
|
-
```bash
|
|
202
|
-
flavor mcp list
|
|
203
|
-
flavor mcp add docs --url https://example.com/mcp
|
|
204
|
-
flavor mcp disable docs
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
</details>
|
|
208
|
-
|
|
209
|
-
Skill 是带有 YAML 头信息的 `SKILL.md`,放在 `.flavor/skills/<name>/` 或 `~/.flavor-code/skills/<name>/`。Flavor 会按任务渐进加载,也支持通过 `/<skill-name>` 显式调用。
|
|
210
|
-
|
|
211
|
-
插件放在 `.flavor/plugins/`,可以注册命令、工具、Hook、Skill 根目录和模型适配器。
|
|
212
|
-
|
|
213
|
-
> [!WARNING]
|
|
214
|
-
> 插件和 Agent 自注册工具是进程内执行的 JavaScript,不是安全沙箱。只安装、启用和批准你信任的代码。
|
|
215
|
-
|
|
216
|
-
## 会话、记忆与执行记录
|
|
217
|
-
|
|
218
|
-
项目运行数据集中在 `.flavor/`:
|
|
47
|
+
| **分层项目指令** | 在项目根目录或子目录放置 `AGENTS.md` / `CLAUDE.md`;同目录需要本地补充时使用 `AGENTS.local.md` / `CLAUDE.local.md`。根规则启动时加载,子目录规则在 Agent 访问该目录文件时自动加载。 |
|
|
48
|
+
| **每轮成果物汇总** | 无需配置。`Write`、`Edit` 或 `ApplyPatch` 成功后,回合结束会显示带语义色的 `CHANGESET` 收据,使用工作区相对路径列出 `CREATE` / `UPDATE` / `DELETE` 操作、各文件行数和总计。最多展示 8 个文件,超出时明确显示已展示数与总数。 |
|
|
49
|
+
| **文件版本保护** | 无需配置。如果 IDE、格式化器或其他进程在 Agent 读取后修改了文件,后续写入会报 `Stale file`;让 Agent 重新读取后再修改即可。 |
|
|
50
|
+
| **标准工具展示协议** | 工具作者可声明 `outputSchema`、`renderForModel`、`presentCall` 和 `presentResult`,让同一结果在模型上下文、CLI 与桌面端分别使用合适的形式。CLI 会把文件 Diff、Web 证据、Job 运行收据、前台 `COMMAND` 和持久 `TERMINAL` 与最终回答明确分开。 |
|
|
51
|
+
| **后台 Shell / Job** | 提示“在后台启动开发服务器”,Agent 会调用 `Shell` 并设置 `background: true`。使用 `JobList` 查看任务、`JobRead` 增量读取输出、`JobWait` 等待结束、`JobKill` 停止任务。CLI 使用带状态色边界的 `JOB` 收据区分任务元数据、日志与最终回答;日志最多显示最近 12 行,列表最多显示 8 项。Windows 优先使用 UTF-8,遇到 GBK/GB18030 系统诊断时自动回退。 |
|
|
52
|
+
| **前台命令结果** | 前台 `Shell` 显示为带状态色的 `COMMAND` 收据,分别展示命令、stdout、stderr 和退出状态。长输出保留开头 8 行与结尾 8 行,并明确折叠中间部分;持久 PTY 使用独立的 `TERMINAL` 标签。 |
|
|
53
|
+
| **桌面后台状态** | Electron 会在会话标题栏自动显示运行中的 Job 数量,并在任务启动、输出、退出或取消时实时更新。 |
|
|
54
|
+
| **持久 PTY** | 提示“打开一个持久终端并继续交互”。Agent 使用 `TerminalOpen` 创建终端、`TerminalWrite` 输入、`TerminalRead` 增量读取输出,并用 `TerminalClose` 关闭。 |
|
|
55
|
+
| **D2C/E2E 统一进程生命周期** | 使用方式不变。预览和后端服务仍从 E2E/D2C 工作台启动或停止,底层统一处理输出限制、进程树终止和幂等清理。 |
|
|
56
|
+
| **原生 WebSearch** | 提示“搜索 Web 上的……”,或明确要求使用 `WebSearch`。默认使用无需密钥的 DuckDuckGo Lite;连接失败、HTTP 拒绝或没有可解析结果时自动降级到 Bing。单次最多返回 20 条;CLI 将前 5 条放入带边界的 `WEB SEARCH` 证据块,按搜索排名显示标题和紧凑来源。 |
|
|
57
|
+
| **原生 WebFetch** | 提示“读取这个网页:`https://...`”,或明确要求使用 `WebFetch`。支持 HTTP(S)、重定向、HTML 转文本、超时和响应大小限制,并兼容 Clash/TUN Fake-IP DNS。直接访问 Fake-IP、内网或云元数据地址仍会被拦截;网络操作继续遵守 Flavor 权限审批。 |
|
|
58
|
+
|
|
59
|
+
常见的精确用法:
|
|
219
60
|
|
|
220
61
|
```text
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
├── session-trees/ # 会话分支
|
|
226
|
-
├── checkpoints/ # 工作区快照
|
|
227
|
-
├── memory/ # 长期记忆
|
|
228
|
-
├── traces/ # 可选执行 trace
|
|
229
|
-
├── audit.jsonl # 工具失败审计
|
|
230
|
-
├── skills/ # 项目 Skill
|
|
231
|
-
└── plugins/ # 项目插件
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
长期记忆会区分用户偏好、行为反馈、项目约定和外部引用。自动提取只保存高置信候选,并提供确认、忽略和删除入口;密钥、Token、原始工具输出和模型猜测会被拒绝。
|
|
235
|
-
|
|
236
|
-
图片提示支持 PNG、JPEG 和 WebP,单图最大 5 MiB、每次最多 5 张。桌面端支持选择或拖放;CLI 剪贴板图片目前支持 Windows 和 macOS。
|
|
237
|
-
|
|
238
|
-
## 权限与沙箱
|
|
239
|
-
|
|
240
|
-
| 模式 | 行为 |
|
|
241
|
-
| --- | --- |
|
|
242
|
-
| `default` | 读操作自动放行,写、Shell、网络和破坏性操作按需确认 |
|
|
243
|
-
| `acceptEdits` | 工作区写入和例行验证自动放行 |
|
|
244
|
-
| `plan` | 只读规划,不允许修改和执行 |
|
|
245
|
-
| `bypassPermissions` | 主 Agent 在硬安全检查后尽量自动执行 |
|
|
246
|
-
| `auto` | 使用分类器判断,无法确定时回到人工确认 |
|
|
247
|
-
| `bubble` | 将不确定操作冒泡给主会话审批 |
|
|
248
|
-
|
|
249
|
-
> [!CAUTION]
|
|
250
|
-
> 本地 Shell 仍然以当前用户身份运行。处理不可信项目时建议启用 Docker。
|
|
251
|
-
|
|
252
|
-
<details>
|
|
253
|
-
<summary><strong>Docker 执行环境示例</strong></summary>
|
|
254
|
-
|
|
255
|
-
```json
|
|
256
|
-
{
|
|
257
|
-
"execution": {
|
|
258
|
-
"mode": "docker",
|
|
259
|
-
"image": "node:24-bookworm-slim",
|
|
260
|
-
"network": false,
|
|
261
|
-
"memory": "2g",
|
|
262
|
-
"cpus": 2
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
Docker 不可用时任务会失败,不会静默回退到本机。配置文件中的敏感字段与 OAuth Token 使用本机配置密钥进行 AES-256-GCM 认证加密。
|
|
268
|
-
|
|
269
|
-
</details>
|
|
270
|
-
|
|
271
|
-
## SDK、RPC 与评测
|
|
272
|
-
|
|
273
|
-
<details>
|
|
274
|
-
<summary><strong>Node.js SDK 示例</strong></summary>
|
|
275
|
-
|
|
276
|
-
```ts
|
|
277
|
-
import { createFlavorRuntime } from "flavor-code/sdk";
|
|
278
|
-
|
|
279
|
-
const runtime = await createFlavorRuntime({
|
|
280
|
-
workspace: process.cwd(),
|
|
281
|
-
approvalPolicy: "deny",
|
|
282
|
-
output: console.log,
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
await runtime.session.start();
|
|
286
|
-
await runtime.session.submit("修复失败的测试");
|
|
287
|
-
await runtime.dispose();
|
|
62
|
+
使用 Shell 后台模式启动 npm run dev,然后通过 JobRead 检查启动日志。
|
|
63
|
+
打开持久终端,在其中运行 Python REPL,连续执行两段代码后关闭终端。
|
|
64
|
+
使用 WebSearch 搜索 TypeScript 7 官方迁移说明,再用 WebFetch 读取最相关的官方页面。
|
|
65
|
+
这个目录有独立约定,请先遵守 src/payments/AGENTS.md 再修改代码。
|
|
288
66
|
```
|
|
289
67
|
|
|
290
|
-
|
|
68
|
+
原生工具的参数、状态机、安全边界和扩展接口详见[技术方案报告第 38 节](./技术方案报告.md#38-129-运行时生产力与原生-web-能力);验收规格见[运行时生产力规范](./docs/specs/2026-08-13-runtime-productivity-waves.md)。
|
|
291
69
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
#
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
70
|
+
## 快速开始
|
|
71
|
+
|
|
72
|
+
> [!IMPORTANT]
|
|
73
|
+
> CLI 需要 Node.js 20 或更高版本。Windows 桌面端也可以直接从 [Releases](https://github.com/YachuanWzh/flavor-code/releases) 下载。
|
|
74
|
+
|
|
75
|
+
**1. 安装**
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npm install -g flavor-code
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**2. 在项目中启动**
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
cd your-project
|
|
85
|
+
flavor
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**3. 初始化项目上下文**
|
|
89
|
+
|
|
90
|
+
首次进入项目后运行 `/init`。Flavor 会分析语言、包管理器、源码目录和验证命令,并生成 `FLAVOR.md` 项目指南。
|
|
91
|
+
|
|
92
|
+
也可以直接执行一次性任务:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
flavor --print "分析这个项目并列出最值得修复的三个问题"
|
|
96
|
+
flavor --resume
|
|
97
|
+
flavor --resume -p "继续完成剩余工作"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
非交互模式会拒绝需要人工审批的操作,不会悬挂等待输入。
|
|
101
|
+
|
|
102
|
+
## 配置模型
|
|
103
|
+
|
|
104
|
+
最快的方式是设置环境变量:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# macOS / Linux
|
|
108
|
+
export OPENAI_API_KEY="sk-..."
|
|
109
|
+
|
|
110
|
+
# Windows PowerShell
|
|
111
|
+
$env:OPENAI_API_KEY = "sk-..."
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
也可以把密钥放在项目根目录的 `.env`。
|
|
115
|
+
|
|
116
|
+
<details>
|
|
117
|
+
<summary><strong>使用 <code>.flavor/flavor.json</code> 配置多个 Provider</strong></summary>
|
|
118
|
+
|
|
119
|
+
项目配置示例:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"providers": {
|
|
124
|
+
"openai": {
|
|
125
|
+
"type": "openai",
|
|
126
|
+
"apiKey": "${OPENAI_API_KEY}",
|
|
127
|
+
"defaultModel": "gpt-5",
|
|
128
|
+
"cheapModel": "gpt-5-mini"
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"agents": {
|
|
132
|
+
"main": { "model": "openai:gpt-5" },
|
|
133
|
+
"subagent": { "model": "openai:gpt-5-mini" }
|
|
134
|
+
},
|
|
135
|
+
"permissionMode": "default",
|
|
136
|
+
"maxSubagents": 3,
|
|
137
|
+
"language": "zh-CN"
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
配置按以下顺序合并,后者优先:
|
|
142
|
+
|
|
143
|
+
1. 全局 `~/.flavor-code/flavor.json`
|
|
144
|
+
2. 项目 `.flavor/flavor.json`
|
|
145
|
+
3. `.env`
|
|
146
|
+
4. 进程环境变量
|
|
147
|
+
|
|
148
|
+
支持的常用 Provider 类型:
|
|
149
|
+
|
|
150
|
+
- `openai`:OpenAI 官方接口
|
|
151
|
+
- `anthropic`:Anthropic 官方接口
|
|
152
|
+
- `openai-compatible`:兼容 OpenAI 协议的服务
|
|
153
|
+
|
|
154
|
+
</details>
|
|
155
|
+
|
|
156
|
+
OAuth PKCE 的运行时行为与配置约定见 [PKCE 规范](./docs/specs/pkce-runtime-config.md)。完整配置字段以 [配置 Schema](./src/config/schema.ts) 为准。
|
|
157
|
+
|
|
158
|
+
## 使用入口
|
|
159
|
+
|
|
160
|
+
| 入口 | 适合场景 | 启动方式 |
|
|
161
|
+
| --- | --- | --- |
|
|
162
|
+
| **CLI** | 日常开发、远程环境、脚本与 CI | `flavor` |
|
|
163
|
+
| **Electron** | 可视化会话、Diff、权限和资源管理 | `npm run desktop:start` |
|
|
164
|
+
| **VS Code / Qoder** | 编辑器上下文、诊断修复和任务控制面 | `npm run ide:install` |
|
|
165
|
+
|
|
166
|
+
### CLI
|
|
167
|
+
|
|
168
|
+
直接运行 `flavor` 后输入自然语言即可。输入 `/` 会显示内置命令、插件命令和 Skill。
|
|
169
|
+
|
|
170
|
+
常用命令:
|
|
171
|
+
|
|
172
|
+
| 命令 | 作用 |
|
|
173
|
+
| --- | --- |
|
|
174
|
+
| `/init` | 生成或更新 `FLAVOR.md` |
|
|
175
|
+
| `/model` | 查看或切换主/子 Agent 模型 |
|
|
176
|
+
| `/permissions` | 切换权限模式 |
|
|
177
|
+
| `/tasks` | 查看任务计划和子 Agent 状态 |
|
|
178
|
+
| `/compact` | 手动压缩长会话上下文 |
|
|
179
|
+
| `/checkpoint`、`/tree` | 保存现场、查看会话树 |
|
|
180
|
+
| `/rewind`、`/unrevert`、`/fork` | 恢复或分叉会话 |
|
|
181
|
+
| `/memory`、`/remember`、`/forget`、`/forget-cold` | 管理长期记忆;`/forget-cold` 清空 cold 记忆及其文件 |
|
|
182
|
+
| `/mcp` | 查看和管理 MCP 服务 |
|
|
183
|
+
| `/loop <goal>` | 运行带验证的自治循环 |
|
|
184
|
+
| `/goal <objective>` | 运行规划、执行、对抗审查流程 |
|
|
185
|
+
| `/audit` | 查看工具失败审计 |
|
|
186
|
+
|
|
187
|
+
运行中可以提交 steering 或排队 follow-up;当前模型响应结束后,任务会在安全边界处接收新指令。
|
|
188
|
+
|
|
189
|
+
### Electron 桌面端
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
npm run desktop:dev # 开发模式
|
|
193
|
+
npm run desktop:start # 构建并启动
|
|
194
|
+
npm run desktop:pack # Windows 免安装目录
|
|
195
|
+
npm run desktop:dist # Windows NSIS 安装包
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
桌面端提供项目和会话切换、流式 Markdown、工具与 Diff 展示、权限确认、任务状态,以及 Skill、MCP、记忆和模型管理。
|
|
199
|
+
|
|
200
|
+
### VS Code / Qoder
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
npm run vscode:install # 安装到 VS Code
|
|
204
|
+
npm run qoder:install # 安装到 Qoder
|
|
205
|
+
npm run ide:install # 自动选择已安装的 IDE
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
扩展包含 `@flavor` Chat Participant、Mission Control、Changes & Health、Time Machine、诊断修复、CodeLens、checkpoint 和 rewind。若 `flavor` 不在 `PATH`,请设置 `flavorCode.executable`。
|
|
209
|
+
|
|
210
|
+
## MCP、Skill 与插件
|
|
211
|
+
|
|
212
|
+
Flavor 可以连接 stdio 或 Streamable HTTP MCP 服务。项目配置示例:
|
|
213
|
+
|
|
214
|
+
<details>
|
|
215
|
+
<summary><strong>MCP 配置与 CLI 示例</strong></summary>
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
{
|
|
219
|
+
"mcpServers": {
|
|
220
|
+
"docs": {
|
|
221
|
+
"url": "https://example.com/mcp",
|
|
222
|
+
"headers": {
|
|
223
|
+
"Authorization": "Bearer ${MCP_TOKEN}"
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
MCP 配置也可以通过 CLI 管理:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
flavor mcp list
|
|
234
|
+
flavor mcp add docs --url https://example.com/mcp
|
|
235
|
+
flavor mcp disable docs
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
</details>
|
|
239
|
+
|
|
240
|
+
Skill 是带有 YAML 头信息的 `SKILL.md`,放在 `.flavor/skills/<name>/` 或 `~/.flavor-code/skills/<name>/`。Flavor 会按任务渐进加载,也支持通过 `/<skill-name>` 显式调用。
|
|
241
|
+
|
|
242
|
+
插件放在 `.flavor/plugins/`,可以注册命令、工具、Hook、Skill 根目录和模型适配器。
|
|
243
|
+
|
|
244
|
+
> [!WARNING]
|
|
245
|
+
> 插件和 Agent 自注册工具是进程内执行的 JavaScript,不是安全沙箱。只安装、启用和批准你信任的代码。
|
|
246
|
+
|
|
247
|
+
## 会话、记忆与执行记录
|
|
248
|
+
|
|
249
|
+
项目运行数据集中在 `.flavor/`:
|
|
250
|
+
|
|
251
|
+
```text
|
|
252
|
+
.flavor/
|
|
253
|
+
├── flavor.json # 项目配置
|
|
254
|
+
├── sessions/ # 会话时间线
|
|
255
|
+
├── session-assets/ # 图片附件
|
|
256
|
+
├── session-trees/ # 会话分支
|
|
257
|
+
├── checkpoints/ # 工作区快照
|
|
258
|
+
├── memory/ # 长期记忆
|
|
259
|
+
├── traces/ # 可选执行 trace
|
|
260
|
+
├── audit.jsonl # 工具失败审计
|
|
261
|
+
├── skills/ # 项目 Skill
|
|
262
|
+
└── plugins/ # 项目插件
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
长期记忆会区分用户偏好、行为反馈、项目约定和外部引用。自动提取只保存高置信候选,并提供确认、忽略和删除入口;密钥、Token、原始工具输出和模型猜测会被拒绝。
|
|
266
|
+
|
|
267
|
+
图片提示支持 PNG、JPEG 和 WebP,单图最大 5 MiB、每次最多 5 张。桌面端支持选择或拖放;CLI 剪贴板图片目前支持 Windows 和 macOS。
|
|
268
|
+
|
|
269
|
+
## 权限与沙箱
|
|
270
|
+
|
|
271
|
+
| 模式 | 行为 |
|
|
272
|
+
| --- | --- |
|
|
273
|
+
| `default` | 读操作自动放行,写、Shell、网络和破坏性操作按需确认 |
|
|
274
|
+
| `acceptEdits` | 工作区写入和例行验证自动放行 |
|
|
275
|
+
| `plan` | 只读规划,不允许修改和执行 |
|
|
276
|
+
| `bypassPermissions` | 主 Agent 在硬安全检查后尽量自动执行 |
|
|
277
|
+
| `auto` | 使用分类器判断,无法确定时回到人工确认 |
|
|
278
|
+
| `bubble` | 将不确定操作冒泡给主会话审批 |
|
|
279
|
+
|
|
280
|
+
> [!CAUTION]
|
|
281
|
+
> 本地 Shell 仍然以当前用户身份运行。处理不可信项目时建议启用 Docker。
|
|
282
|
+
|
|
283
|
+
<details>
|
|
284
|
+
<summary><strong>Docker 执行环境示例</strong></summary>
|
|
285
|
+
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"execution": {
|
|
289
|
+
"mode": "docker",
|
|
290
|
+
"image": "node:24-bookworm-slim",
|
|
291
|
+
"network": false,
|
|
292
|
+
"memory": "2g",
|
|
293
|
+
"cpus": 2
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Docker 不可用时任务会失败,不会静默回退到本机。配置文件中的敏感字段与 OAuth Token 使用本机配置密钥进行 AES-256-GCM 认证加密。
|
|
299
|
+
|
|
300
|
+
</details>
|
|
301
|
+
|
|
302
|
+
## SDK、RPC 与评测
|
|
303
|
+
|
|
304
|
+
<details>
|
|
305
|
+
<summary><strong>Node.js SDK 示例</strong></summary>
|
|
306
|
+
|
|
307
|
+
```ts
|
|
308
|
+
import { createFlavorRuntime } from "flavor-code/sdk";
|
|
309
|
+
|
|
310
|
+
const runtime = await createFlavorRuntime({
|
|
311
|
+
workspace: process.cwd(),
|
|
312
|
+
approvalPolicy: "deny",
|
|
313
|
+
output: console.log,
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
await runtime.session.start();
|
|
317
|
+
await runtime.session.submit("修复失败的测试");
|
|
318
|
+
await runtime.dispose();
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
</details>
|
|
322
|
+
|
|
323
|
+
其他 IDE 或语言可以通过 JSONL RPC 接入:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
flavor --mode rpc --workspace . --trace .flavor/traces/run.jsonl
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
评测运行:
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
flavor eval eval.json --output report.json
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
RPC、trace、replay、eval、会话树与 Docker 的设计约束见 [控制面规范](./docs/specs/2026-07-29-control-plane-sandbox-vscode.md)。
|
|
336
|
+
|
|
337
|
+
## 开发
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
npm ci
|
|
341
|
+
npm test
|
|
342
|
+
npm run typecheck
|
|
343
|
+
npm run vscode:typecheck
|
|
344
|
+
npm run build
|
|
345
|
+
npm run smoke:install
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
- TypeScript strict,目标 ES2022,Node.js 20+
|
|
349
|
+
- Vitest 单元与集成测试
|
|
350
|
+
- tsup 构建 CLI、SDK、Electron 主进程和 VS Code 扩展
|
|
351
|
+
- Vite 构建 Electron renderer
|
|
352
|
+
- CI 覆盖 Windows/macOS 与 Node 20/24
|
|
353
|
+
|
|
354
|
+
发布构建默认不生成或打包 source map。需要本地调试构建时显式开启:
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# macOS / Linux
|
|
358
|
+
FLAVOR_SOURCEMAP=1 npm run build
|
|
359
|
+
|
|
360
|
+
# Windows PowerShell
|
|
361
|
+
$env:FLAVOR_SOURCEMAP = "1"
|
|
362
|
+
npm run build
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
## 文档
|
|
366
|
+
|
|
367
|
+
- [技术方案报告](./技术方案报告.md):整体架构、Agent 循环、上下文、权限、插件和安全模型
|
|
368
|
+
- [运行时可靠性规范](./docs/specs/2026-07-26-runtime-reliability.md)
|
|
369
|
+
- [控制面、沙箱与 VS Code 规范](./docs/specs/2026-07-29-control-plane-sandbox-vscode.md)
|
|
370
|
+
- [多模态图片规范](./docs/specs/2026-07-30-multimodal-image-attachments.md)
|
|
371
|
+
- [VS Code 后续规划](./docs/specs/2026-08-01-flavor-code-vscode-next.md)
|
|
372
|
+
|
|
373
|
+
## 安全提示
|
|
374
|
+
|
|
375
|
+
- 审查模型生成的代码和命令,尤其是依赖安装、脚本和删除操作。
|
|
376
|
+
- 不要把 `.flavor/sessions/`、trace 或长期记忆当作秘密仓库。
|
|
377
|
+
- 使用最小权限 API Key,不要提交 `.env`。
|
|
378
|
+
- Skill 内容可能影响模型行为;插件和自注册工具还拥有进程内 Node.js 权限。
|
|
379
|
+
- 建议在版本控制下工作,并在高风险任务前创建 checkpoint。
|
|
380
|
+
|
|
381
|
+
## 参与贡献
|
|
382
|
+
|
|
383
|
+
欢迎提交 Issue 和 Pull Request。提交前请至少运行:
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
npm test
|
|
387
|
+
npm run typecheck
|
|
388
|
+
npm run vscode:typecheck
|
|
389
|
+
npm run build
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
架构改动建议先阅读 [技术方案报告](./技术方案报告.md) 和相关 [设计规范](./docs/specs/)。
|
|
393
|
+
|
|
394
|
+
## License
|
|
395
|
+
|
|
396
|
+
[MIT](./LICENSE)
|
|
397
|
+
|
|
398
|
+
<p align="center">
|
|
399
|
+
Made with 🌶️ by Flavor Code contributors.
|
|
400
|
+
</p>
|