harness-engineering-agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +191 -0
  3. package/dist/config/config-defaults.d.ts +32 -0
  4. package/dist/config/config-defaults.d.ts.map +1 -0
  5. package/dist/config/config-defaults.js +32 -0
  6. package/dist/config/config-defaults.js.map +1 -0
  7. package/dist/config/config-errors.d.ts +7 -0
  8. package/dist/config/config-errors.d.ts.map +1 -0
  9. package/dist/config/config-errors.js +11 -0
  10. package/dist/config/config-errors.js.map +1 -0
  11. package/dist/config/config-file.d.ts +3 -0
  12. package/dist/config/config-file.d.ts.map +1 -0
  13. package/dist/config/config-file.js +31 -0
  14. package/dist/config/config-file.js.map +1 -0
  15. package/dist/config/config-merge.d.ts +8 -0
  16. package/dist/config/config-merge.d.ts.map +1 -0
  17. package/dist/config/config-merge.js +50 -0
  18. package/dist/config/config-merge.js.map +1 -0
  19. package/dist/config/config-schema.d.ts +135 -0
  20. package/dist/config/config-schema.d.ts.map +1 -0
  21. package/dist/config/config-schema.js +94 -0
  22. package/dist/config/config-schema.js.map +1 -0
  23. package/dist/config/config-types.d.ts +21 -0
  24. package/dist/config/config-types.d.ts.map +1 -0
  25. package/dist/config/config-types.js +2 -0
  26. package/dist/config/config-types.js.map +1 -0
  27. package/dist/config/harness-config.d.ts +6 -0
  28. package/dist/config/harness-config.d.ts.map +1 -0
  29. package/dist/config/harness-config.js +4 -0
  30. package/dist/config/harness-config.js.map +1 -0
  31. package/dist/config/index.d.ts +2 -0
  32. package/dist/config/index.d.ts.map +1 -0
  33. package/dist/config/index.js +2 -0
  34. package/dist/config/index.js.map +1 -0
  35. package/dist/config/load-harness-config.d.ts +9 -0
  36. package/dist/config/load-harness-config.d.ts.map +1 -0
  37. package/dist/config/load-harness-config.js +25 -0
  38. package/dist/config/load-harness-config.js.map +1 -0
  39. package/dist/controller/agent-output.d.ts +21 -0
  40. package/dist/controller/agent-output.d.ts.map +1 -0
  41. package/dist/controller/agent-output.js +75 -0
  42. package/dist/controller/agent-output.js.map +1 -0
  43. package/dist/controller/agent-session.d.ts +49 -0
  44. package/dist/controller/agent-session.d.ts.map +1 -0
  45. package/dist/controller/agent-session.js +220 -0
  46. package/dist/controller/agent-session.js.map +1 -0
  47. package/dist/controller/contracts.d.ts +65 -0
  48. package/dist/controller/contracts.d.ts.map +1 -0
  49. package/dist/controller/contracts.js +2 -0
  50. package/dist/controller/contracts.js.map +1 -0
  51. package/dist/controller/errors.d.ts +23 -0
  52. package/dist/controller/errors.d.ts.map +1 -0
  53. package/dist/controller/errors.js +37 -0
  54. package/dist/controller/errors.js.map +1 -0
  55. package/dist/controller/evidence-factory.d.ts +15 -0
  56. package/dist/controller/evidence-factory.d.ts.map +1 -0
  57. package/dist/controller/evidence-factory.js +38 -0
  58. package/dist/controller/evidence-factory.js.map +1 -0
  59. package/dist/controller/failure-analysis.d.ts +36 -0
  60. package/dist/controller/failure-analysis.d.ts.map +1 -0
  61. package/dist/controller/failure-analysis.js +175 -0
  62. package/dist/controller/failure-analysis.js.map +1 -0
  63. package/dist/controller/failure-factory.d.ts +85 -0
  64. package/dist/controller/failure-factory.d.ts.map +1 -0
  65. package/dist/controller/failure-factory.js +124 -0
  66. package/dist/controller/failure-factory.js.map +1 -0
  67. package/dist/controller/graph-validator.d.ts +4 -0
  68. package/dist/controller/graph-validator.d.ts.map +1 -0
  69. package/dist/controller/graph-validator.js +102 -0
  70. package/dist/controller/graph-validator.js.map +1 -0
  71. package/dist/controller/index.d.ts +15 -0
  72. package/dist/controller/index.d.ts.map +1 -0
  73. package/dist/controller/index.js +11 -0
  74. package/dist/controller/index.js.map +1 -0
  75. package/dist/controller/repair-loop.d.ts +42 -0
  76. package/dist/controller/repair-loop.d.ts.map +1 -0
  77. package/dist/controller/repair-loop.js +385 -0
  78. package/dist/controller/repair-loop.js.map +1 -0
  79. package/dist/controller/report-factory.d.ts +4 -0
  80. package/dist/controller/report-factory.d.ts.map +1 -0
  81. package/dist/controller/report-factory.js +107 -0
  82. package/dist/controller/report-factory.js.map +1 -0
  83. package/dist/controller/role-prompts.d.ts +8 -0
  84. package/dist/controller/role-prompts.d.ts.map +1 -0
  85. package/dist/controller/role-prompts.js +35 -0
  86. package/dist/controller/role-prompts.js.map +1 -0
  87. package/dist/controller/run-controller.d.ts +3 -0
  88. package/dist/controller/run-controller.d.ts.map +1 -0
  89. package/dist/controller/run-controller.js +291 -0
  90. package/dist/controller/run-controller.js.map +1 -0
  91. package/dist/controller/run-persistence.d.ts +15 -0
  92. package/dist/controller/run-persistence.d.ts.map +1 -0
  93. package/dist/controller/run-persistence.js +83 -0
  94. package/dist/controller/run-persistence.js.map +1 -0
  95. package/dist/controller/run-state.d.ts +61 -0
  96. package/dist/controller/run-state.d.ts.map +1 -0
  97. package/dist/controller/run-state.js +151 -0
  98. package/dist/controller/run-state.js.map +1 -0
  99. package/dist/controller/task-agent-output.d.ts +70 -0
  100. package/dist/controller/task-agent-output.d.ts.map +1 -0
  101. package/dist/controller/task-agent-output.js +256 -0
  102. package/dist/controller/task-agent-output.js.map +1 -0
  103. package/dist/controller/task-agent-schemas.d.ts +217 -0
  104. package/dist/controller/task-agent-schemas.d.ts.map +1 -0
  105. package/dist/controller/task-agent-schemas.js +171 -0
  106. package/dist/controller/task-agent-schemas.js.map +1 -0
  107. package/dist/controller/task-executor.d.ts +15 -0
  108. package/dist/controller/task-executor.d.ts.map +1 -0
  109. package/dist/controller/task-executor.js +751 -0
  110. package/dist/controller/task-executor.js.map +1 -0
  111. package/dist/controller/task-paths.d.ts +3 -0
  112. package/dist/controller/task-paths.d.ts.map +1 -0
  113. package/dist/controller/task-paths.js +20 -0
  114. package/dist/controller/task-paths.js.map +1 -0
  115. package/dist/controller/task-retry.d.ts +24 -0
  116. package/dist/controller/task-retry.d.ts.map +1 -0
  117. package/dist/controller/task-retry.js +42 -0
  118. package/dist/controller/task-retry.js.map +1 -0
  119. package/dist/controller/worktree-eligibility.d.ts +15 -0
  120. package/dist/controller/worktree-eligibility.d.ts.map +1 -0
  121. package/dist/controller/worktree-eligibility.js +38 -0
  122. package/dist/controller/worktree-eligibility.js.map +1 -0
  123. package/dist/controller/worktree-scheduler.d.ts +72 -0
  124. package/dist/controller/worktree-scheduler.d.ts.map +1 -0
  125. package/dist/controller/worktree-scheduler.js +142 -0
  126. package/dist/controller/worktree-scheduler.js.map +1 -0
  127. package/dist/domain/agent-result.d.ts +83 -0
  128. package/dist/domain/agent-result.d.ts.map +1 -0
  129. package/dist/domain/agent-result.js +44 -0
  130. package/dist/domain/agent-result.js.map +1 -0
  131. package/dist/domain/evidence.d.ts +97 -0
  132. package/dist/domain/evidence.d.ts.map +1 -0
  133. package/dist/domain/evidence.js +85 -0
  134. package/dist/domain/evidence.js.map +1 -0
  135. package/dist/domain/failure.d.ts +121 -0
  136. package/dist/domain/failure.d.ts.map +1 -0
  137. package/dist/domain/failure.js +72 -0
  138. package/dist/domain/failure.js.map +1 -0
  139. package/dist/domain/index.d.ts +19 -0
  140. package/dist/domain/index.d.ts.map +1 -0
  141. package/dist/domain/index.js +10 -0
  142. package/dist/domain/index.js.map +1 -0
  143. package/dist/domain/report.d.ts +904 -0
  144. package/dist/domain/report.d.ts.map +1 -0
  145. package/dist/domain/report.js +90 -0
  146. package/dist/domain/report.js.map +1 -0
  147. package/dist/domain/requirement.d.ts +10 -0
  148. package/dist/domain/requirement.d.ts.map +1 -0
  149. package/dist/domain/requirement.js +12 -0
  150. package/dist/domain/requirement.js.map +1 -0
  151. package/dist/domain/run.d.ts +857 -0
  152. package/dist/domain/run.d.ts.map +1 -0
  153. package/dist/domain/run.js +129 -0
  154. package/dist/domain/run.js.map +1 -0
  155. package/dist/domain/shared.d.ts +60 -0
  156. package/dist/domain/shared.d.ts.map +1 -0
  157. package/dist/domain/shared.js +66 -0
  158. package/dist/domain/shared.js.map +1 -0
  159. package/dist/domain/task.d.ts +316 -0
  160. package/dist/domain/task.d.ts.map +1 -0
  161. package/dist/domain/task.js +116 -0
  162. package/dist/domain/task.js.map +1 -0
  163. package/dist/index.d.ts +15 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +15 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/path/workspace-path.d.ts +6 -0
  168. package/dist/path/workspace-path.d.ts.map +1 -0
  169. package/dist/path/workspace-path.js +36 -0
  170. package/dist/path/workspace-path.js.map +1 -0
  171. package/dist/plugin/create-harness-plugin.d.ts +40 -0
  172. package/dist/plugin/create-harness-plugin.d.ts.map +1 -0
  173. package/dist/plugin/create-harness-plugin.js +169 -0
  174. package/dist/plugin/create-harness-plugin.js.map +1 -0
  175. package/dist/plugin/harness-agent-config.d.ts +6 -0
  176. package/dist/plugin/harness-agent-config.d.ts.map +1 -0
  177. package/dist/plugin/harness-agent-config.js +130 -0
  178. package/dist/plugin/harness-agent-config.js.map +1 -0
  179. package/dist/plugin/harness-chat-hook.d.ts +27 -0
  180. package/dist/plugin/harness-chat-hook.d.ts.map +1 -0
  181. package/dist/plugin/harness-chat-hook.js +72 -0
  182. package/dist/plugin/harness-chat-hook.js.map +1 -0
  183. package/dist/plugin/harness-chat-parts.d.ts +10 -0
  184. package/dist/plugin/harness-chat-parts.d.ts.map +1 -0
  185. package/dist/plugin/harness-chat-parts.js +36 -0
  186. package/dist/plugin/harness-chat-parts.js.map +1 -0
  187. package/dist/plugin/harness-chat-protocol.d.ts +9 -0
  188. package/dist/plugin/harness-chat-protocol.d.ts.map +1 -0
  189. package/dist/plugin/harness-chat-protocol.js +23 -0
  190. package/dist/plugin/harness-chat-protocol.js.map +1 -0
  191. package/dist/plugin/harness-coordinator.d.ts +33 -0
  192. package/dist/plugin/harness-coordinator.d.ts.map +1 -0
  193. package/dist/plugin/harness-coordinator.js +188 -0
  194. package/dist/plugin/harness-coordinator.js.map +1 -0
  195. package/dist/plugin/harness-intake-prompt.d.ts +2 -0
  196. package/dist/plugin/harness-intake-prompt.d.ts.map +1 -0
  197. package/dist/plugin/harness-intake-prompt.js +52 -0
  198. package/dist/plugin/harness-intake-prompt.js.map +1 -0
  199. package/dist/plugin/harness-intent.d.ts +72 -0
  200. package/dist/plugin/harness-intent.d.ts.map +1 -0
  201. package/dist/plugin/harness-intent.js +82 -0
  202. package/dist/plugin/harness-intent.js.map +1 -0
  203. package/dist/plugin/harness-parent-session-dispatcher.d.ts +46 -0
  204. package/dist/plugin/harness-parent-session-dispatcher.d.ts.map +1 -0
  205. package/dist/plugin/harness-parent-session-dispatcher.js +33 -0
  206. package/dist/plugin/harness-parent-session-dispatcher.js.map +1 -0
  207. package/dist/plugin/harness-requirement.d.ts +4 -0
  208. package/dist/plugin/harness-requirement.d.ts.map +1 -0
  209. package/dist/plugin/harness-requirement.js +37 -0
  210. package/dist/plugin/harness-requirement.js.map +1 -0
  211. package/dist/session/contracts.d.ts +178 -0
  212. package/dist/session/contracts.d.ts.map +1 -0
  213. package/dist/session/contracts.js +28 -0
  214. package/dist/session/contracts.js.map +1 -0
  215. package/dist/session/fake-session-adapter.d.ts +22 -0
  216. package/dist/session/fake-session-adapter.d.ts.map +1 -0
  217. package/dist/session/fake-session-adapter.js +238 -0
  218. package/dist/session/fake-session-adapter.js.map +1 -0
  219. package/dist/session/fake-session-errors.d.ts +23 -0
  220. package/dist/session/fake-session-errors.d.ts.map +1 -0
  221. package/dist/session/fake-session-errors.js +37 -0
  222. package/dist/session/fake-session-errors.js.map +1 -0
  223. package/dist/session/harness-agent-names.d.ts +51 -0
  224. package/dist/session/harness-agent-names.d.ts.map +1 -0
  225. package/dist/session/harness-agent-names.js +98 -0
  226. package/dist/session/harness-agent-names.js.map +1 -0
  227. package/dist/session/index.d.ts +9 -0
  228. package/dist/session/index.d.ts.map +1 -0
  229. package/dist/session/index.js +9 -0
  230. package/dist/session/index.js.map +1 -0
  231. package/dist/session/opencode-session-adapter.d.ts +9 -0
  232. package/dist/session/opencode-session-adapter.d.ts.map +1 -0
  233. package/dist/session/opencode-session-adapter.js +243 -0
  234. package/dist/session/opencode-session-adapter.js.map +1 -0
  235. package/dist/session/opencode-session-client.d.ts +58 -0
  236. package/dist/session/opencode-session-client.d.ts.map +1 -0
  237. package/dist/session/opencode-session-client.js +17 -0
  238. package/dist/session/opencode-session-client.js.map +1 -0
  239. package/dist/session/opencode-session-errors.d.ts +15 -0
  240. package/dist/session/opencode-session-errors.d.ts.map +1 -0
  241. package/dist/session/opencode-session-errors.js +19 -0
  242. package/dist/session/opencode-session-errors.js.map +1 -0
  243. package/dist/session/opencode-session-prompts.d.ts +12 -0
  244. package/dist/session/opencode-session-prompts.d.ts.map +1 -0
  245. package/dist/session/opencode-session-prompts.js +16 -0
  246. package/dist/session/opencode-session-prompts.js.map +1 -0
  247. package/dist/store/filesystem-run-store-io.d.ts +9 -0
  248. package/dist/store/filesystem-run-store-io.d.ts.map +1 -0
  249. package/dist/store/filesystem-run-store-io.js +85 -0
  250. package/dist/store/filesystem-run-store-io.js.map +1 -0
  251. package/dist/store/filesystem-run-store.d.ts +16 -0
  252. package/dist/store/filesystem-run-store.d.ts.map +1 -0
  253. package/dist/store/filesystem-run-store.js +286 -0
  254. package/dist/store/filesystem-run-store.js.map +1 -0
  255. package/dist/store/index.d.ts +5 -0
  256. package/dist/store/index.d.ts.map +1 -0
  257. package/dist/store/index.js +4 -0
  258. package/dist/store/index.js.map +1 -0
  259. package/dist/store/run-event.d.ts +786 -0
  260. package/dist/store/run-event.d.ts.map +1 -0
  261. package/dist/store/run-event.js +24 -0
  262. package/dist/store/run-event.js.map +1 -0
  263. package/dist/store/run-store-errors.d.ts +38 -0
  264. package/dist/store/run-store-errors.d.ts.map +1 -0
  265. package/dist/store/run-store-errors.js +62 -0
  266. package/dist/store/run-store-errors.js.map +1 -0
  267. package/dist/tools/context7-client.d.ts +22 -0
  268. package/dist/tools/context7-client.d.ts.map +1 -0
  269. package/dist/tools/context7-client.js +108 -0
  270. package/dist/tools/context7-client.js.map +1 -0
  271. package/dist/tools/grep-app-client.d.ts +21 -0
  272. package/dist/tools/grep-app-client.d.ts.map +1 -0
  273. package/dist/tools/grep-app-client.js +136 -0
  274. package/dist/tools/grep-app-client.js.map +1 -0
  275. package/dist/tools/harness-research-tools.d.ts +21 -0
  276. package/dist/tools/harness-research-tools.d.ts.map +1 -0
  277. package/dist/tools/harness-research-tools.js +101 -0
  278. package/dist/tools/harness-research-tools.js.map +1 -0
  279. package/dist/tools/lsp-client.d.ts +32 -0
  280. package/dist/tools/lsp-client.d.ts.map +1 -0
  281. package/dist/tools/lsp-client.js +234 -0
  282. package/dist/tools/lsp-client.js.map +1 -0
  283. package/dist/tools/lsp-json-rpc.d.ts +13 -0
  284. package/dist/tools/lsp-json-rpc.d.ts.map +1 -0
  285. package/dist/tools/lsp-json-rpc.js +98 -0
  286. package/dist/tools/lsp-json-rpc.js.map +1 -0
  287. package/dist/verification/command-policy.d.ts +11 -0
  288. package/dist/verification/command-policy.d.ts.map +1 -0
  289. package/dist/verification/command-policy.js +262 -0
  290. package/dist/verification/command-policy.js.map +1 -0
  291. package/dist/verification/contracts.d.ts +82 -0
  292. package/dist/verification/contracts.d.ts.map +1 -0
  293. package/dist/verification/contracts.js +6 -0
  294. package/dist/verification/contracts.js.map +1 -0
  295. package/dist/verification/fake-process-runner.d.ts +16 -0
  296. package/dist/verification/fake-process-runner.d.ts.map +1 -0
  297. package/dist/verification/fake-process-runner.js +28 -0
  298. package/dist/verification/fake-process-runner.js.map +1 -0
  299. package/dist/verification/index.d.ts +6 -0
  300. package/dist/verification/index.d.ts.map +1 -0
  301. package/dist/verification/index.js +5 -0
  302. package/dist/verification/index.js.map +1 -0
  303. package/dist/verification/node-process-runner.d.ts +12 -0
  304. package/dist/verification/node-process-runner.d.ts.map +1 -0
  305. package/dist/verification/node-process-runner.js +103 -0
  306. package/dist/verification/node-process-runner.js.map +1 -0
  307. package/dist/verification/verification-runner.d.ts +3 -0
  308. package/dist/verification/verification-runner.d.ts.map +1 -0
  309. package/dist/verification/verification-runner.js +101 -0
  310. package/dist/verification/verification-runner.js.map +1 -0
  311. package/dist/workspace/git-baseline.d.ts +63 -0
  312. package/dist/workspace/git-baseline.d.ts.map +1 -0
  313. package/dist/workspace/git-baseline.js +53 -0
  314. package/dist/workspace/git-baseline.js.map +1 -0
  315. package/dist/workspace/git-workspace-adapter.d.ts +43 -0
  316. package/dist/workspace/git-workspace-adapter.d.ts.map +1 -0
  317. package/dist/workspace/git-workspace-adapter.js +279 -0
  318. package/dist/workspace/git-workspace-adapter.js.map +1 -0
  319. package/dist/workspace/git-worktree-adapter.d.ts +45 -0
  320. package/dist/workspace/git-worktree-adapter.d.ts.map +1 -0
  321. package/dist/workspace/git-worktree-adapter.js +104 -0
  322. package/dist/workspace/git-worktree-adapter.js.map +1 -0
  323. package/dist/workspace/index.d.ts +7 -0
  324. package/dist/workspace/index.d.ts.map +1 -0
  325. package/dist/workspace/index.js +4 -0
  326. package/dist/workspace/index.js.map +1 -0
  327. package/package.json +45 -0
@@ -0,0 +1,94 @@
1
+ import { z } from "zod";
2
+ import { SchemaVersionSchema, VerificationCommandSchema } from "../domain/index.js";
3
+ import { WorkspaceRelativePathSchema } from "../path/workspace-path.js";
4
+ const HarnessProfileInputSchema = z
5
+ .object({
6
+ provider: z.string().trim().min(1).optional(),
7
+ model: z.string().trim().min(1).optional(),
8
+ })
9
+ .strict()
10
+ .readonly();
11
+ export const HarnessConfigInputSchema = z
12
+ .object({
13
+ schemaVersion: SchemaVersionSchema.optional(),
14
+ enabled: z.boolean().optional(),
15
+ harness: HarnessProfileInputSchema.optional(),
16
+ planner: HarnessProfileInputSchema.optional(),
17
+ worker: HarnessProfileInputSchema.optional(),
18
+ verifier: HarnessProfileInputSchema.optional(),
19
+ acceptance: HarnessProfileInputSchema.optional(),
20
+ failureAnalyzer: HarnessProfileInputSchema.optional(),
21
+ verificationCommands: z.array(VerificationCommandSchema).readonly().optional(),
22
+ maxRunAttempts: z.number().int().positive().optional(),
23
+ stateDirectory: WorkspaceRelativePathSchema.optional(),
24
+ })
25
+ .strict()
26
+ .readonly();
27
+ export const HarnessProfileSchema = z
28
+ .object({
29
+ provider: z.string().trim().min(1),
30
+ model: z.string().trim().min(1),
31
+ })
32
+ .readonly();
33
+ export const HarnessConfigSchema = z
34
+ .object({
35
+ schemaVersion: SchemaVersionSchema,
36
+ enabled: z.boolean(),
37
+ harness: HarnessProfileSchema,
38
+ planner: HarnessProfileSchema,
39
+ worker: HarnessProfileSchema,
40
+ verifier: HarnessProfileSchema,
41
+ acceptance: HarnessProfileSchema,
42
+ failureAnalyzer: HarnessProfileSchema,
43
+ verificationCommands: z.array(VerificationCommandSchema).readonly(),
44
+ maxRunAttempts: z.number().int().positive(),
45
+ stateDirectory: WorkspaceRelativePathSchema,
46
+ })
47
+ .strict()
48
+ .readonly();
49
+ export const parseHarnessConfig = (config, availableModels) => {
50
+ const parsedConfig = HarnessConfigSchema.parse(config);
51
+ validateAvailableModels(parsedConfig, availableModels);
52
+ return parsedConfig;
53
+ };
54
+ const validateAvailableModels = (config, availableModels) => {
55
+ if (availableModels === undefined) {
56
+ return;
57
+ }
58
+ const issues = [
59
+ ...validateProfileAvailability(config.harness, availableModels, "harness"),
60
+ ...validateProfileAvailability(config.planner, availableModels, "planner"),
61
+ ...validateProfileAvailability(config.worker, availableModels, "worker"),
62
+ ...validateProfileAvailability(config.verifier, availableModels, "verifier"),
63
+ ...validateProfileAvailability(config.acceptance, availableModels, "acceptance"),
64
+ ...validateProfileAvailability(config.failureAnalyzer, availableModels, "failureAnalyzer"),
65
+ ];
66
+ if (issues.length > 0) {
67
+ throw new z.ZodError(issues);
68
+ }
69
+ };
70
+ const validateProfileAvailability = (profile, availableModels, role) => {
71
+ const providerModels = availableModels[profile.provider];
72
+ if (providerModels === undefined) {
73
+ return [
74
+ {
75
+ code: "custom",
76
+ input: profile.provider,
77
+ message: `Unknown provider: ${profile.provider}`,
78
+ path: [role, "provider"],
79
+ },
80
+ ];
81
+ }
82
+ if (!providerModels.includes(profile.model)) {
83
+ return [
84
+ {
85
+ code: "custom",
86
+ input: profile.model,
87
+ message: `Unknown model for provider ${profile.provider}: ${profile.model}`,
88
+ path: [role, "model"],
89
+ },
90
+ ];
91
+ }
92
+ return [];
93
+ };
94
+ //# sourceMappingURL=config-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config/config-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { z } from "zod";
2
+ import type { VerificationCommandSchema } from "../domain/index.js";
3
+ export type AvailableModelRegistry = Readonly<Record<string, readonly string[]>>;
4
+ export type MergedHarnessProfile = {
5
+ readonly provider: string;
6
+ readonly model: string;
7
+ };
8
+ export type MergedHarnessConfig = {
9
+ readonly schemaVersion: string;
10
+ readonly enabled: boolean;
11
+ readonly harness: MergedHarnessProfile;
12
+ readonly planner: MergedHarnessProfile;
13
+ readonly worker: MergedHarnessProfile;
14
+ readonly verifier: MergedHarnessProfile;
15
+ readonly acceptance: MergedHarnessProfile;
16
+ readonly failureAnalyzer: MergedHarnessProfile;
17
+ readonly verificationCommands: readonly z.infer<typeof VerificationCommandSchema>[];
18
+ readonly maxRunAttempts: number;
19
+ readonly stateDirectory: string;
20
+ };
21
+ //# sourceMappingURL=config-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../../src/config/config-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAEnE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;AAEhF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAA;IACtC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAA;IACzC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAA;IAC9C,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,EAAE,CAAA;IACnF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../src/config/config-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
2
+ export { ConfigLoadError } from "./config-errors.js";
3
+ export type { HarnessAgentProfile, HarnessConfig, HarnessConfigInput, HarnessProfileInput, } from "./config-schema.js";
4
+ export type { AvailableModelRegistry } from "./config-types.js";
5
+ export { type LoadHarnessConfigOptions, loadHarnessConfig, } from "./load-harness-config.js";
6
+ //# sourceMappingURL=harness-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-config.d.ts","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EACL,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
2
+ export { ConfigLoadError } from "./config-errors.js";
3
+ export { loadHarnessConfig, } from "./load-harness-config.js";
4
+ //# sourceMappingURL=harness-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-config.js","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAQpD,OAAO,EAEL,iBAAiB,GAClB,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { type AvailableModelRegistry, ConfigLoadError, HARNESS_CONFIG_DEFAULTS, type HarnessAgentProfile, type HarnessConfig, type HarnessConfigInput, type HarnessProfileInput, type LoadHarnessConfigOptions, loadHarnessConfig, } from "./harness-config.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,eAAe,EACf,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { ConfigLoadError, HARNESS_CONFIG_DEFAULTS, loadHarnessConfig, } from "./harness-config.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,uBAAuB,EAMvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { type HarnessConfig, type HarnessConfigInput } from "./config-schema.js";
2
+ import type { AvailableModelRegistry } from "./config-types.js";
3
+ export type LoadHarnessConfigOptions = {
4
+ readonly projectRoot: string;
5
+ readonly runOverride?: HarnessConfigInput;
6
+ readonly availableModels?: AvailableModelRegistry;
7
+ };
8
+ export declare const loadHarnessConfig: (options: LoadHarnessConfigOptions) => Promise<HarnessConfig>;
9
+ //# sourceMappingURL=load-harness-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-harness-config.d.ts","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAsB,MAAM,oBAAoB,CAAA;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE/D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,SAAS,wBAAwB,KAChC,OAAO,CAAC,aAAa,CAmBvB,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { join } from "node:path";
2
+ import { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
3
+ import { ConfigLoadError } from "./config-errors.js";
4
+ import { readHarnessConfigFile } from "./config-file.js";
5
+ import { mergeHarnessConfig } from "./config-merge.js";
6
+ import { parseHarnessConfig } from "./config-schema.js";
7
+ export const loadHarnessConfig = async (options) => {
8
+ const sourcePath = join(options.projectRoot, ".harness", "config.yaml");
9
+ try {
10
+ const projectConfig = await readHarnessConfigFile(sourcePath);
11
+ const mergedConfig = mergeHarnessConfig({
12
+ defaults: HARNESS_CONFIG_DEFAULTS,
13
+ projectConfig,
14
+ runOverride: options.runOverride,
15
+ });
16
+ return parseHarnessConfig(mergedConfig, options.availableModels);
17
+ }
18
+ catch (error) {
19
+ if (error instanceof ConfigLoadError) {
20
+ throw error;
21
+ }
22
+ throw new ConfigLoadError(sourcePath, error);
23
+ }
24
+ };
25
+ //# sourceMappingURL=load-harness-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-harness-config.js","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAA+C,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AASpG,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAAiC,EACT,EAAE;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;IAEvE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,kBAAkB,CAAC;YACtC,QAAQ,EAAE,uBAAuB;YACjC,aAAa;YACb,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAA;QAEF,OAAO,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,MAAM,KAAK,CAAA;QACb,CAAC;QAED,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { type ZodType } from "zod";
2
+ import type { SessionRunResult } from "../session/index.js";
3
+ type StructuredAgentOutputErrorCode = "agent-status-transition-denied" | "unsupported-schema-version";
4
+ type StructuredAgentOutputErrorDetails = {
5
+ readonly role: string;
6
+ readonly suggestedStatus?: string;
7
+ readonly allowedStatuses?: readonly string[];
8
+ readonly schemaVersion?: string;
9
+ readonly supportedMajorVersion?: number;
10
+ };
11
+ export declare class StructuredAgentOutputError extends Error {
12
+ readonly code: StructuredAgentOutputErrorCode;
13
+ readonly details: StructuredAgentOutputErrorDetails;
14
+ readonly name = "StructuredAgentOutputError";
15
+ constructor(code: StructuredAgentOutputErrorCode, details: StructuredAgentOutputErrorDetails);
16
+ }
17
+ export declare const readAgentOutput: (result: SessionRunResult) => string;
18
+ export declare const parseAgentJson: <T>(text: string, schema: ZodType<T>, role: string) => T;
19
+ export declare const assertAgentSuggestedStatus: (role: string, suggestedStatus: string, allowedStatuses: readonly string[]) => void;
20
+ export {};
21
+ //# sourceMappingURL=agent-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-output.d.ts","sourceRoot":"","sources":["../../src/controller/agent-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,KAAK,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAK3D,KAAK,8BAA8B,GAC/B,gCAAgC,GAChC,4BAA4B,CAAA;AAEhC,KAAK,iCAAiC,GAAG;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CACxC,CAAA;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAIjD,QAAQ,CAAC,IAAI,EAAE,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,iCAAiC;IAJrD,QAAQ,CAAC,IAAI,gCAA+B;gBAGjC,IAAI,EAAE,8BAA8B,EACpC,OAAO,EAAE,iCAAiC;CAItD;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,gBAAgB,KAAG,MAS1D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,MAAM,MAAM,EAAE,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,KAAG,CAclF,CAAA;AAED,eAAO,MAAM,0BAA0B,GACrC,MAAM,MAAM,EACZ,iBAAiB,MAAM,EACvB,iBAAiB,SAAS,MAAM,EAAE,KACjC,IASF,CAAA"}
@@ -0,0 +1,75 @@
1
+ import { ZodError } from "zod";
2
+ import { AgentOutputParseError, AgentRunFailedError, RunCancellationError } from "./errors.js";
3
+ const SUPPORTED_SCHEMA_MAJOR_VERSION = 1;
4
+ export class StructuredAgentOutputError extends Error {
5
+ code;
6
+ details;
7
+ name = "StructuredAgentOutputError";
8
+ constructor(code, details) {
9
+ super(createStructuredErrorMessage(code, details));
10
+ this.code = code;
11
+ this.details = details;
12
+ }
13
+ }
14
+ export const readAgentOutput = (result) => {
15
+ switch (result.kind) {
16
+ case "completed":
17
+ return result.outputText;
18
+ case "failed":
19
+ throw new AgentRunFailedError(result.role, result.error.message);
20
+ case "aborted":
21
+ throw new RunCancellationError(result.sessionId);
22
+ }
23
+ };
24
+ export const parseAgentJson = (text, schema, role) => {
25
+ try {
26
+ const parsed = JSON.parse(text);
27
+ assertSupportedSchemaVersion(parsed, role);
28
+ return schema.parse(parsed);
29
+ }
30
+ catch (error) {
31
+ if (error instanceof StructuredAgentOutputError) {
32
+ throw new AgentOutputParseError(role, error.message, { cause: error });
33
+ }
34
+ if (error instanceof ZodError || error instanceof SyntaxError) {
35
+ throw new AgentOutputParseError(role, error.message, { cause: error });
36
+ }
37
+ throw error;
38
+ }
39
+ };
40
+ export const assertAgentSuggestedStatus = (role, suggestedStatus, allowedStatuses) => {
41
+ if (allowedStatuses.includes(suggestedStatus)) {
42
+ return;
43
+ }
44
+ throw new StructuredAgentOutputError("agent-status-transition-denied", {
45
+ role,
46
+ suggestedStatus,
47
+ allowedStatuses,
48
+ });
49
+ };
50
+ const assertSupportedSchemaVersion = (value, role) => {
51
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
52
+ return;
53
+ }
54
+ const schemaVersion = Reflect.get(value, "schemaVersion");
55
+ if (typeof schemaVersion !== "string") {
56
+ return;
57
+ }
58
+ const major = Number.parseInt(schemaVersion.split(".")[0] ?? "", 10);
59
+ if (major !== SUPPORTED_SCHEMA_MAJOR_VERSION) {
60
+ throw new StructuredAgentOutputError("unsupported-schema-version", {
61
+ role,
62
+ schemaVersion,
63
+ supportedMajorVersion: SUPPORTED_SCHEMA_MAJOR_VERSION,
64
+ });
65
+ }
66
+ };
67
+ const createStructuredErrorMessage = (code, details) => {
68
+ switch (code) {
69
+ case "agent-status-transition-denied":
70
+ return `${details.role} suggested unsupported status ${details.suggestedStatus}; allowed: ${details.allowedStatuses?.join(", ") ?? "none"}`;
71
+ case "unsupported-schema-version":
72
+ return `${details.role} returned unsupported schemaVersion ${details.schemaVersion}; supported major is ${details.supportedMajorVersion}`;
73
+ }
74
+ };
75
+ //# sourceMappingURL=agent-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-output.js","sourceRoot":"","sources":["../../src/controller/agent-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { RunId } from "../domain/index.js";
2
+ import type { HarnessSessionRole, SessionAdapter, SessionEvidenceReference, SessionOutputContract } from "../session/index.js";
3
+ import type { RunStore } from "../store/index.js";
4
+ import type { ControllerIdSource } from "./contracts.js";
5
+ export type SendAgentInput = {
6
+ readonly runId: RunId;
7
+ readonly role: HarnessSessionRole;
8
+ readonly title: string;
9
+ readonly brief: string;
10
+ readonly constraints: readonly string[];
11
+ readonly evidence: readonly SessionEvidenceReference[];
12
+ readonly outputContract: SessionOutputContract;
13
+ readonly messageLabel: string;
14
+ readonly systemPrompt?: string;
15
+ readonly timeoutMs?: number;
16
+ readonly parentSessionId?: string;
17
+ readonly workingDirectory?: string;
18
+ };
19
+ export type AgentSessionRuntime = {
20
+ readonly sendAgent: (input: SendAgentInput) => Promise<string>;
21
+ readonly abortActiveSession: (runId: RunId) => Promise<void>;
22
+ readonly hasActiveSession: (runId: RunId) => boolean;
23
+ readonly isCancelled: (runId: RunId) => boolean;
24
+ readonly markCancelled: (runId: RunId) => void;
25
+ readonly listOrphanSessions: () => Promise<readonly OrphanSession[]>;
26
+ readonly rebindSession: (input: RebindSessionInput) => Promise<void>;
27
+ readonly safeAbandonSession: (input: AbandonSessionInput) => Promise<void>;
28
+ };
29
+ export type OrphanSession = {
30
+ readonly runId: RunId;
31
+ readonly sessionId: string;
32
+ readonly role: HarnessSessionRole;
33
+ readonly state: "created" | "rebound";
34
+ };
35
+ export type RebindSessionInput = {
36
+ readonly runId: RunId;
37
+ readonly sessionId: string;
38
+ readonly actorId: string;
39
+ };
40
+ export type AbandonSessionInput = RebindSessionInput & {
41
+ readonly reason: string;
42
+ };
43
+ export declare const createAgentSessionRuntime: (input: {
44
+ readonly sessionAdapter: SessionAdapter;
45
+ readonly ids: ControllerIdSource;
46
+ readonly store: RunStore;
47
+ readonly workingDirectory: string;
48
+ }) => AgentSessionRuntime;
49
+ //# sourceMappingURL=agent-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAIxD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,wBAAwB,EAAE,CAAA;IACtD,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAA;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9D,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IACpD,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;IACpE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3E,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAOlF,eAAO,MAAM,yBAAyB,GAAI,OAAO;IAC/C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC,KAAG,mBAgOH,CAAA"}
@@ -0,0 +1,220 @@
1
+ import { readAgentOutput } from "./agent-output.js";
2
+ import { RunCancellationError } from "./errors.js";
3
+ import { roleSystemPrompt } from "./role-prompts.js";
4
+ export const createAgentSessionRuntime = (input) => {
5
+ const activeSessions = new Map();
6
+ const cancelledRunIds = new Set();
7
+ const throwIfCancelled = (runId) => {
8
+ if (cancelledRunIds.has(runId)) {
9
+ throw new RunCancellationError(runId);
10
+ }
11
+ };
12
+ const createPromptInput = (request) => ({
13
+ brief: request.brief,
14
+ constraints: request.constraints,
15
+ evidence: request.evidence,
16
+ outputContract: request.outputContract,
17
+ });
18
+ const appendSessionEvent = async (runId, type, sessionId, payload) => {
19
+ await input.store.appendEvents(runId, [
20
+ {
21
+ schemaVersion: "1.0.0",
22
+ eventId: input.ids.createEventId(`${type}-${runId}-${sessionId}`),
23
+ idempotencyKey: input.ids.createEventId(`session-${type}-${runId}-${sessionId}`),
24
+ runId,
25
+ type,
26
+ timestamp: new Date().toISOString(),
27
+ payload,
28
+ },
29
+ ]);
30
+ };
31
+ const setActiveSession = (runId, session) => {
32
+ const sessions = activeSessions.get(runId) ?? new Map();
33
+ sessions.set(session.sessionId, session);
34
+ activeSessions.set(runId, sessions);
35
+ };
36
+ const releaseActiveSession = async (runId, sessionId, reason) => {
37
+ const sessions = activeSessions.get(runId);
38
+ const activeSession = sessions?.get(sessionId);
39
+ if (activeSession === undefined) {
40
+ return;
41
+ }
42
+ if (activeSession.timeoutId !== undefined) {
43
+ clearTimeout(activeSession.timeoutId);
44
+ }
45
+ sessions?.delete(sessionId);
46
+ if (sessions?.size === 0) {
47
+ activeSessions.delete(runId);
48
+ }
49
+ await input.sessionAdapter.release({ sessionId: activeSession.sessionId, reason });
50
+ };
51
+ const requireOrphanSession = async (runId, sessionId) => {
52
+ const orphanSession = (await listOrphanSessions()).find((candidate) => candidate.runId === runId && candidate.sessionId === sessionId);
53
+ if (orphanSession === undefined) {
54
+ throw new TypeError(`orphan session ${sessionId} for run ${runId} does not exist`);
55
+ }
56
+ return orphanSession;
57
+ };
58
+ const listOrphanSessions = async () => {
59
+ if (input.store.listRunIds === undefined) {
60
+ return [];
61
+ }
62
+ const orphanSessions = [];
63
+ for (const runId of await input.store.listRunIds()) {
64
+ const events = await input.store.listEvents(runId);
65
+ const sessions = new Map();
66
+ for (const event of events) {
67
+ const sessionId = readStringPayload(event.payload, "sessionId");
68
+ if (sessionId === undefined) {
69
+ continue;
70
+ }
71
+ if (event.type === "session.created") {
72
+ const role = readRolePayload(event.payload);
73
+ if (role !== undefined) {
74
+ sessions.set(sessionId, { runId, sessionId, role, state: "created" });
75
+ }
76
+ }
77
+ else if (event.type === "session.released" || event.type === "session.safe-abandoned") {
78
+ sessions.delete(sessionId);
79
+ }
80
+ else if (event.type === "session.rebound") {
81
+ const current = sessions.get(sessionId);
82
+ if (current !== undefined) {
83
+ sessions.set(sessionId, { ...current, state: "rebound" });
84
+ }
85
+ }
86
+ }
87
+ orphanSessions.push(...sessions.values());
88
+ }
89
+ return orphanSessions;
90
+ };
91
+ const createTimeout = (runId, sessionId, timeoutMs) => {
92
+ if (timeoutMs === undefined) {
93
+ return undefined;
94
+ }
95
+ return setTimeout(() => {
96
+ void input.sessionAdapter.abort({ sessionId, reason: "timeout" }).catch(() => undefined);
97
+ void releaseActiveSession(runId, sessionId, "timeout");
98
+ }, timeoutMs);
99
+ };
100
+ return {
101
+ async sendAgent(request) {
102
+ throwIfCancelled(request.runId);
103
+ const session = await input.sessionAdapter.create({
104
+ role: request.role,
105
+ title: request.title,
106
+ workingDirectory: request.workingDirectory ?? input.workingDirectory,
107
+ ...(request.parentSessionId === undefined
108
+ ? {}
109
+ : { parentSessionId: request.parentSessionId }),
110
+ promptInput: createPromptInput(request),
111
+ ...(request.timeoutMs === undefined ? {} : { timeoutMs: request.timeoutMs }),
112
+ });
113
+ const timeoutId = createTimeout(request.runId, session.session.sessionId, request.timeoutMs);
114
+ setActiveSession(request.runId, timeoutId === undefined
115
+ ? { sessionId: session.session.sessionId }
116
+ : { sessionId: session.session.sessionId, timeoutId });
117
+ await appendSessionEvent(request.runId, "session.created", session.session.sessionId, {
118
+ sessionId: session.session.sessionId,
119
+ role: request.role,
120
+ });
121
+ try {
122
+ const result = await input.sessionAdapter.send({
123
+ sessionId: session.session.sessionId,
124
+ messageId: input.ids.createMessageId(request.messageLabel),
125
+ prompt: request.brief,
126
+ promptInput: createPromptInput(request),
127
+ systemPrompt: request.systemPrompt ?? roleSystemPrompt(request.role),
128
+ });
129
+ throwIfCancelled(request.runId);
130
+ return readAgentOutput(result);
131
+ }
132
+ finally {
133
+ await appendSessionEvent(request.runId, "session.released", session.session.sessionId, {
134
+ sessionId: session.session.sessionId,
135
+ reason: "completed",
136
+ });
137
+ await releaseActiveSession(request.runId, session.session.sessionId, "completed");
138
+ }
139
+ },
140
+ async abortActiveSession(runId) {
141
+ cancelledRunIds.add(runId);
142
+ const sessions = activeSessions.get(runId);
143
+ if (sessions !== undefined) {
144
+ for (const activeSession of sessions.values()) {
145
+ await input.sessionAdapter.abort({
146
+ sessionId: activeSession.sessionId,
147
+ reason: "controller",
148
+ });
149
+ await releaseActiveSession(runId, activeSession.sessionId, "controller");
150
+ }
151
+ }
152
+ },
153
+ hasActiveSession(runId) {
154
+ return (activeSessions.get(runId)?.size ?? 0) > 0;
155
+ },
156
+ isCancelled(runId) {
157
+ return cancelledRunIds.has(runId);
158
+ },
159
+ markCancelled(runId) {
160
+ cancelledRunIds.add(runId);
161
+ },
162
+ async listOrphanSessions() {
163
+ return listOrphanSessions();
164
+ },
165
+ async rebindSession(session) {
166
+ const orphanSession = await requireOrphanSession(session.runId, session.sessionId);
167
+ const snapshot = input.sessionAdapter.getSession(session.sessionId);
168
+ if (snapshot === undefined || snapshot.role !== orphanSession.role) {
169
+ throw new TypeError(`session ${session.sessionId} is not available for rebind`);
170
+ }
171
+ setActiveSession(session.runId, { sessionId: session.sessionId });
172
+ await appendSessionEvent(session.runId, "session.rebound", session.sessionId, {
173
+ sessionId: session.sessionId,
174
+ actorId: session.actorId,
175
+ });
176
+ },
177
+ async safeAbandonSession(session) {
178
+ await requireOrphanSession(session.runId, session.sessionId);
179
+ const sessions = activeSessions.get(session.runId);
180
+ if (sessions?.has(session.sessionId) === true) {
181
+ sessions.delete(session.sessionId);
182
+ if (sessions.size === 0) {
183
+ activeSessions.delete(session.runId);
184
+ }
185
+ }
186
+ await input.sessionAdapter.release({
187
+ sessionId: session.sessionId,
188
+ reason: `safe-abandon:${session.reason}`,
189
+ });
190
+ await appendSessionEvent(session.runId, "session.safe-abandoned", session.sessionId, {
191
+ sessionId: session.sessionId,
192
+ actorId: session.actorId,
193
+ reason: session.reason,
194
+ });
195
+ },
196
+ };
197
+ };
198
+ const readStringPayload = (payload, key) => {
199
+ if (typeof payload !== "object" || payload === null || Array.isArray(payload)) {
200
+ return undefined;
201
+ }
202
+ const value = Reflect.get(payload, key);
203
+ return typeof value === "string" ? value : undefined;
204
+ };
205
+ const readRolePayload = (payload) => {
206
+ const role = readStringPayload(payload, "role");
207
+ switch (role) {
208
+ case "intake":
209
+ case "planner":
210
+ case "worker":
211
+ case "verifier":
212
+ case "acceptance":
213
+ case "failure-analyzer":
214
+ case "repair-worker":
215
+ return role;
216
+ default:
217
+ return undefined;
218
+ }
219
+ };
220
+ //# sourceMappingURL=agent-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"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"}