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.
- package/README.md +146 -60
- package/dist/agent/harness-agent-capabilities.d.ts +4 -0
- package/dist/agent/harness-agent-capabilities.d.ts.map +1 -0
- package/dist/agent/harness-agent-capabilities.js +4 -0
- package/dist/agent/harness-agent-capabilities.js.map +1 -0
- package/dist/agent/harness-agent-capability-builders.d.ts +11 -0
- package/dist/agent/harness-agent-capability-builders.d.ts.map +1 -0
- package/dist/agent/harness-agent-capability-builders.js +57 -0
- package/dist/agent/harness-agent-capability-builders.js.map +1 -0
- package/dist/agent/harness-agent-capability-data.d.ts +3 -0
- package/dist/agent/harness-agent-capability-data.d.ts.map +1 -0
- package/dist/agent/harness-agent-capability-data.js +23 -0
- package/dist/agent/harness-agent-capability-data.js.map +1 -0
- package/dist/agent/harness-agent-capability-types.d.ts +50 -0
- package/dist/agent/harness-agent-capability-types.d.ts.map +1 -0
- package/dist/agent/harness-agent-capability-types.js +3 -0
- package/dist/agent/harness-agent-capability-types.js.map +1 -0
- package/dist/agent/harness-role-capability-directory-data.d.ts +3 -0
- package/dist/agent/harness-role-capability-directory-data.d.ts.map +1 -0
- package/dist/agent/harness-role-capability-directory-data.js +208 -0
- package/dist/agent/harness-role-capability-directory-data.js.map +1 -0
- package/dist/agent/harness-role-capability-directory.d.ts +43 -0
- package/dist/agent/harness-role-capability-directory.d.ts.map +1 -0
- package/dist/agent/harness-role-capability-directory.js +57 -0
- package/dist/agent/harness-role-capability-directory.js.map +1 -0
- package/dist/agent/index.d.ts +7 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +6 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/config/config-defaults.d.ts +22 -0
- package/dist/config/config-defaults.d.ts.map +1 -1
- package/dist/config/config-defaults.js +22 -0
- package/dist/config/config-defaults.js.map +1 -1
- package/dist/config/config-merge.d.ts.map +1 -1
- package/dist/config/config-merge.js +30 -0
- package/dist/config/config-merge.js.map +1 -1
- package/dist/config/config-schema.d.ts +59 -0
- package/dist/config/config-schema.d.ts.map +1 -1
- package/dist/config/config-schema.js +18 -1
- package/dist/config/config-schema.js.map +1 -1
- package/dist/config/config-types.d.ts +5 -1
- package/dist/config/config-types.d.ts.map +1 -1
- package/dist/config/harness-config.d.ts +2 -1
- package/dist/config/harness-config.d.ts.map +1 -1
- package/dist/config/harness-config.js +1 -0
- package/dist/config/harness-config.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/opencode-compatibility.d.ts +37 -0
- package/dist/config/opencode-compatibility.d.ts.map +1 -0
- package/dist/config/opencode-compatibility.js +99 -0
- package/dist/config/opencode-compatibility.js.map +1 -0
- package/dist/controller/agent-output.d.ts +1 -1
- package/dist/controller/agent-output.d.ts.map +1 -1
- package/dist/controller/agent-output.js +18 -1
- package/dist/controller/agent-output.js.map +1 -1
- package/dist/controller/agent-session-types.d.ts +56 -0
- package/dist/controller/agent-session-types.d.ts.map +1 -0
- package/dist/controller/agent-session-types.js +2 -0
- package/dist/controller/agent-session-types.js.map +1 -0
- package/dist/controller/agent-session-utils.d.ts +52 -0
- package/dist/controller/agent-session-utils.d.ts.map +1 -0
- package/dist/controller/agent-session-utils.js +118 -0
- package/dist/controller/agent-session-utils.js.map +1 -0
- package/dist/controller/agent-session.d.ts +2 -55
- package/dist/controller/agent-session.d.ts.map +1 -1
- package/dist/controller/agent-session.js +82 -129
- package/dist/controller/agent-session.js.map +1 -1
- package/dist/controller/contracts.d.ts +3 -2
- package/dist/controller/contracts.d.ts.map +1 -1
- package/dist/controller/contracts.js.map +1 -1
- package/dist/controller/evidence-factory.js +7 -1
- package/dist/controller/evidence-factory.js.map +1 -1
- package/dist/controller/failure-analysis.d.ts +12 -0
- package/dist/controller/failure-analysis.d.ts.map +1 -1
- package/dist/controller/failure-analysis.js +41 -0
- package/dist/controller/failure-analysis.js.map +1 -1
- package/dist/controller/failure-analyzer-schemas.d.ts +87 -0
- package/dist/controller/failure-analyzer-schemas.d.ts.map +1 -0
- package/dist/controller/failure-analyzer-schemas.js +117 -0
- package/dist/controller/failure-analyzer-schemas.js.map +1 -0
- package/dist/controller/graph-validator.js +18 -4
- package/dist/controller/graph-validator.js.map +1 -1
- package/dist/controller/index.d.ts +7 -2
- package/dist/controller/index.d.ts.map +1 -1
- package/dist/controller/index.js +4 -1
- package/dist/controller/index.js.map +1 -1
- package/dist/controller/repair-loop.d.ts +1 -1
- package/dist/controller/repair-loop.d.ts.map +1 -1
- package/dist/controller/repair-loop.js +28 -0
- package/dist/controller/repair-loop.js.map +1 -1
- package/dist/controller/report-factory.d.ts.map +1 -1
- package/dist/controller/report-factory.js +49 -21
- package/dist/controller/report-factory.js.map +1 -1
- package/dist/controller/role-prompts.d.ts +2 -1
- package/dist/controller/role-prompts.d.ts.map +1 -1
- package/dist/controller/role-prompts.js +3 -9
- package/dist/controller/role-prompts.js.map +1 -1
- package/dist/controller/run-acceptance.d.ts +17 -0
- package/dist/controller/run-acceptance.d.ts.map +1 -0
- package/dist/controller/run-acceptance.js +179 -0
- package/dist/controller/run-acceptance.js.map +1 -0
- package/dist/controller/run-controller.d.ts.map +1 -1
- package/dist/controller/run-controller.js +244 -22
- package/dist/controller/run-controller.js.map +1 -1
- package/dist/controller/session-tool-authorization.d.ts +14 -0
- package/dist/controller/session-tool-authorization.d.ts.map +1 -0
- package/dist/controller/session-tool-authorization.js +88 -0
- package/dist/controller/session-tool-authorization.js.map +1 -0
- package/dist/controller/task-agent-output.d.ts +13 -2
- package/dist/controller/task-agent-output.d.ts.map +1 -1
- package/dist/controller/task-agent-output.js +58 -1
- package/dist/controller/task-agent-output.js.map +1 -1
- package/dist/controller/task-agent-schemas.d.ts +745 -26
- package/dist/controller/task-agent-schemas.d.ts.map +1 -1
- package/dist/controller/task-agent-schemas.js +70 -21
- package/dist/controller/task-agent-schemas.js.map +1 -1
- package/dist/controller/task-executor.d.ts +1 -1
- package/dist/controller/task-executor.d.ts.map +1 -1
- package/dist/controller/task-executor.js +269 -105
- package/dist/controller/task-executor.js.map +1 -1
- package/dist/doctor/cli.d.ts +3 -0
- package/dist/doctor/cli.d.ts.map +1 -0
- package/dist/doctor/cli.js +10 -0
- package/dist/doctor/cli.js.map +1 -0
- package/dist/doctor/index.d.ts +7 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +16 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/local-mcp-probe.d.ts +3 -0
- package/dist/doctor/local-mcp-probe.d.ts.map +1 -0
- package/dist/doctor/local-mcp-probe.js +151 -0
- package/dist/doctor/local-mcp-probe.js.map +1 -0
- package/dist/doctor/opencode-config.d.ts +43 -0
- package/dist/doctor/opencode-config.d.ts.map +1 -0
- package/dist/doctor/opencode-config.js +103 -0
- package/dist/doctor/opencode-config.js.map +1 -0
- package/dist/doctor/run-harness-doctor.d.ts +23 -0
- package/dist/doctor/run-harness-doctor.d.ts.map +1 -0
- package/dist/doctor/run-harness-doctor.js +176 -0
- package/dist/doctor/run-harness-doctor.js.map +1 -0
- package/dist/doctor/types.d.ts +69 -0
- package/dist/doctor/types.d.ts.map +1 -0
- package/dist/doctor/types.js +8 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/domain/acceptance-criteria.d.ts +9 -0
- package/dist/domain/acceptance-criteria.d.ts.map +1 -0
- package/dist/domain/acceptance-criteria.js +38 -0
- package/dist/domain/acceptance-criteria.js.map +1 -0
- package/dist/domain/context-package.d.ts +43 -0
- package/dist/domain/context-package.d.ts.map +1 -0
- package/dist/domain/context-package.js +54 -0
- package/dist/domain/context-package.js.map +1 -0
- package/dist/domain/evidence.d.ts +1 -0
- package/dist/domain/evidence.d.ts.map +1 -1
- package/dist/domain/evidence.js +1 -2
- package/dist/domain/evidence.js.map +1 -1
- package/dist/domain/index.d.ts +14 -4
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +7 -2
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/plan-artifacts.d.ts +170 -0
- package/dist/domain/plan-artifacts.d.ts.map +1 -0
- package/dist/domain/plan-artifacts.js +187 -0
- package/dist/domain/plan-artifacts.js.map +1 -0
- package/dist/domain/project-context.d.ts +10 -0
- package/dist/domain/project-context.d.ts.map +1 -0
- package/dist/domain/project-context.js +11 -0
- package/dist/domain/project-context.js.map +1 -0
- package/dist/domain/report.d.ts +608 -11
- package/dist/domain/report.d.ts.map +1 -1
- package/dist/domain/report.js +6 -4
- package/dist/domain/report.js.map +1 -1
- package/dist/domain/requirement.d.ts +22 -2
- package/dist/domain/requirement.d.ts.map +1 -1
- package/dist/domain/requirement.js +26 -3
- package/dist/domain/requirement.js.map +1 -1
- package/dist/domain/run-acceptance.d.ts +33 -0
- package/dist/domain/run-acceptance.d.ts.map +1 -0
- package/dist/domain/run-acceptance.js +29 -0
- package/dist/domain/run-acceptance.js.map +1 -0
- package/dist/domain/run.d.ts +596 -7
- package/dist/domain/run.d.ts.map +1 -1
- package/dist/domain/run.js +58 -0
- package/dist/domain/run.js.map +1 -1
- package/dist/domain/shared.d.ts +40 -2
- package/dist/domain/shared.d.ts.map +1 -1
- package/dist/domain/shared.js +26 -0
- package/dist/domain/shared.js.map +1 -1
- package/dist/domain/task-review.d.ts +57 -0
- package/dist/domain/task-review.d.ts.map +1 -0
- package/dist/domain/task-review.js +63 -0
- package/dist/domain/task-review.js.map +1 -0
- package/dist/domain/task.d.ts +24 -2
- package/dist/domain/task.d.ts.map +1 -1
- package/dist/domain/task.js +20 -12
- package/dist/domain/task.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin/create-harness-plugin.d.ts +4 -28
- package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
- package/dist/plugin/create-harness-plugin.js +33 -166
- package/dist/plugin/create-harness-plugin.js.map +1 -1
- package/dist/plugin/harness-agent-config.d.ts +7 -0
- package/dist/plugin/harness-agent-config.d.ts.map +1 -1
- package/dist/plugin/harness-agent-config.js +72 -118
- package/dist/plugin/harness-agent-config.js.map +1 -1
- package/dist/plugin/harness-chat-protocol.d.ts.map +1 -1
- package/dist/plugin/harness-chat-protocol.js +29 -6
- package/dist/plugin/harness-chat-protocol.js.map +1 -1
- package/dist/plugin/harness-plugin-identifiers.d.ts +5 -0
- package/dist/plugin/harness-plugin-identifiers.d.ts.map +1 -0
- package/dist/plugin/harness-plugin-identifiers.js +24 -0
- package/dist/plugin/harness-plugin-identifiers.js.map +1 -0
- package/dist/plugin/harness-plugin-runtime.d.ts +64 -0
- package/dist/plugin/harness-plugin-runtime.d.ts.map +1 -0
- package/dist/plugin/harness-plugin-runtime.js +125 -0
- package/dist/plugin/harness-plugin-runtime.js.map +1 -0
- package/dist/plugin/harness-plugin-scheduler.d.ts +16 -0
- package/dist/plugin/harness-plugin-scheduler.d.ts.map +1 -0
- package/dist/plugin/harness-plugin-scheduler.js +51 -0
- package/dist/plugin/harness-plugin-scheduler.js.map +1 -0
- package/dist/plugin/harness-requirement.d.ts +1 -1
- package/dist/plugin/harness-requirement.d.ts.map +1 -1
- package/dist/plugin/harness-requirement.js +2 -3
- package/dist/plugin/harness-requirement.js.map +1 -1
- package/dist/session/contracts.d.ts +9 -0
- package/dist/session/contracts.d.ts.map +1 -1
- package/dist/session/contracts.js.map +1 -1
- package/dist/session/fake-session-adapter.d.ts.map +1 -1
- package/dist/session/fake-session-adapter.js +1 -0
- package/dist/session/fake-session-adapter.js.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/opencode-session-adapter.d.ts +2 -1
- package/dist/session/opencode-session-adapter.d.ts.map +1 -1
- package/dist/session/opencode-session-adapter.js +7 -2
- package/dist/session/opencode-session-adapter.js.map +1 -1
- package/dist/session/opencode-session-prompts.d.ts +2 -10
- package/dist/session/opencode-session-prompts.d.ts.map +1 -1
- package/dist/session/opencode-session-prompts.js +7 -9
- package/dist/session/opencode-session-prompts.js.map +1 -1
- package/dist/store/run-event.d.ts +596 -7
- package/dist/store/run-event.d.ts.map +1 -1
- package/dist/tools/harness-research-tools.d.ts +22 -0
- package/dist/tools/harness-research-tools.d.ts.map +1 -1
- package/dist/tools/harness-research-tools.js +173 -64
- package/dist/tools/harness-research-tools.js.map +1 -1
- package/dist/tools/harness-tool-capabilities.d.ts +342 -0
- package/dist/tools/harness-tool-capabilities.d.ts.map +1 -0
- package/dist/tools/harness-tool-capabilities.js +170 -0
- package/dist/tools/harness-tool-capabilities.js.map +1 -0
- package/dist/verification/command-policy.d.ts.map +1 -1
- package/dist/verification/command-policy.js +2 -2
- package/dist/verification/command-policy.js.map +1 -1
- package/dist/workspace/collect-project-context.d.ts +3 -0
- package/dist/workspace/collect-project-context.d.ts.map +1 -0
- package/dist/workspace/collect-project-context.js +92 -0
- package/dist/workspace/collect-project-context.js.map +1 -0
- package/dist/workspace/index.d.ts +1 -0
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -0
- package/dist/workspace/index.js.map +1 -1
- 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
|
|
38
|
+
Fuxi (Planner) ── 两阶段规划:ContextPackage → PlanReview(含 TaskGraph)
|
|
37
39
|
|
|
|
38
40
|
v
|
|
39
|
-
|
|
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
|
-
|
|
50
|
+
Run 级 integration verification
|
|
46
51
|
|
|
|
47
52
|
v
|
|
48
|
-
Yinglong (Acceptance) ──
|
|
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) ──
|
|
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
|
|
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
|
|
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` | 只读 |
|
|
85
|
-
| Yinglong | 应龙,最终验收智能体 | `harness-acceptance` | `acceptance` | 只读 |
|
|
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
|
-
-
|
|
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,下游是 Luban
|
|
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
|
-
-
|
|
132
|
-
-
|
|
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
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
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
|
|
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
|
-
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
166
|
+
- **定位**:Run 级一次性最终验收,仅在所有 Task 的 TaskReview 和 Run 级 integration verification 全部通过后执行一次。
|
|
167
|
+
- **主要职责**:
|
|
168
|
+
- **Run 级验收**:检查整个 Run 的需求、验收项和 evidence 的闭环完整性,不是逐 Task 验收。
|
|
169
|
+
- **criterionId 逐项追踪**:为每个 `criterionId` 生成 `CriterionDecision`,记录 status(accepted/blocked/waived/unknown)、关联的 taskIds、taskReviewIds、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
|
|
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
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
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
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
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
|
|
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
|
|
218
|
+
## Harness 研究工具
|
|
219
|
+
|
|
220
|
+
Harness 插件直接提供 7 个原生研究工具,OpenCode 内使用**不要求另配 MCP**。工具能力版本为 `HARNESS_TOOL_CAPABILITY_VERSION = "1.0.0"`,按角色白名单分配权限。
|
|
221
|
+
|
|
222
|
+
### 插件原生工具(推荐)
|
|
196
223
|
|
|
197
|
-
|
|
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
|
-
|
|
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 →
|
|
324
|
+
当前激活链:`Nuwa → Fuxi(ContextPackage → PlanReview)→ Zhulong(PlanReview → 逐 Task TaskReview)→ Luban → deterministic verification → Run 级 integration verification → Yinglong(RunAcceptance)`
|
|
288
325
|
|
|
289
|
-
失败处理:`Xingtian
|
|
326
|
+
失败处理:`Xingtian(诊断探针 + 根因确认)→ Jingwei(收窄 RepairTask)→ Luban 有限修复`
|
|
290
327
|
|
|
291
328
|
### 只读工程工具
|
|
292
|
-
|
|
293
|
-
- **
|
|
294
|
-
- **
|
|
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 >=
|
|
311
|
-
- pnpm >=
|
|
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
|
|
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`
|
|
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
|
|
395
|
-
|
|
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 criterion
|
|
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 测试(当前
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|