feihong-code 0.2.1
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/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
- package/.github/ISSUE_TEMPLATE/config.yml +14 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +28 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +46 -0
- package/.github/SECURITY.md +67 -0
- package/.github/workflows/ci.yml +140 -0
- package/AGENT-GUIDE.md +237 -0
- package/CHANGELOG.md +73 -0
- package/CODE_OF_CONDUCT.md +56 -0
- package/CONTRIBUTING.md +68 -0
- package/LICENSE +22 -0
- package/README.md +500 -0
- package/dist/agent/code-review.js +115 -0
- package/dist/agent/code-review.js.map +1 -0
- package/dist/agent/code-writer.js +227 -0
- package/dist/agent/code-writer.js.map +1 -0
- package/dist/agent/context-compactor.js +108 -0
- package/dist/agent/context-compactor.js.map +1 -0
- package/dist/agent/experience.js +190 -0
- package/dist/agent/experience.js.map +1 -0
- package/dist/agent/orchestrator.js +212 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/parallel-orchestrator.js +94 -0
- package/dist/agent/parallel-orchestrator.js.map +1 -0
- package/dist/agent/planner.js +53 -0
- package/dist/agent/planner.js.map +1 -0
- package/dist/agent/prompts.js +26 -0
- package/dist/agent/prompts.js.map +1 -0
- package/dist/agent/quality-gate.js +143 -0
- package/dist/agent/quality-gate.js.map +1 -0
- package/dist/agent/repo-reader.js +384 -0
- package/dist/agent/repo-reader.js.map +1 -0
- package/dist/agent/repo-underwriter.js +132 -0
- package/dist/agent/repo-underwriter.js.map +1 -0
- package/dist/agent/self-heal.js +134 -0
- package/dist/agent/self-heal.js.map +1 -0
- package/dist/agent/self-improver.js +148 -0
- package/dist/agent/self-improver.js.map +1 -0
- package/dist/agent/subagent.js +75 -0
- package/dist/agent/subagent.js.map +1 -0
- package/dist/agent/swe-agent.js +162 -0
- package/dist/agent/swe-agent.js.map +1 -0
- package/dist/agent/swe-planner.js +155 -0
- package/dist/agent/swe-planner.js.map +1 -0
- package/dist/agent/swe-verifier.js +113 -0
- package/dist/agent/swe-verifier.js.map +1 -0
- package/dist/cli/commands.js +167 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.js +179 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/repl.js +67 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/run.js +762 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/version.js +14 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/enterprise/audit.js +294 -0
- package/dist/enterprise/audit.js.map +1 -0
- package/dist/enterprise/guard.js +58 -0
- package/dist/enterprise/guard.js.map +1 -0
- package/dist/enterprise/index.js +99 -0
- package/dist/enterprise/index.js.map +1 -0
- package/dist/enterprise/policy.js +242 -0
- package/dist/enterprise/policy.js.map +1 -0
- package/dist/enterprise/quota.js +58 -0
- package/dist/enterprise/quota.js.map +1 -0
- package/dist/enterprise/tenant.js +143 -0
- package/dist/enterprise/tenant.js.map +1 -0
- package/dist/models/cost.js +13 -0
- package/dist/models/cost.js.map +1 -0
- package/dist/models/model-router.js +170 -0
- package/dist/models/model-router.js.map +1 -0
- package/dist/models/model.dto.js +61 -0
- package/dist/models/model.dto.js.map +1 -0
- package/dist/models/model.interface.js +3 -0
- package/dist/models/model.interface.js.map +1 -0
- package/dist/models/providers/mock.provider.js +35 -0
- package/dist/models/providers/mock.provider.js.map +1 -0
- package/dist/models/providers/ollama.provider.js +88 -0
- package/dist/models/providers/ollama.provider.js.map +1 -0
- package/dist/models/providers/openai-compatible.provider.js +106 -0
- package/dist/models/providers/openai-compatible.provider.js.map +1 -0
- package/dist/runtime/event-log.js +42 -0
- package/dist/runtime/event-log.js.map +1 -0
- package/dist/runtime/git.js +106 -0
- package/dist/runtime/git.js.map +1 -0
- package/dist/runtime/session-persist.js +60 -0
- package/dist/runtime/session-persist.js.map +1 -0
- package/dist/runtime/session-store.js +34 -0
- package/dist/runtime/session-store.js.map +1 -0
- package/dist/runtime/worktree.js +117 -0
- package/dist/runtime/worktree.js.map +1 -0
- package/dist/shared/config.js +184 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/errors.js +66 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/logger.js +51 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/types.js +9 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/skills/goal.js +60 -0
- package/dist/skills/goal.js.map +1 -0
- package/dist/skills/grill.js +129 -0
- package/dist/skills/grill.js.map +1 -0
- package/dist/skills/plan.js +40 -0
- package/dist/skills/plan.js.map +1 -0
- package/dist/tools/analysis/code-analyzer.js +136 -0
- package/dist/tools/analysis/code-analyzer.js.map +1 -0
- package/dist/tools/file/edit.tool.js +43 -0
- package/dist/tools/file/edit.tool.js.map +1 -0
- package/dist/tools/file/list.tool.js +36 -0
- package/dist/tools/file/list.tool.js.map +1 -0
- package/dist/tools/file/read.tool.js +34 -0
- package/dist/tools/file/read.tool.js.map +1 -0
- package/dist/tools/file/write.tool.js +39 -0
- package/dist/tools/file/write.tool.js.map +1 -0
- package/dist/tools/generator/code-generator.js +119 -0
- package/dist/tools/generator/code-generator.js.map +1 -0
- package/dist/tools/generator/test-generator.js +65 -0
- package/dist/tools/generator/test-generator.js.map +1 -0
- package/dist/tools/index.js +53 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/safe-path.js +36 -0
- package/dist/tools/safe-path.js.map +1 -0
- package/dist/tools/search/grep.tool.js +81 -0
- package/dist/tools/search/grep.tool.js.map +1 -0
- package/dist/tools/shell/exec.js +50 -0
- package/dist/tools/shell/exec.js.map +1 -0
- package/dist/tools/shell/run-shell.tool.js +49 -0
- package/dist/tools/shell/run-shell.tool.js.map +1 -0
- package/dist/tools/tool.interface.js +8 -0
- package/dist/tools/tool.interface.js.map +1 -0
- package/dist/tools/tool.registry.js +75 -0
- package/dist/tools/tool.registry.js.map +1 -0
- package/dist/tools/verify/build-check.tool.js +37 -0
- package/dist/tools/verify/build-check.tool.js.map +1 -0
- package/dist/tools/verify/test-run.tool.js +37 -0
- package/dist/tools/verify/test-run.tool.js.map +1 -0
- package/dist/web/auth.js +25 -0
- package/dist/web/auth.js.map +1 -0
- package/dist/web/public/index.html +39 -0
- package/dist/web/server.js +60 -0
- package/dist/web/server.js.map +1 -0
- package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -0
- package/docs//344/274/201/344/270/232/351/203/250/347/275/262/344/270/216/345/220/210/350/247/204.md +267 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +358 -0
- package/docs//345/270/270/350/247/201/351/227/256/351/242/230/344/270/216/346/225/205/351/232/234/346/216/222/346/237/245.md +130 -0
- package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +303 -0
- package/docs//346/236/266/346/236/204/344/270/216API.md +238 -0
- package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -0
- package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -0
- package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -0
- package/package.json +83 -0
- package/tool-schema.json +127 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug 报告
|
|
3
|
+
about: 创建报告帮助我们改进
|
|
4
|
+
title: '[Bug] '
|
|
5
|
+
labels: 'bug'
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 环境信息
|
|
10
|
+
|
|
11
|
+
- **操作系统**: (如 Windows 11 / macOS 14 / Ubuntu 22.04)
|
|
12
|
+
- **Node.js 版本**: `node --version`
|
|
13
|
+
- **fhcode 版本**: `fhcode --version`
|
|
14
|
+
- **模型配置**: Ollama / DeepSeek / OpenAI / 其他
|
|
15
|
+
- **CLI 模式**: 单命令 / --parallel / swe
|
|
16
|
+
|
|
17
|
+
## 复现步骤
|
|
18
|
+
|
|
19
|
+
1. 执行命令: `fhcode "..."`
|
|
20
|
+
2. 输出或错误:
|
|
21
|
+
```
|
|
22
|
+
(粘贴完整错误信息)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 预期行为
|
|
26
|
+
|
|
27
|
+
(描述你期望看到什么)
|
|
28
|
+
|
|
29
|
+
## 实际行为
|
|
30
|
+
|
|
31
|
+
(描述实际发生了什么)
|
|
32
|
+
|
|
33
|
+
## 额外上下文
|
|
34
|
+
|
|
35
|
+
- [ ] 我已在本地验证此 bug
|
|
36
|
+
- [ ] 此问题可稳定复现
|
|
37
|
+
- [ ] 相关截图或日志已附加
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
blank_issues_enabled: true
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: 📚 文档与 FAQ
|
|
4
|
+
url: https://github.com/wch887292/feihong-code/blob/master/docs/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E4%B8%8E%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5.md
|
|
5
|
+
about: 查看常见问题与故障排查
|
|
6
|
+
- name: 💬 讨论与交流
|
|
7
|
+
url: https://github.com/wch887292/feihong-code/discussions
|
|
8
|
+
about: 发起讨论、分享经验、寻求帮助
|
|
9
|
+
- name: 🤝 贡献指南
|
|
10
|
+
url: https://github.com/wch887292/feihong-code/blob/master/CONTRIBUTING.md
|
|
11
|
+
about: 了解如何参与项目开发
|
|
12
|
+
- name: 🔐 安全漏洞报告
|
|
13
|
+
url: https://github.com/wch887292/feihong-code/blob/master/.github/SECURITY.md
|
|
14
|
+
about: 发现安全问题,请通过安全渠道报告
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 功能请求
|
|
3
|
+
about: 为这个项目提出想法
|
|
4
|
+
title: '[Feature] '
|
|
5
|
+
labels: 'enhancement'
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 功能描述
|
|
10
|
+
|
|
11
|
+
(清晰简洁地描述你希望增加的功能)
|
|
12
|
+
|
|
13
|
+
## 使用场景
|
|
14
|
+
|
|
15
|
+
(说明这个功能会解决什么问题,适用哪些场景)
|
|
16
|
+
|
|
17
|
+
## 建议实现方案
|
|
18
|
+
|
|
19
|
+
(如有技术方案或参考实现,请提供)
|
|
20
|
+
|
|
21
|
+
## 备选方案
|
|
22
|
+
|
|
23
|
+
(你考虑过哪些替代方案?)
|
|
24
|
+
|
|
25
|
+
## 额外信息
|
|
26
|
+
|
|
27
|
+
- **关联问题**: #(如有)
|
|
28
|
+
- **优先级**: 低 / 中 / 高
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
## 变更类型
|
|
2
|
+
|
|
3
|
+
- [ ] Bug 修复
|
|
4
|
+
- [ ] 新功能
|
|
5
|
+
- [ ] 性能优化
|
|
6
|
+
- [ ] 文档更新
|
|
7
|
+
- [ ] 重构
|
|
8
|
+
- [ ] 测试补充
|
|
9
|
+
|
|
10
|
+
## 关联 Issue
|
|
11
|
+
|
|
12
|
+
修复 #(issue 编号)
|
|
13
|
+
|
|
14
|
+
## 变更描述
|
|
15
|
+
|
|
16
|
+
(清晰描述本次 PR 做了什么变更)
|
|
17
|
+
|
|
18
|
+
## 测试验证
|
|
19
|
+
|
|
20
|
+
- [ ] 本地类型检查通过:`npm run typecheck`
|
|
21
|
+
- [ ] 单元测试通过:`npm test`
|
|
22
|
+
- [ ] M4 企业能力验证:`npm run verify:m4`
|
|
23
|
+
- [ ] 全量验证:`npm run verify`
|
|
24
|
+
- [ ] 手动测试覆盖(如有新功能)
|
|
25
|
+
|
|
26
|
+
## 变更影响范围
|
|
27
|
+
|
|
28
|
+
- 影响的模块:
|
|
29
|
+
- 向后兼容性:是 / 否(如有破坏性变更请说明)
|
|
30
|
+
- 需要更新文档:是 / 否
|
|
31
|
+
|
|
32
|
+
## 截图(如有 UI 变更)
|
|
33
|
+
|
|
34
|
+
(粘贴截图或录屏链接)
|
|
35
|
+
|
|
36
|
+
## 提交信息格式
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
feat(scope): 简要描述(符合 Conventional Commits)
|
|
40
|
+
fix(scope): 简要描述
|
|
41
|
+
docs(scope): 简要描述
|
|
42
|
+
test(scope): 简要描述
|
|
43
|
+
refactor(scope): 简要描述
|
|
44
|
+
perf(scope): 简要描述
|
|
45
|
+
chore(scope): 简要描述
|
|
46
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 安全政策
|
|
2
|
+
|
|
3
|
+
## 受支持的版本
|
|
4
|
+
|
|
5
|
+
| 版本 | 支持状态 |
|
|
6
|
+
|------|----------|
|
|
7
|
+
| 0.2.x (Latest) | ✅ 活跃维护 |
|
|
8
|
+
| 0.1.x | ⚠️ 仅安全补丁 |
|
|
9
|
+
|
|
10
|
+
## 报告漏洞
|
|
11
|
+
|
|
12
|
+
**请不要在公共 Issue 中报告安全问题。**
|
|
13
|
+
|
|
14
|
+
### 私有报告渠道
|
|
15
|
+
|
|
16
|
+
1. **GitHub Security Advisories**(推荐)
|
|
17
|
+
- 访问: https://github.com/wch887292/feihong-code/security/advisories
|
|
18
|
+
- 或直接创建 Security Advisory
|
|
19
|
+
|
|
20
|
+
2. **邮件联系**
|
|
21
|
+
- 负责人:吴赐虹
|
|
22
|
+
- 邮箱:wch887292@gmail.com(请在邮件标题注明 `[SECURITY] feihong-code`)
|
|
23
|
+
|
|
24
|
+
### 报告内容
|
|
25
|
+
|
|
26
|
+
请包含以下信息:
|
|
27
|
+
- 问题描述与复现步骤
|
|
28
|
+
- 受影响版本
|
|
29
|
+
- 潜在影响评估
|
|
30
|
+
- 建议修复方案(如有)
|
|
31
|
+
- 联系方式(可选)
|
|
32
|
+
|
|
33
|
+
### 响应时间
|
|
34
|
+
|
|
35
|
+
- **确认收到**: 24 小时内
|
|
36
|
+
- **初步评估**: 72 小时内
|
|
37
|
+
- **补丁发布**: 根据严重程度,通常 1-2 周内
|
|
38
|
+
|
|
39
|
+
## 安全最佳实践
|
|
40
|
+
|
|
41
|
+
### 密钥管理
|
|
42
|
+
- ✅ 永远不要提交 `.env` 文件
|
|
43
|
+
- ✅ 使用环境变量或 `fhcode.config.json` 管理密钥
|
|
44
|
+
- ✅ 定期轮换 API Key
|
|
45
|
+
|
|
46
|
+
### 运行时安全
|
|
47
|
+
- 启用 `FH_OFFLINE=true` 进行测试
|
|
48
|
+
- 使用 `--max-iterations` 控制成本
|
|
49
|
+
- 启用 RBAC 策略:`FH_ENTERPRISE=true`
|
|
50
|
+
|
|
51
|
+
### 审计追踪
|
|
52
|
+
- 定期检查审计日志:`fhcode audit verify`
|
|
53
|
+
- 启用多租户隔离
|
|
54
|
+
- 配置配额熔断
|
|
55
|
+
|
|
56
|
+
## 已公开的安全修复
|
|
57
|
+
|
|
58
|
+
| 日期 | 版本 | 描述 |
|
|
59
|
+
|------|------|------|
|
|
60
|
+
| 2026-08-12 | 0.2.1 | M8 请求体限流、M14 配额冻结、M5 审计并发锁、M12 脱敏扩充 |
|
|
61
|
+
| 2026-08-12 | 0.2.1 | H1 spawn 挂起防护、H2 沙箱逃逸防护、H3 flag 解析修复、H4 system 指令保留 |
|
|
62
|
+
|
|
63
|
+
## 安全依赖
|
|
64
|
+
|
|
65
|
+
运行 `npm audit` 检查依赖安全状态。我们采用最小依赖策略,仅引入:
|
|
66
|
+
- `express` - HTTP 服务器
|
|
67
|
+
- `zod` - 参数校验
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# 飞虹 Code CI
|
|
2
|
+
# 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
3
|
+
#
|
|
4
|
+
# 全流程离线:不使用任何 API key / Secrets,PR 来自 fork 也能安全跑完。
|
|
5
|
+
name: CI
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [master, main]
|
|
10
|
+
pull_request:
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
env:
|
|
14
|
+
FH_OFFLINE: 'true'
|
|
15
|
+
FH_PROVIDERS: '[]'
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
# ---------- 1. 构建与离线闭环冒烟(多 Node 版本矩阵) ----------
|
|
19
|
+
build:
|
|
20
|
+
name: 构建 · Node ${{ matrix.node }}
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
strategy:
|
|
23
|
+
fail-fast: false
|
|
24
|
+
matrix:
|
|
25
|
+
node: [18, 20, 22]
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: ${{ matrix.node }}
|
|
31
|
+
- run: npm install
|
|
32
|
+
- name: 类型检查
|
|
33
|
+
run: npm run typecheck
|
|
34
|
+
- name: 编译
|
|
35
|
+
run: npm run build
|
|
36
|
+
- name: CLI 可用性
|
|
37
|
+
run: node dist/cli/index.js --version
|
|
38
|
+
- name: 离线端到端闭环
|
|
39
|
+
run: node dist/cli/index.js "离线冒烟:创建一个说明文件"
|
|
40
|
+
- name: 只读技能
|
|
41
|
+
run: |
|
|
42
|
+
node dist/cli/index.js /plan "实现登录并且添加支付"
|
|
43
|
+
node dist/cli/index.js /grill src
|
|
44
|
+
|
|
45
|
+
# ---------- 2. M4 企业能力(权限 / 审计 / 多租户 / 配额) ----------
|
|
46
|
+
enterprise:
|
|
47
|
+
name: 企业能力冒烟 (M4)
|
|
48
|
+
runs-on: ubuntu-latest
|
|
49
|
+
steps:
|
|
50
|
+
- uses: actions/checkout@v4
|
|
51
|
+
- uses: actions/setup-node@v4
|
|
52
|
+
with:
|
|
53
|
+
node-version: 20
|
|
54
|
+
- run: npm install
|
|
55
|
+
- run: npm run build
|
|
56
|
+
- name: M4 断言套件(RBAC / 审计链 / 多租户 / 配额)
|
|
57
|
+
run: node scripts/verify-m4.mjs
|
|
58
|
+
- name: CLI 企业命令冒烟
|
|
59
|
+
env:
|
|
60
|
+
FH_HOME: ${{ runner.temp }}/fhhome
|
|
61
|
+
FH_TENANT: ci-tenant
|
|
62
|
+
FH_USER: ci-bot
|
|
63
|
+
FH_ROLE: developer
|
|
64
|
+
run: |
|
|
65
|
+
node dist/cli/index.js whoami
|
|
66
|
+
node dist/cli/index.js policy
|
|
67
|
+
node dist/cli/index.js "CI 离线任务"
|
|
68
|
+
node dist/cli/index.js audit --limit 10
|
|
69
|
+
node dist/cli/index.js audit verify
|
|
70
|
+
node dist/cli/index.js tenants
|
|
71
|
+
- name: 租户隔离断言(beta 不得看到 ci-tenant 的会话)
|
|
72
|
+
env:
|
|
73
|
+
FH_HOME: ${{ runner.temp }}/fhhome
|
|
74
|
+
FH_TENANT: beta-tenant
|
|
75
|
+
FH_ROLE: viewer
|
|
76
|
+
run: |
|
|
77
|
+
out=$(node dist/cli/index.js sessions)
|
|
78
|
+
echo "$out"
|
|
79
|
+
if echo "$out" | grep -q "CI 离线任务"; then
|
|
80
|
+
echo "::error::租户隔离失效:beta-tenant 读到了 ci-tenant 的会话"
|
|
81
|
+
exit 1
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
# ---------- 3. 供应链与密钥安全 ----------
|
|
85
|
+
security:
|
|
86
|
+
name: 发布包安全检查
|
|
87
|
+
runs-on: ubuntu-latest
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/checkout@v4
|
|
90
|
+
- uses: actions/setup-node@v4
|
|
91
|
+
with:
|
|
92
|
+
node-version: 20
|
|
93
|
+
- run: npm install
|
|
94
|
+
- run: npm run build
|
|
95
|
+
- name: 发布包不得包含密钥或源码
|
|
96
|
+
run: |
|
|
97
|
+
npm pack --dry-run 2>&1 | tee pack.txt
|
|
98
|
+
for bad in ".env" "src/" ".workbuddy" "policy.json" "id_rsa"; do
|
|
99
|
+
if grep -q "$bad" pack.txt; then
|
|
100
|
+
echo "::error::发布包中检出敏感条目: $bad"
|
|
101
|
+
exit 1
|
|
102
|
+
fi
|
|
103
|
+
done
|
|
104
|
+
echo "发布包白名单校验通过"
|
|
105
|
+
- name: 仓库内不得提交明文密钥
|
|
106
|
+
run: |
|
|
107
|
+
if git grep -nIE "sk-[A-Za-z0-9_-]{16,}" -- . ':!*.md' ':!scripts/verify-m4.mjs'; then
|
|
108
|
+
echo "::error::检出疑似明文 API Key"
|
|
109
|
+
exit 1
|
|
110
|
+
fi
|
|
111
|
+
echo "密钥扫描通过"
|
|
112
|
+
- run: npm audit --omit=dev --audit-level=high
|
|
113
|
+
continue-on-error: true
|
|
114
|
+
|
|
115
|
+
# ---------- 4. 容器镜像构建校验(稳定部署) ----------
|
|
116
|
+
docker:
|
|
117
|
+
name: Docker 镜像构建校验
|
|
118
|
+
runs-on: ubuntu-latest
|
|
119
|
+
steps:
|
|
120
|
+
- uses: actions/checkout@v4
|
|
121
|
+
- name: 构建镜像(不推送)
|
|
122
|
+
run: docker build -t feihong-code:ci .
|
|
123
|
+
- name: 冒烟:容器内企业命令可用
|
|
124
|
+
run: |
|
|
125
|
+
docker run --rm \
|
|
126
|
+
-e FH_ENTERPRISE=true -e FH_TENANT=ci -e FH_USER=ci -e FH_ROLE=developer \
|
|
127
|
+
feihong-code:ci whoami
|
|
128
|
+
- name: 冒烟:Web 控制台可启动
|
|
129
|
+
run: |
|
|
130
|
+
docker run --rm -d --name fhcode-smoke -p 8099:8080 \
|
|
131
|
+
-e FH_ENTERPRISE=true -e FH_WEB_TOKEN=ci-token -e FH_WEB_PORT=8080 \
|
|
132
|
+
feihong-code:ci serve --port 8080
|
|
133
|
+
sleep 3
|
|
134
|
+
code=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer ci-token" http://localhost:8099/api/health)
|
|
135
|
+
docker rm -f fhcode-smoke
|
|
136
|
+
if [ "$code" != "200" ]; then
|
|
137
|
+
echo "::error::Web 控制台健康检查失败,HTTP=$code"
|
|
138
|
+
exit 1
|
|
139
|
+
fi
|
|
140
|
+
echo "Web 控制台健康检查通过 (HTTP 200)"
|
package/AGENT-GUIDE.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# AGENT-GUIDE.md — 面向 AI Agent 的使用指南
|
|
2
|
+
|
|
3
|
+
> **本文档专为 AI Agent 设计**,提供快速上手所需的环境、配置、工具契约与最佳实践。
|
|
4
|
+
>
|
|
5
|
+
> 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
6
|
+
> 版本:0.2.1 | 2026-08-12
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 一、项目简介
|
|
11
|
+
|
|
12
|
+
**飞虹 Code(fhcode)** 是一款运行在终端的 AI 编程智能体,支持:
|
|
13
|
+
|
|
14
|
+
- **自然语言 → 代码闭环**:描述需求,自动规划、编写、验证
|
|
15
|
+
- **多模型路由**:DeepSeek / 通义 / Ollama(本地)/ OpenAI 兼容
|
|
16
|
+
- **企业级安全**:RBAC、审计链、多租户、配额熔断
|
|
17
|
+
- **全自动软件工程**:`swe` 命令可自主完成仓库级开发任务
|
|
18
|
+
|
|
19
|
+
**GitHub**:`github.com/wch887292/feihong-code`(待上线)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 二、环境要求
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 必需
|
|
27
|
+
Node.js >= 18(推荐 20 或 22)
|
|
28
|
+
npm >= 9
|
|
29
|
+
|
|
30
|
+
# 可选但推荐
|
|
31
|
+
git(--parallel 模式需要 worktree)
|
|
32
|
+
tsx(开发模式)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**验证环境**:
|
|
36
|
+
```bash
|
|
37
|
+
node --version # 应 >= 18.0.0
|
|
38
|
+
npm --version # 应 >= 9.0.0
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 三、快速安装
|
|
44
|
+
|
|
45
|
+
### 方式一:从源码构建(推荐)
|
|
46
|
+
```bash
|
|
47
|
+
git clone https://github.com/wch887292/feihong-code.git
|
|
48
|
+
cd feihong-code
|
|
49
|
+
npm install
|
|
50
|
+
npm run build
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 方式二:全局安装
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g feihong-code
|
|
56
|
+
fhcode --version # 验证安装
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 四、模型配置(关键)
|
|
62
|
+
|
|
63
|
+
### 4.1 环境变量优先级
|
|
64
|
+
1. `FH_PROVIDERS`(JSON 数组,最高优先级)
|
|
65
|
+
2. `fhcode.config.json`(项目配置文件)
|
|
66
|
+
3. 单环境变量 `FH_MODEL_*`(快速接入)
|
|
67
|
+
|
|
68
|
+
### 4.2 Ollama 本地模型(推荐测试)
|
|
69
|
+
```bash
|
|
70
|
+
export FH_MODEL_NAME=qwen3:8b
|
|
71
|
+
export FH_MODEL_TYPE=ollama
|
|
72
|
+
export FH_MODEL_BASE_URL=http://localhost:11434
|
|
73
|
+
export FH_MODEL_TAGS=code-gen,reasoning,local
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 4.3 DeepSeek(推荐生产)
|
|
77
|
+
```bash
|
|
78
|
+
export FH_PROVIDERS='[{"name":"deepseek","type":"openai-compatible","baseUrl":"https://api.deepseek.com/v1","apiKey":"sk-...","tags":["code-gen","reasoning"],"priority":1}]'
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 4.4 离线 Mock(测试)
|
|
82
|
+
```bash
|
|
83
|
+
export FH_OFFLINE=true
|
|
84
|
+
# 或使用空 providers
|
|
85
|
+
export FH_PROVIDERS='[]'
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 五、典型工作流
|
|
91
|
+
|
|
92
|
+
### 5.1 单任务执行
|
|
93
|
+
```bash
|
|
94
|
+
# 基础用法
|
|
95
|
+
fhcode "实现一个 HTTP 服务器,监听 3000 端口"
|
|
96
|
+
|
|
97
|
+
# 带约束
|
|
98
|
+
fhcode --max-iterations 10 --yes "修复 src/auth.ts 中的 token 验证 bug"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 5.2 并行子任务
|
|
102
|
+
```bash
|
|
103
|
+
# 自动拆分目标,worktree 隔离执行
|
|
104
|
+
fhcode --parallel "实现登录模块 并且 添加用户管理 并且 写集成测试"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 5.3 全自动软件工程
|
|
108
|
+
```bash
|
|
109
|
+
# 读取整个仓库 → 规划 → 实现 → 验证 → 报告
|
|
110
|
+
fhcode swe "修复 src/calc.ts 的 add 函数 bug,让 tests/calc.test.ts 通过" \
|
|
111
|
+
--repo /path/to/project \
|
|
112
|
+
--max-tasks 3 \
|
|
113
|
+
--max-iterations 5
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 5.4 只读技能
|
|
117
|
+
```bash
|
|
118
|
+
# 生成实现计划
|
|
119
|
+
fhcode /plan "实现登录并且添加支付"
|
|
120
|
+
|
|
121
|
+
# 红队审查(安全审计)
|
|
122
|
+
fhcode /grill src/
|
|
123
|
+
|
|
124
|
+
# 目标跟踪
|
|
125
|
+
fhcode /goal
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 六、工具调用契约
|
|
131
|
+
|
|
132
|
+
### 6.1 工具清单
|
|
133
|
+
| 类别 | 工具 | 说明 |
|
|
134
|
+
|------|------|------|
|
|
135
|
+
| 文件 | `write_file` | 写入/覆盖文件 |
|
|
136
|
+
| 文件 | `edit_file` | 插入/删除/替换文本 |
|
|
137
|
+
| 文件 | `read_file` | 读取文件内容 |
|
|
138
|
+
| 文件 | `list_files` | 列出目录内容 |
|
|
139
|
+
| 搜索 | `grep` | 正则搜索 |
|
|
140
|
+
| Shell | `run_shell` | 执行命令 |
|
|
141
|
+
| 验证 | `build_check` | 检查编译 |
|
|
142
|
+
| 验证 | `run_tests` | 运行测试 |
|
|
143
|
+
|
|
144
|
+
### 6.2 工具参数格式
|
|
145
|
+
所有工具调用遵循 JSON Schema:
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"tool_calls": [
|
|
149
|
+
{
|
|
150
|
+
"type": "function",
|
|
151
|
+
"function": {
|
|
152
|
+
"name": "write_file",
|
|
153
|
+
"arguments": "{\"path\":\"src/main.ts\",\"content\":\"export const x = 1;\"}"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 6.3 工具返回格式
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"tool_call_id": "call_abc123",
|
|
164
|
+
"output": "已写入 src/main.ts(25 字节)",
|
|
165
|
+
"error": null
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 七、错误处理
|
|
172
|
+
|
|
173
|
+
### 7.1 常见错误码
|
|
174
|
+
| 错误码 | 含义 | 处理建议 |
|
|
175
|
+
|--------|------|----------|
|
|
176
|
+
| `FH_4001` | 配额超限 | 等待重置或申请配额 |
|
|
177
|
+
| `FH_4003` | 权限拒绝 | 检查 RBAC 策略 |
|
|
178
|
+
| `FH_5001` | 模型调用失败 | 检查 provider 配置 |
|
|
179
|
+
| `FH_5002` | 上下文压缩失败 | 使用 /plan 重新规划 |
|
|
180
|
+
| `FH_6001` | 文件路径越权 | 检查沙箱规则 |
|
|
181
|
+
|
|
182
|
+
### 7.2 调试技巧
|
|
183
|
+
```bash
|
|
184
|
+
# 查看详细日志
|
|
185
|
+
export FH_LOG_LEVEL=debug
|
|
186
|
+
fhcode "你的任务"
|
|
187
|
+
|
|
188
|
+
# 查看会话历史
|
|
189
|
+
fhcode sessions
|
|
190
|
+
|
|
191
|
+
# 恢复上次会话
|
|
192
|
+
fhcode resume <session-id>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 八、企业部署
|
|
198
|
+
|
|
199
|
+
### 8.1 必需环境变量
|
|
200
|
+
```bash
|
|
201
|
+
export FH_ENTERPRISE=true
|
|
202
|
+
export FH_TENANT=my-org
|
|
203
|
+
export FH_USER=agent-sa
|
|
204
|
+
export FH_ROLE=developer
|
|
205
|
+
export FH_WEB_TOKEN=<web-console-token>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 8.2 Web 控制台
|
|
209
|
+
```bash
|
|
210
|
+
# 启动服务
|
|
211
|
+
fhcode serve --port 8080
|
|
212
|
+
|
|
213
|
+
# 访问
|
|
214
|
+
# http://localhost:8080
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 九、验证套件
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# 全量验证
|
|
223
|
+
npm run verify
|
|
224
|
+
|
|
225
|
+
# 单项验证
|
|
226
|
+
npm run verify:m4 # 企业能力
|
|
227
|
+
npm test # 单元测试
|
|
228
|
+
node scripts/verify-m9.mjs # SWE 能力
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 十、联系与反馈
|
|
234
|
+
|
|
235
|
+
- **GitHub Issues**:提交 bug 或功能请求
|
|
236
|
+
- **文档**:详见 `docs/` 目录
|
|
237
|
+
- **署名**:晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# 更新日志 (CHANGELOG)
|
|
2
|
+
|
|
3
|
+
本文件遵循 [Keep a Changelog](https://keepachangelog.com/) 约定,版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
4
|
+
|
|
5
|
+
## [0.2.1] — 2026-08-11(M9.1 真实模型接入与实测调优)
|
|
6
|
+
|
|
7
|
+
> 让 `swe` 与常规命令可一键接入真实模型,并以 mock HTTP 服务实测"真实 provider 全链路"。
|
|
8
|
+
|
|
9
|
+
### 新增(Added)
|
|
10
|
+
- **三级供应商解析**:`loadConfig` 现依次支持 `FH_PROVIDERS`(JSON 数组)、`fhcode.config.json`(`models.providers`)、单环境变量快速接入(`FH_MODEL_NAME`/`FH_MODEL_TYPE`/`FH_MODEL_BASE_URL`/`FH_MODEL_API_KEY`/`FH_MODEL_TAGS`)。
|
|
11
|
+
- **`swe` 新增 `--max-iterations`**:控制每个子任务的模型推理轮数(真实模型建议 4~8,控成本/耗时)。
|
|
12
|
+
- **真实模型执行纪律强化**:`swe-planner` 增加"必须通过工具落地、必须真跑验证、禁谎报、只改相关文件"等约束;`swe-agent` 自愈注入改为携带验证命令的**真实输出**,更具可操作性。
|
|
13
|
+
- **真实接入就绪检查**:`fhcode swe` 在真实模式未配置任何供应商时给出明确的三种接入指引,避免盲目失败。
|
|
14
|
+
- **接入实测脚本** `scripts/verify-m9-real.mjs`:以本地 mock HTTP 服务(兼容 OpenAI / Ollama 协议)驱动 `swe` 走完整的"真实 HTTP provider → 编排器工具循环 → 验证器"链路,11 项断言全通过,无需任何外部模型。
|
|
15
|
+
|
|
16
|
+
### 校验(Verified)
|
|
17
|
+
- TypeScript 零错误;M4 企业能力验证 41/41 通过;M9 验证 25/25 通过;M9 真实接入实测 11/11 通过。
|
|
18
|
+
|
|
19
|
+
## [0.2.0] — 2026-08-11(M9 全自动软件工程 Agent)
|
|
20
|
+
|
|
21
|
+
> 新增全自动软件工程 Agent(M9),对标业界"读取仓库→拆解→改码→跑测试→验证"长链路自主开发范式。
|
|
22
|
+
|
|
23
|
+
### 新增(Added)
|
|
24
|
+
- **仓库读取器(repo-reader)**:扫描整个(大型)代码仓库,含文件数/体积限流、`.gitignore` 解析、语言分布、关键文件识别、测试/构建命令探测、目录树与上下文串。
|
|
25
|
+
- **任务拆解规划器(swe-planner)**:将目标拆解为有序、可独立验证的子任务(勘察→实现/修复/重构→测试→构建验证),每个子任务携带目标文件、验收标准与验证命令。
|
|
26
|
+
- **验证器(swe-verifier)**:根据仓库快照自动执行构建与测试,解析 exit code 与输出,判定每步/整体通过/失败,产出错误摘要供自愈注入。
|
|
27
|
+
- **全自动 Agent 主编排(swe-agent)**:读取仓库→规划→逐任务(委托 Orchestrator 实现 + 构建/测试验证 + 失败自愈重试)→ 产出结构化 `SweReport`;支持 `plan-only` / `verify-only` / `max-tasks` / `max-retries` 模式。
|
|
28
|
+
- **CLI 命令**:`fhcode swe "<目标>" [--repo PATH] [--plan-only] [--verify-only] [--max-tasks N] [--max-retries N]`。
|
|
29
|
+
- **验证脚本**:`scripts/verify-m9.mjs`(25 项离线断言,覆盖四阶段 + 自愈路径)。
|
|
30
|
+
|
|
31
|
+
### 校验(Verified)
|
|
32
|
+
- TypeScript 零错误;M4 企业能力验证 41/41 通过;M9 验证 25/25 通过。
|
|
33
|
+
|
|
34
|
+
## [0.1.0] — 2026-08-10(稳定版 / Stable)
|
|
35
|
+
|
|
36
|
+
> M4 企业级能力合入,fhcode 进入可稳定部署状态。
|
|
37
|
+
|
|
38
|
+
### 新增(Added)
|
|
39
|
+
- **企业级权限(RBAC)**:四角色矩阵(viewer / developer / operator / admin)+ deny 优先判定顺序;内置 23 条危险命令黑名单、11 类敏感路径黑名单;策略覆盖仅能加严(黑名单取并集)。
|
|
40
|
+
- **防篡改审计**:sha256 哈希链(按月切分 `audit-YYYY-MM.jsonl`),写入即链式校验;`audit verify` 可定位断点;日志脱敏(apiKey/secret/token/Bearer/sk- 等)。
|
|
41
|
+
- **多租户隔离**:物理目录隔离 `<FH_HOME>/tenants/<tenantId>/{sessions,audit,goals}`,租户 ID 正则校验 `^[A-Za-z0-9._-]{1,64}$` 防穿越;默认租户兼容旧版 `<FH_HOME>/sessions`。
|
|
42
|
+
- **成本治理**:单任务 `maxCostUsd` 熔断 + 租户日预算 `FH_TENANT_BUDGET_USD` fail-fast;`whoami` 展示用量。
|
|
43
|
+
- **企业命令**:`whoami` / `policy` / `audit [--limit N]` / `audit verify` / `tenants`。
|
|
44
|
+
- **CI 三流水线**:`build`(Node 18/20/22 矩阵 + 离线闭环)/ `enterprise`(41 项全离线断言 + 租户隔离)/ `security`(发布包白名单 + 明文密钥扫描 + npm audit),零 Secrets 全离线。
|
|
45
|
+
- **Web 管理控制台(BETA)**:`fhcode serve [--port 8080]`,Bearer Token 鉴权(fail-closed),只读观测 API(tenants/whoami/policy/audit/audit verify/sessions/quota)+ 原生静态仪表盘。
|
|
46
|
+
- 文档体系:README、用户手册、配置参考、架构与API、部署指南、常见问题、企业部署与合规、产品开发文档。
|
|
47
|
+
|
|
48
|
+
### 变更(Changed)
|
|
49
|
+
- `guard` 作为唯一权威闸门:策略判定 → 人工审批 → 审计留痕在工具执行前一次性完成;工具层不再二次弹审批(注入后 `security` 置空去重)。
|
|
50
|
+
- 向后兼容:未注入 guard 或 `FH_ENTERPRISE=false` 时行为同社区版(M3),无感降级。
|
|
51
|
+
|
|
52
|
+
### 安全(Security)
|
|
53
|
+
- 密钥仅存 gitignored `.env`,不回显完整 key;日志脱敏。
|
|
54
|
+
- 发布包白名单(`files` + `.npmignore`)双重保障:`.env` / `src` / `.workbuddy` 不随 `npm publish` 泄露。
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## [0.0.x] — 里程碑演进(已提交)
|
|
59
|
+
|
|
60
|
+
- **M0+M1**:CLI 骨架 + 单代理闭环(需求解析 → 规划 → 工具调用 → 反思)。
|
|
61
|
+
- **M2**:多子代理并行编排(`/plan` `/grill` `/goal` 技能)。
|
|
62
|
+
- **B 方案**:接入真实模型(`.env` 加载器 + 联调验证)。
|
|
63
|
+
- **M3**:恢复与审计(`sessions`/`resume`/`diff`/`rollback` + 交互式审批流)。
|
|
64
|
+
- **M4**:见上 [0.1.0]。
|
|
65
|
+
|
|
66
|
+
### 进行中(In Progress)
|
|
67
|
+
- **M5 Web 管理控制台**:S1 服务骨架 + `serve` 命令已完成并验证(见 [0.1.0] BETA);S2 观测 API / S3 前端仪表盘 / S4 安全加固 / S5 文档与 verify-m5 待推进。
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 署名
|
|
72
|
+
|
|
73
|
+
晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|