svharness 0.8.0 → 0.13.2
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 +290 -61
- package/dist/adapters/claude-code.js +1 -0
- package/dist/adapters/codechat.js +1 -0
- package/dist/adapters/cursor.js +1 -0
- package/dist/adapters/generic.js +1 -0
- package/dist/adapters/index.js +2 -0
- package/dist/adapters/opencode.js +17 -0
- package/dist/adapters/qoder.js +1 -0
- package/dist/commands/apply.js +456 -71
- package/dist/commands/convert.js +371 -0
- package/dist/commands/init.js +156 -11
- package/dist/commands/references-apply-skills.js +47 -0
- package/dist/commands/wizard.js +442 -0
- package/dist/config/constants.js +7 -0
- package/dist/config/index.js +18 -0
- package/dist/config/load-config.js +54 -0
- package/dist/config/merge-options.js +115 -0
- package/dist/config/normalize.js +165 -0
- package/dist/config/save-config.js +40 -0
- package/dist/config/types.js +2 -0
- package/dist/core/agent-injector.js +58 -9
- package/dist/core/apply-project-entry.js +66 -0
- package/dist/core/build-project-entry.js +98 -0
- package/dist/core/doc-intake-paths.js +155 -0
- package/dist/core/extra-assets-intake.js +254 -0
- package/dist/core/markitdown-client.js +156 -0
- package/dist/core/next-steps.js +33 -22
- package/dist/core/project-ignore.js +53 -0
- package/dist/core/reference-apply-skills.js +35 -0
- package/dist/core/render-meta.js +2 -1
- package/dist/core/repomix-pack.js +3 -3
- package/dist/core/state.js +44 -24
- package/dist/index.js +211 -140
- package/dist/utils/harness-name.js +41 -0
- package/dist/utils/validate-args.js +147 -6
- package/dist/wiki/wikiTasksWriter.js +5 -6
- package/package.json +2 -1
- package/templates/_shared/apply-skills/harness-apply-skills-main.md +19 -78
- package/templates/_shared/build-rules/harness-build-rule-agent-agnostic.md +5 -5
- package/templates/_shared/build-rules/harness-build-rule-chinese-only.md +5 -5
- package/templates/_shared/build-rules/harness-build-rule-convert-check.md +46 -0
- package/templates/_shared/build-rules/harness-build-rule-memory-write.md +1 -1
- package/templates/_shared/build-rules/harness-build-rule-orchestrator-flow.md +36 -10
- package/templates/_shared/build-rules/harness-build-rule-skills-tasks-output.md +3 -2
- package/templates/_shared/build-rules/harness-build-rule-specs-schema.md +3 -3
- package/templates/_shared/build-rules/harness-build-rule-user-interaction.md +36 -16
- package/templates/_shared/build-skills/harness-build-skill-agent-env-merge.md +75 -0
- package/templates/_shared/build-skills/harness-build-skill-knowledge-builder.md +49 -85
- package/templates/_shared/build-skills/harness-build-skill-orchestrator.md +35 -18
- package/templates/_shared/build-skills/harness-build-skill-references-intake.md +91 -0
- package/templates/_shared/build-skills/harness-build-skill-spec-builder.md +19 -9
- package/templates/_shared/build-skills/harness-build-skill-wiki-writer.md +24 -24
- package/templates/_shared/build-skills/harness-build-skills-main.md +83 -0
- package/templates/_shared/meta/AGENTS_APPLY.md.ejs +139 -0
- package/templates/_shared/meta/{AGENTS.md.ejs → AGENTS_BUILD.md.ejs} +7 -5
- package/templates/_shared/meta/CHANGELOG.md.ejs +3 -3
- package/templates/_shared/meta/README.md.ejs +11 -9
- package/templates/_shared/meta/harness.yaml.ejs +28 -7
- package/templates/_shared/skeleton/baseline/code/.gitkeep +1 -0
- package/templates/_shared/skeleton/baseline/wiki/.gitkeep +1 -0
- package/templates/_shared/skeleton/references/apply-skills-registry.example.yaml +11 -0
- package/templates/_shared/skeleton/references/md/.gitkeep +1 -0
- package/templates/_shared/skeleton/references/raw/.gitkeep +1 -0
- package/templates/_shared/skeleton/references/yaml/.gitkeep +1 -0
- package/templates/_shared/skeleton/requirements/md/.gitkeep +1 -0
- package/templates/_shared/skeleton/requirements/raw/.gitkeep +1 -0
- package/templates/_shared/skeleton/requirements/yaml/.gitkeep +1 -0
- package/templates/android-xml/skeleton/agent-env/skills/harness-android-cli/SKILL.md +88 -0
- package/templates/android-xml/skeleton/agent-env/skills/harness-android-service-patterns/SKILL.md +205 -0
- package/templates/android-xml/skeleton/agent-env/skills/harness-android-xml-architecture/SKILL.md +138 -0
- package/templates/android-xml/skeleton/agent-env/skills/harness-lifecycle-management/SKILL.md +158 -0
- package/templates/android-xml/skeleton/agent-env/skills/harness-xml-ui/SKILL.md +112 -0
- package/templates/cpp/skeleton/agent-env/skills/harness-cmake-build/SKILL.md +163 -0
- package/templates/cpp/skeleton/agent-env/skills/harness-cpp-architecture/SKILL.md +157 -0
- package/templates/cpp/skeleton/agent-env/skills/harness-cpp-concurrency/SKILL.md +180 -0
- package/templates/cpp/skeleton/agent-env/skills/harness-memory-safety/SKILL.md +163 -0
- package/templates/cpp/skeleton/agent-env/skills/harness-modern-cpp/SKILL.md +149 -0
- package/templates/python/skeleton/agent-env/skills/harness-async-patterns/SKILL.md +162 -0
- package/templates/python/skeleton/agent-env/skills/harness-python-architecture/SKILL.md +160 -0
- package/templates/python/skeleton/agent-env/skills/harness-python-package-structure/SKILL.md +210 -0
- package/templates/python/skeleton/agent-env/skills/harness-python-performance/SKILL.md +207 -0
- package/templates/python/skeleton/agent-env/skills/harness-python-testing/SKILL.md +198 -0
- package/templates/svharness.config.example.yaml +40 -0
- package/templates/web-react/skeleton/agent-env/skills/harness-react-architecture/SKILL.md +177 -0
- package/templates/web-react/skeleton/agent-env/skills/harness-react-performance/SKILL.md +177 -0
- package/templates/web-react/skeleton/agent-env/skills/harness-react-testing/SKILL.md +193 -0
- package/templates/web-react/skeleton/agent-env/skills/harness-react-ui-patterns/SKILL.md +257 -0
- package/templates/web-react/skeleton/agent-env/skills/harness-state-management/SKILL.md +189 -0
- package/templates/_shared/skeleton/assets/baseline/code/.gitkeep +0 -1
- package/templates/_shared/skeleton/assets/baseline/wiki/.gitkeep +0 -1
- package/templates/_shared/skeleton/assets/raw/.gitkeep +0 -1
- package/templates/_shared/skeleton/assets/requirements/.gitkeep +0 -1
- /package/templates/_shared/skeleton/{assets/baseline/repomix → agent-env/_incoming/skills}/.gitkeep +0 -0
package/README.md
CHANGED
|
@@ -29,6 +29,12 @@ cd svharnessbuild && npm install && npm run build && npm link
|
|
|
29
29
|
# 最简 —— 只填名字,其余取默认(arch=android-compose, agent=codechat)
|
|
30
30
|
svharness build --harness-name my-app
|
|
31
31
|
|
|
32
|
+
# 交互式向导(推荐新手)—— 可填路径 + 文字说明,保存配置或立即执行
|
|
33
|
+
svharness wizard
|
|
34
|
+
|
|
35
|
+
# 配置文件驱动(团队模板 / CI)
|
|
36
|
+
svharness build --config svharness.config.yaml --yes
|
|
37
|
+
|
|
32
38
|
# 一行式 —— 跳过交互,直接生成
|
|
33
39
|
svharness build --harness-name my-app --arch android-compose --agent qoder --yes
|
|
34
40
|
|
|
@@ -36,10 +42,38 @@ svharness build --harness-name my-app --arch android-compose --agent qoder --yes
|
|
|
36
42
|
svharness apply --harness ./my-app-harness --target ../other-project --yes
|
|
37
43
|
```
|
|
38
44
|
|
|
45
|
+
### 配置文件与向导(v0.10+)
|
|
46
|
+
|
|
47
|
+
**优先级**:`CLI 参数 > svharness.config.yaml > 代码默认值`
|
|
48
|
+
|
|
49
|
+
1. 复制示例配置:`templates/svharness.config.example.yaml` → 项目根 `svharness.config.yaml`
|
|
50
|
+
2. 编辑 `build` / `apply` / `convert` 各节参数
|
|
51
|
+
3. 执行:`svharness build --yes`(自动读取当前目录下的 `svharness.config.yaml`)
|
|
52
|
+
|
|
53
|
+
也可显式指定:`svharness build --config ./team/android-compose.yaml --yes`
|
|
54
|
+
|
|
55
|
+
`build` 成功后落盘当前参数:`svharness build --harness-name my-app --save-config`
|
|
56
|
+
|
|
57
|
+
**`svharness wizard`**:分步 TUI,支持同时填写**文件路径**与**说明文字**(如 `requirementsNote`),结束时可选「立即执行 / 仅保存配置 / 保存并执行」。
|
|
58
|
+
|
|
39
59
|
生成完成后,在你的 Agent IDE 中说:
|
|
40
|
-
- "运行 harness-build-skill-orchestrator"即可开始逐步填充内容;
|
|
60
|
+
- "运行 harness-build-skills-main"或"harness-build-skill-orchestrator"即可开始逐步填充内容;
|
|
41
61
|
- 构建完成后在目标项目中说"应用 harness-apply-skills-main 完成 xxx 功能开发"即可调用 harness。
|
|
42
62
|
|
|
63
|
+
### 演示数据集(demo_project)
|
|
64
|
+
|
|
65
|
+
仓库自带 **[`demo_project/`](./demo_project/)**(Python 计算器主题),可一次性验证 `--baseline` / `--requirements` / `--references` / `--extra-skills` 四类输入及 intake 分类。详见 [`demo_project/README.md`](./demo_project/README.md)。
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
cd svharnessbuild
|
|
69
|
+
svharness build --harness-name demo-py --arch python --agent codechat `
|
|
70
|
+
--baseline ./demo_project/baseline `
|
|
71
|
+
--requirements ./demo_project/requirements `
|
|
72
|
+
--references ./demo_project/references `
|
|
73
|
+
--extra-skills ./demo_project/extra-skills `
|
|
74
|
+
--yes --force
|
|
75
|
+
```
|
|
76
|
+
|
|
43
77
|
---
|
|
44
78
|
|
|
45
79
|
## 核心概念
|
|
@@ -51,7 +85,7 @@ Harness 是一个 **项目本地的知识层**,由两大部分组成:
|
|
|
51
85
|
| 部分 | 位置 | 生命周期 | 说明 |
|
|
52
86
|
|------|------|----------|------|
|
|
53
87
|
| **Agent 注入目录** | `.qoder/` / `.codechat/` / `.cursor/` 等 | `build` 时创建,Agent 自动加载 | rules + build-skills |
|
|
54
|
-
| **Harness 目录** | `<harness-name>-harness/` | `build` 创建骨架 → Agent 逐步填充 | specs /
|
|
88
|
+
| **Harness 目录** | `<harness-name>-harness/` | `build` 创建骨架 → Agent 逐步填充 | specs / requirements / references / baseline / agent-env / tasks |
|
|
55
89
|
|
|
56
90
|
### 目录结构
|
|
57
91
|
|
|
@@ -60,11 +94,11 @@ Harness 是一个 **项目本地的知识层**,由两大部分组成:
|
|
|
60
94
|
```
|
|
61
95
|
<harness-name>-harness/
|
|
62
96
|
├── harness.yaml # 入口清单(架构 / agent / schema 引用)
|
|
63
|
-
├──
|
|
97
|
+
├── AGENTS_BUILD.md # 面向 Agent 的使用指南
|
|
64
98
|
├── README.md # 面向人的项目概览
|
|
65
99
|
├── VERSION
|
|
66
100
|
├── CHANGELOG.md
|
|
67
|
-
├── .harness-build-state.yaml # 构建进度追踪(
|
|
101
|
+
├── .harness-build-state.yaml # 构建进度追踪(S10 … S90)
|
|
68
102
|
│
|
|
69
103
|
├── specs/ # 契约层
|
|
70
104
|
│ ├── signals/schema.json
|
|
@@ -72,12 +106,17 @@ Harness 是一个 **项目本地的知识层**,由两大部分组成:
|
|
|
72
106
|
│ ├── behavior/schema.json
|
|
73
107
|
│ └── interfaces/schema.json
|
|
74
108
|
│
|
|
75
|
-
├──
|
|
76
|
-
│ ├── raw/
|
|
77
|
-
│ ├──
|
|
78
|
-
│ └──
|
|
79
|
-
|
|
80
|
-
│
|
|
109
|
+
├── requirements/ # 正式需求(参与条目化)
|
|
110
|
+
│ ├── raw/ # S20_collect_inputs 用户入口
|
|
111
|
+
│ ├── md/ # convert 产物
|
|
112
|
+
│ └── yaml/ # S40 条目化产出
|
|
113
|
+
├── references/ # 参考资料(不参与条目化)
|
|
114
|
+
│ ├── raw/
|
|
115
|
+
│ ├── md/
|
|
116
|
+
│ └── yaml/
|
|
117
|
+
└── baseline/
|
|
118
|
+
├── code/ # 参考代码快照
|
|
119
|
+
└── wiki/ # 架构 wiki
|
|
81
120
|
│
|
|
82
121
|
├── agent-env/ # Agent 运行期环境
|
|
83
122
|
│ ├── rules/ # 编码规则(.mdc,always_on 加载)
|
|
@@ -89,15 +128,31 @@ Harness 是一个 **项目本地的知识层**,由两大部分组成:
|
|
|
89
128
|
└── tasks/ # 可复用的开发者工作流
|
|
90
129
|
```
|
|
91
130
|
|
|
92
|
-
同时,CLI
|
|
131
|
+
同时,CLI 会在**项目根**写入 `CLAUDE.md`(`--agent codechat` 或 `claude-code`)或 `AGENTS.md`(`qoder` / `cursor` / `opencode` / `generic`),并向 Agent IDE 的 skill 目录注入 **7 个构建辅助 skill**:
|
|
93
132
|
|
|
94
133
|
| Skill | 职责 |
|
|
95
134
|
|-------|------|
|
|
135
|
+
| `harness-build-skills-main` | **总清单**:解析内联绑定元数据 → 装载构建规则 → 路由到各子 skill |
|
|
96
136
|
| `harness-build-skill-orchestrator` | 读取构建状态,路由到下一阶段 |
|
|
97
137
|
| `harness-build-skill-spec-builder` | raw → requirements → specs 管线 |
|
|
98
|
-
| `harness-build-skill-
|
|
138
|
+
| `harness-build-skill-references-intake` | S60 references 转换 + 结构化索引 |
|
|
139
|
+
| `harness-build-skill-agent-env-merge` | S61 baseline 自动提取确认 + S65 合并写入 |
|
|
140
|
+
| `harness-build-skill-knowledge-builder` | S10 baseline 样本 + S70 skills/tasks 索引 |
|
|
99
141
|
| `harness-build-skill-wiki-writer` | 按 TASKS.md 逐页撰写 wiki 正文 |
|
|
100
142
|
|
|
143
|
+
简短阶段对照(阶段 → skill):
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
S10_wiki -> harness-build-skill-wiki-writer(正文)/ harness-build-skill-knowledge-builder(样本子任务)
|
|
147
|
+
S20_collect_inputs -> harness-build-skill-orchestrator
|
|
148
|
+
S30_convert_docs -> harness-build-skill-orchestrator
|
|
149
|
+
S40/S50 -> harness-build-skill-spec-builder
|
|
150
|
+
S60 -> harness-build-skill-references-intake
|
|
151
|
+
S61/S65 -> harness-build-skill-agent-env-merge
|
|
152
|
+
S70 -> harness-build-skill-knowledge-builder
|
|
153
|
+
S80/S90 -> harness-build-skill-orchestrator
|
|
154
|
+
```
|
|
155
|
+
|
|
101
156
|
`.harness-build-state.yaml` 跟踪进度,任何阶段可中断再续。
|
|
102
157
|
|
|
103
158
|
#### 构建辅助 skill / rule 命名规范
|
|
@@ -112,7 +167,7 @@ harness-build-{skill|rule}-<semantic-name>
|
|
|
112
167
|
|
|
113
168
|
| 资源类型 | 目录 | 命名模式 | 现有成员 |
|
|
114
169
|
|----------|------|----------|----------|
|
|
115
|
-
| **Build skill** | `templates/_shared/build-skills/` | `harness-build-skill-<name>.md` | `orchestrator` / `spec-builder` / `knowledge-builder` / `wiki-writer` |
|
|
170
|
+
| **Build skill** | `templates/_shared/build-skills/` | `harness-build-skill-<name>.md` | `skills-main` / `orchestrator` / `spec-builder` / `references-intake` / `agent-env-merge` / `knowledge-builder` / `wiki-writer` |
|
|
116
171
|
| **Build rule** | `templates/_shared/build-rules/` | `harness-build-rule-<name>.md` | `agent-agnostic` / `chinese-only` / `memory-write` / `orchestrator-flow` / `skills-tasks-output` / `specs-schema` / `user-interaction` |
|
|
117
172
|
|
|
118
173
|
约束:
|
|
@@ -127,26 +182,60 @@ harness-build-{skill|rule}-<semantic-name>
|
|
|
127
182
|
|
|
128
183
|
| 阶段 | 动作 | 产物 |
|
|
129
184
|
|------|------|------|
|
|
130
|
-
| **
|
|
131
|
-
| **
|
|
132
|
-
| **
|
|
133
|
-
| **
|
|
134
|
-
| **
|
|
135
|
-
| **
|
|
136
|
-
| **
|
|
137
|
-
| **
|
|
185
|
+
| **S10_wiki** | 构建 baseline wiki(仅当有 baseline 时出现,项目经验底座) | `baseline/wiki/` |
|
|
186
|
+
| **S20_collect_inputs** | 添加相关文件:需求/参考文档 + 额外运行期资源征询(`--extra-skills` 单入口,可混放 skills/rules) | `requirements/raw/` + `references/raw/` + `agent-env/_incoming/skills/` |
|
|
187
|
+
| **S30_convert_docs** | 非 Markdown 原始文档转 Markdown | `requirements/md/` + `references/md/` |
|
|
188
|
+
| **S40_extract_requirements** | 条目化需求 | `requirements/yaml/*.yaml` |
|
|
189
|
+
| **S50_generate_specs** | 生成规格 | `specs/<layer>/<module>.<layer>.yaml` + schema 校验 |
|
|
190
|
+
| **S60_process_references** | references 处理(`svharness convert` + 结构化索引 + 用户确认落地) | `references/md/` |
|
|
191
|
+
| **S61_confirm_baseline_extraction** | 确认是否自动从 baseline 提取 skills/rules(表单确认) | `.harness-build-state.yaml`(`phases.S61_confirm_baseline_extraction.baseline_auto_extract`) |
|
|
192
|
+
| **S65_customize_agent_env** | agent-env 定制(extra-skills/extra-rules 冲突建议与重命名建议 → 用户确认 → 写入) | `agent-env/rules/` + `agent-env/skills/` |
|
|
193
|
+
| **S70_runtime_assets** | 运行期 Skills & tasks 索引(skill 执行 task) | `agent-env/skills/` + `tasks/templates/` |
|
|
194
|
+
| **S80_seed_memory** | Memory 初始化 | `agent-env/memory/categories/` |
|
|
195
|
+
| **S90_finalize** | 封板 | 版本 bump + CHANGELOG + 终审 |
|
|
138
196
|
|
|
139
197
|
> 反复调用 orchestrator 总是从"第一个非 DONE 的阶段"继续。
|
|
140
|
-
> **
|
|
141
|
-
> **
|
|
198
|
+
> **S10_wiki 仅在有 baseline 时出现;无 baseline 则不构建 wiki,流程从 S20_collect_inputs 开始。**
|
|
199
|
+
> **S20_collect_inputs 必须等待用户放入需求文档,且需显式征询 references 与额外运行期资源输入(`--extra-skills`,可混放 skills/rules);Agent 不得自行生成占位文件。若 build 传入了 `--requirements/--references`,CLI 会在拷贝到 raw 后自动尝试 convert 到 md。**
|
|
200
|
+
> **S60_process_references 专注 references:必须执行 `svharness convert`,并产出结构化索引(规制约束 / skills 候选 / signals / manuals),经表单确认后再进入后续阶段。**
|
|
201
|
+
> **S61_confirm_baseline_extraction 必须显式确认是否启用 baseline 自动提取 skills/rules;未经确认不得在 S65 自动提取。**
|
|
202
|
+
> **S65_customize_agent_env 专注 extra-skills/extra-rules:来源可来自 `--extra-skills` 导入后的 `_incoming/manifest.yaml`,先冲突识别与重命名建议,再表单确认写入;推荐命名:`harness-apply-skills-<topic>` 与 `harness-apply-rules-<topic>.md/.mdc`。**
|
|
142
203
|
|
|
143
204
|
---
|
|
144
205
|
|
|
145
206
|
## 命令参考
|
|
146
207
|
|
|
208
|
+
### `wizard` —— 交互式向导(v0.10+)
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
svharness wizard
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
分步选择 `build` / `apply` / `convert`,填写路径与可选说明,最后保存到 `svharness.config.yaml` 和/或立即执行对应命令。
|
|
215
|
+
|
|
216
|
+
### 配置文件 `svharness.config.yaml`(v0.10+)
|
|
217
|
+
|
|
218
|
+
| 顶层字段 | 说明 |
|
|
219
|
+
|----------|------|
|
|
220
|
+
| `version` | 固定为 `1` |
|
|
221
|
+
| `defaults` | 各命令共享默认(`arch` / `agent` / `yes` 等) |
|
|
222
|
+
| `build` | 对应 `svharness build` |
|
|
223
|
+
| `apply` | 对应 `svharness apply` |
|
|
224
|
+
| `convert` | 对应 `svharness convert` |
|
|
225
|
+
|
|
226
|
+
`build` 节除路径外,可写人类可读说明(仅写入配置文件,供团队阅读):
|
|
227
|
+
|
|
228
|
+
| 字段 | 说明 |
|
|
229
|
+
|------|------|
|
|
230
|
+
| `requirementsNote` | 需求文档业务说明 |
|
|
231
|
+
| `referencesNote` | 参考资料说明 |
|
|
232
|
+
| `extraSkillsNote` | 额外 skills/rules 说明 |
|
|
233
|
+
|
|
234
|
+
完整示例见 [`templates/svharness.config.example.yaml`](templates/svharness.config.example.yaml)。
|
|
235
|
+
|
|
147
236
|
### `build` —— 构建 harness(v0.8 起的主命令)
|
|
148
237
|
|
|
149
|
-
> 旧名 `svharness init`(以及 `
|
|
238
|
+
> 旧名 `svharness init`(以及 `svharness build`)作为兼容别名保留,调用时会打印 deprecation 警告。
|
|
150
239
|
|
|
151
240
|
#### 交互式
|
|
152
241
|
|
|
@@ -170,14 +259,24 @@ svharness build \
|
|
|
170
259
|
|
|
171
260
|
| 参数 | 是否必填 | 说明 | 默认值 |
|
|
172
261
|
|------|----------|------|--------|
|
|
173
|
-
| `--
|
|
262
|
+
| `--config <path>` | 可选 | 读取 YAML/JSON 配置;省略时在 cwd 查找 `svharness.config.yaml` | — |
|
|
263
|
+
| `--save-config [path]` | 可选 | build 成功后把参数写入配置文件 | — |
|
|
264
|
+
| `--harness-name <name>` | ✅ 必填* | harness 名称;可在 `build.harnessName` 中提供 | — |
|
|
174
265
|
| `--name <name>` | ⚠️ 已废弃别名 | 等同 `--harness-name`,下个 minor 版本移除 | — |
|
|
175
266
|
| `--arch <arch>` | 可选 | 架构模板:`android-compose` / `android-xml` / `cpp` / `web-react` / `python` | `android-compose` |
|
|
176
|
-
| `--agent <agent>` | 可选 | 目标 Agent IDE:`codechat` / `qoder` / `cursor` / `claude-code` / `generic` | `codechat` |
|
|
267
|
+
| `--agent <agent>` | 可选 | 目标 Agent IDE:`codechat` / `qoder` / `cursor` / `claude-code` / `opencode` / `generic` | `codechat` |
|
|
177
268
|
| `--baseline <path\|url>` | 可选 | 基线来源:本地目录 **或** git 仓库 URL | — |
|
|
269
|
+
| `--requirements <path>` | 可选 | 需求输入路径(文件或目录);build 阶段**扁平**拷贝到 `requirements/raw/`(不保留源目录里的 `assets/raw/converted_md` 等嵌套),随后自动 convert 到 `requirements/md/`(失败仅告警,不中断 build) | — |
|
|
270
|
+
| `--references <path>` | 可选 | 参考资料输入路径(文件或目录);build 阶段**扁平**拷贝到 `references/raw/`,随后自动 convert 到 `references/md/`(失败仅告警,不中断 build) | — |
|
|
271
|
+
| `--extra-skills <path...>` | 可选 | 额外运行期资源输入(文件/目录/glob,可混放 skills/rules);build 阶段先拷贝到 `agent-env/_incoming/skills/` 并生成 `agent-env/_incoming/manifest.yaml`,S65 再分流写入 `skills/` 与 `rules/` | — |
|
|
178
272
|
| `--baseline-branch <name>` | 可选 | git 基线的分支名(仅 git 模式有效) | `main` |
|
|
179
273
|
| `--baseline-max-file-kb <kb>` | 可选 | 基线拷贝单文件大小上限(KB) | `1024` |
|
|
180
|
-
| `--
|
|
274
|
+
| `--convert-endpoint <url>` | 可选 | build 自动 convert 使用的 markitdown 服务基址;省略时读环境变量 `SVHARNESS_MARKITDOWN_ENDPOINT` | `http://markitdown.desaysz.site` |
|
|
275
|
+
| `--convert-concurrency <n>` | 可选 | build 自动 convert 并发上传数 | `3` |
|
|
276
|
+
| `--convert-max-file-mb <n>` | 可选 | build 自动 convert 单文件大小上限(MB) | `50` |
|
|
277
|
+
| `--convert-timeout-sec <n>` | 可选 | build 自动 convert 请求超时秒数 | `120` |
|
|
278
|
+
| `--convert-force` | 可选 flag | build 自动 convert 覆盖同名 `.md`(否则按 `-1/-2` 追加) | `false` |
|
|
279
|
+
| `--force` | 可选 flag | 覆写已存在的 harness 目录;同时覆写项目根 `AGENTS.md` / `CLAUDE.md`(若存在) | `false` |
|
|
181
280
|
| `-y, --yes` | 可选 flag | 跳过所有提示,采用默认值 | `false` |
|
|
182
281
|
| `--verbose` | 可选 flag | 打印每个生成文件 | `false` |
|
|
183
282
|
|
|
@@ -191,13 +290,13 @@ svharness build \
|
|
|
191
290
|
| `--wiki-model <name>` | LLM 模型名 | `Qwen3.6-27B`(来自内置 wiki 配置链) |
|
|
192
291
|
| `--wiki-base-url <url>` | OpenAI 兼容 API 地址 | `http://model-api.desaysv.com/v1` |
|
|
193
292
|
| `--wiki-api-key <key>` | API Key | 环境变量 `OPENAI_API_KEY` → `.env` → 内置默认 |
|
|
194
|
-
| `--wiki-source <path>` | wiki 扫描的仓库根路径 | `<target>/
|
|
293
|
+
| `--wiki-source <path>` | wiki 扫描的仓库根路径 | `<target>/baseline/code/`(无 baseline 时为 cwd) |
|
|
195
294
|
|
|
196
295
|
**Wiki 配置优先级**:CLI 参数 > 环境变量 > `.env` 文件 > 内置默认值
|
|
197
296
|
|
|
198
297
|
**Wiki 模式总览**:
|
|
199
298
|
|
|
200
|
-
| 组合 | 行为 |
|
|
299
|
+
| 组合 | 行为 | S10_wiki 状态 |
|
|
201
300
|
|------|------|---------|
|
|
202
301
|
| 无 `--baseline` | 不生成 wiki | phase 不存在 |
|
|
203
302
|
| `--baseline`(默认) | 一次 LLM 拿 outline,写 `TASKS.md` | `PENDING` + `requires_agent: true` |
|
|
@@ -217,24 +316,39 @@ svharness build \
|
|
|
217
316
|
|
|
218
317
|
### `apply` —— 把已构建好的 harness 绑定到目标项目
|
|
219
318
|
|
|
220
|
-
把 `<name>-harness/`(通过 `build`
|
|
319
|
+
把 `<name>-harness/`(通过 `build` 完成的知识层)应用到目标项目时,`apply` 现采用**默认复制模式**:始终把 harness 拷贝到 `<target>/<name>-harness/`,然后注入 runtime skills/rules,并生成项目根 AI 入口。
|
|
221
320
|
|
|
222
321
|
```bash
|
|
223
|
-
#
|
|
322
|
+
# 默认复制模式(无需 --clone)
|
|
224
323
|
svharness apply --harness ../my-app-harness --target ./to-apply-project
|
|
225
324
|
|
|
226
|
-
# clone
|
|
325
|
+
# --clone 仍可传入,但仅兼容:行为与默认一致(都会拷贝)
|
|
227
326
|
svharness apply --harness ../my-app-harness --target ./to-apply-project --clone --yes
|
|
228
327
|
```
|
|
229
328
|
|
|
230
|
-
**在 Agent IDE 中触发**:对话框输入 `应用 harness-apply-skills-main 完成 xxx
|
|
329
|
+
**在 Agent IDE 中触发**:对话框输入 `应用 harness-apply-skills-main 完成 xxx 功能开发`,薄入口会提示并优先使用已注入的 `harness-apply-skills-*` 子 skill。
|
|
330
|
+
|
|
331
|
+
同时,CLI 会在**目标项目根**写入 `CLAUDE.md`(`--agent codechat` 或 `claude-code`)或 `AGENTS.md`(`qoder` / `cursor` / `opencode` / `generic`)。该入口由 `<harness>/AGENTS_APPLY.md` 拷贝并重命名生成(与 `build` 写入项目根入口的规则一致,不再单独落地 `AGENTS_APPLY.md`)。
|
|
332
|
+
|
|
333
|
+
此外,`apply` 会同步注入运行期资产:
|
|
231
334
|
|
|
232
|
-
|
|
335
|
+
- `<harness>/agent-env/rules/` → `<target>/<adapter.rulesDir>/`(若该 agent 声明了 `rulesDir`)
|
|
336
|
+
- `<harness>/agent-env/skills/` → `<target>/<adapter.skillsDir>/`(全量注入;`harness-apply-skills-main` 由模板写入为薄入口)
|
|
337
|
+
- 目标 `.gitignore` 会追加注入路径(幂等去重)
|
|
233
338
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
339
|
+
#### references 内容引用 → apply_skill_registry(S60,由 Agent 写入)
|
|
340
|
+
|
|
341
|
+
S60(`harness-build-skill-references-intake`)属于 **build 阶段**。若某份 references 属于**内容引用**(apply 时要按 `references/md/` 原文指导开发),Agent 应:
|
|
342
|
+
|
|
343
|
+
1. 登记 `references/apply-skills-registry.yaml`(`skill_name`、`reference_md`、`description`,可选 `entry` / `source_id`)
|
|
344
|
+
2. 执行 `svharness apply` 时,运行期 skill 将按引用原文执行,且相关路径会改写到 `<target>/<name>-harness/` 下可达位置
|
|
345
|
+
|
|
346
|
+
无单独 CLI;规制约束、纯手册类 references **不**登记 registry。
|
|
347
|
+
|
|
348
|
+
#### build / apply 分工
|
|
349
|
+
|
|
350
|
+
- **build 阶段**:生成 harness 本体资产(`AGENTS_APPLY.md`、`agent-env/skills`、`agent-env/rules`、`specs`、`baseline` 等)
|
|
351
|
+
- **apply 阶段**:复制 harness 到目标项目、注入 skills/rules、生成入口文件、写 `.gitignore`、校验注入文件引用关系
|
|
238
352
|
|
|
239
353
|
#### 全部参数
|
|
240
354
|
|
|
@@ -242,9 +356,9 @@ svharness apply --harness ../my-app-harness --target ./to-apply-project --clone
|
|
|
242
356
|
|------|----------|------|--------|
|
|
243
357
|
| `--harness <path>` | ✅ 必填 | 已构建好的 harness 目录(形如 `./my-app-harness`) | — |
|
|
244
358
|
| `--target <path>` | 可选 | 目标项目根目录 | **当前工作目录(cwd)** |
|
|
245
|
-
| `--agent <agent>` | 可选 | 目标 Agent:`codechat` / `qoder` / `cursor` / `claude-code` / `generic` | **从 `<harness>/.harness-build-state.yaml` 读取**;缺失则报错 |
|
|
246
|
-
| `--clone` | 可选 flag |
|
|
247
|
-
| `--force` | 可选 flag |
|
|
359
|
+
| `--agent <agent>` | 可选 | 目标 Agent:`codechat` / `qoder` / `cursor` / `claude-code` / `opencode` / `generic` | **从 `<harness>/.harness-build-state.yaml` 读取**;缺失则报错 |
|
|
360
|
+
| `--clone` | 可选 flag | 兼容参数;当前实现下行为与默认一致(都会拷贝 harness) | `false` |
|
|
361
|
+
| `--force` | 可选 flag | 覆盖已存在注入目录与入口文件;同时允许重拷贝 harness | `false` |
|
|
248
362
|
| `-y, --yes` | 可选 flag | 跳过交互确认 | `false` |
|
|
249
363
|
| `--verbose` | 可选 flag | 显示详细日志 | `false` |
|
|
250
364
|
|
|
@@ -252,30 +366,85 @@ svharness apply --harness ../my-app-harness --target ./to-apply-project --clone
|
|
|
252
366
|
|
|
253
367
|
```
|
|
254
368
|
<target>/
|
|
369
|
+
├── CLAUDE.md | AGENTS.md # apply 工作流入口(由 harness/AGENTS_APPLY.md 重命名)
|
|
370
|
+
├── <adapter.rulesDir>/... # 运行期 rules 注入(若 adapter 声明 rulesDir)
|
|
371
|
+
├── <adapter.skillsDir>/<runtime-skill>/SKILL.{md|mdc} # 运行期 skills 注入
|
|
255
372
|
├── <adapter.skillsDir>/harness-apply-skills-main/
|
|
256
|
-
│
|
|
257
|
-
|
|
258
|
-
│ └── references/binding.yaml # 冗余副本(权威源在 SKILL.md 内),供工具链解析
|
|
259
|
-
└── <name>-harness/ # 仅 --clone 模式
|
|
373
|
+
│ └── SKILL.{md|mdc} # 薄入口 skill(仅提示/索引,不做二级调度)
|
|
374
|
+
└── <name>-harness/ # apply 默认复制后的 harness
|
|
260
375
|
```
|
|
261
376
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
377
|
+
> 注入完成后,CLI 会校验入口文件、薄入口 skill、注入 skills/rules 内的路径引用是否可达;失败会报错中止。
|
|
378
|
+
|
|
379
|
+
### `convert` —— 文档 → Markdown 预处理(对接 S20_collect_inputs)
|
|
380
|
+
|
|
381
|
+
把本地原始需求文档(`.pdf / .docx / .pptx / .xlsx / .html / .epub / .txt / .csv / .json / ...`)通过**云端部署**的 `markitdown_serve`(FastAPI + Microsoft MarkItDown)批量转为 Markdown,产物统一落到 `<harness>/<type>/md/`(`type` 为 `requirements` 或 `references`),直接喂给下游 `S40_extract_requirements` 条目化流程,显著提升 specs 生成质量的稳定性。
|
|
382
|
+
|
|
383
|
+
> **架构约束**:CLI 只是 HTTP 客户端,**不 spawn / 不装 Python / 不管进程**。服务端代码集中在 `svharnessbuild/markitdown_serve/` 便于仓内维护,但**不随 npm 包分发**,部署方式详见 [markitdown_serve/README.md](./markitdown_serve/README.md)。
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
# 最简 —— 所有参数均可省略,默认扫描当前目录
|
|
387
|
+
svharness convert
|
|
388
|
+
|
|
389
|
+
# 独立模式:md 直接写入 ./docs/md
|
|
390
|
+
svharness convert --input ./docs/*.pdf --output ./docs/md --yes
|
|
391
|
+
|
|
392
|
+
# harness 模式:md 写入 ./my-app-harness/requirements/md/
|
|
393
|
+
svharness convert --input ./my-app-harness/requirements/raw --output ./my-app-harness --yes
|
|
394
|
+
|
|
395
|
+
# 显示处理日志
|
|
396
|
+
svharness convert --verbose
|
|
274
397
|
```
|
|
275
398
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
399
|
+
#### 全部参数
|
|
400
|
+
|
|
401
|
+
| 参数 | 说明 | 默认值 |
|
|
402
|
+
|------|------|--------|
|
|
403
|
+
| `--input <path...>` | 一个或多个源文件 / 目录 / glob,支持 `./a/*.pdf`、`./docs/**/*.docx`、`./{a,b}/*.md` | `.`(当前目录) |
|
|
404
|
+
| `--harness <path>` | harness 根目录(需 `harness.yaml`);单独使用时写入 `<harness>/<type>/md/`;与 `--output` 同用时 `--output` 为最终 md 目录 | — |
|
|
405
|
+
| `--output <path>` | **独立模式**:最终 md 输出目录;**harness 模式**:`path` 含 `harness.yaml` 时写入 `<path>/<type>/md/` | `.`(当前目录) |
|
|
406
|
+
| `--endpoint <url>` | 云端 `markitdown_serve` 基址,省略时读环境变量 `SVHARNESS_MARKITDOWN_ENDPOINT` | `http://markitdown.desaysz.site` |
|
|
407
|
+
| `--concurrency <n>` | 并发上传数 | `3` |
|
|
408
|
+
| `--max-file-mb <n>` | 单文件大小上限(MB),本地 + 服务端双重限流 | `50` |
|
|
409
|
+
| `--timeout-sec <n>` | 单请求超时秒数 | `120`(2 分钟) |
|
|
410
|
+
| `--type <type>` | 目标子目录:`requirements`(正式需求)\| `references`(参考资料) | `requirements` |
|
|
411
|
+
| `--force` | flag,覆盖已存在同名 `.md`(默认自动追加 `-1`、`-2` 后缀) | `false` |
|
|
412
|
+
| `-y, --yes` | flag,跳过交互确认 | `false` |
|
|
413
|
+
| `--verbose` | flag,显示详细日志 | `false` |
|
|
414
|
+
|
|
415
|
+
#### 行为要点
|
|
416
|
+
|
|
417
|
+
- **健康探针前置**:上传前先 `GET /healthz`,不通直接退出并打印清晰定位指引(endpoint / 环境变量 / 服务端目录三条线索)。
|
|
418
|
+
- **单文件失败不中断**:失败单文件计入汇总,其它文件照常完成。结束时打印 `ok / skipped / failed` 计数。
|
|
419
|
+
- **本地白名单预过滤**:客户端与服务端的扩展名白名单保持一致,非白名单文件本地直接跳过,避免无意义往返。
|
|
420
|
+
- **两种输出模式**:
|
|
421
|
+
- **独立**:`--output` 即最终 md 目录(路径下无 `harness.yaml`),例如 `--output ./docs/md`。
|
|
422
|
+
- **harness**:`--output` 或 `--harness` 指向含 `harness.yaml` 的目录时,写入 `<harness>/<type>/md/`(build / Agent 模板沿用此约定)。
|
|
423
|
+
- **harness 模式收尾**:扫描 `raw/` 时跳过 `converted_md/`、`md/` 等;结束后将误落在 `raw/**/converted_md/` 下的 `.md` 迁回 `<type>/md/`。
|
|
424
|
+
- **源文件不改动**:只生成 md,不移动或删除原始文档。
|
|
425
|
+
|
|
426
|
+
#### 产物
|
|
427
|
+
|
|
428
|
+
```
|
|
429
|
+
<harness>/
|
|
430
|
+
└── requirements/ # --type requirements(默认)
|
|
431
|
+
│ └── md/
|
|
432
|
+
│ ├── 需求.md
|
|
433
|
+
│ └── ...
|
|
434
|
+
└── references/ # --type references
|
|
435
|
+
└── md/
|
|
436
|
+
├── 参考文档.md
|
|
437
|
+
└── ...
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
#### 接口契约(CLI ⇄ markitdown_serve)
|
|
441
|
+
|
|
442
|
+
| 端点 | 方法 | 约定 |
|
|
443
|
+
|---|---|---|
|
|
444
|
+
| `/healthz` | GET | 200 `{status, markitdown_version}` |
|
|
445
|
+
| `/convert` | POST | multipart/form-data,字段 `file`;200 返回 `{markdown, source_name, mime}`;413/415/500 带结构化 `error` 字段 |
|
|
446
|
+
|
|
447
|
+
完整契约与部署说明见 [markitdown_serve/README.md](./markitdown_serve/README.md)。
|
|
279
448
|
|
|
280
449
|
---
|
|
281
450
|
|
|
@@ -364,6 +533,11 @@ svharness build --harness-name my-app --yes
|
|
|
364
533
|
# 显式指定全部参数
|
|
365
534
|
svharness build --harness-name my-app --arch android-compose --agent qoder --yes
|
|
366
535
|
|
|
536
|
+
# 额外运行期资源(单入口,可混放 skills/rules,先入 _incoming)
|
|
537
|
+
svharness build \
|
|
538
|
+
--harness-name my-app --arch android-compose --agent codechat \
|
|
539
|
+
--extra-skills ./extras ./rules/*.mdc --yes
|
|
540
|
+
|
|
367
541
|
# 本地基线 + wiki 生成
|
|
368
542
|
svharness build \
|
|
369
543
|
--harness-name my-app --arch android-compose --agent codechat \
|
|
@@ -493,6 +667,61 @@ pwsh -File .\scripts\smoke-test.ps1
|
|
|
493
667
|
|
|
494
668
|
构建 TS → 临时目录 `build` → 校验文件 → `--force` 覆写验证。
|
|
495
669
|
|
|
670
|
+
### 演示与 `--extra-skills` 验收
|
|
671
|
+
|
|
672
|
+
端到端演示(requirements + references + baseline + extra-skills 混放)见 **[`demo_project/README.md`](./demo_project/README.md)**。在 `svharnessbuild/` 下:
|
|
673
|
+
|
|
674
|
+
```powershell
|
|
675
|
+
svharness build --harness-name demo-py --arch python --agent codechat `
|
|
676
|
+
--baseline ./demo_project/baseline `
|
|
677
|
+
--requirements ./demo_project/requirements `
|
|
678
|
+
--references ./demo_project/references `
|
|
679
|
+
--extra-skills ./demo_project/extra-skills `
|
|
680
|
+
--yes --force
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
`demo_project/extra-skills/` 布局:
|
|
684
|
+
|
|
685
|
+
| 路径 | intake `detected_type` |
|
|
686
|
+
|------|------------------------|
|
|
687
|
+
| `harness-apply-skills-test-generator/SKILL.md` | `skill` |
|
|
688
|
+
| `harness-apply-skills-python-code-review/SKILL.md` | `skill` |
|
|
689
|
+
| `harness-apply-rules-demo-calculator.mdc` | `rule` |
|
|
690
|
+
| `unknown-sample/readme.txt` | `unknown`(S65 需人工确认) |
|
|
691
|
+
|
|
692
|
+
**分项验收**(仅测 extra-skills 某一类时):
|
|
693
|
+
|
|
694
|
+
```powershell
|
|
695
|
+
# 1) 纯 skills(两个目录,可重复 --extra-skills)
|
|
696
|
+
svharness build --harness-name demo-skills --arch python --agent codechat `
|
|
697
|
+
--extra-skills ./demo_project/extra-skills/harness-apply-skills-test-generator `
|
|
698
|
+
--extra-skills ./demo_project/extra-skills/harness-apply-skills-python-code-review `
|
|
699
|
+
--yes --force
|
|
700
|
+
|
|
701
|
+
# 2) 纯 rule
|
|
702
|
+
svharness build --harness-name demo-rules --arch python --agent codechat `
|
|
703
|
+
--extra-skills ./demo_project/extra-skills/harness-apply-rules-demo-calculator.mdc `
|
|
704
|
+
--yes --force
|
|
705
|
+
|
|
706
|
+
# 3) skills + rules 混放(与端到端相同目录)
|
|
707
|
+
svharness build --harness-name demo-mixed --arch python --agent codechat `
|
|
708
|
+
--extra-skills ./demo_project/extra-skills --yes --force
|
|
709
|
+
|
|
710
|
+
# 4) unknown 资源(需 S65 人工确认类型)
|
|
711
|
+
svharness build --harness-name demo-unknown --arch python --agent codechat `
|
|
712
|
+
--extra-skills ./demo_project/extra-skills/unknown-sample/readme.txt `
|
|
713
|
+
--yes --force
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
验收观察点:
|
|
717
|
+
|
|
718
|
+
- `agent-env/_incoming/skills/` 已导入输入资源;
|
|
719
|
+
- `agent-env/_incoming/manifest.yaml` 包含 `detected_type` 与 `suggested_name`;
|
|
720
|
+
- `.harness-build-state.yaml` 的 `S65_customize_agent_env` 已回填 `incoming_total/skills_count/rules_count/unknown_count`;
|
|
721
|
+
- unknown 或冲突资源仅在 S65 表单确认后落入 `agent-env/skills/` 或 `agent-env/rules/`。
|
|
722
|
+
|
|
723
|
+
> 历史 `fixtures/` 目录已移除,统一由 `demo_project/` 承担演示与 intake 验收。
|
|
724
|
+
|
|
496
725
|
### 注意事项
|
|
497
726
|
|
|
498
727
|
1. **shebang**:`bin/cli.js` 首行必须为 `#!/usr/bin/env node`
|
|
@@ -514,7 +743,7 @@ pwsh -File .\scripts\smoke-test.ps1
|
|
|
514
743
|
- [x] 多架构模板(`android-compose` / `android-xml` / `cpp` / `web-react` / `python`)
|
|
515
744
|
- [x] `_shared/` + `<arch>/` 两层叠拷合并
|
|
516
745
|
- [x] 每个架构自带 3-5 条规则文件(`.mdc` 格式,`always_on` 加载)
|
|
517
|
-
- [x] `apply` —— 把已构建好的 harness
|
|
746
|
+
- [x] `apply` —— 把已构建好的 harness 绑定到目标项目(默认复制模式,`--clone` 兼容保留)
|
|
518
747
|
- [x] 构建辅助资源统一命名(`build-skills/harness-build-skill-*`、`build-rules/harness-build-rule-*`)
|
|
519
748
|
- [ ] `detach` —— 从目标项目解绑并清理 dispatcher skill
|
|
520
749
|
- [ ] `doctor` —— 检查既有 harness 的健康度
|
package/dist/adapters/cursor.js
CHANGED
|
@@ -8,6 +8,7 @@ const _frontmatter_1 = require("./_frontmatter");
|
|
|
8
8
|
*/
|
|
9
9
|
exports.cursorAdapter = {
|
|
10
10
|
name: 'cursor',
|
|
11
|
+
projectEntryFile: 'AGENTS.md',
|
|
11
12
|
skillsDir: '.cursor/rules',
|
|
12
13
|
skillExt: '.mdc',
|
|
13
14
|
transform: (0, _frontmatter_1.ensureMdcFrontmatter)('Harness build helper skill'),
|
package/dist/adapters/generic.js
CHANGED
package/dist/adapters/index.js
CHANGED
|
@@ -7,11 +7,13 @@ const qoder_1 = require("./qoder");
|
|
|
7
7
|
const cursor_1 = require("./cursor");
|
|
8
8
|
const claude_code_1 = require("./claude-code");
|
|
9
9
|
const generic_1 = require("./generic");
|
|
10
|
+
const opencode_1 = require("./opencode");
|
|
10
11
|
const REGISTRY = {
|
|
11
12
|
codechat: codechat_1.codechatAdapter,
|
|
12
13
|
qoder: qoder_1.qoderAdapter,
|
|
13
14
|
cursor: cursor_1.cursorAdapter,
|
|
14
15
|
'claude-code': claude_code_1.claudeCodeAdapter,
|
|
16
|
+
opencode: opencode_1.opencodeAdapter,
|
|
15
17
|
generic: generic_1.genericAdapter,
|
|
16
18
|
};
|
|
17
19
|
function getAdapter(name) {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.opencodeAdapter = void 0;
|
|
4
|
+
const _frontmatter_1 = require("./_frontmatter");
|
|
5
|
+
/**
|
|
6
|
+
* OpenCode (opencode.ai): project skills under `.opencode/skills/<name>/SKILL.md`.
|
|
7
|
+
* @see https://opencode.ai/docs/skills
|
|
8
|
+
*/
|
|
9
|
+
exports.opencodeAdapter = {
|
|
10
|
+
name: 'opencode',
|
|
11
|
+
projectEntryFile: 'AGENTS.md',
|
|
12
|
+
skillsDir: '.opencode/skills',
|
|
13
|
+
skillExt: '.md',
|
|
14
|
+
rulesDir: '.opencode/rules',
|
|
15
|
+
ruleExt: '.mdc',
|
|
16
|
+
ruleTransform: (0, _frontmatter_1.ensureMdcFrontmatter)('Harness build-time rule'),
|
|
17
|
+
};
|
package/dist/adapters/qoder.js
CHANGED