harness-engineering-agent 0.1.8 → 0.2.0

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 (268) hide show
  1. package/README.md +146 -60
  2. package/dist/agent/harness-agent-capabilities.d.ts +4 -0
  3. package/dist/agent/harness-agent-capabilities.d.ts.map +1 -0
  4. package/dist/agent/harness-agent-capabilities.js +4 -0
  5. package/dist/agent/harness-agent-capabilities.js.map +1 -0
  6. package/dist/agent/harness-agent-capability-builders.d.ts +11 -0
  7. package/dist/agent/harness-agent-capability-builders.d.ts.map +1 -0
  8. package/dist/agent/harness-agent-capability-builders.js +57 -0
  9. package/dist/agent/harness-agent-capability-builders.js.map +1 -0
  10. package/dist/agent/harness-agent-capability-data.d.ts +3 -0
  11. package/dist/agent/harness-agent-capability-data.d.ts.map +1 -0
  12. package/dist/agent/harness-agent-capability-data.js +23 -0
  13. package/dist/agent/harness-agent-capability-data.js.map +1 -0
  14. package/dist/agent/harness-agent-capability-types.d.ts +50 -0
  15. package/dist/agent/harness-agent-capability-types.d.ts.map +1 -0
  16. package/dist/agent/harness-agent-capability-types.js +3 -0
  17. package/dist/agent/harness-agent-capability-types.js.map +1 -0
  18. package/dist/agent/harness-role-capability-directory-data.d.ts +3 -0
  19. package/dist/agent/harness-role-capability-directory-data.d.ts.map +1 -0
  20. package/dist/agent/harness-role-capability-directory-data.js +208 -0
  21. package/dist/agent/harness-role-capability-directory-data.js.map +1 -0
  22. package/dist/agent/harness-role-capability-directory.d.ts +43 -0
  23. package/dist/agent/harness-role-capability-directory.d.ts.map +1 -0
  24. package/dist/agent/harness-role-capability-directory.js +57 -0
  25. package/dist/agent/harness-role-capability-directory.js.map +1 -0
  26. package/dist/agent/index.d.ts +7 -0
  27. package/dist/agent/index.d.ts.map +1 -0
  28. package/dist/agent/index.js +6 -0
  29. package/dist/agent/index.js.map +1 -0
  30. package/dist/config/config-defaults.d.ts +22 -0
  31. package/dist/config/config-defaults.d.ts.map +1 -1
  32. package/dist/config/config-defaults.js +22 -0
  33. package/dist/config/config-defaults.js.map +1 -1
  34. package/dist/config/config-merge.d.ts.map +1 -1
  35. package/dist/config/config-merge.js +30 -0
  36. package/dist/config/config-merge.js.map +1 -1
  37. package/dist/config/config-schema.d.ts +59 -0
  38. package/dist/config/config-schema.d.ts.map +1 -1
  39. package/dist/config/config-schema.js +18 -1
  40. package/dist/config/config-schema.js.map +1 -1
  41. package/dist/config/config-types.d.ts +5 -1
  42. package/dist/config/config-types.d.ts.map +1 -1
  43. package/dist/config/harness-config.d.ts +2 -1
  44. package/dist/config/harness-config.d.ts.map +1 -1
  45. package/dist/config/harness-config.js +1 -0
  46. package/dist/config/harness-config.js.map +1 -1
  47. package/dist/config/index.d.ts +1 -1
  48. package/dist/config/index.d.ts.map +1 -1
  49. package/dist/config/index.js.map +1 -1
  50. package/dist/config/opencode-compatibility.d.ts +37 -0
  51. package/dist/config/opencode-compatibility.d.ts.map +1 -0
  52. package/dist/config/opencode-compatibility.js +99 -0
  53. package/dist/config/opencode-compatibility.js.map +1 -0
  54. package/dist/controller/agent-output.d.ts +1 -1
  55. package/dist/controller/agent-output.d.ts.map +1 -1
  56. package/dist/controller/agent-output.js +18 -1
  57. package/dist/controller/agent-output.js.map +1 -1
  58. package/dist/controller/agent-session-types.d.ts +56 -0
  59. package/dist/controller/agent-session-types.d.ts.map +1 -0
  60. package/dist/controller/agent-session-types.js +2 -0
  61. package/dist/controller/agent-session-types.js.map +1 -0
  62. package/dist/controller/agent-session-utils.d.ts +52 -0
  63. package/dist/controller/agent-session-utils.d.ts.map +1 -0
  64. package/dist/controller/agent-session-utils.js +118 -0
  65. package/dist/controller/agent-session-utils.js.map +1 -0
  66. package/dist/controller/agent-session.d.ts +2 -55
  67. package/dist/controller/agent-session.d.ts.map +1 -1
  68. package/dist/controller/agent-session.js +82 -129
  69. package/dist/controller/agent-session.js.map +1 -1
  70. package/dist/controller/contracts.d.ts +3 -2
  71. package/dist/controller/contracts.d.ts.map +1 -1
  72. package/dist/controller/contracts.js.map +1 -1
  73. package/dist/controller/evidence-factory.js +7 -1
  74. package/dist/controller/evidence-factory.js.map +1 -1
  75. package/dist/controller/failure-analysis.d.ts +12 -0
  76. package/dist/controller/failure-analysis.d.ts.map +1 -1
  77. package/dist/controller/failure-analysis.js +41 -0
  78. package/dist/controller/failure-analysis.js.map +1 -1
  79. package/dist/controller/failure-analyzer-schemas.d.ts +87 -0
  80. package/dist/controller/failure-analyzer-schemas.d.ts.map +1 -0
  81. package/dist/controller/failure-analyzer-schemas.js +117 -0
  82. package/dist/controller/failure-analyzer-schemas.js.map +1 -0
  83. package/dist/controller/graph-validator.js +18 -4
  84. package/dist/controller/graph-validator.js.map +1 -1
  85. package/dist/controller/index.d.ts +7 -2
  86. package/dist/controller/index.d.ts.map +1 -1
  87. package/dist/controller/index.js +4 -1
  88. package/dist/controller/index.js.map +1 -1
  89. package/dist/controller/repair-loop.d.ts +1 -1
  90. package/dist/controller/repair-loop.d.ts.map +1 -1
  91. package/dist/controller/repair-loop.js +28 -0
  92. package/dist/controller/repair-loop.js.map +1 -1
  93. package/dist/controller/report-factory.d.ts.map +1 -1
  94. package/dist/controller/report-factory.js +49 -21
  95. package/dist/controller/report-factory.js.map +1 -1
  96. package/dist/controller/role-prompts.d.ts +2 -1
  97. package/dist/controller/role-prompts.d.ts.map +1 -1
  98. package/dist/controller/role-prompts.js +3 -9
  99. package/dist/controller/role-prompts.js.map +1 -1
  100. package/dist/controller/run-acceptance.d.ts +17 -0
  101. package/dist/controller/run-acceptance.d.ts.map +1 -0
  102. package/dist/controller/run-acceptance.js +179 -0
  103. package/dist/controller/run-acceptance.js.map +1 -0
  104. package/dist/controller/run-controller.d.ts.map +1 -1
  105. package/dist/controller/run-controller.js +244 -22
  106. package/dist/controller/run-controller.js.map +1 -1
  107. package/dist/controller/session-tool-authorization.d.ts +14 -0
  108. package/dist/controller/session-tool-authorization.d.ts.map +1 -0
  109. package/dist/controller/session-tool-authorization.js +88 -0
  110. package/dist/controller/session-tool-authorization.js.map +1 -0
  111. package/dist/controller/task-agent-output.d.ts +13 -2
  112. package/dist/controller/task-agent-output.d.ts.map +1 -1
  113. package/dist/controller/task-agent-output.js +58 -1
  114. package/dist/controller/task-agent-output.js.map +1 -1
  115. package/dist/controller/task-agent-schemas.d.ts +745 -26
  116. package/dist/controller/task-agent-schemas.d.ts.map +1 -1
  117. package/dist/controller/task-agent-schemas.js +70 -21
  118. package/dist/controller/task-agent-schemas.js.map +1 -1
  119. package/dist/controller/task-executor.d.ts +1 -1
  120. package/dist/controller/task-executor.d.ts.map +1 -1
  121. package/dist/controller/task-executor.js +269 -105
  122. package/dist/controller/task-executor.js.map +1 -1
  123. package/dist/doctor/cli.d.ts +3 -0
  124. package/dist/doctor/cli.d.ts.map +1 -0
  125. package/dist/doctor/cli.js +10 -0
  126. package/dist/doctor/cli.js.map +1 -0
  127. package/dist/doctor/index.d.ts +7 -0
  128. package/dist/doctor/index.d.ts.map +1 -0
  129. package/dist/doctor/index.js +16 -0
  130. package/dist/doctor/index.js.map +1 -0
  131. package/dist/doctor/local-mcp-probe.d.ts +3 -0
  132. package/dist/doctor/local-mcp-probe.d.ts.map +1 -0
  133. package/dist/doctor/local-mcp-probe.js +151 -0
  134. package/dist/doctor/local-mcp-probe.js.map +1 -0
  135. package/dist/doctor/opencode-config.d.ts +43 -0
  136. package/dist/doctor/opencode-config.d.ts.map +1 -0
  137. package/dist/doctor/opencode-config.js +103 -0
  138. package/dist/doctor/opencode-config.js.map +1 -0
  139. package/dist/doctor/run-harness-doctor.d.ts +23 -0
  140. package/dist/doctor/run-harness-doctor.d.ts.map +1 -0
  141. package/dist/doctor/run-harness-doctor.js +176 -0
  142. package/dist/doctor/run-harness-doctor.js.map +1 -0
  143. package/dist/doctor/types.d.ts +69 -0
  144. package/dist/doctor/types.d.ts.map +1 -0
  145. package/dist/doctor/types.js +8 -0
  146. package/dist/doctor/types.js.map +1 -0
  147. package/dist/domain/acceptance-criteria.d.ts +9 -0
  148. package/dist/domain/acceptance-criteria.d.ts.map +1 -0
  149. package/dist/domain/acceptance-criteria.js +38 -0
  150. package/dist/domain/acceptance-criteria.js.map +1 -0
  151. package/dist/domain/context-package.d.ts +43 -0
  152. package/dist/domain/context-package.d.ts.map +1 -0
  153. package/dist/domain/context-package.js +54 -0
  154. package/dist/domain/context-package.js.map +1 -0
  155. package/dist/domain/evidence.d.ts +1 -0
  156. package/dist/domain/evidence.d.ts.map +1 -1
  157. package/dist/domain/evidence.js +1 -2
  158. package/dist/domain/evidence.js.map +1 -1
  159. package/dist/domain/index.d.ts +14 -4
  160. package/dist/domain/index.d.ts.map +1 -1
  161. package/dist/domain/index.js +7 -2
  162. package/dist/domain/index.js.map +1 -1
  163. package/dist/domain/plan-artifacts.d.ts +170 -0
  164. package/dist/domain/plan-artifacts.d.ts.map +1 -0
  165. package/dist/domain/plan-artifacts.js +187 -0
  166. package/dist/domain/plan-artifacts.js.map +1 -0
  167. package/dist/domain/project-context.d.ts +10 -0
  168. package/dist/domain/project-context.d.ts.map +1 -0
  169. package/dist/domain/project-context.js +11 -0
  170. package/dist/domain/project-context.js.map +1 -0
  171. package/dist/domain/report.d.ts +608 -11
  172. package/dist/domain/report.d.ts.map +1 -1
  173. package/dist/domain/report.js +6 -4
  174. package/dist/domain/report.js.map +1 -1
  175. package/dist/domain/requirement.d.ts +22 -2
  176. package/dist/domain/requirement.d.ts.map +1 -1
  177. package/dist/domain/requirement.js +26 -3
  178. package/dist/domain/requirement.js.map +1 -1
  179. package/dist/domain/run-acceptance.d.ts +33 -0
  180. package/dist/domain/run-acceptance.d.ts.map +1 -0
  181. package/dist/domain/run-acceptance.js +29 -0
  182. package/dist/domain/run-acceptance.js.map +1 -0
  183. package/dist/domain/run.d.ts +596 -7
  184. package/dist/domain/run.d.ts.map +1 -1
  185. package/dist/domain/run.js +58 -0
  186. package/dist/domain/run.js.map +1 -1
  187. package/dist/domain/shared.d.ts +40 -2
  188. package/dist/domain/shared.d.ts.map +1 -1
  189. package/dist/domain/shared.js +26 -0
  190. package/dist/domain/shared.js.map +1 -1
  191. package/dist/domain/task-review.d.ts +57 -0
  192. package/dist/domain/task-review.d.ts.map +1 -0
  193. package/dist/domain/task-review.js +63 -0
  194. package/dist/domain/task-review.js.map +1 -0
  195. package/dist/domain/task.d.ts +24 -2
  196. package/dist/domain/task.d.ts.map +1 -1
  197. package/dist/domain/task.js +20 -12
  198. package/dist/domain/task.js.map +1 -1
  199. package/dist/index.d.ts +5 -0
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +5 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/plugin/create-harness-plugin.d.ts +4 -28
  204. package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
  205. package/dist/plugin/create-harness-plugin.js +33 -166
  206. package/dist/plugin/create-harness-plugin.js.map +1 -1
  207. package/dist/plugin/harness-agent-config.d.ts +7 -0
  208. package/dist/plugin/harness-agent-config.d.ts.map +1 -1
  209. package/dist/plugin/harness-agent-config.js +72 -118
  210. package/dist/plugin/harness-agent-config.js.map +1 -1
  211. package/dist/plugin/harness-chat-protocol.d.ts.map +1 -1
  212. package/dist/plugin/harness-chat-protocol.js +29 -6
  213. package/dist/plugin/harness-chat-protocol.js.map +1 -1
  214. package/dist/plugin/harness-plugin-identifiers.d.ts +5 -0
  215. package/dist/plugin/harness-plugin-identifiers.d.ts.map +1 -0
  216. package/dist/plugin/harness-plugin-identifiers.js +24 -0
  217. package/dist/plugin/harness-plugin-identifiers.js.map +1 -0
  218. package/dist/plugin/harness-plugin-runtime.d.ts +64 -0
  219. package/dist/plugin/harness-plugin-runtime.d.ts.map +1 -0
  220. package/dist/plugin/harness-plugin-runtime.js +125 -0
  221. package/dist/plugin/harness-plugin-runtime.js.map +1 -0
  222. package/dist/plugin/harness-plugin-scheduler.d.ts +16 -0
  223. package/dist/plugin/harness-plugin-scheduler.d.ts.map +1 -0
  224. package/dist/plugin/harness-plugin-scheduler.js +51 -0
  225. package/dist/plugin/harness-plugin-scheduler.js.map +1 -0
  226. package/dist/plugin/harness-requirement.d.ts +1 -1
  227. package/dist/plugin/harness-requirement.d.ts.map +1 -1
  228. package/dist/plugin/harness-requirement.js +2 -3
  229. package/dist/plugin/harness-requirement.js.map +1 -1
  230. package/dist/session/contracts.d.ts +9 -0
  231. package/dist/session/contracts.d.ts.map +1 -1
  232. package/dist/session/contracts.js.map +1 -1
  233. package/dist/session/fake-session-adapter.d.ts.map +1 -1
  234. package/dist/session/fake-session-adapter.js +1 -0
  235. package/dist/session/fake-session-adapter.js.map +1 -1
  236. package/dist/session/index.d.ts +1 -1
  237. package/dist/session/index.d.ts.map +1 -1
  238. package/dist/session/index.js.map +1 -1
  239. package/dist/session/opencode-session-adapter.d.ts +2 -1
  240. package/dist/session/opencode-session-adapter.d.ts.map +1 -1
  241. package/dist/session/opencode-session-adapter.js +7 -2
  242. package/dist/session/opencode-session-adapter.js.map +1 -1
  243. package/dist/session/opencode-session-prompts.d.ts +2 -10
  244. package/dist/session/opencode-session-prompts.d.ts.map +1 -1
  245. package/dist/session/opencode-session-prompts.js +7 -9
  246. package/dist/session/opencode-session-prompts.js.map +1 -1
  247. package/dist/store/run-event.d.ts +596 -7
  248. package/dist/store/run-event.d.ts.map +1 -1
  249. package/dist/tools/harness-research-tools.d.ts +22 -0
  250. package/dist/tools/harness-research-tools.d.ts.map +1 -1
  251. package/dist/tools/harness-research-tools.js +173 -64
  252. package/dist/tools/harness-research-tools.js.map +1 -1
  253. package/dist/tools/harness-tool-capabilities.d.ts +342 -0
  254. package/dist/tools/harness-tool-capabilities.d.ts.map +1 -0
  255. package/dist/tools/harness-tool-capabilities.js +170 -0
  256. package/dist/tools/harness-tool-capabilities.js.map +1 -0
  257. package/dist/verification/command-policy.d.ts.map +1 -1
  258. package/dist/verification/command-policy.js +2 -2
  259. package/dist/verification/command-policy.js.map +1 -1
  260. package/dist/workspace/collect-project-context.d.ts +3 -0
  261. package/dist/workspace/collect-project-context.d.ts.map +1 -0
  262. package/dist/workspace/collect-project-context.js +92 -0
  263. package/dist/workspace/collect-project-context.js.map +1 -0
  264. package/dist/workspace/index.d.ts +1 -0
  265. package/dist/workspace/index.d.ts.map +1 -1
  266. package/dist/workspace/index.js +1 -0
  267. package/dist/workspace/index.js.map +1 -1
  268. package/package.json +6 -1
package/README.md CHANGED
@@ -15,13 +15,15 @@ Harness 是确定性的控制平面,内部 Agent 是受约束的概率执行
15
15
  - 自然语言请求先进入内部 Intake Session,转换为严格 JSON intent,再由确定性的 RunController 执行对应操作。
16
16
  - `chat.message` 采用两阶段非阻塞流程:前台先返回包含真实 `runId` 和初始状态的 synthetic 受理结果,协调工作在后台运行;后台完成后再向同一父会话补发 Harness 内部完成消息,供 `harness` Agent 做最终总结。
17
17
  - 所有内部 Session 显式绑定到 Harness 自有 agent,并同时保留稳定兼容 ID 与英文显示名映射。
18
+ - **8 个 Agent 遵循版本化能力合同**(`HARNESS_TOOL_CAPABILITY_VERSION = "1.0.0"`),工具权限按角色白名单分配,输出必须符合版本化 JSON Schema。
18
19
  - Git 基线、脏工作区、外部修改、scope drift、merge conflict 与 verification evidence gap 全部由 Controller 的确定性状态机保护,不能被 Agent 自报绕过。
19
20
  - 验证命令通过结构化 argv、`shell: false`、工作区包含校验、嵌套解释器/包管理器绕过检查和审批元数据约束执行,不接受 Agent 自报"已通过"替代命令证据。
20
21
  - `resume` 会从 `.harness/runs/<run-id>/` 的快照与事件恢复上下文,不会重复已完成 Task 或丢失既有 evidence。
22
+ - **稳定 criterionId 和逐项证据追踪**:每个验收项(`criterionId`)从需求到 Task 覆盖、TaskReview、RunAcceptance 全程追踪,确保证据链完整。
21
23
 
22
24
  ## 正常主链
23
25
 
24
- 需求从自然语言开始,经过结构化、规划、执行、验证、验收,最终生成报告:
26
+ 需求从自然语言开始,经过结构化、两阶段规划、两阶段审查、执行、验证、Run 级验收,最终生成报告:
25
27
 
26
28
  ```
27
29
  用户自然语言
@@ -33,19 +35,22 @@ Harness 是确定性的控制平面,内部 Agent 是受约束的概率执行
33
35
  Nuwa (Intake) ── 结构化 HarnessIntent;start 携带 Requirement
34
36
  |
35
37
  v
36
- Fuxi (Planner) ── TaskGraph JSON
38
+ Fuxi (Planner) ── 两阶段规划:ContextPackage → PlanReview(含 TaskGraph
37
39
  |
38
40
  v
39
- Luban (Worker) ── allowedPaths 内实现任务
41
+ Zhulong (Verifier) ── 两阶段审查:PlanReview 逐 Task TaskReview
42
+ |
43
+ v
44
+ Luban (Worker) ── 按 executionCategory 路由,在 allowedPaths 内实现任务
40
45
  |
41
46
  v
42
47
  确定性验证 (Controller 执行命令)
43
48
  |
44
49
  v
45
- Zhulong (Verifier) ── 依据 evidence 判定
50
+ Run integration verification
46
51
  |
47
52
  v
48
- Yinglong (Acceptance) ── 检查 requirement/task/evidence 闭环
53
+ Yinglong (Acceptance) ── 所有 Task 和 Run 级验证通过后,执行一次性 RunAcceptance
49
54
  |
50
55
  v
51
56
  最终报告 (final-report.md)
@@ -59,32 +64,34 @@ Harness 是确定性的控制平面,内部 Agent 是受约束的概率执行
59
64
  失败证据
60
65
  |
61
66
  v
62
- Xingtian (Failure Analyzer) ── 分类根因,给出恢复建议
67
+ Xingtian (Failure Analyzer) ── 可先请求受控只读诊断探针,确认根因后分类
63
68
  |
64
- v (需要修复时)
65
- Jingwei (Repair Worker) ── 生成受限 Repair Task,不直接改代码
69
+ v (根因确认且需要修复时)
70
+ Jingwei (Repair Worker) ── 基于 rootCauseFingerprint 生成收窄 RepairTask
66
71
  |
67
72
  v
68
- Luban (Worker) ── 在受限范围内执行修复
73
+ Luban (Worker) ── 在受限 allowedPaths 内执行修复
69
74
  |
70
75
  v
71
- 重新验证 ──> Zhulong ──> Yinglong ──> 报告或再次归因
76
+ 重新验证 ──> Zhulong(逐 Task TaskReview)──> Yinglong(RunAcceptance)──> 报告或再次归因
72
77
  ```
73
78
 
74
- 每个 Task 拥有有限 retry budget。预算耗尽后进入 `PAUSED` 或 `FAILED`,不会无限循环。
79
+ 每个 Task 拥有有限 retry budget。预算耗尽后进入 `PAUSED` 或 `FAILED`,不会无限循环。RepairTask 包含 `version` 字段跟踪修复迭代,`rootCauseFingerprint` 用于去重。
75
80
 
76
81
  ## Agent 总览表
77
82
 
83
+ 8 个 Agent 均遵循版本化能力合同(`HARNESS_TOOL_CAPABILITY_VERSION = "1.0.0"`),工具权限按角色白名单分配,输出必须符合版本化 JSON Schema。
84
+
78
85
  | 英文名 | 中文名 | 稳定 ID | Session role | 写权限 | 主要产物 |
79
86
  |---|---|---|---|---|---|
80
87
  | Harness | 工程总控 | `harness` | primary | 无(只读呈现) | 用户交互摘要、运行状态展示 |
81
88
  | Nuwa | 女娲,需求塑形智能体 | `harness-intake` | `intake` | 只读 | HarnessIntent JSON;start Requirement |
82
- | Fuxi | 伏羲,规划编排智能体 | `harness-planner` | `planner` | 只读 | TaskGraph JSON |
89
+ | Fuxi | 伏羲,规划编排智能体 | `harness-planner` | `planner` | 只读 | ContextPackage → PlanReview(含 TaskGraph |
83
90
  | Luban | 鲁班,实现执行智能体 | `harness-worker` | `worker` | edit/write/patch/bash | WorkerOutput JSON、代码变更 |
84
- | Zhulong | 烛龙,独立验证智能体 | `harness-verifier` | `verifier` | 只读 | VerifierOutput JSON |
85
- | Yinglong | 应龙,最终验收智能体 | `harness-acceptance` | `acceptance` | 只读 | AcceptanceOutput JSON |
86
- | Xingtian | 刑天,失败归因智能体 | `harness-failure-analyzer` | `failure-analyzer` | 只读 | FailureAnalyzerOutput JSON |
87
- | Jingwei | 精卫,修复规划智能体 | `harness-repair-worker` | `repair-worker` | 只读 | RepairTask(结构化修复建议) |
91
+ | Zhulong | 烛龙,独立验证智能体 | `harness-verifier` | `verifier` | 只读 | PlanReview + 逐 Task TaskReview |
92
+ | Yinglong | 应龙,最终验收智能体 | `harness-acceptance` | `acceptance` | 只读 | RunAcceptance JSON(Run 级一次性验收) |
93
+ | Xingtian | 刑天,失败归因智能体 | `harness-failure-analyzer` | `failure-analyzer` | 只读 | FailureAnalyzerOutput JSON(可请求受控诊断探针) |
94
+ | Jingwei | 精卫,修复规划智能体 | `harness-repair-worker` | `repair-worker` | 只读 | RepairTask(根因确认后生成收窄修复建议) |
88
95
 
89
96
  只有 `Luban` 可以 edit/write/patch/bash。其他内部 Agent 全部只读。`Jingwei` 只生成 Repair Task,不直接修改代码。
90
97
 
@@ -116,20 +123,25 @@ Harness 是确定性的控制平面,内部 Agent 是受约束的概率执行
116
123
 
117
124
  - **稳定 ID**:`harness-planner`
118
125
  - **Session role**:`planner`
119
- - **定位**:根据 Requirement 生成可执行、可验证的 TaskGraph
120
- - **主要职责**:将 Requirement 拆解为有向无环 Task Graph,每个 Task 包含依赖、allowedPaths、verificationPlan、retryBudget 和 evidenceRefs。
126
+ - **定位**:根据 Requirement 生成可执行、可验证的 TaskGraph,采用两阶段规划。
127
+ - **主要职责**:
128
+ - **第一阶段**:生成 ContextPackage,收集仓库引用、外部引用、未解决问题和约束条件。
129
+ - **第二阶段**:基于 ContextPackage 生成 PlanReview,包含 TaskGraph、coverage(每个 criterionId 的任务覆盖映射)和 findings。
121
130
  - **输入**:Requirement JSON + runId。
122
- - **输出**:TaskGraph JSON
131
+ - **输出**:ContextPackage → PlanReview(含 TaskGraph JSON)。每个 Task 包含 `executionCategory`(quick/deep/visual-engineering/ultrabrain)、`allowedPaths`、`verificationPlan`、`retryBudget` 和 `acceptanceCriterionIds`。
123
132
  - **权限边界**:只读。可使用全部研究工具(Context7、grep.app、LSP),但不编辑文件、不执行 shell、不委派子 Agent。
124
- - **上下游关系**:上游是 Nuwa,下游是 LubanController 在接受 TaskGraph 前执行结构校验(ID 唯一、依赖存在、图无环、文件范围不冲突)。
133
+ - **上下游关系**:上游是 Nuwa,下游是 Zhulong(PlanReview)和 Luban(Task 执行)。Controller 在接受 PlanReview 前执行结构校验(ID 唯一、依赖存在、图无环、文件范围不冲突、criterionId 覆盖完整)。
125
134
 
126
135
  ### Luban(鲁班,实现执行智能体)
127
136
 
128
137
  - **稳定 ID**:`harness-worker`
129
138
  - **Session role**:`worker`
130
- - **定位**:唯一被允许修改代码的 Harness Agent
131
- - **主要职责**:在 Task 指定的 `allowedPaths` 范围内实现代码变更,输出结构化 WorkerOutput。
132
- - **输入**:Task JSON + Requirement JSON + allowedPaths。
139
+ - **定位**:唯一被允许修改代码的 Harness Agent,按 `executionCategory` 路由执行策略。
140
+ - **主要职责**:
141
+ - **executionCategory 路由**:根据 Task `executionCategory`(quick/deep/visual-engineering/ultrabrain)选择执行深度和验证强度。
142
+ - **allowedPaths 前置授权**:只能在 Task 指定的 `allowedPaths` 范围内实现代码变更。
143
+ - **事后对账**:Controller 验证实际 `changedPaths` 是否在 `allowedPaths` 内,超出范围触发暂停。
144
+ - **输入**:Task JSON + Requirement JSON + allowedPaths + executionCategory。
133
145
  - **输出**:WorkerOutput JSON(包含 summary、changedPaths、verificationCommands、evidence)。
134
146
  - **权限边界**:`edit/write/patch/bash` 全部允许,`permission.edit=allow`,`permission.bash=allow`。可使用全部研究工具。必须严格遵守 allowedPaths,不得请求父会话完整历史。
135
147
  - **上下游关系**:上游是 Fuxi(通过 Controller 分发 Task),下游是确定性验证和 Zhulong。修复链中,Jingwei 生成的 Repair Task 也交回 Luban 执行。
@@ -138,45 +150,56 @@ Harness 是确定性的控制平面,内部 Agent 是受约束的概率执行
138
150
 
139
151
  - **稳定 ID**:`harness-verifier`
140
152
  - **Session role**:`verifier`
141
- - **定位**:独立于 Luban 的验证判定者,只依据任务与实际 evidence 判断。
142
- - **主要职责**:审查 Controller 执行的确定性验证结果和 evidence,输出 passed、failed 或 evidence_gap 判定。
143
- - **输入**:Task JSON + Requirement JSON + Evidence 列表。
144
- - **输出**:VerifierOutput JSON(包含 status、summary、evidenceRefs、followUp)。
153
+ - **定位**:独立于 Luban 的验证判定者,执行两阶段审查:PlanReview 和逐 Task TaskReview。
154
+ - **主要职责**:
155
+ - **PlanReview 阶段**:审查 Fuxi PlanReview 输出,验证 coverage(每个 criterionId 是否被 Task 覆盖)、findings 和 reviewedTasks 的一致性。
156
+ - **逐 Task TaskReview 阶段**:对每个 Task 的 WorkerOutput 执行独立审查,输出 `spec-compliance`(规格符合性)和 `code-quality`(代码质量)两个维度的 verdict(pass/fail)和 findings。
157
+ - **输入**:PlanReview + Task JSON + WorkerOutput + Evidence 列表。
158
+ - **输出**:PlanReview 判定 + 逐 Task TaskReview JSON(包含 status、specCompliance、codeQuality、changedPaths、acceptanceCriterionIds)。
145
159
  - **权限边界**:只读。`task/edit/write/patch/bash` 全部禁用。可使用全部研究工具辅助审查,但不执行修改、不执行 shell。
146
- - **上下游关系**:上游是 Controller(传递 evidence),下游是 Yinglong(通过时)或 Xingtian(失败时)。Zhulong 不能修改代码。
160
+ - **上下游关系**:上游是 Controller(传递 evidence 和 WorkerOutput),下游是 Yinglong(所有 Task 通过后)或 Xingtian(失败时)。Zhulong 不能修改代码。
147
161
 
148
162
  ### Yinglong(应龙,最终验收智能体)
149
163
 
150
164
  - **稳定 ID**:`harness-acceptance`
151
165
  - **Session role**:`acceptance`
152
- - **定位**:检查需求、任务和 evidence 的闭环完整性。
153
- - **主要职责**:验证每个需求和验收项是否都有对应 evidence 覆盖,输出 accepted、failed 或 evidence_gap 判定。
154
- - **输入**:Task JSON + Requirement JSON + Evidence 列表。
155
- - **输出**:AcceptanceOutput JSON(包含 status、summary、evidenceIds)。
166
+ - **定位**:Run 级一次性最终验收,仅在所有 Task 的 TaskReview 和 Run 级 integration verification 全部通过后执行一次。
167
+ - **主要职责**:
168
+ - **Run 级验收**:检查整个 Run 的需求、验收项和 evidence 的闭环完整性,不是逐 Task 验收。
169
+ - **criterionId 逐项追踪**:为每个 `criterionId` 生成 `CriterionDecision`,记录 status(accepted/blocked/waived/unknown)、关联的 taskIdstaskReviewIds、evidenceIds、failureIds 和 changedPaths。
170
+ - **一次性执行**:Yinglong 在整个 Run 生命周期内只执行一次 RunAcceptance,不会重复调用。
171
+ - **输入**:Run 状态 + 所有 TaskReview + integration verification evidence + Requirement。
172
+ - **输出**:RunAcceptance JSON(包含 status、summary、criterionDecisions)。
156
173
  - **权限边界**:只读。`task/edit/write/patch/bash` 全部禁用。可使用 grep.app 和 LSP 工具辅助审查,不使用 Context7。
157
- - **上下游关系**:上游是 Zhulong(验证通过后进入验收),下游是 Controller(Controller 再执行确定性 Guard Condition 决定是否进入 COMPLETED)。Yinglong 不能修改代码。
174
+ - **上下游关系**:上游是 Zhulong(所有 TaskReview 通过后)和 Controller(integration verification 通过后),下游是 Controller(Controller 再执行确定性 Guard Condition 决定是否进入 COMPLETED)。Yinglong 不能修改代码。
158
175
 
159
176
  ### Xingtian(刑天,失败归因智能体)
160
177
 
161
178
  - **稳定 ID**:`harness-failure-analyzer`
162
179
  - **Session role**:`failure-analyzer`
163
- - **定位**:根据实际失败证据分类根因并给出结构化恢复建议。
164
- - **主要职责**:将失败分类为 `context-gap`、`requirement-ambiguity`、`dependency-blocked`、`implementation-defect`、`verification-environment`、`scope-drift`、`merge-conflict`、`model-failure`,并给出对应恢复动作。
165
- - **输入**:Task JSON + Requirement JSON + Failure + Evidence 列表。
166
- - **输出**:FailureAnalyzerOutput JSON(包含 action、category、summary、evidenceIds)。
167
- - **权限边界**:只读。`task/edit/write/patch/bash` 全部禁用。可使用全部研究工具辅助归因,但不执行修改。
168
- - **上下游关系**:上游是 Controller(传递失败证据),下游是 Jingwei(需要修复时)或 Controller(需要澄清、等待或终止时)。Xingtian 不能修改代码。
180
+ - **定位**:根据实际失败证据分类根因并给出结构化恢复建议,可先请求受控只读诊断探针确认根因。
181
+ - **主要职责**:
182
+ - **受控诊断探针**:在归因前可请求 Controller 执行受控的只读诊断命令(如日志查询、状态检查),收集额外证据确认根因,而不是仅依赖既有失败证据。
183
+ - **根因分类**:将失败分类为 `context-gap`、`requirement-ambiguity`、`dependency-blocked`、`implementation-defect`、`verification-environment`、`scope-drift`、`merge-conflict`、`model-failure`,并生成 `rootCauseFingerprint` 用于去重。
184
+ - **恢复建议**:给出对应恢复动作,只有确认根因后才允许 Jingwei 生成 RepairTask。
185
+ - **输入**:Task JSON + Requirement JSON + Failure + Evidence 列表 + 可选诊断探针结果。
186
+ - **输出**:FailureAnalyzerOutput JSON(包含 action、category、summary、rootCauseFingerprint、evidenceIds)。
187
+ - **权限边界**:只读。`task/edit/write/patch/bash` 全部禁用。可使用全部研究工具辅助归因,可请求受控诊断探针,但不执行修改。
188
+ - **上下游关系**:上游是 Controller(传递失败证据),下游是 Jingwei(需要修复时,且根因已确认)或 Controller(需要澄清、等待或终止时)。Xingtian 不能修改代码。
169
189
 
170
190
  ### Jingwei(精卫,修复规划智能体)
171
191
 
172
192
  - **稳定 ID**:`harness-repair-worker`
173
193
  - **Session role**:`repair-worker`
174
- - **定位**:根据失败证据输出结构化修复建议,只建议,不直接修改代码。
175
- - **主要职责**:分析失败原因和当前 Task 约束,生成受限的 RepairTask,包含修复步骤、影响范围和验证要求。
176
- - **输入**:Task JSON + Requirement JSON + Failure + Evidence 列表 + allowedPaths + retryBudget
177
- - **输出**:RepairWorkerOutput JSON(包含 status、summary、repairTask、evidenceIds)。
194
+ - **定位**:根据 Xingtian 确认的根因输出结构化修复建议,只建议,不直接修改代码。
195
+ - **主要职责**:
196
+ - **根因确认前置**:只有 Xingtian 完成根因分类并生成 `rootCauseFingerprint` 后,Jingwei 才能生成 RepairTask
197
+ - **收窄修复范围**:基于根因和失败证据生成受限的 RepairTask,包含 `allowedPaths`(比原 Task 更窄)、`minimalFailureSet`(最小失败验证集)和 `fullVerification`(完整验证集)。
198
+ - **版本化 RepairTask**:每个 RepairTask 有 `version` 字段,跟踪修复迭代。
199
+ - **输入**:Task JSON + Requirement JSON + Failure + Evidence 列表 + Xingtian 的 rootCauseFingerprint + allowedPaths + retryBudget。
200
+ - **输出**:RepairWorkerOutput JSON(包含 status、summary、repairTask、evidenceIds)。RepairTask 包含 `sourceTaskId`、`sourceFailureId`、`rootCauseFingerprint`、`repairEnabled`、`phaseEvidenceKinds`(red/green/refactor 三阶段)。
178
201
  - **权限边界**:只读。`task/edit/write/patch/bash` 全部禁用。可使用全部研究工具辅助分析,但明确禁止直接修改代码或调用写工具。
179
- - **上下游关系**:上游是 Xingtian(通过 Controller 传递失败上下文),下游是 Luban(Controller 将 RepairTask 交给 Luban 在受限范围内执行)。Jingwei 不直接修改代码。
202
+ - **上下游关系**:上游是 Xingtian(通过 Controller 传递失败上下文和根因确认),下游是 Luban(Controller 将 RepairTask 交给 Luban 在受限范围内执行)。Jingwei 不直接修改代码。
180
203
 
181
204
  ## 权限矩阵
182
205
 
@@ -192,20 +215,34 @@ Luban / harness-worker:
192
215
 
193
216
  `harness` primary 同样只读,不使用任何研究工具。
194
217
 
195
- ## Harness MCP 工具
218
+ ## Harness 研究工具
219
+
220
+ Harness 插件直接提供 7 个原生研究工具,OpenCode 内使用**不要求另配 MCP**。工具能力版本为 `HARNESS_TOOL_CAPABILITY_VERSION = "1.0.0"`,按角色白名单分配权限。
221
+
222
+ ### 插件原生工具(推荐)
196
223
 
197
- Harness 通过本地 stdio MCP Server 提供以下只读工程工具:
224
+ 插件加载后自动注册以下工具,工具名以 `harness_` 为前缀:
198
225
 
199
226
  - `harness_context7_resolve`、`harness_context7_query`:直连 Context7 官方 HTTP API。
200
227
  - `harness_grep_app_search`:通过自研 Streamable HTTP MCP 客户端调用 grep.app 官方 `searchGitHub`。
201
228
  - `harness_lsp_status`、`harness_lsp_diagnostics`、`harness_lsp_definition`、`harness_lsp_references`:通过自研 JSON-RPC stdio 客户端访问 JDT LS 和 TypeScript Language Server。
202
229
 
203
- OpenCode 以 `harness` 作为 MCP Server 名称,因此最终工具名保持 `harness_*`。工具使用权限按角色分配:
230
+ 工具使用权限按角色分配:
204
231
 
205
232
  - **全部研究工具**:Fuxi(Planner)、Luban(Worker)、Zhulong(Verifier)、Xingtian(Failure Analyzer)、Jingwei(Repair Worker)。
206
233
  - **grep.app + LSP**:Yinglong(Acceptance)。
207
234
  - **不使用研究工具**:Harness(primary)、Nuwa(Intake)。
208
235
 
236
+ ### stdio MCP(外部兼容入口)
237
+
238
+ 对于非 OpenCode 宿主或需要独立 MCP 进程的场景,Harness 提供 stdio MCP Server:
239
+
240
+ ```bash
241
+ npx -y harness-engineering-agent-mcp
242
+ ```
243
+
244
+ MCP Server 注册相同的 7 个工具(`context7_resolve`、`context7_query`、`grep_app_search`、`lsp_status`、`lsp_diagnostics`、`lsp_definition`、`lsp_references`),但**不实施角色白名单**,调用方自行负责权限控制。
245
+
209
246
  LSP 只提供只读查询,不实现重命名或代码写入。JDT LS 数据目录位于系统临时目录,并在 MCP Server 退出时清理。
210
247
 
211
248
  Context7 默认匿名访问,可通过环境变量 `CONTEXT7_API_KEY` 提升限额。JDT LS 命令可通过 `HARNESS_JDTLS_COMMAND` 覆盖。
@@ -284,14 +321,17 @@ Git 与工作区管理:
284
321
  - Run 执行期间可在同一或其他 Harness 会话中查询、暂停、取消、恢复或生成报告
285
322
 
286
323
  ### 内部 Agent 链
287
- 当前激活链:`Nuwa → Fuxi → Luban → deterministic verification → Zhulong → Yinglong`
324
+ 当前激活链:`Nuwa → Fuxi(ContextPackagePlanReview)→ Zhulong(PlanReview → 逐 Task TaskReview)→ Luban → deterministic verification → Run 级 integration verification → Yinglong(RunAcceptance)`
288
325
 
289
- 失败处理:`Xingtian` 归因 `Jingwei` 生成修复任务 → `Luban` 有限修复
326
+ 失败处理:`Xingtian(诊断探针 + 根因确认)→ Jingwei(收窄 RepairTask)→ Luban 有限修复`
290
327
 
291
328
  ### 只读工程工具
292
- - **Context7**: 直连官方 HTTP API
293
- - **grep.app**: 通过 Streamable HTTP MCP 客户端搜索
294
- - **LSP**: 自研 JSON-RPC 客户端访问 JDT LS 和 TypeScript LS
329
+ 插件直接提供 7 个原生研究工具(不需要另配 MCP):
330
+ - **Context7**: 直连官方 HTTP API(`harness_context7_resolve`、`harness_context7_query`)
331
+ - **grep.app**: 通过 Streamable HTTP MCP 客户端搜索(`harness_grep_app_search`)
332
+ - **LSP**: 自研 JSON-RPC 客户端访问 JDT LS 和 TypeScript LS(`harness_lsp_status`、`harness_lsp_diagnostics`、`harness_lsp_definition`、`harness_lsp_references`)
333
+
334
+ 工具能力版本为 `HARNESS_TOOL_CAPABILITY_VERSION = "1.0.0"`,按角色白名单分配权限。stdio MCP 仅为外部兼容入口。
295
335
 
296
336
  ### 确定性恢复
297
337
  - 快照与事件持久化到 `.harness/runs/<run-id>/`
@@ -303,12 +343,37 @@ Git 与工作区管理:
303
343
  - 独立 git worktree 执行
304
344
  - 冲突时保留诊断 worktree refs
305
345
 
346
+ ## 配置诊断
347
+
348
+ Harness 提供 `doctor` 命令用于诊断配置问题,支持人类可读和 JSON 两种输出格式:
349
+
350
+ ```bash
351
+ # 人类可读输出
352
+ harness-engineering-agent-doctor
353
+
354
+ # JSON 输出
355
+ harness-engineering-agent-doctor --json
356
+ ```
357
+
358
+ doctor 命令检查以下内容:
359
+
360
+ - **config**:OpenCode 配置文件是否存在
361
+ - **package**:Harness 包入口、doctor 子路径与 MCP bin 是否正确声明
362
+ - **compatibility**:OpenCode SDK 和 Plugin SDK 版本兼容性
363
+ - **plugin**:Harness 插件是否正确注册,Agent 名称是否冲突
364
+ - **agent**:将注册的 8 个 Harness Agent 是否正常
365
+ - **tool**:Harness 能力目录包含的工具数量(当前 7 个)
366
+ - **harness_mcp**:Harness MCP 自连接测试
367
+ - **mcp**:其他配置的 MCP Server 连接状态(单个第三方 MCP 失败由 doctor 隔离归因,不影响整体诊断)
368
+
369
+ 退出码:0 表示通过,1 表示存在问题。
370
+
306
371
  ## 快速开始
307
372
 
308
373
  ### 环境要求
309
374
 
310
- - Node.js >= 18
311
- - pnpm >= 8
375
+ - Node.js >= 24
376
+ - pnpm >= 11
312
377
  - Git
313
378
 
314
379
  ### 安装依赖
@@ -332,7 +397,7 @@ OpenCode 会自动加载 `~/.config/opencode/plugins/` 下的插件。开发环
332
397
  export { server } from "/path/to/harness-engineering-agent/dist/index.js"
333
398
  ```
334
399
 
335
- 修改插件或配置后需要重新执行 `pnpm build`,并重启 OpenCode
400
+ 修改插件或配置后需要重新执行 `pnpm build`,并**重启 OpenCode** 使变更生效。运行中的 OpenCode 会话不会热加载插件变更。
336
401
 
337
402
  ## 发布到 npm
338
403
 
@@ -374,7 +439,24 @@ pnpm publish:npm -- --token-auth
374
439
 
375
440
  ## OpenCode npm 引用
376
441
 
377
- 发布后在 `opencode.json` 中加载插件并注册 Harness MCP Server:
442
+ 发布后在 `opencode.json` 中加载插件。根据使用场景选择以下两种配置方式之一:
443
+
444
+ ### 方式一:插件-only(推荐)
445
+
446
+ 插件直接提供 `harness_*` 原生研究工具,不需要配置 MCP:
447
+
448
+ ```json
449
+ {
450
+ "$schema": "https://opencode.ai/config.json",
451
+ "plugin": ["harness-engineering-agent"]
452
+ }
453
+ ```
454
+
455
+ 这是最简单的配置方式。插件加载后自动注册 8 个 Harness Agent 和 7 个研究工具,按角色白名单控制权限。
456
+
457
+ ### 方式二:插件 + 可选 MCP(外部兼容)
458
+
459
+ 如果需要在 OpenCode 之外使用 Harness 研究工具(如独立脚本或其他 MCP 客户端),可以额外配置 stdio MCP:
378
460
 
379
461
  ```json
380
462
  {
@@ -391,13 +473,16 @@ pnpm publish:npm -- --token-auth
391
473
  }
392
474
  ```
393
475
 
394
- OpenCode 会通过包的 `./server` 导出加载专用插件入口;根入口仍保留完整 SDK 导出,供其它
395
- npm 调用方使用。
476
+ 注意:MCP 配置是可选的。插件已经提供了所有研究工具,MCP 仅为外部兼容入口。两者同时配置时,OpenCode 会同时加载插件工具和 MCP 工具,但插件工具已包含角色权限控制,MCP 工具不包含。
477
+
478
+ OpenCode 会通过包的 `./server` 导出加载专用插件入口;根入口仍保留完整 SDK 导出,供其它 npm 调用方使用。
396
479
 
397
480
  启动后 Harness 插件注册的用户可见 Agent 只有 `harness`,并在插件注入顺序中优先显示。
398
481
  内部 Agent 仍以 `harness-intake`、`harness-planner`、`harness-worker` 等稳定 ID 注册,
399
482
  供 Harness 控制平面按角色调度,但会标记为 `hidden`,不进入用户侧 Agent/Model 选择列表。
400
483
 
484
+ **重要**:修改插件或配置后需要重新执行 `pnpm build`,并**重启 OpenCode** 使变更生效。运行中的 OpenCode 会话不会热加载插件变更。
485
+
401
486
  ## 项目配置
402
487
 
403
488
  在目标项目创建 `.harness/config.yaml`:
@@ -552,7 +637,8 @@ harness-engineering-agent/
552
637
 
553
638
  - `.harness/runs/<run-id>/state.json` 使用原子替换写入,`events.jsonl` 追加持久化并带稳定幂等键。
554
639
  - `FilesystemRunStore` 在读取时重放快照后的事件,并拒绝未知 major schema version。
555
- - Evidence Ledger 记录 requirement、acceptance criteriontask、changed paths、verification command、输出摘要 digest 和 redaction metadata。
640
+ - Evidence Ledger 记录 requirement、acceptance criterion(`criterionId`)、task、changed paths、verification command、输出摘要 digest 和 redaction metadata。
641
+ - **稳定 criterionId 和逐项证据追踪**:每个 `criterionId` 从需求定义、PlanReview coverage、TaskReview、RunAcceptance criterionDecisions 全程追踪,确保证据链完整可审计。
556
642
  - Bug 修复与 `repairEnabled` Task 要求 RED/GREEN/REFACTOR 三阶段 evidence。Design Bundle 场景要求 requirement / acceptance / tasks / evidence / report 结构可追踪。
557
643
  - 最终报告汇总 `traceability`、`unfinishedTasks`、`verificationSummaries`、`failures`、`evidenceGaps` 和 `residualRisks`,不会因为 run 结束就抹平历史失败记录。
558
644
 
@@ -576,7 +662,7 @@ harness-engineering-agent/
576
662
  ```bash
577
663
  pnpm typecheck # 类型检查
578
664
  pnpm lint # Biome lint
579
- pnpm test # Vitest 测试(当前 176 个测试全部通过,单 worker 模式)
665
+ pnpm test # Vitest 测试(当前 303 个测试全部通过,47 个测试文件)
580
666
  pnpm build # 构建
581
667
  ```
582
668
 
@@ -0,0 +1,4 @@
1
+ export { buildCapabilityPermission, buildCapabilityPrompt, buildCapabilityToolConfig, buildRoleSystemPrompts, buildSessionToolAllowlist, findUnauthorizedSuggestedSignal, getHarnessAgentCapability, getHarnessSessionCapability, } from "./harness-agent-capability-builders.js";
2
+ export { HARNESS_AGENT_CAPABILITIES } from "./harness-agent-capability-data.js";
3
+ export { type BuiltinToolName, HARNESS_AGENT_CAPABILITY_VERSION, type HarnessAgentCapability, type HarnessCapabilityPermissionConfig, type HarnessCapabilitySignalIssue, type HarnessCapabilityToolConfig, type OutputContract, type PermissionValue, type SuggestionContract, } from "./harness-agent-capability-types.js";
4
+ //# sourceMappingURL=harness-agent-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capabilities.d.ts","sourceRoot":"","sources":["../../src/agent/harness-agent-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAC/E,OAAO,EACL,KAAK,eAAe,EACpB,gCAAgC,EAChC,KAAK,sBAAsB,EAC3B,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,qCAAqC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { buildCapabilityPermission, buildCapabilityPrompt, buildCapabilityToolConfig, buildRoleSystemPrompts, buildSessionToolAllowlist, findUnauthorizedSuggestedSignal, getHarnessAgentCapability, getHarnessSessionCapability, } from "./harness-agent-capability-builders.js";
2
+ export { HARNESS_AGENT_CAPABILITIES } from "./harness-agent-capability-data.js";
3
+ export { HARNESS_AGENT_CAPABILITY_VERSION, } from "./harness-agent-capability-types.js";
4
+ //# sourceMappingURL=harness-agent-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capabilities.js","sourceRoot":"","sources":["../../src/agent/harness-agent-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAC/E,OAAO,EAEL,gCAAgC,GAQjC,MAAM,qCAAqC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { type HarnessSessionRole } from "../session/contracts.js";
2
+ import type { HarnessAgentCapability, HarnessCapabilityPermissionConfig, HarnessCapabilitySignalIssue, HarnessCapabilityToolConfig } from "./harness-agent-capability-types.js";
3
+ export declare const buildCapabilityPrompt: (capability: HarnessAgentCapability) => string;
4
+ export declare const buildCapabilityPermission: (capability: HarnessAgentCapability) => HarnessCapabilityPermissionConfig;
5
+ export declare const buildCapabilityToolConfig: (capability: HarnessAgentCapability) => HarnessCapabilityToolConfig;
6
+ export declare const buildRoleSystemPrompts: () => Record<HarnessSessionRole, string>;
7
+ export declare const buildSessionToolAllowlist: (role: HarnessSessionRole) => HarnessCapabilityToolConfig;
8
+ export declare const findUnauthorizedSuggestedSignal: (role: string, value: unknown) => HarnessCapabilitySignalIssue | undefined;
9
+ export declare const getHarnessAgentCapability: (agentId: string) => HarnessAgentCapability;
10
+ export declare const getHarnessSessionCapability: (role: HarnessSessionRole) => HarnessAgentCapability;
11
+ //# sourceMappingURL=harness-agent-capability-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capability-builders.d.ts","sourceRoot":"","sources":["../../src/agent/harness-agent-capability-builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEvF,OAAO,KAAK,EACV,sBAAsB,EACtB,iCAAiC,EACjC,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,qCAAqC,CAAA;AAE5C,eAAO,MAAM,qBAAqB,GAAI,YAAY,sBAAsB,KAAG,MACxC,CAAA;AAEnC,eAAO,MAAM,yBAAyB,GACpC,YAAY,sBAAsB,KACjC,iCAGD,CAAA;AAEF,eAAO,MAAM,yBAAyB,GACpC,YAAY,sBAAsB,KACjC,2BAKF,CAAA;AAED,eAAO,MAAM,sBAAsB,QAAO,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAsBzE,CAAA;AAEF,eAAO,MAAM,yBAAyB,GACpC,MAAM,kBAAkB,KACvB,2BAIF,CAAA;AAED,eAAO,MAAM,+BAA+B,GAC1C,MAAM,MAAM,EACZ,OAAO,OAAO,KACb,4BAA4B,GAAG,SAYjC,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,KAAG,sBAI3D,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAI,MAAM,kBAAkB,KAAG,sBAItE,CAAA"}
@@ -0,0 +1,57 @@
1
+ import { HARNESS_SESSION_ROLE } from "../session/contracts.js";
2
+ import { HARNESS_AGENT_CAPABILITIES } from "./harness-agent-capability-data.js";
3
+ export const buildCapabilityPrompt = (capability) => capability.promptLines.join("\n");
4
+ export const buildCapabilityPermission = (capability) => ({
5
+ edit: capability.permission.edit,
6
+ bash: capability.permission.bash,
7
+ });
8
+ export const buildCapabilityToolConfig = (capability) => {
9
+ const tools = {};
10
+ for (const [name, enabled] of Object.entries(capability.builtins))
11
+ tools[name] = enabled;
12
+ for (const name of capability.pluginTools)
13
+ tools[name] = true;
14
+ return tools;
15
+ };
16
+ export const buildRoleSystemPrompts = () => ({
17
+ [HARNESS_SESSION_ROLE.intake]: buildCapabilityPrompt(getHarnessSessionCapability(HARNESS_SESSION_ROLE.intake)),
18
+ [HARNESS_SESSION_ROLE.planner]: buildCapabilityPrompt(getHarnessSessionCapability(HARNESS_SESSION_ROLE.planner)),
19
+ [HARNESS_SESSION_ROLE.worker]: buildCapabilityPrompt(getHarnessSessionCapability(HARNESS_SESSION_ROLE.worker)),
20
+ [HARNESS_SESSION_ROLE.verifier]: buildCapabilityPrompt(getHarnessSessionCapability(HARNESS_SESSION_ROLE.verifier)),
21
+ [HARNESS_SESSION_ROLE.acceptance]: buildCapabilityPrompt(getHarnessSessionCapability(HARNESS_SESSION_ROLE.acceptance)),
22
+ [HARNESS_SESSION_ROLE.failureAnalyzer]: buildCapabilityPrompt(getHarnessSessionCapability(HARNESS_SESSION_ROLE.failureAnalyzer)),
23
+ [HARNESS_SESSION_ROLE.repairWorker]: buildCapabilityPrompt(getHarnessSessionCapability(HARNESS_SESSION_ROLE.repairWorker)),
24
+ });
25
+ export const buildSessionToolAllowlist = (role) => {
26
+ const capability = HARNESS_AGENT_CAPABILITIES.find((item) => item.sessionRole === role);
27
+ if (capability === undefined)
28
+ throw new TypeError(`unknown Harness session capability: ${role}`);
29
+ return buildCapabilityToolConfig(capability);
30
+ };
31
+ export const findUnauthorizedSuggestedSignal = (role, value) => {
32
+ const capability = HARNESS_AGENT_CAPABILITIES.find((item) => item.sessionRole === role);
33
+ if (capability === undefined || typeof value !== "object" || value === null)
34
+ return undefined;
35
+ const status = Reflect.get(value, "status");
36
+ if (typeof status === "string" && !capability.suggestions.status.includes(status)) {
37
+ return { field: "status", value: status, allowedValues: capability.suggestions.status };
38
+ }
39
+ const action = Reflect.get(value, "action");
40
+ if (typeof action === "string" && !capability.suggestions.action.includes(action)) {
41
+ return { field: "action", value: action, allowedValues: capability.suggestions.action };
42
+ }
43
+ return undefined;
44
+ };
45
+ export const getHarnessAgentCapability = (agentId) => {
46
+ const capability = HARNESS_AGENT_CAPABILITIES.find((item) => item.agentId === agentId);
47
+ if (capability === undefined)
48
+ throw new TypeError(`unknown Harness agent capability: ${agentId}`);
49
+ return capability;
50
+ };
51
+ export const getHarnessSessionCapability = (role) => {
52
+ const capability = HARNESS_AGENT_CAPABILITIES.find((item) => item.sessionRole === role);
53
+ if (capability === undefined)
54
+ throw new TypeError(`unknown Harness session capability: ${role}`);
55
+ return capability;
56
+ };
57
+ //# sourceMappingURL=harness-agent-capability-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capability-builders.js","sourceRoot":"","sources":["../../src/agent/harness-agent-capability-builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type HarnessAgentCapability } from "./harness-agent-capability-types.js";
2
+ export declare const HARNESS_AGENT_CAPABILITIES: readonly HarnessAgentCapability[];
3
+ //# sourceMappingURL=harness-agent-capability-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capability-data.d.ts","sourceRoot":"","sources":["../../src/agent/harness-agent-capability-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,qCAAqC,CAAA;AAwB5C,eAAO,MAAM,0BAA0B,EAAE,SAAS,sBAAsB,EACb,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { HARNESS_AGENT_CAPABILITY_VERSION, } from "./harness-agent-capability-types.js";
2
+ import { HARNESS_ROLE_CAPABILITY_DIRECTORY } from "./harness-role-capability-directory-data.js";
3
+ const capability = (input) => ({
4
+ version: HARNESS_AGENT_CAPABILITY_VERSION,
5
+ agentId: input.agentId,
6
+ displayName: input.displayName,
7
+ description: input.description,
8
+ mode: input.mode,
9
+ hidden: input.hidden,
10
+ profileKey: input.profileKey,
11
+ ...(input.sessionRole === undefined ? {} : { sessionRole: input.sessionRole }),
12
+ responsibilities: input.responsibilities,
13
+ inputContext: input.inputContext,
14
+ builtins: input.builtins,
15
+ permission: input.permission,
16
+ outputContract: input.outputContract,
17
+ budget: input.budget,
18
+ suggestions: input.suggestions,
19
+ promptLines: input.promptLines,
20
+ pluginTools: input.pluginTools,
21
+ });
22
+ export const HARNESS_AGENT_CAPABILITIES = HARNESS_ROLE_CAPABILITY_DIRECTORY.entries.map(capability);
23
+ //# sourceMappingURL=harness-agent-capability-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capability-data.js","sourceRoot":"","sources":["../../src/agent/harness-agent-capability-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,GAEjC,MAAM,qCAAqC,CAAA;AAE5C,OAAO,EAAE,iCAAiC,EAAE,MAAM,6CAA6C,CAAA;AAE/F,MAAM,UAAU,GAAG,CAAC,KAA0C,EAA0B,EAAE,CAAC,CAAC;IAC1F,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,WAAW,EAAE,KAAK,CAAC,WAAW;IAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;IAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9E,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;IACxC,YAAY,EAAE,KAAK,CAAC,YAAY;IAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;IACpC,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,WAAW,EAAE,KAAK,CAAC,WAAW;IAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;IAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;CAC/B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GACrC,iCAAiC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA"}
@@ -0,0 +1,50 @@
1
+ import type { HarnessAgentId, HarnessSessionRole } from "../session/contracts.js";
2
+ export declare const HARNESS_AGENT_CAPABILITY_VERSION: "1.0.0";
3
+ declare const BUILTIN_TOOL_NAMES: readonly ["task", "edit", "bash", "write", "patch"];
4
+ export type BuiltinToolName = (typeof BUILTIN_TOOL_NAMES)[number];
5
+ export type PermissionValue = "allow" | "deny";
6
+ export type OutputContract = {
7
+ readonly schemaVersion: "1.0.0";
8
+ readonly type: string;
9
+ };
10
+ export type SuggestionContract = {
11
+ readonly status: readonly string[];
12
+ readonly action: readonly string[];
13
+ };
14
+ export type HarnessAgentCapability = {
15
+ readonly version: typeof HARNESS_AGENT_CAPABILITY_VERSION;
16
+ readonly agentId: HarnessAgentId;
17
+ readonly displayName: string;
18
+ readonly description: string;
19
+ readonly mode: "primary" | "all";
20
+ readonly hidden: boolean;
21
+ readonly profileKey: "harness" | "planner" | "worker" | "verifier" | "acceptance" | "failureAnalyzer";
22
+ readonly sessionRole?: HarnessSessionRole;
23
+ readonly responsibilities: readonly string[];
24
+ readonly inputContext: readonly string[];
25
+ readonly builtins: Readonly<Record<BuiltinToolName, boolean>>;
26
+ readonly permission: {
27
+ readonly edit: PermissionValue;
28
+ readonly bash: PermissionValue;
29
+ };
30
+ readonly outputContract: OutputContract | null;
31
+ readonly budget: {
32
+ readonly summary: string;
33
+ readonly dimensions: readonly string[];
34
+ };
35
+ readonly suggestions: SuggestionContract;
36
+ readonly promptLines: readonly string[];
37
+ readonly pluginTools: readonly string[];
38
+ };
39
+ export type HarnessCapabilitySignalIssue = {
40
+ readonly field: "status" | "action";
41
+ readonly value: string;
42
+ readonly allowedValues: readonly string[];
43
+ };
44
+ export type HarnessCapabilityToolConfig = Readonly<Record<string, boolean>>;
45
+ export type HarnessCapabilityPermissionConfig = {
46
+ readonly edit: PermissionValue;
47
+ readonly bash: PermissionValue;
48
+ };
49
+ export {};
50
+ //# sourceMappingURL=harness-agent-capability-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capability-types.d.ts","sourceRoot":"","sources":["../../src/agent/harness-agent-capability-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjF,eAAO,MAAM,gCAAgC,EAAG,OAAgB,CAAA;AAEhE,QAAA,MAAM,kBAAkB,qDAAsD,CAAA;AAE9E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AACjE,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAA;AAC9C,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AACvF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,gCAAgC,CAAA;IACzD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,UAAU,EACf,SAAS,GACT,SAAS,GACT,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,iBAAiB,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IACzC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;IAC7D,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;KAAE,CAAA;IACvF,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;IACrF,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC3E,MAAM,MAAM,iCAAiC,GAAG;IAC9C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAC/B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const HARNESS_AGENT_CAPABILITY_VERSION = "1.0.0";
2
+ const BUILTIN_TOOL_NAMES = ["task", "edit", "bash", "write", "patch"];
3
+ //# sourceMappingURL=harness-agent-capability-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-agent-capability-types.js","sourceRoot":"","sources":["../../src/agent/harness-agent-capability-types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gCAAgC,GAAG,OAAgB,CAAA;AAEhE,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type HarnessRoleCapabilityDirectory } from "./harness-role-capability-directory.js";
2
+ export declare const HARNESS_ROLE_CAPABILITY_DIRECTORY: HarnessRoleCapabilityDirectory;
3
+ //# sourceMappingURL=harness-role-capability-directory-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-role-capability-directory-data.d.ts","sourceRoot":"","sources":["../../src/agent/harness-role-capability-directory-data.ts"],"names":[],"mappings":"AAmBA,OAAO,EAML,KAAK,8BAA8B,EAGpC,MAAM,wCAAwC,CAAA;AAO/C,eAAO,MAAM,iCAAiC,gCAgNH,CAAA"}