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.
Files changed (93) hide show
  1. package/README.md +290 -61
  2. package/dist/adapters/claude-code.js +1 -0
  3. package/dist/adapters/codechat.js +1 -0
  4. package/dist/adapters/cursor.js +1 -0
  5. package/dist/adapters/generic.js +1 -0
  6. package/dist/adapters/index.js +2 -0
  7. package/dist/adapters/opencode.js +17 -0
  8. package/dist/adapters/qoder.js +1 -0
  9. package/dist/commands/apply.js +456 -71
  10. package/dist/commands/convert.js +371 -0
  11. package/dist/commands/init.js +156 -11
  12. package/dist/commands/references-apply-skills.js +47 -0
  13. package/dist/commands/wizard.js +442 -0
  14. package/dist/config/constants.js +7 -0
  15. package/dist/config/index.js +18 -0
  16. package/dist/config/load-config.js +54 -0
  17. package/dist/config/merge-options.js +115 -0
  18. package/dist/config/normalize.js +165 -0
  19. package/dist/config/save-config.js +40 -0
  20. package/dist/config/types.js +2 -0
  21. package/dist/core/agent-injector.js +58 -9
  22. package/dist/core/apply-project-entry.js +66 -0
  23. package/dist/core/build-project-entry.js +98 -0
  24. package/dist/core/doc-intake-paths.js +155 -0
  25. package/dist/core/extra-assets-intake.js +254 -0
  26. package/dist/core/markitdown-client.js +156 -0
  27. package/dist/core/next-steps.js +33 -22
  28. package/dist/core/project-ignore.js +53 -0
  29. package/dist/core/reference-apply-skills.js +35 -0
  30. package/dist/core/render-meta.js +2 -1
  31. package/dist/core/repomix-pack.js +3 -3
  32. package/dist/core/state.js +44 -24
  33. package/dist/index.js +211 -140
  34. package/dist/utils/harness-name.js +41 -0
  35. package/dist/utils/validate-args.js +147 -6
  36. package/dist/wiki/wikiTasksWriter.js +5 -6
  37. package/package.json +2 -1
  38. package/templates/_shared/apply-skills/harness-apply-skills-main.md +19 -78
  39. package/templates/_shared/build-rules/harness-build-rule-agent-agnostic.md +5 -5
  40. package/templates/_shared/build-rules/harness-build-rule-chinese-only.md +5 -5
  41. package/templates/_shared/build-rules/harness-build-rule-convert-check.md +46 -0
  42. package/templates/_shared/build-rules/harness-build-rule-memory-write.md +1 -1
  43. package/templates/_shared/build-rules/harness-build-rule-orchestrator-flow.md +36 -10
  44. package/templates/_shared/build-rules/harness-build-rule-skills-tasks-output.md +3 -2
  45. package/templates/_shared/build-rules/harness-build-rule-specs-schema.md +3 -3
  46. package/templates/_shared/build-rules/harness-build-rule-user-interaction.md +36 -16
  47. package/templates/_shared/build-skills/harness-build-skill-agent-env-merge.md +75 -0
  48. package/templates/_shared/build-skills/harness-build-skill-knowledge-builder.md +49 -85
  49. package/templates/_shared/build-skills/harness-build-skill-orchestrator.md +35 -18
  50. package/templates/_shared/build-skills/harness-build-skill-references-intake.md +91 -0
  51. package/templates/_shared/build-skills/harness-build-skill-spec-builder.md +19 -9
  52. package/templates/_shared/build-skills/harness-build-skill-wiki-writer.md +24 -24
  53. package/templates/_shared/build-skills/harness-build-skills-main.md +83 -0
  54. package/templates/_shared/meta/AGENTS_APPLY.md.ejs +139 -0
  55. package/templates/_shared/meta/{AGENTS.md.ejs → AGENTS_BUILD.md.ejs} +7 -5
  56. package/templates/_shared/meta/CHANGELOG.md.ejs +3 -3
  57. package/templates/_shared/meta/README.md.ejs +11 -9
  58. package/templates/_shared/meta/harness.yaml.ejs +28 -7
  59. package/templates/_shared/skeleton/baseline/code/.gitkeep +1 -0
  60. package/templates/_shared/skeleton/baseline/wiki/.gitkeep +1 -0
  61. package/templates/_shared/skeleton/references/apply-skills-registry.example.yaml +11 -0
  62. package/templates/_shared/skeleton/references/md/.gitkeep +1 -0
  63. package/templates/_shared/skeleton/references/raw/.gitkeep +1 -0
  64. package/templates/_shared/skeleton/references/yaml/.gitkeep +1 -0
  65. package/templates/_shared/skeleton/requirements/md/.gitkeep +1 -0
  66. package/templates/_shared/skeleton/requirements/raw/.gitkeep +1 -0
  67. package/templates/_shared/skeleton/requirements/yaml/.gitkeep +1 -0
  68. package/templates/android-xml/skeleton/agent-env/skills/harness-android-cli/SKILL.md +88 -0
  69. package/templates/android-xml/skeleton/agent-env/skills/harness-android-service-patterns/SKILL.md +205 -0
  70. package/templates/android-xml/skeleton/agent-env/skills/harness-android-xml-architecture/SKILL.md +138 -0
  71. package/templates/android-xml/skeleton/agent-env/skills/harness-lifecycle-management/SKILL.md +158 -0
  72. package/templates/android-xml/skeleton/agent-env/skills/harness-xml-ui/SKILL.md +112 -0
  73. package/templates/cpp/skeleton/agent-env/skills/harness-cmake-build/SKILL.md +163 -0
  74. package/templates/cpp/skeleton/agent-env/skills/harness-cpp-architecture/SKILL.md +157 -0
  75. package/templates/cpp/skeleton/agent-env/skills/harness-cpp-concurrency/SKILL.md +180 -0
  76. package/templates/cpp/skeleton/agent-env/skills/harness-memory-safety/SKILL.md +163 -0
  77. package/templates/cpp/skeleton/agent-env/skills/harness-modern-cpp/SKILL.md +149 -0
  78. package/templates/python/skeleton/agent-env/skills/harness-async-patterns/SKILL.md +162 -0
  79. package/templates/python/skeleton/agent-env/skills/harness-python-architecture/SKILL.md +160 -0
  80. package/templates/python/skeleton/agent-env/skills/harness-python-package-structure/SKILL.md +210 -0
  81. package/templates/python/skeleton/agent-env/skills/harness-python-performance/SKILL.md +207 -0
  82. package/templates/python/skeleton/agent-env/skills/harness-python-testing/SKILL.md +198 -0
  83. package/templates/svharness.config.example.yaml +40 -0
  84. package/templates/web-react/skeleton/agent-env/skills/harness-react-architecture/SKILL.md +177 -0
  85. package/templates/web-react/skeleton/agent-env/skills/harness-react-performance/SKILL.md +177 -0
  86. package/templates/web-react/skeleton/agent-env/skills/harness-react-testing/SKILL.md +193 -0
  87. package/templates/web-react/skeleton/agent-env/skills/harness-react-ui-patterns/SKILL.md +257 -0
  88. package/templates/web-react/skeleton/agent-env/skills/harness-state-management/SKILL.md +189 -0
  89. package/templates/_shared/skeleton/assets/baseline/code/.gitkeep +0 -1
  90. package/templates/_shared/skeleton/assets/baseline/wiki/.gitkeep +0 -1
  91. package/templates/_shared/skeleton/assets/raw/.gitkeep +0 -1
  92. package/templates/_shared/skeleton/assets/requirements/.gitkeep +0 -1
  93. /package/templates/_shared/skeleton/{assets/baseline/repomix → agent-env/_incoming/skills}/.gitkeep +0 -0
@@ -2,34 +2,34 @@
2
2
  name: harness-build-skill-wiki-writer
3
3
  description: >
4
4
  逐页撰写 baseline wiki 正文。读取 state 中 `tasks_file` 指向的任务清单与 structure.xml,
5
- 基于 assets/baseline/code/ 下的源码快照产出每一页 Markdown。当用户说"生成 baseline wiki 正文"、
5
+ 基于 baseline/code/ 下的源码快照产出每一页 Markdown。当用户说"生成 baseline wiki 正文"、
6
6
  "按 TASKS.md 逐页生成 baseline wiki"、"继续写 wiki 下一页",或由 harness-build-skill-orchestrator
7
- 在阶段 P1_wiki 委派时触发。
7
+ 在阶段 S10_wiki 委派时触发。
8
8
  ---
9
9
 
10
10
  # harness-build-skill-wiki-writer(baseline wiki 正文撰写)
11
11
 
12
- 你只做一件事:**按 `__HARNESS_ROOT__.harness-build-state.yaml` 中 `P1_wiki.tasks_file` 指向的任务清单,
13
- 一页一页地,基于 `__HARNESS_ROOT__assets/baseline/code/` 下的真实源码,写成 Markdown**。
14
- 规则抽取、快照选样、skills/tasks 索引不是你的职责(那是 harness-build-skill-knowledge-builder)。
12
+ 你只做一件事:**按 `__HARNESS_ROOT__.harness-build-state.yaml` 中 `S10_wiki.tasks_file` 指向的任务清单,
13
+ 一页一页地,基于 `__HARNESS_ROOT__baseline/code/` 下的真实源码,写成 Markdown**。
14
+ references intake、agent-env 合并、skills/tasks 索引不是你的职责(分别由 harness-build-skill-references-intake、harness-build-skill-agent-env-merge、harness-build-skill-knowledge-builder 负责)。
15
15
 
16
16
  ## 输入
17
17
 
18
- - `__HARNESS_ROOT__.harness-build-state.yaml` → `P1_wiki.tasks_file` —— 任务清单路径(通常 `__HARNESS_ROOT__assets/baseline/wiki/TASKS.md`);
18
+ - `__HARNESS_ROOT__.harness-build-state.yaml` → `S10_wiki.tasks_file` —— 任务清单路径(通常 `__HARNESS_ROOT__baseline/wiki/TASKS.md`);
19
19
  复选框形态,`[ ]` 待办、`[x]` 已完成
20
- - `__HARNESS_ROOT__assets/baseline/wiki/structure.xml` —— outline 权威来源;title / sectionFolder / parentSection 以此为准
21
- - `__HARNESS_ROOT__assets/baseline/code/` —— **唯一允许引用**的源码根;所有链接与行号引用都相对它
20
+ - `__HARNESS_ROOT__baseline/wiki/structure.xml` —— outline 权威来源;title / sectionFolder / parentSection 以此为准
21
+ - `__HARNESS_ROOT__baseline/code/` —— **唯一允许引用**的源码根;所有链接与行号引用都相对它
22
22
 
23
23
  ## 算法
24
24
 
25
25
  1. 读取 `TASKS.md`,找到第一条 `[ ]` 任务。若全部 `[x]`:
26
- - 汇报"P1_wiki 可以标记 DONE",并请 harness-build-skill-orchestrator 以最小补丁更新
27
- `__HARNESS_ROOT__.harness-build-state.yaml` 中 `P1_wiki.status: DONE`,然后退出。
28
- 2. 取该任务的 `Output` 路径(相对 `__HARNESS_ROOT__assets/baseline/wiki/`)、`Title`、`Section`、
26
+ - 汇报"S10_wiki 可以标记 DONE",并请 harness-build-skill-orchestrator 以最小补丁更新
27
+ `__HARNESS_ROOT__.harness-build-state.yaml` 中 `S10_wiki.status: DONE`,然后退出。
28
+ 2. 取该任务的 `Output` 路径(相对 `__HARNESS_ROOT__baseline/wiki/`)、`Title`、`Section`、
29
29
  `Parent section id`(如有)、`Description`、`Relevant files`。
30
- 3. 打开每个 Relevant file(位于 `__HARNESS_ROOT__assets/baseline/code/<repo-relative>`),读取真实内容;
31
- 必要时使用 grep/search_symbol 等工具补足上下文,但**不得离开 `__HARNESS_ROOT__assets/baseline/code/`**。
32
- 4. 撰写 Markdown,写入 `__HARNESS_ROOT__assets/baseline/wiki/<Output>`。
30
+ 3. 打开每个 Relevant file(位于 `__HARNESS_ROOT__baseline/code/<repo-relative>`),读取真实内容;
31
+ 必要时使用 grep/search_symbol 等工具补足上下文,但**不得离开 `__HARNESS_ROOT__baseline/code/`**。
32
+ 4. 撰写 Markdown,写入 `__HARNESS_ROOT__baseline/wiki/<Output>`。
33
33
  5. 写完后最小补丁式修改 `TASKS.md`,把该任务的 `[ ]` 改为 `[x]`(不得重排任务顺序、不得删除其他行)。
34
34
  6. 默认单步询问是否继续下一页。如果用户说"批量"、"全部继续"、"run through",则连续处理至清单尾。
35
35
 
@@ -38,27 +38,27 @@ description: >
38
38
  - **H1** 必须与 task `Title` 完全一致。
39
39
  - **简介段** 后若后续有 2 个及以上的 `##` 章节,插入锚点式 TOC。
40
40
  - **Mermaid** 使用 `graph TD` 或 `sequenceDiagram`,不使用 classDef / style / 颜色。
41
- - **引用源码** 必须指向 `__HARNESS_ROOT__assets/baseline/code/`。允许两种书写方式(可混用):
42
- - 行内链接:`[Foo.java:10-30](../../../assets/baseline/code/<repo-relative>/Foo.java#L10-L30)`
41
+ - **引用源码** 必须指向 `__HARNESS_ROOT__baseline/code/`。允许两种书写方式(可混用):
42
+ - 行内链接:`[Foo.java:10-30](../../baseline/code/<repo-relative>/Foo.java#L10-L30)`
43
43
  - Sources 行:`Sources: <repo-relative>/Foo.java:10-30, <repo-relative>/Bar.kt:5-8`
44
- `<repo-relative>` 是**相对 `__HARNESS_ROOT__assets/baseline/code/` 的路径**,既不是仓库原始绝对路径,
44
+ `<repo-relative>` 是**相对 `__HARNESS_ROOT__baseline/code/` 的路径**,既不是仓库原始绝对路径,
45
45
  也不是 wiki md 文件的相对路径。行号采用 `start-end`(闭区间)。
46
46
  - 禁止粘贴大段代码:单个 code block ≤ 40 行;必要时用省略号 `// ...` 裁剪。
47
47
  - 所有中文段落使用中文标点;字段名、类名、路径保留英文不译。
48
48
 
49
49
  ## 产出
50
50
 
51
- - `__HARNESS_ROOT__assets/baseline/wiki/<lang>/<section>/<stem>.md` —— 每个 task 一份
51
+ - `__HARNESS_ROOT__baseline/wiki/<lang>/<section>/<stem>.md` —— 每个 task 一份
52
52
  - 更新后的 `TASKS.md` —— 状态位从 `[ ]` 推进为 `[x]`,其他内容不动
53
53
 
54
54
  ## 守则(不得违反)
55
55
 
56
- - **不得凭空编造代码或结论**:任何结论都必须可追溯到 `__HARNESS_ROOT__assets/baseline/code/` 下的真实文件。
56
+ - **不得凭空编造代码或结论**:任何结论都必须可追溯到 `__HARNESS_ROOT__baseline/code/` 下的真实文件。
57
57
  - **不得修改 `structure.xml`** 或 `TASKS.md` 中 task 的 `Output / Section / Parent section id / Relevant files` 字段。
58
58
  - **不得整文件重写 `TASKS.md`**:只做最小补丁(复选框 `[ ]` → `[x]`)。
59
- - **不得在本 skill 内执行规则抽取、快照选样、skill/task 索引**(那是 harness-build-skill-knowledge-builder 的 P5/P6)。
60
- - **不得使用不在 `__HARNESS_ROOT__assets/baseline/code/` 下的源码路径**作为 Sources 引用。
61
- - 全部 wiki 完成后,由 harness-build-skill-orchestrator(不是本 skill)把 `P1_wiki` 标记 DONE。
59
+ - **不得在本 skill 内执行 references intake、agent-env 合并、skill/task 索引**(分别由 `harness-build-skill-references-intake`、`harness-build-skill-agent-env-merge`、`harness-build-skill-knowledge-builder` 负责)。
60
+ - **不得使用不在 `__HARNESS_ROOT__baseline/code/` 下的源码路径**作为 Sources 引用。
61
+ - 全部 wiki 完成后,由 harness-build-skill-orchestrator(不是本 skill)把 `S10_wiki` 标记 DONE。
62
62
  - 所有面向用户的说明使用中文;字段名、路径、类名保留英文。
63
63
  - **必须以表单方式**与用户交互确认,禁止仅以纯文本输出后自行继续。
64
64
  - **所有 wiki 正文段落必须使用中文**(代码、类名、路径等保留英文)。
@@ -68,10 +68,10 @@ description: >
68
68
  本 skill 执行前必须加载并严格遵循(文件位于当前 agent 的 rules 目录,具体路径/扩展名
69
69
  随 agent 可能为 `.md` 或 `.mdc`):
70
70
 
71
- - `harness-build-rule-orchestrator-flow` — 本 skill 仅服务 P1_wiki,禁止跨阶段工作。
71
+ - `harness-build-rule-orchestrator-flow` — 本 skill 仅服务 S10_wiki,禁止跨阶段工作。
72
72
  - `harness-build-rule-agent-agnostic` — wiki 正文严禁硬编码具体 agent 名或其私有指令语法。
73
73
  - `harness-build-rule-memory-write` — 撰写中如识别到可复用经验,按 inbox → categories 写入。
74
74
  - `harness-build-rule-chinese-only` — 所有产出内容必须使用中文。
75
75
  - `harness-build-rule-user-interaction` — 用户交互铁律:表单确认、禁止擅自修改。
76
76
 
77
- 若规则文件缺失,停止工作并提示用户重新运行 `svharnessbuild init`。
77
+ 若规则文件缺失,停止工作并提示用户重新运行 `svharness build`。
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: harness-build-skills-main
3
+ description: >
4
+ Harness **构建期**二级调度:从本 skill 正文末尾的 `## 绑定元数据` 解析 `harness_root_rel`,
5
+ 读取 `__HARNESS_ROOT__AGENTS_BUILD.md` 与 `__HARNESS_ROOT__.harness-build-state.yaml`,
6
+ 加载项目根下 `__HARNESS_BUILD_RULES_DIR__` 的构建规则,再按语义把任务路由到下列 **harness-build**
7
+ 子 skill。当用户说"按 harness-build-skills-main 开始构建"、"harness-build 总清单"、
8
+ "载入整个 harness-build"、"从清单调度 harness 构建" 时触发。
9
+ ---
10
+
11
+ # harness-build-skills-main(harness-build 总清单 / 二级调度)
12
+
13
+ 你是 **harness SDD 构建工作流** 的入口调度器。用户要进行 harness 脚手架内的规格 / wiki / rules /
14
+ skills 等**构建阶段**工作时,你不直接越级写产物,而是先完成:**绑定解析 → 规则装载 →
15
+ 子 skill 路由表建立 → 再委派**。
16
+
17
+ > 本 skill 由 `svharness build` 注入到 `__HARNESS_BUILD_SKILLS_DIR__/`。harness 目录位于
18
+ > 项目根下的 `harness_root_rel`(见文末 YAML)。所有对 harness 内文件的引用必须基于该相对路径,
19
+ > 禁止假设 harness 与当前工作目录的其它相对关系。
20
+
21
+ ## 输入
22
+
23
+ - **本 skill 正文末尾 `## 绑定元数据` YAML 块**(权威):
24
+ - `harness_root_rel` —— 相对项目根目录的 harness 路径(形如 `./my-app-harness/`)
25
+ - `harness_name` —— harness 短名(目录名去掉 `-harness` 后缀)
26
+ - `arch` —— 架构模板 id
27
+ - `agent` —— 注入目标 Agent 标识
28
+ - `build_rules_dir` —— 构建规则已注入的相对路径(可能为空)
29
+ - `build_skills_dir` —— 本套 build skill 已注入的相对路径
30
+ - `generated_at` / `generated_by` —— 生成时间与工具版本
31
+ - `__HARNESS_ROOT__AGENTS_BUILD.md` —— Agent 接入 harness 的必读步骤清单
32
+ - `__HARNESS_ROOT__.harness-build-state.yaml` —— 当前阶段与 `next_action`
33
+ - `__HARNESS_ROOT__harness.yaml` —— 清单与版本
34
+
35
+ ## harness-build 子 skill 路由表(按需深读)
36
+
37
+ | id | 职责 | 典型触发 |
38
+ |----|------|----------|
39
+ | `harness-build-skill-orchestrator` | 读取状态机、输出状态卡片、阶段推进、更新 `next_action` | 「开始构建 harness」「继续 harness」「harness 进度」 |
40
+ | `harness-build-skill-spec-builder` | raw → requirements YAML → specs YAML(schema 校验) | S40 / S50 阶段 |
41
+ | `harness-build-skill-references-intake` | references 转换与结构化索引 | S60 阶段 |
42
+ | `harness-build-skill-agent-env-merge` | baseline 自动提取确认 + extra-skills/rules 合并写入 | S61 / S65 阶段 |
43
+ | `harness-build-skill-knowledge-builder` | baseline 样本 + runtime skills/tasks 索引 | S10(子任务) / S70 阶段 |
44
+ | `harness-build-skill-wiki-writer` | 按 `baseline/wiki/TASKS.md` 逐页撰写 wiki | S10_wiki PENDING |
45
+
46
+ 以上子 skill 的完整正文位于 `__HARNESS_BUILD_SKILLS_DIR__/<id>/` 下(文件名随 Agent 为 `SKILL.md` 或 `SKILL.mdc`)。
47
+
48
+ ## 算法
49
+
50
+ 1. **加载绑定**:解析文末「绑定元数据」标题下 fenced YAML 代码块。若失败或缺少
51
+ `harness_root_rel`,停止并提示用户重新运行 `svharness build`(或检查 skill 是否被手工破坏)。
52
+
53
+ 2. **校验 harness 根**:确认 `harness_root_rel` 指向的目录存在,且内含
54
+ `.harness-build-state.yaml` 与 `AGENTS_BUILD.md`(或给出明确缺失项)。
55
+
56
+ 3. **装载构建规则(强约束)**:若 `build_rules_dir` 非空,枚举并阅读
57
+ `<项目根>/<build_rules_dir>/` 下由 `svharness build` 注入的 harness 构建规则(`always_on` 必须全部遵守)。
58
+ 规则与 `AGENTS_BUILD.md` 冲突时以**规则文件**为准。
59
+
60
+ 4. **建立会话路由**:根据用户意图在「路由表」中选择 1 个入口子 skill:
61
+ - 未指定具体子任务 / 首次进入构建 → **优先**委派给 `harness-build-skill-orchestrator`
62
+ - 用户明确只做 wiki 页 → `harness-build-skill-wiki-writer`
63
+ - 用户明确只做 spec / requirements → `harness-build-skill-spec-builder`
64
+ - 用户明确处理 references intake → `harness-build-skill-references-intake`
65
+ - 用户明确处理 extra-skills/rules 合并 → `harness-build-skill-agent-env-merge`
66
+ - 用户明确补充 S70 runtime assets / baseline 样本 → `harness-build-skill-knowledge-builder`
67
+
68
+ 5. **执行守则**:遵守各子 skill 与 `agent-env/rules/` 中的交互与输出约定;不得跳过
69
+ orchestrator 所定义的阶段红线(见 `harness-build-rule-orchestrator-flow`)。
70
+
71
+ 6. **面向用户的说明使用中文**;字段名、路径、CMD ID 等保留英文。
72
+
73
+ ## 守则(不得违反)
74
+
75
+ - **不得跳过本 skill 内嵌的绑定元数据**去猜测 harness 路径。
76
+ - **不得把 AGENTS_BUILD.md 中的指引当作可违背的软建议**;其中「先读 specs / rules」与状态机阶段准入仍必须遵守。
77
+ - **不得将 apply 期的 `harness-apply-skills-main` 与 build 期的本子 skill 混用**:apply 面向目标业务项目绑定;本 skill 仅服务 harness 目录内的 SDD 构建流水线。
78
+
79
+ ## 绑定元数据(权威来源,由 svharness build 生成,请勿手工编辑)
80
+
81
+ ```yaml
82
+ {{BINDING_YAML_BLOCK}}
83
+ ```
@@ -0,0 +1,139 @@
1
+ # AGENTS_APPLY.md(harness 应用指南)
2
+
3
+ > 本文件是 AI 编码 Agent **应用 harness 知识层**到目标项目时的入口。
4
+ > 与 `AGENTS_BUILD.md`(构建指南)互补:`AGENTS_BUILD.md` 驱动 harness 本体的构建与演进,
5
+ > **本文件驱动 harness 知识向目标项目的落地执行**。
6
+ >
7
+ > 如果你是通过 `svharnessbuild apply` 注入的 `harness-apply-skills-main` skill
8
+ > 进入的,请先执行该 skill 的调度流程,再参照本文件的守则补充上下文。
9
+
10
+ ## 1. 前置条件
11
+
12
+ 在开始开发前,确认以下状态:
13
+
14
+ 1. `harness.yaml` —— 清单文件,确认 `name`、`arch`、`agent` 与目标项目一致
15
+ 2. `.harness-build-state.yaml` —— 构建状态,确认关键阶段(`S00_bootstrap` ~ `S50_generate_specs`)至少为 `DONE`
16
+ 3. `agent-env/rules/` —— 存在 `.mdc` / `.md` 规则文件(强约束)
17
+ 4. `agent-env/skills/` —— 存在子 skill 目录(可选能力)
18
+ 5. `specs/` —— 存在功能规格(若 `bootstrap_mode: true`,规格仍在草稿阶段,需人工确认)
19
+
20
+ > 若 harness 尚未完成构建(如 `S70_runtime_assets` 仍为 `PENDING`),
21
+ > 建议先回到 harness 本体执行构建流程,而非直接应用。
22
+
23
+ ## 2. 加载约束与能力
24
+
25
+ ### 2.1 强约束(必须遵守)
26
+
27
+ 枚举并读取 `agent-env/rules/` 下所有规则文件:
28
+
29
+ - `always_on` 规则 —— **每次任务都必须遵守**,不得跳过
30
+ - `model_decision` 规则 —— 按本次任务语义挑选适用规则
31
+
32
+ 规则冲突时以 `always_on` 规则为准。典型约束包括但不限于:
33
+
34
+ - `harness-compose-mandatory.mdc` —— Compose UI 强制规范
35
+ - `harness-mvi-layering.mdc` —— MVI 分层约束
36
+ - `harness-hilt-injection.mdc` —— 依赖注入规范
37
+ - `harness-coroutines-scope.mdc` —— 协程作用域规范
38
+
39
+ ### 2.2 子能力(按需调用)
40
+
41
+ 枚举 `agent-env/skills/*/SKILL.md`,提取 `name` + `description` 建立路由表。
42
+ 不要整目录朗读,按需要再深读。典型子能力包括:
43
+
44
+ - `harness-android-architecture` —— Android 架构模板
45
+ - `harness-compose-ui` —— Compose UI 组件编写
46
+ - `harness-compose-state` —— 状态管理
47
+ - `harness-xml-to-compose` —— XML → Compose 迁移
48
+ - `harness-kotlin-coroutines` —— 协程最佳实践
49
+ - `harness-android-cli` —— ADB / Gradle 命令
50
+
51
+ ## 3. 开发工作流
52
+
53
+ ```
54
+ 用户需求 → 加载约束 → 语义路由 → 查阅基线/规格 → 编码 → 校验 → 交付
55
+ ```
56
+
57
+ ### 3.1 理解需求
58
+
59
+ - 明确功能边界:是新增、修改还是重构?
60
+ - 若存在 `specs/` 中对应的规格文件,**必须先对齐 schema** 再编码
61
+ - 若需求与现有规格冲突,先提规格变更,再写代码
62
+
63
+ ### 3.2 查阅基线与规格
64
+
65
+ 按需参考以下目录(均在 harness 根下):
66
+
67
+ | 目录 | 用途 | 读写 |
68
+ |------|------|------|
69
+ | `baseline/wiki/` | 项目知识摘要,优先建立上下文 | 只读 |
70
+ | `baseline/code/` | 权威参考实现 | 只读 |
71
+ | `specs/signals/` | 信号/协议规格 | 只读 |
72
+ | `specs/ui/` | UI 规格 | 只读 |
73
+ | `specs/behavior/` | 行为规格 | 只读 |
74
+ | `specs/interfaces/` | 接口规格 | 只读 |
75
+ | `tasks/templates/` | 任务模板 | 只读 |
76
+
77
+ > **禁止引用 `baseline/code/` 之外的源码**作为"参考实现"。
78
+
79
+ ### 3.3 编码执行
80
+
81
+ - **所有代码写在目标项目下**,不得修改 harness 目录内的文件
82
+ - 引用 harness 文件时使用相对路径
83
+ - 严格遵守 `agent-env/rules/` 中的所有约束
84
+ - 产出必须同时满足 `specs/`(做什么)与 `agent-env/rules/`(怎么做)
85
+
86
+ ### 3.4 交付校验
87
+
88
+ - 涉及 specs 的任务,产物必须通过 `specs/*/schema.json` 校验
89
+ - 代码改动不得违反 `agent-env/rules/` 中的规则
90
+ - 在 PR 描述中记录每一条外部假设
91
+
92
+ ## 4. 记忆沉淀
93
+
94
+ 若本次开发产生了可复用经验:
95
+
96
+ - 新经验放入 `agent-env/memory/inbox/`(待审核)
97
+ - 经人工审核后转入 `agent-env/memory/categories/`
98
+ - 不确定时停住询问,不得擅自归档
99
+
100
+ ## 5. 守则(不得违反)
101
+
102
+ - **不得修改 harness 目录下的文件**(rules / skills / specs / baseline / VERSION)
103
+ harness 是只读知识源,演进由构建流程负责
104
+ - **不得绕过绑定元数据**猜测 harness 路径;路径错误须让用户重新绑定
105
+ - **不得把 `always_on` 规则当成"建议"**——它们是硬约束
106
+ - **不得引用 `baseline/code/` 之外的源码**作为参考实现
107
+ - 所有面向用户的说明使用**中文**;字段名、类名、路径保留英文
108
+ - 多个子 skill 有冲突结论时,显式告知用户并请其裁决
109
+
110
+ ## 6. 典型应用示例
111
+
112
+ ### 示例 1:新增设置项页面
113
+
114
+ ```
115
+ 用户:基于 harness 新增"显示设置"Fragment
116
+ Agent:
117
+ 1. 加载 harness-compose-mandatory.mdc + harness-mvi-layering.mdc
118
+ 2. 路由到 harness-compose-ui skill
119
+ 3. 查阅 specs/ui/ 中是否有显示设置相关规格
120
+ 4. 参考 baseline/code/ 中的 Fragment 样本
121
+ 5. 在目标项目 src/ 下编写 Compose UI + ViewModel + Repository
122
+ 6. 校验规格一致性
123
+ ```
124
+
125
+ ### 示例 2:新增协议信号
126
+
127
+ ```
128
+ 用户:按 harness 规范实现 CMDID 0xA3 信号解析
129
+ Agent:
130
+ 1. 加载 harness-mvi-layering.mdc
131
+ 2. 查阅 specs/signals/ 中的信号规格
132
+ 3. 参考 baseline/code/ 中的现有信号解析代码
133
+ 4. 编写信号解析 + 状态层
134
+ 5. 通过 specs/signals/schema.json 校验
135
+ ```
136
+
137
+ ---
138
+
139
+ 架构: **<%= arch %>**  Agent: **<%= agent %>**  生成时间: <%= createdAt %>
@@ -1,6 +1,6 @@
1
- # AGENTS.md
1
+ # AGENTS_BUILD.md
2
2
 
3
- > 本文件是任何 AI 编码 Agent 接入 **<%= name %>** 项目的入口。
3
+ > 本文件是任何 AI 编码 Agent 接入 **<%= name %>-harness** 项目的入口。
4
4
  > 请**按顺序**完成以下步骤,不要跳步。
5
5
 
6
6
  ## 1. 加载上下文(只读)
@@ -11,21 +11,23 @@
11
11
  2. `.harness-build-state.yaml` —— 当前构建阶段与待办动作
12
12
  3. `specs/**/*.yaml` —— 权威的「做什么」(功能契约,唯一事实来源)
13
13
  4. `agent-env/rules/*.mdc` —— 架构层面的「怎么做」(不得违反的约束)
14
- 5. `assets/baseline/wiki/**/*.md` —— 基线源码知识快照(指引,不是契约)
14
+ 5. `baseline/wiki/**/*.md` —— 基线源码知识快照(指引,不是契约)
15
15
 
16
16
  ## 2. 查看状态,选择下一步
17
17
 
18
18
  - 打开 `.harness-build-state.yaml`
19
19
  - 识别 `current_phase`
20
20
  - 优先调用 `next_action` 中建议的 skill
21
- - `P1_wiki` 若存在:读其 `mode` / `source` / `tasks_file` 字段判断 wiki 当前形态,
21
+ - `S10_wiki` 若存在:读其 `mode` / `source` / `tasks_file` 字段判断 wiki 当前形态,
22
22
  详见 harness-build-skill-orchestrator / harness-build-skill-wiki-writer skill
23
23
 
24
24
  若你所在的 Agent IDE 支持 skill 触发,请使用下列构建辅助 skill:
25
25
 
26
26
  - **harness-build-skill-orchestrator** —— 驱动整体构建流程
27
27
  - **harness-build-skill-spec-builder** —— raw → requirements → specs
28
- - **harness-build-skill-knowledge-builder** —— baseline/code 样本 / rules / skills & tasks
28
+ - **harness-build-skill-references-intake** —— S60 references 转换与结构化索引
29
+ - **harness-build-skill-agent-env-merge** —— S61 baseline 自动提取确认 + S65 合并写入
30
+ - **harness-build-skill-knowledge-builder** —— S10 baseline/code 样本 + S70 skills & tasks
29
31
  - **harness-build-skill-wiki-writer** —— 按 TASKS.md 逐页撰写 baseline wiki 正文
30
32
 
31
33
  ## 3. 产出
@@ -6,10 +6,10 @@
6
6
 
7
7
  ### Added
8
8
  - 由 svharnessbuild v<%= version %> 初次生成骨架(架构:<%= arch %>,Agent:<%= agent %>)。
9
- - 建立分层目录结构:`specs/` / `assets/` / `agent-env/` / `tasks/` / `commands/`。
9
+ - 建立分层目录结构:`specs/` / `requirements/` / `references/` / `baseline/` / `agent-env/` / `tasks/` / `commands/`。
10
10
  - 建立四层 spec 的 JSON Schema(signals / ui / behavior / interfaces)。
11
- - 在 Agent 工作目录中注入构建辅助 skill:harness-build-skill-orchestrator、harness-build-skill-spec-builder、harness-build-skill-knowledge-builder。
12
- - 初始化 `.harness-build-state.yaml`,除 `P-1_skeleton` 为 DONE 外,其余阶段均为 PENDING。
11
+ - 在 Agent 工作目录中注入构建辅助 skill:harness-build-skill-orchestrator、harness-build-skill-spec-builder、harness-build-skill-references-intake、harness-build-skill-agent-env-merge、harness-build-skill-knowledge-builder。
12
+ - 初始化 `.harness-build-state.yaml`,除 `S00_bootstrap` 为 DONE 外,其余阶段均为 PENDING。
13
13
  <% if (sourcePath) { -%>
14
14
  - 已登记基线源码路径:`<%= sourcePath %>`。
15
15
  <% } -%>
@@ -11,7 +11,7 @@
11
11
  | 层 | 职责 |
12
12
  |----|------|
13
13
  | `specs/` | 权威的「做什么」 —— signals / UI / behavior / interfaces(通过 schema 校验的 YAML) |
14
- | `assets/` | 输入与基线 —— `raw/`、`requirements/`、`baseline/{code,wiki}/` |
14
+ | `requirements/` + `references/` | 输入与基线 —— `requirements/{raw,md,yaml}`、`references/{raw,md,yaml}`、`baseline/{code,wiki}/` |
15
15
  | `agent-env/` | Agent 运行时环境 —— `rules/`、`skills/`、`tools/`、`memory/{categories,inbox}/` |
16
16
  | `tasks/` | 声明式 task 模板(`templates/`),通过路径引用 specs / rules / skills |
17
17
  | `commands/` | 命令式工作流 —— `install/`(一次性初始化)、`update/`(日常治理) |
@@ -24,14 +24,16 @@
24
24
 
25
25
  注入的 **harness-build-skill-orchestrator** skill 会读取 `.harness-build-state.yaml`,并逐步引导你走完下列流程:
26
26
 
27
- 1. **P1 raw** —— 把原始需求文档放入 `assets/raw/`
28
- 2. **P2 requirements** —— Agent 将其结构化为 `assets/requirements/*.yaml`
29
- 3. **P3 specs** —— Agent `specs/*/` 下生成 YAML 并通过 schema 校验
30
- 4. **P4 baseline_wiki** —— Agent 汇总代码知识到 `assets/baseline/wiki/` 并拷贝 ~20 个关键参考文件到 `assets/baseline/code/`
31
- 5. **P5 rules** —— 人工填充架构约束到 `agent-env/rules/`(Agent 起草,人工审核)
32
- 6. **P6 skills_tasks** —— 项目专属的运行期 skill task 模板
33
- 7. **P7 memory** —— Agent 播种初始 memory 分类
34
- 8. **P-Final** —— `svharnessbuild seal` `bootstrap_mode` 翻转为 false
27
+ 1. **S20_collect_inputs** —— 添加相关文件(`requirements/raw/`、`references/raw/`,并确认是否有额外运行期资源;可通过 `--extra-skills` 单入口混放提供)
28
+ 2. **S30_convert_docs** —— Markdown 原始文档统一转换到对应 `md/` 目录
29
+ 3. **S40_extract_requirements** —— Agent 将需求结构化为 `requirements/yaml/`
30
+ 4. **S50_generate_specs** —— Agent `specs/*/` 下生成 YAML 并通过 schema 校验
31
+ 5. **S60_process_references** —— 处理 references(`svharness convert` + 结构化索引 + 表单确认落地)
32
+ 6. **S61_confirm_baseline_extraction** —— 确认是否自动从 baseline 提取 skills/rules(表单确认)
33
+ 7. **S65_customize_agent_env** —— extra-skills/extra-rules(及已确认启用的 baseline 提取候选)执行合并写入;来源可来自 `_incoming/manifest.yaml`;冲突时"建议 → 确认 → 写入"
34
+ 8. **S70_runtime_assets** —— 产出运行期 skills tasks(skills 是能力积木,tasks 是流程模板)
35
+ 9. **S80_seed_memory** —— Agent 播种初始 memory 分类
36
+ 10. **S90_finalize** —— `svharnessbuild seal` 将 `bootstrap_mode` 翻转为 false
35
37
 
36
38
  ## 常用命令
37
39
 
@@ -18,18 +18,39 @@ specs:
18
18
  - { name: behavior, schema: specs/behavior/schema.json }
19
19
  - { name: interfaces, schema: specs/interfaces/schema.json }
20
20
 
21
- # 输入与基线素材。
22
- assets:
23
- raw: assets/raw/ # 原始未加工需求文档
24
- requirements: assets/requirements/ # 条目化后的结构化需求
25
- baseline:
26
- code: assets/baseline/code/ # 基线代码快照(参考样本)
27
- wiki: assets/baseline/wiki/ # 基线工程 wiki
21
+ # 输入与基线素材(顶层目录,不再嵌套在 assets/ 下)。
22
+ requirements: # 正式需求(参与条目化)
23
+ raw: requirements/raw/ # S20_collect_inputs 用户入口
24
+ md: requirements/md/ # convert 产物
25
+ yaml: requirements/yaml/ # S40 条目化产出
26
+ # requirements 输入路径(可选):可记录外部需求文档来源(文件或目录)。
27
+ <% if (requirementsPath) { -%>
28
+ source: "<%= requirementsPath %>"
29
+ <% } else { -%>
30
+ source: null
31
+ <% } -%>
32
+ references: # 参考资料(不参与条目化)
33
+ raw: references/raw/
34
+ md: references/md/
35
+ yaml: references/yaml/
36
+ # references 输入路径(可选):可记录外部参考资料来源(文件或目录)。
37
+ <% if (referencesPath) { -%>
38
+ source: "<%= referencesPath %>"
39
+ <% } else { -%>
40
+ source: null
41
+ <% } -%>
42
+ baseline:
43
+ code: baseline/code/ # 基线代码快照(参考样本)
44
+ wiki: baseline/wiki/ # 基线工程 wiki
28
45
 
29
46
  # Agent 运行时环境(规则、技能、工具、记忆)。
47
+ # incoming_* 仅构建期:`svharness build --extra-skills` 将资源暂存于此并生成 manifest,S65 确认后分流写入 rules/skills。
30
48
  agent_env:
31
49
  rules: agent-env/rules/
32
50
  skills: agent-env/skills/
51
+ incoming_root: agent-env/_incoming/
52
+ incoming_skills_dir: agent-env/_incoming/skills/
53
+ incoming_manifest: agent-env/_incoming/manifest.yaml
33
54
  tools: agent-env/tools/
34
55
  memory:
35
56
  categories_dir: agent-env/memory/categories/
@@ -0,0 +1,11 @@
1
+ # 示例:S60 为「内容引用」追加登记到此文件(勿在 agent-env/skills 下建 harness-apply-skills-*)。
2
+ # svharness apply 将 enabled 项写入 harness-apply-skills-main 的 apply_skill_registry。
3
+ schema_version: 1
4
+ generated_at: "2026-05-17T00:00:00.000Z"
5
+ skills:
6
+ - skill_dir: harness-apply-skills-example-topic
7
+ skill_name: harness-apply-skills-example-topic
8
+ source_id: REF-EXAMPLE-001
9
+ reference_md: references/md/example.md
10
+ description: 示例:按 references/md 中的流程执行某类任务
11
+ enabled: true
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: harness-android-cli
3
+ description: 使用 `android` 命令行工具编排 Android 开发任务,包括项目创建、部署、ADB 调试和 SDK 管理。
4
+ ---
5
+
6
+ # Android CLI 工具
7
+
8
+ ## 项目创建
9
+
10
+ ```bash
11
+ # 创建新项目
12
+ android create project \
13
+ --name MyApp \
14
+ --package com.example.myapp \
15
+ --activity MainActivity \
16
+ --target android-34 \
17
+ --path ./MyApp
18
+
19
+ # 创建模块
20
+ android create lib-project \
21
+ --name my-library \
22
+ --package com.example.library \
23
+ --target android-34 \
24
+ --path ./my-library
25
+ ```
26
+
27
+ ## ADB 调试
28
+
29
+ ```bash
30
+ # 安装与卸载
31
+ adb install -r app-debug.apk
32
+ adb uninstall com.example.myapp
33
+
34
+ # 日志
35
+ adb logcat -v threadtime
36
+ adb logcat -s MainActivity:V *:S
37
+
38
+ # Intent 启动
39
+ adb shell am start -n com.example.myapp/.MainActivity
40
+ adb shell am broadcast -a com.example.MY_ACTION
41
+
42
+ # 查看 Activity 栈
43
+ adb shell dumpsys activity activities
44
+ ```
45
+
46
+ ## SDK 管理
47
+
48
+ ```bash
49
+ # 列出已安装和可用包
50
+ android sdk list --all
51
+
52
+ # 安装 SDK 版本
53
+ android sdk install "platforms;android-34"
54
+ android sdk install "build-tools;34.0.0"
55
+ ```
56
+
57
+ ## ProGuard / R8
58
+
59
+ ```bash
60
+ # 生成混淆映射文件(release 构建后位于 build/outputs/mapping/)
61
+ # 查看混淆堆栈
62
+ retrace.sh -verbose mapping.txt stacktrace.txt
63
+ ```
64
+
65
+ ## 签名与对齐
66
+
67
+ ```bash
68
+ # 对齐
69
+ zipalign -v -p 4 app-release-unsigned.apk app-release-aligned.apk
70
+
71
+ # 签名
72
+ apksigner sign --ks my-release-key.jks \
73
+ --ks-key-alias my-alias \
74
+ --out app-release.apk app-release-aligned.apk
75
+
76
+ # 验证签名
77
+ apksigner verify --verbose app-release.apk
78
+ ```
79
+
80
+ ## 资源与 AAPT
81
+
82
+ ```bash
83
+ # 查看 APK 包名和版本
84
+ aapt dump badging app-release.apk
85
+
86
+ # 列出 APK 权限
87
+ aapt dump permissions app-release.apk
88
+ ```