harness-engineering-agent 0.1.7 → 0.1.9

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 (276) hide show
  1. package/README.md +161 -62
  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 -40
  67. package/dist/controller/agent-session.d.ts.map +1 -1
  68. package/dist/controller/agent-session.js +126 -128
  69. package/dist/controller/agent-session.js.map +1 -1
  70. package/dist/controller/contracts.d.ts +4 -2
  71. package/dist/controller/contracts.d.ts.map +1 -1
  72. package/dist/controller/contracts.js.map +1 -1
  73. package/dist/controller/errors.d.ts +5 -0
  74. package/dist/controller/errors.d.ts.map +1 -1
  75. package/dist/controller/errors.js +8 -0
  76. package/dist/controller/errors.js.map +1 -1
  77. package/dist/controller/evidence-factory.js +7 -1
  78. package/dist/controller/evidence-factory.js.map +1 -1
  79. package/dist/controller/failure-analysis.d.ts +12 -0
  80. package/dist/controller/failure-analysis.d.ts.map +1 -1
  81. package/dist/controller/failure-analysis.js +41 -0
  82. package/dist/controller/failure-analysis.js.map +1 -1
  83. package/dist/controller/failure-analyzer-schemas.d.ts +87 -0
  84. package/dist/controller/failure-analyzer-schemas.d.ts.map +1 -0
  85. package/dist/controller/failure-analyzer-schemas.js +117 -0
  86. package/dist/controller/failure-analyzer-schemas.js.map +1 -0
  87. package/dist/controller/graph-validator.js +18 -4
  88. package/dist/controller/graph-validator.js.map +1 -1
  89. package/dist/controller/index.d.ts +7 -2
  90. package/dist/controller/index.d.ts.map +1 -1
  91. package/dist/controller/index.js +4 -1
  92. package/dist/controller/index.js.map +1 -1
  93. package/dist/controller/repair-loop.d.ts +1 -1
  94. package/dist/controller/repair-loop.d.ts.map +1 -1
  95. package/dist/controller/repair-loop.js +28 -0
  96. package/dist/controller/repair-loop.js.map +1 -1
  97. package/dist/controller/report-factory.d.ts.map +1 -1
  98. package/dist/controller/report-factory.js +49 -21
  99. package/dist/controller/report-factory.js.map +1 -1
  100. package/dist/controller/role-prompts.d.ts +2 -1
  101. package/dist/controller/role-prompts.d.ts.map +1 -1
  102. package/dist/controller/role-prompts.js +3 -9
  103. package/dist/controller/role-prompts.js.map +1 -1
  104. package/dist/controller/run-acceptance.d.ts +17 -0
  105. package/dist/controller/run-acceptance.d.ts.map +1 -0
  106. package/dist/controller/run-acceptance.js +179 -0
  107. package/dist/controller/run-acceptance.js.map +1 -0
  108. package/dist/controller/run-controller.d.ts.map +1 -1
  109. package/dist/controller/run-controller.js +379 -96
  110. package/dist/controller/run-controller.js.map +1 -1
  111. package/dist/controller/run-state.d.ts +1 -0
  112. package/dist/controller/run-state.d.ts.map +1 -1
  113. package/dist/controller/run-state.js +12 -0
  114. package/dist/controller/run-state.js.map +1 -1
  115. package/dist/controller/session-tool-authorization.d.ts +14 -0
  116. package/dist/controller/session-tool-authorization.d.ts.map +1 -0
  117. package/dist/controller/session-tool-authorization.js +88 -0
  118. package/dist/controller/session-tool-authorization.js.map +1 -0
  119. package/dist/controller/task-agent-output.d.ts +13 -2
  120. package/dist/controller/task-agent-output.d.ts.map +1 -1
  121. package/dist/controller/task-agent-output.js +58 -1
  122. package/dist/controller/task-agent-output.js.map +1 -1
  123. package/dist/controller/task-agent-schemas.d.ts +745 -26
  124. package/dist/controller/task-agent-schemas.d.ts.map +1 -1
  125. package/dist/controller/task-agent-schemas.js +70 -21
  126. package/dist/controller/task-agent-schemas.js.map +1 -1
  127. package/dist/controller/task-executor.d.ts +2 -1
  128. package/dist/controller/task-executor.d.ts.map +1 -1
  129. package/dist/controller/task-executor.js +304 -105
  130. package/dist/controller/task-executor.js.map +1 -1
  131. package/dist/doctor/cli.d.ts +3 -0
  132. package/dist/doctor/cli.d.ts.map +1 -0
  133. package/dist/doctor/cli.js +10 -0
  134. package/dist/doctor/cli.js.map +1 -0
  135. package/dist/doctor/index.d.ts +7 -0
  136. package/dist/doctor/index.d.ts.map +1 -0
  137. package/dist/doctor/index.js +16 -0
  138. package/dist/doctor/index.js.map +1 -0
  139. package/dist/doctor/local-mcp-probe.d.ts +3 -0
  140. package/dist/doctor/local-mcp-probe.d.ts.map +1 -0
  141. package/dist/doctor/local-mcp-probe.js +151 -0
  142. package/dist/doctor/local-mcp-probe.js.map +1 -0
  143. package/dist/doctor/opencode-config.d.ts +43 -0
  144. package/dist/doctor/opencode-config.d.ts.map +1 -0
  145. package/dist/doctor/opencode-config.js +103 -0
  146. package/dist/doctor/opencode-config.js.map +1 -0
  147. package/dist/doctor/run-harness-doctor.d.ts +23 -0
  148. package/dist/doctor/run-harness-doctor.d.ts.map +1 -0
  149. package/dist/doctor/run-harness-doctor.js +176 -0
  150. package/dist/doctor/run-harness-doctor.js.map +1 -0
  151. package/dist/doctor/types.d.ts +69 -0
  152. package/dist/doctor/types.d.ts.map +1 -0
  153. package/dist/doctor/types.js +8 -0
  154. package/dist/doctor/types.js.map +1 -0
  155. package/dist/domain/acceptance-criteria.d.ts +9 -0
  156. package/dist/domain/acceptance-criteria.d.ts.map +1 -0
  157. package/dist/domain/acceptance-criteria.js +38 -0
  158. package/dist/domain/acceptance-criteria.js.map +1 -0
  159. package/dist/domain/context-package.d.ts +43 -0
  160. package/dist/domain/context-package.d.ts.map +1 -0
  161. package/dist/domain/context-package.js +54 -0
  162. package/dist/domain/context-package.js.map +1 -0
  163. package/dist/domain/evidence.d.ts +1 -0
  164. package/dist/domain/evidence.d.ts.map +1 -1
  165. package/dist/domain/evidence.js +1 -2
  166. package/dist/domain/evidence.js.map +1 -1
  167. package/dist/domain/index.d.ts +12 -4
  168. package/dist/domain/index.d.ts.map +1 -1
  169. package/dist/domain/index.js +6 -2
  170. package/dist/domain/index.js.map +1 -1
  171. package/dist/domain/plan-artifacts.d.ts +170 -0
  172. package/dist/domain/plan-artifacts.d.ts.map +1 -0
  173. package/dist/domain/plan-artifacts.js +187 -0
  174. package/dist/domain/plan-artifacts.js.map +1 -0
  175. package/dist/domain/report.d.ts +608 -11
  176. package/dist/domain/report.d.ts.map +1 -1
  177. package/dist/domain/report.js +6 -4
  178. package/dist/domain/report.js.map +1 -1
  179. package/dist/domain/requirement.d.ts +22 -2
  180. package/dist/domain/requirement.d.ts.map +1 -1
  181. package/dist/domain/requirement.js +26 -3
  182. package/dist/domain/requirement.js.map +1 -1
  183. package/dist/domain/run-acceptance.d.ts +33 -0
  184. package/dist/domain/run-acceptance.d.ts.map +1 -0
  185. package/dist/domain/run-acceptance.js +29 -0
  186. package/dist/domain/run-acceptance.js.map +1 -0
  187. package/dist/domain/run.d.ts +596 -7
  188. package/dist/domain/run.d.ts.map +1 -1
  189. package/dist/domain/run.js +58 -0
  190. package/dist/domain/run.js.map +1 -1
  191. package/dist/domain/shared.d.ts +40 -2
  192. package/dist/domain/shared.d.ts.map +1 -1
  193. package/dist/domain/shared.js +26 -0
  194. package/dist/domain/shared.js.map +1 -1
  195. package/dist/domain/task-review.d.ts +57 -0
  196. package/dist/domain/task-review.d.ts.map +1 -0
  197. package/dist/domain/task-review.js +63 -0
  198. package/dist/domain/task-review.js.map +1 -0
  199. package/dist/domain/task.d.ts +24 -2
  200. package/dist/domain/task.d.ts.map +1 -1
  201. package/dist/domain/task.js +20 -12
  202. package/dist/domain/task.js.map +1 -1
  203. package/dist/index.d.ts +5 -0
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +5 -0
  206. package/dist/index.js.map +1 -1
  207. package/dist/plugin/create-harness-plugin.d.ts +4 -28
  208. package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
  209. package/dist/plugin/create-harness-plugin.js +33 -118
  210. package/dist/plugin/create-harness-plugin.js.map +1 -1
  211. package/dist/plugin/harness-agent-config.d.ts +7 -0
  212. package/dist/plugin/harness-agent-config.d.ts.map +1 -1
  213. package/dist/plugin/harness-agent-config.js +72 -118
  214. package/dist/plugin/harness-agent-config.js.map +1 -1
  215. package/dist/plugin/harness-chat-hook.d.ts +1 -1
  216. package/dist/plugin/harness-chat-hook.d.ts.map +1 -1
  217. package/dist/plugin/harness-chat-hook.js +15 -23
  218. package/dist/plugin/harness-chat-hook.js.map +1 -1
  219. package/dist/plugin/harness-chat-protocol.d.ts +2 -2
  220. package/dist/plugin/harness-chat-protocol.d.ts.map +1 -1
  221. package/dist/plugin/harness-chat-protocol.js +13 -2
  222. package/dist/plugin/harness-chat-protocol.js.map +1 -1
  223. package/dist/plugin/harness-coordinator.d.ts +4 -0
  224. package/dist/plugin/harness-coordinator.d.ts.map +1 -1
  225. package/dist/plugin/harness-coordinator.js +7 -1
  226. package/dist/plugin/harness-coordinator.js.map +1 -1
  227. package/dist/plugin/harness-plugin-identifiers.d.ts +5 -0
  228. package/dist/plugin/harness-plugin-identifiers.d.ts.map +1 -0
  229. package/dist/plugin/harness-plugin-identifiers.js +24 -0
  230. package/dist/plugin/harness-plugin-identifiers.js.map +1 -0
  231. package/dist/plugin/harness-plugin-runtime.d.ts +64 -0
  232. package/dist/plugin/harness-plugin-runtime.d.ts.map +1 -0
  233. package/dist/plugin/harness-plugin-runtime.js +125 -0
  234. package/dist/plugin/harness-plugin-runtime.js.map +1 -0
  235. package/dist/plugin/harness-plugin-scheduler.d.ts +16 -0
  236. package/dist/plugin/harness-plugin-scheduler.d.ts.map +1 -0
  237. package/dist/plugin/harness-plugin-scheduler.js +51 -0
  238. package/dist/plugin/harness-plugin-scheduler.js.map +1 -0
  239. package/dist/plugin/harness-request-router.d.ts.map +1 -1
  240. package/dist/plugin/harness-request-router.js +14 -23
  241. package/dist/plugin/harness-request-router.js.map +1 -1
  242. package/dist/plugin/harness-requirement.d.ts +1 -1
  243. package/dist/plugin/harness-requirement.d.ts.map +1 -1
  244. package/dist/plugin/harness-requirement.js +2 -3
  245. package/dist/plugin/harness-requirement.js.map +1 -1
  246. package/dist/session/contracts.d.ts +9 -0
  247. package/dist/session/contracts.d.ts.map +1 -1
  248. package/dist/session/contracts.js.map +1 -1
  249. package/dist/session/fake-session-adapter.d.ts.map +1 -1
  250. package/dist/session/fake-session-adapter.js +1 -0
  251. package/dist/session/fake-session-adapter.js.map +1 -1
  252. package/dist/session/index.d.ts +1 -1
  253. package/dist/session/index.d.ts.map +1 -1
  254. package/dist/session/index.js.map +1 -1
  255. package/dist/session/opencode-session-adapter.d.ts +2 -1
  256. package/dist/session/opencode-session-adapter.d.ts.map +1 -1
  257. package/dist/session/opencode-session-adapter.js +7 -2
  258. package/dist/session/opencode-session-adapter.js.map +1 -1
  259. package/dist/session/opencode-session-prompts.d.ts +2 -10
  260. package/dist/session/opencode-session-prompts.d.ts.map +1 -1
  261. package/dist/session/opencode-session-prompts.js +7 -9
  262. package/dist/session/opencode-session-prompts.js.map +1 -1
  263. package/dist/store/run-event.d.ts +596 -7
  264. package/dist/store/run-event.d.ts.map +1 -1
  265. package/dist/tools/harness-research-tools.d.ts +22 -0
  266. package/dist/tools/harness-research-tools.d.ts.map +1 -1
  267. package/dist/tools/harness-research-tools.js +173 -64
  268. package/dist/tools/harness-research-tools.js.map +1 -1
  269. package/dist/tools/harness-tool-capabilities.d.ts +342 -0
  270. package/dist/tools/harness-tool-capabilities.d.ts.map +1 -0
  271. package/dist/tools/harness-tool-capabilities.js +170 -0
  272. package/dist/tools/harness-tool-capabilities.js.map +1 -0
  273. package/dist/verification/command-policy.d.ts.map +1 -1
  274. package/dist/verification/command-policy.js +2 -2
  275. package/dist/verification/command-policy.js.map +1 -1
  276. package/package.json +6 -1
package/dist/index.d.ts CHANGED
@@ -1,7 +1,10 @@
1
+ export * from "./agent/index.js";
1
2
  export * from "./config/index.js";
2
3
  export * from "./controller/index.js";
4
+ export * from "./doctor/index.js";
3
5
  export * from "./domain/index.js";
4
6
  export { createHarnessPlugin, harnessPlugin, harnessPlugin as server, resolveHarnessProjectRoot, } from "./plugin/create-harness-plugin.js";
7
+ export { applyHarnessAgentConfig, detectHarnessConfigConflicts, } from "./plugin/harness-agent-config.js";
5
8
  export { HARNESS_BACKGROUND_ACK_MARKER, HARNESS_INTERNAL_RESULT_MARKER, } from "./plugin/harness-chat-protocol.js";
6
9
  export { createHarnessCoordinator, type HarnessCoordinator, type HarnessCoordinatorResponse, } from "./plugin/harness-coordinator.js";
7
10
  export { type HarnessIntent, HarnessIntentSchema, } from "./plugin/harness-intent.js";
@@ -9,6 +12,8 @@ export * from "./session/index.js";
9
12
  export * from "./store/index.js";
10
13
  export * from "./tools/context7-client.js";
11
14
  export * from "./tools/grep-app-client.js";
15
+ export { executeHarnessResearchTool, HARNESS_RESEARCH_PLUGIN_TOOL_NAMES, type ResearchClients, registerHarnessResearchTools, } from "./tools/harness-research-tools.js";
16
+ export * from "./tools/harness-tool-capabilities.js";
12
17
  export * from "./tools/lsp-client.js";
13
18
  export * from "./verification/index.js";
14
19
  export * from "./workspace/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,IAAI,MAAM,EACvB,yBAAyB,GAC1B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,GAChC,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,IAAI,MAAM,EACvB,yBAAyB,GAC1B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,GAChC,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EAClC,KAAK,eAAe,EACpB,4BAA4B,GAC7B,MAAM,mCAAmC,CAAA;AAC1C,cAAc,sCAAsC,CAAA;AACpD,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -1,7 +1,10 @@
1
+ export * from "./agent/index.js";
1
2
  export * from "./config/index.js";
2
3
  export * from "./controller/index.js";
4
+ export * from "./doctor/index.js";
3
5
  export * from "./domain/index.js";
4
6
  export { createHarnessPlugin, harnessPlugin, harnessPlugin as server, resolveHarnessProjectRoot, } from "./plugin/create-harness-plugin.js";
7
+ export { applyHarnessAgentConfig, detectHarnessConfigConflicts, } from "./plugin/harness-agent-config.js";
5
8
  export { HARNESS_BACKGROUND_ACK_MARKER, HARNESS_INTERNAL_RESULT_MARKER, } from "./plugin/harness-chat-protocol.js";
6
9
  export { createHarnessCoordinator, } from "./plugin/harness-coordinator.js";
7
10
  export { HarnessIntentSchema, } from "./plugin/harness-intent.js";
@@ -9,6 +12,8 @@ export * from "./session/index.js";
9
12
  export * from "./store/index.js";
10
13
  export * from "./tools/context7-client.js";
11
14
  export * from "./tools/grep-app-client.js";
15
+ export { executeHarnessResearchTool, HARNESS_RESEARCH_PLUGIN_TOOL_NAMES, registerHarnessResearchTools, } from "./tools/harness-research-tools.js";
16
+ export * from "./tools/harness-tool-capabilities.js";
12
17
  export * from "./tools/lsp-client.js";
13
18
  export * from "./verification/index.js";
14
19
  export * from "./workspace/index.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,IAAI,MAAM,EACvB,yBAAyB,GAC1B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,wBAAwB,GAGzB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAEL,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,IAAI,MAAM,EACvB,yBAAyB,GAC1B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,wBAAwB,GAGzB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAEL,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EAElC,4BAA4B,GAC7B,MAAM,mCAAmC,CAAA;AAC1C,cAAc,sCAAsC,CAAA;AACpD,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA"}
@@ -1,31 +1,7 @@
1
- import type { Plugin, PluginInput } from "@opencode-ai/plugin";
2
- import type { OpencodeClient } from "@opencode-ai/sdk";
3
- import { type HarnessConfig } from "../config/index.js";
4
- import { type ControllerClock, type ControllerIdSource, type RunController } from "../controller/index.js";
5
- import { type SessionAdapter } from "../session/index.js";
6
- import { type RunStore } from "../store/index.js";
7
- import { type ProcessRunner, type VerificationRunner } from "../verification/index.js";
8
- import { type CreateHarnessCoordinatorOptions, type HarnessCoordinator } from "./harness-coordinator.js";
9
- export type HarnessPluginDependencies = {
10
- readonly loadConfig?: (projectRoot: string) => Promise<HarnessConfig>;
11
- readonly createStore?: (projectRoot: string, stateDirectory: string) => RunStore;
12
- readonly createSessionAdapter?: (client: OpencodeClient, config: HarnessConfig) => SessionAdapter;
13
- readonly createProcessRunner?: () => ProcessRunner;
14
- readonly createVerificationRunner?: (processRunner: ProcessRunner) => VerificationRunner;
15
- readonly createController?: (input: {
16
- readonly config: HarnessConfig;
17
- readonly projectRoot: string;
18
- readonly store: RunStore;
19
- readonly sessionAdapter: SessionAdapter;
20
- readonly verificationRunner: VerificationRunner;
21
- readonly clock: ControllerClock;
22
- readonly ids: ControllerIdSource;
23
- }) => RunController;
24
- readonly createCoordinator?: (input: CreateHarnessCoordinatorOptions) => HarnessCoordinator;
25
- readonly clock?: ControllerClock;
26
- readonly ids?: ControllerIdSource;
27
- };
1
+ import type { Plugin } from "@opencode-ai/plugin";
2
+ import { type HarnessPluginDependencies } from "./harness-plugin-runtime.js";
3
+ export { resolveHarnessProjectRoot } from "./harness-plugin-identifiers.js";
4
+ export type { HarnessPluginDependencies } from "./harness-plugin-runtime.js";
28
5
  export declare const createHarnessPlugin: (dependencies?: HarnessPluginDependencies) => Plugin;
29
6
  export declare const harnessPlugin: Plugin;
30
- export declare const resolveHarnessProjectRoot: (input: Pick<PluginInput, "directory" | "worktree">) => string;
31
7
  //# sourceMappingURL=create-harness-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-harness-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,KAAK,+BAA+B,EAEpC,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAA;AAEjC,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,QAAQ,CAAA;IAChF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,KAAK,cAAc,CAAA;IACjG,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,aAAa,CAAA;IAClD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,kBAAkB,CAAA;IACxF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;QAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;QACxB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;QACvC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAA;QAC/C,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;QAC/B,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;KACjC,KAAK,aAAa,CAAA;IACnB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,kBAAkB,CAAA;IAC3F,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAA;CAClC,CAAA;AAUD,eAAO,MAAM,mBAAmB,GAAI,eAAc,yBAA8B,KAAG,MAoDlF,CAAA;AAED,eAAO,MAAM,aAAa,QAAwB,CAAA;AA4HlD,eAAO,MAAM,yBAAyB,GACpC,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,CAAC,KACjD,MAOF,CAAA"}
1
+ {"version":3,"file":"create-harness-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAMjD,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAC3E,YAAY,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAE5E,eAAO,MAAM,mBAAmB,GAAI,eAAc,yBAA8B,KAAG,MA4ElF,CAAA;AAED,eAAO,MAAM,aAAa,QAAwB,CAAA"}
@@ -1,32 +1,49 @@
1
- import { randomUUID } from "node:crypto";
2
- import { resolve } from "node:path";
3
- import { loadHarnessConfig } from "../config/index.js";
4
- import { createRunController, } from "../controller/index.js";
5
- import { RunIdSchema } from "../domain/index.js";
6
- import { createOpencodeSessionAdapter, createOpencodeSessionClient, } from "../session/index.js";
7
- import { createFilesystemRunStore } from "../store/index.js";
8
- import { createNodeProcessRunner, createVerificationRunner, } from "../verification/index.js";
1
+ import { authorizeSessionToolExecution } from "../controller/index.js";
2
+ import { createPluginResearchTools } from "../tools/harness-research-tools.js";
9
3
  import { applyHarnessAgentConfig } from "./harness-agent-config.js";
10
4
  import { handleHarnessChatMessage } from "./harness-chat-hook.js";
11
- import { createHarnessCoordinator, } from "./harness-coordinator.js";
5
+ import { createRuntime, resolveHarnessResearchRole, } from "./harness-plugin-runtime.js";
6
+ export { resolveHarnessProjectRoot } from "./harness-plugin-identifiers.js";
12
7
  export const createHarnessPlugin = (dependencies = {}) => {
13
8
  return async (input) => {
14
- const runtime = await createRuntime(input, dependencies);
9
+ const runtime = await createRuntime({ client: input.client, input, dependencies });
15
10
  if (runtime.config === undefined ||
16
11
  runtime.controller === undefined ||
17
12
  runtime.coordinator === undefined ||
18
13
  runtime.projectRoot === undefined ||
19
- runtime.sessionGuards === undefined) {
14
+ runtime.sessionGuards === undefined ||
15
+ runtime.researchClients === undefined ||
16
+ runtime.sessionAdapter === undefined) {
20
17
  return {};
21
18
  }
22
- const config = runtime.config;
23
- const coordinator = runtime.coordinator;
24
- const sessionGuards = runtime.sessionGuards;
25
- const projectRoot = runtime.projectRoot;
19
+ const { config, coordinator, projectRoot, researchClients, sessionGuards, sessionAdapter } = runtime;
26
20
  return {
21
+ dispose: async () => {
22
+ await researchClients.lsp.close();
23
+ },
27
24
  config: async (mutableConfig) => {
28
25
  applyHarnessAgentConfig(mutableConfig, config);
29
26
  },
27
+ tool: createPluginResearchTools({
28
+ clients: researchClients,
29
+ resolveRole: resolveHarnessResearchRole,
30
+ workspaceRoot: projectRoot,
31
+ }),
32
+ "tool.execute.before": async (toolInput, output) => {
33
+ const snapshot = sessionAdapterSnapshot(sessionAdapter, toolInput.sessionID);
34
+ if (snapshot === undefined) {
35
+ return;
36
+ }
37
+ authorizeSessionToolExecution({
38
+ tool: toolInput.tool,
39
+ args: output.args,
40
+ policy: {
41
+ role: snapshot.role,
42
+ workingDirectory: snapshot.workingDirectory,
43
+ ...(snapshot.promptInput === undefined ? {} : { promptInput: snapshot.promptInput }),
44
+ },
45
+ });
46
+ },
30
47
  "chat.message": async (messageInput, output) => {
31
48
  const replyModel = messageInput.model ?? output.message.model;
32
49
  await handleHarnessChatMessage({
@@ -60,107 +77,5 @@ export const createHarnessPlugin = (dependencies = {}) => {
60
77
  };
61
78
  };
62
79
  export const harnessPlugin = createHarnessPlugin();
63
- const createRuntime = async (input, dependencies) => {
64
- const projectRoot = resolveHarnessProjectRoot(input);
65
- const config = await (dependencies.loadConfig ?? ((root) => loadHarnessConfig({ projectRoot: root })))(projectRoot);
66
- if (!config.enabled) {
67
- return {};
68
- }
69
- const store = (dependencies.createStore ??
70
- ((root, stateDirectory) => createFilesystemRunStore({ projectRoot: root, stateDirectory })))(projectRoot, config.stateDirectory);
71
- const processRunner = (dependencies.createProcessRunner ??
72
- (() => createNodeProcessRunner({ maxCapturedOutputBytes: 64 * 1024 })))();
73
- const verificationRunner = (dependencies.createVerificationRunner ??
74
- ((runner) => createVerificationRunner({
75
- processRunner: runner,
76
- clock: dependencies.clock ?? { now: () => new Date() },
77
- createOutputRefId: () => `output-${randomUUID()}`,
78
- maxCapturedOutputBytes: 64 * 1024,
79
- outputSummaryMaxLength: 2000,
80
- })))(processRunner);
81
- const sessionAdapter = (dependencies.createSessionAdapter ??
82
- ((client, currentConfig) => createOpencodeSessionAdapter({
83
- client: createOpencodeSessionClient(client),
84
- profiles: {
85
- intake: currentConfig.harness,
86
- planner: currentConfig.planner,
87
- worker: currentConfig.worker,
88
- verifier: currentConfig.verifier,
89
- acceptance: currentConfig.acceptance,
90
- "failure-analyzer": currentConfig.failureAnalyzer,
91
- "repair-worker": currentConfig.worker,
92
- },
93
- })))(input.client, config);
94
- const clock = dependencies.clock ?? { now: () => new Date() };
95
- const ids = dependencies.ids ?? createIdSource();
96
- const sessionGuards = {
97
- inFlightSessions: new Map(),
98
- internalSessionIds: new Set(),
99
- };
100
- const controller = (dependencies.createController ??
101
- ((options) => createRunController({
102
- store: options.store,
103
- sessionAdapter: options.sessionAdapter,
104
- verificationRunner: options.verificationRunner,
105
- clock: options.clock,
106
- ids: options.ids,
107
- workingDirectory: options.projectRoot,
108
- maxRunAttempts: options.config.maxRunAttempts,
109
- })))({
110
- config,
111
- projectRoot,
112
- store,
113
- sessionAdapter,
114
- verificationRunner,
115
- clock,
116
- ids,
117
- });
118
- const coordinator = (dependencies.createCoordinator ??
119
- ((options) => createHarnessCoordinator({
120
- config: options.config,
121
- controller: options.controller,
122
- ids: options.ids,
123
- projectRoot: options.projectRoot,
124
- registerInternalSession: (sessionID) => {
125
- sessionGuards.internalSessionIds.add(sessionID);
126
- },
127
- sessionAdapter: options.sessionAdapter,
128
- })))({
129
- config,
130
- controller,
131
- ids,
132
- projectRoot,
133
- registerInternalSession: (sessionID) => {
134
- sessionGuards.internalSessionIds.add(sessionID);
135
- },
136
- sessionAdapter,
137
- });
138
- return {
139
- config,
140
- controller,
141
- coordinator,
142
- projectRoot,
143
- sessionGuards,
144
- };
145
- };
146
- const createIdSource = () => ({
147
- createRunId: () => RunIdSchema.parse(randomUUID()),
148
- createEventId: (label) => `${normalizeLabel(label)}-${randomUUID()}`,
149
- createMessageId: (label) => `msg_${normalizeLabel(label)}_${randomUUID()}`,
150
- createEvidenceId: (label) => `${normalizeLabel(label)}-${randomUUID()}`,
151
- createFailureId: (label) => `${normalizeLabel(label)}-${randomUUID()}`,
152
- createAgentResultId: (label) => `${normalizeLabel(label)}-${randomUUID()}`,
153
- });
154
- const normalizeLabel = (label) => label
155
- .toLowerCase()
156
- .replace(/[^a-z0-9]+/g, "-")
157
- .replace(/^-|-$/g, "") || "harness";
158
- export const resolveHarnessProjectRoot = (input) => {
159
- const worktree = input.worktree.trim();
160
- const candidate = worktree.length === 0 ? undefined : resolve(worktree);
161
- if (candidate === undefined || resolve(candidate, "..") === candidate) {
162
- return resolve(input.directory);
163
- }
164
- return candidate;
165
- };
80
+ const sessionAdapterSnapshot = (sessionAdapter, sessionID) => sessionAdapter.getSession(sessionID);
166
81
  //# sourceMappingURL=create-harness-plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-harness-plugin.js","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,OAAO,EAAsB,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAGL,mBAAmB,GAEpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,GAE5B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAiB,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GAGzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAsB,MAAM,wBAAwB,CAAA;AACrF,OAAO,EAEL,wBAAwB,GAEzB,MAAM,0BAA0B,CAAA;AA8BjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAA0C,EAAE,EAAU,EAAE;IAC1F,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;QACxD,IACE,OAAO,CAAC,MAAM,KAAK,SAAS;YAC5B,OAAO,CAAC,UAAU,KAAK,SAAS;YAChC,OAAO,CAAC,WAAW,KAAK,SAAS;YACjC,OAAO,CAAC,WAAW,KAAK,SAAS;YACjC,OAAO,CAAC,aAAa,KAAK,SAAS,EACnC,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QACvC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QAEvC,OAAO;YACL,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;gBAC9B,uBAAuB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YAChD,CAAC;YACD,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;gBAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAA;gBAC7D,MAAM,wBAAwB,CAAC;oBAC7B,MAAM;oBACN,WAAW;oBACX,MAAM,EAAE,aAAa;oBACrB,YAAY;oBACZ,MAAM;oBACN,qBAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;wBACnD,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;4BACrC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;4BACvB,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;4BACjC,IAAI,EAAE;gCACJ,KAAK,EAAE,SAAS;gCAChB,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;gCAC1D,KAAK,EAAE;oCACL;wCACE,IAAI,EAAE,MAAM;wCACZ,IAAI;wCACJ,SAAS,EAAE,IAAI;wCACf,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;qCAChC;iCACF;6BACF;4BACD,YAAY,EAAE,IAAI;yBACnB,CAAC,CAAA;oBACJ,CAAC;iBACF,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;IACH,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA;AAElD,MAAM,aAAa,GAAG,KAAK,EACzB,KAAkB,EAClB,YAAuC,EACf,EAAE;IAC1B,MAAM,WAAW,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,MAAM,CACnB,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAChF,CAAC,WAAW,CAAC,CAAA;IACd,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,KAAK,GAAG,CACZ,YAAY,CAAC,WAAW;QACxB,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAC5F,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA;IACrC,MAAM,aAAa,GAAG,CACpB,YAAY,CAAC,mBAAmB;QAChC,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CACvE,EAAE,CAAA;IACH,MAAM,kBAAkB,GAAG,CACzB,YAAY,CAAC,wBAAwB;QACrC,CAAC,CAAC,MAAM,EAAE,EAAE,CACV,wBAAwB,CAAC;YACvB,aAAa,EAAE,MAAM;YACrB,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE;YACtD,iBAAiB,EAAE,GAAG,EAAE,CAAC,UAAU,UAAU,EAAE,EAAE;YACjD,sBAAsB,EAAE,EAAE,GAAG,IAAI;YACjC,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC,CACN,CAAC,aAAa,CAAC,CAAA;IAChB,MAAM,cAAc,GAAG,CACrB,YAAY,CAAC,oBAAoB;QACjC,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CACzB,4BAA4B,CAAC;YAC3B,MAAM,EAAE,2BAA2B,CAAC,MAAM,CAAC;YAC3C,QAAQ,EAAE;gBACR,MAAM,EAAE,aAAa,CAAC,OAAO;gBAC7B,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,MAAM,EAAE,aAAa,CAAC,MAAM;gBAC5B,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,kBAAkB,EAAE,aAAa,CAAC,eAAe;gBACjD,eAAe,EAAE,aAAa,CAAC,MAAM;aACtC;SACF,CAAC,CAAC,CACN,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAA;IAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,IAAI,cAAc,EAAE,CAAA;IAChD,MAAM,aAAa,GAAkB;QACnC,gBAAgB,EAAE,IAAI,GAAG,EAAyB;QAClD,kBAAkB,EAAE,IAAI,GAAG,EAAU;KACtC,CAAA;IACD,MAAM,UAAU,GAAG,CACjB,YAAY,CAAC,gBAAgB;QAC7B,CAAC,CAAC,OAAO,EAAE,EAAE,CACX,mBAAmB,CAAC;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,gBAAgB,EAAE,OAAO,CAAC,WAAW;YACrC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc;SAC9C,CAAC,CAAC,CACN,CAAC;QACA,MAAM;QACN,WAAW;QACX,KAAK;QACL,cAAc;QACd,kBAAkB;QAClB,KAAK;QACL,GAAG;KACJ,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,CAClB,YAAY,CAAC,iBAAiB;QAC9B,CAAC,CAAC,OAAO,EAAE,EAAE,CACX,wBAAwB,CAAC;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,uBAAuB,EAAE,CAAC,SAAS,EAAE,EAAE;gBACrC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACjD,CAAC;YACD,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC,CACN,CAAC;QACA,MAAM;QACN,UAAU;QACV,GAAG;QACH,WAAW;QACX,uBAAuB,EAAE,CAAC,SAAS,EAAE,EAAE;YACrC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACjD,CAAC;QACD,cAAc;KACf,CAAC,CAAA;IAEF,OAAO;QACL,MAAM;QACN,UAAU;QACV,WAAW;QACX,WAAW;QACX,aAAa;KACd,CAAA;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,GAAuB,EAAE,CAAC,CAAC;IAChD,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IAClD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,EAAE;IACpE,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,EAAE;IAC1E,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,EAAE;IACvE,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,EAAE;IACtE,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,EAAE;CAC3E,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE,CAC/C,KAAK;KACF,WAAW,EAAE;KACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;KAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,SAAS,CAAA;AAEvC,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,KAAkD,EAC1C,EAAE;IACV,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvE,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACtE,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
1
+ {"version":3,"file":"create-harness-plugin.js","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,13 @@
1
1
  import type { Config } from "@opencode-ai/plugin";
2
2
  import type { HarnessConfig } from "../config/index.js";
3
3
  import { HARNESS_ACCEPTANCE_AGENT_NAME, HARNESS_ACCEPTANCE_DISPLAY_NAME, HARNESS_FAILURE_ANALYZER_AGENT_NAME, HARNESS_FAILURE_ANALYZER_DISPLAY_NAME, HARNESS_INTAKE_AGENT_NAME, HARNESS_INTAKE_DISPLAY_NAME, HARNESS_PLANNER_AGENT_NAME, HARNESS_PLANNER_DISPLAY_NAME, HARNESS_PRIMARY_AGENT_NAME, HARNESS_REPAIR_WORKER_AGENT_NAME, HARNESS_REPAIR_WORKER_DISPLAY_NAME, HARNESS_VERIFIER_AGENT_NAME, HARNESS_VERIFIER_DISPLAY_NAME, HARNESS_WORKER_AGENT_NAME, HARNESS_WORKER_DISPLAY_NAME } from "../session/harness-agent-names.js";
4
+ export type HarnessConfigConflict = {
5
+ readonly name: string;
6
+ readonly summary: string;
7
+ };
8
+ export declare const detectHarnessConfigConflicts: (config: {
9
+ readonly agent?: Readonly<Record<string, unknown>>;
10
+ }, harnessConfig: HarnessConfig) => readonly HarnessConfigConflict[];
4
11
  export declare const applyHarnessAgentConfig: (config: Config, harnessConfig: HarnessConfig) => void;
5
12
  export { HARNESS_ACCEPTANCE_AGENT_NAME, HARNESS_ACCEPTANCE_DISPLAY_NAME, HARNESS_FAILURE_ANALYZER_AGENT_NAME, HARNESS_FAILURE_ANALYZER_DISPLAY_NAME, HARNESS_INTAKE_AGENT_NAME, HARNESS_INTAKE_DISPLAY_NAME, HARNESS_PLANNER_AGENT_NAME, HARNESS_PLANNER_DISPLAY_NAME, HARNESS_PRIMARY_AGENT_NAME, HARNESS_REPAIR_WORKER_AGENT_NAME, HARNESS_REPAIR_WORKER_DISPLAY_NAME, HARNESS_VERIFIER_AGENT_NAME, HARNESS_VERIFIER_DISPLAY_NAME, HARNESS_WORKER_AGENT_NAME, HARNESS_WORKER_DISPLAY_NAME, };
6
13
  //# sourceMappingURL=harness-agent-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-agent-config.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,mCAAmC,EACnC,qCAAqC,EACrC,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,gCAAgC,EAChC,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,mCAAmC,CAAA;AA8E1C,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,EAAE,eAAe,aAAa,KAAG,IA4FtF,CAAA;AAED,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,mCAAmC,EACnC,qCAAqC,EACrC,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,gCAAgC,EAChC,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,GAC5B,CAAA"}
1
+ {"version":3,"file":"harness-agent-config.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAQjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,mCAAmC,EACnC,qCAAqC,EACrC,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,gCAAgC,EAChC,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,mCAAmC,CAAA;AAE1C,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AA8FD,eAAO,MAAM,4BAA4B,GACvC,QAAQ;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,EAC9D,eAAe,aAAa,KAC3B,SAAS,qBAAqB,EAehC,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,EAAE,eAAe,aAAa,KAAG,IAiBtF,CAAA;AAED,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,mCAAmC,EACnC,qCAAqC,EACrC,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,gCAAgC,EAChC,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,GAC5B,CAAA"}
@@ -1,22 +1,5 @@
1
+ import { buildCapabilityPermission, buildCapabilityPrompt, buildCapabilityToolConfig, getHarnessAgentCapability, } from "../agent/index.js";
1
2
  import { HARNESS_ACCEPTANCE_AGENT_NAME, HARNESS_ACCEPTANCE_DISPLAY_NAME, HARNESS_FAILURE_ANALYZER_AGENT_NAME, HARNESS_FAILURE_ANALYZER_DISPLAY_NAME, HARNESS_INTAKE_AGENT_NAME, HARNESS_INTAKE_DISPLAY_NAME, HARNESS_PLANNER_AGENT_NAME, HARNESS_PLANNER_DISPLAY_NAME, HARNESS_PRIMARY_AGENT_NAME, HARNESS_REPAIR_WORKER_AGENT_NAME, HARNESS_REPAIR_WORKER_DISPLAY_NAME, HARNESS_VERIFIER_AGENT_NAME, HARNESS_VERIFIER_DISPLAY_NAME, HARNESS_WORKER_AGENT_NAME, HARNESS_WORKER_DISPLAY_NAME, } from "../session/harness-agent-names.js";
2
- const HARNESS_AGENT_DESCRIPTION = "Use for natural-language Harness lifecycle operations: start, status, resume, cancel, report.";
3
- const HARNESS_AGENT_PROMPT = [
4
- "你是 Harness Agent,只负责呈现 Harness 控制平面结果。",
5
- "关于可用模型、当前模型、MCP、智能体、配置、帮助或工具的普通能力查询,直接按 OpenCode 正常能力回答,不要进入 Harness 协调。",
6
- "生命周期消息会在同一轮附带一个带有 <!-- HARNESS_INTERNAL_RESULT --> 标记的 synthetic result;该结果是唯一权威完成结果。",
7
- "你只基于该 synthetic result 做总结,不要猜测、补造或改写运行状态。",
8
- "不要直接编辑文件、执行 shell、调用 task 委派子 Agent 或声明未完成的任务已完成。",
9
- "向用户清楚展示 runId、当前状态、阻塞原因和下一步操作。",
10
- ].join("\n");
11
- const RESEARCH_TOOL_NAMES = [
12
- "harness_context7_resolve",
13
- "harness_context7_query",
14
- "harness_grep_app_search",
15
- "harness_lsp_status",
16
- "harness_lsp_diagnostics",
17
- "harness_lsp_definition",
18
- "harness_lsp_references",
19
- ];
20
3
  const MANAGED_HARNESS_AGENT_NAMES = [
21
4
  HARNESS_PRIMARY_AGENT_NAME,
22
5
  HARNESS_INTAKE_AGENT_NAME,
@@ -34,115 +17,86 @@ const MANAGED_HARNESS_AGENT_NAMES = [
34
17
  HARNESS_FAILURE_ANALYZER_DISPLAY_NAME,
35
18
  HARNESS_REPAIR_WORKER_DISPLAY_NAME,
36
19
  ];
37
- const createReadOnlyAgent = (input) => ({
38
- mode: "all",
39
- hidden: true,
40
- model: input.model,
41
- description: input.description,
42
- prompt: input.prompt,
43
- tools: {
44
- task: false,
45
- edit: false,
46
- bash: false,
47
- write: false,
48
- patch: false,
49
- ...Object.fromEntries((input.researchTools ?? []).map((name) => [name, true])),
50
- },
51
- permission: { edit: "deny", bash: "deny" },
52
- });
53
- const createWorkerAgent = (model) => ({
54
- mode: "all",
55
- hidden: true,
56
- model,
57
- description: "Internal Harness Worker executor; the only Harness role allowed to modify code.",
58
- prompt: "你是 Harness Worker 子 Agent。仅在允许路径内实现任务,输出结构化结果,不要切换角色。",
59
- tools: {
60
- task: false,
61
- edit: true,
62
- bash: true,
63
- write: true,
64
- patch: true,
65
- ...Object.fromEntries(RESEARCH_TOOL_NAMES.map((name) => [name, true])),
66
- },
67
- permission: { edit: "allow", bash: "allow" },
20
+ const profileModel = (config, profileKey) => {
21
+ const profile = config[profileKey];
22
+ return `${profile.provider}/${profile.model}`;
23
+ };
24
+ const createManagedAgent = (input) => {
25
+ const capability = getHarnessAgentCapability(input.agentId);
26
+ return {
27
+ mode: capability.mode,
28
+ hidden: capability.hidden,
29
+ model: profileModel(input.harnessConfig, capability.profileKey),
30
+ description: capability.description,
31
+ prompt: buildCapabilityPrompt(capability),
32
+ tools: buildCapabilityToolConfig(capability),
33
+ permission: buildCapabilityPermission(capability),
34
+ };
35
+ };
36
+ const buildHarnessManagedAgents = (harnessConfig) => ({
37
+ [HARNESS_PRIMARY_AGENT_NAME]: createManagedAgent({
38
+ harnessConfig,
39
+ agentId: HARNESS_PRIMARY_AGENT_NAME,
40
+ }),
41
+ [HARNESS_INTAKE_AGENT_NAME]: createManagedAgent({
42
+ harnessConfig,
43
+ agentId: HARNESS_INTAKE_AGENT_NAME,
44
+ }),
45
+ [HARNESS_PLANNER_AGENT_NAME]: createManagedAgent({
46
+ harnessConfig,
47
+ agentId: HARNESS_PLANNER_AGENT_NAME,
48
+ }),
49
+ [HARNESS_WORKER_AGENT_NAME]: createManagedAgent({
50
+ harnessConfig,
51
+ agentId: HARNESS_WORKER_AGENT_NAME,
52
+ }),
53
+ [HARNESS_VERIFIER_AGENT_NAME]: createManagedAgent({
54
+ harnessConfig,
55
+ agentId: HARNESS_VERIFIER_AGENT_NAME,
56
+ }),
57
+ [HARNESS_ACCEPTANCE_AGENT_NAME]: createManagedAgent({
58
+ harnessConfig,
59
+ agentId: HARNESS_ACCEPTANCE_AGENT_NAME,
60
+ }),
61
+ [HARNESS_FAILURE_ANALYZER_AGENT_NAME]: createManagedAgent({
62
+ harnessConfig,
63
+ agentId: HARNESS_FAILURE_ANALYZER_AGENT_NAME,
64
+ }),
65
+ [HARNESS_REPAIR_WORKER_AGENT_NAME]: createManagedAgent({
66
+ harnessConfig,
67
+ agentId: HARNESS_REPAIR_WORKER_AGENT_NAME,
68
+ }),
68
69
  });
70
+ export const detectHarnessConfigConflicts = (config, harnessConfig) => {
71
+ const expected = buildHarnessManagedAgents(harnessConfig);
72
+ return Object.entries(config.agent ?? {}).flatMap(([name, agent]) => {
73
+ if (!MANAGED_HARNESS_AGENT_NAMES.includes(name) || agent === undefined)
74
+ return [];
75
+ const expectedAgent = expected[name];
76
+ if (expectedAgent !== undefined && JSON.stringify(agent) === JSON.stringify(expectedAgent)) {
77
+ return [];
78
+ }
79
+ return [
80
+ {
81
+ name,
82
+ summary: `Harness configuration conflict: 保留名称 ${name} 已被其他插件或配置占用`,
83
+ },
84
+ ];
85
+ });
86
+ };
69
87
  export const applyHarnessAgentConfig = (config, harnessConfig) => {
70
- const existingAgent = config.agent?.[HARNESS_PRIMARY_AGENT_NAME];
88
+ const conflicts = detectHarnessConfigConflicts(config, harnessConfig);
89
+ if (conflicts.length > 0) {
90
+ throw new Error(conflicts[0]?.summary ?? "Harness configuration conflict");
91
+ }
71
92
  const existingUnmanagedAgents = {};
72
93
  for (const [name, agent] of Object.entries(config.agent ?? {})) {
73
94
  if (!MANAGED_HARNESS_AGENT_NAMES.includes(name) && agent !== undefined) {
74
95
  existingUnmanagedAgents[name] = agent;
75
96
  }
76
97
  }
77
- const nextAgent = {
78
- ...existingAgent,
79
- mode: "primary",
80
- hidden: false,
81
- model: `${harnessConfig.harness.provider}/${harnessConfig.harness.model}`,
82
- description: HARNESS_AGENT_DESCRIPTION,
83
- prompt: HARNESS_AGENT_PROMPT,
84
- tools: {
85
- ...existingAgent?.tools,
86
- task: false,
87
- edit: false,
88
- bash: false,
89
- write: false,
90
- patch: false,
91
- ...Object.fromEntries(RESEARCH_TOOL_NAMES.map((name) => [name, false])),
92
- },
93
- permission: {
94
- ...existingAgent?.permission,
95
- edit: "deny",
96
- bash: "deny",
97
- },
98
- };
99
- const internalAgents = {
100
- [HARNESS_INTAKE_AGENT_NAME]: createReadOnlyAgent({
101
- model: `${harnessConfig.harness.provider}/${harnessConfig.harness.model}`,
102
- description: "Internal Harness Intake parser; never edits, executes, or delegates.",
103
- prompt: "你是 Harness Intake 子 Agent。只输出严格 HarnessIntent JSON,不要调用工具,不要输出 Markdown。",
104
- }),
105
- [HARNESS_PLANNER_AGENT_NAME]: createReadOnlyAgent({
106
- model: `${harnessConfig.planner.provider}/${harnessConfig.planner.model}`,
107
- description: "Internal Harness Planner; produces plans and never edits, executes, or delegates.",
108
- prompt: "你是 Harness Planner 子 Agent。只输出结构化计划,不要编辑文件,不要调用工具。",
109
- researchTools: RESEARCH_TOOL_NAMES,
110
- }),
111
- [HARNESS_WORKER_AGENT_NAME]: createWorkerAgent(`${harnessConfig.worker.provider}/${harnessConfig.worker.model}`),
112
- [HARNESS_VERIFIER_AGENT_NAME]: createReadOnlyAgent({
113
- model: `${harnessConfig.verifier.provider}/${harnessConfig.verifier.model}`,
114
- description: "Internal Harness Verifier; inspects evidence and never edits, executes, or delegates.",
115
- prompt: "你是 Harness Verifier 子 Agent。只基于任务与证据输出结构化结论,不要执行修改。",
116
- researchTools: RESEARCH_TOOL_NAMES,
117
- }),
118
- [HARNESS_ACCEPTANCE_AGENT_NAME]: createReadOnlyAgent({
119
- model: `${harnessConfig.acceptance.provider}/${harnessConfig.acceptance.model}`,
120
- description: "Internal Harness Acceptance reviewer; registered for final acceptance checks and never edits.",
121
- prompt: "你是 Harness Acceptance 子 Agent。只检查需求、任务和证据覆盖,只输出结构化 AcceptanceOutput JSON,不要调用工具。",
122
- researchTools: [
123
- "harness_grep_app_search",
124
- "harness_lsp_status",
125
- "harness_lsp_diagnostics",
126
- "harness_lsp_definition",
127
- "harness_lsp_references",
128
- ],
129
- }),
130
- [HARNESS_FAILURE_ANALYZER_AGENT_NAME]: createReadOnlyAgent({
131
- model: `${harnessConfig.failureAnalyzer.provider}/${harnessConfig.failureAnalyzer.model}`,
132
- description: "Internal Harness Failure Analyzer; classifies failures and never edits, executes, or delegates.",
133
- prompt: "你是 Harness Failure Analyzer 子 Agent。只根据失败证据分类根因并给出结构化 FailureAnalyzerOutput JSON。",
134
- researchTools: RESEARCH_TOOL_NAMES,
135
- }),
136
- [HARNESS_REPAIR_WORKER_AGENT_NAME]: createReadOnlyAgent({
137
- model: `${harnessConfig.worker.provider}/${harnessConfig.worker.model}`,
138
- description: "Internal Harness Repair Worker; proposes bounded repairs and never edits or executes directly.",
139
- prompt: "你是 Harness Repair Worker 子 Agent。只根据失败证据输出结构化修复建议,不要直接修改代码。",
140
- researchTools: RESEARCH_TOOL_NAMES,
141
- }),
142
- };
143
98
  config.agent = {
144
- [HARNESS_PRIMARY_AGENT_NAME]: nextAgent,
145
- ...internalAgents,
99
+ ...buildHarnessManagedAgents(harnessConfig),
146
100
  ...existingUnmanagedAgents,
147
101
  };
148
102
  };
@@ -1 +1 @@
1
- {"version":3,"file":"harness-agent-config.js","sourceRoot":"","sources":["../../src/plugin/harness-agent-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-agent-config.js","sourceRoot":"","sources":["../../src/plugin/harness-agent-config.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { Part } from "@opencode-ai/sdk";
2
2
  import type { HarnessConfig } from "../config/index.js";
3
3
  import type { HarnessCoordinator } from "./harness-coordinator.js";
4
4
  export type SessionGuards = {
5
- readonly inFlightSessions: Map<string, Promise<void>>;
5
+ readonly inFlightRuns: Map<string, Promise<void>>;
6
6
  readonly internalSessionIds: Set<string>;
7
7
  };
8
8
  type InternalResultDelivery = (input: {
@@ -1 +1 @@
1
- {"version":3,"file":"harness-chat-hook.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-chat-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAavD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAGlE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACrD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACzC,CAAA;AAED,KAAK,sBAAsB,GAAG,CAAC,KAAK,EAAE;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,eAAO,MAAM,wBAAwB,GAAU,OAAO;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,sBAAsB,CAAA;IACtD,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;YACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;YAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SACxB,CAAA;QACD,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KACvB,CAAA;CACF,KAAG,OAAO,CAAC,IAAI,CAoDf,CAAA"}
1
+ {"version":3,"file":"harness-chat-hook.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-chat-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAYvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAGlE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACzC,CAAA;AAED,KAAK,sBAAsB,GAAG,CAAC,KAAK,EAAE;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,eAAO,MAAM,wBAAwB,GAAU,OAAO;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,sBAAsB,CAAA;IACtD,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;YACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;YAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SACxB,CAAA;QACD,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KACvB,CAAA;CACF,KAAG,OAAO,CAAC,IAAI,CAoCf,CAAA"}